From 25f44ea3f4064e7aa1854d691950ea5ed1625679 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Fri, 19 Feb 2021 22:14:54 +0100 Subject: [PATCH 001/558] Initial commit --- README.md | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..da5045d99 --- /dev/null +++ b/README.md @@ -0,0 +1,65 @@ +# ansible README + +This is the README for your extension "ansible". After writing up a brief description, we recommend including the following sections. + +## Features + +Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. + +For example if there is an image subfolder under your extension project workspace: + +\!\[feature X\]\(images/feature-x.png\) + +> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. + +## Requirements + +If you have any requirements or dependencies, add a section describing those and how to install and configure them. + +## Extension Settings + +Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. + +For example: + +This extension contributes the following settings: + +* `myExtension.enable`: enable/disable this extension +* `myExtension.thing`: set to `blah` to do something + +## Known Issues + +Calling out known issues can help limit users opening duplicate issues against your extension. + +## Release Notes + +Users appreciate release notes as you update your extension. + +### 1.0.0 + +Initial release of ... + +### 1.0.1 + +Fixed issue #. + +### 1.1.0 + +Added features X, Y, and Z. + +----------------------------------------------------------------------------------------------------------- + +## Working with Markdown + +**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: + +* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux) +* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux) +* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets + +### For more information + +* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) +* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) + +**Enjoy!** From eb429742071783fbd5bd949beed44a9ad7a1a0b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Fri, 19 Feb 2021 22:16:16 +0100 Subject: [PATCH 002/558] Plugin base --- .gitattributes | 3 +++ .gitignore | 2 ++ .vscode/launch.json | 17 +++++++++++++++++ .vscodeignore | 4 ++++ CHANGELOG.md | 9 +++++++++ language-configuration.json | 30 ++++++++++++++++++++++++++++++ package.json | 25 +++++++++++++++++++++++++ syntaxes/ansible.tmLanguage.json | 32 ++++++++++++++++++++++++++++++++ vsc-extension-quickstart.md | 29 +++++++++++++++++++++++++++++ 9 files changed, 151 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .vscode/launch.json create mode 100644 .vscodeignore create mode 100644 CHANGELOG.md create mode 100644 language-configuration.json create mode 100644 package.json create mode 100644 syntaxes/ansible.tmLanguage.json create mode 100644 vsc-extension-quickstart.md diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..13bc9c2ee --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +# Set default behavior to automatically normalize line endings. +* text=auto + diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..67dfeb3eb --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +*.vsix \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..0e191b592 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +// A launch configuration that launches the extension inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ] + } + ] +} \ No newline at end of file diff --git a/.vscodeignore b/.vscodeignore new file mode 100644 index 000000000..f369b5e55 --- /dev/null +++ b/.vscodeignore @@ -0,0 +1,4 @@ +.vscode/** +.vscode-test/** +.gitignore +vsc-extension-quickstart.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..b193def85 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +# Change Log + +All notable changes to the "ansible" extension will be documented in this file. + +Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. + +## [Unreleased] + +- Initial release \ No newline at end of file diff --git a/language-configuration.json b/language-configuration.json new file mode 100644 index 000000000..8f162a0c4 --- /dev/null +++ b/language-configuration.json @@ -0,0 +1,30 @@ +{ + "comments": { + // symbol used for single line comment. Remove this entry if your language does not support line comments + "lineComment": "//", + // symbols used for start and end a block comment. Remove this entry if your language does not support block comments + "blockComment": [ "/*", "*/" ] + }, + // symbols used as brackets + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + // symbols that are auto closed when typing + "autoClosingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ], + // symbols that can be used to surround a selection + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ] +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 000000000..bc0b6271e --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "ansible", + "displayName": "Ansible", + "description": "Ansible language support", + "version": "0.0.1", + "engines": { + "vscode": "^1.53.0" + }, + "categories": [ + "Programming Languages" + ], + "contributes": { + "languages": [{ + "id": "ansible", + "aliases": ["Ansible", "ansible"], + "extensions": [".yml",".yaml"], + "configuration": "./language-configuration.json" + }], + "grammars": [{ + "language": "ansible", + "scopeName": "source.ansible", + "path": "./syntaxes/ansible.tmLanguage.json" + }] + } +} \ No newline at end of file diff --git a/syntaxes/ansible.tmLanguage.json b/syntaxes/ansible.tmLanguage.json new file mode 100644 index 000000000..814528783 --- /dev/null +++ b/syntaxes/ansible.tmLanguage.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "Ansible", + "patterns": [ + { + "include": "#keywords" + }, + { + "include": "#strings" + } + ], + "repository": { + "keywords": { + "patterns": [{ + "name": "keyword.control.ansible", + "match": "\\b(if|while|for|return)\\b" + }] + }, + "strings": { + "name": "string.quoted.double.ansible", + "begin": "\"", + "end": "\"", + "patterns": [ + { + "name": "constant.character.escape.ansible", + "match": "\\\\." + } + ] + } + }, + "scopeName": "source.ansible" +} \ No newline at end of file diff --git a/vsc-extension-quickstart.md b/vsc-extension-quickstart.md new file mode 100644 index 000000000..9b8c0d900 --- /dev/null +++ b/vsc-extension-quickstart.md @@ -0,0 +1,29 @@ +# Welcome to your VS Code Extension + +## What's in the folder + +* This folder contains all of the files necessary for your extension. +* `package.json` - this is the manifest file in which you declare your language support and define the location of the grammar file that has been copied into your extension. +* `syntaxes/ansible.tmLanguage.json` - this is the Text mate grammar file that is used for tokenization. +* `language-configuration.json` - this is the language configuration, defining the tokens that are used for comments and brackets. + +## Get up and running straight away + +* Make sure the language configuration settings in `language-configuration.json` are accurate. +* Press `F5` to open a new window with your extension loaded. +* Create a new file with a file name suffix matching your language. +* Verify that syntax highlighting works and that the language configuration settings are working. + +## Make changes + +* You can relaunch the extension from the debug toolbar after making changes to the files listed above. +* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. + +## Add more language features + +* To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at https://code.visualstudio.com/docs + +## Install your extension + +* To start using your extension with Visual Studio Code copy it into the `/.vscode/extensions` folder and restart Code. +* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension. From d551c15ca90b823930aa8c1c6962d1874252a071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sat, 20 Feb 2021 10:54:38 +0100 Subject: [PATCH 003/558] Imported YAML.tmLanguage --- .gitignore | 1 + syntaxes/external/YAML.tmLanguage | 1153 +++++++++++++++++++++++++++++ 2 files changed, 1154 insertions(+) create mode 100644 syntaxes/external/YAML.tmLanguage diff --git a/.gitignore b/.gitignore index 67dfeb3eb..6fc6d1ab9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +.ignore/ node_modules *.vsix \ No newline at end of file diff --git a/syntaxes/external/YAML.tmLanguage b/syntaxes/external/YAML.tmLanguage new file mode 100644 index 000000000..c9283d243 --- /dev/null +++ b/syntaxes/external/YAML.tmLanguage @@ -0,0 +1,1153 @@ + + + + + fileTypes + + yaml + yml + rviz + reek + clang-format + yaml-tmlanguage + syntax + sublime-syntax + + firstLineMatch + ^%YAML( ?1.\d+)? + keyEquivalent + ^~Y + name + YAML + patterns + + + include + #comment + + + include + #property + + + include + #directive + + + match + ^--- + name + entity.other.document.begin.yaml + + + match + ^\.{3} + name + entity.other.document.end.yaml + + + include + #node + + + repository + + block-collection + + patterns + + + include + #block-sequence + + + include + #block-mapping + + + + block-mapping + + patterns + + + include + #block-pair + + + + block-node + + patterns + + + include + #prototype + + + include + #block-scalar + + + include + #block-collection + + + include + #flow-scalar-plain-out + + + include + #flow-node + + + + block-pair + + patterns + + + begin + \? + beginCaptures + + 1 + + name + punctuation.definition.key-value.begin.yaml + + + end + (?=\?)|^ *(:)|(:) + endCaptures + + 1 + + name + punctuation.separator.key-value.mapping.yaml + + 2 + + name + invalid.illegal.expected-newline.yaml + + + name + meta.block-mapping.yaml + patterns + + + include + #block-node + + + + + begin + (?x) (?= + (?x: + [^\s[-?:,\[\]{}#&*!|>'"%@`]] + | [?:-] \S + ) + ( + [^\s:] + | : \S + | \s+ (?![#\s]) + )* + \s* + : + (\s|$) + ) + + end + (?x) (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + ) + + patterns + + + include + #flow-scalar-plain-out-implicit-type + + + begin + (?x) + [^\s[-?:,\[\]{}#&*!|>'"%@`]] + | [?:-] \S + + beginCaptures + + 0 + + name + entity.name.tag.yaml + + + contentName + entity.name.tag.yaml + end + (?x) (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + ) + + name + string.unquoted.plain.out.yaml + + + + + match + :(?=\s|$) + name + punctuation.separator.key-value.mapping.yaml + + + + block-scalar + + begin + (?:(\|)|(>))([1-9])?([-+])?(.*\n?) + beginCaptures + + 1 + + name + keyword.control.flow.block-scalar.literal.yaml + + 2 + + name + keyword.control.flow.block-scalar.folded.yaml + + 3 + + name + constant.numeric.indentation-indicator.yaml + + 4 + + name + storage.modifier.chomping-indicator.yaml + + 5 + + patterns + + + include + #comment + + + match + .+ + name + invalid.illegal.expected-comment-or-newline.yaml + + + + + end + ^(?=\S)|(?!\G) + patterns + + + begin + ^([ ]+)(?! ) + end + ^(?!\1|\s*$) + name + string.unquoted.block.yaml + + + + block-sequence + + match + (-)(?!\S) + name + punctuation.definition.block.sequence.item.yaml + + comment + + begin + (?:(^[ \t]*)|[ \t]+)(?=#\p{Print}*$) + beginCaptures + + 1 + + name + punctuation.whitespace.comment.leading.yaml + + + end + (?!\G) + patterns + + + begin + # + beginCaptures + + 0 + + name + punctuation.definition.comment.yaml + + + end + \n + name + comment.line.number-sign.yaml + + + + directive + + begin + ^% + beginCaptures + + 0 + + name + punctuation.definition.directive.begin.yaml + + + end + (?=$|[ \t]+($|#)) + name + meta.directive.yaml + patterns + + + captures + + 1 + + name + keyword.other.directive.yaml.yaml + + 2 + + name + constant.numeric.yaml-version.yaml + + + match + \G(YAML)[ \t]+(\d+\.\d+) + + + captures + + 1 + + name + keyword.other.directive.tag.yaml + + 2 + + name + storage.type.tag-handle.yaml + + 3 + + name + support.type.tag-prefix.yaml + + + match + (?x) + \G + (TAG) + (?:[ \t]+ + ((?:!(?:[0-9A-Za-z\-]*!)?)) + (?:[ \t]+ ( + ! (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$,_.!~*'()\[\]] )* + | (?![,!\[\]{}]) (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$,_.!~*'()\[\]] )+ + ) + )? + )? + + + + captures + + 1 + + name + support.other.directive.reserved.yaml + + 2 + + name + string.unquoted.directive-name.yaml + + 3 + + name + string.unquoted.directive-parameter.yaml + + + match + (?x) \G (\w+) (?:[ \t]+ (\w+) (?:[ \t]+ (\w+))? )? + + + match + \S+ + name + invalid.illegal.unrecognized.yaml + + + + flow-alias + + captures + + 1 + + name + keyword.control.flow.alias.yaml + + 2 + + name + punctuation.definition.alias.yaml + + 3 + + name + variable.other.alias.yaml + + 4 + + name + invalid.illegal.character.anchor.yaml + + + match + ((\*))([^\s\[\]/{/},]+)([^\s\]},]\S*)? + + flow-collection + + patterns + + + include + #flow-sequence + + + include + #flow-mapping + + + + flow-mapping + + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.mapping.begin.yaml + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.mapping.end.yaml + + + name + meta.flow-mapping.yaml + patterns + + + include + #prototype + + + match + , + name + punctuation.separator.mapping.yaml + + + include + #flow-pair + + + + flow-node + + patterns + + + include + #prototype + + + include + #flow-alias + + + include + #flow-collection + + + include + #flow-scalar + + + + flow-pair + + patterns + + + begin + \? + beginCaptures + + 0 + + name + punctuation.definition.key-value.begin.yaml + + + end + (?=[},\]]) + name + meta.flow-pair.explicit.yaml + patterns + + + include + #prototype + + + include + #flow-pair + + + include + #flow-node + + + begin + :(?=\s|$|[\[\]{},]) + beginCaptures + + 0 + + name + punctuation.separator.key-value.mapping.yaml + + + end + (?=[},\]]) + patterns + + + include + #flow-value + + + + + + + begin + (?x) (?= + (?: + [^\s[-?:,\[\]{}#&*!|>'"%@`]] + | [?:-] [^\s[\[\]{},]] + ) + ( + [^\s:[\[\]{},]] + | : [^\s[\[\]{},]] + | \s+ (?![#\s]) + )* + \s* + : + (\s|$) + ) + + end + (?x) (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + | \s* : [\[\]{},] + | \s* [\[\]{},] + ) + + name + meta.flow-pair.key.yaml + patterns + + + include + #flow-scalar-plain-in-implicit-type + + + begin + (?x) + [^\s[-?:,\[\]{}#&*!|>'"%@`]] + | [?:-] [^\s[\[\]{},]] + + beginCaptures + + 0 + + name + entity.name.tag.yaml + + + contentName + entity.name.tag.yaml + end + (?x) (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + | \s* : [\[\]{},] + | \s* [\[\]{},] + ) + + name + string.unquoted.plain.in.yaml + + + + + include + #flow-node + + + begin + :(?=\s|$|[\[\]{},]) + captures + + 0 + + name + punctuation.separator.key-value.mapping.yaml + + + end + (?=[},\]]) + name + meta.flow-pair.yaml + patterns + + + include + #flow-value + + + + + + flow-scalar + + patterns + + + include + #flow-scalar-double-quoted + + + include + #flow-scalar-single-quoted + + + include + #flow-scalar-plain-in + + + + flow-scalar-double-quoted + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.yaml + + + end + " + endCaptures + + 0 + + name + punctuation.definition.string.end.yaml + + + name + string.quoted.double.yaml + patterns + + + match + \\([0abtnvfre "/\\N_Lp]|x\d\d|u\d{4}|U\d{8}) + name + constant.character.escape.yaml + + + match + \\\n + name + constant.character.escape.double-quoted.newline.yaml + + + + flow-scalar-plain-in + + patterns + + + include + #flow-scalar-plain-in-implicit-type + + + begin + (?x) + [^\s[-?:,\[\]{}#&*!|>'"%@`]] + | [?:-] [^\s[\[\]{},]] + + end + (?x) (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + | \s* : [\[\]{},] + | \s* [\[\]{},] + ) + + name + string.unquoted.plain.in.yaml + + + + flow-scalar-plain-in-implicit-type + + patterns + + + captures + + 1 + + name + constant.language.null.yaml + + 2 + + name + constant.language.boolean.yaml + + 3 + + name + constant.numeric.integer.yaml + + 4 + + name + constant.numeric.float.yaml + + 5 + + name + constant.other.timestamp.yaml + + 6 + + name + constant.language.value.yaml + + 7 + + name + constant.language.merge.yaml + + + match + (?x) + (?x: + (null|Null|NULL|~) + | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF) + | ( + (?: + [-+]? 0b [0-1_]+ # (base 2) + | [-+]? 0 [0-7_]+ # (base 8) + | [-+]? (?: 0|[1-9][0-9_]*) # (base 10) + | [-+]? 0x [0-9a-fA-F_]+ # (base 16) + | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60) + ) + ) + | ( + (?x: + [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10) + | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60) + | [-+]? \. (?: inf|Inf|INF) # (infinity) + | \. (?: nan|NaN|NAN) # (not a number) + ) + ) + | ( + (?x: + \d{4} - \d{2} - \d{2} # (y-m-d) + | \d{4} # (year) + - \d{1,2} # (month) + - \d{1,2} # (day) + (?: [Tt] | [ \t]+) \d{1,2} # (hour) + : \d{2} # (minute) + : \d{2} # (second) + (?: \.\d*)? # (fraction) + (?: + (?:[ \t]*) Z + | [-+] \d{1,2} (?: :\d{1,2})? + )? # (time zone) + ) + ) + | (=) + | (<<) + ) + (?: (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + | \s* : [\[\]{},] + | \s* [\[\]{},] + ) + ) + + + + + flow-scalar-plain-out + + patterns + + + include + #flow-scalar-plain-out-implicit-type + + + begin + (?x) + [^\s[-?:,\[\]{}#&*!|>'"%@`]] + | [?:-] \S + + end + (?x) (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + ) + + name + string.unquoted.plain.out.yaml + + + + flow-scalar-plain-out-implicit-type + + patterns + + + captures + + 1 + + name + constant.language.null.yaml + + 2 + + name + constant.language.boolean.yaml + + 3 + + name + constant.numeric.integer.yaml + + 4 + + name + constant.numeric.float.yaml + + 5 + + name + constant.other.timestamp.yaml + + 6 + + name + constant.language.value.yaml + + 7 + + name + constant.language.merge.yaml + + + match + (?x) + (?x: + (null|Null|NULL|~) + | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF) + | ( + (?: + [-+]? 0b [0-1_]+ # (base 2) + | [-+]? 0 [0-7_]+ # (base 8) + | [-+]? (?: 0|[1-9][0-9_]*) # (base 10) + | [-+]? 0x [0-9a-fA-F_]+ # (base 16) + | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60) + ) + ) + | ( + (?x: + [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10) + | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60) + | [-+]? \. (?: inf|Inf|INF) # (infinity) + | \. (?: nan|NaN|NAN) # (not a number) + ) + ) + | ( + (?x: + \d{4} - \d{2} - \d{2} # (y-m-d) + | \d{4} # (year) + - \d{1,2} # (month) + - \d{1,2} # (day) + (?: [Tt] | [ \t]+) \d{1,2} # (hour) + : \d{2} # (minute) + : \d{2} # (second) + (?: \.\d*)? # (fraction) + (?: + (?:[ \t]*) Z + | [-+] \d{1,2} (?: :\d{1,2})? + )? # (time zone) + ) + ) + | (=) + | (<<) + ) + (?x: (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + ) + ) + + + + + flow-scalar-single-quoted + + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.yaml + + + end + '(?!') + endCaptures + + 0 + + name + punctuation.definition.string.end.yaml + + + name + string.quoted.single.yaml + patterns + + + match + '' + name + constant.character.escape.single-quoted.yaml + + + + flow-sequence + + begin + \[ + beginCaptures + + 0 + + name + punctuation.definition.sequence.begin.yaml + + + end + \] + endCaptures + + 0 + + name + punctuation.definition.sequence.end.yaml + + + name + meta.flow-sequence.yaml + patterns + + + include + #prototype + + + match + , + name + punctuation.separator.sequence.yaml + + + include + #flow-pair + + + include + #flow-node + + + + flow-value + + patterns + + + begin + \G(?![},\]]) + end + (?=[},\]]) + name + meta.flow-pair.value.yaml + patterns + + + include + #flow-node + + + + + + node + + patterns + + + include + #block-node + + + + property + + begin + (?=!|&) + end + (?!\G) + name + meta.property.yaml + patterns + + + captures + + 1 + + name + keyword.control.property.anchor.yaml + + 2 + + name + punctuation.definition.anchor.yaml + + 3 + + name + entity.name.type.anchor.yaml + + 4 + + name + invalid.illegal.character.anchor.yaml + + + match + \G((&))([^\s\[\]/{/},]+)(\S+)? + + + match + (?x) + \G + (?: + ! < (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$,_.!~*'()\[\]] )+ > + | (?:!(?:[0-9A-Za-z\-]*!)?) (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$_.~*'()] )+ + | ! + ) (?=\ |\t|$) + + name + storage.type.tag-handle.yaml + + + match + \S+ + name + invalid.illegal.tag-handle.yaml + + + + prototype + + patterns + + + include + #comment + + + include + #property + + + + + scopeName + source.yaml + uuid + 686AD6AE-33F3-4493-9512-9E9FC1D5417F + + \ No newline at end of file From 8b789effb6a9b0537b48c6536f673a90f42421d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sat, 20 Feb 2021 11:20:59 +0100 Subject: [PATCH 004/558] Applied fix for entity.name.tag --- syntaxes/external/YAML.tmLanguage | 44 +- syntaxes/external/YAML.tmLanguage.plist | 813 ++++++++++++++++++++++++ 2 files changed, 831 insertions(+), 26 deletions(-) create mode 100644 syntaxes/external/YAML.tmLanguage.plist diff --git a/syntaxes/external/YAML.tmLanguage b/syntaxes/external/YAML.tmLanguage index c9283d243..f98cd5593 100644 --- a/syntaxes/external/YAML.tmLanguage +++ b/syntaxes/external/YAML.tmLanguage @@ -1,7 +1,13 @@ - - + + + comment + + Imported from: + https://github.com/textmate/yaml.tmbundle/blob/e54ceae3b719506dba7e481a77cea4a8b576ae46/Syntaxes/YAML.tmLanguage + Applied fix for entity.name.tag, which was split on the first letter + fileTypes yaml @@ -156,7 +162,7 @@ )* \s* : - (\s|$) + (\s|$) ) end @@ -174,18 +180,11 @@ begin - (?x) - [^\s[-?:,\[\]{}#&*!|>'"%@`]] - | [?:-] \S + (?x) (?= + [^\s[-?:,\[\]{}#&*!|>'"%@`]] + | [?:-] \S + ) - beginCaptures - - 0 - - name - entity.name.tag.yaml - - contentName entity.name.tag.yaml end @@ -580,7 +579,7 @@ )* \s* : - (\s|$) + (\s|$) ) end @@ -602,18 +601,11 @@ begin - (?x) - [^\s[-?:,\[\]{}#&*!|>'"%@`]] - | [?:-] [^\s[\[\]{},]] + (?x) (?= + [^\s[-?:,\[\]{}#&*!|>'"%@`]] + | [?:-] [^\s[\[\]{},]] + ) - beginCaptures - - 0 - - name - entity.name.tag.yaml - - contentName entity.name.tag.yaml end diff --git a/syntaxes/external/YAML.tmLanguage.plist b/syntaxes/external/YAML.tmLanguage.plist new file mode 100644 index 000000000..964ece991 --- /dev/null +++ b/syntaxes/external/YAML.tmLanguage.plist @@ -0,0 +1,813 @@ +{ + comment = ( + 'Imported from:', + 'https://github.com/textmate/yaml.tmbundle/blob/e54ceae3b719506dba7e481a77cea4a8b576ae46/Syntaxes/YAML.tmLanguage', + 'Applied fix for entity.name.tag, which was split on the first letter' + ); + fileTypes = ( + yaml, + yml, + rviz, + reek, + clang-format, + yaml-tmlanguage, + syntax, + sublime-syntax + ); + firstLineMatch = '^%YAML( ?1.\d+)?'; + keyEquivalent = '^~Y'; + name = YAML; + patterns = ( + { + include = '#comment'; + }, + { + include = '#property'; + }, + { + include = '#directive'; + }, + { + match = '^---'; + name = 'entity.other.document.begin.yaml'; + }, + { + match = '^\.{3}'; + name = 'entity.other.document.end.yaml'; + }, + { + include = '#node'; + } + ); + repository = { + block-collection = { + patterns = ( + { + include = '#block-sequence'; + }, + { + include = '#block-mapping'; + } + ); + }; + block-mapping = { + patterns = ( + { + include = '#block-pair'; + } + ); + }; + block-node = { + patterns = ( + { + include = '#prototype'; + }, + { + include = '#block-scalar'; + }, + { + include = '#block-collection'; + }, + { + include = '#flow-scalar-plain-out'; + }, + { + include = '#flow-node'; + } + ); + }; + block-pair = { + patterns = ( + { + begin = '\?'; + beginCaptures = { + 1 = { + name = 'punctuation.definition.key-value.begin.yaml'; + }; + }; + end = '(?=\?)|^ *(:)|(:)'; + endCaptures = { + 1 = { + name = 'punctuation.separator.key-value.mapping.yaml'; + }; + 2 = { + name = 'invalid.illegal.expected-newline.yaml'; + }; + }; + name = 'meta.block-mapping.yaml'; + patterns = ( + { + include = '#block-node'; + } + ); + }, + { + begin = '(?x) (?= + (?x: + [^\s[-?:,\[\]{}#&*!|>''"%@`]] + | [?:-] \S + ) + ( + [^\s:] + | : \S + | \s+ (?![#\s]) + )* + \s* + : + (\s|$) + ) + '; + end = '(?x) (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + ) + '; + patterns = ( + { + include = '#flow-scalar-plain-out-implicit-type'; + }, + { + begin = '(?x) (?= + [^\s[-?:,\[\]{}#&*!|>''"%@`]] + | [?:-] \S + ) + '; + contentName = 'entity.name.tag.yaml'; + end = '(?x) (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + ) + '; + name = 'string.unquoted.plain.out.yaml'; + } + ); + }, + { + match = ':(?=\s|$)'; + name = 'punctuation.separator.key-value.mapping.yaml'; + } + ); + }; + block-scalar = { + begin = '(?:(\|)|(>))([1-9])?([-+])?(.*\n?)'; + beginCaptures = { + 1 = { + name = 'keyword.control.flow.block-scalar.literal.yaml'; + }; + 2 = { + name = 'keyword.control.flow.block-scalar.folded.yaml'; + }; + 3 = { + name = 'constant.numeric.indentation-indicator.yaml'; + }; + 4 = { + name = 'storage.modifier.chomping-indicator.yaml'; + }; + 5 = { + patterns = ( + { + include = '#comment'; + }, + { + match = '.+'; + name = 'invalid.illegal.expected-comment-or-newline.yaml'; + } + ); + }; + }; + end = '^(?=\S)|(?!\G)'; + patterns = ( + { + begin = '^([ ]+)(?! )'; + end = '^(?!\1|\s*$)'; + name = 'string.unquoted.block.yaml'; + } + ); + }; + block-sequence = { + match = '(-)(?!\S)'; + name = 'punctuation.definition.block.sequence.item.yaml'; + }; + comment = { + begin = '(?:(^[ \t]*)|[ \t]+)(?=#\p{Print}*$)'; + beginCaptures = { + 1 = { + name = 'punctuation.whitespace.comment.leading.yaml'; + }; + }; + end = '(?!\G)'; + patterns = ( + { + begin = '#'; + beginCaptures = { + 0 = { + name = 'punctuation.definition.comment.yaml'; + }; + }; + end = '\n'; + name = 'comment.line.number-sign.yaml'; + } + ); + }; + directive = { + begin = '^%'; + beginCaptures = { + 0 = { + name = 'punctuation.definition.directive.begin.yaml'; + }; + }; + end = '(?=$|[ \t]+($|#))'; + name = 'meta.directive.yaml'; + patterns = ( + { + captures = { + 1 = { + name = 'keyword.other.directive.yaml.yaml'; + }; + 2 = { + name = 'constant.numeric.yaml-version.yaml'; + }; + }; + match = '\G(YAML)[ \t]+(\d+\.\d+)'; + }, + { + captures = { + 1 = { + name = 'keyword.other.directive.tag.yaml'; + }; + 2 = { + name = 'storage.type.tag-handle.yaml'; + }; + 3 = { + name = 'support.type.tag-prefix.yaml'; + }; + }; + match = '(?x) + \G + (TAG) + (?:[ \t]+ + ((?:!(?:[0-9A-Za-z\-]*!)?)) + (?:[ \t]+ ( + ! (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$,_.!~*''()\[\]] )* + | (?![,!\[\]{}]) (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$,_.!~*''()\[\]] )+ + ) + )? + )? + '; + }, + { + captures = { + 1 = { + name = 'support.other.directive.reserved.yaml'; + }; + 2 = { + name = 'string.unquoted.directive-name.yaml'; + }; + 3 = { + name = 'string.unquoted.directive-parameter.yaml'; + }; + }; + match = '(?x) \G (\w+) (?:[ \t]+ (\w+) (?:[ \t]+ (\w+))? )?'; + }, + { + match = '\S+'; + name = 'invalid.illegal.unrecognized.yaml'; + } + ); + }; + flow-alias = { + captures = { + 1 = { + name = 'keyword.control.flow.alias.yaml'; + }; + 2 = { + name = 'punctuation.definition.alias.yaml'; + }; + 3 = { + name = 'variable.other.alias.yaml'; + }; + 4 = { + name = 'invalid.illegal.character.anchor.yaml'; + }; + }; + match = '((\*))([^\s\[\]/{/},]+)([^\s\]},]\S*)?'; + }; + flow-collection = { + patterns = ( + { + include = '#flow-sequence'; + }, + { + include = '#flow-mapping'; + } + ); + }; + flow-mapping = { + begin = '\{'; + beginCaptures = { + 0 = { + name = 'punctuation.definition.mapping.begin.yaml'; + }; + }; + end = '\}'; + endCaptures = { + 0 = { + name = 'punctuation.definition.mapping.end.yaml'; + }; + }; + name = 'meta.flow-mapping.yaml'; + patterns = ( + { + include = '#prototype'; + }, + { + match = ','; + name = 'punctuation.separator.mapping.yaml'; + }, + { + include = '#flow-pair'; + } + ); + }; + flow-node = { + patterns = ( + { + include = '#prototype'; + }, + { + include = '#flow-alias'; + }, + { + include = '#flow-collection'; + }, + { + include = '#flow-scalar'; + } + ); + }; + flow-pair = { + patterns = ( + { + begin = '\?'; + beginCaptures = { + 0 = { + name = 'punctuation.definition.key-value.begin.yaml'; + }; + }; + end = '(?=[},\]])'; + name = 'meta.flow-pair.explicit.yaml'; + patterns = ( + { + include = '#prototype'; + }, + { + include = '#flow-pair'; + }, + { + include = '#flow-node'; + }, + { + begin = ':(?=\s|$|[\[\]{},])'; + beginCaptures = { + 0 = { + name = 'punctuation.separator.key-value.mapping.yaml'; + }; + }; + end = '(?=[},\]])'; + patterns = ( + { + include = '#flow-value'; + } + ); + } + ); + }, + { + begin = '(?x) (?= + (?: + [^\s[-?:,\[\]{}#&*!|>''"%@`]] + | [?:-] [^\s[\[\]{},]] + ) + ( + [^\s:[\[\]{},]] + | : [^\s[\[\]{},]] + | \s+ (?![#\s]) + )* + \s* + : + (\s|$) + ) + '; + end = '(?x) (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + | \s* : [\[\]{},] + | \s* [\[\]{},] + ) + '; + name = 'meta.flow-pair.key.yaml'; + patterns = ( + { + include = '#flow-scalar-plain-in-implicit-type'; + }, + { + begin = '(?x) (?= + [^\s[-?:,\[\]{}#&*!|>''"%@`]] + | [?:-] [^\s[\[\]{},]] + ) + '; + contentName = 'entity.name.tag.yaml'; + end = '(?x) (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + | \s* : [\[\]{},] + | \s* [\[\]{},] + ) + '; + name = 'string.unquoted.plain.in.yaml'; + } + ); + }, + { + include = '#flow-node'; + }, + { + begin = ':(?=\s|$|[\[\]{},])'; + captures = { + 0 = { + name = 'punctuation.separator.key-value.mapping.yaml'; + }; + }; + end = '(?=[},\]])'; + name = 'meta.flow-pair.yaml'; + patterns = ( + { + include = '#flow-value'; + } + ); + } + ); + }; + flow-scalar = { + patterns = ( + { + include = '#flow-scalar-double-quoted'; + }, + { + include = '#flow-scalar-single-quoted'; + }, + { + include = '#flow-scalar-plain-in'; + } + ); + }; + flow-scalar-double-quoted = { + begin = '"'; + beginCaptures = { + 0 = { + name = 'punctuation.definition.string.begin.yaml'; + }; + }; + end = '"'; + endCaptures = { + 0 = { + name = 'punctuation.definition.string.end.yaml'; + }; + }; + name = 'string.quoted.double.yaml'; + patterns = ( + { + match = '\\([0abtnvfre "/\\N_Lp]|x\d\d|u\d{4}|U\d{8})'; + name = 'constant.character.escape.yaml'; + }, + { + match = '\\\n'; + name = 'constant.character.escape.double-quoted.newline.yaml'; + } + ); + }; + flow-scalar-plain-in = { + patterns = ( + { + include = '#flow-scalar-plain-in-implicit-type'; + }, + { + begin = '(?x) + [^\s[-?:,\[\]{}#&*!|>''"%@`]] + | [?:-] [^\s[\[\]{},]] + '; + end = '(?x) (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + | \s* : [\[\]{},] + | \s* [\[\]{},] + ) + '; + name = 'string.unquoted.plain.in.yaml'; + } + ); + }; + flow-scalar-plain-in-implicit-type = { + patterns = ( + { + captures = { + 1 = { + name = 'constant.language.null.yaml'; + }; + 2 = { + name = 'constant.language.boolean.yaml'; + }; + 3 = { + name = 'constant.numeric.integer.yaml'; + }; + 4 = { + name = 'constant.numeric.float.yaml'; + }; + 5 = { + name = 'constant.other.timestamp.yaml'; + }; + 6 = { + name = 'constant.language.value.yaml'; + }; + 7 = { + name = 'constant.language.merge.yaml'; + }; + }; + match = '(?x) + (?x: + (null|Null|NULL|~) + | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF) + | ( + (?: + [-+]? 0b [0-1_]+ # (base 2) + | [-+]? 0 [0-7_]+ # (base 8) + | [-+]? (?: 0|[1-9][0-9_]*) # (base 10) + | [-+]? 0x [0-9a-fA-F_]+ # (base 16) + | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60) + ) + ) + | ( + (?x: + [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10) + | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60) + | [-+]? \. (?: inf|Inf|INF) # (infinity) + | \. (?: nan|NaN|NAN) # (not a number) + ) + ) + | ( + (?x: + \d{4} - \d{2} - \d{2} # (y-m-d) + | \d{4} # (year) + - \d{1,2} # (month) + - \d{1,2} # (day) + (?: [Tt] | [ \t]+) \d{1,2} # (hour) + : \d{2} # (minute) + : \d{2} # (second) + (?: \.\d*)? # (fraction) + (?: + (?:[ \t]*) Z + | [-+] \d{1,2} (?: :\d{1,2})? + )? # (time zone) + ) + ) + | (=) + | (<<) + ) + (?: (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + | \s* : [\[\]{},] + | \s* [\[\]{},] + ) + ) + '; + } + ); + }; + flow-scalar-plain-out = { + patterns = ( + { + include = '#flow-scalar-plain-out-implicit-type'; + }, + { + begin = '(?x) + [^\s[-?:,\[\]{}#&*!|>''"%@`]] + | [?:-] \S + '; + end = '(?x) (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + ) + '; + name = 'string.unquoted.plain.out.yaml'; + } + ); + }; + flow-scalar-plain-out-implicit-type = { + patterns = ( + { + captures = { + 1 = { + name = 'constant.language.null.yaml'; + }; + 2 = { + name = 'constant.language.boolean.yaml'; + }; + 3 = { + name = 'constant.numeric.integer.yaml'; + }; + 4 = { + name = 'constant.numeric.float.yaml'; + }; + 5 = { + name = 'constant.other.timestamp.yaml'; + }; + 6 = { + name = 'constant.language.value.yaml'; + }; + 7 = { + name = 'constant.language.merge.yaml'; + }; + }; + match = '(?x) + (?x: + (null|Null|NULL|~) + | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF) + | ( + (?: + [-+]? 0b [0-1_]+ # (base 2) + | [-+]? 0 [0-7_]+ # (base 8) + | [-+]? (?: 0|[1-9][0-9_]*) # (base 10) + | [-+]? 0x [0-9a-fA-F_]+ # (base 16) + | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60) + ) + ) + | ( + (?x: + [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10) + | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60) + | [-+]? \. (?: inf|Inf|INF) # (infinity) + | \. (?: nan|NaN|NAN) # (not a number) + ) + ) + | ( + (?x: + \d{4} - \d{2} - \d{2} # (y-m-d) + | \d{4} # (year) + - \d{1,2} # (month) + - \d{1,2} # (day) + (?: [Tt] | [ \t]+) \d{1,2} # (hour) + : \d{2} # (minute) + : \d{2} # (second) + (?: \.\d*)? # (fraction) + (?: + (?:[ \t]*) Z + | [-+] \d{1,2} (?: :\d{1,2})? + )? # (time zone) + ) + ) + | (=) + | (<<) + ) + (?x: (?= + \s* $ + | \s+ \# + | \s* : (\s|$) + ) + ) + '; + } + ); + }; + flow-scalar-single-quoted = { + begin = ''''; + beginCaptures = { + 0 = { + name = 'punctuation.definition.string.begin.yaml'; + }; + }; + end = '''(?!'')'; + endCaptures = { + 0 = { + name = 'punctuation.definition.string.end.yaml'; + }; + }; + name = 'string.quoted.single.yaml'; + patterns = ( + { + match = ''''''; + name = 'constant.character.escape.single-quoted.yaml'; + } + ); + }; + flow-sequence = { + begin = '\['; + beginCaptures = { + 0 = { + name = 'punctuation.definition.sequence.begin.yaml'; + }; + }; + end = '\]'; + endCaptures = { + 0 = { + name = 'punctuation.definition.sequence.end.yaml'; + }; + }; + name = 'meta.flow-sequence.yaml'; + patterns = ( + { + include = '#prototype'; + }, + { + match = ','; + name = 'punctuation.separator.sequence.yaml'; + }, + { + include = '#flow-pair'; + }, + { + include = '#flow-node'; + } + ); + }; + flow-value = { + patterns = ( + { + begin = '\G(?![},\]])'; + end = '(?=[},\]])'; + name = 'meta.flow-pair.value.yaml'; + patterns = ( + { + include = '#flow-node'; + } + ); + } + ); + }; + node = { + patterns = ( + { + include = '#block-node'; + } + ); + }; + property = { + begin = '(?=!|&)'; + end = '(?!\G)'; + name = 'meta.property.yaml'; + patterns = ( + { + captures = { + 1 = { + name = 'keyword.control.property.anchor.yaml'; + }; + 2 = { + name = 'punctuation.definition.anchor.yaml'; + }; + 3 = { + name = 'entity.name.type.anchor.yaml'; + }; + 4 = { + name = 'invalid.illegal.character.anchor.yaml'; + }; + }; + match = '\G((&))([^\s\[\]/{/},]+)(\S+)?'; + }, + { + match = '(?x) + \G + (?: + ! < (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$,_.!~*''()\[\]] )+ > + | (?:!(?:[0-9A-Za-z\-]*!)?) (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$_.~*''()] )+ + | ! + ) (?=\ |\t|$) + '; + name = 'storage.type.tag-handle.yaml'; + }, + { + match = '\S+'; + name = 'invalid.illegal.tag-handle.yaml'; + } + ); + }; + prototype = { + patterns = ( + { + include = '#comment'; + }, + { + include = '#property'; + } + ); + }; + }; + scopeName = 'source.yaml'; + uuid = 686AD6AE-33F3-4493-9512-9E9FC1D5417F; +} \ No newline at end of file From 3c527a9848794b4eb0858a604a9d894f95397e60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sat, 20 Feb 2021 20:57:13 +0100 Subject: [PATCH 005/558] WIP: Jinja expressions in conditionals Done: Jinja expressions in regular strings --- README.md | 20 +- package.json | 59 ++++- syntaxes/ansible.tmLanguage.json | 31 +-- syntaxes/ansible.tmLanguage.plist | 185 ++++++++++++++ .../ansible/generated/jinja-braces.tmLanguage | 40 +++ .../generated/jinja-conditionals.tmLanguage | 235 ++++++++++++++++++ .../ansible/generated/keywords.tmLanguage | 58 +++++ .../ansible/jinja-braces.tmLanguage.plist | 19 ++ .../jinja-conditionals.tmLanguage.plist | 155 ++++++++++++ syntaxes/ansible/keywords.tmLanguage.plist | 36 +++ syntaxes/external/YAML.tmLanguage | 174 ++++++------- syntaxes/external/YAML.tmLanguage.plist | 175 ++++++------- syntaxes/generated/injection.tmLanguage | 29 +++ syntaxes/injection.tmLanguage.plist | 14 ++ 14 files changed, 1010 insertions(+), 220 deletions(-) create mode 100644 syntaxes/ansible.tmLanguage.plist create mode 100644 syntaxes/ansible/generated/jinja-braces.tmLanguage create mode 100644 syntaxes/ansible/generated/jinja-conditionals.tmLanguage create mode 100644 syntaxes/ansible/generated/keywords.tmLanguage create mode 100644 syntaxes/ansible/jinja-braces.tmLanguage.plist create mode 100644 syntaxes/ansible/jinja-conditionals.tmLanguage.plist create mode 100644 syntaxes/ansible/keywords.tmLanguage.plist create mode 100644 syntaxes/generated/injection.tmLanguage create mode 100644 syntaxes/injection.tmLanguage.plist diff --git a/README.md b/README.md index da5045d99..d074f83de 100644 --- a/README.md +++ b/README.md @@ -47,19 +47,7 @@ Fixed issue #. Added features X, Y, and Z. ------------------------------------------------------------------------------------------------------------ - -## Working with Markdown - -**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: - -* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux) -* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux) -* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets - -### For more information - -* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) -* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) - -**Enjoy!** +## PLAN +- copy and fix existing YAML syntax +- use injection to modify it +- at some point rewrite the YAML syntax from ground up diff --git a/package.json b/package.json index bc0b6271e..3d1a298d2 100644 --- a/package.json +++ b/package.json @@ -10,16 +10,53 @@ "Programming Languages" ], "contributes": { - "languages": [{ - "id": "ansible", - "aliases": ["Ansible", "ansible"], - "extensions": [".yml",".yaml"], - "configuration": "./language-configuration.json" - }], - "grammars": [{ - "language": "ansible", - "scopeName": "source.ansible", - "path": "./syntaxes/ansible.tmLanguage.json" - }] + "languages": [ + { + "id": "ansible", + "aliases": [ + "Ansible", + "ansible" + ], + "extensions": [ + ".yml", + ".yaml" + ], + "configuration": "./language-configuration.json" + } + ], + "grammars": [ + { + "language": "ansible", + "scopeName": "source.ansible", + "path": "./syntaxes/external/YAML.tmLanguage" + }, + { + "path": "./syntaxes/ansible/generated/keywords.tmLanguage", + "scopeName": "injection.ansible.keywords", + "injectTo": [ + "source.ansible" + ] + }, + { + "path": "./syntaxes/ansible/generated/jinja-braces.tmLanguage", + "scopeName": "injection.ansible.jinja-braces", + "embeddedLanguages": { + "meta.embedded.inline.jinja": "jinja" + }, + "injectTo": [ + "source.ansible" + ] + }, + { + "path": "./syntaxes/ansible/generated/jinja-conditionals.tmLanguage", + "scopeName": "injection.ansible.jinja-conditionals", + "embeddedLanguages": { + "meta.embedded.inline.jinja": "jinja" + }, + "injectTo": [ + "source.ansible" + ] + } + ] } } \ No newline at end of file diff --git a/syntaxes/ansible.tmLanguage.json b/syntaxes/ansible.tmLanguage.json index 814528783..af6b017db 100644 --- a/syntaxes/ansible.tmLanguage.json +++ b/syntaxes/ansible.tmLanguage.json @@ -1,32 +1,15 @@ { - "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", - "name": "Ansible", + "scopeName": "todo-comment.injection", + "injectionSelector": "L:comment.line.number-sign.yaml", "patterns": [ { - "include": "#keywords" - }, - { - "include": "#strings" + "include": "#todo-keyword" } ], "repository": { - "keywords": { - "patterns": [{ - "name": "keyword.control.ansible", - "match": "\\b(if|while|for|return)\\b" - }] - }, - "strings": { - "name": "string.quoted.double.ansible", - "begin": "\"", - "end": "\"", - "patterns": [ - { - "name": "constant.character.escape.ansible", - "match": "\\\\." - } - ] + "todo-keyword": { + "match": "TODO", + "name": "keyword.todo" } - }, - "scopeName": "source.ansible" + } } \ No newline at end of file diff --git a/syntaxes/ansible.tmLanguage.plist b/syntaxes/ansible.tmLanguage.plist new file mode 100644 index 000000000..8b4cb052e --- /dev/null +++ b/syntaxes/ansible.tmLanguage.plist @@ -0,0 +1,185 @@ +{ + '$schema' = 'https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json'; + scopeName = 'source.tm-gplist'; + name = 'TextMate Grammar Property List'; + patterns = ( + { include = '#dict'; } + ); + repository = { + keyword = { + name = 'keyword.control.tm-gplist'; + match = '(?x) + \b( + scopeName + | uuid + | fileTypes + | foldingStartMarker | foldingStopMarker + | patterns + | firstLineMatch + | repository + | name | contentName + | match + | begin | end | while + | captures | beginCaptures | endCaptures + | include + | comment + )\b + '; + }; + element = { + patterns = ( + { include = '#array'; }, + { include = '#dict'; }, + { include = '#string'; } + ); + }; + reference = { + name = 'variable.other.tm-gplist'; + comment = 'Reference can only be an unquoted string'; + match = '#[\w\d-]+'; + }; + string = { + patterns = ( + { + name = 'string.quoted.double.tm-gplist'; + begin = '"'; + beginCaptures = { + 0 = { + name = 'punctuation.definition.string.begin.tm-gplist'; + }; + }; + end = '"'; + endCaptures = { + 0 = { + name = 'punctuation.definition.string.end.tm-gplist'; + }; + }; + patterns = ( + { include = '#reference'; }, + { + match = '\\(?:[\\fnrt"]|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})'; + name = 'constant.character.escape.tm-gplist'; + }, + { + match = '\\.'; + name = 'invalid.illegal.unrecognized-string-escape.tm-gplist'; + } + ); + }, + { + name = 'string.quoted.single.tm-gplist'; + begin = "'"; + beginCaptures = { + 0 = { + name = 'punctuation.definition.string.begin.tm-gplist'; + }; + }; + end = "'(?!')"; + endCaptures = { + 0 = { + name = 'punctuation.definition.string.end.tm-gplist'; + }; + }; + patterns = ( + { include = '#reference'; }, + { + name = 'constant.character.escape.tm-gplist'; + match = "''"; + } + ); + }, + { + name = 'string.unquoted.tm-gplist'; + match = '[\w\d-]+'; + } + ); + }; + dict-key = { + name = 'entity.name.tag meta.structure.dict-key.tm-gplist'; + comment = 'Match anything that can start a string (same as dict-item)'; + begin = '(?=[\w\d\-''"])'; + end = '(?==)'; + patterns = ( + { include = '#keyword'; }, + { + comment = 'Only unquoted keys will have special coloring'; + match = '[\w\d-]+'; + }, + { include = '#string'; }, + { + match = '[^\s=]'; + name = 'invalid.illegal.expected-dict-assignment-operator.tm-gplist'; + } + ); + }; + dict-value = { + name = 'meta.structure.dict-value.tm-gplist'; + comment = 'Consumes assignment operator'; + begin = '='; + beginCaptures = { + 0 = { name = 'keyword.operator.assignment.dict.tm-gplist'; }; + }; + end = '(?=;)'; + patterns = ( + { include = '#element'; }, + { + match = '[^\s;]'; + name = 'invalid.illegal.expected-dict-separator.tm-gplist'; + } + ); + }; + dict-item = { + name = 'meta.structure.dict-item.tm-gplist'; + comment = 'Match anything that can start a string (same as dict-key)'; + begin = '(?=[\w\d\-''"])'; + end = '(;)'; + endCaptures = { + 0 = { name = 'punctuation.separator.dict.end.tm-gplist'; }; + }; + patterns = ( + { include = '#dict-key'; }, + { include = '#dict-value'; } + ); + }; + dict = { + name = 'meta.structure.dict.tm-gplist'; + begin = '\{'; + beginCaptures = { + 0 = { name = 'punctuation.definition.dict.begin.tm-gplist'; }; + }; + end = '\}'; + endCaptures = { + 0 = { name = 'punctuation.definition.dict.end.tm-gplist'; }; + }; + patterns = ( + { include = '#dict-item'; }, + { + match = '[^\s\}]'; + name = 'invalid.illegal.expected-dict-end-bracket.tm-gplist'; + } + ); + }; + array = { + name = 'meta.structure.array.tm-gplist'; + begin = '\('; + beginCaptures = { + 0 = { name = 'punctuation.definition.array.begin.tm-gplist'; }; + }; + end = '\)'; + endCaptures = { + 0 = { name = 'punctuation.definition.array.end.tm-gplist'; }; + }; + patterns = ( + { include = '#element'; }, + { + match = ','; + name = 'punctuation.separator.array.end.tm-gplist'; + }, + { + match = '[^\s\)]'; + name = 'invalid.illegal.expected-array-separator-or-end.tm-gplist'; + } + ); + }; + }; +} \ No newline at end of file diff --git a/syntaxes/ansible/generated/jinja-braces.tmLanguage b/syntaxes/ansible/generated/jinja-braces.tmLanguage new file mode 100644 index 000000000..d82faf222 --- /dev/null +++ b/syntaxes/ansible/generated/jinja-braces.tmLanguage @@ -0,0 +1,40 @@ + + + + + scopeName + injection.ansible.jinja-braces + injectionSelector + L:string + name + Grammar for Jinja2 expressions surrounded by double curly braces + patterns + + + include + #jinja-expression + + + repository + + jinja-expression + + name + variable.other.constant.ansible variable.language + begin + \{\{ + end + \}\} + contentName + meta.embedded.inline.jinja + patterns + + + include + source.jinja#expression + + + + + + \ No newline at end of file diff --git a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage new file mode 100644 index 000000000..5bcebef4f --- /dev/null +++ b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage @@ -0,0 +1,235 @@ + + + + + scopeName + injection.ansible.jinja-conditionals + name + Grammar for Jinja2 expressions surrounded by double curly braces + patterns + + + include + #ansible-condition + + + comment + Flow style collections are not supported (yet) + repository + + test + + begin + ^(\s*) + end + ^(?!\1s+) + name + asdf.test.ansible + + ansible-condition + + patterns + + + comment + + Flow style expression + + begin + (?x) + ^(\s*) # 1 + (?:(-)(\s+))? # 2, 3; in case it is first key of a list item + \b( # 4 + changed_when + | failed_when + | when + | check_mode + )\b + \s* (:) # 5 + (?!\s+[|>]|\s*$) # not starting a block + \s+ (["']?) # 6 + + beginCaptures + + 2 + + name + punctuation.definition.block.sequence.item.ansible + + 4 + + name + keyword.other.special-method.ansible + + 5 + + name + punctuation.separator.key-value.mapping.ansible + + 6 + + name + punctuation.definition.string.begin.ansible + + + end + (?x) + ( + ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches + | ((?=["'])\6) \s* $ # 1; if it started with a quote and the line ends + ) + + endCaptures + + 1 + + name + punctuation.definition.string.end.ansible + + + contentName + variable.other.constant.ansible variable.language meta.embedded.inline.jinja + patterns + + + include + #test + + + include + source.jinja#expression + + + + + begin + (?x) + ^(\s*) # 1 + (?:(-)(\s+))? # 2, 3; in case it is first key of a list item + \b( # 4 + changed_when + | failed_when + | when + | check_mode + )\b + \s* (:) # 5 + \s*$ # starting a block collection or string in block + + beginCaptures + + 2 + + name + punctuation.definition.block.sequence.item.ansible + + 4 + + name + keyword.other.special-method.ansible + + 5 + + name + punctuation.separator.key-value.mapping.ansible + + + end + (?x) + ( + ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches + | ((?=["'])\6) \s* $ # 1; if it started with a quote and the line ends + ) + + end + ^(?!\1\s+-\s+|$) + patterns + + + begin + (?:["'])(.*)(?=["']\s*?$) + beginCaptures + + 1 + + patterns + + + include + source.jinja#expression + + + + + end + $ + + + include + source.jinja#expression + + + + + begin + (\s*)(?:(?:-\s+)?((?:changed_|failed_)?when|check_mode):\s+|-\s+)(?:(\|)|(>))([1-9])?([-+])?(.*\n?) + beginCaptures + + 2 + + name + keyword.other.special-method.ansible + + 3 + + name + punctuation.definition.block.scalar.literal.ansible + + 4 + + name + punctuation.definition.block.scalar.folded.ansible + + 5 + + name + constant.numeric.indentation-indicator.ansible + + 6 + + name + support.other.chomping-indicator.ansible + + 7 + + patterns + + + include + #comment + + + match + .+ + name + invalid.illegal.expected-comment-or-newline.ansible + + + + + contentName + string.unquoted.block.ansible + end + ^(?!\1\s+\S|$) + patterns + + + include + source.jinja#expression + + + + + + + + \ No newline at end of file diff --git a/syntaxes/ansible/generated/keywords.tmLanguage b/syntaxes/ansible/generated/keywords.tmLanguage new file mode 100644 index 000000000..5b0ad18df --- /dev/null +++ b/syntaxes/ansible/generated/keywords.tmLanguage @@ -0,0 +1,58 @@ + + + + + scopeName + injection.ansible.keywords + injectionSelector + L:entity.name.tag.ansible + name + Grammar for detecting Ansible keywords + comment + + Extracted from: + https://docs.ansible.com/ansible/2.10/reference_appendices/playbooks_keywords.html + Added `label`, `pause`, `loop_var`, `extended` as Ansible keywords (occur in loop_control) + + patterns + + + include + #keyword + + + include + #ansible_tag + + + repository + + keyword + + name + keyword.other.special-method.ansible + match + (?x) + \b( + action | always | any_errors_fatal | args | async | become | become_exe | become_flags + | become_method | become_user | block | changed_when | check_mode | collections | connection + | debugger | delay | delegate_facts | delegate_to | diff | environment | extended | fact_path | failed_when + | force_handlers | gather_facts | gather_subset | gather_timeout | handlers | hosts + | ignore_errors | ignore_unreachable | label | local_action | loop | loop_control + | max_fail_percentage | module_defaults | name | no_log | notify | order | pause | poll | port + | post_tasks | pre_tasks | register | remote_user | rescue | retries | roles | run_once | serial + | strategy | tags | tasks | throttle | timeout | until | vars | vars_files | vars_prompt | when + | with_[a-z]+ + )\b + + + ansible_tag + + name + keyword.other.ansible + match + [\w.]+ + + + + \ No newline at end of file diff --git a/syntaxes/ansible/jinja-braces.tmLanguage.plist b/syntaxes/ansible/jinja-braces.tmLanguage.plist new file mode 100644 index 000000000..2ded879f1 --- /dev/null +++ b/syntaxes/ansible/jinja-braces.tmLanguage.plist @@ -0,0 +1,19 @@ +{ + scopeName = 'injection.ansible.jinja-braces'; + injectionSelector = 'L:string'; + name = 'Grammar for Jinja2 expressions surrounded by double curly braces'; + patterns = ( + { include = '#jinja-expression'; } + ); + repository = { + jinja-expression = { + name = 'variable.other.constant.ansible variable.language'; + begin = '\{\{'; + end = '\}\}'; + contentName = 'meta.embedded.inline.jinja'; + patterns = ( + { include = 'source.jinja#expression'; } + ); + }; + }; +} \ No newline at end of file diff --git a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist new file mode 100644 index 000000000..40821a3fd --- /dev/null +++ b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist @@ -0,0 +1,155 @@ +{ + scopeName = 'injection.ansible.jinja-conditionals'; + name = 'Grammar for Jinja2 expressions surrounded by double curly braces'; + patterns = ( + { include = '#ansible-condition'; } + ); + comment = 'Flow style collections are not supported (yet)'; + repository = { + test = { + begin = '^(\s*)'; + end = '^(?!\1s+)'; + name = 'asdf.test.ansible'; + }; + ansible-condition = { + patterns = ( + { + comment = ( + 'Flow style expression' + ); + begin = '(?x) + ^(\s*) # 1 + (?:(-)(\s+))? # 2, 3; in case it is first key of a list item + \b( # 4 + changed_when + | failed_when + | when + | check_mode + )\b + \s* (:) # 5 + (?!\s+[|>]|\s*$) # not starting a block + \s+ (["'']?) # 6 + '; + beginCaptures = { + 2 = { + name = 'punctuation.definition.block.sequence.item.ansible'; + }; + 4 = { + name = 'keyword.other.special-method.ansible'; + }; + 5 = { + name = 'punctuation.separator.key-value.mapping.ansible'; + }; + 6 = { + name = 'punctuation.definition.string.begin.ansible'; + }; + }; + end = '(?x) + ( + ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches + | ((?=["''])\6) \s* $ # 1; if it started with a quote and the line ends + ) + '; + endCaptures = { + 1 = { + name = 'punctuation.definition.string.end.ansible'; + }; + }; + contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja'; + patterns = ( + { include = '#test'; }, + { include = 'source.jinja#expression'; } + ); + }, + { + begin = '(?x) + ^(\s*) # 1 + (?:(-)(\s+))? # 2, 3; in case it is first key of a list item + \b( # 4 + changed_when + | failed_when + | when + | check_mode + )\b + \s* (:) # 5 + \s*$ # starting a block collection or string in block + '; + beginCaptures = { + 2 = { + name = 'punctuation.definition.block.sequence.item.ansible'; + }; + 4 = { + name = 'keyword.other.special-method.ansible'; + }; + 5 = { + name = 'punctuation.separator.key-value.mapping.ansible'; + }; + }; + end = '(?x) + ( + ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches + | ((?=["''])\6) \s* $ # 1; if it started with a quote and the line ends + ) + '; + end = '^(?!\1\s+-\s+|$)'; + patterns = ( + { + begin = '(?:["''])(.*)(?=["'']\s*?$)'; + beginCaptures = { + 1 = { + patterns = ( + { + include = 'source.jinja#expression'; + } + ); + }; + }; + end = '$'; + }, + { + include = 'source.jinja#expression'; + } + ); + }, + { + begin = '(\s*)(?:(?:-\s+)?((?:changed_|failed_)?when|check_mode):\s+|-\s+)(?:(\|)|(>))([1-9])?([-+])?(.*\n?)'; + beginCaptures = { + 2 = { + name = 'keyword.other.special-method.ansible'; + }; + 3 = { + name = 'punctuation.definition.block.scalar.literal.ansible'; + }; + 4 = { + name = 'punctuation.definition.block.scalar.folded.ansible'; + }; + 5 = { + name = 'constant.numeric.indentation-indicator.ansible'; + }; + 6 = { + name = 'support.other.chomping-indicator.ansible'; + }; + 7 = { + patterns = ( + { + include = '#comment'; + }, + { + match = '.+'; + name = 'invalid.illegal.expected-comment-or-newline.ansible'; + } + ); + }; + }; + contentName = 'string.unquoted.block.ansible'; + end = '^(?!\1\s+\S|$)'; + patterns = ( + { + include = 'source.jinja#expression'; + } + ); + } + ); + }; + }; +} \ No newline at end of file diff --git a/syntaxes/ansible/keywords.tmLanguage.plist b/syntaxes/ansible/keywords.tmLanguage.plist new file mode 100644 index 000000000..0e2878ff7 --- /dev/null +++ b/syntaxes/ansible/keywords.tmLanguage.plist @@ -0,0 +1,36 @@ +{ + scopeName = 'injection.ansible.keywords'; + injectionSelector = 'L:entity.name.tag.ansible'; + name = 'Grammar for detecting Ansible keywords'; + comment = ( + 'Extracted from:', + 'https://docs.ansible.com/ansible/2.10/reference_appendices/playbooks_keywords.html', + 'Added `label`, `pause`, `loop_var`, `extended` as Ansible keywords (occur in loop_control)' + ); + patterns = ( + { include = '#keyword'; }, + { include = '#ansible_tag'; } + ); + repository = { + keyword = { + name = 'keyword.other.special-method.ansible'; + match = '(?x) + \b( + action | always | any_errors_fatal | args | async | become | become_exe | become_flags + | become_method | become_user | block | changed_when | check_mode | collections | connection + | debugger | delay | delegate_facts | delegate_to | diff | environment | extended | fact_path | failed_when + | force_handlers | gather_facts | gather_subset | gather_timeout | handlers | hosts + | ignore_errors | ignore_unreachable | label | local_action | loop | loop_control + | max_fail_percentage | module_defaults | name | no_log | notify | order | pause | poll | port + | post_tasks | pre_tasks | register | remote_user | rescue | retries | roles | run_once | serial + | strategy | tags | tasks | throttle | timeout | until | vars | vars_files | vars_prompt | when + | with_[a-z]+ + )\b + '; + }; + ansible_tag = { + name = 'keyword.other.ansible'; + match = '[\w.]+'; + }; + }; +} \ No newline at end of file diff --git a/syntaxes/external/YAML.tmLanguage b/syntaxes/external/YAML.tmLanguage index f98cd5593..df8b49cb4 100644 --- a/syntaxes/external/YAML.tmLanguage +++ b/syntaxes/external/YAML.tmLanguage @@ -7,6 +7,8 @@ Imported from: https://github.com/textmate/yaml.tmbundle/blob/e54ceae3b719506dba7e481a77cea4a8b576ae46/Syntaxes/YAML.tmLanguage Applied fix for entity.name.tag, which was split on the first letter + Replaced all `.yaml` scopes with `.ansible` to avoid replacing syntax for regular YAML files. + Injected `jinja-conditionals` fileTypes @@ -27,6 +29,10 @@ YAML patterns + + include + injection.ansible.jinja-conditionals + include #comment @@ -43,13 +49,13 @@ match ^--- name - entity.other.document.begin.yaml + entity.other.document.begin.ansible match ^\.{3} name - entity.other.document.end.yaml + entity.other.document.end.ansible include @@ -120,7 +126,7 @@ 1 name - punctuation.definition.key-value.begin.yaml + punctuation.definition.key-value.begin.ansible end @@ -130,16 +136,16 @@ 1 name - punctuation.separator.key-value.mapping.yaml + punctuation.separator.key-value.mapping.ansible 2 name - invalid.illegal.expected-newline.yaml + invalid.illegal.expected-newline.ansible name - meta.block-mapping.yaml + meta.block-mapping.ansible patterns @@ -186,7 +192,7 @@ ) contentName - entity.name.tag.yaml + entity.name.tag.ansible end (?x) (?= \s* $ @@ -195,7 +201,7 @@ ) name - string.unquoted.plain.out.yaml + string.unquoted.plain.out.ansible @@ -203,7 +209,7 @@ match :(?=\s|$) name - punctuation.separator.key-value.mapping.yaml + punctuation.separator.key-value.mapping.ansible @@ -216,22 +222,22 @@ 1 name - keyword.control.flow.block-scalar.literal.yaml + keyword.control.flow.block-scalar.literal.ansible 2 name - keyword.control.flow.block-scalar.folded.yaml + keyword.control.flow.block-scalar.folded.ansible 3 name - constant.numeric.indentation-indicator.yaml + constant.numeric.indentation-indicator.ansible 4 name - storage.modifier.chomping-indicator.yaml + storage.modifier.chomping-indicator.ansible 5 @@ -245,7 +251,7 @@ match .+ name - invalid.illegal.expected-comment-or-newline.yaml + invalid.illegal.expected-comment-or-newline.ansible @@ -260,7 +266,7 @@ end ^(?!\1|\s*$) name - string.unquoted.block.yaml + string.unquoted.block.ansible @@ -269,7 +275,7 @@ match (-)(?!\S) name - punctuation.definition.block.sequence.item.yaml + punctuation.definition.block.sequence.item.ansible comment @@ -280,7 +286,7 @@ 1 name - punctuation.whitespace.comment.leading.yaml + punctuation.whitespace.comment.leading.ansible end @@ -295,13 +301,13 @@ 0 name - punctuation.definition.comment.yaml + punctuation.definition.comment.ansible end \n name - comment.line.number-sign.yaml + comment.line.number-sign.ansible @@ -314,13 +320,13 @@ 0 name - punctuation.definition.directive.begin.yaml + punctuation.definition.directive.begin.ansible end (?=$|[ \t]+($|#)) name - meta.directive.yaml + meta.directive.ansible patterns @@ -329,12 +335,12 @@ 1 name - keyword.other.directive.yaml.yaml + keyword.other.directive.yaml.ansible 2 name - constant.numeric.yaml-version.yaml + constant.numeric.yaml-version.ansible match @@ -346,17 +352,17 @@ 1 name - keyword.other.directive.tag.yaml + keyword.other.directive.tag.ansible 2 name - storage.type.tag-handle.yaml + storage.type.tag-handle.ansible 3 name - support.type.tag-prefix.yaml + support.type.tag-prefix.ansible match @@ -379,17 +385,17 @@ 1 name - support.other.directive.reserved.yaml + support.other.directive.reserved.ansible 2 name - string.unquoted.directive-name.yaml + string.unquoted.directive-name.ansible 3 name - string.unquoted.directive-parameter.yaml + string.unquoted.directive-parameter.ansible match @@ -399,7 +405,7 @@ match \S+ name - invalid.illegal.unrecognized.yaml + invalid.illegal.unrecognized.ansible @@ -410,22 +416,22 @@ 1 name - keyword.control.flow.alias.yaml + keyword.control.flow.alias.ansible 2 name - punctuation.definition.alias.yaml + punctuation.definition.alias.ansible 3 name - variable.other.alias.yaml + variable.other.alias.ansible 4 name - invalid.illegal.character.anchor.yaml + invalid.illegal.character.anchor.ansible match @@ -454,7 +460,7 @@ 0 name - punctuation.definition.mapping.begin.yaml + punctuation.definition.mapping.begin.ansible end @@ -464,11 +470,11 @@ 0 name - punctuation.definition.mapping.end.yaml + punctuation.definition.mapping.end.ansible name - meta.flow-mapping.yaml + meta.flow-mapping.ansible patterns @@ -479,7 +485,7 @@ match , name - punctuation.separator.mapping.yaml + punctuation.separator.mapping.ansible include @@ -521,13 +527,13 @@ 0 name - punctuation.definition.key-value.begin.yaml + punctuation.definition.key-value.begin.ansible end (?=[},\]]) name - meta.flow-pair.explicit.yaml + meta.flow-pair.explicit.ansible patterns @@ -550,7 +556,7 @@ 0 name - punctuation.separator.key-value.mapping.yaml + punctuation.separator.key-value.mapping.ansible end @@ -592,7 +598,7 @@ ) name - meta.flow-pair.key.yaml + meta.flow-pair.key.ansible patterns @@ -607,7 +613,7 @@ ) contentName - entity.name.tag.yaml + entity.name.tag.ansible end (?x) (?= \s* $ @@ -618,7 +624,7 @@ ) name - string.unquoted.plain.in.yaml + string.unquoted.plain.in.ansible @@ -634,13 +640,13 @@ 0 name - punctuation.separator.key-value.mapping.yaml + punctuation.separator.key-value.mapping.ansible end (?=[},\]]) name - meta.flow-pair.yaml + meta.flow-pair.ansible patterns @@ -678,7 +684,7 @@ 0 name - punctuation.definition.string.begin.yaml + punctuation.definition.string.begin.ansible end @@ -688,24 +694,24 @@ 0 name - punctuation.definition.string.end.yaml + punctuation.definition.string.end.ansible name - string.quoted.double.yaml + string.quoted.double.ansible patterns match \\([0abtnvfre "/\\N_Lp]|x\d\d|u\d{4}|U\d{8}) name - constant.character.escape.yaml + constant.character.escape.ansible match \\\n name - constant.character.escape.double-quoted.newline.yaml + constant.character.escape.double-quoted.newline.ansible @@ -733,7 +739,7 @@ ) name - string.unquoted.plain.in.yaml + string.unquoted.plain.in.ansible @@ -747,37 +753,37 @@ 1 name - constant.language.null.yaml + constant.language.null.ansible 2 name - constant.language.boolean.yaml + constant.language.boolean.ansible 3 name - constant.numeric.integer.yaml + constant.numeric.integer.ansible 4 name - constant.numeric.float.yaml + constant.numeric.float.ansible 5 name - constant.other.timestamp.yaml + constant.other.timestamp.ansible 6 name - constant.language.value.yaml + constant.language.value.ansible 7 name - constant.language.merge.yaml + constant.language.merge.ansible match @@ -855,7 +861,7 @@ ) name - string.unquoted.plain.out.yaml + string.unquoted.plain.out.ansible @@ -869,37 +875,37 @@ 1 name - constant.language.null.yaml + constant.language.null.ansible 2 name - constant.language.boolean.yaml + constant.language.boolean.ansible 3 name - constant.numeric.integer.yaml + constant.numeric.integer.ansible 4 name - constant.numeric.float.yaml + constant.numeric.float.ansible 5 name - constant.other.timestamp.yaml + constant.other.timestamp.ansible 6 name - constant.language.value.yaml + constant.language.value.ansible 7 name - constant.language.merge.yaml + constant.language.merge.ansible match @@ -962,7 +968,7 @@ 0 name - punctuation.definition.string.begin.yaml + punctuation.definition.string.begin.ansible end @@ -972,18 +978,18 @@ 0 name - punctuation.definition.string.end.yaml + punctuation.definition.string.end.ansible name - string.quoted.single.yaml + string.quoted.single.ansible patterns match '' name - constant.character.escape.single-quoted.yaml + constant.character.escape.single-quoted.ansible @@ -996,7 +1002,7 @@ 0 name - punctuation.definition.sequence.begin.yaml + punctuation.definition.sequence.begin.ansible end @@ -1006,11 +1012,11 @@ 0 name - punctuation.definition.sequence.end.yaml + punctuation.definition.sequence.end.ansible name - meta.flow-sequence.yaml + meta.flow-sequence.ansible patterns @@ -1021,7 +1027,7 @@ match , name - punctuation.separator.sequence.yaml + punctuation.separator.sequence.ansible include @@ -1043,7 +1049,7 @@ end (?=[},\]]) name - meta.flow-pair.value.yaml + meta.flow-pair.value.ansible patterns @@ -1071,7 +1077,7 @@ end (?!\G) name - meta.property.yaml + meta.property.ansible patterns @@ -1080,22 +1086,22 @@ 1 name - keyword.control.property.anchor.yaml + keyword.control.property.anchor.ansible 2 name - punctuation.definition.anchor.yaml + punctuation.definition.anchor.ansible 3 name - entity.name.type.anchor.yaml + entity.name.type.anchor.ansible 4 name - invalid.illegal.character.anchor.yaml + invalid.illegal.character.anchor.ansible match @@ -1112,13 +1118,13 @@ ) (?=\ |\t|$) name - storage.type.tag-handle.yaml + storage.type.tag-handle.ansible match \S+ name - invalid.illegal.tag-handle.yaml + invalid.illegal.tag-handle.ansible @@ -1138,7 +1144,7 @@ scopeName - source.yaml + source.ansible uuid 686AD6AE-33F3-4493-9512-9E9FC1D5417F diff --git a/syntaxes/external/YAML.tmLanguage.plist b/syntaxes/external/YAML.tmLanguage.plist index 964ece991..dd4a29d57 100644 --- a/syntaxes/external/YAML.tmLanguage.plist +++ b/syntaxes/external/YAML.tmLanguage.plist @@ -2,7 +2,9 @@ comment = ( 'Imported from:', 'https://github.com/textmate/yaml.tmbundle/blob/e54ceae3b719506dba7e481a77cea4a8b576ae46/Syntaxes/YAML.tmLanguage', - 'Applied fix for entity.name.tag, which was split on the first letter' + 'Applied fix for entity.name.tag, which was split on the first letter', + 'Replaced all `.yaml` scopes with `.ansible` to avoid replacing syntax for regular YAML files.', + 'Injected `jinja-conditionals`' ); fileTypes = ( yaml, @@ -18,6 +20,9 @@ keyEquivalent = '^~Y'; name = YAML; patterns = ( + { + include = 'injection.ansible.jinja-conditionals'; + }, { include = '#comment'; }, @@ -29,11 +34,11 @@ }, { match = '^---'; - name = 'entity.other.document.begin.yaml'; + name = 'entity.other.document.begin.ansible'; }, { match = '^\.{3}'; - name = 'entity.other.document.end.yaml'; + name = 'entity.other.document.end.ansible'; }, { include = '#node'; @@ -82,19 +87,19 @@ begin = '\?'; beginCaptures = { 1 = { - name = 'punctuation.definition.key-value.begin.yaml'; + name = 'punctuation.definition.key-value.begin.ansible'; }; }; end = '(?=\?)|^ *(:)|(:)'; endCaptures = { 1 = { - name = 'punctuation.separator.key-value.mapping.yaml'; + name = 'punctuation.separator.key-value.mapping.ansible'; }; 2 = { - name = 'invalid.illegal.expected-newline.yaml'; + name = 'invalid.illegal.expected-newline.ansible'; }; }; - name = 'meta.block-mapping.yaml'; + name = 'meta.block-mapping.ansible'; patterns = ( { include = '#block-node'; @@ -133,20 +138,20 @@ | [?:-] \S ) '; - contentName = 'entity.name.tag.yaml'; + contentName = 'entity.name.tag.ansible'; end = '(?x) (?= \s* $ | \s+ \# | \s* : (\s|$) ) '; - name = 'string.unquoted.plain.out.yaml'; + name = 'string.unquoted.plain.out.ansible'; } ); }, { match = ':(?=\s|$)'; - name = 'punctuation.separator.key-value.mapping.yaml'; + name = 'punctuation.separator.key-value.mapping.ansible'; } ); }; @@ -154,16 +159,16 @@ begin = '(?:(\|)|(>))([1-9])?([-+])?(.*\n?)'; beginCaptures = { 1 = { - name = 'keyword.control.flow.block-scalar.literal.yaml'; + name = 'keyword.control.flow.block-scalar.literal.ansible'; }; 2 = { - name = 'keyword.control.flow.block-scalar.folded.yaml'; + name = 'keyword.control.flow.block-scalar.folded.ansible'; }; 3 = { - name = 'constant.numeric.indentation-indicator.yaml'; + name = 'constant.numeric.indentation-indicator.ansible'; }; 4 = { - name = 'storage.modifier.chomping-indicator.yaml'; + name = 'storage.modifier.chomping-indicator.ansible'; }; 5 = { patterns = ( @@ -172,7 +177,7 @@ }, { match = '.+'; - name = 'invalid.illegal.expected-comment-or-newline.yaml'; + name = 'invalid.illegal.expected-comment-or-newline.ansible'; } ); }; @@ -182,19 +187,19 @@ { begin = '^([ ]+)(?! )'; end = '^(?!\1|\s*$)'; - name = 'string.unquoted.block.yaml'; + name = 'string.unquoted.block.ansible'; } ); }; block-sequence = { match = '(-)(?!\S)'; - name = 'punctuation.definition.block.sequence.item.yaml'; + name = 'punctuation.definition.block.sequence.item.ansible'; }; comment = { begin = '(?:(^[ \t]*)|[ \t]+)(?=#\p{Print}*$)'; beginCaptures = { 1 = { - name = 'punctuation.whitespace.comment.leading.yaml'; + name = 'punctuation.whitespace.comment.leading.ansible'; }; }; end = '(?!\G)'; @@ -203,11 +208,11 @@ begin = '#'; beginCaptures = { 0 = { - name = 'punctuation.definition.comment.yaml'; + name = 'punctuation.definition.comment.ansible'; }; }; end = '\n'; - name = 'comment.line.number-sign.yaml'; + name = 'comment.line.number-sign.ansible'; } ); }; @@ -215,19 +220,19 @@ begin = '^%'; beginCaptures = { 0 = { - name = 'punctuation.definition.directive.begin.yaml'; + name = 'punctuation.definition.directive.begin.ansible'; }; }; end = '(?=$|[ \t]+($|#))'; - name = 'meta.directive.yaml'; + name = 'meta.directive.ansible'; patterns = ( { captures = { 1 = { - name = 'keyword.other.directive.yaml.yaml'; + name = 'keyword.other.directive.yaml.ansible'; }; 2 = { - name = 'constant.numeric.yaml-version.yaml'; + name = 'constant.numeric.yaml-version.ansible'; }; }; match = '\G(YAML)[ \t]+(\d+\.\d+)'; @@ -235,13 +240,13 @@ { captures = { 1 = { - name = 'keyword.other.directive.tag.yaml'; + name = 'keyword.other.directive.tag.ansible'; }; 2 = { - name = 'storage.type.tag-handle.yaml'; + name = 'storage.type.tag-handle.ansible'; }; 3 = { - name = 'support.type.tag-prefix.yaml'; + name = 'support.type.tag-prefix.ansible'; }; }; match = '(?x) @@ -260,36 +265,36 @@ { captures = { 1 = { - name = 'support.other.directive.reserved.yaml'; + name = 'support.other.directive.reserved.ansible'; }; 2 = { - name = 'string.unquoted.directive-name.yaml'; + name = 'string.unquoted.directive-name.ansible'; }; 3 = { - name = 'string.unquoted.directive-parameter.yaml'; + name = 'string.unquoted.directive-parameter.ansible'; }; }; match = '(?x) \G (\w+) (?:[ \t]+ (\w+) (?:[ \t]+ (\w+))? )?'; }, { match = '\S+'; - name = 'invalid.illegal.unrecognized.yaml'; + name = 'invalid.illegal.unrecognized.ansible'; } ); }; flow-alias = { captures = { 1 = { - name = 'keyword.control.flow.alias.yaml'; + name = 'keyword.control.flow.alias.ansible'; }; 2 = { - name = 'punctuation.definition.alias.yaml'; + name = 'punctuation.definition.alias.ansible'; }; 3 = { - name = 'variable.other.alias.yaml'; + name = 'variable.other.alias.ansible'; }; 4 = { - name = 'invalid.illegal.character.anchor.yaml'; + name = 'invalid.illegal.character.anchor.ansible'; }; }; match = '((\*))([^\s\[\]/{/},]+)([^\s\]},]\S*)?'; @@ -308,23 +313,23 @@ begin = '\{'; beginCaptures = { 0 = { - name = 'punctuation.definition.mapping.begin.yaml'; + name = 'punctuation.definition.mapping.begin.ansible'; }; }; end = '\}'; endCaptures = { 0 = { - name = 'punctuation.definition.mapping.end.yaml'; + name = 'punctuation.definition.mapping.end.ansible'; }; }; - name = 'meta.flow-mapping.yaml'; + name = 'meta.flow-mapping.ansible'; patterns = ( { include = '#prototype'; }, { match = ','; - name = 'punctuation.separator.mapping.yaml'; + name = 'punctuation.separator.mapping.ansible'; }, { include = '#flow-pair'; @@ -353,11 +358,11 @@ begin = '\?'; beginCaptures = { 0 = { - name = 'punctuation.definition.key-value.begin.yaml'; + name = 'punctuation.definition.key-value.begin.ansible'; }; }; end = '(?=[},\]])'; - name = 'meta.flow-pair.explicit.yaml'; + name = 'meta.flow-pair.explicit.ansible'; patterns = ( { include = '#prototype'; @@ -372,7 +377,7 @@ begin = ':(?=\s|$|[\[\]{},])'; beginCaptures = { 0 = { - name = 'punctuation.separator.key-value.mapping.yaml'; + name = 'punctuation.separator.key-value.mapping.ansible'; }; }; end = '(?=[},\]])'; @@ -408,7 +413,7 @@ | \s* [\[\]{},] ) '; - name = 'meta.flow-pair.key.yaml'; + name = 'meta.flow-pair.key.ansible'; patterns = ( { include = '#flow-scalar-plain-in-implicit-type'; @@ -419,7 +424,7 @@ | [?:-] [^\s[\[\]{},]] ) '; - contentName = 'entity.name.tag.yaml'; + contentName = 'entity.name.tag.ansible'; end = '(?x) (?= \s* $ | \s+ \# @@ -428,7 +433,7 @@ | \s* [\[\]{},] ) '; - name = 'string.unquoted.plain.in.yaml'; + name = 'string.unquoted.plain.in.ansible'; } ); }, @@ -439,11 +444,11 @@ begin = ':(?=\s|$|[\[\]{},])'; captures = { 0 = { - name = 'punctuation.separator.key-value.mapping.yaml'; + name = 'punctuation.separator.key-value.mapping.ansible'; }; }; end = '(?=[},\]])'; - name = 'meta.flow-pair.yaml'; + name = 'meta.flow-pair.ansible'; patterns = ( { include = '#flow-value'; @@ -469,24 +474,24 @@ begin = '"'; beginCaptures = { 0 = { - name = 'punctuation.definition.string.begin.yaml'; + name = 'punctuation.definition.string.begin.ansible'; }; }; end = '"'; endCaptures = { 0 = { - name = 'punctuation.definition.string.end.yaml'; + name = 'punctuation.definition.string.end.ansible'; }; }; - name = 'string.quoted.double.yaml'; + name = 'string.quoted.double.ansible'; patterns = ( { match = '\\([0abtnvfre "/\\N_Lp]|x\d\d|u\d{4}|U\d{8})'; - name = 'constant.character.escape.yaml'; + name = 'constant.character.escape.ansible'; }, { match = '\\\n'; - name = 'constant.character.escape.double-quoted.newline.yaml'; + name = 'constant.character.escape.double-quoted.newline.ansible'; } ); }; @@ -508,7 +513,7 @@ | \s* [\[\]{},] ) '; - name = 'string.unquoted.plain.in.yaml'; + name = 'string.unquoted.plain.in.ansible'; } ); }; @@ -517,25 +522,25 @@ { captures = { 1 = { - name = 'constant.language.null.yaml'; + name = 'constant.language.null.ansible'; }; 2 = { - name = 'constant.language.boolean.yaml'; + name = 'constant.language.boolean.ansible'; }; 3 = { - name = 'constant.numeric.integer.yaml'; + name = 'constant.numeric.integer.ansible'; }; 4 = { - name = 'constant.numeric.float.yaml'; + name = 'constant.numeric.float.ansible'; }; 5 = { - name = 'constant.other.timestamp.yaml'; + name = 'constant.other.timestamp.ansible'; }; 6 = { - name = 'constant.language.value.yaml'; + name = 'constant.language.value.ansible'; }; 7 = { - name = 'constant.language.merge.yaml'; + name = 'constant.language.merge.ansible'; }; }; match = '(?x) @@ -606,7 +611,7 @@ | \s* : (\s|$) ) '; - name = 'string.unquoted.plain.out.yaml'; + name = 'string.unquoted.plain.out.ansible'; } ); }; @@ -615,25 +620,25 @@ { captures = { 1 = { - name = 'constant.language.null.yaml'; + name = 'constant.language.null.ansible'; }; 2 = { - name = 'constant.language.boolean.yaml'; + name = 'constant.language.boolean.ansible'; }; 3 = { - name = 'constant.numeric.integer.yaml'; + name = 'constant.numeric.integer.ansible'; }; 4 = { - name = 'constant.numeric.float.yaml'; + name = 'constant.numeric.float.ansible'; }; 5 = { - name = 'constant.other.timestamp.yaml'; + name = 'constant.other.timestamp.ansible'; }; 6 = { - name = 'constant.language.value.yaml'; + name = 'constant.language.value.ansible'; }; 7 = { - name = 'constant.language.merge.yaml'; + name = 'constant.language.merge.ansible'; }; }; match = '(?x) @@ -690,20 +695,20 @@ begin = ''''; beginCaptures = { 0 = { - name = 'punctuation.definition.string.begin.yaml'; + name = 'punctuation.definition.string.begin.ansible'; }; }; end = '''(?!'')'; endCaptures = { 0 = { - name = 'punctuation.definition.string.end.yaml'; + name = 'punctuation.definition.string.end.ansible'; }; }; - name = 'string.quoted.single.yaml'; + name = 'string.quoted.single.ansible'; patterns = ( { match = ''''''; - name = 'constant.character.escape.single-quoted.yaml'; + name = 'constant.character.escape.single-quoted.ansible'; } ); }; @@ -711,23 +716,23 @@ begin = '\['; beginCaptures = { 0 = { - name = 'punctuation.definition.sequence.begin.yaml'; + name = 'punctuation.definition.sequence.begin.ansible'; }; }; end = '\]'; endCaptures = { 0 = { - name = 'punctuation.definition.sequence.end.yaml'; + name = 'punctuation.definition.sequence.end.ansible'; }; }; - name = 'meta.flow-sequence.yaml'; + name = 'meta.flow-sequence.ansible'; patterns = ( { include = '#prototype'; }, { match = ','; - name = 'punctuation.separator.sequence.yaml'; + name = 'punctuation.separator.sequence.ansible'; }, { include = '#flow-pair'; @@ -742,7 +747,7 @@ { begin = '\G(?![},\]])'; end = '(?=[},\]])'; - name = 'meta.flow-pair.value.yaml'; + name = 'meta.flow-pair.value.ansible'; patterns = ( { include = '#flow-node'; @@ -761,21 +766,21 @@ property = { begin = '(?=!|&)'; end = '(?!\G)'; - name = 'meta.property.yaml'; + name = 'meta.property.ansible'; patterns = ( { captures = { 1 = { - name = 'keyword.control.property.anchor.yaml'; + name = 'keyword.control.property.anchor.ansible'; }; 2 = { - name = 'punctuation.definition.anchor.yaml'; + name = 'punctuation.definition.anchor.ansible'; }; 3 = { - name = 'entity.name.type.anchor.yaml'; + name = 'entity.name.type.anchor.ansible'; }; 4 = { - name = 'invalid.illegal.character.anchor.yaml'; + name = 'invalid.illegal.character.anchor.ansible'; }; }; match = '\G((&))([^\s\[\]/{/},]+)(\S+)?'; @@ -789,11 +794,11 @@ | ! ) (?=\ |\t|$) '; - name = 'storage.type.tag-handle.yaml'; + name = 'storage.type.tag-handle.ansible'; }, { match = '\S+'; - name = 'invalid.illegal.tag-handle.yaml'; + name = 'invalid.illegal.tag-handle.ansible'; } ); }; @@ -808,6 +813,6 @@ ); }; }; - scopeName = 'source.yaml'; + scopeName = 'source.ansible'; uuid = 686AD6AE-33F3-4493-9512-9E9FC1D5417F; } \ No newline at end of file diff --git a/syntaxes/generated/injection.tmLanguage b/syntaxes/generated/injection.tmLanguage new file mode 100644 index 000000000..8e58dfa18 --- /dev/null +++ b/syntaxes/generated/injection.tmLanguage @@ -0,0 +1,29 @@ + + + + + scopeName + test.injection + injectionSelector + L:entity.name.tag.yaml + name + TextMate Grammar Property List + patterns + + + include + #test + + + repository + + test + + name + keyword.todo + match + name + + + + \ No newline at end of file diff --git a/syntaxes/injection.tmLanguage.plist b/syntaxes/injection.tmLanguage.plist new file mode 100644 index 000000000..a80366729 --- /dev/null +++ b/syntaxes/injection.tmLanguage.plist @@ -0,0 +1,14 @@ +{ + scopeName = 'test.injection'; + injectionSelector = 'L:entity.name.tag.yaml'; + name = 'TextMate Grammar Property List'; + patterns = ( + { include = '#test'; } + ); + repository = { + test = { + name = 'keyword.todo'; + match = 'name'; + }; + }; +} \ No newline at end of file From 52487434ad3b8197a1b5e91b7d7597cd0af4bd4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sat, 20 Feb 2021 22:52:23 +0100 Subject: [PATCH 006/558] Grammar for Jinja expressions in conditionals done (except comments) --- .../generated/jinja-conditionals.tmLanguage | 282 ++++++++++++------ .../jinja-conditionals.tmLanguage.plist | 204 ++++++++----- 2 files changed, 325 insertions(+), 161 deletions(-) diff --git a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage index 5bcebef4f..c02822424 100644 --- a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage +++ b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage @@ -5,7 +5,7 @@ scopeName injection.ansible.jinja-conditionals name - Grammar for Jinja2 expressions surrounded by double curly braces + Grammar for Jinja2 expressions in Ansible conditionals patterns @@ -17,23 +17,66 @@ Flow style collections are not supported (yet) repository - test - - begin - ^(\s*) - end - ^(?!\1s+) - name - asdf.test.ansible - ansible-condition patterns + name + meta.flow.ansible.condition + begin + (?x) + ^(\s*) # 1 + (?:(-)(\s+))? # 2, 3; in case it is first key of a list item + \b( # 4 + changed_when + | failed_when + | when + | check_mode + )\b + \s* (:) # 5 + \s+ (?![|>]|\s*$) # not starting a block (scalar or other) + + beginCaptures + + 2 + + name + punctuation.definition.block.sequence.item.ansible + + 4 + + name + keyword.other.special-method.ansible + + 5 + + name + punctuation.separator.key-value.mapping.ansible + + + end + (?x) + ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches + + patterns + + + include + #yaml-quoted-string + + + include + #yaml-unquoted-string + + + + + name + meta.block-scalar.ansible.condition comment - Flow style expression + Keyword detection begin (?x) @@ -46,8 +89,7 @@ | check_mode )\b \s* (:) # 5 - (?!\s+[|>]|\s*$) # not starting a block - \s+ (["']?) # 6 + \s+ (?: (\|) | (>) ) ([1-9])? ([-+])? # 6,7,8,9; starting a scalar block beginCaptures @@ -69,39 +111,43 @@ 6 name - punctuation.definition.string.begin.ansible + keyword.control.flow.block-scalar.literal.ansible - - end - (?x) - ( - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - | ((?=["'])\6) \s* $ # 1; if it started with a quote and the line ends - ) - - endCaptures - - 1 + 7 name - punctuation.definition.string.end.ansible + keyword.control.flow.block-scalar.folded.ansible + + 8 + + name + constant.numeric.indentation-indicator.ansible + + 9 + + name + storage.modifier.chomping-indicator.ansible - contentName - variable.other.constant.ansible variable.language meta.embedded.inline.jinja + end + (?x) + ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches + patterns include - #test - - - include - source.jinja#expression + #yaml-scalar-block + name + meta.block.ansible.condition + comment + + Keyword detection + begin (?x) ^(\s*) # 1 @@ -113,7 +159,7 @@ | check_mode )\b \s* (:) # 5 - \s*$ # starting a block collection or string in block + \s*$ # starting other block beginCaptures @@ -135,91 +181,149 @@ end (?x) - ( - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - | ((?=["'])\6) \s* $ # 1; if it started with a quote and the line ends - ) + ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - end - ^(?!\1\s+-\s+|$) patterns - - begin - (?:["'])(.*)(?=["']\s*?$) - beginCaptures - - 1 - - patterns - - - include - source.jinja#expression - - - - - end - $ - include - source.jinja#expression + #yaml-block + + + yaml-block + + patterns + + name + meta.yaml-block.ansible.condition + comment + + Well-indented block; possibly list + begin - (\s*)(?:(?:-\s+)?((?:changed_|failed_)?when|check_mode):\s+|-\s+)(?:(\|)|(>))([1-9])?([-+])?(.*\n?) + (?x) + ^(\s*) # 1 + (?:(-)(\s+))? # 2, 3; in case it a list item + beginCaptures 2 name - keyword.other.special-method.ansible + punctuation.definition.block.sequence.item.ansible - 3 + + end + (?x) + ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches + + contentName + variable.other.constant.ansible variable.language meta.embedded.inline.jinja + patterns + - name - punctuation.definition.block.scalar.literal.ansible + include + #yaml-quoted-string - 4 - name - punctuation.definition.block.scalar.folded.ansible + include + #yaml-unquoted-string - 5 + + + + + yaml-scalar-block + + patterns + + + name + meta.yaml-block.ansible.condition + comment + + Well-indented scalar block (for `>` and `|`) + + begin + (?x) + ^(\s*) # 1 + + end + (?x) + ^(?!\1\s+) # if the indentation is too small + + contentName + variable.other.constant.ansible variable.language meta.embedded.inline.jinja + patterns + - name - constant.numeric.indentation-indicator.ansible + include + source.jinja#expression - 6 + + + + + yaml-quoted-string + + patterns + + + name + meta.quoted-string.ansible.condition + begin + ["'] + beginCaptures + + 0 name - support.other.chomping-indicator.ansible + punctuation.definition.string.begin.ansible - 7 + + end + (?x) + (\0) \s* $ # 1; if it started with a quote and the line ends (TODO: replace with illegals matching) + + endCaptures + + 1 - patterns - - - include - #comment - - - match - .+ - name - invalid.illegal.expected-comment-or-newline.ansible - - + name + punctuation.definition.string.end.ansible contentName - string.unquoted.block.ansible + variable.other.constant.ansible variable.language meta.embedded.inline.jinja + patterns + + + include + source.jinja#expression + + + + + + yaml-unquoted-string + + patterns + + + comment + Capture any non-whitespace and end as fast as possible (when inner pattern ends) + name + meta.unquoted-string.ansible.condition + begin + (?=\S) end - ^(?!\1\s+\S|$) + (?!\G) + contentName + variable.other.constant.ansible variable.language meta.embedded.inline.jinja patterns diff --git a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist index 40821a3fd..533e27c54 100644 --- a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist +++ b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist @@ -1,22 +1,15 @@ { scopeName = 'injection.ansible.jinja-conditionals'; - name = 'Grammar for Jinja2 expressions surrounded by double curly braces'; + name = 'Grammar for Jinja2 expressions in Ansible conditionals'; patterns = ( { include = '#ansible-condition'; } ); comment = 'Flow style collections are not supported (yet)'; repository = { - test = { - begin = '^(\s*)'; - end = '^(?!\1s+)'; - name = 'asdf.test.ansible'; - }; ansible-condition = { patterns = ( { - comment = ( - 'Flow style expression' - ); + name = 'meta.flow.ansible.condition'; begin = '(?x) ^(\s*) # 1 (?:(-)(\s+))? # 2, 3; in case it is first key of a list item @@ -27,8 +20,7 @@ | check_mode )\b \s* (:) # 5 - (?!\s+[|>]|\s*$) # not starting a block - \s+ (["'']?) # 6 + \s+ (?![|>]|\s*$) # not starting a block (scalar or other) '; beginCaptures = { 2 = { @@ -40,28 +32,20 @@ 5 = { name = 'punctuation.separator.key-value.mapping.ansible'; }; - 6 = { - name = 'punctuation.definition.string.begin.ansible'; - }; }; end = '(?x) - ( - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - | ((?=["''])\6) \s* $ # 1; if it started with a quote and the line ends - ) + ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches '; - endCaptures = { - 1 = { - name = 'punctuation.definition.string.end.ansible'; - }; - }; - contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja'; patterns = ( - { include = '#test'; }, - { include = 'source.jinja#expression'; } + { include = '#yaml-quoted-string'; }, + { include = '#yaml-unquoted-string'; } ); }, { + name = 'meta.block-scalar.ansible.condition'; + comment = ( + 'Keyword detection' + ); begin = '(?x) ^(\s*) # 1 (?:(-)(\s+))? # 2, 3; in case it is first key of a list item @@ -72,7 +56,7 @@ | check_mode )\b \s* (:) # 5 - \s*$ # starting a block collection or string in block + \s+ (?: (\|) | (>) ) ([1-9])? ([-+])? # 6,7,8,9; starting a scalar block '; beginCaptures = { 2 = { @@ -84,69 +68,145 @@ 5 = { name = 'punctuation.separator.key-value.mapping.ansible'; }; + 6 = { + name = 'keyword.control.flow.block-scalar.literal.ansible'; + }; + 7 = { + name = 'keyword.control.flow.block-scalar.folded.ansible'; + }; + 8 = { + name = 'constant.numeric.indentation-indicator.ansible'; + }; + 9 = { + name = 'storage.modifier.chomping-indicator.ansible'; + }; }; end = '(?x) - ( - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - | ((?=["''])\6) \s* $ # 1; if it started with a quote and the line ends - ) + ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches '; - end = '^(?!\1\s+-\s+|$)'; patterns = ( - { - begin = '(?:["''])(.*)(?=["'']\s*?$)'; - beginCaptures = { - 1 = { - patterns = ( - { - include = 'source.jinja#expression'; - } - ); - }; - }; - end = '$'; - }, - { - include = 'source.jinja#expression'; - } + { include = '#yaml-scalar-block'; }, ); }, { - begin = '(\s*)(?:(?:-\s+)?((?:changed_|failed_)?when|check_mode):\s+|-\s+)(?:(\|)|(>))([1-9])?([-+])?(.*\n?)'; + name = 'meta.block.ansible.condition'; + comment = ( + 'Keyword detection' + ); + begin = '(?x) + ^(\s*) # 1 + (?:(-)(\s+))? # 2, 3; in case it is first key of a list item + \b( # 4 + changed_when + | failed_when + | when + | check_mode + )\b + \s* (:) # 5 + \s*$ # starting other block + '; beginCaptures = { 2 = { - name = 'keyword.other.special-method.ansible'; - }; - 3 = { - name = 'punctuation.definition.block.scalar.literal.ansible'; + name = 'punctuation.definition.block.sequence.item.ansible'; }; 4 = { - name = 'punctuation.definition.block.scalar.folded.ansible'; + name = 'keyword.other.special-method.ansible'; }; 5 = { - name = 'constant.numeric.indentation-indicator.ansible'; + name = 'punctuation.separator.key-value.mapping.ansible'; }; - 6 = { - name = 'support.other.chomping-indicator.ansible'; + }; + end = '(?x) + ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches + '; + patterns = ( + { include = '#yaml-block'; }, + ); + } + ); + }; + yaml-block = { + patterns = ( + { + name = 'meta.yaml-block.ansible.condition'; + comment = ( + 'Well-indented block; possibly list' + ); + begin = '(?x) + ^(\s*) # 1 + (?:(-)(\s+))? # 2, 3; in case it a list item + '; + beginCaptures = { + 2 = { + name = 'punctuation.definition.block.sequence.item.ansible'; }; - 7 = { - patterns = ( - { - include = '#comment'; - }, - { - match = '.+'; - name = 'invalid.illegal.expected-comment-or-newline.ansible'; - } - ); + }; + end = '(?x) + ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches + '; + contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja'; + patterns = ( + { include = '#yaml-quoted-string'; }, + { include = '#yaml-unquoted-string'; } + ); + } + ); + }; + yaml-scalar-block = { + patterns = ( + { + name = 'meta.yaml-block.ansible.condition'; + comment = ( + 'Well-indented scalar block (for `>` and `|`)' + ); + begin = '(?x) + ^(\s*) # 1 + '; + end = '(?x) + ^(?!\1\s+) # if the indentation is too small + '; + contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja'; + patterns = ( + { include = 'source.jinja#expression'; }, + ); + } + ); + }; + yaml-quoted-string = { + patterns = ( + { + name = 'meta.quoted-string.ansible.condition'; + begin = '["'']'; + beginCaptures = { + 0 = { + name = 'punctuation.definition.string.begin.ansible'; + }; + }; + end = '(?x) + (\0) \s* $ # 1; if it started with a quote and the line ends (TODO: replace with illegals matching) + '; + endCaptures = { + 1 = { + name = 'punctuation.definition.string.end.ansible'; }; }; - contentName = 'string.unquoted.block.ansible'; - end = '^(?!\1\s+\S|$)'; + contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja'; + patterns = ( + { include = 'source.jinja#expression'; }, + ); + } + ); + }; + yaml-unquoted-string = { + patterns = ( + { + comment = 'Capture any non-whitespace and end as fast as possible (when inner pattern ends)'; + name = 'meta.unquoted-string.ansible.condition'; + begin = '(?=\S)'; + end = '(?!\G)'; + contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja'; patterns = ( - { - include = 'source.jinja#expression'; - } + { include = 'source.jinja#expression'; }, ); } ); From cff39956789521ccc1b2afab4a5cb9b08cc61e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sat, 20 Feb 2021 23:50:16 +0100 Subject: [PATCH 007/558] Comments working now in conditionals --- .../generated/jinja-conditionals.tmLanguage | 26 +++++++++++++++---- .../jinja-conditionals.tmLanguage.plist | 19 +++++++++++--- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage index c02822424..3f93997c1 100644 --- a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage +++ b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage @@ -14,7 +14,17 @@ comment - Flow style collections are not supported (yet) + + Flow style collections are not supported (yet) + Proper YAML comment highlighting will not work in nested Jinja expressions. For example: + when: condition1 # this works + or condition2 + + when: (condition1 # this will not work + or condition2) + It is impossible to implement that with TM grammars, without modifying the Jinja grammar itself. + + repository ansible-condition @@ -61,6 +71,10 @@ patterns + + include + source.ansible#comment + include #yaml-quoted-string @@ -221,10 +235,12 @@ (?x) ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - contentName - variable.other.constant.ansible variable.language meta.embedded.inline.jinja patterns + + include + source.ansible#comment + include #yaml-quoted-string @@ -262,7 +278,7 @@ include - source.jinja#expression + #yaml-unquoted-string @@ -287,7 +303,7 @@ end (?x) - (\0) \s* $ # 1; if it started with a quote and the line ends (TODO: replace with illegals matching) + (\0) # 1; match the starting quote (TODO: add illegals matching) endCaptures diff --git a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist index 533e27c54..0eb8b4f8d 100644 --- a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist +++ b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist @@ -4,7 +4,17 @@ patterns = ( { include = '#ansible-condition'; } ); - comment = 'Flow style collections are not supported (yet)'; + comment = ( + 'Flow style collections are not supported (yet)', + 'Proper YAML comment highlighting will not work in nested Jinja expressions. For example: + when: condition1 # this works + or condition2 + + when: (condition1 # this will not work + or condition2) + It is impossible to implement that with TM grammars, without modifying the Jinja grammar itself. + ', + ); repository = { ansible-condition = { patterns = ( @@ -37,6 +47,7 @@ ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches '; patterns = ( + { include = 'source.ansible#comment'; }, { include = '#yaml-quoted-string'; }, { include = '#yaml-unquoted-string'; } ); @@ -144,8 +155,8 @@ end = '(?x) ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches '; - contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja'; patterns = ( + { include = 'source.ansible#comment'; }, { include = '#yaml-quoted-string'; }, { include = '#yaml-unquoted-string'; } ); @@ -167,7 +178,7 @@ '; contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja'; patterns = ( - { include = 'source.jinja#expression'; }, + { include = '#yaml-unquoted-string'; }, ); } ); @@ -183,7 +194,7 @@ }; }; end = '(?x) - (\0) \s* $ # 1; if it started with a quote and the line ends (TODO: replace with illegals matching) + (\0) # 1; match the starting quote (TODO: add illegals matching) '; endCaptures = { 1 = { From 9da06606d2ad49de12a388f09d6f1db8e8651e04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sun, 21 Feb 2021 00:44:33 +0100 Subject: [PATCH 008/558] Improved on string escaping Will need to import and inject Jinja grammar --- .../generated/jinja-conditionals.tmLanguage | 134 +++++++++++++++++- .../jinja-conditionals.tmLanguage.plist | 82 ++++++++++- 2 files changed, 206 insertions(+), 10 deletions(-) diff --git a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage index 3f93997c1..cab505e64 100644 --- a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage +++ b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage @@ -24,6 +24,7 @@ or condition2) It is impossible to implement that with TM grammars, without modifying the Jinja grammar itself. + Same as above applies to escaping quotes repository @@ -77,7 +78,11 @@ include - #yaml-quoted-string + #yaml-double-quoted-string + + + include + #yaml-single-quoted-string include @@ -243,7 +248,11 @@ include - #yaml-quoted-string + #yaml-double-quoted-string + + + include + #yaml-single-quoted-string include @@ -284,7 +293,85 @@ - yaml-quoted-string + yaml-single-quoted-string + + patterns + + + name + meta.quoted-string.ansible.condition + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.ansible + + + end + (?x) + ('(?!')) # 1; match the starting quote (TODO: add illegals matching) + (?: (?=\s+\#) | (.*$) ) # 2; unless it is a comment anything trailing here is illegal + + endCaptures + + 1 + + name + punctuation.definition.string.end.ansible + + 2 + + name + invalid.illegal.expected-comment-or-newline.ansible + + + contentName + variable.other.constant.ansible variable.language meta.embedded.inline.jinja + patterns + + + begin + '' + beginCaptures + + 0 + + name + constant.character.escape.single-quoted.ansible + + + end + '' + endCaptures + + 0 + + name + constant.character.escape.single-quoted.ansible + + + contentName + string.quoted.single.jinja + patterns + + + include + source.jinja#string + + + + + include + source.jinja#expression + + + + + + yaml-double-quoted-string patterns @@ -292,7 +379,7 @@ name meta.quoted-string.ansible.condition begin - ["'] + " beginCaptures 0 @@ -303,7 +390,8 @@ end (?x) - (\0) # 1; match the starting quote (TODO: add illegals matching) + (") # 1; match the starting quote (TODO: add illegals matching) + (?: (?=\s+\#) | (.*$) ) # 2; unless it is a comment anything trailing here is illegal endCaptures @@ -312,11 +400,47 @@ name punctuation.definition.string.end.ansible + 2 + + name + invalid.illegal.expected-comment-or-newline.ansible + contentName variable.other.constant.ansible variable.language meta.embedded.inline.jinja patterns + + begin + \\" + beginCaptures + + 0 + + name + constant.character.escape.double-quoted.ansible + + + end + \\" + endCaptures + + 0 + + name + constant.character.escape.double-quoted.ansible + + + contentName + string.quoted.double.jinja + patterns + + + include + source.jinja#string + + + include source.jinja#expression diff --git a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist index 0eb8b4f8d..5f6617f12 100644 --- a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist +++ b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist @@ -14,6 +14,7 @@ or condition2) It is impossible to implement that with TM grammars, without modifying the Jinja grammar itself. ', + 'Same as above applies to escaping quotes' ); repository = { ansible-condition = { @@ -48,7 +49,8 @@ '; patterns = ( { include = 'source.ansible#comment'; }, - { include = '#yaml-quoted-string'; }, + { include = '#yaml-double-quoted-string'; }, + { include = '#yaml-single-quoted-string'; }, { include = '#yaml-unquoted-string'; } ); }, @@ -157,7 +159,8 @@ '; patterns = ( { include = 'source.ansible#comment'; }, - { include = '#yaml-quoted-string'; }, + { include = '#yaml-double-quoted-string'; }, + { include = '#yaml-single-quoted-string'; }, { include = '#yaml-unquoted-string'; } ); } @@ -183,26 +186,95 @@ } ); }; - yaml-quoted-string = { + yaml-single-quoted-string = { patterns = ( { name = 'meta.quoted-string.ansible.condition'; - begin = '["'']'; + begin = "'"; beginCaptures = { 0 = { name = 'punctuation.definition.string.begin.ansible'; }; }; end = '(?x) - (\0) # 1; match the starting quote (TODO: add illegals matching) + (''(?!'')) # 1; match the starting quote (TODO: add illegals matching) + (?: (?=\s+\#) | (.*$) ) # 2; unless it is a comment anything trailing here is illegal '; endCaptures = { 1 = { name = 'punctuation.definition.string.end.ansible'; }; + 2 = { + name = 'invalid.illegal.expected-comment-or-newline.ansible'; + }; + }; + contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja'; + patterns = ( + { + begin = "''"; + beginCaptures = { + 0 = { + name = 'constant.character.escape.single-quoted.ansible'; + }; + }; + end = "''"; + endCaptures = { + 0 = { + name = 'constant.character.escape.single-quoted.ansible'; + }; + }; + contentName = 'string.quoted.single.jinja'; + patterns = ( + { include = 'source.jinja#string'; } + ); + }, + { include = 'source.jinja#expression'; }, + ); + } + ); + }; + yaml-double-quoted-string = { + patterns = ( + { + name = 'meta.quoted-string.ansible.condition'; + begin = '"'; + beginCaptures = { + 0 = { + name = 'punctuation.definition.string.begin.ansible'; + }; + }; + end = '(?x) + (") # 1; match the starting quote (TODO: add illegals matching) + (?: (?=\s+\#) | (.*$) ) # 2; unless it is a comment anything trailing here is illegal + '; + endCaptures = { + 1 = { + name = 'punctuation.definition.string.end.ansible'; + }; + 2 = { + name = 'invalid.illegal.expected-comment-or-newline.ansible'; + }; }; contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja'; patterns = ( + { + begin = '\\"'; + beginCaptures = { + 0 = { + name = 'constant.character.escape.double-quoted.ansible'; + }; + }; + end = '\\"'; + endCaptures = { + 0 = { + name = 'constant.character.escape.double-quoted.ansible'; + }; + }; + contentName = 'string.quoted.double.jinja'; + patterns = ( + { include = 'source.jinja#string'; } + ); + }, { include = 'source.jinja#expression'; }, ); } From 2817db1a62023718397b4fa5cb9eae3a9dcd618c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sun, 21 Feb 2021 15:06:36 +0100 Subject: [PATCH 009/558] Implemented comments and quote escapes for Jinja conditions --- .vscode/settings.json | 3 + ansible-language-configuration.json | 35 ++ ....json => jinja-language-configuration.json | 14 +- package.json | 54 ++- .../ansible/generated/jinja-braces.tmLanguage | 2 +- .../generated/jinja-conditionals.tmLanguage | 37 +- .../jinja-double-quote-escape.tmLanguage | 56 +++ .../jinja-single-quote-escape.tmLanguage | 56 +++ .../generated/jinja-yaml-comments.tmLanguage | 19 + .../ansible/jinja-braces.tmLanguage.plist | 2 +- .../jinja-conditionals.tmLanguage.plist | 38 +- ...jinja-double-quote-escape.tmLanguage.plist | 33 ++ ...jinja-single-quote-escape.tmLanguage.plist | 33 ++ .../jinja-yaml-comments.tmLanguage.plist | 8 + syntaxes/external/jinja.tmLanguage.json | 349 ++++++++++++++++++ 15 files changed, 706 insertions(+), 33 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 ansible-language-configuration.json rename language-configuration.json => jinja-language-configuration.json (62%) create mode 100644 syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage create mode 100644 syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage create mode 100644 syntaxes/ansible/generated/jinja-yaml-comments.tmLanguage create mode 100644 syntaxes/ansible/jinja-double-quote-escape.tmLanguage.plist create mode 100644 syntaxes/ansible/jinja-single-quote-escape.tmLanguage.plist create mode 100644 syntaxes/ansible/jinja-yaml-comments.tmLanguage.plist create mode 100644 syntaxes/external/jinja.tmLanguage.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..97924983a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.formatOnSave": false +} \ No newline at end of file diff --git a/ansible-language-configuration.json b/ansible-language-configuration.json new file mode 100644 index 000000000..65226bdd1 --- /dev/null +++ b/ansible-language-configuration.json @@ -0,0 +1,35 @@ +// Imported from: +// https://github.com/samuelcolvin/jinjahtml-vscode/blob/b8fe444cbd838afb4962bb2446e67c85e0443675/language-configuration.json +{ + "comments": { + // symbols used for start and end a block comment. Remove this entry if your language does not support block comments + "lineComment": "#" + }, + // symbols used as brackets + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + // symbols that are auto closed when typing + "autoClosingPairs": [ + ["[", "]"], + ["{", "}"], + ["\"", "\""], + ["'", "'"], + ["{{ ", " "] // curly braces are already auto-closed, this adds space at the end if one is added at the beginning + ], + // added `'` and `"` -> in Ansible this pattern is extremely common: + // `"{{ jinja_expression }}"` + // with default config, `"` gets auto-closed and with cursor in the middle (`"|"`), brace auto-closing would not work + "autoCloseBefore": "'\";:.,=}])> \n\t", + // symbols that can be used to surround a selection + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"], + [" ", " "] // for spacing Jinja (and other) expressions; this setting might be a bit controversial ;) + ] +} \ No newline at end of file diff --git a/language-configuration.json b/jinja-language-configuration.json similarity index 62% rename from language-configuration.json rename to jinja-language-configuration.json index 8f162a0c4..027840618 100644 --- a/language-configuration.json +++ b/jinja-language-configuration.json @@ -1,9 +1,9 @@ +// Imported from: +// https://github.com/samuelcolvin/jinjahtml-vscode/blob/b8fe444cbd838afb4962bb2446e67c85e0443675/language-configuration.json { "comments": { - // symbol used for single line comment. Remove this entry if your language does not support line comments - "lineComment": "//", // symbols used for start and end a block comment. Remove this entry if your language does not support block comments - "blockComment": [ "/*", "*/" ] + "blockComment": [ "{#", "#}" ] }, // symbols used as brackets "brackets": [ @@ -13,13 +13,15 @@ ], // symbols that are auto closed when typing "autoClosingPairs": [ - ["{", "}"], ["[", "]"], ["(", ")"], ["\"", "\""], - ["'", "'"] + ["'", "'"], + ["{#", "#}"], + ["{{", "}}"], + ["{%", "%}"] ], - // symbols that can be used to surround a selection + // symbols that that can be used to surround a selection "surroundingPairs": [ ["{", "}"], ["[", "]"], diff --git a/package.json b/package.json index 3d1a298d2..ed15db2a7 100644 --- a/package.json +++ b/package.json @@ -21,16 +21,34 @@ ".yml", ".yaml" ], - "configuration": "./language-configuration.json" + "configuration": "./ansible-language-configuration.json" + }, + { + // unfortunately this dummy entry is necessary for embedding to work + // on the bright side, we don't need to rely on Jinja extension being installed + "id": "ansible-jinja", + "configuration": "./jinja-language-configuration.json" } ], "grammars": [ { + // YAML syntax as base for ansible + // scopeName changed so that injections don't affect regular YAML "language": "ansible", "scopeName": "source.ansible", "path": "./syntaxes/external/YAML.tmLanguage" }, { + // imported jinja syntax + // this is for supporting string escaping and comments (otherwise support would be limited) + // scopeName changed so that injections don't affect regular Jinja + "language": "ansible-jinja", + "scopeName": "source.ansible-jinja", + "path": "./syntaxes/external/jinja.tmLanguage.json" + }, + { + // changes highlighting of Ansible tags + // makes Ansible keyword tags distinct from other tags "path": "./syntaxes/ansible/generated/keywords.tmLanguage", "scopeName": "injection.ansible.keywords", "injectTo": [ @@ -38,24 +56,54 @@ ] }, { + // support for Jinja in double curly braces "path": "./syntaxes/ansible/generated/jinja-braces.tmLanguage", "scopeName": "injection.ansible.jinja-braces", "embeddedLanguages": { - "meta.embedded.inline.jinja": "jinja" + "meta.embedded.inline.jinja": "ansible-jinja" }, "injectTo": [ "source.ansible" ] }, { + // support for Jinja in conditionals "path": "./syntaxes/ansible/generated/jinja-conditionals.tmLanguage", "scopeName": "injection.ansible.jinja-conditionals", "embeddedLanguages": { - "meta.embedded.inline.jinja": "jinja" + "meta.embedded.inline.jinja": "ansible-jinja" }, "injectTo": [ "source.ansible" ] + }, + { + // support for YAML comments in Jinja + "path": "./syntaxes/ansible/generated/jinja-yaml-comments.tmLanguage", + "scopeName": "injection.ansible.jinja-comments", + "injectTo": [ + "source.ansible" + ] + }, + // What follows are techniques that are basically abusing the injection system of VSCode. + // These cannot be replicated in other IDEs with just TM grammars, unless similar injection system is used. + // The basic quote escapes (doesn't work inside brackets etc.) is implemented in the grammar anyway + // if someone finds it useful. + { + // support for single quote escapes in Jinja + "path": "./syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage", + "scopeName": "injection.ansible.jinja-single-quote-escape", + "injectTo": [ + "source.ansible" + ] + }, + { + // support for double quote escapes in Jinja + "path": "./syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage", + "scopeName": "injection.ansible.jinja-double-quote-escape", + "injectTo": [ + "source.ansible" + ] } ] } diff --git a/syntaxes/ansible/generated/jinja-braces.tmLanguage b/syntaxes/ansible/generated/jinja-braces.tmLanguage index d82faf222..670509c59 100644 --- a/syntaxes/ansible/generated/jinja-braces.tmLanguage +++ b/syntaxes/ansible/generated/jinja-braces.tmLanguage @@ -31,7 +31,7 @@ include - source.jinja#expression + source.ansible-jinja#expression diff --git a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage index cab505e64..dabacb2ec 100644 --- a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage +++ b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage @@ -109,6 +109,7 @@ )\b \s* (:) # 5 \s+ (?: (\|) | (>) ) ([1-9])? ([-+])? # 6,7,8,9; starting a scalar block + (.*$) # comment or illegal beginCaptures @@ -147,6 +148,22 @@ name storage.modifier.chomping-indicator.ansible + 10 + + patterns + + + include + source.ansible#comment + + + match + .+ + name + invalid.illegal.expected-comment-or-newline.ansible + + + end (?x) @@ -299,7 +316,7 @@ name - meta.quoted-string.ansible.condition + string.quoted.single.ansible begin ' beginCaptures @@ -312,7 +329,7 @@ end (?x) - ('(?!')) # 1; match the starting quote (TODO: add illegals matching) + ('(?!')) # 1; match the starting quote (?: (?=\s+\#) | (.*$) ) # 2; unless it is a comment anything trailing here is illegal endCaptures @@ -359,13 +376,13 @@ include - source.jinja#string + source.ansible-jinja#string include - source.jinja#expression + source.ansible-jinja#expression @@ -377,7 +394,7 @@ name - meta.quoted-string.ansible.condition + string.quoted.double.ansible begin " beginCaptures @@ -390,7 +407,7 @@ end (?x) - (") # 1; match the starting quote (TODO: add illegals matching) + (") # 1; match the starting quote (?: (?=\s+\#) | (.*$) ) # 2; unless it is a comment anything trailing here is illegal endCaptures @@ -437,13 +454,13 @@ include - source.jinja#string + source.ansible-jinja#string include - source.jinja#expression + source.ansible-jinja#expression @@ -457,7 +474,7 @@ comment Capture any non-whitespace and end as fast as possible (when inner pattern ends) name - meta.unquoted-string.ansible.condition + string.unquoted.ansible begin (?=\S) end @@ -468,7 +485,7 @@ include - source.jinja#expression + source.ansible-jinja#expression diff --git a/syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage b/syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage new file mode 100644 index 000000000..d3fccfe7e --- /dev/null +++ b/syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage @@ -0,0 +1,56 @@ + + + + + scopeName + injection.ansible.jinja-double-quote-escape + injectionSelector + L:string.quoted.double meta.embedded.inline.jinja + name + Injection grammar for supproting double quote escapes in Jinja2 expressions + patterns + + + name + string.quoted.double.jinja + match + (\\")(.*?)(\\") + captures + + 1 + + name + constant.character.escape.double-quoted.ansible + + 2 + + patterns + + + include + source.ansible-jinja#string + + + + 3 + + name + constant.character.escape.double-quoted.ansible + + + + + name + invalid.illegal.expected-escaped-double-quote.ansible + comment + + This technique will remind the user to use quote escaping + + match + (?x) + "(?! \s+ (?=\#|$)) # we accept the quote only if the line ends or ends with a comment + + + + + \ No newline at end of file diff --git a/syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage b/syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage new file mode 100644 index 000000000..5a7187a00 --- /dev/null +++ b/syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage @@ -0,0 +1,56 @@ + + + + + scopeName + injection.ansible.jinja-single-quote-escape + injectionSelector + L:string.quoted.single meta.embedded.inline.jinja + name + Injection grammar for supproting single quote escapes in Jinja2 expressions + patterns + + + name + string.quoted.single.jinja + match + ('')(.*?)('') + captures + + 1 + + name + constant.character.escape.single-quoted.ansible + + 2 + + patterns + + + include + source.ansible-jinja#string + + + + 3 + + name + constant.character.escape.single-quoted.ansible + + + + + name + invalid.illegal.expected-escaped-single-quote.ansible + comment + + This technique will remind the user to use quote escaping + + match + (?x) + '(?! \s+ (?=\#|$)) # we accept the quote only if the line ends or ends with a comment + + + + + \ No newline at end of file diff --git a/syntaxes/ansible/generated/jinja-yaml-comments.tmLanguage b/syntaxes/ansible/generated/jinja-yaml-comments.tmLanguage new file mode 100644 index 000000000..9d788ce19 --- /dev/null +++ b/syntaxes/ansible/generated/jinja-yaml-comments.tmLanguage @@ -0,0 +1,19 @@ + + + + + scopeName + injection.ansible.jinja-comments + injectionSelector + L:string.unquoted meta.embedded.inline.jinja + name + Injection grammar for supproting YAML comments in Jinja2 expressions + patterns + + + include + source.ansible#comment + + + + \ No newline at end of file diff --git a/syntaxes/ansible/jinja-braces.tmLanguage.plist b/syntaxes/ansible/jinja-braces.tmLanguage.plist index 2ded879f1..3022065a7 100644 --- a/syntaxes/ansible/jinja-braces.tmLanguage.plist +++ b/syntaxes/ansible/jinja-braces.tmLanguage.plist @@ -12,7 +12,7 @@ end = '\}\}'; contentName = 'meta.embedded.inline.jinja'; patterns = ( - { include = 'source.jinja#expression'; } + { include = 'source.ansible-jinja#expression'; } ); }; }; diff --git a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist index 5f6617f12..853406c6c 100644 --- a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist +++ b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist @@ -6,7 +6,8 @@ ); comment = ( 'Flow style collections are not supported (yet)', - 'Proper YAML comment highlighting will not work in nested Jinja expressions. For example: + 'Without additional contextual injections (which VSCode fortunately suports and that has been used in this extenion) + proper YAML comment highlighting will not work in nested Jinja expressions. For example: when: condition1 # this works or condition2 @@ -14,7 +15,8 @@ or condition2) It is impossible to implement that with TM grammars, without modifying the Jinja grammar itself. ', - 'Same as above applies to escaping quotes' + 'Same as above applies to escaping quotes, except that it cannot be achieved just with TM grammars + even by modifying the Jinja grammar' ); repository = { ansible-condition = { @@ -70,6 +72,7 @@ )\b \s* (:) # 5 \s+ (?: (\|) | (>) ) ([1-9])? ([-+])? # 6,7,8,9; starting a scalar block + (.*$) # comment or illegal '; beginCaptures = { 2 = { @@ -93,6 +96,17 @@ 9 = { name = 'storage.modifier.chomping-indicator.ansible'; }; + 10 = { + patterns = ( + { + include = 'source.ansible#comment'; + }, + { + match = '.+'; + name = 'invalid.illegal.expected-comment-or-newline.ansible'; + } + ); + }; }; end = '(?x) ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches @@ -189,7 +203,7 @@ yaml-single-quoted-string = { patterns = ( { - name = 'meta.quoted-string.ansible.condition'; + name = 'string.quoted.single.ansible'; begin = "'"; beginCaptures = { 0 = { @@ -197,7 +211,7 @@ }; }; end = '(?x) - (''(?!'')) # 1; match the starting quote (TODO: add illegals matching) + (''(?!'')) # 1; match the starting quote (?: (?=\s+\#) | (.*$) ) # 2; unless it is a comment anything trailing here is illegal '; endCaptures = { @@ -225,10 +239,10 @@ }; contentName = 'string.quoted.single.jinja'; patterns = ( - { include = 'source.jinja#string'; } + { include = 'source.ansible-jinja#string'; } ); }, - { include = 'source.jinja#expression'; }, + { include = 'source.ansible-jinja#expression'; }, ); } ); @@ -236,7 +250,7 @@ yaml-double-quoted-string = { patterns = ( { - name = 'meta.quoted-string.ansible.condition'; + name = 'string.quoted.double.ansible'; begin = '"'; beginCaptures = { 0 = { @@ -244,7 +258,7 @@ }; }; end = '(?x) - (") # 1; match the starting quote (TODO: add illegals matching) + (") # 1; match the starting quote (?: (?=\s+\#) | (.*$) ) # 2; unless it is a comment anything trailing here is illegal '; endCaptures = { @@ -272,10 +286,10 @@ }; contentName = 'string.quoted.double.jinja'; patterns = ( - { include = 'source.jinja#string'; } + { include = 'source.ansible-jinja#string'; } ); }, - { include = 'source.jinja#expression'; }, + { include = 'source.ansible-jinja#expression'; }, ); } ); @@ -284,12 +298,12 @@ patterns = ( { comment = 'Capture any non-whitespace and end as fast as possible (when inner pattern ends)'; - name = 'meta.unquoted-string.ansible.condition'; + name = 'string.unquoted.ansible'; begin = '(?=\S)'; end = '(?!\G)'; contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja'; patterns = ( - { include = 'source.jinja#expression'; }, + { include = 'source.ansible-jinja#expression'; }, ); } ); diff --git a/syntaxes/ansible/jinja-double-quote-escape.tmLanguage.plist b/syntaxes/ansible/jinja-double-quote-escape.tmLanguage.plist new file mode 100644 index 000000000..70352fb1a --- /dev/null +++ b/syntaxes/ansible/jinja-double-quote-escape.tmLanguage.plist @@ -0,0 +1,33 @@ +{ + scopeName = 'injection.ansible.jinja-double-quote-escape'; + injectionSelector = 'L:string.quoted.double meta.embedded.inline.jinja'; + name = 'Injection grammar for supproting double quote escapes in Jinja2 expressions'; + patterns = ( + { + name = 'string.quoted.double.jinja'; + match = '(\\")(.*?)(\\")'; + captures = { + 1 = { + name = 'constant.character.escape.double-quoted.ansible'; + }; + 2 = { + patterns = ( + { include = 'source.ansible-jinja#string'; } + ); + }; + 3 = { + name = 'constant.character.escape.double-quoted.ansible'; + }; + }; + }, + { + name = 'invalid.illegal.expected-escaped-double-quote.ansible'; + comment = ( + 'This technique will remind the user to use quote escaping' + ); + match = '(?x) + "(?! \s+ (?=\#|$)) # we accept the quote only if the line ends or ends with a comment + '; + } + ); +} \ No newline at end of file diff --git a/syntaxes/ansible/jinja-single-quote-escape.tmLanguage.plist b/syntaxes/ansible/jinja-single-quote-escape.tmLanguage.plist new file mode 100644 index 000000000..a3781459e --- /dev/null +++ b/syntaxes/ansible/jinja-single-quote-escape.tmLanguage.plist @@ -0,0 +1,33 @@ +{ + scopeName = 'injection.ansible.jinja-single-quote-escape'; + injectionSelector = 'L:string.quoted.single meta.embedded.inline.jinja'; + name = 'Injection grammar for supproting single quote escapes in Jinja2 expressions'; + patterns = ( + { + name = 'string.quoted.single.jinja'; + match = "('')(.*?)('')"; + captures = { + 1 = { + name = 'constant.character.escape.single-quoted.ansible'; + }; + 2 = { + patterns = ( + { include = 'source.ansible-jinja#string'; } + ); + }; + 3 = { + name = 'constant.character.escape.single-quoted.ansible'; + }; + }; + }, + { + name = 'invalid.illegal.expected-escaped-single-quote.ansible'; + comment = ( + 'This technique will remind the user to use quote escaping' + ); + match = '(?x) + ''(?! \s+ (?=\#|$)) # we accept the quote only if the line ends or ends with a comment + '; + } + ); +} \ No newline at end of file diff --git a/syntaxes/ansible/jinja-yaml-comments.tmLanguage.plist b/syntaxes/ansible/jinja-yaml-comments.tmLanguage.plist new file mode 100644 index 000000000..ca9a590be --- /dev/null +++ b/syntaxes/ansible/jinja-yaml-comments.tmLanguage.plist @@ -0,0 +1,8 @@ +{ + scopeName = 'injection.ansible.jinja-comments'; + injectionSelector = 'L:string.unquoted meta.embedded.inline.jinja'; + name = 'Injection grammar for supproting YAML comments in Jinja2 expressions'; + patterns = ( + { include = 'source.ansible#comment'; } + ); +} \ No newline at end of file diff --git a/syntaxes/external/jinja.tmLanguage.json b/syntaxes/external/jinja.tmLanguage.json new file mode 100644 index 000000000..497db2218 --- /dev/null +++ b/syntaxes/external/jinja.tmLanguage.json @@ -0,0 +1,349 @@ +{ + "name": "ansible-jinja", + "scopeName": "source.ansible-jinja", + "comment": [ + "Jinja Templates", + "Imported from:", + "https://github.com/samuelcolvin/jinjahtml-vscode/blob/b8fe444cbd838afb4962bb2446e67c85e0443675/syntaxes/jinja.tmLanguage.json" + ], + "foldingStartMarker": "({%\\s*(block|filter|for|if|macro|raw))", + "foldingStopMarker": "({%\\s*(endblock|endfilter|endfor|endif|endmacro|endraw)\\s*%})", + "patterns": [ + { + "begin": "({%)\\s*(raw)\\s*(%})", + "captures": { + "1": { + "name": "entity.other.jinja.delimiter.tag" + }, + "2": { + "name": "keyword.control.jinja" + }, + "3": { + "name": "entity.other.jinja.delimiter.tag" + } + }, + "end": "({%)\\s*(endraw)\\s*(%})", + "name": "comment.block.jinja.raw" + }, + { + "include": "#comments" + }, + { + "begin": "{{-?", + "captures": [ + { + "name": "entity.other.jinja.delimiter.variable" + } + ], + "end": "-?}}", + "name": "meta.scope.jinja.variable", + "patterns": [ + { + "include": "#expression" + } + ] + }, + { + "begin": "{%-?", + "captures": [ + { + "name": "entity.other.jinja.delimiter.tag" + } + ], + "end": "-?%}", + "name": "meta.scope.jinja.tag", + "patterns": [ + { + "include": "#expression" + } + ] + } + ], + "repository": { + "comments": { + "begin": "{#-?", + "captures": [ + { + "name": "entity.other.jinja.delimiter.comment" + } + ], + "end": "-?#}", + "name": "comment.block.jinja", + "patterns": [ + { + "include": "#comments" + } + ] + }, + "escaped_char": { + "match": "\\\\x[0-9A-F]{2}", + "name": "constant.character.escape.hex.jinja" + }, + "escaped_unicode_char": { + "captures": { + "1": { + "name": "constant.character.escape.unicode.16-bit-hex.jinja" + }, + "2": { + "name": "constant.character.escape.unicode.32-bit-hex.jinja" + }, + "3": { + "name": "constant.character.escape.unicode.name.jinja" + } + }, + "match": "(\\\\U[0-9A-Fa-f]{8})|(\\\\u[0-9A-Fa-f]{4})|(\\\\N\\{[a-zA-Z ]+\\})" + }, + "expression": { + "patterns": [ + { + "captures": { + "1": { + "name": "keyword.control.jinja" + }, + "2": { + "name": "variable.other.jinja.block" + } + }, + "match": "\\s*\\b(block)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b" + }, + { + "captures": { + "1": { + "name": "keyword.control.jinja" + }, + "2": { + "name": "variable.other.jinja.filter" + } + }, + "match": "\\s*\\b(filter)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b" + }, + { + "captures": { + "1": { + "name": "keyword.control.jinja" + }, + "2": { + "name": "variable.other.jinja.test" + } + }, + "match": "\\s*\\b(is)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b" + }, + { + "captures": { + "1": { + "name": "keyword.control.jinja" + } + }, + "match": "(?<=\\{\\%-|\\{\\%)\\s*\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b(?!\\s*[,=])" + }, + { + "match": "\\b(and|else|if|in|import|not|or|recursive|with(out)?\\s+context)\\b", + "name": "keyword.control.jinja" + }, + { + "match": "\\b(true|false|none)\\b", + "name": "constant.language.jinja" + }, + { + "match": "\\b(loop|super|self|varargs|kwargs)\\b", + "name": "variable.language.jinja" + }, + { + "match": "[a-zA-Z_][a-zA-Z0-9_]*", + "name": "variable.other.jinja" + }, + { + "match": "(\\+|\\-|\\*\\*|\\*|\/\/|\/|%)", + "name": "keyword.operator.arithmetic.jinja" + }, + { + "captures": { + "1": { + "name": "punctuation.other.jinja" + }, + "2": { + "name": "variable.other.jinja.filter" + } + }, + "match": "(\\|)([a-zA-Z_][a-zA-Z0-9_]*)" + }, + { + "captures": { + "1": { + "name": "punctuation.other.jinja" + }, + "2": { + "name": "variable.other.jinja.attribute" + } + }, + "match": "(\\.)([a-zA-Z_][a-zA-Z0-9_]*)" + }, + { + "begin": "\\[", + "captures": [ + { + "name": "punctuation.other.jinja" + } + ], + "end": "\\]", + "patterns": [ + { + "include": "#expression" + } + ] + }, + { + "begin": "\\(", + "captures": [ + { + "name": "punctuation.other.jinja" + } + ], + "end": "\\)", + "patterns": [ + { + "include": "#expression" + } + ] + }, + { + "begin": "\\{", + "captures": [ + { + "name": "punctuation.other.jinja" + } + ], + "end": "\\}", + "patterns": [ + { + "include": "#expression" + } + ] + }, + { + "match": "(\\.|:|\\||,)", + "name": "punctuation.other.jinja" + }, + { + "match": "(==|<=|=>|<|>|!=)", + "name": "keyword.operator.comparison.jinja" + }, + { + "match": "=", + "name": "keyword.operator.assignment.jinja" + }, + { + "begin": "\"", + "beginCaptures": [ + { + "name": "punctuation.definition.string.begin.jinja" + } + ], + "end": "\"", + "endCaptures": [ + { + "name": "punctuation.definition.string.end.jinja" + } + ], + "name": "string.quoted.double.jinja", + "patterns": [ + { + "include": "#string" + } + ] + }, + { + "begin": "'", + "beginCaptures": [ + { + "name": "punctuation.definition.string.begin.jinja" + } + ], + "end": "'", + "endCaptures": [ + { + "name": "punctuation.definition.string.end.jinja" + } + ], + "name": "string.quoted.single.jinja", + "patterns": [ + { + "include": "#string" + } + ] + }, + { + "begin": "@\/", + "beginCaptures": [ + { + "name": "punctuation.definition.regexp.begin.jinja" + } + ], + "end": "\/", + "endCaptures": [ + { + "name": "punctuation.definition.regexp.end.jinja" + } + ], + "name": "string.regexp.jinja", + "patterns": [ + { + "include": "#simple_escapes" + } + ] + } + ] + }, + "simple_escapes": { + "captures": { + "1": { + "name": "constant.character.escape.newline.jinja" + }, + "10": { + "name": "constant.character.escape.tab.jinja" + }, + "11": { + "name": "constant.character.escape.vertical-tab.jinja" + }, + "2": { + "name": "constant.character.escape.backlash.jinja" + }, + "3": { + "name": "constant.character.escape.double-quote.jinja" + }, + "4": { + "name": "constant.character.escape.single-quote.jinja" + }, + "5": { + "name": "constant.character.escape.bell.jinja" + }, + "6": { + "name": "constant.character.escape.backspace.jinja" + }, + "7": { + "name": "constant.character.escape.formfeed.jinja" + }, + "8": { + "name": "constant.character.escape.linefeed.jinja" + }, + "9": { + "name": "constant.character.escape.return.jinja" + } + }, + "match": "(\\\\\\n)|(\\\\\\\\)|(\\\\\\\")|(\\\\')|(\\\\a)|(\\\\b)|(\\\\f)|(\\\\n)|(\\\\r)|(\\\\t)|(\\\\v)" + }, + "string": { + "patterns": [ + { + "include": "#simple_escapes" + }, + { + "include": "#escaped_char" + }, + { + "include": "#escaped_unicode_char" + } + ] + } + } +} \ No newline at end of file From 95068d19cad57fa1302cc5b935c1feb9866c2497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sun, 21 Feb 2021 15:21:46 +0100 Subject: [PATCH 010/558] Clarified comments --- package.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index ed15db2a7..8c9181506 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ }, { // unfortunately this dummy entry is necessary for embedding to work - // on the bright side, we don't need to rely on Jinja extension being installed "id": "ansible-jinja", "configuration": "./jinja-language-configuration.json" } @@ -33,15 +32,14 @@ "grammars": [ { // YAML syntax as base for ansible - // scopeName changed so that injections don't affect regular YAML + // scopeName changed so that we can use it as base for injections "language": "ansible", "scopeName": "source.ansible", "path": "./syntaxes/external/YAML.tmLanguage" }, { // imported jinja syntax - // this is for supporting string escaping and comments (otherwise support would be limited) - // scopeName changed so that injections don't affect regular Jinja + // this is so that we don't need to rely on Jinja extension being installed "language": "ansible-jinja", "scopeName": "source.ansible-jinja", "path": "./syntaxes/external/jinja.tmLanguage.json" From a8e76169d84c11c3d0713b2095b547879dca10eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Tue, 23 Feb 2021 11:02:46 +0100 Subject: [PATCH 011/558] Fixed recognition of single & double quoted string Corrected package.json --- README.md | 30 ++----- package.json | 57 ++++++++----- .../generated/jinja-conditionals.tmLanguage | 83 ++++++++++++++----- .../jinja-conditionals.tmLanguage.plist | 51 ++++++++---- 4 files changed, 141 insertions(+), 80 deletions(-) diff --git a/README.md b/README.md index d074f83de..5883edd9e 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,35 @@ # ansible README -This is the README for your extension "ansible". After writing up a brief description, we recommend including the following sections. +> TODO ## Features -Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. + -\!\[feature X\]\(images/feature-x.png\) > Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. ## Requirements -If you have any requirements or dependencies, add a section describing those and how to install and configure them. + ## Extension Settings -Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. + ## Known Issues -Calling out known issues can help limit users opening duplicate issues against your extension. + -## Release Notes - -Users appreciate release notes as you update your extension. - -### 1.0.0 - -Initial release of ... - -### 1.0.1 - -Fixed issue #. - -### 1.1.0 - -Added features X, Y, and Z. ## PLAN - copy and fix existing YAML syntax diff --git a/package.json b/package.json index 8c9181506..3c05e904a 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,13 @@ { "name": "ansible", + "publisher": "tomaciazek", "displayName": "Ansible", "description": "Ansible language support", "version": "0.0.1", + "repository": { + "type": "git", + "url": "https://github.com/tomaciazek/vscode-ansible.git" + }, "engines": { "vscode": "^1.53.0" }, @@ -24,29 +29,35 @@ "configuration": "./ansible-language-configuration.json" }, { - // unfortunately this dummy entry is necessary for embedding to work + "comments": "unfortunately this dummy entry is necessary for embedding to work", "id": "ansible-jinja", "configuration": "./jinja-language-configuration.json" } ], "grammars": [ { - // YAML syntax as base for ansible - // scopeName changed so that we can use it as base for injections + "comments": [ + "YAML syntax as base for ansible", + "scopeName changed so that we can use it as base for injections" + ], "language": "ansible", "scopeName": "source.ansible", "path": "./syntaxes/external/YAML.tmLanguage" }, { - // imported jinja syntax - // this is so that we don't need to rely on Jinja extension being installed + "comments": [ + "imported jinja syntax", + "this is so that we do not need to rely on Jinja extension being installed" + ], "language": "ansible-jinja", "scopeName": "source.ansible-jinja", "path": "./syntaxes/external/jinja.tmLanguage.json" }, { - // changes highlighting of Ansible tags - // makes Ansible keyword tags distinct from other tags + "comments": [ + "changes highlighting of Ansible tags", + "makes Ansible keyword tags distinct from other tags" + ], "path": "./syntaxes/ansible/generated/keywords.tmLanguage", "scopeName": "injection.ansible.keywords", "injectTo": [ @@ -54,7 +65,9 @@ ] }, { - // support for Jinja in double curly braces + "comments": [ + "Support for Jinja in double curly braces" + ], "path": "./syntaxes/ansible/generated/jinja-braces.tmLanguage", "scopeName": "injection.ansible.jinja-braces", "embeddedLanguages": { @@ -65,7 +78,9 @@ ] }, { - // support for Jinja in conditionals + "comments": [ + "Support for Jinja in conditionals" + ], "path": "./syntaxes/ansible/generated/jinja-conditionals.tmLanguage", "scopeName": "injection.ansible.jinja-conditionals", "embeddedLanguages": { @@ -76,19 +91,13 @@ ] }, { - // support for YAML comments in Jinja - "path": "./syntaxes/ansible/generated/jinja-yaml-comments.tmLanguage", - "scopeName": "injection.ansible.jinja-comments", - "injectTo": [ - "source.ansible" - ] - }, - // What follows are techniques that are basically abusing the injection system of VSCode. - // These cannot be replicated in other IDEs with just TM grammars, unless similar injection system is used. - // The basic quote escapes (doesn't work inside brackets etc.) is implemented in the grammar anyway - // if someone finds it useful. - { - // support for single quote escapes in Jinja + "comments": [ + "What follows are techniques that are basically abusing the injection system of VSCode.", + "These cannot be replicated in other IDEs with just TM grammars unless similar injection system is used.", + "The basic quote escapes (does not work inside brackets etc.) is implemented in the grammar anyway", + "if someone finds it useful.", + "Support for single quote escapes in Jinja" + ], "path": "./syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage", "scopeName": "injection.ansible.jinja-single-quote-escape", "injectTo": [ @@ -96,7 +105,9 @@ ] }, { - // support for double quote escapes in Jinja + "comments": [ + "Support for double quote escapes in Jinja" + ], "path": "./syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage", "scopeName": "injection.ansible.jinja-double-quote-escape", "injectTo": [ diff --git a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage index dabacb2ec..09fdd2d79 100644 --- a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage +++ b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage @@ -16,7 +16,8 @@ comment Flow style collections are not supported (yet) - Proper YAML comment highlighting will not work in nested Jinja expressions. For example: + Without additional contextual injections (which VSCode fortunately suports and that has been used in this extenion) + proper YAML comment highlighting will not work in nested Jinja expressions. For example: when: condition1 # this works or condition2 @@ -24,7 +25,8 @@ or condition2) It is impossible to implement that with TM grammars, without modifying the Jinja grammar itself. - Same as above applies to escaping quotes + Same as above applies to escaping quotes, except that it cannot be achieved just with TM grammars + even by modifying the Jinja grammar repository @@ -46,7 +48,7 @@ | check_mode )\b \s* (:) # 5 - \s+ (?![|>]|\s*$) # not starting a block (scalar or other) + (\s (?!\s*[|>]|\s*$)) # not starting a block (scalar or other) beginCaptures @@ -65,6 +67,11 @@ name punctuation.separator.key-value.mapping.ansible + 6 + + name + asdf + end (?x) @@ -93,10 +100,6 @@ name meta.block-scalar.ansible.condition - comment - - Keyword detection - begin (?x) ^(\s*) # 1 @@ -180,10 +183,6 @@ name meta.block.ansible.condition - comment - - Keyword detection - begin (?x) ^(\s*) # 1 @@ -238,12 +237,58 @@ meta.yaml-block.ansible.condition comment - Well-indented block; possibly list + Well-indented block + + begin + (?x) + ^(?=(\s+)) # 1 + + end + (?x) + (?!\G) # otherwise match is found immediately + ^(?!\1\s+) # if the indentation is too small + + patterns + + + include + source.ansible#comment + + + include + #yaml-block-list-item + + + include + #yaml-double-quoted-string + + + include + #yaml-single-quoted-string + + + include + #yaml-unquoted-string + + + + + + yaml-block-list-item + + patterns + + + name + meta.yaml-block-list-item.ansible.condition + comment + + Well-indented list item block begin (?x) ^(\s*) # 1 - (?:(-)(\s+))? # 2, 3; in case it a list item + (-)(\s) # 2, 3 beginCaptures @@ -255,7 +300,7 @@ end (?x) - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches + ^(?!\1\3\s+) # if the indentation is too small patterns @@ -285,7 +330,7 @@ name - meta.yaml-block.ansible.condition + meta.yaml-scalar-block.ansible.condition comment Well-indented scalar block (for `>` and `|`) @@ -316,9 +361,9 @@ name - string.quoted.single.ansible + string.quoted.single.ansible.meta begin - ' + (?<=:\s|-\s|^)\s*' beginCaptures 0 @@ -394,9 +439,9 @@ name - string.quoted.double.ansible + string.quoted.double.ansible.meta begin - " + (?<=:\s|-\s|^)\s*" beginCaptures 0 diff --git a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist index 853406c6c..e356adb7f 100644 --- a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist +++ b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist @@ -33,7 +33,7 @@ | check_mode )\b \s* (:) # 5 - \s+ (?![|>]|\s*$) # not starting a block (scalar or other) + (\s (?!\s*[|>]|\s*$)) # not starting a block (scalar or other) '; beginCaptures = { 2 = { @@ -45,6 +45,9 @@ 5 = { name = 'punctuation.separator.key-value.mapping.ansible'; }; + 6 = { + name = 'asdf'; + }; }; end = '(?x) ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches @@ -58,9 +61,6 @@ }, { name = 'meta.block-scalar.ansible.condition'; - comment = ( - 'Keyword detection' - ); begin = '(?x) ^(\s*) # 1 (?:(-)(\s+))? # 2, 3; in case it is first key of a list item @@ -117,9 +117,6 @@ }, { name = 'meta.block.ansible.condition'; - comment = ( - 'Keyword detection' - ); begin = '(?x) ^(\s*) # 1 (?:(-)(\s+))? # 2, 3; in case it is first key of a list item @@ -157,11 +154,35 @@ { name = 'meta.yaml-block.ansible.condition'; comment = ( - 'Well-indented block; possibly list' + 'Well-indented block' + ); + begin = '(?x) + ^(?=(\s+)) # 1 + '; + end = '(?x) + (?!\G) # otherwise match is found immediately + ^(?!\1\s+) # if the indentation is too small + '; + patterns = ( + { include = 'source.ansible#comment'; }, + { include = '#yaml-block-list-item'; }, + { include = '#yaml-double-quoted-string'; }, + { include = '#yaml-single-quoted-string'; }, + { include = '#yaml-unquoted-string'; } + ); + } + ); + }; + yaml-block-list-item = { + patterns = ( + { + name = 'meta.yaml-block-list-item.ansible.condition'; + comment = ( + 'Well-indented list item block' ); begin = '(?x) ^(\s*) # 1 - (?:(-)(\s+))? # 2, 3; in case it a list item + (-)(\s) # 2, 3 '; beginCaptures = { 2 = { @@ -169,7 +190,7 @@ }; }; end = '(?x) - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches + ^(?!\1\3\s+) # if the indentation is too small '; patterns = ( { include = 'source.ansible#comment'; }, @@ -183,7 +204,7 @@ yaml-scalar-block = { patterns = ( { - name = 'meta.yaml-block.ansible.condition'; + name = 'meta.yaml-scalar-block.ansible.condition'; comment = ( 'Well-indented scalar block (for `>` and `|`)' ); @@ -203,8 +224,8 @@ yaml-single-quoted-string = { patterns = ( { - name = 'string.quoted.single.ansible'; - begin = "'"; + name = 'string.quoted.single.ansible.meta'; + begin = '(?<=:\s|-\s|^)\s*'''; beginCaptures = { 0 = { name = 'punctuation.definition.string.begin.ansible'; @@ -250,8 +271,8 @@ yaml-double-quoted-string = { patterns = ( { - name = 'string.quoted.double.ansible'; - begin = '"'; + name = 'string.quoted.double.ansible.meta'; + begin = '(?<=:\s|-\s|^)\s*"'; beginCaptures = { 0 = { name = 'punctuation.definition.string.begin.ansible'; From ac1dc18df7906686027fc1cb522b95906b4169f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sat, 27 Feb 2021 11:00:01 +0100 Subject: [PATCH 012/558] Simple diagnostics and keyword highlighting as programmatic feature --- .editorconfig | 17 + .eslintrc.yml | 18 + .gitignore | 3 +- .vscode/launch.json | 11 +- .vscode/settings.json | 2 +- .vscode/tasks.json | 20 + package-lock.json | 1933 +++++++++++++++++ package.json | 34 +- sample/sample.semanticLanguage | 19 + src/extension.ts | 163 ++ .../ansible/generated/keywords.tmLanguage | 4 - syntaxes/ansible/keywords.tmLanguage.plist | 3 +- tsconfig.json | 13 + 13 files changed, 2226 insertions(+), 14 deletions(-) create mode 100644 .editorconfig create mode 100644 .eslintrc.yml create mode 100644 .vscode/tasks.json create mode 100644 package-lock.json create mode 100644 sample/sample.semanticLanguage create mode 100644 src/extension.ts create mode 100644 tsconfig.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..93b3c9ad0 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true + +# Set default charset +charset = utf-8 + +# Indent with 2 spaces for JavaScript & TypeScript +[*.{js,ts}] +indent_style = space +indent_size = 2 diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 000000000..9c8bb1067 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,18 @@ +env: + es2020: true + node: true +extends: + - standard + - 'plugin:@typescript-eslint/recommended' + - prettier + - 'prettier/@typescript-eslint' +parser: '@typescript-eslint/parser' +parserOptions: + ecmaVersion: 11 + sourceType: module +plugins: + - '@typescript-eslint' + - prettier +rules: + semi: [error, always] + 'prettier/prettier': warn diff --git a/.gitignore b/.gitignore index 6fc6d1ab9..c223c3e79 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .ignore/ node_modules -*.vsix \ No newline at end of file +*.vsix +out diff --git a/.vscode/launch.json b/.vscode/launch.json index 0e191b592..f31e4e9a9 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,15 +3,20 @@ // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { - "version": "0.2.0", + "version": "0.2.0", "configurations": [ { "name": "Extension", "type": "extensionHost", "request": "launch", + "runtimeExecutable": "${execPath}", "args": [ "--extensionDevelopmentPath=${workspaceFolder}" - ] + ], + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ], + "preLaunchTask": "npm: watch" } ] -} \ No newline at end of file +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 97924983a..23fd35f0e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "editor.formatOnSave": false + "editor.formatOnSave": true } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 000000000..5deb2bccd --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,20 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..38672877e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1933 @@ +{ + "name": "ansible", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "@flatten-js/interval-tree": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.13.tgz", + "integrity": "sha512-5thHHdUZIRdPdEPx6G9tY6mHFMGoXsq9/ivemRszDcEkERXqlZAv+7NozaFbAUOvKXxyWoccSnLyjK0c5UWJeQ==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/node": { + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", + "dev": true + }, + "@types/vscode": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.53.0.tgz", + "integrity": "sha512-XjFWbSPOM0EKIT2XhhYm3D3cx3nn3lshMUcWNy1eqefk+oqRuBq8unVb6BYIZqXy9lQZyeUl7eaBCOZWv+LcXQ==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz", + "integrity": "sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.15.2", + "@typescript-eslint/scope-manager": "4.15.2", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.15", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz", + "integrity": "sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.15.2", + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/typescript-estree": "4.15.2", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.2.tgz", + "integrity": "sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.15.2", + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/typescript-estree": "4.15.2", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz", + "integrity": "sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/visitor-keys": "4.15.2" + } + }, + "@typescript-eslint/types": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.2.tgz", + "integrity": "sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz", + "integrity": "sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/visitor-keys": "4.15.2", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz", + "integrity": "sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.15.2", + "eslint-visitor-keys": "^2.0.0" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "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, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "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, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "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 + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", + "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.3.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz", + "integrity": "sha512-5EaAVPsIHu+grmm5WKjxUia4yHgRrbkd8I0ffqUSwixCPMVBrbS97UnzlEY/Q7OWo584vgixefM0kJnUfo/VjA==", + "dev": true + }, + "eslint-config-standard": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", + "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + } + }, + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz", + "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-promise": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", + "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", + "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz", + "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "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 + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "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, + "requires": { + "yallist": "^4.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "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 + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "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 + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", + "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, + "requires": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz", + "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", + "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "typescript": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", + "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + } + } +} diff --git a/package.json b/package.json index 3c05e904a..1e1b14110 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,10 @@ "categories": [ "Programming Languages" ], + "activationEvents": [ + "onLanguage:ansible" + ], + "main": "./out/extension.js", "contributes": { "languages": [ { @@ -55,8 +59,7 @@ }, { "comments": [ - "changes highlighting of Ansible tags", - "makes Ansible keyword tags distinct from other tags" + "changes highlighting of Ansible tags" ], "path": "./syntaxes/ansible/generated/keywords.tmLanguage", "scopeName": "injection.ansible.keywords", @@ -115,5 +118,30 @@ ] } ] + }, + "scripts": { + "vscode:prepublish": "npm run compile", + "compile": "tsc -p ./", + "watch": "tsc -watch -p ./" + }, + "devDependencies": { + "typescript": "^4.1.5", + "@types/node": "^14.14.31", + "@types/vscode": "^1.53.0", + "@typescript-eslint/eslint-plugin": "^4.15.2", + "@typescript-eslint/parser": "^4.15.2", + "eslint": "^7.20.0", + "eslint-config-standard": "^16.0.2", + "eslint-config-prettier": "^8.0.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.3.1", + "eslint-plugin-standard": "^4.1.0", + "eslint-plugin-prettier": "^3.3.1", + "prettier": "^2.2.1" + }, + "dependencies": { + "yaml": "^1.10.0", + "@flatten-js/interval-tree": "^1.0.13" } -} \ No newline at end of file +} diff --git a/sample/sample.semanticLanguage b/sample/sample.semanticLanguage new file mode 100644 index 000000000..d5e4810cd --- /dev/null +++ b/sample/sample.semanticLanguage @@ -0,0 +1,19 @@ +Available token types: + [comment] [string] [keyword] [number] [regexp] [operator] [namespace] + [type] [struct] [class] [interface] [enum] [typeParameter] [function] + [method] [macro] [variable] [parameter] [property] [label] + +Available token modifiers: + [type.declaration] [type.documentation] [type.readonly] [type.static] + [type.abstract] [type.deprecated] [type.modification] [type.async] + +Some examples: + [class.static.token] [type.static.abstract] + [class.static.token] [type.static] + + [struct] + + [function.private] + +An error case: + [notInLegend] diff --git a/src/extension.ts b/src/extension.ts new file mode 100644 index 000000000..1ab7cd609 --- /dev/null +++ b/src/extension.ts @@ -0,0 +1,163 @@ +import IntervalTree from '@flatten-js/interval-tree'; +import { performance } from 'perf_hooks'; +import * as vscode from 'vscode'; +import { parseAllDocuments } from 'yaml'; +import { Node, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; + +const tokenTypes = [ + 'method' +]; + +const tokenModifiers = [ + 'defaultLibrary' +]; + +const keywords = new Set([ + 'action', 'always', 'any_errors_fatal', 'args', 'async', 'become', 'become_exe', + 'become_flags', 'become_method', 'become_user', 'block', 'changed_when', + 'check_mode', 'collections', 'connection', 'debugger', 'delay', + 'delegate_facts', 'delegate_to', 'diff', 'environment', 'extended', 'fact_path', + 'failed_when', 'force_handlers', 'gather_facts', 'gather_subset', + 'gather_timeout', 'handlers', 'hosts', 'ignore_errors', 'ignore_unreachable', + 'label', 'local_action', 'loop', 'loop_control', 'max_fail_percentage', + 'module_defaults', 'name', 'no_log', 'notify', 'order', 'pause', 'poll', 'port', + 'post_tasks', 'pre_tasks', 'register', 'remote_user', 'rescue', 'retries', + 'roles', 'run_once', 'serial', 'strategy', 'tags', 'tasks', 'throttle', + 'timeout', 'until', 'vars', 'vars_files', 'vars_prompt', 'when' +]) + +const with_keywords = /^with_[a-z_]+$/ + +const legend = new vscode.SemanticTokensLegend(tokenTypes, tokenModifiers); + + +export function activate(context: vscode.ExtensionContext) { + context.subscriptions.push(vscode.languages.registerDocumentSemanticTokensProvider({ language: 'ansible' }, new DocumentSemanticTokensProvider(), legend)); + const collection = vscode.languages.createDiagnosticCollection('ansible'); + context.subscriptions.push(collection) + + if (vscode.window.activeTextEditor) { + updateDiagnostics(vscode.window.activeTextEditor.document, collection); + } + context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(editor => { + if (editor) { + updateDiagnostics(editor.document, collection); + } + })); + context.subscriptions.push(vscode.workspace.onDidChangeTextDocument(editor => { + updateDiagnostics(editor.document, collection); + })); + context.subscriptions.push(vscode.workspace.onDidOpenTextDocument(doc => { + updateDiagnostics(doc, collection); + })); + context.subscriptions.push(vscode.workspace.onDidCloseTextDocument(doc => { + collection.delete(doc.uri); + })); +} + +function updateDiagnostics(document: vscode.TextDocument, collection: vscode.DiagnosticCollection): void { + if (document && document.languageId === 'ansible') { + const yDocuments = parseAllDocuments(document.getText(), { prettyErrors: false }); + const diagnostics: vscode.Diagnostic[] = [] + const rangeTree = new IntervalTree() + yDocuments.forEach(yDoc => { + yDoc.errors.forEach(error => { + const errorRange = error.range || error.source?.range + let range = undefined + if (errorRange) { + const start = document.positionAt(errorRange.start) + const end = document.positionAt(errorRange.end) + range = new vscode.Range(start, end) + + let severity = undefined + switch (error.name) { + case 'YAMLReferenceError': + case 'YAMLSemanticError': + case 'YAMLSyntaxError': + severity = vscode.DiagnosticSeverity.Error + break; + case 'YAMLWarning': + severity = vscode.DiagnosticSeverity.Warning + break; + default: + severity = vscode.DiagnosticSeverity.Information + break; + } + rangeTree.insert([errorRange.start, errorRange.end], { + message: error.message, + range: range || new vscode.Range(0, 0, 0, 0), + severity: severity, + source: 'Ansible [YAML]' + }) + } + }) + }); + rangeTree.forEach((range, diag) => { + const searchResult = rangeTree.search(range); + if (searchResult) { + const allRangesAreEqual = searchResult.every((foundDiag: vscode.Diagnostic) => { + // (range start == range end) in case it has already been collapsed + return foundDiag.range.start == foundDiag.range.end || foundDiag.range.isEqual(diag.range); + }); + if (!allRangesAreEqual) { + // Prevent large error scopes hiding/obscuring other error scopes + // In YAML this is very common in case of syntax errors + const range = diag.range; + diag.relatedInformation = [ + new vscode.DiagnosticRelatedInformation( + new vscode.Location(document.uri, range.with(range.end, undefined)), `the scope of this error ends here`) + ] + // collapse the range + diag.range = range.with(undefined, range.start) + } + } + diagnostics.push(diag) + }); + collection.set(document.uri, diagnostics); + } else { + collection.clear(); + } +} + +interface IParsedToken { + line: number; + startCharacter: number; + length: number; + tokenType: string; + tokenModifiers: string[]; +} + +// Makes Ansible keyword tags distinct from other tags +class DocumentSemanticTokensProvider implements vscode.DocumentSemanticTokensProvider { + async provideDocumentSemanticTokens(document: vscode.TextDocument, token: vscode.CancellationToken): Promise { + const builder = new vscode.SemanticTokensBuilder(legend); + const start = performance.now() + const yDocuments = parseAllDocuments(document.getText()); + yDocuments.forEach(yDoc => { + this._markKeywords(yDoc.contents, builder, document) + }); + const stop = performance.now() + return builder.build(); + } + + private _markKeywords(node: Node | null, builder: vscode.SemanticTokensBuilder, document: vscode.TextDocument, context: Node[] = []) { + if (node instanceof YAMLMap) { + node.items.forEach(pair => { + const key: Node | null = pair.key; + if (key instanceof Scalar && (keywords.has(key.value) || with_keywords.test(key.value))) { + const parent = context[context.length - 1] + if (parent && parent instanceof YAMLSeq && key.range) { + const startPosition = document.positionAt(key.range[0]); + const length = key.range[1] - key.range[0] + const endPosition = startPosition.translate(0, length); + const range = new vscode.Range(startPosition, endPosition); + builder.push(range, 'method', ['defaultLibrary']) + } + } + this._markKeywords(pair.value, builder, document, context.concat(node)) + }); + } else if (node instanceof YAMLSeq) { + node.items.forEach((item: Node | null) => this._markKeywords(item, builder, document, context.concat(node))); + } + } +} diff --git a/syntaxes/ansible/generated/keywords.tmLanguage b/syntaxes/ansible/generated/keywords.tmLanguage index 5b0ad18df..429e43f84 100644 --- a/syntaxes/ansible/generated/keywords.tmLanguage +++ b/syntaxes/ansible/generated/keywords.tmLanguage @@ -16,10 +16,6 @@ patterns - - include - #keyword - include #ansible_tag diff --git a/syntaxes/ansible/keywords.tmLanguage.plist b/syntaxes/ansible/keywords.tmLanguage.plist index 0e2878ff7..6923eb9c8 100644 --- a/syntaxes/ansible/keywords.tmLanguage.plist +++ b/syntaxes/ansible/keywords.tmLanguage.plist @@ -8,7 +8,6 @@ 'Added `label`, `pause`, `loop_var`, `extended` as Ansible keywords (occur in loop_control)' ); patterns = ( - { include = '#keyword'; }, { include = '#ansible_tag'; } ); repository = { @@ -33,4 +32,4 @@ match = '[\w.]+'; }; }; -} \ No newline at end of file +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..4c0277e59 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ES2019", + "lib": ["ES2019"], + "module": "CommonJS", + "moduleResolution": "Node", + "outDir": "out", + "rootDir": "src", + "sourceMap": true, + "strict": true + }, + "exclude": ["node_modules", ".vscode-test"] +} From b7bf58eaba754867833b2464db64f2e39d2a2ed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sat, 27 Feb 2021 12:57:35 +0100 Subject: [PATCH 013/558] Configured TypeScript linting and formatting --- .eslintrc.json | 19 ++ .eslintrc.yml | 18 -- .prettierrc | 6 + .vscode/settings.json | 13 +- package-lock.json | 689 +----------------------------------------- package.json | 277 +++++++++-------- src/extension.ts | 243 ++++++++++----- tsconfig.json | 11 +- 8 files changed, 355 insertions(+), 921 deletions(-) create mode 100644 .eslintrc.json delete mode 100644 .eslintrc.yml create mode 100644 .prettierrc diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..e17129199 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json.schemastore.org/eslintrc", + "env": { + "commonjs": true, + "es2021": true, + "node": true + }, + "extends": ["plugin:@typescript-eslint/recommended", "prettier"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2021, + "sourceType": "module" + }, + "plugins": ["@typescript-eslint"], + "rules": { + "prefer-template": "warn", + "quotes": ["warn", "single"] + } +} diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index 9c8bb1067..000000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,18 +0,0 @@ -env: - es2020: true - node: true -extends: - - standard - - 'plugin:@typescript-eslint/recommended' - - prettier - - 'prettier/@typescript-eslint' -parser: '@typescript-eslint/parser' -parserOptions: - ecmaVersion: 11 - sourceType: module -plugins: - - '@typescript-eslint' - - prettier -rules: - semi: [error, always] - 'prettier/prettier': warn diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..e1829b555 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 23fd35f0e..f91367260 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,12 @@ { - "editor.formatOnSave": true -} \ No newline at end of file + "editor.formatOnSave": true, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + } +} diff --git a/package-lock.json b/package-lock.json index 38672877e..113074c66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,9 +20,9 @@ "dev": true }, "@babel/highlight": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", - "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.8.tgz", + "integrity": "sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.12.11", @@ -106,12 +106,6 @@ "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", "dev": true }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, "@types/node": { "version": "14.14.31", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", @@ -261,36 +255,12 @@ "sprintf-js": "~1.0.2" } }, - "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -322,16 +292,6 @@ "fill-range": "^7.0.1" } }, - "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, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -410,12 +370,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -442,15 +396,6 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -484,48 +429,6 @@ "ansi-colors": "^4.1.1" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.0-next.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", - "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.1", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.3", - "string.prototype.trimstart": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -591,167 +494,6 @@ "integrity": "sha512-5EaAVPsIHu+grmm5WKjxUia4yHgRrbkd8I0ffqUSwixCPMVBrbS97UnzlEY/Q7OWo584vgixefM0kJnUfo/VjA==", "dev": true }, - "eslint-config-standard": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", - "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - } - }, - "eslint-plugin-import": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", - "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "requires": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz", - "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-promise": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", - "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", - "dev": true - }, - "eslint-plugin-standard": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", - "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", - "dev": true - }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -862,12 +604,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, "fast-glob": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", @@ -895,9 +631,9 @@ "dev": true }, "fastq": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz", - "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -921,15 +657,6 @@ "to-regex-range": "^5.0.1" } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -952,29 +679,12 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -1021,39 +731,12 @@ "slash": "^3.0.0" } }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", @@ -1092,33 +775,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1140,49 +796,12 @@ "is-extglob": "^2.1.1" } }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1217,15 +836,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -1236,28 +846,6 @@ "type-check": "~0.4.0" } }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -1298,12 +886,6 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1316,62 +898,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true - }, - "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 - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1395,30 +921,6 @@ "word-wrap": "^1.2.3" } }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -1428,21 +930,6 @@ "callsites": "^3.0.0" } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1455,12 +942,6 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -1473,42 +954,12 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -1527,38 +978,6 @@ "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", "dev": true }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "dependencies": { - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - } - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -1571,16 +990,6 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -1678,38 +1087,6 @@ } } }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -1717,9 +1094,9 @@ "dev": true }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz", + "integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==", "dev": true, "requires": { "emoji-regex": "^8.0.0", @@ -1727,26 +1104,6 @@ "strip-ansi": "^6.0.0" } }, - "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -1756,12 +1113,6 @@ "ansi-regex": "^5.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -1824,18 +1175,6 @@ "is-number": "^7.0.0" } }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -1887,16 +1226,6 @@ "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", "dev": true }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 1e1b14110..8c54de97b 100644 --- a/package.json +++ b/package.json @@ -1,147 +1,140 @@ { - "name": "ansible", - "publisher": "tomaciazek", - "displayName": "Ansible", - "description": "Ansible language support", - "version": "0.0.1", - "repository": { - "type": "git", - "url": "https://github.com/tomaciazek/vscode-ansible.git" - }, - "engines": { - "vscode": "^1.53.0" - }, - "categories": [ - "Programming Languages" - ], - "activationEvents": [ - "onLanguage:ansible" + "name": "ansible", + "publisher": "tomaciazek", + "displayName": "Ansible", + "description": "Ansible language support", + "version": "0.0.1", + "repository": { + "type": "git", + "url": "https://github.com/tomaciazek/vscode-ansible.git" + }, + "engines": { + "vscode": "^1.53.0" + }, + "categories": [ + "Programming Languages" + ], + "activationEvents": [ + "onLanguage:ansible" + ], + "main": "./out/extension.js", + "contributes": { + "languages": [ + { + "id": "ansible", + "aliases": [ + "Ansible", + "ansible" + ], + "extensions": [ + ".yml", + ".yaml" + ], + "configuration": "./ansible-language-configuration.json" + }, + { + "comments": "unfortunately this dummy entry is necessary for embedding to work", + "id": "ansible-jinja", + "configuration": "./jinja-language-configuration.json" + } ], - "main": "./out/extension.js", - "contributes": { - "languages": [ - { - "id": "ansible", - "aliases": [ - "Ansible", - "ansible" - ], - "extensions": [ - ".yml", - ".yaml" - ], - "configuration": "./ansible-language-configuration.json" - }, - { - "comments": "unfortunately this dummy entry is necessary for embedding to work", - "id": "ansible-jinja", - "configuration": "./jinja-language-configuration.json" - } + "grammars": [ + { + "comments": [ + "YAML syntax as base for ansible", + "scopeName changed so that we can use it as base for injections" + ], + "language": "ansible", + "scopeName": "source.ansible", + "path": "./syntaxes/external/YAML.tmLanguage" + }, + { + "comments": [ + "imported jinja syntax", + "this is so that we do not need to rely on Jinja extension being installed" + ], + "language": "ansible-jinja", + "scopeName": "source.ansible-jinja", + "path": "./syntaxes/external/jinja.tmLanguage.json" + }, + { + "comments": [ + "changes highlighting of Ansible tags" + ], + "path": "./syntaxes/ansible/generated/keywords.tmLanguage", + "scopeName": "injection.ansible.keywords", + "injectTo": [ + "source.ansible" + ] + }, + { + "comments": [ + "Support for Jinja in double curly braces" + ], + "path": "./syntaxes/ansible/generated/jinja-braces.tmLanguage", + "scopeName": "injection.ansible.jinja-braces", + "embeddedLanguages": { + "meta.embedded.inline.jinja": "ansible-jinja" + }, + "injectTo": [ + "source.ansible" + ] + }, + { + "comments": [ + "Support for Jinja in conditionals" + ], + "path": "./syntaxes/ansible/generated/jinja-conditionals.tmLanguage", + "scopeName": "injection.ansible.jinja-conditionals", + "embeddedLanguages": { + "meta.embedded.inline.jinja": "ansible-jinja" + }, + "injectTo": [ + "source.ansible" + ] + }, + { + "comments": [ + "What follows are techniques that are basically abusing the injection system of VSCode.", + "These cannot be replicated in other IDEs with just TM grammars unless similar injection system is used.", + "The basic quote escapes (does not work inside brackets etc.) is implemented in the grammar anyway", + "if someone finds it useful.", + "Support for single quote escapes in Jinja" + ], + "path": "./syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage", + "scopeName": "injection.ansible.jinja-single-quote-escape", + "injectTo": [ + "source.ansible" + ] + }, + { + "comments": [ + "Support for double quote escapes in Jinja" ], - "grammars": [ - { - "comments": [ - "YAML syntax as base for ansible", - "scopeName changed so that we can use it as base for injections" - ], - "language": "ansible", - "scopeName": "source.ansible", - "path": "./syntaxes/external/YAML.tmLanguage" - }, - { - "comments": [ - "imported jinja syntax", - "this is so that we do not need to rely on Jinja extension being installed" - ], - "language": "ansible-jinja", - "scopeName": "source.ansible-jinja", - "path": "./syntaxes/external/jinja.tmLanguage.json" - }, - { - "comments": [ - "changes highlighting of Ansible tags" - ], - "path": "./syntaxes/ansible/generated/keywords.tmLanguage", - "scopeName": "injection.ansible.keywords", - "injectTo": [ - "source.ansible" - ] - }, - { - "comments": [ - "Support for Jinja in double curly braces" - ], - "path": "./syntaxes/ansible/generated/jinja-braces.tmLanguage", - "scopeName": "injection.ansible.jinja-braces", - "embeddedLanguages": { - "meta.embedded.inline.jinja": "ansible-jinja" - }, - "injectTo": [ - "source.ansible" - ] - }, - { - "comments": [ - "Support for Jinja in conditionals" - ], - "path": "./syntaxes/ansible/generated/jinja-conditionals.tmLanguage", - "scopeName": "injection.ansible.jinja-conditionals", - "embeddedLanguages": { - "meta.embedded.inline.jinja": "ansible-jinja" - }, - "injectTo": [ - "source.ansible" - ] - }, - { - "comments": [ - "What follows are techniques that are basically abusing the injection system of VSCode.", - "These cannot be replicated in other IDEs with just TM grammars unless similar injection system is used.", - "The basic quote escapes (does not work inside brackets etc.) is implemented in the grammar anyway", - "if someone finds it useful.", - "Support for single quote escapes in Jinja" - ], - "path": "./syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage", - "scopeName": "injection.ansible.jinja-single-quote-escape", - "injectTo": [ - "source.ansible" - ] - }, - { - "comments": [ - "Support for double quote escapes in Jinja" - ], - "path": "./syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage", - "scopeName": "injection.ansible.jinja-double-quote-escape", - "injectTo": [ - "source.ansible" - ] - } + "path": "./syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage", + "scopeName": "injection.ansible.jinja-double-quote-escape", + "injectTo": [ + "source.ansible" ] - }, - "scripts": { - "vscode:prepublish": "npm run compile", - "compile": "tsc -p ./", - "watch": "tsc -watch -p ./" - }, - "devDependencies": { - "typescript": "^4.1.5", - "@types/node": "^14.14.31", - "@types/vscode": "^1.53.0", - "@typescript-eslint/eslint-plugin": "^4.15.2", - "@typescript-eslint/parser": "^4.15.2", - "eslint": "^7.20.0", - "eslint-config-standard": "^16.0.2", - "eslint-config-prettier": "^8.0.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.3.1", - "eslint-plugin-standard": "^4.1.0", - "eslint-plugin-prettier": "^3.3.1", - "prettier": "^2.2.1" - }, - "dependencies": { - "yaml": "^1.10.0", - "@flatten-js/interval-tree": "^1.0.13" - } + } + ] + }, + "scripts": { + "vscode:prepublish": "npm run compile", + "compile": "tsc -p ./", + "watch": "tsc -watch -p ./" + }, + "devDependencies": { + "typescript": "^4.1.5", + "@types/node": "^14.14.31", + "@types/vscode": "^1.53.0", + "@typescript-eslint/eslint-plugin": "^4.15.2", + "@typescript-eslint/parser": "^4.15.2", + "eslint": "^7.20.0", + "eslint-config-prettier": "^8.0.0" + }, + "dependencies": { + "yaml": "^1.10.0", + "@flatten-js/interval-tree": "^1.0.13" + } } diff --git a/src/extension.ts b/src/extension.ts index 1ab7cd609..45dcc6f3e 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -4,114 +4,191 @@ import * as vscode from 'vscode'; import { parseAllDocuments } from 'yaml'; import { Node, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; -const tokenTypes = [ - 'method' -]; +const tokenTypes = ['method']; -const tokenModifiers = [ - 'defaultLibrary' -]; +const tokenModifiers = ['defaultLibrary']; const keywords = new Set([ - 'action', 'always', 'any_errors_fatal', 'args', 'async', 'become', 'become_exe', - 'become_flags', 'become_method', 'become_user', 'block', 'changed_when', - 'check_mode', 'collections', 'connection', 'debugger', 'delay', - 'delegate_facts', 'delegate_to', 'diff', 'environment', 'extended', 'fact_path', - 'failed_when', 'force_handlers', 'gather_facts', 'gather_subset', - 'gather_timeout', 'handlers', 'hosts', 'ignore_errors', 'ignore_unreachable', - 'label', 'local_action', 'loop', 'loop_control', 'max_fail_percentage', - 'module_defaults', 'name', 'no_log', 'notify', 'order', 'pause', 'poll', 'port', - 'post_tasks', 'pre_tasks', 'register', 'remote_user', 'rescue', 'retries', - 'roles', 'run_once', 'serial', 'strategy', 'tags', 'tasks', 'throttle', - 'timeout', 'until', 'vars', 'vars_files', 'vars_prompt', 'when' -]) + 'action', + 'always', + 'any_errors_fatal', + 'args', + 'async', + 'become', + 'become_exe', + 'become_flags', + 'become_method', + 'become_user', + 'block', + 'changed_when', + 'check_mode', + 'collections', + 'connection', + 'debugger', + 'delay', + 'delegate_facts', + 'delegate_to', + 'diff', + 'environment', + 'extended', + 'fact_path', + 'failed_when', + 'force_handlers', + 'gather_facts', + 'gather_subset', + 'gather_timeout', + 'handlers', + 'hosts', + 'ignore_errors', + 'ignore_unreachable', + 'label', + 'local_action', + 'loop', + 'loop_control', + 'max_fail_percentage', + 'module_defaults', + 'name', + 'no_log', + 'notify', + 'order', + 'pause', + 'poll', + 'port', + 'post_tasks', + 'pre_tasks', + 'register', + 'remote_user', + 'rescue', + 'retries', + 'roles', + 'run_once', + 'serial', + 'strategy', + 'tags', + 'tasks', + 'throttle', + 'timeout', + 'until', + 'vars', + 'vars_files', + 'vars_prompt', + 'when', +]); -const with_keywords = /^with_[a-z_]+$/ +const withKeywords = /^with_[a-z_]+$/; const legend = new vscode.SemanticTokensLegend(tokenTypes, tokenModifiers); - -export function activate(context: vscode.ExtensionContext) { - context.subscriptions.push(vscode.languages.registerDocumentSemanticTokensProvider({ language: 'ansible' }, new DocumentSemanticTokensProvider(), legend)); +export function activate(context: vscode.ExtensionContext): void { + context.subscriptions.push( + vscode.languages.registerDocumentSemanticTokensProvider( + { language: 'ansible' }, + new DocumentSemanticTokensProvider(), + legend + ) + ); const collection = vscode.languages.createDiagnosticCollection('ansible'); - context.subscriptions.push(collection) + context.subscriptions.push(collection); if (vscode.window.activeTextEditor) { updateDiagnostics(vscode.window.activeTextEditor.document, collection); } - context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(editor => { - if (editor) { + context.subscriptions.push( + vscode.window.onDidChangeActiveTextEditor((editor) => { + if (editor) { + updateDiagnostics(editor.document, collection); + } + }) + ); + context.subscriptions.push( + vscode.workspace.onDidChangeTextDocument((editor) => { updateDiagnostics(editor.document, collection); - } - })); - context.subscriptions.push(vscode.workspace.onDidChangeTextDocument(editor => { - updateDiagnostics(editor.document, collection); - })); - context.subscriptions.push(vscode.workspace.onDidOpenTextDocument(doc => { - updateDiagnostics(doc, collection); - })); - context.subscriptions.push(vscode.workspace.onDidCloseTextDocument(doc => { - collection.delete(doc.uri); - })); + }) + ); + context.subscriptions.push( + vscode.workspace.onDidOpenTextDocument((doc) => { + updateDiagnostics(doc, collection); + }) + ); + context.subscriptions.push( + vscode.workspace.onDidCloseTextDocument((doc) => { + collection.delete(doc.uri); + }) + ); } -function updateDiagnostics(document: vscode.TextDocument, collection: vscode.DiagnosticCollection): void { +function updateDiagnostics( + document: vscode.TextDocument, + collection: vscode.DiagnosticCollection +): void { if (document && document.languageId === 'ansible') { - const yDocuments = parseAllDocuments(document.getText(), { prettyErrors: false }); - const diagnostics: vscode.Diagnostic[] = [] - const rangeTree = new IntervalTree() - yDocuments.forEach(yDoc => { - yDoc.errors.forEach(error => { - const errorRange = error.range || error.source?.range - let range = undefined + const yDocuments = parseAllDocuments(document.getText(), { + prettyErrors: false, + }); + const diagnostics: vscode.Diagnostic[] = []; + const rangeTree = new IntervalTree(); + yDocuments.forEach((yDoc) => { + yDoc.errors.forEach((error) => { + const errorRange = error.range || error.source?.range; + let range; if (errorRange) { - const start = document.positionAt(errorRange.start) - const end = document.positionAt(errorRange.end) - range = new vscode.Range(start, end) + const start = document.positionAt(errorRange.start); + const end = document.positionAt(errorRange.end); + range = new vscode.Range(start, end); - let severity = undefined + let severity; switch (error.name) { case 'YAMLReferenceError': case 'YAMLSemanticError': case 'YAMLSyntaxError': - severity = vscode.DiagnosticSeverity.Error + severity = vscode.DiagnosticSeverity.Error; break; case 'YAMLWarning': - severity = vscode.DiagnosticSeverity.Warning + severity = vscode.DiagnosticSeverity.Warning; break; default: - severity = vscode.DiagnosticSeverity.Information + severity = vscode.DiagnosticSeverity.Information; break; } rangeTree.insert([errorRange.start, errorRange.end], { message: error.message, range: range || new vscode.Range(0, 0, 0, 0), severity: severity, - source: 'Ansible [YAML]' - }) + source: 'Ansible [YAML]', + }); } - }) + }); }); rangeTree.forEach((range, diag) => { const searchResult = rangeTree.search(range); if (searchResult) { - const allRangesAreEqual = searchResult.every((foundDiag: vscode.Diagnostic) => { - // (range start == range end) in case it has already been collapsed - return foundDiag.range.start == foundDiag.range.end || foundDiag.range.isEqual(diag.range); - }); + const allRangesAreEqual = searchResult.every( + (foundDiag: vscode.Diagnostic) => { + // (range start == range end) in case it has already been collapsed + return ( + foundDiag.range.start == foundDiag.range.end || + foundDiag.range.isEqual(diag.range) + ); + } + ); if (!allRangesAreEqual) { // Prevent large error scopes hiding/obscuring other error scopes // In YAML this is very common in case of syntax errors const range = diag.range; diag.relatedInformation = [ new vscode.DiagnosticRelatedInformation( - new vscode.Location(document.uri, range.with(range.end, undefined)), `the scope of this error ends here`) - ] + new vscode.Location( + document.uri, + range.with(range.end, undefined) + ), + 'the scope of this error ends here' + ), + ]; // collapse the range - diag.range = range.with(undefined, range.start) + diag.range = range.with(undefined, range.start); } } - diagnostics.push(diag) + diagnostics.push(diag); }); collection.set(document.uri, diagnostics); } else { @@ -128,36 +205,50 @@ interface IParsedToken { } // Makes Ansible keyword tags distinct from other tags -class DocumentSemanticTokensProvider implements vscode.DocumentSemanticTokensProvider { - async provideDocumentSemanticTokens(document: vscode.TextDocument, token: vscode.CancellationToken): Promise { +class DocumentSemanticTokensProvider + implements vscode.DocumentSemanticTokensProvider { + async provideDocumentSemanticTokens( + document: vscode.TextDocument, + token: vscode.CancellationToken + ): Promise { const builder = new vscode.SemanticTokensBuilder(legend); - const start = performance.now() + const start = performance.now(); const yDocuments = parseAllDocuments(document.getText()); - yDocuments.forEach(yDoc => { - this._markKeywords(yDoc.contents, builder, document) + yDocuments.forEach((yDoc) => { + this._markKeywords(yDoc.contents, builder, document); }); - const stop = performance.now() + const stop = performance.now(); return builder.build(); } - private _markKeywords(node: Node | null, builder: vscode.SemanticTokensBuilder, document: vscode.TextDocument, context: Node[] = []) { + private _markKeywords( + node: Node | null, + builder: vscode.SemanticTokensBuilder, + document: vscode.TextDocument, + context: Node[] = [] + ) { if (node instanceof YAMLMap) { - node.items.forEach(pair => { + node.items.forEach((pair) => { const key: Node | null = pair.key; - if (key instanceof Scalar && (keywords.has(key.value) || with_keywords.test(key.value))) { - const parent = context[context.length - 1] + if ( + key instanceof Scalar && + (keywords.has(key.value) || withKeywords.test(key.value)) + ) { + const parent = context[context.length - 1]; if (parent && parent instanceof YAMLSeq && key.range) { const startPosition = document.positionAt(key.range[0]); - const length = key.range[1] - key.range[0] + const length = key.range[1] - key.range[0]; const endPosition = startPosition.translate(0, length); const range = new vscode.Range(startPosition, endPosition); - builder.push(range, 'method', ['defaultLibrary']) + builder.push(range, 'method', ['defaultLibrary']); } } - this._markKeywords(pair.value, builder, document, context.concat(node)) + this._markKeywords(pair.value, builder, document, context.concat(node)); }); } else if (node instanceof YAMLSeq) { - node.items.forEach((item: Node | null) => this._markKeywords(item, builder, document, context.concat(node))); + node.items.forEach((item: Node | null) => + this._markKeywords(item, builder, document, context.concat(node)) + ); } } } diff --git a/tsconfig.json b/tsconfig.json index 4c0277e59..b098b1b48 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,9 @@ { "compilerOptions": { - "target": "ES2019", - "lib": ["ES2019"], + "target": "ES2020", + "lib": [ + "ES2020" + ], "module": "CommonJS", "moduleResolution": "Node", "outDir": "out", @@ -9,5 +11,8 @@ "sourceMap": true, "strict": true }, - "exclude": ["node_modules", ".vscode-test"] + "exclude": [ + "node_modules", + ".vscode-test" + ] } From 13a5ab67d9ebab353da49c83e8e1f97ad77ad1b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sat, 27 Feb 2021 18:30:23 +0100 Subject: [PATCH 014/558] Translated into language client/server duo --- .editorconfig | 2 +- .eslintrc.json | 1 + .vscode/launch.json | 54 +- .vscode/tasks.json | 43 +- client/package-lock.json | 406 +++++ client/package.json | 23 + client/src/extension.ts | 69 + client/src/semanticTokens.ts | 130 ++ client/tsconfig.json | 15 + client/tsconfig.tsbuildinfo | 2936 ++++++++++++++++++++++++++++++++++ package.json | 32 +- server/package-lock.json | 61 + server/package.json | 26 + server/src/server.ts | 225 +++ server/tsconfig.json | 15 + server/tsconfig.tsbuildinfo | 2307 ++++++++++++++++++++++++++ tsconfig.json | 13 +- 17 files changed, 6314 insertions(+), 44 deletions(-) create mode 100644 client/package-lock.json create mode 100644 client/package.json create mode 100644 client/src/extension.ts create mode 100644 client/src/semanticTokens.ts create mode 100644 client/tsconfig.json create mode 100644 client/tsconfig.tsbuildinfo create mode 100644 server/package-lock.json create mode 100644 server/package.json create mode 100644 server/src/server.ts create mode 100644 server/tsconfig.json create mode 100644 server/tsconfig.tsbuildinfo diff --git a/.editorconfig b/.editorconfig index 93b3c9ad0..b75534051 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,6 +12,6 @@ insert_final_newline = true charset = utf-8 # Indent with 2 spaces for JavaScript & TypeScript -[*.{js,ts}] +[*.{js,ts,json}] indent_style = space indent_size = 2 diff --git a/.eslintrc.json b/.eslintrc.json index e17129199..24ebf904d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -13,6 +13,7 @@ }, "plugins": ["@typescript-eslint"], "rules": { + "eqeqeq": ["error", "smart"], "prefer-template": "warn", "quotes": ["warn", "single"] } diff --git a/.vscode/launch.json b/.vscode/launch.json index f31e4e9a9..b9ab6d87e 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,20 +3,42 @@ // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { - "version": "0.2.0", - "configurations": [ - { - "name": "Extension", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], - "preLaunchTask": "npm: watch" - } - ] + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/client/out/**/*.js"], + "preLaunchTask": "npm: watch" + }, + { + "name": "Attach to Server", + "type": "node", + "request": "attach", + "port": 6009, + "restart": true, + "outFiles": ["${workspaceRoot}/server/out/**/*.js"] + } + // { + // "name": "Language Server E2E Test", + // "type": "extensionHost", + // "request": "launch", + // "runtimeExecutable": "${execPath}", + // "args": [ + // "--extensionDevelopmentPath=${workspaceRoot}", + // "--extensionTestsPath=${workspaceRoot}/client/out/test/index", + // "${workspaceRoot}/client/testFixture" + // ], + // "outFiles": ["${workspaceRoot}/client/out/test/**/*.js"] + // } + ], + "compounds": [ + { + "name": "Client + Server", + "configurations": ["Launch Extension", "Attach to Server"] + } + ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 5deb2bccd..b461b5947 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,20 +1,31 @@ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format { - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "watch", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "never" - }, - "group": { - "kind": "build", - "isDefault": true - } - } - ] + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "compile", + "group": "build", + "presentation": { + "panel": "dedicated", + "reveal": "never" + }, + "problemMatcher": ["$tsc"] + }, + { + "type": "npm", + "script": "watch", + "isBackground": true, + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "panel": "dedicated", + "reveal": "never" + }, + "problemMatcher": ["$tsc-watch"] + } + ] } diff --git a/client/package-lock.json b/client/package-lock.json new file mode 100644 index 000000000..76c3fdcc0 --- /dev/null +++ b/client/package-lock.json @@ -0,0 +1,406 @@ +{ + "name": "ansible-client", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@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 + }, + "@types/vscode": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.53.0.tgz", + "integrity": "sha512-XjFWbSPOM0EKIT2XhhYm3D3cx3nn3lshMUcWNy1eqefk+oqRuBq8unVb6BYIZqXy9lQZyeUl7eaBCOZWv+LcXQ==", + "dev": true + }, + "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, + "requires": { + "debug": "4" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "dev": true + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "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, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "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 + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "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 + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "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" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "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 + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "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, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true + }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + }, + "vscode-languageclient": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", + "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "requires": { + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" + } + }, + "vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "requires": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + }, + "vscode-test": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.1.tgz", + "integrity": "sha512-tDloz6euDne+GeUSglhufL0c2xhuYAPAT74hjsuGxfflALfXF9bYnJ7ehZEeVkr/ZnQEh/T8EBrfPL+m0h5qEQ==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/client/package.json b/client/package.json new file mode 100644 index 000000000..ead775cc4 --- /dev/null +++ b/client/package.json @@ -0,0 +1,23 @@ +{ + "name": "ansible-client", + "publisher": "tomaciazek", + "description": "VSCode part of a language server", + "author": "Tomasz Maciążek", + "private": true, + "license": "MIT", + "version": "0.0.1", + "repository": { + "type": "git", + "url": "https://github.com/tomaciazek/vscode-ansible.git" + }, + "engines": { + "vscode": "^1.53.0" + }, + "dependencies": { + "vscode-languageclient": "^7.0.0" + }, + "devDependencies": { + "@types/vscode": "^1.53.0", + "vscode-test": "^1.3.0" + } +} diff --git a/client/src/extension.ts b/client/src/extension.ts new file mode 100644 index 000000000..b914ba170 --- /dev/null +++ b/client/src/extension.ts @@ -0,0 +1,69 @@ +import * as path from 'path'; +import { workspace, ExtensionContext, languages } from 'vscode'; + +import { + LanguageClient, + LanguageClientOptions, + ServerOptions, + TransportKind, +} from 'vscode-languageclient/node'; +import { DocumentSemanticTokensProvider, legend } from './semanticTokens'; + +let client: LanguageClient; + +export function activate(context: ExtensionContext): void { + // The server is implemented in node + const serverModule = context.asAbsolutePath( + path.join('server', 'out', 'server.js') + ); + // The debug options for the server + // --inspect=6009: runs the server in Node's Inspector mode so VS Code can attach to the server for debugging + const debugOptions = { execArgv: ['--nolazy', '--inspect=6009'] }; + + // If the extension is launched in debug mode then the debug server options are used + // Otherwise the run options are used + const serverOptions: ServerOptions = { + run: { module: serverModule, transport: TransportKind.ipc }, + debug: { + module: serverModule, + transport: TransportKind.ipc, + options: debugOptions, + }, + }; + + // Options to control the language client + const clientOptions: LanguageClientOptions = { + // Register the server for Ansible documents + documentSelector: [{ scheme: 'file', language: 'ansible' }], + synchronize: { + // Notify the server about file changes to ansible.cfg files contained in the workspace + fileEvents: workspace.createFileSystemWatcher('**/ansible.cfg'), + }, + }; + + // Create the language client and start the client. + client = new LanguageClient( + 'ansibleServer', + 'Ansible Server', + serverOptions, + clientOptions + ); + + context.subscriptions.push( + languages.registerDocumentSemanticTokensProvider( + { language: 'ansible' }, + new DocumentSemanticTokensProvider(), + legend + ) + ); + + // Start the client. This will also launch the server + client.start(); +} + +export function deactivate(): Thenable | undefined { + if (!client) { + return undefined; + } + return client.stop(); +} diff --git a/client/src/semanticTokens.ts b/client/src/semanticTokens.ts new file mode 100644 index 000000000..bfd5549ba --- /dev/null +++ b/client/src/semanticTokens.ts @@ -0,0 +1,130 @@ +import { performance } from 'perf_hooks'; +import * as vscode from 'vscode'; +import { parseAllDocuments } from 'yaml'; +import { Node, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; + +const keywords = new Set([ + 'action', + 'always', + 'any_errors_fatal', + 'args', + 'async', + 'become', + 'become_exe', + 'become_flags', + 'become_method', + 'become_user', + 'block', + 'changed_when', + 'check_mode', + 'collections', + 'connection', + 'debugger', + 'delay', + 'delegate_facts', + 'delegate_to', + 'diff', + 'environment', + 'extended', + 'fact_path', + 'failed_when', + 'force_handlers', + 'gather_facts', + 'gather_subset', + 'gather_timeout', + 'handlers', + 'hosts', + 'ignore_errors', + 'ignore_unreachable', + 'label', + 'local_action', + 'loop', + 'loop_control', + 'max_fail_percentage', + 'module_defaults', + 'name', + 'no_log', + 'notify', + 'order', + 'pause', + 'poll', + 'port', + 'post_tasks', + 'pre_tasks', + 'register', + 'remote_user', + 'rescue', + 'retries', + 'roles', + 'run_once', + 'serial', + 'strategy', + 'tags', + 'tasks', + 'throttle', + 'timeout', + 'until', + 'vars', + 'vars_files', + 'vars_prompt', + 'when', +]); + +const withKeywords = /^with_[a-z_]+$/; + +const tokenTypes = ['method']; + +const tokenModifiers = ['defaultLibrary']; + +export const legend = new vscode.SemanticTokensLegend( + tokenTypes, + tokenModifiers +); + +// Makes Ansible keyword tags distinct from other tags +export class DocumentSemanticTokensProvider + implements vscode.DocumentSemanticTokensProvider { + async provideDocumentSemanticTokens( + document: vscode.TextDocument + ): Promise { + const builder = new vscode.SemanticTokensBuilder(legend); + const start = performance.now(); + const yDocuments = parseAllDocuments(document.getText()); + yDocuments.forEach((yDoc) => { + this._markKeywords(yDoc.contents, builder, document); + }); + const stop = performance.now(); + return builder.build(); + } + + private _markKeywords( + node: Node | null, + builder: vscode.SemanticTokensBuilder, + document: vscode.TextDocument, + context: Node[] = [] + ) { + if (node instanceof YAMLMap) { + node.items.forEach((pair) => { + const key: Node | null = pair.key; + if ( + key instanceof Scalar && + (keywords.has(key.value) || withKeywords.test(key.value)) + ) { + const parent = context[context.length - 1]; + if (parent && parent instanceof YAMLSeq && key.range) { + const startPosition = document.positionAt(key.range[0]); + const length = key.range[1] - key.range[0]; + const endPosition = startPosition.translate(0, length); + const range = new vscode.Range(startPosition, endPosition); + builder.push(range, 'method', ['defaultLibrary']); + } + } + this._markKeywords(pair.value, builder, document, context.concat(node)); + }); + } else if (node instanceof YAMLSeq) { + node.items.forEach((item: Node | null) => + this._markKeywords(item, builder, document, context.concat(node)) + ); + } + } +} diff --git a/client/tsconfig.json b/client/tsconfig.json new file mode 100644 index 000000000..188bb144a --- /dev/null +++ b/client/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "composite": true, + "target": "ES2019", + "lib": ["ES2019"], + "module": "CommonJS", + "moduleResolution": "Node", + "outDir": "out", + "rootDir": "src", + "sourceMap": true, + "strict": true + }, + "include": ["src"], + "exclude": ["node_modules", ".vscode-test"] +} diff --git a/client/tsconfig.tsbuildinfo b/client/tsconfig.tsbuildinfo new file mode 100644 index 000000000..05fd4f2eb --- /dev/null +++ b/client/tsconfig.tsbuildinfo @@ -0,0 +1,2936 @@ +{ + "program": { + "fileInfos": { + "../node_modules/typescript/lib/lib.es5.d.ts": { + "version": "9622e8bd7cc72a7dab819a8011ecbf81d443638082e5cb99ecf2e75ff56ffc9d", + "signature": "9622e8bd7cc72a7dab819a8011ecbf81d443638082e5cb99ecf2e75ff56ffc9d", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.d.ts": { + "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2016.d.ts": { + "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2017.d.ts": { + "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2018.d.ts": { + "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2019.d.ts": { + "version": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "signature": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2015.core.d.ts": { + "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.collection.d.ts": { + "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.generator.d.ts": { + "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { + "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.promise.d.ts": { + "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { + "version": "7207e317a2cb07a177e7d963ab7b8c0e85dde7f9ddb50351f830239bf597569e", + "signature": "7207e317a2cb07a177e7d963ab7b8c0e85dde7f9ddb50351f830239bf597569e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { + "version": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d", + "signature": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { + "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { + "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { + "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.object.d.ts": { + "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { + "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.string.d.ts": { + "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.intl.d.ts": { + "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { + "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { + "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { + "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.intl.d.ts": { + "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.promise.d.ts": { + "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": { + "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.array.d.ts": { + "version": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "signature": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.object.d.ts": { + "version": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "signature": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.string.d.ts": { + "version": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "signature": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.symbol.d.ts": { + "version": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "signature": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { + "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.esnext.intl.d.ts": { + "version": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd", + "signature": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd", + "affectsGlobalScope": true + }, + "./node_modules/@types/vscode/index.d.ts": { + "version": "0d2ae25abaa1163188d256f0c438a274459099c30c44aa3be144c9c1232f4081", + "signature": "0d2ae25abaa1163188d256f0c438a274459099c30c44aa3be144c9c1232f4081", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/globals.d.ts": { + "version": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476", + "signature": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/async_hooks.d.ts": { + "version": "7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641", + "signature": "7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/buffer.d.ts": { + "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/child_process.d.ts": { + "version": "89a3409a743c2a408d02bd68255a61d8416225b76c2c66d8e2e74dad3e00bc5d", + "signature": "89a3409a743c2a408d02bd68255a61d8416225b76c2c66d8e2e74dad3e00bc5d", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/cluster.d.ts": { + "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/console.d.ts": { + "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/constants.d.ts": { + "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/crypto.d.ts": { + "version": "64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d", + "signature": "64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/dgram.d.ts": { + "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/dns.d.ts": { + "version": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "signature": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/domain.d.ts": { + "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/events.d.ts": { + "version": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "signature": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/fs.d.ts": { + "version": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "signature": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/fs/promises.d.ts": { + "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/http.d.ts": { + "version": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "signature": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/http2.d.ts": { + "version": "4c260129d649d69f0608cd123e7016e61364b553a5ca2de9b66b0398594959cf", + "signature": "4c260129d649d69f0608cd123e7016e61364b553a5ca2de9b66b0398594959cf", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/https.d.ts": { + "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/inspector.d.ts": { + "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/module.d.ts": { + "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/net.d.ts": { + "version": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "signature": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/os.d.ts": { + "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/path.d.ts": { + "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/perf_hooks.d.ts": { + "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/process.d.ts": { + "version": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "signature": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/punycode.d.ts": { + "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/querystring.d.ts": { + "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/readline.d.ts": { + "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/repl.d.ts": { + "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/stream.d.ts": { + "version": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "signature": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/string_decoder.d.ts": { + "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/timers.d.ts": { + "version": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "signature": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/tls.d.ts": { + "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/trace_events.d.ts": { + "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/tty.d.ts": { + "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/url.d.ts": { + "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/util.d.ts": { + "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/v8.d.ts": { + "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/vm.d.ts": { + "version": "66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff", + "signature": "66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/worker_threads.d.ts": { + "version": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "signature": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/zlib.d.ts": { + "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/ts3.4/base.d.ts": { + "version": "d44028ae0127eb3e9fcfa5f55a8b81d64775ce15aca1020fe25c511bbb055834", + "signature": "d44028ae0127eb3e9fcfa5f55a8b81d64775ce15aca1020fe25c511bbb055834", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/globals.global.d.ts": { + "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/wasi.d.ts": { + "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/ts3.6/base.d.ts": { + "version": "ad1ae5ae98eceb9af99061e83e867b9897d267aebc8f3b938c9424deabadf4bb", + "signature": "ad1ae5ae98eceb9af99061e83e867b9897d267aebc8f3b938c9424deabadf4bb", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/assert.d.ts": { + "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/base.d.ts": { + "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/index.d.ts": { + "version": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": { + "version": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", + "signature": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/typings/thenable.d.ts": { + "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", + "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", + "affectsGlobalScope": true + }, + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts": { + "version": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f", + "signature": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts": { + "version": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1", + "signature": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": { + "version": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383", + "signature": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": { + "version": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576", + "signature": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": { + "version": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e", + "signature": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": { + "version": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6", + "signature": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": { + "version": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8", + "signature": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": { + "version": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636", + "signature": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": { + "version": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91", + "signature": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": { + "version": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0", + "signature": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": { + "version": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656", + "signature": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": { + "version": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc", + "signature": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": { + "version": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d", + "signature": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": { + "version": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90", + "signature": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": { + "version": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec", + "signature": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": { + "version": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676", + "signature": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": { + "version": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c", + "signature": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": { + "version": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1", + "signature": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": { + "version": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2", + "signature": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": { + "version": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656", + "signature": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": { + "version": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6", + "signature": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": { + "version": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0", + "signature": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": { + "version": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0", + "signature": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": { + "version": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc", + "signature": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": { + "version": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323", + "signature": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": { + "version": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533", + "signature": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": { + "version": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd", + "signature": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": { + "version": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7", + "signature": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": { + "version": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184", + "signature": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/colorProvider.d.ts": { + "version": "0e92ff071bc64da789f3219daf517a377414b37b5e109b7d4db263daa864d789", + "signature": "0e92ff071bc64da789f3219daf517a377414b37b5e109b7d4db263daa864d789", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/implementation.d.ts": { + "version": "9a82c78b7cd0b92985d9e66dbac9fafcf5904a1e482a43507f98694d7fb9391e", + "signature": "9a82c78b7cd0b92985d9e66dbac9fafcf5904a1e482a43507f98694d7fb9391e", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts": { + "version": "55d47ad2ee85e2d257cc4518bd4fe6b5a2e29e6b5b76441474eaa66f97714f07", + "signature": "55d47ad2ee85e2d257cc4518bd4fe6b5a2e29e6b5b76441474eaa66f97714f07", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/configuration.d.ts": { + "version": "dded3cbf269b0200f558ec6a5286621d9eccea63c0275cc9e3b60b7b716b51b0", + "signature": "dded3cbf269b0200f558ec6a5286621d9eccea63c0275cc9e3b60b7b716b51b0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/workspaceFolders.d.ts": { + "version": "f1b86db6e3f40b07b911ba0f1b20d566ab5f0182774d50fc3e62bf655b3b3e57", + "signature": "f1b86db6e3f40b07b911ba0f1b20d566ab5f0182774d50fc3e62bf655b3b3e57", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/foldingRange.d.ts": { + "version": "5263e3fedade113a9c85e153c9f3a0408dbf38282385589a1a0153a9fe3ebb0d", + "signature": "5263e3fedade113a9c85e153c9f3a0408dbf38282385589a1a0153a9fe3ebb0d", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/declaration.d.ts": { + "version": "d01f01508ae58d616976c2c29a84ff3caac8cf0f44c38918fc365fd5f7c50e32", + "signature": "d01f01508ae58d616976c2c29a84ff3caac8cf0f44c38918fc365fd5f7c50e32", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/selectionRange.d.ts": { + "version": "08496a1fad0e2cd9d884b9076cdb5c4d2efbe63c0ad1d8fdbfdb6fe8ad157c32", + "signature": "08496a1fad0e2cd9d884b9076cdb5c4d2efbe63c0ad1d8fdbfdb6fe8ad157c32", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts": { + "version": "df40de3af1c5bd3e4befadbbe981752ada6d38340b9d29f5fb083aedff7a7c13", + "signature": "df40de3af1c5bd3e4befadbbe981752ada6d38340b9d29f5fb083aedff7a7c13", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts": { + "version": "6f8d7d04d2c7a24b1a2defb3faaf66c1323ca7473ff09bae7131b4c54ea97744", + "signature": "6f8d7d04d2c7a24b1a2defb3faaf66c1323ca7473ff09bae7131b4c54ea97744", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/fileOperations.d.ts": { + "version": "0e96615c5ed8377938951c95c5062d7da63b7ff71ef5f57831b621caaf78df71", + "signature": "0e96615c5ed8377938951c95c5062d7da63b7ff71ef5f57831b621caaf78df71", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts": { + "version": "609ea1b77f40a3a6d7350cd954a9bd25db791a6d1676584591cf42ff6bc78c5a", + "signature": "609ea1b77f40a3a6d7350cd954a9bd25db791a6d1676584591cf42ff6bc78c5a", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts": { + "version": "86e8989831b1ea4668aa688a56362cf5e2c99f1dd5f28022874f089545205bf4", + "signature": "86e8989831b1ea4668aa688a56362cf5e2c99f1dd5f28022874f089545205bf4", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts": { + "version": "8113b8de14bdf47c2f9b4ead98b6ad65378ddc65a7626fc2705eb2916b76a1ce", + "signature": "8113b8de14bdf47c2f9b4ead98b6ad65378ddc65a7626fc2705eb2916b76a1ce", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts": { + "version": "c5149fec51912b455e00ff7dc0c0e4dfd6af79926cefa977b9b628bb5a2f47e2", + "signature": "c5149fec51912b455e00ff7dc0c0e4dfd6af79926cefa977b9b628bb5a2f47e2", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts": { + "version": "0ac47cdf1f25ce509b319ab217315ac5df7811ba57b0ba76f19148791ca27fdd", + "signature": "0ac47cdf1f25ce509b319ab217315ac5df7811ba57b0ba76f19148791ca27fdd", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/client.d.ts": { + "version": "4567fe06fdc6858c1a9ad40000a45361785f4fec2897133dccebf7633abc5f78", + "signature": "4567fe06fdc6858c1a9ad40000a45361785f4fec2897133dccebf7633abc5f78", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts": { + "version": "12789f348093a550858496353ff19de898f77edfe54dfbc32cfdb73ea20d4cdb", + "signature": "12789f348093a550858496353ff19de898f77edfe54dfbc32cfdb73ea20d4cdb", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": { + "version": "ddccf0a48338cac642e93bfdb563494dad6e05b70ef0e6e3605a454db88ca57e", + "signature": "ddccf0a48338cac642e93bfdb563494dad6e05b70ef0e6e3605a454db88ca57e", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/node.d.ts": { + "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", + "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": { + "version": "d789022bf705385490fe89811bc7850225c207f37dd706ada2509eb1d8f31f12", + "signature": "d789022bf705385490fe89811bc7850225c207f37dd706ada2509eb1d8f31f12", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/node.d.ts": { + "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", + "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/common/api.d.ts": { + "version": "8a45a7b6f28e8ad27bf9cd44254cec14d009744205500a0600b7d5e8855ab1a9", + "signature": "8a45a7b6f28e8ad27bf9cd44254cec14d009744205500a0600b7d5e8855ab1a9", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/lib/node/main.d.ts": { + "version": "75b69717fd90ebb37fb5acac671a7900b58b74c535bc25c509dc780b827c0dbf", + "signature": "75b69717fd90ebb37fb5acac671a7900b58b74c535bc25c509dc780b827c0dbf", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageclient/node.d.ts": { + "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", + "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", + "affectsGlobalScope": false + }, + "../node_modules/yaml/types.d.ts": { + "version": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24", + "signature": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24", + "affectsGlobalScope": false + }, + "../node_modules/yaml/util.d.ts": { + "version": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d", + "signature": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d", + "affectsGlobalScope": false + }, + "../node_modules/yaml/parse-cst.d.ts": { + "version": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd", + "signature": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd", + "affectsGlobalScope": false + }, + "../node_modules/yaml/index.d.ts": { + "version": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", + "signature": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", + "affectsGlobalScope": false + }, + "./src/semanticTokens.ts": { + "version": "53f659e7d30acd7620102bb494ee08457ab0ace8f38562b8bd4766e819d8662b", + "signature": "e8f68cbfde24db58ecf33e9c268ca0e0706bc9f7740602bae5c80999bffa75c2", + "affectsGlobalScope": false + }, + "./src/extension.ts": { + "version": "a36ce5689359bfe2ca0ae138d3fa10257b0e03b923bd581a54508699db629bcb", + "signature": "28fd02b23f22a42df03edc496d91b458cbb5c0b39a9933a40f136e465bf6dc1f", + "affectsGlobalScope": false + }, + "../node_modules/@types/json-schema/index.d.ts": { + "version": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", + "signature": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", + "affectsGlobalScope": false + } + }, + "options": { + "composite": true, + "target": 6, + "lib": [ + "lib.es2019.d.ts" + ], + "module": 1, + "moduleResolution": 2, + "outDir": "./out", + "rootDir": "./src", + "sourceMap": true, + "strict": true, + "watch": true, + "configFilePath": "./tsconfig.json" + }, + "referencedMap": { + "./node_modules/@types/vscode/index.d.ts": [ + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-jsonrpc/typings/thenable.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/index.d.ts", + "../node_modules/@types/node/net.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/node.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/node/main.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/typings/thenable.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/api.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts", + "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts", + "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/client.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts", + "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts", + "./node_modules/vscode-languageclient/lib/common/colorProvider.d.ts", + "./node_modules/vscode-languageclient/lib/common/configuration.d.ts", + "./node_modules/vscode-languageclient/lib/common/declaration.d.ts", + "./node_modules/vscode-languageclient/lib/common/fileOperations.d.ts", + "./node_modules/vscode-languageclient/lib/common/foldingRange.d.ts", + "./node_modules/vscode-languageclient/lib/common/implementation.d.ts", + "./node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts", + "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts", + "./node_modules/vscode-languageclient/lib/common/selectionRange.d.ts", + "./node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts", + "./node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts", + "./node_modules/vscode-languageclient/lib/common/workspaceFolders.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/colorProvider.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/configuration.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/declaration.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/fileOperations.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/foldingRange.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/implementation.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/selectionRange.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/workspaceFolders.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/node/main.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/index.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/node.d.ts" + ], + "./node_modules/vscode-languageclient/node.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/lib/node/main.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/node.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/node.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts" + ], + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./src/extension.ts": [ + "../node_modules/@types/node/path.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/node.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./src/semanticTokens.ts" + ], + "./src/semanticTokens.ts": [ + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/yaml/index.d.ts", + "../node_modules/yaml/types.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/json-schema/index.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/assert.d.ts": [ + "../node_modules/@types/node/assert.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/async_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/base.d.ts": [ + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/ts3.6/base.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/buffer.d.ts": [ + "../node_modules/@types/node/buffer.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/child_process.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/cluster.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/console.d.ts": [ + "../node_modules/@types/node/util.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/constants.d.ts": [ + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/os.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/crypto.d.ts": [ + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/stream.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/dgram.d.ts": [ + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/dns.d.ts": [ + "../node_modules/@types/node/dns.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/domain.d.ts": [ + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/events.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/fs.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/fs/promises.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/globals.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/globals.global.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/http.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/http2.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/https.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/inspector.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/module.d.ts": [ + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/url.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/net.d.ts": [ + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/os.d.ts": [ + "../node_modules/@types/node/os.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/path.d.ts": [ + "../node_modules/@types/node/path.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/perf_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/process.d.ts": [ + "../node_modules/@types/node/tty.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/punycode.d.ts": [ + "../node_modules/@types/node/punycode.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/querystring.d.ts": [ + "../node_modules/@types/node/querystring.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/readline.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/readline.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/repl.d.ts": [ + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/vm.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/stream.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/stream.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/string_decoder.d.ts": [ + "../node_modules/@types/node/string_decoder.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/timers.d.ts": [ + "../node_modules/@types/node/timers.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/tls.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tls.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/trace_events.d.ts": [ + "../node_modules/@types/node/trace_events.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/ts3.4/base.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/buffer.d.ts", + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/console.d.ts", + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/globals.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/@types/node/process.d.ts", + "../node_modules/@types/node/punycode.d.ts", + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/string_decoder.d.ts", + "../node_modules/@types/node/timers.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/trace_events.d.ts", + "../node_modules/@types/node/tty.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/v8.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "../node_modules/@types/node/zlib.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/ts3.6/base.d.ts": [ + "../node_modules/@types/node/globals.global.d.ts", + "../node_modules/@types/node/ts3.4/base.d.ts", + "../node_modules/@types/node/wasi.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/tty.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tty.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/url.d.ts": [ + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/url.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/util.d.ts": [ + "../node_modules/@types/node/util.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/v8.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/v8.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/vm.d.ts": [ + "../node_modules/@types/node/vm.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/wasi.d.ts": [ + "../node_modules/@types/node/wasi.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/worker_threads.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/zlib.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/zlib.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.collection.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.core.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.generator.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.promise.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2016.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.intl.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.object.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.string.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2018.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2018.intl.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2018.promise.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2019.array.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2019.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2019.object.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2019.string.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2019.symbol.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es5.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.esnext.intl.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/yaml/index.d.ts": [ + "../node_modules/yaml/parse-cst.d.ts", + "../node_modules/yaml/types.d.ts", + "../node_modules/yaml/util.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/yaml/parse-cst.d.ts": [ + "../node_modules/yaml/util.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/yaml/types.d.ts": [ + "../node_modules/yaml/index.d.ts", + "../node_modules/yaml/parse-cst.d.ts", + "../node_modules/yaml/util.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/yaml/util.d.ts": [ + "../node_modules/yaml/index.d.ts", + "../node_modules/yaml/parse-cst.d.ts", + "../node_modules/yaml/types.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ] + }, + "exportedModulesMap": { + "./node_modules/@types/vscode/index.d.ts": [ + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-jsonrpc/typings/thenable.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/index.d.ts", + "../node_modules/@types/node/net.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/node.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/node/main.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-jsonrpc/typings/thenable.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/api.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts", + "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts", + "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/client.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts", + "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts", + "./node_modules/vscode-languageclient/lib/common/colorProvider.d.ts", + "./node_modules/vscode-languageclient/lib/common/configuration.d.ts", + "./node_modules/vscode-languageclient/lib/common/declaration.d.ts", + "./node_modules/vscode-languageclient/lib/common/fileOperations.d.ts", + "./node_modules/vscode-languageclient/lib/common/foldingRange.d.ts", + "./node_modules/vscode-languageclient/lib/common/implementation.d.ts", + "./node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts", + "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts", + "./node_modules/vscode-languageclient/lib/common/selectionRange.d.ts", + "./node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts", + "./node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts", + "./node_modules/vscode-languageclient/lib/common/workspaceFolders.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/colorProvider.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/configuration.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/declaration.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/fileOperations.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/foldingRange.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/implementation.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/selectionRange.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/common/workspaceFolders.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageclient/lib/node/main.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/index.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/node.d.ts" + ], + "./node_modules/vscode-languageclient/node.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/lib/node/main.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/node.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/node.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts" + ], + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "./src/extension.ts": [ + "./node_modules/@types/vscode/index.d.ts" + ], + "./src/semanticTokens.ts": [ + "./node_modules/@types/vscode/index.d.ts" + ], + "../node_modules/@types/json-schema/index.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/assert.d.ts": [ + "../node_modules/@types/node/assert.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/async_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/base.d.ts": [ + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/ts3.6/base.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/buffer.d.ts": [ + "../node_modules/@types/node/buffer.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/child_process.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/cluster.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/console.d.ts": [ + "../node_modules/@types/node/util.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/constants.d.ts": [ + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/os.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/crypto.d.ts": [ + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/stream.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/dgram.d.ts": [ + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/dns.d.ts": [ + "../node_modules/@types/node/dns.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/domain.d.ts": [ + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/events.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/fs.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/fs/promises.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/globals.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/globals.global.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/http.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/http2.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/https.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/inspector.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/module.d.ts": [ + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/url.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/net.d.ts": [ + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/os.d.ts": [ + "../node_modules/@types/node/os.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/path.d.ts": [ + "../node_modules/@types/node/path.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/perf_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/process.d.ts": [ + "../node_modules/@types/node/tty.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/punycode.d.ts": [ + "../node_modules/@types/node/punycode.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/querystring.d.ts": [ + "../node_modules/@types/node/querystring.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/readline.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/readline.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/repl.d.ts": [ + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/vm.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/stream.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/stream.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/string_decoder.d.ts": [ + "../node_modules/@types/node/string_decoder.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/timers.d.ts": [ + "../node_modules/@types/node/timers.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/tls.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tls.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/trace_events.d.ts": [ + "../node_modules/@types/node/trace_events.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/ts3.4/base.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/buffer.d.ts", + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/console.d.ts", + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/globals.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/@types/node/process.d.ts", + "../node_modules/@types/node/punycode.d.ts", + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/string_decoder.d.ts", + "../node_modules/@types/node/timers.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/trace_events.d.ts", + "../node_modules/@types/node/tty.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/v8.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "../node_modules/@types/node/zlib.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/ts3.6/base.d.ts": [ + "../node_modules/@types/node/globals.global.d.ts", + "../node_modules/@types/node/ts3.4/base.d.ts", + "../node_modules/@types/node/wasi.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/tty.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tty.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/url.d.ts": [ + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/url.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/util.d.ts": [ + "../node_modules/@types/node/util.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/v8.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/v8.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/vm.d.ts": [ + "../node_modules/@types/node/vm.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/wasi.d.ts": [ + "../node_modules/@types/node/wasi.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/worker_threads.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/@types/node/zlib.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/zlib.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.collection.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.core.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.generator.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.promise.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2016.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.intl.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.object.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.string.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2018.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2018.intl.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2018.promise.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2019.array.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2019.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2019.object.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2019.string.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2019.symbol.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.es5.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/typescript/lib/lib.esnext.intl.d.ts": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/yaml/index.d.ts": [ + "../node_modules/yaml/parse-cst.d.ts", + "../node_modules/yaml/types.d.ts", + "../node_modules/yaml/util.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/yaml/parse-cst.d.ts": [ + "../node_modules/yaml/util.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/yaml/types.d.ts": [ + "../node_modules/yaml/index.d.ts", + "../node_modules/yaml/parse-cst.d.ts", + "../node_modules/yaml/util.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ], + "../node_modules/yaml/util.d.ts": [ + "../node_modules/yaml/index.d.ts", + "../node_modules/yaml/parse-cst.d.ts", + "../node_modules/yaml/types.d.ts", + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + "./node_modules/@types/vscode/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-jsonrpc/lib/node/main.d.ts", + "./node_modules/vscode-jsonrpc/node.d.ts", + "./node_modules/vscode-jsonrpc/typings/thenable.d.ts", + "./node_modules/vscode-languageclient/lib/common/api.d.ts", + "./node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts", + "./node_modules/vscode-languageclient/lib/common/client.d.ts", + "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts", + "./node_modules/vscode-languageclient/lib/common/colorProvider.d.ts", + "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts", + "./node_modules/vscode-languageclient/lib/common/configuration.d.ts", + "./node_modules/vscode-languageclient/lib/common/declaration.d.ts", + "./node_modules/vscode-languageclient/lib/common/fileOperations.d.ts", + "./node_modules/vscode-languageclient/lib/common/foldingRange.d.ts", + "./node_modules/vscode-languageclient/lib/common/implementation.d.ts", + "./node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts", + "./node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts", + "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts", + "./node_modules/vscode-languageclient/lib/common/selectionRange.d.ts", + "./node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts", + "./node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts", + "./node_modules/vscode-languageclient/lib/common/workspaceFolders.d.ts", + "./node_modules/vscode-languageclient/lib/node/main.d.ts", + "./node_modules/vscode-languageclient/node.d.ts", + "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts", + "./node_modules/vscode-languageserver-protocol/node.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts", + "./src/extension.ts", + "./src/semanticTokens.ts", + "../node_modules/@types/json-schema/index.d.ts", + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/buffer.d.ts", + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/console.d.ts", + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/globals.d.ts", + "../node_modules/@types/node/globals.global.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/index.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/@types/node/process.d.ts", + "../node_modules/@types/node/punycode.d.ts", + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/string_decoder.d.ts", + "../node_modules/@types/node/timers.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/trace_events.d.ts", + "../node_modules/@types/node/ts3.4/base.d.ts", + "../node_modules/@types/node/ts3.6/base.d.ts", + "../node_modules/@types/node/tty.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/v8.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/wasi.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "../node_modules/@types/node/zlib.d.ts", + "../node_modules/typescript/lib/lib.es2015.collection.d.ts", + "../node_modules/typescript/lib/lib.es2015.core.d.ts", + "../node_modules/typescript/lib/lib.es2015.d.ts", + "../node_modules/typescript/lib/lib.es2015.generator.d.ts", + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts", + "../node_modules/typescript/lib/lib.es2015.promise.d.ts", + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts", + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts", + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts", + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts", + "../node_modules/typescript/lib/lib.es2016.d.ts", + "../node_modules/typescript/lib/lib.es2017.d.ts", + "../node_modules/typescript/lib/lib.es2017.intl.d.ts", + "../node_modules/typescript/lib/lib.es2017.object.d.ts", + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", + "../node_modules/typescript/lib/lib.es2017.string.d.ts", + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", + "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts", + "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts", + "../node_modules/typescript/lib/lib.es2018.d.ts", + "../node_modules/typescript/lib/lib.es2018.intl.d.ts", + "../node_modules/typescript/lib/lib.es2018.promise.d.ts", + "../node_modules/typescript/lib/lib.es2018.regexp.d.ts", + "../node_modules/typescript/lib/lib.es2019.array.d.ts", + "../node_modules/typescript/lib/lib.es2019.d.ts", + "../node_modules/typescript/lib/lib.es2019.object.d.ts", + "../node_modules/typescript/lib/lib.es2019.string.d.ts", + "../node_modules/typescript/lib/lib.es2019.symbol.d.ts", + "../node_modules/typescript/lib/lib.es2020.bigint.d.ts", + "../node_modules/typescript/lib/lib.es5.d.ts", + "../node_modules/typescript/lib/lib.esnext.intl.d.ts", + "../node_modules/yaml/index.d.ts", + "../node_modules/yaml/parse-cst.d.ts", + "../node_modules/yaml/types.d.ts", + "../node_modules/yaml/util.d.ts" + ] + }, + "version": "4.1.5" +} \ No newline at end of file diff --git a/package.json b/package.json index 8c54de97b..3d4968607 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,8 @@ "publisher": "tomaciazek", "displayName": "Ansible", "description": "Ansible language support", + "author": "Tomasz Maciążek", + "license": "MIT", "version": "0.0.1", "repository": { "type": "git", @@ -17,8 +19,31 @@ "activationEvents": [ "onLanguage:ansible" ], - "main": "./out/extension.js", + "main": "./client/out/extension.js", "contributes": { + "configuration": { + "type": "object", + "title": "Example configuration", + "properties": { + "ansible.maxNumberOfProblems": { + "scope": "resource", + "type": "number", + "default": 100, + "description": "Controls the maximum number of problems produced by the server." + }, + "ansible.trace.server": { + "scope": "window", + "type": "string", + "enum": [ + "off", + "messages", + "verbose" + ], + "default": "off", + "description": "Traces the communication between VS Code and the language server." + } + } + }, "languages": [ { "id": "ansible", @@ -121,8 +146,9 @@ }, "scripts": { "vscode:prepublish": "npm run compile", - "compile": "tsc -p ./", - "watch": "tsc -watch -p ./" + "compile": "tsc -b", + "watch": "tsc -b -w", + "postinstall": "cd client && npm install && cd ../server && npm install && cd .." }, "devDependencies": { "typescript": "^4.1.5", diff --git a/server/package-lock.json b/server/package-lock.json new file mode 100644 index 000000000..e445bbf4c --- /dev/null +++ b/server/package-lock.json @@ -0,0 +1,61 @@ +{ + "name": "ansible-language-server", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@flatten-js/interval-tree": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.13.tgz", + "integrity": "sha512-5thHHdUZIRdPdEPx6G9tY6mHFMGoXsq9/ivemRszDcEkERXqlZAv+7NozaFbAUOvKXxyWoccSnLyjK0c5UWJeQ==" + }, + "@types/lodash": { + "version": "4.14.168", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", + "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + }, + "vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "requires": { + "vscode-languageserver-protocol": "3.16.0" + } + }, + "vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "requires": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "vscode-languageserver-textdocument": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", + "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" + }, + "vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + } + } +} diff --git a/server/package.json b/server/package.json new file mode 100644 index 000000000..09c0b761f --- /dev/null +++ b/server/package.json @@ -0,0 +1,26 @@ +{ + "name": "ansible-language-server", + "publisher": "tomaciazek", + "description": "Ansible language server.", + "author": "Tomasz Maciążek", + "private": true, + "license": "MIT", + "version": "0.0.1", + "repository": { + "type": "git", + "url": "https://github.com/tomaciazek/vscode-ansible.git" + }, + "engines": { + "node": "*" + }, + "devDependencies": { + "@types/lodash": "^4.14.108" + }, + "dependencies": { + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "lodash": "^4.17.21", + "yaml": "^1.10.0", + "@flatten-js/interval-tree": "^1.0.13" + } +} diff --git a/server/src/server.ts b/server/src/server.ts new file mode 100644 index 000000000..66a69ef19 --- /dev/null +++ b/server/src/server.ts @@ -0,0 +1,225 @@ +import IntervalTree from '@flatten-js/interval-tree'; +import * as _ from 'lodash'; +import { TextDocument } from 'vscode-languageserver-textdocument'; +import { + createConnection, + Diagnostic, + DiagnosticRelatedInformation, + DiagnosticSeverity, + DidChangeConfigurationNotification, + InitializeParams, + InitializeResult, + Location, + ProposedFeatures, + Range, + TextDocuments, + TextDocumentSyncKind, +} from 'vscode-languageserver/node'; +import { parseAllDocuments } from 'yaml'; + +// Create a connection for the server, using Node's IPC as a transport. +// Also include all preview / proposed LSP features. +const connection = createConnection(ProposedFeatures.all); + +// Create a simple text document manager. +const documents: TextDocuments = new TextDocuments(TextDocument); + +let hasConfigurationCapability = false; +let hasWorkspaceFolderCapability = false; +let hasDiagnosticRelatedInformationCapability = false; + +connection.onInitialize((params: InitializeParams) => { + const capabilities = params.capabilities; + + // Does the client support the `workspace/configuration` request? + // If not, we fall back using global settings. + hasConfigurationCapability = !!( + capabilities.workspace && !!capabilities.workspace.configuration + ); + hasWorkspaceFolderCapability = !!( + capabilities.workspace && !!capabilities.workspace.workspaceFolders + ); + hasDiagnosticRelatedInformationCapability = !!( + capabilities.textDocument && + capabilities.textDocument.publishDiagnostics && + capabilities.textDocument.publishDiagnostics.relatedInformation + ); + + const result: InitializeResult = { + capabilities: { + textDocumentSync: TextDocumentSyncKind.Incremental, + // Tell the client that this server supports code completion. + completionProvider: { + resolveProvider: true, + }, + }, + }; + if (hasWorkspaceFolderCapability) { + result.capabilities.workspace = { + workspaceFolders: { + supported: true, + }, + }; + } + return result; +}); + +connection.onInitialized(() => { + if (hasConfigurationCapability) { + // Register for all configuration changes. + connection.client.register( + DidChangeConfigurationNotification.type, + undefined + ); + } + if (hasWorkspaceFolderCapability) { + connection.workspace.onDidChangeWorkspaceFolders((_event) => { + connection.console.log('Workspace folder change event received.'); + }); + } + connection.client; +}); + +// The example settings +interface ExampleSettings { + maxNumberOfProblems: number; +} + +// The global settings, used when the `workspace/configuration` request is not supported by the client. +// Please note that this is not the case when using this server with the client provided in this example +// but could happen with other clients. +const defaultSettings: ExampleSettings = { maxNumberOfProblems: 1000 }; +let globalSettings: ExampleSettings = defaultSettings; + +// Cache the settings of all open documents +const documentSettings: Map> = new Map(); + +connection.onDidChangeConfiguration((change) => { + if (hasConfigurationCapability) { + // Reset all cached document settings + documentSettings.clear(); + } else { + globalSettings = ( + (change.settings.languageServerExample || defaultSettings) + ); + } + + // Revalidate all open text documents + documents.all().forEach(validateTextDocument); +}); + +function getDocumentSettings(resource: string): Thenable { + if (!hasConfigurationCapability) { + return Promise.resolve(globalSettings); + } + let result = documentSettings.get(resource); + if (!result) { + result = connection.workspace.getConfiguration({ + scopeUri: resource, + section: 'languageServerExample', + }); + documentSettings.set(resource, result); + } + return result; +} + +// Only keep settings for open documents +documents.onDidClose((e) => { + documentSettings.delete(e.document.uri); +}); + +// The content of a text document has changed. This event is emitted +// when the text document first opened or when its content has changed. +documents.onDidChangeContent((change) => { + validateTextDocument(change.document); +}); + +async function validateTextDocument(textDocument: TextDocument): Promise { + // In this simple example we get the settings for every validate run. + const settings = await getDocumentSettings(textDocument.uri); + + const diagnostics: Diagnostic[] = []; + const yDocuments = parseAllDocuments(textDocument.getText(), { + prettyErrors: false, + }); + const rangeTree = new IntervalTree(); + yDocuments.forEach((yDoc) => { + yDoc.errors.forEach((error) => { + const errorRange = error.range || error.source?.range; + let range; + if (errorRange) { + const start = textDocument.positionAt(errorRange.start); + const end = textDocument.positionAt(errorRange.end); + range = Range.create(start, end); + + let severity; + switch (error.name) { + case 'YAMLReferenceError': + case 'YAMLSemanticError': + case 'YAMLSyntaxError': + severity = DiagnosticSeverity.Error; + break; + case 'YAMLWarning': + severity = DiagnosticSeverity.Warning; + break; + default: + severity = DiagnosticSeverity.Information; + break; + } + rangeTree.insert([errorRange.start, errorRange.end], { + message: error.message, + range: range || Range.create(0, 0, 0, 0), + severity: severity, + source: 'Ansible [YAML]', + }); + } + }); + }); + rangeTree.forEach((range, diag) => { + const searchResult = rangeTree.search(range); + if (searchResult) { + const allRangesAreEqual = searchResult.every((foundDiag: Diagnostic) => { + // (range start == range end) in case it has already been collapsed + return ( + foundDiag.range.start === foundDiag.range.end || + _.isEqual(foundDiag.range, diag.range) + ); + }); + if (!allRangesAreEqual) { + // Prevent large error scopes hiding/obscuring other error scopes + // In YAML this is very common in case of syntax errors + const range = diag.range; + diag.relatedInformation = [ + DiagnosticRelatedInformation.create( + Location.create(textDocument.uri, { + start: range.end, + end: range.end, + }), + 'the scope of this error ends here' + ), + ]; + // collapse the range + diag.range = { + start: range.start, + end: range.start, + }; + } + } + diagnostics.push(diag); + }); + + // Send the computed diagnostics to VSCode. + connection.sendDiagnostics({ uri: textDocument.uri, diagnostics }); +} + +connection.onDidChangeWatchedFiles((_change) => { + // Monitored files have change in VSCode + connection.console.log('We received a file change event'); +}); + +// Make the text document manager listen on the connection +// for open, change and close text document events +documents.listen(connection); + +// Listen on the connection +connection.listen(); diff --git a/server/tsconfig.json b/server/tsconfig.json new file mode 100644 index 000000000..188bb144a --- /dev/null +++ b/server/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "composite": true, + "target": "ES2019", + "lib": ["ES2019"], + "module": "CommonJS", + "moduleResolution": "Node", + "outDir": "out", + "rootDir": "src", + "sourceMap": true, + "strict": true + }, + "include": ["src"], + "exclude": ["node_modules", ".vscode-test"] +} diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo new file mode 100644 index 000000000..3882f1ade --- /dev/null +++ b/server/tsconfig.tsbuildinfo @@ -0,0 +1,2307 @@ +{ + "program": { + "fileInfos": { + "../node_modules/typescript/lib/lib.es5.d.ts": { + "version": "9622e8bd7cc72a7dab819a8011ecbf81d443638082e5cb99ecf2e75ff56ffc9d", + "signature": "9622e8bd7cc72a7dab819a8011ecbf81d443638082e5cb99ecf2e75ff56ffc9d", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.d.ts": { + "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2016.d.ts": { + "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2017.d.ts": { + "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2018.d.ts": { + "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2019.d.ts": { + "version": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "signature": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2015.core.d.ts": { + "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.collection.d.ts": { + "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.generator.d.ts": { + "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { + "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.promise.d.ts": { + "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { + "version": "7207e317a2cb07a177e7d963ab7b8c0e85dde7f9ddb50351f830239bf597569e", + "signature": "7207e317a2cb07a177e7d963ab7b8c0e85dde7f9ddb50351f830239bf597569e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { + "version": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d", + "signature": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { + "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { + "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { + "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.object.d.ts": { + "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { + "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.string.d.ts": { + "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.intl.d.ts": { + "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { + "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { + "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { + "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.intl.d.ts": { + "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.promise.d.ts": { + "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": { + "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.array.d.ts": { + "version": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "signature": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.object.d.ts": { + "version": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "signature": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.string.d.ts": { + "version": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "signature": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.symbol.d.ts": { + "version": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "signature": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { + "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.esnext.intl.d.ts": { + "version": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd", + "signature": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd", + "affectsGlobalScope": true + }, + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": { + "version": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", + "signature": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/typings/thenable.d.ts": { + "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", + "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", + "affectsGlobalScope": true + }, + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts": { + "version": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f", + "signature": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts": { + "version": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1", + "signature": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": { + "version": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383", + "signature": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": { + "version": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576", + "signature": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": { + "version": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e", + "signature": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": { + "version": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6", + "signature": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": { + "version": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8", + "signature": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": { + "version": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636", + "signature": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": { + "version": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91", + "signature": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": { + "version": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0", + "signature": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": { + "version": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656", + "signature": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": { + "version": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc", + "signature": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": { + "version": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d", + "signature": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": { + "version": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90", + "signature": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": { + "version": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec", + "signature": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": { + "version": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676", + "signature": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": { + "version": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c", + "signature": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": { + "version": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1", + "signature": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": { + "version": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2", + "signature": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": { + "version": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656", + "signature": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": { + "version": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6", + "signature": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": { + "version": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0", + "signature": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": { + "version": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0", + "signature": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": { + "version": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc", + "signature": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": { + "version": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323", + "signature": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": { + "version": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533", + "signature": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": { + "version": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd", + "signature": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": { + "version": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7", + "signature": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": { + "version": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184", + "signature": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/progress.d.ts": { + "version": "f1f23acd4a8193453749f69d4432f5f122d6d572b793a8b630dd12fe80b0c3d3", + "signature": "f1f23acd4a8193453749f69d4432f5f122d6d572b793a8b630dd12fe80b0c3d3", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/configuration.d.ts": { + "version": "7662d6994d28c9ebbe61b88cc35c3d705804351eedbf363df30ea9fe8c4961dc", + "signature": "7662d6994d28c9ebbe61b88cc35c3d705804351eedbf363df30ea9fe8c4961dc", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts": { + "version": "1fb68106bddae35448e5279095461a4b54c4bbb42787cd629f70924b17e9a11e", + "signature": "1fb68106bddae35448e5279095461a4b54c4bbb42787cd629f70924b17e9a11e", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts": { + "version": "9acd551d1b5fb8a4ea4bfd65e8fcc8beca89a4b98fc1a9321924308256383565", + "signature": "9acd551d1b5fb8a4ea4bfd65e8fcc8beca89a4b98fc1a9321924308256383565", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts": { + "version": "a7024322dc86e43685c5564b438decad7557de62baae80b062fee78752c3b2f4", + "signature": "a7024322dc86e43685c5564b438decad7557de62baae80b062fee78752c3b2f4", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts": { + "version": "351bbf43d585484825ee6c4b4805aac137ffc8e8a3b9812af99945a202db7c02", + "signature": "351bbf43d585484825ee6c4b4805aac137ffc8e8a3b9812af99945a202db7c02", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts": { + "version": "a0116a0ba37624acef486fba35bd5530c8c25415798c8908a35e5f72913d2365", + "signature": "a0116a0ba37624acef486fba35bd5530c8c25415798c8908a35e5f72913d2365", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts": { + "version": "3bd2fc1b877ba4f9c91fca3231333471f3ff0edf85e146eaafdff2bc42c9a44c", + "signature": "3bd2fc1b877ba4f9c91fca3231333471f3ff0edf85e146eaafdff2bc42c9a44c", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/moniker.d.ts": { + "version": "387a6dc0d57a9f602d0d7f2f4ba88b65540c1c19d84088157610ca0176793a03", + "signature": "387a6dc0d57a9f602d0d7f2f4ba88b65540c1c19d84088157610ca0176793a03", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/server.d.ts": { + "version": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617", + "signature": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/api.d.ts": { + "version": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081", + "signature": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081", + "affectsGlobalScope": false + }, + "./src/semanticTokens.ts": { + "version": "a901fc2df32cf18236f39c65d255104b672fcf9d75e86dcc6dfbe387319abfd1", + "signature": "ea1f89cd36bcf7feee6feffc5fc47169185aa64e141ca55f67bee26b7a27009a", + "affectsGlobalScope": false + }, + "./node_modules/@flatten-js/interval-tree/index.d.ts": { + "version": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59", + "signature": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/common.d.ts": { + "version": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc", + "signature": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/array.d.ts": { + "version": "438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2", + "signature": "438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/collection.d.ts": { + "version": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8", + "signature": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/date.d.ts": { + "version": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42", + "signature": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/function.d.ts": { + "version": "c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe", + "signature": "c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/lang.d.ts": { + "version": "509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32", + "signature": "509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/math.d.ts": { + "version": "9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb", + "signature": "9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/number.d.ts": { + "version": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a", + "signature": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/object.d.ts": { + "version": "c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793", + "signature": "c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/seq.d.ts": { + "version": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd", + "signature": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/string.d.ts": { + "version": "4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a", + "signature": "4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/util.d.ts": { + "version": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5", + "signature": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/index.d.ts": { + "version": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8", + "signature": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8", + "affectsGlobalScope": true + }, + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts": { + "version": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538", + "signature": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/typings/thenable.d.ts": { + "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", + "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/globals.d.ts": { + "version": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476", + "signature": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/async_hooks.d.ts": { + "version": "7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641", + "signature": "7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/buffer.d.ts": { + "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/child_process.d.ts": { + "version": "89a3409a743c2a408d02bd68255a61d8416225b76c2c66d8e2e74dad3e00bc5d", + "signature": "89a3409a743c2a408d02bd68255a61d8416225b76c2c66d8e2e74dad3e00bc5d", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/cluster.d.ts": { + "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/console.d.ts": { + "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/constants.d.ts": { + "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/crypto.d.ts": { + "version": "64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d", + "signature": "64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/dgram.d.ts": { + "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/dns.d.ts": { + "version": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "signature": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/domain.d.ts": { + "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/events.d.ts": { + "version": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "signature": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/fs.d.ts": { + "version": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "signature": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/fs/promises.d.ts": { + "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/http.d.ts": { + "version": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "signature": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/http2.d.ts": { + "version": "4c260129d649d69f0608cd123e7016e61364b553a5ca2de9b66b0398594959cf", + "signature": "4c260129d649d69f0608cd123e7016e61364b553a5ca2de9b66b0398594959cf", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/https.d.ts": { + "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/inspector.d.ts": { + "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/module.d.ts": { + "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/net.d.ts": { + "version": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "signature": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/os.d.ts": { + "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/path.d.ts": { + "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/perf_hooks.d.ts": { + "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/process.d.ts": { + "version": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "signature": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/punycode.d.ts": { + "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/querystring.d.ts": { + "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/readline.d.ts": { + "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/repl.d.ts": { + "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/stream.d.ts": { + "version": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "signature": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/string_decoder.d.ts": { + "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/timers.d.ts": { + "version": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "signature": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/tls.d.ts": { + "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/trace_events.d.ts": { + "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/tty.d.ts": { + "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/url.d.ts": { + "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/util.d.ts": { + "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/v8.d.ts": { + "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/vm.d.ts": { + "version": "66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff", + "signature": "66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/worker_threads.d.ts": { + "version": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "signature": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/zlib.d.ts": { + "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/ts3.4/base.d.ts": { + "version": "d44028ae0127eb3e9fcfa5f55a8b81d64775ce15aca1020fe25c511bbb055834", + "signature": "d44028ae0127eb3e9fcfa5f55a8b81d64775ce15aca1020fe25c511bbb055834", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/globals.global.d.ts": { + "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/wasi.d.ts": { + "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/ts3.6/base.d.ts": { + "version": "ad1ae5ae98eceb9af99061e83e867b9897d267aebc8f3b938c9424deabadf4bb", + "signature": "ad1ae5ae98eceb9af99061e83e867b9897d267aebc8f3b938c9424deabadf4bb", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/assert.d.ts": { + "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/base.d.ts": { + "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/index.d.ts": { + "version": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/node/files.d.ts": { + "version": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5", + "signature": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": { + "version": "ddccf0a48338cac642e93bfdb563494dad6e05b70ef0e6e3605a454db88ca57e", + "signature": "ddccf0a48338cac642e93bfdb563494dad6e05b70ef0e6e3605a454db88ca57e", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/node.d.ts": { + "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", + "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": { + "version": "d789022bf705385490fe89811bc7850225c207f37dd706ada2509eb1d8f31f12", + "signature": "d789022bf705385490fe89811bc7850225c207f37dd706ada2509eb1d8f31f12", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/node.d.ts": { + "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", + "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/node/main.d.ts": { + "version": "cf1532b11d5ec78f63dc4d0c985353b281b4a09e91d35f63fb9aba42e36674ab", + "signature": "cf1532b11d5ec78f63dc4d0c985353b281b4a09e91d35f63fb9aba42e36674ab", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/node.d.ts": { + "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", + "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", + "affectsGlobalScope": false + }, + "./node_modules/yaml/types.d.ts": { + "version": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24", + "signature": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24", + "affectsGlobalScope": false + }, + "./node_modules/yaml/util.d.ts": { + "version": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d", + "signature": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d", + "affectsGlobalScope": false + }, + "./node_modules/yaml/parse-cst.d.ts": { + "version": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd", + "signature": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd", + "affectsGlobalScope": false + }, + "./node_modules/yaml/index.d.ts": { + "version": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", + "signature": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", + "affectsGlobalScope": false + }, + "./src/server.ts": { + "version": "2aa8d08dfc2a3e19b74589f4dcdc507cf7d8bca73b4e0df25d317f01b3bda2c0", + "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", + "affectsGlobalScope": false + }, + "../node_modules/@types/json-schema/index.d.ts": { + "version": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", + "signature": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", + "affectsGlobalScope": false + }, + "../node_modules/@types/vscode/index.d.ts": { + "version": "0d2ae25abaa1163188d256f0c438a274459099c30c44aa3be144c9c1232f4081", + "signature": "0d2ae25abaa1163188d256f0c438a274459099c30c44aa3be144c9c1232f4081", + "affectsGlobalScope": true + } + }, + "options": { + "composite": true, + "target": 6, + "lib": [ + "lib.es2019.d.ts" + ], + "module": 1, + "moduleResolution": 2, + "outDir": "./out", + "rootDir": "./src", + "sourceMap": true, + "strict": true, + "watch": true, + "configFilePath": "./tsconfig.json" + }, + "referencedMap": { + "../node_modules/@types/node/assert.d.ts": [ + "../node_modules/@types/node/assert.d.ts" + ], + "../node_modules/@types/node/async_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts" + ], + "../node_modules/@types/node/base.d.ts": [ + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/ts3.6/base.d.ts" + ], + "../node_modules/@types/node/buffer.d.ts": [ + "../node_modules/@types/node/buffer.d.ts" + ], + "../node_modules/@types/node/child_process.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/cluster.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts" + ], + "../node_modules/@types/node/console.d.ts": [ + "../node_modules/@types/node/util.d.ts" + ], + "../node_modules/@types/node/constants.d.ts": [ + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/os.d.ts" + ], + "../node_modules/@types/node/crypto.d.ts": [ + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/dgram.d.ts": [ + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts" + ], + "../node_modules/@types/node/dns.d.ts": [ + "../node_modules/@types/node/dns.d.ts" + ], + "../node_modules/@types/node/domain.d.ts": [ + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts" + ], + "../node_modules/@types/node/events.d.ts": [ + "../node_modules/@types/node/events.d.ts" + ], + "../node_modules/@types/node/fs.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/fs/promises.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts" + ], + "../node_modules/@types/node/http.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/http2.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/https.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/index.d.ts": [ + "../node_modules/@types/node/base.d.ts" + ], + "../node_modules/@types/node/inspector.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/inspector.d.ts" + ], + "../node_modules/@types/node/module.d.ts": [ + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/net.d.ts": [ + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/os.d.ts": [ + "../node_modules/@types/node/os.d.ts" + ], + "../node_modules/@types/node/path.d.ts": [ + "../node_modules/@types/node/path.d.ts" + ], + "../node_modules/@types/node/perf_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts" + ], + "../node_modules/@types/node/process.d.ts": [ + "../node_modules/@types/node/tty.d.ts" + ], + "../node_modules/@types/node/punycode.d.ts": [ + "../node_modules/@types/node/punycode.d.ts" + ], + "../node_modules/@types/node/querystring.d.ts": [ + "../node_modules/@types/node/querystring.d.ts" + ], + "../node_modules/@types/node/readline.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/readline.d.ts" + ], + "../node_modules/@types/node/repl.d.ts": [ + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/vm.d.ts" + ], + "../node_modules/@types/node/stream.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/string_decoder.d.ts": [ + "../node_modules/@types/node/string_decoder.d.ts" + ], + "../node_modules/@types/node/timers.d.ts": [ + "../node_modules/@types/node/timers.d.ts" + ], + "../node_modules/@types/node/tls.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tls.d.ts" + ], + "../node_modules/@types/node/trace_events.d.ts": [ + "../node_modules/@types/node/trace_events.d.ts" + ], + "../node_modules/@types/node/ts3.4/base.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/buffer.d.ts", + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/console.d.ts", + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/globals.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/@types/node/process.d.ts", + "../node_modules/@types/node/punycode.d.ts", + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/string_decoder.d.ts", + "../node_modules/@types/node/timers.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/trace_events.d.ts", + "../node_modules/@types/node/tty.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/v8.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "../node_modules/@types/node/zlib.d.ts" + ], + "../node_modules/@types/node/ts3.6/base.d.ts": [ + "../node_modules/@types/node/globals.global.d.ts", + "../node_modules/@types/node/ts3.4/base.d.ts", + "../node_modules/@types/node/wasi.d.ts" + ], + "../node_modules/@types/node/tty.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tty.d.ts" + ], + "../node_modules/@types/node/url.d.ts": [ + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/util.d.ts": [ + "../node_modules/@types/node/util.d.ts" + ], + "../node_modules/@types/node/v8.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/v8.d.ts" + ], + "../node_modules/@types/node/vm.d.ts": [ + "../node_modules/@types/node/vm.d.ts" + ], + "../node_modules/@types/node/wasi.d.ts": [ + "../node_modules/@types/node/wasi.d.ts" + ], + "../node_modules/@types/node/worker_threads.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/worker_threads.d.ts" + ], + "../node_modules/@types/node/zlib.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/zlib.d.ts" + ], + "./node_modules/@types/lodash/common/array.d.ts": [ + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/collection.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/common.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/date.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/function.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/lang.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/math.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/number.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/object.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/seq.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/string.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/util.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/index.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-jsonrpc/typings/thenable.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/index.d.ts", + "../node_modules/@types/node/net.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts" + ], + "./node_modules/vscode-jsonrpc/node.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/node/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/vscode-jsonrpc/node.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/node.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/api.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/progress.d.ts", + "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/configuration.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/moniker.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/progress.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/server.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts", + "./node_modules/vscode-languageserver/lib/common/configuration.d.ts", + "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts", + "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts", + "./node_modules/vscode-languageserver/lib/common/moniker.d.ts", + "./node_modules/vscode-languageserver/lib/common/progress.d.ts", + "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts", + "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts", + "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/node/main.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/vscode-languageserver-protocol/node.d.ts", + "./node_modules/vscode-languageserver/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts", + "./node_modules/vscode-languageserver/lib/node/files.d.ts", + "./node_modules/vscode-languageserver/typings/thenable.d.ts" + ], + "./node_modules/vscode-languageserver/node.d.ts": [ + "./node_modules/vscode-languageserver/lib/node/main.d.ts" + ], + "./node_modules/yaml/index.d.ts": [ + "./node_modules/yaml/parse-cst.d.ts", + "./node_modules/yaml/types.d.ts", + "./node_modules/yaml/util.d.ts" + ], + "./node_modules/yaml/parse-cst.d.ts": [ + "./node_modules/yaml/util.d.ts" + ], + "./node_modules/yaml/types.d.ts": [ + "./node_modules/yaml/index.d.ts", + "./node_modules/yaml/parse-cst.d.ts", + "./node_modules/yaml/util.d.ts" + ], + "./node_modules/yaml/util.d.ts": [ + "./node_modules/yaml/index.d.ts", + "./node_modules/yaml/parse-cst.d.ts", + "./node_modules/yaml/types.d.ts" + ], + "./src/semanticTokens.ts": [ + "./node_modules/vscode-languageserver/lib/common/api.d.ts" + ], + "./src/server.ts": [ + "./node_modules/@flatten-js/interval-tree/index.d.ts", + "./node_modules/@types/lodash/index.d.ts", + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", + "./node_modules/vscode-languageserver/node.d.ts", + "./node_modules/yaml/index.d.ts" + ] + }, + "exportedModulesMap": { + "../node_modules/@types/node/assert.d.ts": [ + "../node_modules/@types/node/assert.d.ts" + ], + "../node_modules/@types/node/async_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts" + ], + "../node_modules/@types/node/base.d.ts": [ + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/ts3.6/base.d.ts" + ], + "../node_modules/@types/node/buffer.d.ts": [ + "../node_modules/@types/node/buffer.d.ts" + ], + "../node_modules/@types/node/child_process.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/cluster.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts" + ], + "../node_modules/@types/node/console.d.ts": [ + "../node_modules/@types/node/util.d.ts" + ], + "../node_modules/@types/node/constants.d.ts": [ + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/os.d.ts" + ], + "../node_modules/@types/node/crypto.d.ts": [ + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/dgram.d.ts": [ + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts" + ], + "../node_modules/@types/node/dns.d.ts": [ + "../node_modules/@types/node/dns.d.ts" + ], + "../node_modules/@types/node/domain.d.ts": [ + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts" + ], + "../node_modules/@types/node/events.d.ts": [ + "../node_modules/@types/node/events.d.ts" + ], + "../node_modules/@types/node/fs.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/fs/promises.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts" + ], + "../node_modules/@types/node/http.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/http2.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/https.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/index.d.ts": [ + "../node_modules/@types/node/base.d.ts" + ], + "../node_modules/@types/node/inspector.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/inspector.d.ts" + ], + "../node_modules/@types/node/module.d.ts": [ + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/net.d.ts": [ + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/os.d.ts": [ + "../node_modules/@types/node/os.d.ts" + ], + "../node_modules/@types/node/path.d.ts": [ + "../node_modules/@types/node/path.d.ts" + ], + "../node_modules/@types/node/perf_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts" + ], + "../node_modules/@types/node/process.d.ts": [ + "../node_modules/@types/node/tty.d.ts" + ], + "../node_modules/@types/node/punycode.d.ts": [ + "../node_modules/@types/node/punycode.d.ts" + ], + "../node_modules/@types/node/querystring.d.ts": [ + "../node_modules/@types/node/querystring.d.ts" + ], + "../node_modules/@types/node/readline.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/readline.d.ts" + ], + "../node_modules/@types/node/repl.d.ts": [ + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/vm.d.ts" + ], + "../node_modules/@types/node/stream.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/string_decoder.d.ts": [ + "../node_modules/@types/node/string_decoder.d.ts" + ], + "../node_modules/@types/node/timers.d.ts": [ + "../node_modules/@types/node/timers.d.ts" + ], + "../node_modules/@types/node/tls.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tls.d.ts" + ], + "../node_modules/@types/node/trace_events.d.ts": [ + "../node_modules/@types/node/trace_events.d.ts" + ], + "../node_modules/@types/node/ts3.4/base.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/buffer.d.ts", + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/console.d.ts", + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/globals.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/@types/node/process.d.ts", + "../node_modules/@types/node/punycode.d.ts", + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/string_decoder.d.ts", + "../node_modules/@types/node/timers.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/trace_events.d.ts", + "../node_modules/@types/node/tty.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/v8.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "../node_modules/@types/node/zlib.d.ts" + ], + "../node_modules/@types/node/ts3.6/base.d.ts": [ + "../node_modules/@types/node/globals.global.d.ts", + "../node_modules/@types/node/ts3.4/base.d.ts", + "../node_modules/@types/node/wasi.d.ts" + ], + "../node_modules/@types/node/tty.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tty.d.ts" + ], + "../node_modules/@types/node/url.d.ts": [ + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/util.d.ts": [ + "../node_modules/@types/node/util.d.ts" + ], + "../node_modules/@types/node/v8.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/v8.d.ts" + ], + "../node_modules/@types/node/vm.d.ts": [ + "../node_modules/@types/node/vm.d.ts" + ], + "../node_modules/@types/node/wasi.d.ts": [ + "../node_modules/@types/node/wasi.d.ts" + ], + "../node_modules/@types/node/worker_threads.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/worker_threads.d.ts" + ], + "../node_modules/@types/node/zlib.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/zlib.d.ts" + ], + "./node_modules/@types/lodash/common/array.d.ts": [ + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/collection.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/common.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/date.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/function.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/lang.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/math.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/number.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/object.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/seq.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/string.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/common/util.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/index.d.ts" + ], + "./node_modules/@types/lodash/index.d.ts": [ + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-jsonrpc/typings/thenable.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts" + ], + "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/index.d.ts", + "../node_modules/@types/node/net.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts" + ], + "./node_modules/vscode-jsonrpc/node.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/node/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": [ + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/vscode-jsonrpc/node.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts" + ], + "./node_modules/vscode-languageserver-protocol/node.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/api.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/progress.d.ts", + "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/configuration.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/moniker.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/progress.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/server.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts", + "./node_modules/vscode-languageserver/lib/common/configuration.d.ts", + "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts", + "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts", + "./node_modules/vscode-languageserver/lib/common/moniker.d.ts", + "./node_modules/vscode-languageserver/lib/common/progress.d.ts", + "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts", + "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts", + "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts": [ + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts" + ], + "./node_modules/vscode-languageserver/lib/node/main.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/vscode-languageserver-protocol/node.d.ts", + "./node_modules/vscode-languageserver/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts", + "./node_modules/vscode-languageserver/lib/node/files.d.ts", + "./node_modules/vscode-languageserver/typings/thenable.d.ts" + ], + "./node_modules/vscode-languageserver/node.d.ts": [ + "./node_modules/vscode-languageserver/lib/node/main.d.ts" + ], + "./node_modules/yaml/index.d.ts": [ + "./node_modules/yaml/parse-cst.d.ts", + "./node_modules/yaml/types.d.ts", + "./node_modules/yaml/util.d.ts" + ], + "./node_modules/yaml/parse-cst.d.ts": [ + "./node_modules/yaml/util.d.ts" + ], + "./node_modules/yaml/types.d.ts": [ + "./node_modules/yaml/index.d.ts", + "./node_modules/yaml/parse-cst.d.ts", + "./node_modules/yaml/util.d.ts" + ], + "./node_modules/yaml/util.d.ts": [ + "./node_modules/yaml/index.d.ts", + "./node_modules/yaml/parse-cst.d.ts", + "./node_modules/yaml/types.d.ts" + ], + "./src/semanticTokens.ts": [ + "./node_modules/vscode-languageserver/lib/common/api.d.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + "../node_modules/@types/json-schema/index.d.ts", + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/buffer.d.ts", + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/console.d.ts", + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/globals.d.ts", + "../node_modules/@types/node/globals.global.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/index.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/@types/node/process.d.ts", + "../node_modules/@types/node/punycode.d.ts", + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/string_decoder.d.ts", + "../node_modules/@types/node/timers.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/trace_events.d.ts", + "../node_modules/@types/node/ts3.4/base.d.ts", + "../node_modules/@types/node/ts3.6/base.d.ts", + "../node_modules/@types/node/tty.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/v8.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/wasi.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "../node_modules/@types/node/zlib.d.ts", + "../node_modules/@types/vscode/index.d.ts", + "../node_modules/typescript/lib/lib.es2015.collection.d.ts", + "../node_modules/typescript/lib/lib.es2015.core.d.ts", + "../node_modules/typescript/lib/lib.es2015.d.ts", + "../node_modules/typescript/lib/lib.es2015.generator.d.ts", + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts", + "../node_modules/typescript/lib/lib.es2015.promise.d.ts", + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts", + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts", + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts", + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts", + "../node_modules/typescript/lib/lib.es2016.d.ts", + "../node_modules/typescript/lib/lib.es2017.d.ts", + "../node_modules/typescript/lib/lib.es2017.intl.d.ts", + "../node_modules/typescript/lib/lib.es2017.object.d.ts", + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", + "../node_modules/typescript/lib/lib.es2017.string.d.ts", + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", + "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts", + "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts", + "../node_modules/typescript/lib/lib.es2018.d.ts", + "../node_modules/typescript/lib/lib.es2018.intl.d.ts", + "../node_modules/typescript/lib/lib.es2018.promise.d.ts", + "../node_modules/typescript/lib/lib.es2018.regexp.d.ts", + "../node_modules/typescript/lib/lib.es2019.array.d.ts", + "../node_modules/typescript/lib/lib.es2019.d.ts", + "../node_modules/typescript/lib/lib.es2019.object.d.ts", + "../node_modules/typescript/lib/lib.es2019.string.d.ts", + "../node_modules/typescript/lib/lib.es2019.symbol.d.ts", + "../node_modules/typescript/lib/lib.es2020.bigint.d.ts", + "../node_modules/typescript/lib/lib.es5.d.ts", + "../node_modules/typescript/lib/lib.esnext.intl.d.ts", + "./node_modules/@flatten-js/interval-tree/index.d.ts", + "./node_modules/@types/lodash/common/array.d.ts", + "./node_modules/@types/lodash/common/collection.d.ts", + "./node_modules/@types/lodash/common/common.d.ts", + "./node_modules/@types/lodash/common/date.d.ts", + "./node_modules/@types/lodash/common/function.d.ts", + "./node_modules/@types/lodash/common/lang.d.ts", + "./node_modules/@types/lodash/common/math.d.ts", + "./node_modules/@types/lodash/common/number.d.ts", + "./node_modules/@types/lodash/common/object.d.ts", + "./node_modules/@types/lodash/common/seq.d.ts", + "./node_modules/@types/lodash/common/string.d.ts", + "./node_modules/@types/lodash/common/util.d.ts", + "./node_modules/@types/lodash/index.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts", + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts", + "./node_modules/vscode-jsonrpc/lib/node/main.d.ts", + "./node_modules/vscode-jsonrpc/node.d.ts", + "./node_modules/vscode-jsonrpc/typings/thenable.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts", + "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts", + "./node_modules/vscode-languageserver-protocol/node.d.ts", + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts", + "./node_modules/vscode-languageserver/lib/common/api.d.ts", + "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts", + "./node_modules/vscode-languageserver/lib/common/configuration.d.ts", + "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts", + "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts", + "./node_modules/vscode-languageserver/lib/common/moniker.d.ts", + "./node_modules/vscode-languageserver/lib/common/progress.d.ts", + "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts", + "./node_modules/vscode-languageserver/lib/common/server.d.ts", + "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts", + "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts", + "./node_modules/vscode-languageserver/lib/node/files.d.ts", + "./node_modules/vscode-languageserver/lib/node/main.d.ts", + "./node_modules/vscode-languageserver/node.d.ts", + "./node_modules/vscode-languageserver/typings/thenable.d.ts", + "./node_modules/yaml/index.d.ts", + "./node_modules/yaml/parse-cst.d.ts", + "./node_modules/yaml/types.d.ts", + "./node_modules/yaml/util.d.ts", + "./src/semanticTokens.ts", + "./src/server.ts" + ] + }, + "version": "4.1.5" +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index b098b1b48..fc94fc522 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,7 @@ { "compilerOptions": { - "target": "ES2020", - "lib": [ - "ES2020" - ], + "target": "ES2019", + "lib": ["ES2019"], "module": "CommonJS", "moduleResolution": "Node", "outDir": "out", @@ -11,8 +9,7 @@ "sourceMap": true, "strict": true }, - "exclude": [ - "node_modules", - ".vscode-test" - ] + "include": ["src"], + "exclude": ["node_modules", ".vscode-test"], + "references": [{ "path": "./client" }, { "path": "./server" }] } From 8fac933046f2f39f0f87a3a78a5a881c05f4ef4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sun, 28 Feb 2021 20:57:35 +0100 Subject: [PATCH 015/558] Reading module DOCUMENTATION strings --- .vscode/launch.json | 9 + server/src/docsExplorer.ts | 119 +++++++++ server/src/docsLibrary.ts | 15 ++ server/tsconfig.tsbuildinfo | 473 +++++++++++++++++++----------------- 4 files changed, 388 insertions(+), 228 deletions(-) create mode 100644 server/src/docsExplorer.ts create mode 100644 server/src/docsLibrary.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index b9ab6d87e..af223a868 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,6 +5,15 @@ { "version": "0.2.0", "configurations": [ + { + "name": "Launch Program", + "type": "node", + "request": "launch", + "skipFiles": ["/**"], + "program": "${workspaceFolder}/server/src/docsExplorer.ts", + "outFiles": ["${workspaceFolder}/server/out/**/*.js"], + "preLaunchTask": "npm: watch" + }, { "name": "Launch Extension", "type": "extensionHost", diff --git a/server/src/docsExplorer.ts b/server/src/docsExplorer.ts new file mode 100644 index 000000000..7a60c55b1 --- /dev/null +++ b/server/src/docsExplorer.ts @@ -0,0 +1,119 @@ +import { promises as fs } from 'fs'; +import * as path from 'path'; +import { performance } from 'perf_hooks'; +import { parseDocument, Document } from 'yaml'; +import { YAMLError } from 'yaml/util'; + +const ansibleLibPath = '/usr/local/lib/python3.6/dist-packages/ansible'; + +const modulesPath = path.join(ansibleLibPath, 'modules'); + +const documentationMap = new Map(); +const yamlDocMap = new Map(); + +// getFiles(modulesPath).then(async (files) => { +// const start = performance.now(); +// await Promise.all( +// files.map(async (file) => { +// const contents = await fs.readFile(file, { encoding: 'utf8' }); +// const m = docsRegex.exec(contents); +// if (m && m.groups && m.groups.doc) { +// documentationMap.set(file, m.groups.doc); +// const document = parseDocument(m.groups.doc); +// const moduleName = document.toJSON().module; +// if (yamlDocMap.has(moduleName)) { +// console.log(`Duplicate module ${moduleName} in ${file}`); +// } +// yamlDocMap.set(moduleName, document); +// if ( +// document.errors.length > 0 && +// document.errors.some((e) => e.name === 'YAMLSyntaxError') +// ) { +// // There's about 20 modules (out of ~3700) that contain YAML syntax errors +// // Still, document.toJSON() works on them +// // document.toJSON(); +// // console.log(`Errors in ${file}:\n${document.errors}`); +// } +// } +// }) +// ); +// const stop = performance.now(); +// console.log(`Took ${stop - start}ms`); +// }); + +export async function getFiles(dir: string): Promise> { + const dirents = await fs.readdir(dir, { withFileTypes: true }); + const files = await Promise.all( + dirents + .filter((dirent) => { + return ( + dirent.isDirectory() || + (dirent.isFile() && + dirent.name.endsWith('.py') && + !dirent.name.startsWith('_')) // legacy files and __init__.py + ); + }) + .map((dirent) => { + const res = path.resolve(dir, dirent.name); + return dirent.isDirectory() ? getFiles(res) : [res]; + }) + ); + return files.flat(); +} + +export class DocsParser { + private static docsRegex = /\s*DOCUMENTATION\s*=\s*r?('''|""")(?:\n---)?\n?(?.*?)\1/s; + + public static async parseDirectory(dir: string): Promise { + const files = await DocsParser._getFiles(dir); + return await Promise.all( + files.map(async (file) => { + const contents = await fs.readFile(file, { encoding: 'utf8' }); + const m = DocsParser.docsRegex.exec(contents); + if (m && m.groups && m.groups.doc) { + const document = parseDocument(m.groups.doc); + // There's about 20 modules (out of ~3300) in Ansible 2.9 libs that contain YAML syntax errors + // Still, document.toJSON() works on them + const contents = document.toJSON(); + return { + source: file, + module: contents.module as string, + contents: contents, + errors: document.errors, + }; + } + }) + ).then((results) => { + return results.filter( + (i: IDocumentation | null | undefined): i is IDocumentation => !!i + ); + }); + } + + private static async _getFiles(dir: string): Promise> { + const dirents = await fs.readdir(dir, { withFileTypes: true }); + const files = await Promise.all( + dirents + .filter((dirent) => { + return ( + dirent.isDirectory() || + (dirent.isFile() && + dirent.name.endsWith('.py') && + !dirent.name.startsWith('_')) // legacy files and __init__.py + ); + }) + .map((dirent) => { + const res = path.resolve(dir, dirent.name); + return dirent.isDirectory() ? getFiles(res) : [res]; + }) + ); + return files.flat(); + } +} + +export interface IDocumentation { + source: string; + module: string; + contents: any; + errors: YAMLError[]; +} diff --git a/server/src/docsLibrary.ts b/server/src/docsLibrary.ts new file mode 100644 index 000000000..3cd2bf08e --- /dev/null +++ b/server/src/docsLibrary.ts @@ -0,0 +1,15 @@ +import { DocsParser, IDocumentation } from './docsExplorer'; +import * as path from 'path'; +export class DocsLibrary { + builtInModules = new Map(); + + public initialize(): void { + const ansibleLibPath = '/usr/local/lib/python3.6/dist-packages/ansible'; + const modulesPath = path.join(ansibleLibPath, 'modules'); + DocsParser.parseDirectory(modulesPath).then((docs) => { + docs.forEach((doc) => { + this.builtInModules.set(doc.module, doc); + }); + }); + } +} diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo index 3882f1ade..5ff6eb283 100644 --- a/server/tsconfig.tsbuildinfo +++ b/server/tsconfig.tsbuildinfo @@ -161,219 +161,34 @@ "signature": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd", "affectsGlobalScope": true }, - "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": { - "version": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", - "signature": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/typings/thenable.d.ts": { - "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", - "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", - "affectsGlobalScope": true - }, - "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts": { - "version": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f", - "signature": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts": { - "version": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1", - "signature": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": { - "version": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383", - "signature": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": { - "version": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576", - "signature": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": { - "version": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e", - "signature": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": { - "version": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6", - "signature": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": { - "version": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8", - "signature": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": { - "version": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636", - "signature": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": { - "version": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91", - "signature": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": { - "version": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0", - "signature": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": { - "version": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656", - "signature": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": { - "version": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc", - "signature": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": { - "version": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d", - "signature": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": { - "version": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90", - "signature": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": { - "version": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec", - "signature": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": { - "version": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676", - "signature": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": { - "version": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c", - "signature": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": { - "version": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1", - "signature": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": { - "version": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2", - "signature": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": { - "version": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656", - "signature": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": { - "version": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6", - "signature": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": { - "version": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0", - "signature": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": { - "version": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0", - "signature": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": { - "version": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc", - "signature": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": { - "version": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323", - "signature": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": { - "version": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533", - "signature": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": { - "version": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd", - "signature": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": { - "version": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7", - "signature": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": { - "version": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184", - "signature": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/progress.d.ts": { - "version": "f1f23acd4a8193453749f69d4432f5f122d6d572b793a8b630dd12fe80b0c3d3", - "signature": "f1f23acd4a8193453749f69d4432f5f122d6d572b793a8b630dd12fe80b0c3d3", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/configuration.d.ts": { - "version": "7662d6994d28c9ebbe61b88cc35c3d705804351eedbf363df30ea9fe8c4961dc", - "signature": "7662d6994d28c9ebbe61b88cc35c3d705804351eedbf363df30ea9fe8c4961dc", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts": { - "version": "1fb68106bddae35448e5279095461a4b54c4bbb42787cd629f70924b17e9a11e", - "signature": "1fb68106bddae35448e5279095461a4b54c4bbb42787cd629f70924b17e9a11e", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts": { - "version": "9acd551d1b5fb8a4ea4bfd65e8fcc8beca89a4b98fc1a9321924308256383565", - "signature": "9acd551d1b5fb8a4ea4bfd65e8fcc8beca89a4b98fc1a9321924308256383565", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts": { - "version": "a7024322dc86e43685c5564b438decad7557de62baae80b062fee78752c3b2f4", - "signature": "a7024322dc86e43685c5564b438decad7557de62baae80b062fee78752c3b2f4", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts": { - "version": "351bbf43d585484825ee6c4b4805aac137ffc8e8a3b9812af99945a202db7c02", - "signature": "351bbf43d585484825ee6c4b4805aac137ffc8e8a3b9812af99945a202db7c02", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts": { - "version": "a0116a0ba37624acef486fba35bd5530c8c25415798c8908a35e5f72913d2365", - "signature": "a0116a0ba37624acef486fba35bd5530c8c25415798c8908a35e5f72913d2365", + "./node_modules/yaml/types.d.ts": { + "version": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24", + "signature": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24", "affectsGlobalScope": false }, - "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts": { - "version": "3bd2fc1b877ba4f9c91fca3231333471f3ff0edf85e146eaafdff2bc42c9a44c", - "signature": "3bd2fc1b877ba4f9c91fca3231333471f3ff0edf85e146eaafdff2bc42c9a44c", + "./node_modules/yaml/util.d.ts": { + "version": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d", + "signature": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d", "affectsGlobalScope": false }, - "./node_modules/vscode-languageserver/lib/common/moniker.d.ts": { - "version": "387a6dc0d57a9f602d0d7f2f4ba88b65540c1c19d84088157610ca0176793a03", - "signature": "387a6dc0d57a9f602d0d7f2f4ba88b65540c1c19d84088157610ca0176793a03", + "./node_modules/yaml/parse-cst.d.ts": { + "version": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd", + "signature": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd", "affectsGlobalScope": false }, - "./node_modules/vscode-languageserver/lib/common/server.d.ts": { - "version": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617", - "signature": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617", + "./node_modules/yaml/index.d.ts": { + "version": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", + "signature": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", "affectsGlobalScope": false }, - "./node_modules/vscode-languageserver/lib/common/api.d.ts": { - "version": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081", - "signature": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081", + "./src/docsExplorer.ts": { + "version": "ce54af4c0793686bf177a794913d18fb1b3f598a9baa15b8eced614cd1bebd83", + "signature": "0d99e2550f3f6bdd58971325208de6289fecbd22016031d0f4cba641313f6244", "affectsGlobalScope": false }, - "./src/semanticTokens.ts": { - "version": "a901fc2df32cf18236f39c65d255104b672fcf9d75e86dcc6dfbe387319abfd1", - "signature": "ea1f89cd36bcf7feee6feffc5fc47169185aa64e141ca55f67bee26b7a27009a", + "./src/docsLibrary.ts": { + "version": "44a2a2abd60888362415df8902890f7386e21294320d5a6dff458ffe1b282d44", + "signature": "e6d405f45d6517880f68570e65e65b7d7cc880199f117a6ff04e44195b9bb6e4", "affectsGlobalScope": false }, "./node_modules/@flatten-js/interval-tree/index.d.ts": { @@ -691,6 +506,211 @@ "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", "affectsGlobalScope": false }, + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": { + "version": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", + "signature": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/typings/thenable.d.ts": { + "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", + "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", + "affectsGlobalScope": true + }, + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts": { + "version": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f", + "signature": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts": { + "version": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1", + "signature": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": { + "version": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383", + "signature": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": { + "version": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576", + "signature": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": { + "version": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e", + "signature": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": { + "version": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6", + "signature": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": { + "version": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8", + "signature": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": { + "version": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636", + "signature": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": { + "version": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91", + "signature": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": { + "version": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0", + "signature": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": { + "version": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656", + "signature": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": { + "version": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc", + "signature": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": { + "version": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d", + "signature": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": { + "version": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90", + "signature": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": { + "version": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec", + "signature": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": { + "version": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676", + "signature": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": { + "version": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c", + "signature": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": { + "version": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1", + "signature": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": { + "version": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2", + "signature": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": { + "version": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656", + "signature": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": { + "version": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6", + "signature": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": { + "version": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0", + "signature": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": { + "version": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0", + "signature": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": { + "version": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc", + "signature": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": { + "version": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323", + "signature": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": { + "version": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533", + "signature": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": { + "version": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd", + "signature": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": { + "version": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7", + "signature": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": { + "version": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184", + "signature": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/progress.d.ts": { + "version": "f1f23acd4a8193453749f69d4432f5f122d6d572b793a8b630dd12fe80b0c3d3", + "signature": "f1f23acd4a8193453749f69d4432f5f122d6d572b793a8b630dd12fe80b0c3d3", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/configuration.d.ts": { + "version": "7662d6994d28c9ebbe61b88cc35c3d705804351eedbf363df30ea9fe8c4961dc", + "signature": "7662d6994d28c9ebbe61b88cc35c3d705804351eedbf363df30ea9fe8c4961dc", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts": { + "version": "1fb68106bddae35448e5279095461a4b54c4bbb42787cd629f70924b17e9a11e", + "signature": "1fb68106bddae35448e5279095461a4b54c4bbb42787cd629f70924b17e9a11e", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts": { + "version": "9acd551d1b5fb8a4ea4bfd65e8fcc8beca89a4b98fc1a9321924308256383565", + "signature": "9acd551d1b5fb8a4ea4bfd65e8fcc8beca89a4b98fc1a9321924308256383565", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts": { + "version": "a7024322dc86e43685c5564b438decad7557de62baae80b062fee78752c3b2f4", + "signature": "a7024322dc86e43685c5564b438decad7557de62baae80b062fee78752c3b2f4", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts": { + "version": "351bbf43d585484825ee6c4b4805aac137ffc8e8a3b9812af99945a202db7c02", + "signature": "351bbf43d585484825ee6c4b4805aac137ffc8e8a3b9812af99945a202db7c02", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts": { + "version": "a0116a0ba37624acef486fba35bd5530c8c25415798c8908a35e5f72913d2365", + "signature": "a0116a0ba37624acef486fba35bd5530c8c25415798c8908a35e5f72913d2365", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts": { + "version": "3bd2fc1b877ba4f9c91fca3231333471f3ff0edf85e146eaafdff2bc42c9a44c", + "signature": "3bd2fc1b877ba4f9c91fca3231333471f3ff0edf85e146eaafdff2bc42c9a44c", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/moniker.d.ts": { + "version": "387a6dc0d57a9f602d0d7f2f4ba88b65540c1c19d84088157610ca0176793a03", + "signature": "387a6dc0d57a9f602d0d7f2f4ba88b65540c1c19d84088157610ca0176793a03", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/server.d.ts": { + "version": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617", + "signature": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617", + "affectsGlobalScope": false + }, "./node_modules/vscode-languageserver/lib/node/files.d.ts": { "version": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5", "signature": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5", @@ -716,6 +736,11 @@ "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", "affectsGlobalScope": false }, + "./node_modules/vscode-languageserver/lib/common/api.d.ts": { + "version": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081", + "signature": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081", + "affectsGlobalScope": false + }, "./node_modules/vscode-languageserver/lib/node/main.d.ts": { "version": "cf1532b11d5ec78f63dc4d0c985353b281b4a09e91d35f63fb9aba42e36674ab", "signature": "cf1532b11d5ec78f63dc4d0c985353b281b4a09e91d35f63fb9aba42e36674ab", @@ -726,26 +751,6 @@ "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", "affectsGlobalScope": false }, - "./node_modules/yaml/types.d.ts": { - "version": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24", - "signature": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24", - "affectsGlobalScope": false - }, - "./node_modules/yaml/util.d.ts": { - "version": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d", - "signature": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d", - "affectsGlobalScope": false - }, - "./node_modules/yaml/parse-cst.d.ts": { - "version": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd", - "signature": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd", - "affectsGlobalScope": false - }, - "./node_modules/yaml/index.d.ts": { - "version": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", - "signature": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", - "affectsGlobalScope": false - }, "./src/server.ts": { "version": "2aa8d08dfc2a3e19b74589f4dcdc507cf7d8bca73b4e0df25d317f01b3bda2c0", "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", @@ -1455,8 +1460,16 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts" ], - "./src/semanticTokens.ts": [ - "./node_modules/vscode-languageserver/lib/common/api.d.ts" + "./src/docsExplorer.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "./node_modules/yaml/index.d.ts", + "./node_modules/yaml/util.d.ts" + ], + "./src/docsLibrary.ts": [ + "../node_modules/@types/node/path.d.ts", + "./src/docsExplorer.ts" ], "./src/server.ts": [ "./node_modules/@flatten-js/interval-tree/index.d.ts", @@ -2144,8 +2157,11 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts" ], - "./src/semanticTokens.ts": [ - "./node_modules/vscode-languageserver/lib/common/api.d.ts" + "./src/docsExplorer.ts": [ + "./node_modules/yaml/util.d.ts" + ], + "./src/docsLibrary.ts": [ + "./src/docsExplorer.ts" ] }, "semanticDiagnosticsPerFile": [ @@ -2299,7 +2315,8 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts", "./node_modules/yaml/util.d.ts", - "./src/semanticTokens.ts", + "./src/docsExplorer.ts", + "./src/docsLibrary.ts", "./src/server.ts" ] }, From d89bd4d79b33e4c5a741ed7540dac7707ad98af2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sun, 28 Feb 2021 23:34:06 +0100 Subject: [PATCH 016/558] Stub for hover handling Cleaned up library parsing --- .vscode/launch.json | 2 +- server/src/docsExplorer.ts | 119 --------- server/src/docsLibrary.ts | 16 +- server/src/docsParser.ts | 61 +++++ server/src/hoverProvider.ts | 18 ++ server/src/server.ts | 10 + server/src/utils.ts | 45 ++++ server/tsconfig.tsbuildinfo | 500 +++++++++++++++++++----------------- 8 files changed, 412 insertions(+), 359 deletions(-) delete mode 100644 server/src/docsExplorer.ts create mode 100644 server/src/docsParser.ts create mode 100644 server/src/hoverProvider.ts create mode 100644 server/src/utils.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index af223a868..f3884cc17 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,7 +10,7 @@ "type": "node", "request": "launch", "skipFiles": ["/**"], - "program": "${workspaceFolder}/server/src/docsExplorer.ts", + "program": "${workspaceFolder}/server/src/docsLibrary.ts", "outFiles": ["${workspaceFolder}/server/out/**/*.js"], "preLaunchTask": "npm: watch" }, diff --git a/server/src/docsExplorer.ts b/server/src/docsExplorer.ts deleted file mode 100644 index 7a60c55b1..000000000 --- a/server/src/docsExplorer.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { promises as fs } from 'fs'; -import * as path from 'path'; -import { performance } from 'perf_hooks'; -import { parseDocument, Document } from 'yaml'; -import { YAMLError } from 'yaml/util'; - -const ansibleLibPath = '/usr/local/lib/python3.6/dist-packages/ansible'; - -const modulesPath = path.join(ansibleLibPath, 'modules'); - -const documentationMap = new Map(); -const yamlDocMap = new Map(); - -// getFiles(modulesPath).then(async (files) => { -// const start = performance.now(); -// await Promise.all( -// files.map(async (file) => { -// const contents = await fs.readFile(file, { encoding: 'utf8' }); -// const m = docsRegex.exec(contents); -// if (m && m.groups && m.groups.doc) { -// documentationMap.set(file, m.groups.doc); -// const document = parseDocument(m.groups.doc); -// const moduleName = document.toJSON().module; -// if (yamlDocMap.has(moduleName)) { -// console.log(`Duplicate module ${moduleName} in ${file}`); -// } -// yamlDocMap.set(moduleName, document); -// if ( -// document.errors.length > 0 && -// document.errors.some((e) => e.name === 'YAMLSyntaxError') -// ) { -// // There's about 20 modules (out of ~3700) that contain YAML syntax errors -// // Still, document.toJSON() works on them -// // document.toJSON(); -// // console.log(`Errors in ${file}:\n${document.errors}`); -// } -// } -// }) -// ); -// const stop = performance.now(); -// console.log(`Took ${stop - start}ms`); -// }); - -export async function getFiles(dir: string): Promise> { - const dirents = await fs.readdir(dir, { withFileTypes: true }); - const files = await Promise.all( - dirents - .filter((dirent) => { - return ( - dirent.isDirectory() || - (dirent.isFile() && - dirent.name.endsWith('.py') && - !dirent.name.startsWith('_')) // legacy files and __init__.py - ); - }) - .map((dirent) => { - const res = path.resolve(dir, dirent.name); - return dirent.isDirectory() ? getFiles(res) : [res]; - }) - ); - return files.flat(); -} - -export class DocsParser { - private static docsRegex = /\s*DOCUMENTATION\s*=\s*r?('''|""")(?:\n---)?\n?(?.*?)\1/s; - - public static async parseDirectory(dir: string): Promise { - const files = await DocsParser._getFiles(dir); - return await Promise.all( - files.map(async (file) => { - const contents = await fs.readFile(file, { encoding: 'utf8' }); - const m = DocsParser.docsRegex.exec(contents); - if (m && m.groups && m.groups.doc) { - const document = parseDocument(m.groups.doc); - // There's about 20 modules (out of ~3300) in Ansible 2.9 libs that contain YAML syntax errors - // Still, document.toJSON() works on them - const contents = document.toJSON(); - return { - source: file, - module: contents.module as string, - contents: contents, - errors: document.errors, - }; - } - }) - ).then((results) => { - return results.filter( - (i: IDocumentation | null | undefined): i is IDocumentation => !!i - ); - }); - } - - private static async _getFiles(dir: string): Promise> { - const dirents = await fs.readdir(dir, { withFileTypes: true }); - const files = await Promise.all( - dirents - .filter((dirent) => { - return ( - dirent.isDirectory() || - (dirent.isFile() && - dirent.name.endsWith('.py') && - !dirent.name.startsWith('_')) // legacy files and __init__.py - ); - }) - .map((dirent) => { - const res = path.resolve(dir, dirent.name); - return dirent.isDirectory() ? getFiles(res) : [res]; - }) - ); - return files.flat(); - } -} - -export interface IDocumentation { - source: string; - module: string; - contents: any; - errors: YAMLError[]; -} diff --git a/server/src/docsLibrary.ts b/server/src/docsLibrary.ts index 3cd2bf08e..b7e8c80f1 100644 --- a/server/src/docsLibrary.ts +++ b/server/src/docsLibrary.ts @@ -1,15 +1,19 @@ -import { DocsParser, IDocumentation } from './docsExplorer'; +import { DocsParser, IDocumentation } from './docsParser'; import * as path from 'path'; export class DocsLibrary { builtInModules = new Map(); - public initialize(): void { + public async initialize(): Promise { const ansibleLibPath = '/usr/local/lib/python3.6/dist-packages/ansible'; const modulesPath = path.join(ansibleLibPath, 'modules'); - DocsParser.parseDirectory(modulesPath).then((docs) => { - docs.forEach((doc) => { - this.builtInModules.set(doc.module, doc); - }); + const docs = await DocsParser.parseDirectory(modulesPath); + docs.forEach((doc) => { + this.builtInModules.set(doc.module, doc); }); } } + +const test = new DocsLibrary(); +test.initialize().then(() => { + console.log(test.builtInModules); +}); diff --git a/server/src/docsParser.ts b/server/src/docsParser.ts new file mode 100644 index 000000000..104187cb0 --- /dev/null +++ b/server/src/docsParser.ts @@ -0,0 +1,61 @@ +import { promises as fs } from 'fs'; +import * as path from 'path'; +import { parseDocument } from 'yaml'; +import { YAMLError } from 'yaml/util'; + +export class DocsParser { + private static docsRegex = /\s*DOCUMENTATION\s*=\s*r?('''|""")(?:\n---)?\n?(?.*?)\1/s; + + public static async parseDirectory(dir: string): Promise { + const files = await this._getFiles(dir); + return await Promise.all( + files.map(async (file) => { + const contents = await fs.readFile(file, { encoding: 'utf8' }); + const m = this.docsRegex.exec(contents); + if (m && m.groups && m.groups.doc) { + const document = parseDocument(m.groups.doc); + // There's about 20 modules (out of ~3200) in Ansible 2.9 libs that contain YAML syntax errors + // Still, document.toJSON() works on them + const contents = document.toJSON(); + return { + source: file, + module: contents.module as string, + contents: contents, + errors: document.errors, + }; + } + }) + ).then((results) => { + return results.filter( + (i: IDocumentation | null | undefined): i is IDocumentation => !!i + ); + }); + } + + private static async _getFiles(dir: string): Promise> { + const dirents = await fs.readdir(dir, { withFileTypes: true }); + const files = await Promise.all( + dirents + .filter((dirent) => { + return ( + dirent.isDirectory() || + (dirent.isFile() && + dirent.name.endsWith('.py') && + !dirent.name.startsWith('_')) // legacy files and __init__.py + ); + }) + .map((dirent) => { + const res = path.resolve(dir, dirent.name); + return dirent.isDirectory() ? this._getFiles(res) : [res]; + }) + ); + return files.flat(); + } +} + +export interface IDocumentation { + source: string; + module: string; + contents: any; + errors: YAMLError[]; +} diff --git a/server/src/hoverProvider.ts b/server/src/hoverProvider.ts new file mode 100644 index 000000000..098763d43 --- /dev/null +++ b/server/src/hoverProvider.ts @@ -0,0 +1,18 @@ +import { Hover } from 'vscode-languageserver'; +import { Position, TextDocument } from 'vscode-languageserver-textdocument'; +import { parseAllDocuments } from 'yaml'; +import { Scalar } from 'yaml/types'; +import { getNodeAt } from './utils'; + +export class AnsibleHoverProvider { + doHover(document: TextDocument, position: Position): Hover | null { + const yamlDocs = parseAllDocuments(document.getText()); + const node = getNodeAt(document, position, yamlDocs); + if (node && node instanceof Scalar) { + return { + contents: node.value, + }; + } + return null; + } +} diff --git a/server/src/server.ts b/server/src/server.ts index 66a69ef19..23d563014 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -16,6 +16,7 @@ import { TextDocumentSyncKind, } from 'vscode-languageserver/node'; import { parseAllDocuments } from 'yaml'; +import { AnsibleHoverProvider } from './hoverProvider'; // Create a connection for the server, using Node's IPC as a transport. // Also include all preview / proposed LSP features. @@ -48,6 +49,7 @@ connection.onInitialize((params: InitializeParams) => { const result: InitializeResult = { capabilities: { textDocumentSync: TextDocumentSyncKind.Incremental, + hoverProvider: true, // Tell the client that this server supports code completion. completionProvider: { resolveProvider: true, @@ -216,6 +218,14 @@ connection.onDidChangeWatchedFiles((_change) => { // Monitored files have change in VSCode connection.console.log('We received a file change event'); }); +const hoverProvider = new AnsibleHoverProvider(); +connection.onHover((params) => { + const document = documents.get(params.textDocument.uri); + if (document) { + return hoverProvider.doHover(document, params.position); + } + return null; +}); // Make the text document manager listen on the connection // for open, change and close text document events diff --git a/server/src/utils.ts b/server/src/utils.ts new file mode 100644 index 000000000..27fe1ceca --- /dev/null +++ b/server/src/utils.ts @@ -0,0 +1,45 @@ +import { Position, TextDocument } from 'vscode-languageserver-textdocument'; +import { Document } from 'yaml'; +import { Node, Pair, YAMLMap, YAMLSeq } from 'yaml/types'; +import * as _ from 'lodash'; + +export function getNodeAt( + document: TextDocument, + position: Position, + docs: Document.Parsed[] +): Node | null { + const offset = document.offsetAt(position); + const doc = _.find(docs, (d) => contains(d.contents, offset)); + if (doc) { + return getNodeAtOffset(doc.contents, offset); + } + return null; +} + +export function contains(node: Node | null, offset: number): boolean { + return !!(node?.range && node.range[0] <= offset && node.range[1] > offset); +} + +export function getNodeAtOffset( + context: Node | null, + offset: number +): Node | null { + if (context instanceof YAMLMap) { + let pair = _.find(context.items, (p) => contains(p.key, offset)); + if (pair) { + return getNodeAtOffset(pair.key, offset); + } + pair = _.find(context.items, (p) => contains(p.value, offset)); + if (pair) { + return getNodeAtOffset(pair.value, offset); + } + } else if (context instanceof YAMLSeq) { + const item = _.find(context.items, (n) => contains(n, offset)); + if (item) { + return getNodeAtOffset(item, offset); + } + } else if (contains(context, offset)) { + return context; + } + return null; +} diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo index 5ff6eb283..2dd6ee1b2 100644 --- a/server/tsconfig.tsbuildinfo +++ b/server/tsconfig.tsbuildinfo @@ -181,19 +181,229 @@ "signature": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", "affectsGlobalScope": false }, - "./src/docsExplorer.ts": { - "version": "ce54af4c0793686bf177a794913d18fb1b3f598a9baa15b8eced614cd1bebd83", - "signature": "0d99e2550f3f6bdd58971325208de6289fecbd22016031d0f4cba641313f6244", + "./src/docsParser.ts": { + "version": "1efcd574b8c8ec29c35f769fd305e001b1401f8a8f7064b27e4928db9ed8b633", + "signature": "ecc223d28dc821c023c7712e86faadbcca62a914af252641427c9d22cc7bd99a", "affectsGlobalScope": false }, "./src/docsLibrary.ts": { - "version": "44a2a2abd60888362415df8902890f7386e21294320d5a6dff458ffe1b282d44", - "signature": "e6d405f45d6517880f68570e65e65b7d7cc880199f117a6ff04e44195b9bb6e4", + "version": "f84773c567a8f3ca6983e3114aa5d56452dbe924316a1b1b58e179a318ee2011", + "signature": "caeadc095399699b0443807d2acd3d3ced296f5aa5cca1c41c75efeb4ee6bd9d", "affectsGlobalScope": false }, - "./node_modules/@flatten-js/interval-tree/index.d.ts": { - "version": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59", - "signature": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59", + "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": { + "version": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", + "signature": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/typings/thenable.d.ts": { + "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", + "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", + "affectsGlobalScope": true + }, + "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts": { + "version": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f", + "signature": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts": { + "version": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1", + "signature": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": { + "version": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383", + "signature": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": { + "version": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576", + "signature": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": { + "version": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e", + "signature": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": { + "version": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6", + "signature": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": { + "version": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8", + "signature": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": { + "version": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636", + "signature": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": { + "version": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91", + "signature": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91", + "affectsGlobalScope": false + }, + "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": { + "version": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0", + "signature": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": { + "version": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656", + "signature": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": { + "version": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc", + "signature": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": { + "version": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d", + "signature": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": { + "version": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90", + "signature": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": { + "version": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec", + "signature": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": { + "version": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676", + "signature": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": { + "version": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c", + "signature": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": { + "version": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1", + "signature": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": { + "version": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2", + "signature": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": { + "version": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656", + "signature": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": { + "version": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6", + "signature": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": { + "version": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0", + "signature": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": { + "version": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0", + "signature": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": { + "version": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc", + "signature": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": { + "version": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323", + "signature": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": { + "version": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533", + "signature": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": { + "version": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd", + "signature": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": { + "version": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7", + "signature": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": { + "version": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184", + "signature": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/progress.d.ts": { + "version": "f1f23acd4a8193453749f69d4432f5f122d6d572b793a8b630dd12fe80b0c3d3", + "signature": "f1f23acd4a8193453749f69d4432f5f122d6d572b793a8b630dd12fe80b0c3d3", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/configuration.d.ts": { + "version": "7662d6994d28c9ebbe61b88cc35c3d705804351eedbf363df30ea9fe8c4961dc", + "signature": "7662d6994d28c9ebbe61b88cc35c3d705804351eedbf363df30ea9fe8c4961dc", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts": { + "version": "1fb68106bddae35448e5279095461a4b54c4bbb42787cd629f70924b17e9a11e", + "signature": "1fb68106bddae35448e5279095461a4b54c4bbb42787cd629f70924b17e9a11e", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts": { + "version": "9acd551d1b5fb8a4ea4bfd65e8fcc8beca89a4b98fc1a9321924308256383565", + "signature": "9acd551d1b5fb8a4ea4bfd65e8fcc8beca89a4b98fc1a9321924308256383565", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts": { + "version": "a7024322dc86e43685c5564b438decad7557de62baae80b062fee78752c3b2f4", + "signature": "a7024322dc86e43685c5564b438decad7557de62baae80b062fee78752c3b2f4", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts": { + "version": "351bbf43d585484825ee6c4b4805aac137ffc8e8a3b9812af99945a202db7c02", + "signature": "351bbf43d585484825ee6c4b4805aac137ffc8e8a3b9812af99945a202db7c02", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts": { + "version": "a0116a0ba37624acef486fba35bd5530c8c25415798c8908a35e5f72913d2365", + "signature": "a0116a0ba37624acef486fba35bd5530c8c25415798c8908a35e5f72913d2365", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts": { + "version": "3bd2fc1b877ba4f9c91fca3231333471f3ff0edf85e146eaafdff2bc42c9a44c", + "signature": "3bd2fc1b877ba4f9c91fca3231333471f3ff0edf85e146eaafdff2bc42c9a44c", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/moniker.d.ts": { + "version": "387a6dc0d57a9f602d0d7f2f4ba88b65540c1c19d84088157610ca0176793a03", + "signature": "387a6dc0d57a9f602d0d7f2f4ba88b65540c1c19d84088157610ca0176793a03", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/server.d.ts": { + "version": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617", + "signature": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/lib/common/api.d.ts": { + "version": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081", + "signature": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts": { + "version": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538", + "signature": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538", "affectsGlobalScope": false }, "./node_modules/@types/lodash/common/common.d.ts": { @@ -261,9 +471,19 @@ "signature": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8", "affectsGlobalScope": true }, - "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts": { - "version": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538", - "signature": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538", + "./src/utils.ts": { + "version": "7a06bbcae8aede133b146280d53c4e480c40381521f27d1a72f94582be960381", + "signature": "0133fcb261f6309d9150b2a3006835e56c844274386c3f502d7deb675762ddeb", + "affectsGlobalScope": false + }, + "./src/hoverProvider.ts": { + "version": "603192d91c02d9ced89951cd3ef3745e0ce88c667fffd65ab392c382e1688118", + "signature": "3439a0d1973032d1a56fcaebf60c74681121b71791352a860b550c88385f634f", + "affectsGlobalScope": false + }, + "./node_modules/@flatten-js/interval-tree/index.d.ts": { + "version": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59", + "signature": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59", "affectsGlobalScope": false }, "./node_modules/vscode-languageserver/typings/thenable.d.ts": { @@ -506,211 +726,6 @@ "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", "affectsGlobalScope": false }, - "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": { - "version": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", - "signature": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/typings/thenable.d.ts": { - "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", - "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", - "affectsGlobalScope": true - }, - "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts": { - "version": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f", - "signature": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts": { - "version": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1", - "signature": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": { - "version": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383", - "signature": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": { - "version": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576", - "signature": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": { - "version": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e", - "signature": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": { - "version": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6", - "signature": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": { - "version": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8", - "signature": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": { - "version": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636", - "signature": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": { - "version": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91", - "signature": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91", - "affectsGlobalScope": false - }, - "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": { - "version": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0", - "signature": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": { - "version": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656", - "signature": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": { - "version": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc", - "signature": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": { - "version": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d", - "signature": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": { - "version": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90", - "signature": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": { - "version": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec", - "signature": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": { - "version": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676", - "signature": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": { - "version": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c", - "signature": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": { - "version": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1", - "signature": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": { - "version": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2", - "signature": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": { - "version": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656", - "signature": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": { - "version": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6", - "signature": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": { - "version": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0", - "signature": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": { - "version": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0", - "signature": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": { - "version": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc", - "signature": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": { - "version": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323", - "signature": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": { - "version": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533", - "signature": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": { - "version": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd", - "signature": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": { - "version": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7", - "signature": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": { - "version": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184", - "signature": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/progress.d.ts": { - "version": "f1f23acd4a8193453749f69d4432f5f122d6d572b793a8b630dd12fe80b0c3d3", - "signature": "f1f23acd4a8193453749f69d4432f5f122d6d572b793a8b630dd12fe80b0c3d3", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/configuration.d.ts": { - "version": "7662d6994d28c9ebbe61b88cc35c3d705804351eedbf363df30ea9fe8c4961dc", - "signature": "7662d6994d28c9ebbe61b88cc35c3d705804351eedbf363df30ea9fe8c4961dc", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts": { - "version": "1fb68106bddae35448e5279095461a4b54c4bbb42787cd629f70924b17e9a11e", - "signature": "1fb68106bddae35448e5279095461a4b54c4bbb42787cd629f70924b17e9a11e", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts": { - "version": "9acd551d1b5fb8a4ea4bfd65e8fcc8beca89a4b98fc1a9321924308256383565", - "signature": "9acd551d1b5fb8a4ea4bfd65e8fcc8beca89a4b98fc1a9321924308256383565", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts": { - "version": "a7024322dc86e43685c5564b438decad7557de62baae80b062fee78752c3b2f4", - "signature": "a7024322dc86e43685c5564b438decad7557de62baae80b062fee78752c3b2f4", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts": { - "version": "351bbf43d585484825ee6c4b4805aac137ffc8e8a3b9812af99945a202db7c02", - "signature": "351bbf43d585484825ee6c4b4805aac137ffc8e8a3b9812af99945a202db7c02", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts": { - "version": "a0116a0ba37624acef486fba35bd5530c8c25415798c8908a35e5f72913d2365", - "signature": "a0116a0ba37624acef486fba35bd5530c8c25415798c8908a35e5f72913d2365", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts": { - "version": "3bd2fc1b877ba4f9c91fca3231333471f3ff0edf85e146eaafdff2bc42c9a44c", - "signature": "3bd2fc1b877ba4f9c91fca3231333471f3ff0edf85e146eaafdff2bc42c9a44c", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/moniker.d.ts": { - "version": "387a6dc0d57a9f602d0d7f2f4ba88b65540c1c19d84088157610ca0176793a03", - "signature": "387a6dc0d57a9f602d0d7f2f4ba88b65540c1c19d84088157610ca0176793a03", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/lib/common/server.d.ts": { - "version": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617", - "signature": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617", - "affectsGlobalScope": false - }, "./node_modules/vscode-languageserver/lib/node/files.d.ts": { "version": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5", "signature": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5", @@ -736,11 +751,6 @@ "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", "affectsGlobalScope": false }, - "./node_modules/vscode-languageserver/lib/common/api.d.ts": { - "version": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081", - "signature": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081", - "affectsGlobalScope": false - }, "./node_modules/vscode-languageserver/lib/node/main.d.ts": { "version": "cf1532b11d5ec78f63dc4d0c985353b281b4a09e91d35f63fb9aba42e36674ab", "signature": "cf1532b11d5ec78f63dc4d0c985353b281b4a09e91d35f63fb9aba42e36674ab", @@ -752,7 +762,7 @@ "affectsGlobalScope": false }, "./src/server.ts": { - "version": "2aa8d08dfc2a3e19b74589f4dcdc507cf7d8bca73b4e0df25d317f01b3bda2c0", + "version": "c75e5842f1d0e577696701a312b2e80697d426c564dfda46b366c25b29fee984", "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", "affectsGlobalScope": false }, @@ -1460,23 +1470,36 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts" ], - "./src/docsExplorer.ts": [ + "./src/docsLibrary.ts": [ + "../node_modules/@types/node/path.d.ts", + "./src/docsParser.ts" + ], + "./src/docsParser.ts": [ "../node_modules/@types/node/fs.d.ts", "../node_modules/@types/node/path.d.ts", - "../node_modules/@types/node/perf_hooks.d.ts", "./node_modules/yaml/index.d.ts", "./node_modules/yaml/util.d.ts" ], - "./src/docsLibrary.ts": [ - "../node_modules/@types/node/path.d.ts", - "./src/docsExplorer.ts" + "./src/hoverProvider.ts": [ + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", + "./node_modules/vscode-languageserver/lib/common/api.d.ts", + "./node_modules/yaml/index.d.ts", + "./node_modules/yaml/types.d.ts", + "./src/utils.ts" ], "./src/server.ts": [ "./node_modules/@flatten-js/interval-tree/index.d.ts", "./node_modules/@types/lodash/index.d.ts", "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/vscode-languageserver/node.d.ts", - "./node_modules/yaml/index.d.ts" + "./node_modules/yaml/index.d.ts", + "./src/hoverProvider.ts" + ], + "./src/utils.ts": [ + "./node_modules/@types/lodash/index.d.ts", + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", + "./node_modules/yaml/index.d.ts", + "./node_modules/yaml/types.d.ts" ] }, "exportedModulesMap": { @@ -2157,11 +2180,20 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts" ], - "./src/docsExplorer.ts": [ + "./src/docsLibrary.ts": [ + "./src/docsParser.ts" + ], + "./src/docsParser.ts": [ "./node_modules/yaml/util.d.ts" ], - "./src/docsLibrary.ts": [ - "./src/docsExplorer.ts" + "./src/hoverProvider.ts": [ + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", + "./node_modules/vscode-languageserver/lib/common/api.d.ts" + ], + "./src/utils.ts": [ + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", + "./node_modules/yaml/index.d.ts", + "./node_modules/yaml/types.d.ts" ] }, "semanticDiagnosticsPerFile": [ @@ -2315,9 +2347,11 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts", "./node_modules/yaml/util.d.ts", - "./src/docsExplorer.ts", "./src/docsLibrary.ts", - "./src/server.ts" + "./src/docsParser.ts", + "./src/hoverProvider.ts", + "./src/server.ts", + "./src/utils.ts" ] }, "version": "4.1.5" From c48bbcdcf8b1cfa158ad742e454dc0df492752d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Mon, 1 Mar 2021 22:34:47 +0100 Subject: [PATCH 017/558] Basic hover for Ansible library done Moved validation to its own provider module --- server/src/docsFormatter.ts | 57 +++++++++++++++ server/src/docsLibrary.ts | 45 ++++++++++-- server/src/docsParser.ts | 2 +- server/src/hoverProvider.ts | 50 ++++++++++--- server/src/server.ts | 119 ++++++------------------------- server/src/utils.ts | 46 ++++++------ server/src/validationProvider.ts | 85 ++++++++++++++++++++++ server/tsconfig.tsbuildinfo | 70 ++++++++++++------ 8 files changed, 317 insertions(+), 157 deletions(-) create mode 100644 server/src/docsFormatter.ts create mode 100644 server/src/validationProvider.ts diff --git a/server/src/docsFormatter.ts b/server/src/docsFormatter.ts new file mode 100644 index 000000000..58613b6bd --- /dev/null +++ b/server/src/docsFormatter.ts @@ -0,0 +1,57 @@ +import { IDescription, IOption } from './docsLibrary'; + +export function formatDescription(doc?: IDescription, asList = true): string { + let result = ''; + if (doc instanceof Array) { + const lines: string[] = []; + doc.forEach((element) => { + if (asList) { + lines.push(`- ${replaceMacros(element)}`); + } else { + lines.push(`${replaceMacros(element)}\n`); + } + }); + result += lines.join('\n'); + } else if (typeof doc === 'string') { + result += replaceMacros(doc); + } + return `${result}\n`; +} + +export function formatOption(option: IOption): string { + const sections: string[] = []; + if (option.required) { + sections.push('**Required**\n'); + } + if (option.description) { + sections.push(formatDescription(option.description, false)); + } + if (option.choices) { + const formattedChoiceArray = option.choices.map((c) => `\`${c}\``); + sections.push(`*Choices*: [${formattedChoiceArray.toString()}]`); + } + return sections.join('\n'); +} + +// TODO: do something with links +const macroPatterns = { + link: /L\((.*?),(.*?)\)/g, + url: /U\((.*?)\)/g, + reference: /R\((.*?),(.*?)\)/g, + module: /M\((.*?)\)/g, + monospace: /C\((.*?)\)/g, + italics: /I\((.*?)\)/g, + bold: /B\((.*?)\)/g, + hr: /\bHORIZONTALLINE\b/, +}; +function replaceMacros(text: string): string { + return text + .replace(macroPatterns.link, '[$1]($2)') + .replace(macroPatterns.url, '$1') + .replace(macroPatterns.reference, '[$1]($2)') + .replace(macroPatterns.module, '*`$1`*') + .replace(macroPatterns.monospace, '`$1`') + .replace(macroPatterns.italics, '_$1_') + .replace(macroPatterns.bold, '**$1**') + .replace(macroPatterns.hr, '
'); +} diff --git a/server/src/docsLibrary.ts b/server/src/docsLibrary.ts index b7e8c80f1..7fc60eeee 100644 --- a/server/src/docsLibrary.ts +++ b/server/src/docsLibrary.ts @@ -1,7 +1,7 @@ import { DocsParser, IDocumentation } from './docsParser'; import * as path from 'path'; export class DocsLibrary { - builtInModules = new Map(); + private builtInModules = new Map(); public async initialize(): Promise { const ansibleLibPath = '/usr/local/lib/python3.6/dist-packages/ansible'; @@ -11,9 +11,44 @@ export class DocsLibrary { this.builtInModules.set(doc.module, doc); }); } + + public getModuleDescription(module: string): IDescription | undefined { + const doc = this.builtInModules.get(module); + return doc?.contents.description; + } + + public getModuleOption(module: string, option: string): IOption | undefined { + const doc = this.builtInModules.get(module); + const optionObj = doc?.contents.options[option]; + if (optionObj) { + return { + description: optionObj.description, + required: !!optionObj.required, + choices: optionObj.choices, + }; + } + } + + public isModule(module: string): boolean { + return this.builtInModules.has(module); + } +} + +export type IDescription = string | Array; + +export interface IOption { + description?: IDescription; + required: boolean; + default?: unknown; + choices?: Array; + type?: string; + elements?: string; + aliases?: Array; + version_added?: string; + suboptions?: unknown; } -const test = new DocsLibrary(); -test.initialize().then(() => { - console.log(test.builtInModules); -}); +// const test = new DocsLibrary(); +// test.initialize().then(() => { +// console.log(test.builtInModules); +// }); diff --git a/server/src/docsParser.ts b/server/src/docsParser.ts index 104187cb0..cdc5d122b 100644 --- a/server/src/docsParser.ts +++ b/server/src/docsParser.ts @@ -8,7 +8,7 @@ export class DocsParser { public static async parseDirectory(dir: string): Promise { const files = await this._getFiles(dir); - return await Promise.all( + return Promise.all( files.map(async (file) => { const contents = await fs.readFile(file, { encoding: 'utf8' }); const m = this.docsRegex.exec(contents); diff --git a/server/src/hoverProvider.ts b/server/src/hoverProvider.ts index 098763d43..2ac1d31e9 100644 --- a/server/src/hoverProvider.ts +++ b/server/src/hoverProvider.ts @@ -1,18 +1,46 @@ import { Hover } from 'vscode-languageserver'; import { Position, TextDocument } from 'vscode-languageserver-textdocument'; import { parseAllDocuments } from 'yaml'; -import { Scalar } from 'yaml/types'; -import { getNodeAt } from './utils'; +import { Pair, Scalar } from 'yaml/types'; +import { formatDescription, formatOption } from './docsFormatter'; +import { DocsLibrary } from './docsLibrary'; +import { getPathAt } from './utils'; -export class AnsibleHoverProvider { - doHover(document: TextDocument, position: Position): Hover | null { - const yamlDocs = parseAllDocuments(document.getText()); - const node = getNodeAt(document, position, yamlDocs); - if (node && node instanceof Scalar) { - return { - contents: node.value, - }; +export function doHover( + document: TextDocument, + position: Position, + docsLibrary: DocsLibrary +): Hover | null { + const yamlDocs = parseAllDocuments(document.getText()); + const path = getPathAt(document, position, yamlDocs); + if (path) { + const node = path[path.length - 1]; + if (node instanceof Scalar) { + // Check if options first + const parent_pair = path[path.length - 4]; //Pair[module_name, Map{Pair[option_name, ...], ...}] + if ( + parent_pair instanceof Pair && + parent_pair.key instanceof Scalar && + docsLibrary.isModule(parent_pair.key.value) + ) { + const option = docsLibrary.getModuleOption( + parent_pair.key.value, + node.value + ); + if (option) { + return { + contents: formatOption(option), + }; + } + } + // Check if module + const description = docsLibrary.getModuleDescription(node.value); + if (description) { + return { + contents: formatDescription(description), + }; + } } - return null; } + return null; } diff --git a/server/src/server.ts b/server/src/server.ts index 23d563014..b9ce229b2 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -1,22 +1,16 @@ -import IntervalTree from '@flatten-js/interval-tree'; -import * as _ from 'lodash'; import { TextDocument } from 'vscode-languageserver-textdocument'; import { createConnection, - Diagnostic, - DiagnosticRelatedInformation, - DiagnosticSeverity, DidChangeConfigurationNotification, InitializeParams, InitializeResult, - Location, ProposedFeatures, - Range, TextDocuments, TextDocumentSyncKind, } from 'vscode-languageserver/node'; -import { parseAllDocuments } from 'yaml'; -import { AnsibleHoverProvider } from './hoverProvider'; +import { DocsLibrary } from './docsLibrary'; +import { doHover } from './hoverProvider'; +import { doValidate } from './validationProvider'; // Create a connection for the server, using Node's IPC as a transport. // Also include all preview / proposed LSP features. @@ -107,7 +101,12 @@ connection.onDidChangeConfiguration((change) => { } // Revalidate all open text documents - documents.all().forEach(validateTextDocument); + documents.all().forEach((doc) => { + connection.sendDiagnostics({ + uri: doc.uri, + diagnostics: doValidate(doc), + }); + }); }); function getDocumentSettings(resource: string): Thenable { @@ -133,98 +132,26 @@ documents.onDidClose((e) => { // The content of a text document has changed. This event is emitted // when the text document first opened or when its content has changed. documents.onDidChangeContent((change) => { - validateTextDocument(change.document); -}); - -async function validateTextDocument(textDocument: TextDocument): Promise { - // In this simple example we get the settings for every validate run. - const settings = await getDocumentSettings(textDocument.uri); - - const diagnostics: Diagnostic[] = []; - const yDocuments = parseAllDocuments(textDocument.getText(), { - prettyErrors: false, - }); - const rangeTree = new IntervalTree(); - yDocuments.forEach((yDoc) => { - yDoc.errors.forEach((error) => { - const errorRange = error.range || error.source?.range; - let range; - if (errorRange) { - const start = textDocument.positionAt(errorRange.start); - const end = textDocument.positionAt(errorRange.end); - range = Range.create(start, end); - - let severity; - switch (error.name) { - case 'YAMLReferenceError': - case 'YAMLSemanticError': - case 'YAMLSyntaxError': - severity = DiagnosticSeverity.Error; - break; - case 'YAMLWarning': - severity = DiagnosticSeverity.Warning; - break; - default: - severity = DiagnosticSeverity.Information; - break; - } - rangeTree.insert([errorRange.start, errorRange.end], { - message: error.message, - range: range || Range.create(0, 0, 0, 0), - severity: severity, - source: 'Ansible [YAML]', - }); - } - }); - }); - rangeTree.forEach((range, diag) => { - const searchResult = rangeTree.search(range); - if (searchResult) { - const allRangesAreEqual = searchResult.every((foundDiag: Diagnostic) => { - // (range start == range end) in case it has already been collapsed - return ( - foundDiag.range.start === foundDiag.range.end || - _.isEqual(foundDiag.range, diag.range) - ); - }); - if (!allRangesAreEqual) { - // Prevent large error scopes hiding/obscuring other error scopes - // In YAML this is very common in case of syntax errors - const range = diag.range; - diag.relatedInformation = [ - DiagnosticRelatedInformation.create( - Location.create(textDocument.uri, { - start: range.end, - end: range.end, - }), - 'the scope of this error ends here' - ), - ]; - // collapse the range - diag.range = { - start: range.start, - end: range.start, - }; - } - } - diagnostics.push(diag); + connection.sendDiagnostics({ + uri: change.document.uri, + diagnostics: doValidate(change.document), }); - - // Send the computed diagnostics to VSCode. - connection.sendDiagnostics({ uri: textDocument.uri, diagnostics }); -} +}); connection.onDidChangeWatchedFiles((_change) => { // Monitored files have change in VSCode connection.console.log('We received a file change event'); }); -const hoverProvider = new AnsibleHoverProvider(); -connection.onHover((params) => { - const document = documents.get(params.textDocument.uri); - if (document) { - return hoverProvider.doHover(document, params.position); - } - return null; + +const docsLibrary = new DocsLibrary(); +docsLibrary.initialize().then(() => { + connection.onHover((params) => { + const document = documents.get(params.textDocument.uri); + if (document) { + return doHover(document, params.position, docsLibrary); + } + return null; + }); }); // Make the text document manager listen on the connection diff --git a/server/src/utils.ts b/server/src/utils.ts index 27fe1ceca..195a1bd57 100644 --- a/server/src/utils.ts +++ b/server/src/utils.ts @@ -3,15 +3,15 @@ import { Document } from 'yaml'; import { Node, Pair, YAMLMap, YAMLSeq } from 'yaml/types'; import * as _ from 'lodash'; -export function getNodeAt( +export function getPathAt( document: TextDocument, position: Position, docs: Document.Parsed[] -): Node | null { +): Node[] | null { const offset = document.offsetAt(position); const doc = _.find(docs, (d) => contains(d.contents, offset)); - if (doc) { - return getNodeAtOffset(doc.contents, offset); + if (doc && doc.contents) { + return getPathAtOffset([doc.contents], offset); } return null; } @@ -20,26 +20,26 @@ export function contains(node: Node | null, offset: number): boolean { return !!(node?.range && node.range[0] <= offset && node.range[1] > offset); } -export function getNodeAtOffset( - context: Node | null, - offset: number -): Node | null { - if (context instanceof YAMLMap) { - let pair = _.find(context.items, (p) => contains(p.key, offset)); - if (pair) { - return getNodeAtOffset(pair.key, offset); +export function getPathAtOffset(path: Node[], offset: number): Node[] | null { + if (path) { + const currentNode = path[path.length - 1]; + if (currentNode instanceof YAMLMap) { + let pair = _.find(currentNode.items, (p) => contains(p.key, offset)); + if (pair) { + return getPathAtOffset(path.concat(pair, pair.key), offset); + } + pair = _.find(currentNode.items, (p) => contains(p.value, offset)); + if (pair) { + return getPathAtOffset(path.concat(pair, pair.value), offset); + } + } else if (currentNode instanceof YAMLSeq) { + const item = _.find(currentNode.items, (n) => contains(n, offset)); + if (item) { + return getPathAtOffset(path.concat(item), offset); + } + } else if (contains(currentNode, offset)) { + return path; } - pair = _.find(context.items, (p) => contains(p.value, offset)); - if (pair) { - return getNodeAtOffset(pair.value, offset); - } - } else if (context instanceof YAMLSeq) { - const item = _.find(context.items, (n) => contains(n, offset)); - if (item) { - return getNodeAtOffset(item, offset); - } - } else if (contains(context, offset)) { - return context; } return null; } diff --git a/server/src/validationProvider.ts b/server/src/validationProvider.ts new file mode 100644 index 000000000..cda1838f1 --- /dev/null +++ b/server/src/validationProvider.ts @@ -0,0 +1,85 @@ +import IntervalTree from '@flatten-js/interval-tree'; +import { + Diagnostic, + DiagnosticRelatedInformation, + DiagnosticSeverity, + Location, + Range, +} from 'vscode-languageserver'; +import { TextDocument } from 'vscode-languageserver-textdocument'; +import { parseAllDocuments } from 'yaml'; +import * as _ from 'lodash'; + +export function doValidate(textDocument: TextDocument): Diagnostic[] { + const diagnostics: Diagnostic[] = []; + const yDocuments = parseAllDocuments(textDocument.getText(), { + prettyErrors: false, + }); + const rangeTree = new IntervalTree(); + yDocuments.forEach((yDoc) => { + yDoc.errors.forEach((error) => { + const errorRange = error.range || error.source?.range; + let range; + if (errorRange) { + const start = textDocument.positionAt(errorRange.start); + const end = textDocument.positionAt(errorRange.end); + range = Range.create(start, end); + + let severity; + switch (error.name) { + case 'YAMLReferenceError': + case 'YAMLSemanticError': + case 'YAMLSyntaxError': + severity = DiagnosticSeverity.Error; + break; + case 'YAMLWarning': + severity = DiagnosticSeverity.Warning; + break; + default: + severity = DiagnosticSeverity.Information; + break; + } + rangeTree.insert([errorRange.start, errorRange.end], { + message: error.message, + range: range || Range.create(0, 0, 0, 0), + severity: severity, + source: 'Ansible [YAML]', + }); + } + }); + }); + rangeTree.forEach((range, diag) => { + const searchResult = rangeTree.search(range); + if (searchResult) { + const allRangesAreEqual = searchResult.every((foundDiag: Diagnostic) => { + // (range start == range end) in case it has already been collapsed + return ( + foundDiag.range.start === foundDiag.range.end || + _.isEqual(foundDiag.range, diag.range) + ); + }); + if (!allRangesAreEqual) { + // Prevent large error scopes hiding/obscuring other error scopes + // In YAML this is very common in case of syntax errors + const range = diag.range; + diag.relatedInformation = [ + DiagnosticRelatedInformation.create( + Location.create(textDocument.uri, { + start: range.end, + end: range.end, + }), + 'the scope of this error ends here' + ), + ]; + // collapse the range + diag.range = { + start: range.start, + end: range.start, + }; + } + } + diagnostics.push(diag); + }); + + return diagnostics; +} diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo index 2dd6ee1b2..3b5d1d6f6 100644 --- a/server/tsconfig.tsbuildinfo +++ b/server/tsconfig.tsbuildinfo @@ -182,13 +182,18 @@ "affectsGlobalScope": false }, "./src/docsParser.ts": { - "version": "1efcd574b8c8ec29c35f769fd305e001b1401f8a8f7064b27e4928db9ed8b633", + "version": "7679730e4c037e3df0a7cd305df2c20ced11a792ddeef9ab4ef14098a0be3ec8", "signature": "ecc223d28dc821c023c7712e86faadbcca62a914af252641427c9d22cc7bd99a", "affectsGlobalScope": false }, "./src/docsLibrary.ts": { - "version": "f84773c567a8f3ca6983e3114aa5d56452dbe924316a1b1b58e179a318ee2011", - "signature": "caeadc095399699b0443807d2acd3d3ced296f5aa5cca1c41c75efeb4ee6bd9d", + "version": "807e8944eed6e26970ed1c293e4211ac5d800d27a81de4cf6de80b1b0c8d09a5", + "signature": "75651603cb37c9115f83f3b4e0168d93d6e9eed8c41766dfa1882c6e51a5d59d", + "affectsGlobalScope": false + }, + "./src/docsFormatter.ts": { + "version": "815562666bda7347b93a0e8ee2199806e91fdbeb6e4a48779e6475b15a27387d", + "signature": "eb6a8b480d86b7784743f0e93df6680e9672dab628581c9a1db52da67c828390", "affectsGlobalScope": false }, "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": { @@ -472,18 +477,13 @@ "affectsGlobalScope": true }, "./src/utils.ts": { - "version": "7a06bbcae8aede133b146280d53c4e480c40381521f27d1a72f94582be960381", - "signature": "0133fcb261f6309d9150b2a3006835e56c844274386c3f502d7deb675762ddeb", + "version": "41a04c4a8d7266e82251cf03f4b9b0e45fb50dedc1eb95fc87690843bee01c33", + "signature": "d8bfe5fc53b97ae26a0d657b21a4856a2873c3591869bbdc0ac79566e81440f8", "affectsGlobalScope": false }, "./src/hoverProvider.ts": { - "version": "603192d91c02d9ced89951cd3ef3745e0ce88c667fffd65ab392c382e1688118", - "signature": "3439a0d1973032d1a56fcaebf60c74681121b71791352a860b550c88385f634f", - "affectsGlobalScope": false - }, - "./node_modules/@flatten-js/interval-tree/index.d.ts": { - "version": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59", - "signature": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59", + "version": "e935e75f9fd80f6e110067af0cc10cd70eb16cdfcd94f36a25e1aa2d1696d8a9", + "signature": "14028932ece44f3c48823c969d5b1bda30f5a0ed08b23db42deb6f187bb2da44", "affectsGlobalScope": false }, "./node_modules/vscode-languageserver/typings/thenable.d.ts": { @@ -761,8 +761,18 @@ "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1", "affectsGlobalScope": false }, + "./node_modules/@flatten-js/interval-tree/index.d.ts": { + "version": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59", + "signature": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59", + "affectsGlobalScope": false + }, + "./src/validationProvider.ts": { + "version": "9dc725a7a92587836069827bf7d398499ad3ba9a68845f20ae69bb34f5c51bbc", + "signature": "f3360d2bdd3e9199b55bca984df20071810c51097a8a96fb0ee33b6a1abb0b63", + "affectsGlobalScope": false + }, "./src/server.ts": { - "version": "c75e5842f1d0e577696701a312b2e80697d426c564dfda46b366c25b29fee984", + "version": "a0f0565e0894362cd3ccdf84c364e5123da270fa5b41f2420e62ef1035add39e", "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", "affectsGlobalScope": false }, @@ -1470,6 +1480,9 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts" ], + "./src/docsFormatter.ts": [ + "./src/docsLibrary.ts" + ], "./src/docsLibrary.ts": [ "../node_modules/@types/node/path.d.ts", "./src/docsParser.ts" @@ -1485,21 +1498,29 @@ "./node_modules/vscode-languageserver/lib/common/api.d.ts", "./node_modules/yaml/index.d.ts", "./node_modules/yaml/types.d.ts", + "./src/docsFormatter.ts", + "./src/docsLibrary.ts", "./src/utils.ts" ], "./src/server.ts": [ - "./node_modules/@flatten-js/interval-tree/index.d.ts", - "./node_modules/@types/lodash/index.d.ts", "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/vscode-languageserver/node.d.ts", - "./node_modules/yaml/index.d.ts", - "./src/hoverProvider.ts" + "./src/docsLibrary.ts", + "./src/hoverProvider.ts", + "./src/validationProvider.ts" ], "./src/utils.ts": [ "./node_modules/@types/lodash/index.d.ts", "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/yaml/index.d.ts", "./node_modules/yaml/types.d.ts" + ], + "./src/validationProvider.ts": [ + "./node_modules/@flatten-js/interval-tree/index.d.ts", + "./node_modules/@types/lodash/index.d.ts", + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", + "./node_modules/vscode-languageserver/lib/common/api.d.ts", + "./node_modules/yaml/index.d.ts" ] }, "exportedModulesMap": { @@ -2180,20 +2201,25 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts" ], - "./src/docsLibrary.ts": [ - "./src/docsParser.ts" + "./src/docsFormatter.ts": [ + "./src/docsLibrary.ts" ], "./src/docsParser.ts": [ "./node_modules/yaml/util.d.ts" ], "./src/hoverProvider.ts": [ "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", - "./node_modules/vscode-languageserver/lib/common/api.d.ts" + "./node_modules/vscode-languageserver/lib/common/api.d.ts", + "./src/docsLibrary.ts" ], "./src/utils.ts": [ "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/yaml/index.d.ts", "./node_modules/yaml/types.d.ts" + ], + "./src/validationProvider.ts": [ + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", + "./node_modules/vscode-languageserver/lib/common/api.d.ts" ] }, "semanticDiagnosticsPerFile": [ @@ -2347,11 +2373,13 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts", "./node_modules/yaml/util.d.ts", + "./src/docsFormatter.ts", "./src/docsLibrary.ts", "./src/docsParser.ts", "./src/hoverProvider.ts", "./src/server.ts", - "./src/utils.ts" + "./src/utils.ts", + "./src/validationProvider.ts" ] }, "version": "4.1.5" From 0c2c4391fa0f740fdf8a20ef2a0d7fc6202476c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Wed, 3 Mar 2021 22:09:45 +0100 Subject: [PATCH 018/558] Added testing frameworks & implemented more strict hover Implemented AncestryBuilder for YAML and tests for it --- .vscode/settings.json | 13 +- package-lock.json | 566 +++++++++++++++++ package.json | 5 + server/package-lock.json | 886 +++++++++++++++++++++++++++ server/package.json | 10 +- server/src/hoverProvider.ts | 76 ++- server/src/test/data/utils.block.yml | 7 + server/src/test/utils.test.ts | 120 ++++ server/src/utils.ts | 68 +- server/tsconfig.tsbuildinfo | 34 +- 10 files changed, 1757 insertions(+), 28 deletions(-) create mode 100644 server/src/test/data/utils.block.yml create mode 100644 server/src/test/utils.test.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index f91367260..a5f1dcd75 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,5 +8,16 @@ }, "[jsonc]": { "editor.defaultFormatter": "esbenp.prettier-vscode" - } + }, + "mochaExplorer.files": "server/src/test/**/*.ts", + "mochaExplorer.require": "ts-node/register", + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/node_modules": true + }, + "explorerExclude.backup": null } diff --git a/package-lock.json b/package-lock.json index 113074c66..716e3b2b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -100,12 +100,24 @@ "fastq": "^1.6.0" } }, + "@types/chai": { + "version": "4.2.15", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.15.tgz", + "integrity": "sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ==", + "dev": true + }, "@types/json-schema": { "version": "7.0.7", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", "dev": true }, + "@types/mocha": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.1.tgz", + "integrity": "sha512-NysN+bNqj6E0Hv4CTGWSlPzMW6vTKjDpOteycDkV4IWBsO+PU48JonrPzV9ODjiI2XrjmA05KInLgF5ivZ/YGQ==", + "dev": true + }, "@types/node": { "version": "14.14.31", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", @@ -201,6 +213,12 @@ "eslint-visitor-keys": "^2.0.0" } }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -246,6 +264,22 @@ "color-convert": "^1.9.0" } }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -261,6 +295,12 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -273,6 +313,12 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -292,12 +338,44 @@ "fill-range": "^7.0.1" } }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-JClPZFGRcSl7X8dYzlCJY7v+X1fBA+9Y339Y8EqhBVfp0QC1hTnaf7nMfR+XZ74clkBC64b0iEw2cWKHt3EVqA==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, "chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", @@ -349,6 +427,39 @@ } } }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -370,6 +481,12 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -390,12 +507,33 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -429,6 +567,12 @@ "ansi-colors": "^4.1.1" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -657,6 +801,22 @@ "to-regex-range": "^5.0.1" } }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -679,12 +839,31 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -731,12 +910,24 @@ "slash": "^3.0.0" } }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", @@ -775,6 +966,15 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -802,6 +1002,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -846,12 +1052,30 @@ "type-check": "~0.4.0" } }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -861,6 +1085,12 @@ "yallist": "^4.0.0" } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -886,18 +1116,113 @@ "brace-expansion": "^1.1.7" } }, + "mocha": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz", + "integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "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 }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -921,6 +1246,24 @@ "word-wrap": "^1.2.3" } }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -930,6 +1273,12 @@ "callsites": "^3.0.0" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -948,6 +1297,12 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", @@ -978,12 +1333,36 @@ "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", "dev": true }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -1020,6 +1399,12 @@ "queue-microtask": "^1.2.2" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, "semver": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", @@ -1029,6 +1414,15 @@ "lru-cache": "^6.0.0" } }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -1087,6 +1481,22 @@ } } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -1175,6 +1585,20 @@ "is-number": "^7.0.0" } }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -1199,6 +1623,12 @@ "prelude-ls": "^1.2.1" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -1235,18 +1665,109 @@ "isexe": "^2.0.0" } }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -1257,6 +1778,51 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 3d4968607..84d11dc37 100644 --- a/package.json +++ b/package.json @@ -154,6 +154,11 @@ "typescript": "^4.1.5", "@types/node": "^14.14.31", "@types/vscode": "^1.53.0", + "chai": "^4.3.1", + "mocha": "^8.3.0", + "ts-node": "^9.1.1", + "@types/chai": "^4.2.15", + "@types/mocha": "^8.2.1", "@typescript-eslint/eslint-plugin": "^4.15.2", "@typescript-eslint/parser": "^4.15.2", "eslint": "^7.20.0", diff --git a/server/package-lock.json b/server/package-lock.json index e445bbf4c..796eb2ba8 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -9,17 +9,743 @@ "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.13.tgz", "integrity": "sha512-5thHHdUZIRdPdEPx6G9tY6mHFMGoXsq9/ivemRszDcEkERXqlZAv+7NozaFbAUOvKXxyWoccSnLyjK0c5UWJeQ==" }, + "@types/chai": { + "version": "4.2.15", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.15.tgz", + "integrity": "sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ==", + "dev": true + }, "@types/lodash": { "version": "4.14.168", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", "dev": true }, + "@types/mocha": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.1.tgz", + "integrity": "sha512-NysN+bNqj6E0Hv4CTGWSlPzMW6vTKjDpOteycDkV4IWBsO+PU48JonrPzV9ODjiI2XrjmA05KInLgF5ivZ/YGQ==", + "dev": true + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "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, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-JClPZFGRcSl7X8dYzlCJY7v+X1fBA+9Y339Y8EqhBVfp0QC1hTnaf7nMfR+XZ74clkBC64b0iEw2cWKHt3EVqA==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "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 + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "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 + } + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "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 + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mocha": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz", + "integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "vscode-jsonrpc": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", @@ -52,10 +778,170 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "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 + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true + }, "yaml": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "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 + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/server/package.json b/server/package.json index 09c0b761f..0bdc653d5 100644 --- a/server/package.json +++ b/server/package.json @@ -13,8 +13,16 @@ "engines": { "node": "*" }, + "scripts": { + "test": "mocha -r ts-node/register 'src/test/**/*.ts'" + }, "devDependencies": { - "@types/lodash": "^4.14.108" + "@types/lodash": "^4.14.108", + "chai": "^4.3.1", + "mocha": "^8.3.0", + "ts-node": "^9.1.1", + "@types/chai": "^4.2.15", + "@types/mocha": "^8.2.1" }, "dependencies": { "vscode-languageserver": "^7.0.0", diff --git a/server/src/hoverProvider.ts b/server/src/hoverProvider.ts index 2ac1d31e9..ee6c21584 100644 --- a/server/src/hoverProvider.ts +++ b/server/src/hoverProvider.ts @@ -1,10 +1,35 @@ import { Hover } from 'vscode-languageserver'; import { Position, TextDocument } from 'vscode-languageserver-textdocument'; import { parseAllDocuments } from 'yaml'; -import { Pair, Scalar } from 'yaml/types'; +import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; import { formatDescription, formatOption } from './docsFormatter'; import { DocsLibrary } from './docsLibrary'; -import { getPathAt } from './utils'; +import { AncestryBuilder, getPathAt } from './utils'; + +const tasksKey = /^(tasks|pre_tasks|post_tasks|block)$/; + +function moduleAncestry(path: Node[]) { + return new AncestryBuilder(path).parent(YAMLMap).parent(YAMLSeq); +} + +function mayBeModule(path: Node[]): boolean { + const taskListPath = new AncestryBuilder(path) + .parent(YAMLMap) + .parent(YAMLSeq) + .getPath(); + if (taskListPath) { + // basic shape of the task list has been found + if (taskListPath.length === 0) { + // case when the task list is at the top level of the document + return true; + } + if (new AncestryBuilder(taskListPath).parentKey(tasksKey).get()) { + // case when a task list is defined explicitly by a keyword + return true; + } + } + return false; +} export function doHover( document: TextDocument, @@ -15,30 +40,37 @@ export function doHover( const path = getPathAt(document, position, yamlDocs); if (path) { const node = path[path.length - 1]; - if (node instanceof Scalar) { - // Check if options first - const parent_pair = path[path.length - 4]; //Pair[module_name, Map{Pair[option_name, ...], ...}] - if ( - parent_pair instanceof Pair && - parent_pair.key instanceof Scalar && - docsLibrary.isModule(parent_pair.key.value) - ) { - const option = docsLibrary.getModuleOption( - parent_pair.key.value, - node.value - ); - if (option) { + if ( + node instanceof Scalar && + new AncestryBuilder(path).parentKey(node.value).get() === node // ensure we look at a key, not value of a Pair + ) { + if (mayBeModule(path)) { + const description = docsLibrary.getModuleDescription(node.value); + if (description) { return { - contents: formatOption(option), + contents: formatDescription(description), }; } } - // Check if module - const description = docsLibrary.getModuleDescription(node.value); - if (description) { - return { - contents: formatDescription(description), - }; + + const modulePath = new AncestryBuilder(path) + .parent(YAMLMap) + .parentKey() + .getPath(); + + if (modulePath && mayBeModule(modulePath)) { + const moduleNode = modulePath[modulePath.length - 1] as Scalar; + if (docsLibrary.isModule(moduleNode.value)) { + const option = docsLibrary.getModuleOption( + moduleNode.value, + node.value + ); + if (option) { + return { + contents: formatOption(option), + }; + } + } } } } diff --git a/server/src/test/data/utils.block.yml b/server/src/test/data/utils.block.yml new file mode 100644 index 000000000..5ed16dc40 --- /dev/null +++ b/server/src/test/data/utils.block.yml @@ -0,0 +1,7 @@ +- name: Block name + become: yes + block: + - name: Task name + lineinfile: + path: some/path + line: line contents diff --git a/server/src/test/utils.test.ts b/server/src/test/utils.test.ts new file mode 100644 index 000000000..3f2a2b9b3 --- /dev/null +++ b/server/src/test/utils.test.ts @@ -0,0 +1,120 @@ +import * as assert from 'assert'; +import * as path from 'path'; +import { promises as fs } from 'fs'; +import { TextDocument } from 'vscode-languageserver-textdocument'; +import { parseAllDocuments } from 'yaml'; +import { Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; +import { AncestryBuilder, getPathAt } from '../utils'; +import { expect } from 'chai'; + +async function getYamlDoc(yamlFile: string) { + const yaml = await fs.readFile( + path.resolve('server', 'src', 'test', 'data', yamlFile), + { + encoding: 'utf8', + } + ); + return TextDocument.create('uri', 'ansible', 1, yaml); +} + +async function getPathInFile( + yamlFile: string, + line: number, + character: number +) { + const textDoc = await getYamlDoc(yamlFile); + const parsedDocs = parseAllDocuments(textDoc.getText()); + return getPathAt( + textDoc, + { line: line - 1, character: character - 1 }, + parsedDocs + ); +} + +describe('utils', () => { + describe('AncestryBuilder', () => { + it('canGetParent', async () => { + const path = await getPathInFile('utils.block.yml', 4, 7); + const node = new AncestryBuilder(path).parent().get(); + expect(node).to.be.an.instanceOf(YAMLMap); + }); + + it('canGetAssertedParent', async () => { + const path = await getPathInFile('utils.block.yml', 4, 7); + const node = new AncestryBuilder(path).parent(YAMLMap).get(); + expect(node).to.be.an.instanceOf(YAMLMap); + }); + + it('canAssertParent', async () => { + const path = await getPathInFile('utils.block.yml', 4, 7); + const node = new AncestryBuilder(path).parent().parent(YAMLMap).get(); + expect(node).to.be.undefined; + }); + + it('canGetAncestor', async () => { + const path = await getPathInFile('utils.block.yml', 4, 7); + const node = new AncestryBuilder(path).parent().parent().get(); + expect(node).to.be.an.instanceOf(YAMLSeq); + }); + + it('canGetKey', async () => { + const path = await getPathInFile('utils.block.yml', 4, 7); + const node = new AncestryBuilder(path).parentKey().get(); + expect(node) + .to.be.an.instanceOf(Scalar) + .to.have.property('value', 'name'); + }); + + it('canGetKeyPath', async () => { + const path = await getPathInFile('utils.block.yml', 4, 7); + const subPath = new AncestryBuilder(path).parentKey().getPath(); + expect(subPath) + .to.be.an.instanceOf(Array) + .to.have.lengthOf(path?.length || 0); + if (subPath) + expect(subPath[subPath.length - 1]) + .to.be.an.instanceOf(Scalar) + .to.have.property('value', 'name'); + }); + + it('canGetAssertedKey', async () => { + const path = await getPathInFile('utils.block.yml', 4, 7); + const node = new AncestryBuilder(path).parentKey('name').get(); + expect(node) + .to.be.an.instanceOf(Scalar) + .to.have.property('value', 'name'); + }); + + it('canGetAssertedRegexKey', async () => { + const path = await getPathInFile('utils.block.yml', 4, 7); + const node = new AncestryBuilder(path).parentKey(/^(name|other)$/).get(); + expect(node) + .to.be.an.instanceOf(Scalar) + .to.have.property('value', 'name'); + }); + + it('canAssertKey', async () => { + const path = await getPathInFile('utils.block.yml', 4, 7); + const node = new AncestryBuilder(path).parentKey('other').get(); + expect(node).to.be.undefined; + }); + + it('canAssertKeyPath', async () => { + const path = await getPathInFile('utils.block.yml', 4, 7); + const subPath = new AncestryBuilder(path).parentKey('other').getPath(); + expect(subPath).to.be.undefined; + }); + + it('canGetAssertedAncestorKey', async () => { + const path = await getPathInFile('utils.block.yml', 4, 7); + const node = new AncestryBuilder(path) + .parent(YAMLMap) + .parent(YAMLSeq) + .parentKey('block') + .get(); + expect(node) + .to.be.an.instanceOf(Scalar) + .to.have.property('value', 'block'); + }); + }); +}); diff --git a/server/src/utils.ts b/server/src/utils.ts index 195a1bd57..180bbcda4 100644 --- a/server/src/utils.ts +++ b/server/src/utils.ts @@ -1,6 +1,6 @@ import { Position, TextDocument } from 'vscode-languageserver-textdocument'; import { Document } from 'yaml'; -import { Node, Pair, YAMLMap, YAMLSeq } from 'yaml/types'; +import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; import * as _ from 'lodash'; export function getPathAt( @@ -43,3 +43,69 @@ export function getPathAtOffset(path: Node[], offset: number): Node[] | null { } return null; } + +export class AncestryBuilder { + private _path: Node[]; + + private _index: number; + + private _returnKey: boolean; + + constructor(path: Node[] | null, index?: number) { + this._path = path || []; + this._index = index || this._path.length - 1; + this._returnKey = false; + } + + parent(type?: typeof Node): AncestryBuilder { + this._index--; + if (this.get() instanceof Pair) { + if (!(type?.prototype instanceof Pair)) { + this._index--; // unless Pair is explicitly requested, we ignore pair when just going up + } + } + if (type) { + if (!(this.get() instanceof type)) { + this._index = Number.MIN_SAFE_INTEGER; + } + } + this._returnKey = false; + return this; + } + + parentKey(key?: string | RegExp): AncestryBuilder { + this._index--; + const node = this.get(); + if (typeof key == 'string') { + key = new RegExp(`^${key}$`); + } + if ( + node instanceof Pair && + node.key instanceof Scalar && + (!key || key.test(node.key.value)) + ) { + this._returnKey = true; + } else { + this._index = Number.MIN_SAFE_INTEGER; + } + return this; + } + + get(): Node | undefined { + const node = this._path[this._index]; + if (this._returnKey && node instanceof Pair) { + return node.key; + } + return node; + } + + getPath(): Node[] | undefined { + if (this._index < 0) return undefined; + const node = this._path[this._index]; + const path = this._path.slice(0, this._index + 1); + if (this._returnKey && node instanceof Pair) { + path.push(node.key); + } + return path; + } +} diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo index 3b5d1d6f6..40d4c8018 100644 --- a/server/tsconfig.tsbuildinfo +++ b/server/tsconfig.tsbuildinfo @@ -477,12 +477,12 @@ "affectsGlobalScope": true }, "./src/utils.ts": { - "version": "41a04c4a8d7266e82251cf03f4b9b0e45fb50dedc1eb95fc87690843bee01c33", - "signature": "d8bfe5fc53b97ae26a0d657b21a4856a2873c3591869bbdc0ac79566e81440f8", + "version": "bda40365865be4cc2f3318794b8f7b97111a4b6efc486cdc63d790196119bcb9", + "signature": "624c5564317d2e2281f14d0f94ee0841431d655f20d9a062a1457d4bb43ce6d2", "affectsGlobalScope": false }, "./src/hoverProvider.ts": { - "version": "e935e75f9fd80f6e110067af0cc10cd70eb16cdfcd94f36a25e1aa2d1696d8a9", + "version": "b437eb163679e61c7eaed7b2e018db3914a3bde58d283054717abad11f7509dd", "signature": "14028932ece44f3c48823c969d5b1bda30f5a0ed08b23db42deb6f187bb2da44", "affectsGlobalScope": false }, @@ -776,6 +776,21 @@ "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", "affectsGlobalScope": false }, + "./node_modules/@types/chai/index.d.ts": { + "version": "267813ae499a9c070ea61bca2d235e31e785181d967e4461719cbcc78a35abfe", + "signature": "267813ae499a9c070ea61bca2d235e31e785181d967e4461719cbcc78a35abfe", + "affectsGlobalScope": true + }, + "./src/test/utils.test.ts": { + "version": "4acd34dc83145f8fbe50ef509d989712ab9d14e337e9de94248a30ed32600ca0", + "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", + "affectsGlobalScope": false + }, + "./node_modules/@types/mocha/index.d.ts": { + "version": "d8cebc259915afa4b2c56b7efcb8056739ec65f4479c1b880ff668eb98654ae7", + "signature": "d8cebc259915afa4b2c56b7efcb8056739ec65f4479c1b880ff668eb98654ae7", + "affectsGlobalScope": true + }, "../node_modules/@types/json-schema/index.d.ts": { "version": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", "signature": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", @@ -1509,6 +1524,16 @@ "./src/hoverProvider.ts", "./src/validationProvider.ts" ], + "./src/test/utils.test.ts": [ + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/path.d.ts", + "./node_modules/@types/chai/index.d.ts", + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", + "./node_modules/yaml/index.d.ts", + "./node_modules/yaml/types.d.ts", + "./src/utils.ts" + ], "./src/utils.ts": [ "./node_modules/@types/lodash/index.d.ts", "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", @@ -2305,6 +2330,7 @@ "../node_modules/typescript/lib/lib.es5.d.ts", "../node_modules/typescript/lib/lib.esnext.intl.d.ts", "./node_modules/@flatten-js/interval-tree/index.d.ts", + "./node_modules/@types/chai/index.d.ts", "./node_modules/@types/lodash/common/array.d.ts", "./node_modules/@types/lodash/common/collection.d.ts", "./node_modules/@types/lodash/common/common.d.ts", @@ -2318,6 +2344,7 @@ "./node_modules/@types/lodash/common/string.d.ts", "./node_modules/@types/lodash/common/util.d.ts", "./node_modules/@types/lodash/index.d.ts", + "./node_modules/@types/mocha/index.d.ts", "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts", @@ -2378,6 +2405,7 @@ "./src/docsParser.ts", "./src/hoverProvider.ts", "./src/server.ts", + "./src/test/utils.test.ts", "./src/utils.ts", "./src/validationProvider.ts" ] From ebbcad360e0fb17c9951044d225738e6e170bf13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Thu, 4 Mar 2021 22:32:28 +0100 Subject: [PATCH 019/558] Implemented completion provider Fixed docsFormatter -> now returning MarkupContent --- server/src/completionProvider.ts | 70 ++++++++++++++++++ server/src/docsFormatter.ts | 20 ++++-- server/src/docsLibrary.ts | 20 ++++++ server/src/hoverProvider.ts | 26 +------ server/src/server.ts | 10 ++- server/src/test/data/utils.block.yml | 8 +++ server/src/test/utils.test.ts | 35 ++++++++- server/src/utils.ts | 74 +++++++++++++++---- server/tsconfig.tsbuildinfo | 103 ++++++++++++++++----------- 9 files changed, 279 insertions(+), 87 deletions(-) create mode 100644 server/src/completionProvider.ts diff --git a/server/src/completionProvider.ts b/server/src/completionProvider.ts new file mode 100644 index 000000000..2c0d80468 --- /dev/null +++ b/server/src/completionProvider.ts @@ -0,0 +1,70 @@ +import { CompletionItem } from 'vscode-languageserver'; +import { Position, TextDocument } from 'vscode-languageserver-textdocument'; +import { parseAllDocuments } from 'yaml'; +import { Pair, Scalar, YAMLMap } from 'yaml/types'; +import { formatDescription, formatOption } from './docsFormatter'; +import { DocsLibrary } from './docsLibrary'; +import { mayBeModule } from './utils'; +import { AncestryBuilder, getPathAt } from './utils'; + +export function doCompletion( + document: TextDocument, + position: Position, + docsLibrary: DocsLibrary +): CompletionItem[] | null { + // we need a newline at the EOF, so that the YAML parser can properly recognize the scope + const yamlDocs = parseAllDocuments(`${document.getText()}\n`); + + // we need inclusive matching, since cursor position is the position of the character right after it + const path = getPathAt(document, position, yamlDocs, true); + if (path) { + const node = path[path.length - 1]; + if (node) { + const modulePath = new AncestryBuilder(path) + .parent(YAMLMap) + .parentKey() + .getPath(); + + if (modulePath && mayBeModule(modulePath)) { + const moduleNode = modulePath[modulePath.length - 1] as Scalar; + if (docsLibrary.isModule(moduleNode.value)) { + const options = docsLibrary.getModuleOptions(moduleNode.value); + + if (options) { + const optionMap = (new AncestryBuilder(modulePath) + .parent(Pair) + .get() as Pair).value as YAMLMap; + const providedOptions = new Set( + optionMap.items.map((pair) => { + if (pair.key && pair.key instanceof Scalar) { + return pair.key.value; + } + }) + ); + const filteredOptions = options?.filter( + (o) => !providedOptions.has(o.name) + ); + + return filteredOptions.map((option) => { + return { + label: option.name, + documentation: formatOption(option), + insertText: atEndOfLine(document, position) + ? `${option.name}: ` + : undefined, + }; + }); + } + } + } + } + } + return null; +} + +function atEndOfLine(document: TextDocument, position: Position): boolean { + const charAfterCursor = `${document.getText()}\n`[ + document.offsetAt(position) + ]; + return charAfterCursor === '\n' || charAfterCursor === '\n'; +} diff --git a/server/src/docsFormatter.ts b/server/src/docsFormatter.ts index 58613b6bd..c7d1e7c65 100644 --- a/server/src/docsFormatter.ts +++ b/server/src/docsFormatter.ts @@ -1,6 +1,10 @@ +import { MarkupContent, MarkupKind } from 'vscode-languageserver'; import { IDescription, IOption } from './docsLibrary'; -export function formatDescription(doc?: IDescription, asList = true): string { +export function formatDescription( + doc?: IDescription, + asList = true +): MarkupContent { let result = ''; if (doc instanceof Array) { const lines: string[] = []; @@ -15,22 +19,28 @@ export function formatDescription(doc?: IDescription, asList = true): string { } else if (typeof doc === 'string') { result += replaceMacros(doc); } - return `${result}\n`; + return { + kind: MarkupKind.Markdown, + value: `${result}\n`, + }; } -export function formatOption(option: IOption): string { +export function formatOption(option: IOption): MarkupContent { const sections: string[] = []; if (option.required) { sections.push('**Required**\n'); } if (option.description) { - sections.push(formatDescription(option.description, false)); + sections.push(formatDescription(option.description, false).value); } if (option.choices) { const formattedChoiceArray = option.choices.map((c) => `\`${c}\``); sections.push(`*Choices*: [${formattedChoiceArray.toString()}]`); } - return sections.join('\n'); + return { + kind: MarkupKind.Markdown, + value: sections.join('\n'), + }; } // TODO: do something with links diff --git a/server/src/docsLibrary.ts b/server/src/docsLibrary.ts index 7fc60eeee..9bb6f5a66 100644 --- a/server/src/docsLibrary.ts +++ b/server/src/docsLibrary.ts @@ -17,11 +17,30 @@ export class DocsLibrary { return doc?.contents.description; } + public getModuleOptions(module: string): IOption[] | undefined { + const doc = this.builtInModules.get(module); + const options = doc?.contents.options; + if (options) { + return Object.entries(options).map( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ([optionName, optionObj]: [string, any]) => { + return { + name: optionName, + description: optionObj.description, + required: !!optionObj.required, + choices: optionObj.choices, + }; + } + ); + } + } + public getModuleOption(module: string, option: string): IOption | undefined { const doc = this.builtInModules.get(module); const optionObj = doc?.contents.options[option]; if (optionObj) { return { + name: option, description: optionObj.description, required: !!optionObj.required, choices: optionObj.choices, @@ -37,6 +56,7 @@ export class DocsLibrary { export type IDescription = string | Array; export interface IOption { + name: string; description?: IDescription; required: boolean; default?: unknown; diff --git a/server/src/hoverProvider.ts b/server/src/hoverProvider.ts index ee6c21584..4bea8c228 100644 --- a/server/src/hoverProvider.ts +++ b/server/src/hoverProvider.ts @@ -4,33 +4,9 @@ import { parseAllDocuments } from 'yaml'; import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; import { formatDescription, formatOption } from './docsFormatter'; import { DocsLibrary } from './docsLibrary'; +import { mayBeModule } from './utils'; import { AncestryBuilder, getPathAt } from './utils'; -const tasksKey = /^(tasks|pre_tasks|post_tasks|block)$/; - -function moduleAncestry(path: Node[]) { - return new AncestryBuilder(path).parent(YAMLMap).parent(YAMLSeq); -} - -function mayBeModule(path: Node[]): boolean { - const taskListPath = new AncestryBuilder(path) - .parent(YAMLMap) - .parent(YAMLSeq) - .getPath(); - if (taskListPath) { - // basic shape of the task list has been found - if (taskListPath.length === 0) { - // case when the task list is at the top level of the document - return true; - } - if (new AncestryBuilder(taskListPath).parentKey(tasksKey).get()) { - // case when a task list is defined explicitly by a keyword - return true; - } - } - return false; -} - export function doHover( document: TextDocument, position: Position, diff --git a/server/src/server.ts b/server/src/server.ts index b9ce229b2..d5b0179d2 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -8,6 +8,7 @@ import { TextDocuments, TextDocumentSyncKind, } from 'vscode-languageserver/node'; +import { doCompletion } from './completionProvider'; import { DocsLibrary } from './docsLibrary'; import { doHover } from './hoverProvider'; import { doValidate } from './validationProvider'; @@ -46,7 +47,7 @@ connection.onInitialize((params: InitializeParams) => { hoverProvider: true, // Tell the client that this server supports code completion. completionProvider: { - resolveProvider: true, + resolveProvider: false, }, }, }; @@ -152,6 +153,13 @@ docsLibrary.initialize().then(() => { } return null; }); + connection.onCompletion((params) => { + const document = documents.get(params.textDocument.uri); + if (document) { + return doCompletion(document, params.position, docsLibrary); + } + return null; + }); }); // Make the text document manager listen on the connection diff --git a/server/src/test/data/utils.block.yml b/server/src/test/data/utils.block.yml index 5ed16dc40..9254f9eb3 100644 --- a/server/src/test/data/utils.block.yml +++ b/server/src/test/data/utils.block.yml @@ -4,4 +4,12 @@ - name: Task name lineinfile: path: some/path + line: line contents + + - name: Task2 name + lineinfile: + path: some_other/path + + line: line2 contents + \ No newline at end of file diff --git a/server/src/test/utils.test.ts b/server/src/test/utils.test.ts index 3f2a2b9b3..1157058aa 100644 --- a/server/src/test/utils.test.ts +++ b/server/src/test/utils.test.ts @@ -23,7 +23,7 @@ async function getPathInFile( character: number ) { const textDoc = await getYamlDoc(yamlFile); - const parsedDocs = parseAllDocuments(textDoc.getText()); + const parsedDocs = parseAllDocuments(`${textDoc.getText()}\n`); // the newline is crucial for completion provider return getPathAt( textDoc, { line: line - 1, character: character - 1 }, @@ -116,5 +116,38 @@ describe('utils', () => { .to.be.an.instanceOf(Scalar) .to.have.property('value', 'block'); }); + + it('canGetIndentationParent', async () => { + const path = await getPathInFile('utils.block.yml', 7, 9); + const node = new AncestryBuilder(path) + .parent() + .parentKey('lineinfile') + .get(); + expect(node) + .to.be.an.instanceOf(Scalar) + .to.have.property('value', 'lineinfile'); + }); + + it('canGetIndentationParentAtEndOfMap', async () => { + const path = await getPathInFile('utils.block.yml', 9, 9); + const node = new AncestryBuilder(path) + .parent() + .parentKey('lineinfile') + .get(); + expect(node) + .to.be.an.instanceOf(Scalar) + .to.have.property('value', 'lineinfile'); + }); + + it('canGetIndentationParentAtEOF', async () => { + const path = await getPathInFile('utils.block.yml', 15, 9); + const node = new AncestryBuilder(path) + .parent() + .parentKey('lineinfile') + .get(); + expect(node) + .to.be.an.instanceOf(Scalar) + .to.have.property('value', 'lineinfile'); + }); }); }); diff --git a/server/src/utils.ts b/server/src/utils.ts index 180bbcda4..66eaa08c6 100644 --- a/server/src/utils.ts +++ b/server/src/utils.ts @@ -6,40 +6,64 @@ import * as _ from 'lodash'; export function getPathAt( document: TextDocument, position: Position, - docs: Document.Parsed[] + docs: Document.Parsed[], + inclusive = false ): Node[] | null { const offset = document.offsetAt(position); - const doc = _.find(docs, (d) => contains(d.contents, offset)); + const doc = _.find(docs, (d) => contains(d.contents, offset, inclusive)); if (doc && doc.contents) { - return getPathAtOffset([doc.contents], offset); + return getPathAtOffset([doc.contents], offset, inclusive); } return null; } -export function contains(node: Node | null, offset: number): boolean { - return !!(node?.range && node.range[0] <= offset && node.range[1] > offset); +export function contains( + node: Node | null, + offset: number, + inclusive: boolean +): boolean { + return !!( + node?.range && + node.range[0] <= offset && + (node.range[1] > offset || (inclusive && node.range[1] >= offset)) + ); } -export function getPathAtOffset(path: Node[], offset: number): Node[] | null { +export function getPathAtOffset( + path: Node[], + offset: number, + inclusive: boolean +): Node[] | null { if (path) { const currentNode = path[path.length - 1]; if (currentNode instanceof YAMLMap) { - let pair = _.find(currentNode.items, (p) => contains(p.key, offset)); + let pair = _.find(currentNode.items, (p) => + contains(p.key, offset, inclusive) + ); if (pair) { - return getPathAtOffset(path.concat(pair, pair.key), offset); + return getPathAtOffset(path.concat(pair, pair.key), offset, inclusive); } - pair = _.find(currentNode.items, (p) => contains(p.value, offset)); + pair = _.find(currentNode.items, (p) => + contains(p.value, offset, inclusive) + ); if (pair) { - return getPathAtOffset(path.concat(pair, pair.value), offset); + return getPathAtOffset( + path.concat(pair, pair.value), + offset, + inclusive + ); } } else if (currentNode instanceof YAMLSeq) { - const item = _.find(currentNode.items, (n) => contains(n, offset)); + const item = _.find(currentNode.items, (n) => + contains(n, offset, inclusive) + ); if (item) { - return getPathAtOffset(path.concat(item), offset); + return getPathAtOffset(path.concat(item), offset, inclusive); } - } else if (contains(currentNode, offset)) { + } else if (contains(currentNode, offset, inclusive)) { return path; } + return path.concat(new Node()); // empty node as indentation marker } return null; } @@ -57,10 +81,10 @@ export class AncestryBuilder { this._returnKey = false; } - parent(type?: typeof Node): AncestryBuilder { + parent(type?: typeof Node | typeof Pair): AncestryBuilder { this._index--; if (this.get() instanceof Pair) { - if (!(type?.prototype instanceof Pair)) { + if (!(type === Pair)) { this._index--; // unless Pair is explicitly requested, we ignore pair when just going up } } @@ -109,3 +133,23 @@ export class AncestryBuilder { return path; } } + +export const tasksKey = /^(tasks|pre_tasks|post_tasks|block)$/; +export function mayBeModule(path: Node[]): boolean { + const taskListPath = new AncestryBuilder(path) + .parent(YAMLMap) + .parent(YAMLSeq) + .getPath(); + if (taskListPath) { + // basic shape of the task list has been found + if (taskListPath.length === 0) { + // case when the task list is at the top level of the document + return true; + } + if (new AncestryBuilder(taskListPath).parentKey(tasksKey).get()) { + // case when a task list is defined explicitly by a keyword + return true; + } + } + return false; +} diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo index 40d4c8018..2ef4b4466 100644 --- a/server/tsconfig.tsbuildinfo +++ b/server/tsconfig.tsbuildinfo @@ -161,41 +161,6 @@ "signature": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd", "affectsGlobalScope": true }, - "./node_modules/yaml/types.d.ts": { - "version": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24", - "signature": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24", - "affectsGlobalScope": false - }, - "./node_modules/yaml/util.d.ts": { - "version": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d", - "signature": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d", - "affectsGlobalScope": false - }, - "./node_modules/yaml/parse-cst.d.ts": { - "version": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd", - "signature": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd", - "affectsGlobalScope": false - }, - "./node_modules/yaml/index.d.ts": { - "version": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", - "signature": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", - "affectsGlobalScope": false - }, - "./src/docsParser.ts": { - "version": "7679730e4c037e3df0a7cd305df2c20ced11a792ddeef9ab4ef14098a0be3ec8", - "signature": "ecc223d28dc821c023c7712e86faadbcca62a914af252641427c9d22cc7bd99a", - "affectsGlobalScope": false - }, - "./src/docsLibrary.ts": { - "version": "807e8944eed6e26970ed1c293e4211ac5d800d27a81de4cf6de80b1b0c8d09a5", - "signature": "75651603cb37c9115f83f3b4e0168d93d6e9eed8c41766dfa1882c6e51a5d59d", - "affectsGlobalScope": false - }, - "./src/docsFormatter.ts": { - "version": "815562666bda7347b93a0e8ee2199806e91fdbeb6e4a48779e6475b15a27387d", - "signature": "eb6a8b480d86b7784743f0e93df6680e9672dab628581c9a1db52da67c828390", - "affectsGlobalScope": false - }, "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": { "version": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", "signature": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", @@ -411,6 +376,41 @@ "signature": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538", "affectsGlobalScope": false }, + "./node_modules/yaml/types.d.ts": { + "version": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24", + "signature": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24", + "affectsGlobalScope": false + }, + "./node_modules/yaml/util.d.ts": { + "version": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d", + "signature": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d", + "affectsGlobalScope": false + }, + "./node_modules/yaml/parse-cst.d.ts": { + "version": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd", + "signature": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd", + "affectsGlobalScope": false + }, + "./node_modules/yaml/index.d.ts": { + "version": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", + "signature": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", + "affectsGlobalScope": false + }, + "./src/docsParser.ts": { + "version": "7679730e4c037e3df0a7cd305df2c20ced11a792ddeef9ab4ef14098a0be3ec8", + "signature": "ecc223d28dc821c023c7712e86faadbcca62a914af252641427c9d22cc7bd99a", + "affectsGlobalScope": false + }, + "./src/docsLibrary.ts": { + "version": "ea43a601b79af4e77a23b1a03cbc15b13a0f78ec54d0eb5516df03449579bf6b", + "signature": "7349ca6a3410401b96ebdfb580ccfd9c2ee6d935f0b35dde0e1bdc94482eb452", + "affectsGlobalScope": false + }, + "./src/docsFormatter.ts": { + "version": "a072e9918cbf6a113524a0d56fa34f7cd8584bf0b7f755ed28d14ba339b91e14", + "signature": "0f153c55e776e5922dca1841dbba76d39c9ce52675db81b189599c1eb2117c04", + "affectsGlobalScope": false + }, "./node_modules/@types/lodash/common/common.d.ts": { "version": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc", "signature": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc", @@ -477,12 +477,17 @@ "affectsGlobalScope": true }, "./src/utils.ts": { - "version": "bda40365865be4cc2f3318794b8f7b97111a4b6efc486cdc63d790196119bcb9", - "signature": "624c5564317d2e2281f14d0f94ee0841431d655f20d9a062a1457d4bb43ce6d2", + "version": "60a3193784a6c0f4b6d39ef4a0a15c341b9ab69ec8a3023a14585f2560e15786", + "signature": "7dc80f76c84c260a67073e85bd7d455330c09f8bb540a9d904a25382c5113ed0", + "affectsGlobalScope": false + }, + "./src/completionProvider.ts": { + "version": "134a4eed525da309fe2d6b887008a0a6e7b7f815208f10414a9a16e24f20a763", + "signature": "1d9b5063ca708d4b5f3e722b57f7c3d156b4eda96cc9b053e9fb64673586d102", "affectsGlobalScope": false }, "./src/hoverProvider.ts": { - "version": "b437eb163679e61c7eaed7b2e018db3914a3bde58d283054717abad11f7509dd", + "version": "11967ff590c2cf717e9b78b53ce75bc9e0abe707d99da60d1e3c015ad583a116", "signature": "14028932ece44f3c48823c969d5b1bda30f5a0ed08b23db42deb6f187bb2da44", "affectsGlobalScope": false }, @@ -772,7 +777,7 @@ "affectsGlobalScope": false }, "./src/server.ts": { - "version": "a0f0565e0894362cd3ccdf84c364e5123da270fa5b41f2420e62ef1035add39e", + "version": "39932e6f24d89eae67ee46eb65aae4b82e03863b060a4f90a2c9a20f03e38619", "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", "affectsGlobalScope": false }, @@ -782,7 +787,7 @@ "affectsGlobalScope": true }, "./src/test/utils.test.ts": { - "version": "4acd34dc83145f8fbe50ef509d989712ab9d14e337e9de94248a30ed32600ca0", + "version": "42e6d94bc31f32203bae378b204c36e8b0915ffb524b6af1214e03eda31fdd94", "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", "affectsGlobalScope": false }, @@ -1495,7 +1500,17 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts" ], + "./src/completionProvider.ts": [ + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", + "./node_modules/vscode-languageserver/lib/common/api.d.ts", + "./node_modules/yaml/index.d.ts", + "./node_modules/yaml/types.d.ts", + "./src/docsFormatter.ts", + "./src/docsLibrary.ts", + "./src/utils.ts" + ], "./src/docsFormatter.ts": [ + "./node_modules/vscode-languageserver/lib/common/api.d.ts", "./src/docsLibrary.ts" ], "./src/docsLibrary.ts": [ @@ -1520,6 +1535,7 @@ "./src/server.ts": [ "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/vscode-languageserver/node.d.ts", + "./src/completionProvider.ts", "./src/docsLibrary.ts", "./src/hoverProvider.ts", "./src/validationProvider.ts" @@ -2226,7 +2242,13 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts" ], + "./src/completionProvider.ts": [ + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", + "./node_modules/vscode-languageserver/lib/common/api.d.ts", + "./src/docsLibrary.ts" + ], "./src/docsFormatter.ts": [ + "./node_modules/vscode-languageserver/lib/common/api.d.ts", "./src/docsLibrary.ts" ], "./src/docsParser.ts": [ @@ -2400,6 +2422,7 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts", "./node_modules/yaml/util.d.ts", + "./src/completionProvider.ts", "./src/docsFormatter.ts", "./src/docsLibrary.ts", "./src/docsParser.ts", From 4ad6c727db4b3880535d2ca0e02005893a1eb323 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Wed, 17 Mar 2021 22:39:37 +0100 Subject: [PATCH 020/558] Initial take on Ansible Config --- server/package-lock.json | 11 +++++++++++ server/package.json | 6 ++++-- server/src/ansibleConfig.ts | 38 +++++++++++++++++++++++++++++++++++++ server/src/docsLibrary.ts | 10 ++++++++++ server/src/server.ts | 7 ++++++- server/src/utils.ts | 6 +++--- server/tsconfig.tsbuildinfo | 30 +++++++++++++++++++++++++---- 7 files changed, 98 insertions(+), 10 deletions(-) create mode 100644 server/src/ansibleConfig.ts diff --git a/server/package-lock.json b/server/package-lock.json index 796eb2ba8..47bbc8bc9 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -15,6 +15,12 @@ "integrity": "sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ==", "dev": true }, + "@types/ini": { + "version": "1.3.30", + "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz", + "integrity": "sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ==", + "dev": true + }, "@types/lodash": { "version": "4.14.168", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", @@ -423,6 +429,11 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", diff --git a/server/package.json b/server/package.json index 0bdc653d5..2cb5082b6 100644 --- a/server/package.json +++ b/server/package.json @@ -22,13 +22,15 @@ "mocha": "^8.3.0", "ts-node": "^9.1.1", "@types/chai": "^4.2.15", - "@types/mocha": "^8.2.1" + "@types/mocha": "^8.2.1", + "@types/ini": "^1.3.30" }, "dependencies": { "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.1", "lodash": "^4.17.21", "yaml": "^1.10.0", - "@flatten-js/interval-tree": "^1.0.13" + "@flatten-js/interval-tree": "^1.0.13", + "ini": "^1.3.8" } } diff --git a/server/src/ansibleConfig.ts b/server/src/ansibleConfig.ts new file mode 100644 index 000000000..a842d2308 --- /dev/null +++ b/server/src/ansibleConfig.ts @@ -0,0 +1,38 @@ +import { promises as fs } from 'fs'; +import * as ini from 'ini'; +import * as path from 'path'; + +export class AnsibleConfig { + private _config_file_locations = ['ansible.cfg']; + + private _collections_paths = [ + '~/.ansible/collections', + '/usr/share/ansible/collections', + ]; + + public async initialize(workspacePath: string): Promise { + for (const location of this._config_file_locations) { + const cfgPath = path.resolve(workspacePath, location); + if (fileExists(cfgPath)) { + await this.parseConfig(cfgPath); + break; + } + } + } + + private async parseConfig(cfgPath: string) { + const config = ini.parse(await fs.readFile(cfgPath, { encoding: 'utf-8' })); + const collections_paths = config?.default.collections_paths; + if (collections_paths && typeof collections_paths === 'string') { + this._collections_paths = collections_paths.split(':'); + } + } + + get collections_paths(): string[] { + return this._collections_paths; + } +} + +async function fileExists(filePath: string): Promise { + return !!(await fs.stat(filePath).catch(() => false)); +} diff --git a/server/src/docsLibrary.ts b/server/src/docsLibrary.ts index 9bb6f5a66..270ee7c3c 100644 --- a/server/src/docsLibrary.ts +++ b/server/src/docsLibrary.ts @@ -1,9 +1,19 @@ import { DocsParser, IDocumentation } from './docsParser'; import * as path from 'path'; +import { WorkspaceFolder } from 'vscode-languageserver'; +import { AnsibleConfig } from './ansibleConfig'; export class DocsLibrary { private builtInModules = new Map(); + // private config: AnsibleConfig = null; + private _workspace; + + constructor(workspace?: WorkspaceFolder) { + this._workspace = workspace; + } public async initialize(): Promise { + // this._workspace.uri; + const ansibleLibPath = '/usr/local/lib/python3.6/dist-packages/ansible'; const modulesPath = path.join(ansibleLibPath, 'modules'); const docs = await DocsParser.parseDirectory(modulesPath); diff --git a/server/src/server.ts b/server/src/server.ts index d5b0179d2..97b7f32ef 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -7,6 +7,7 @@ import { ProposedFeatures, TextDocuments, TextDocumentSyncKind, + WorkspaceFolder, } from 'vscode-languageserver/node'; import { doCompletion } from './completionProvider'; import { DocsLibrary } from './docsLibrary'; @@ -20,11 +21,15 @@ const connection = createConnection(ProposedFeatures.all); // Create a simple text document manager. const documents: TextDocuments = new TextDocuments(TextDocument); +let rootFolder: WorkspaceFolder | undefined; let hasConfigurationCapability = false; let hasWorkspaceFolderCapability = false; let hasDiagnosticRelatedInformationCapability = false; connection.onInitialize((params: InitializeParams) => { + if (params.workspaceFolders) { + rootFolder = params.workspaceFolders[0]; //TODO: support multiroot + } const capabilities = params.capabilities; // Does the client support the `workspace/configuration` request? @@ -144,7 +149,7 @@ connection.onDidChangeWatchedFiles((_change) => { connection.console.log('We received a file change event'); }); -const docsLibrary = new DocsLibrary(); +const docsLibrary = new DocsLibrary(rootFolder); docsLibrary.initialize().then(() => { connection.onHover((params) => { const document = documents.get(params.textDocument.uri); diff --git a/server/src/utils.ts b/server/src/utils.ts index 66eaa08c6..30f6de7e8 100644 --- a/server/src/utils.ts +++ b/server/src/utils.ts @@ -106,7 +106,7 @@ export class AncestryBuilder { if ( node instanceof Pair && node.key instanceof Scalar && - (!key || key.test(node.key.value)) + (!key || (key instanceof RegExp && key.test(node.key.value))) ) { this._returnKey = true; } else { @@ -134,7 +134,7 @@ export class AncestryBuilder { } } -export const tasksKey = /^(tasks|pre_tasks|post_tasks|block)$/; +export const tasksKey = /^(tasks|pre_tasks|post_tasks|block|rescue|always)$/; export function mayBeModule(path: Node[]): boolean { const taskListPath = new AncestryBuilder(path) .parent(YAMLMap) @@ -142,7 +142,7 @@ export function mayBeModule(path: Node[]): boolean { .getPath(); if (taskListPath) { // basic shape of the task list has been found - if (taskListPath.length === 0) { + if (taskListPath.length === 1) { // case when the task list is at the top level of the document return true; } diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo index 2ef4b4466..459384a5c 100644 --- a/server/tsconfig.tsbuildinfo +++ b/server/tsconfig.tsbuildinfo @@ -161,6 +161,16 @@ "signature": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd", "affectsGlobalScope": true }, + "./node_modules/@types/ini/index.d.ts": { + "version": "3cc26d1f94c768ae2896d3900ffa268e0657a332b399e94c1fb52da1f9e07625", + "signature": "3cc26d1f94c768ae2896d3900ffa268e0657a332b399e94c1fb52da1f9e07625", + "affectsGlobalScope": false + }, + "./src/ansibleConfig.ts": { + "version": "908e0256743ded962a968ddf7b9cf97d38521bf3a720693277b5bb06b9f51d2e", + "signature": "9266b05f00ee02ff2816d0e87bb2dfe9a69416b75ac44d6a51d18df377cb8938", + "affectsGlobalScope": false + }, "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": { "version": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", "signature": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", @@ -402,8 +412,8 @@ "affectsGlobalScope": false }, "./src/docsLibrary.ts": { - "version": "ea43a601b79af4e77a23b1a03cbc15b13a0f78ec54d0eb5516df03449579bf6b", - "signature": "7349ca6a3410401b96ebdfb580ccfd9c2ee6d935f0b35dde0e1bdc94482eb452", + "version": "e7e91b76d54349260bc3a2f61a49a092126b0b7e0068d6110e92c4193419ccca", + "signature": "691208ca2a7c84f7a273e735e701a2708535d93f85e7a31d02578466a9fddda7", "affectsGlobalScope": false }, "./src/docsFormatter.ts": { @@ -477,7 +487,7 @@ "affectsGlobalScope": true }, "./src/utils.ts": { - "version": "60a3193784a6c0f4b6d39ef4a0a15c341b9ab69ec8a3023a14585f2560e15786", + "version": "0b8870cc133814bb5d74284e4d24496772577e94dc9062fdf31222f11d76670e", "signature": "7dc80f76c84c260a67073e85bd7d455330c09f8bb540a9d904a25382c5113ed0", "affectsGlobalScope": false }, @@ -777,7 +787,7 @@ "affectsGlobalScope": false }, "./src/server.ts": { - "version": "39932e6f24d89eae67ee46eb65aae4b82e03863b060a4f90a2c9a20f03e38619", + "version": "3ef86b921a4e5b4e7ab5e0a6d2090fa57ba89eecd94e48a51e0f56eda1816fcf", "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", "affectsGlobalScope": false }, @@ -1500,6 +1510,11 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts" ], + "./src/ansibleConfig.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/path.d.ts", + "./node_modules/@types/ini/index.d.ts" + ], "./src/completionProvider.ts": [ "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/vscode-languageserver/lib/common/api.d.ts", @@ -1515,6 +1530,8 @@ ], "./src/docsLibrary.ts": [ "../node_modules/@types/node/path.d.ts", + "./node_modules/vscode-languageserver/lib/common/api.d.ts", + "./src/ansibleConfig.ts", "./src/docsParser.ts" ], "./src/docsParser.ts": [ @@ -2251,6 +2268,9 @@ "./node_modules/vscode-languageserver/lib/common/api.d.ts", "./src/docsLibrary.ts" ], + "./src/docsLibrary.ts": [ + "./node_modules/vscode-languageserver/lib/common/api.d.ts" + ], "./src/docsParser.ts": [ "./node_modules/yaml/util.d.ts" ], @@ -2353,6 +2373,7 @@ "../node_modules/typescript/lib/lib.esnext.intl.d.ts", "./node_modules/@flatten-js/interval-tree/index.d.ts", "./node_modules/@types/chai/index.d.ts", + "./node_modules/@types/ini/index.d.ts", "./node_modules/@types/lodash/common/array.d.ts", "./node_modules/@types/lodash/common/collection.d.ts", "./node_modules/@types/lodash/common/common.d.ts", @@ -2422,6 +2443,7 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts", "./node_modules/yaml/util.d.ts", + "./src/ansibleConfig.ts", "./src/completionProvider.ts", "./src/docsFormatter.ts", "./src/docsLibrary.ts", From cd12e902b51c62530e6af67f94b08b1642079e77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Wed, 17 Mar 2021 22:40:39 +0100 Subject: [PATCH 021/558] Using Ansible CLI as config source --- server/src/ansibleConfig.ts | 89 +++++++++++++++----- server/src/docsLibrary.ts | 44 ++++++---- server/src/docsParser.ts | 16 +++- server/src/server.ts | 11 ++- server/tsconfig.tsbuildinfo | 159 +++++++++++++++++++----------------- 5 files changed, 205 insertions(+), 114 deletions(-) diff --git a/server/src/ansibleConfig.ts b/server/src/ansibleConfig.ts index a842d2308..b8489847f 100644 --- a/server/src/ansibleConfig.ts +++ b/server/src/ansibleConfig.ts @@ -1,36 +1,83 @@ import { promises as fs } from 'fs'; import * as ini from 'ini'; import * as path from 'path'; +import * as _ from 'lodash'; +import * as child_process from 'child_process'; +import { promisify } from 'node:util'; +import { _Connection } from 'vscode-languageserver'; +import { SpawnSyncReturns } from 'node:child_process'; + +// const exec = promisify(child_process.exec); export class AnsibleConfig { - private _config_file_locations = ['ansible.cfg']; - - private _collections_paths = [ - '~/.ansible/collections', - '/usr/share/ansible/collections', - ]; - - public async initialize(workspacePath: string): Promise { - for (const location of this._config_file_locations) { - const cfgPath = path.resolve(workspacePath, location); - if (fileExists(cfgPath)) { - await this.parseConfig(cfgPath); - break; - } - } + private _connection: _Connection; + private _collection_paths: string[] = []; + private _module_locations: string[] = []; + + constructor(connection: _Connection) { + this._connection = connection; } - private async parseConfig(cfgPath: string) { - const config = ini.parse(await fs.readFile(cfgPath, { encoding: 'utf-8' })); - const collections_paths = config?.default.collections_paths; - if (collections_paths && typeof collections_paths === 'string') { - this._collections_paths = collections_paths.split(':'); + public async initialize(workspacePath?: string): Promise { + try { + const ansibleConfigResult = child_process.execSync( + 'ansible-config dump', + { + encoding: 'utf-8', + } + ); + let config = ini.parse(ansibleConfigResult); + config = _.mapKeys( + config, + (_, key) => key.substring(0, key.indexOf('(')) // remove config source in parenthesis + ); + this._collection_paths = parsePythonStringArray(config.COLLECTIONS_PATHS); + + const ansibleVersionResult = child_process.execSync('ansible --version', { + encoding: 'utf-8', + }); + const versionInfo = ini.parse(ansibleVersionResult); + this._module_locations = parsePythonStringArray( + versionInfo['configured module search path'] + ); + this._module_locations.push( + path.resolve(versionInfo['ansible python module location'], 'modules') + ); + } catch (error) { + this._connection.console.error( + (error as SpawnSyncReturns).stderr + ); } + // for (const location of this._config_file_locations) { + // const cfgPath = path.resolve(workspacePath, location); + // if (fileExists(cfgPath)) { + // await this.parseConfig(cfgPath); + // break; + // } + // } } + // private async parseConfig(cfgPath: string) { + // const config = ini.parse(await fs.readFile(cfgPath, { encoding: 'utf-8' })); + // const collections_paths = config?.default.collections_paths; + // if (collections_paths && typeof collections_paths === 'string') { + // this._collections_paths = collections_paths.split(':'); + // } + // } + get collections_paths(): string[] { - return this._collections_paths; + return this._collection_paths; } + + get module_locations(): string[] { + return this._module_locations; + } +} + +function parsePythonStringArray(array: string) { + array = array.slice(1, array.length - 1); // remove [] + const quoted_elements = array.split(',').map((e) => e.trim()); + return quoted_elements.map((e) => e.slice(1, e.length - 1)); } async function fileExists(filePath: string): Promise { diff --git a/server/src/docsLibrary.ts b/server/src/docsLibrary.ts index 270ee7c3c..ed63d555f 100644 --- a/server/src/docsLibrary.ts +++ b/server/src/docsLibrary.ts @@ -1,34 +1,48 @@ -import { DocsParser, IDocumentation } from './docsParser'; +import { + collectionModuleFilter, + DocsParser, + IDocumentation, +} from './docsParser'; import * as path from 'path'; import { WorkspaceFolder } from 'vscode-languageserver'; import { AnsibleConfig } from './ansibleConfig'; export class DocsLibrary { - private builtInModules = new Map(); - // private config: AnsibleConfig = null; - private _workspace; + private _builtInModules = new Map(); + private _collectionModules = new Map(); + private _config: AnsibleConfig; + private _workspace: WorkspaceFolder | undefined; - constructor(workspace?: WorkspaceFolder) { + constructor(config: AnsibleConfig, workspace?: WorkspaceFolder) { + this._config = config; this._workspace = workspace; } public async initialize(): Promise { // this._workspace.uri; - - const ansibleLibPath = '/usr/local/lib/python3.6/dist-packages/ansible'; - const modulesPath = path.join(ansibleLibPath, 'modules'); - const docs = await DocsParser.parseDirectory(modulesPath); - docs.forEach((doc) => { - this.builtInModules.set(doc.module, doc); + this._config.module_locations.forEach(async (modulesPath) => { + const docs = await DocsParser.parseDirectory(modulesPath); + docs.forEach((doc) => { + this._builtInModules.set(doc.module, doc); + }); + }); + this._config.collections_paths.forEach(async (collectionsPath) => { + const docs = await DocsParser.parseDirectory( + collectionsPath, + collectionModuleFilter(collectionsPath) + ); + docs.forEach((doc) => { + this._collectionModules.set(doc.module, doc); + }); }); } public getModuleDescription(module: string): IDescription | undefined { - const doc = this.builtInModules.get(module); + const doc = this._builtInModules.get(module); return doc?.contents.description; } public getModuleOptions(module: string): IOption[] | undefined { - const doc = this.builtInModules.get(module); + const doc = this._builtInModules.get(module); const options = doc?.contents.options; if (options) { return Object.entries(options).map( @@ -46,7 +60,7 @@ export class DocsLibrary { } public getModuleOption(module: string, option: string): IOption | undefined { - const doc = this.builtInModules.get(module); + const doc = this._builtInModules.get(module); const optionObj = doc?.contents.options[option]; if (optionObj) { return { @@ -59,7 +73,7 @@ export class DocsLibrary { } public isModule(module: string): boolean { - return this.builtInModules.has(module); + return this._builtInModules.has(module); } } diff --git a/server/src/docsParser.ts b/server/src/docsParser.ts index cdc5d122b..87f211dc4 100644 --- a/server/src/docsParser.ts +++ b/server/src/docsParser.ts @@ -6,10 +6,13 @@ import { YAMLError } from 'yaml/util'; export class DocsParser { private static docsRegex = /\s*DOCUMENTATION\s*=\s*r?('''|""")(?:\n---)?\n?(?.*?)\1/s; - public static async parseDirectory(dir: string): Promise { + public static async parseDirectory( + dir: string, + filter: (value: string) => unknown = () => true + ): Promise { const files = await this._getFiles(dir); return Promise.all( - files.map(async (file) => { + files.filter(filter).map(async (file) => { const contents = await fs.readFile(file, { encoding: 'utf8' }); const m = this.docsRegex.exec(contents); if (m && m.groups && m.groups.doc) { @@ -53,6 +56,15 @@ export class DocsParser { } } +export function collectionModuleFilter( + baseDir: string +): (value: string) => boolean { + return (f: string) => { + const subPathArray = f.substr(baseDir.length).split(path.sep); + return subPathArray[subPathArray.length - 2] === 'modules'; + }; +} + export interface IDocumentation { source: string; module: string; diff --git a/server/src/server.ts b/server/src/server.ts index 97b7f32ef..a9fade13a 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -9,6 +9,7 @@ import { TextDocumentSyncKind, WorkspaceFolder, } from 'vscode-languageserver/node'; +import { AnsibleConfig } from './ansibleConfig'; import { doCompletion } from './completionProvider'; import { DocsLibrary } from './docsLibrary'; import { doHover } from './hoverProvider'; @@ -149,7 +150,15 @@ connection.onDidChangeWatchedFiles((_change) => { connection.console.log('We received a file change event'); }); -const docsLibrary = new DocsLibrary(rootFolder); +setTimeout(() => { + const ansibleConfig = new AnsibleConfig(connection); + ansibleConfig.initialize(rootFolder?.uri); +}, 5000); + +const ansibleConfig = new AnsibleConfig(connection); +ansibleConfig.initialize(rootFolder?.uri); + +const docsLibrary = new DocsLibrary(ansibleConfig, rootFolder); docsLibrary.initialize().then(() => { connection.onHover((params) => { const document = documents.get(params.textDocument.uri); diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo index 459384a5c..16857a0cd 100644 --- a/server/tsconfig.tsbuildinfo +++ b/server/tsconfig.tsbuildinfo @@ -166,11 +166,71 @@ "signature": "3cc26d1f94c768ae2896d3900ffa268e0657a332b399e94c1fb52da1f9e07625", "affectsGlobalScope": false }, - "./src/ansibleConfig.ts": { - "version": "908e0256743ded962a968ddf7b9cf97d38521bf3a720693277b5bb06b9f51d2e", - "signature": "9266b05f00ee02ff2816d0e87bb2dfe9a69416b75ac44d6a51d18df377cb8938", + "./node_modules/@types/lodash/common/common.d.ts": { + "version": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc", + "signature": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/array.d.ts": { + "version": "438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2", + "signature": "438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/collection.d.ts": { + "version": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8", + "signature": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/date.d.ts": { + "version": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42", + "signature": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/function.d.ts": { + "version": "c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe", + "signature": "c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/lang.d.ts": { + "version": "509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32", + "signature": "509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32", "affectsGlobalScope": false }, + "./node_modules/@types/lodash/common/math.d.ts": { + "version": "9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb", + "signature": "9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/number.d.ts": { + "version": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a", + "signature": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/object.d.ts": { + "version": "c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793", + "signature": "c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/seq.d.ts": { + "version": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd", + "signature": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/string.d.ts": { + "version": "4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a", + "signature": "4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/common/util.d.ts": { + "version": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5", + "signature": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5", + "affectsGlobalScope": false + }, + "./node_modules/@types/lodash/index.d.ts": { + "version": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8", + "signature": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8", + "affectsGlobalScope": true + }, "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": { "version": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", "signature": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba", @@ -381,6 +441,11 @@ "signature": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081", "affectsGlobalScope": false }, + "./src/ansibleConfig.ts": { + "version": "abd05e7369fd44156b53bb8a5494df8cdbe0cc194eab0764f6d06e5e96418743", + "signature": "c42f1825b97bf1b2b8debd53aeb3e0c59079f02bf097fd146d4f1cd5e9b0f579", + "affectsGlobalScope": false + }, "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts": { "version": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538", "signature": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538", @@ -407,13 +472,13 @@ "affectsGlobalScope": false }, "./src/docsParser.ts": { - "version": "7679730e4c037e3df0a7cd305df2c20ced11a792ddeef9ab4ef14098a0be3ec8", - "signature": "ecc223d28dc821c023c7712e86faadbcca62a914af252641427c9d22cc7bd99a", + "version": "5966d116febd4955e3ea7d97446c54f9fcc289072ed3022552e07d71243fac5d", + "signature": "0c2afb12b1d55a14d57eaa5f83120c92b4f2033a4c5f7368efa18a3916ef84a1", "affectsGlobalScope": false }, "./src/docsLibrary.ts": { - "version": "e7e91b76d54349260bc3a2f61a49a092126b0b7e0068d6110e92c4193419ccca", - "signature": "691208ca2a7c84f7a273e735e701a2708535d93f85e7a31d02578466a9fddda7", + "version": "29207ae039f0b7c1faec1872ca01e4734fe4bcf0e4695434c68e039a98803eb5", + "signature": "0fe06f87bfe517d686fe57a64e6e4f29b3d6a7b61a6e1749d5247e468f25153a", "affectsGlobalScope": false }, "./src/docsFormatter.ts": { @@ -421,71 +486,6 @@ "signature": "0f153c55e776e5922dca1841dbba76d39c9ce52675db81b189599c1eb2117c04", "affectsGlobalScope": false }, - "./node_modules/@types/lodash/common/common.d.ts": { - "version": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc", - "signature": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc", - "affectsGlobalScope": false - }, - "./node_modules/@types/lodash/common/array.d.ts": { - "version": "438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2", - "signature": "438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2", - "affectsGlobalScope": false - }, - "./node_modules/@types/lodash/common/collection.d.ts": { - "version": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8", - "signature": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8", - "affectsGlobalScope": false - }, - "./node_modules/@types/lodash/common/date.d.ts": { - "version": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42", - "signature": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42", - "affectsGlobalScope": false - }, - "./node_modules/@types/lodash/common/function.d.ts": { - "version": "c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe", - "signature": "c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe", - "affectsGlobalScope": false - }, - "./node_modules/@types/lodash/common/lang.d.ts": { - "version": "509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32", - "signature": "509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32", - "affectsGlobalScope": false - }, - "./node_modules/@types/lodash/common/math.d.ts": { - "version": "9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb", - "signature": "9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb", - "affectsGlobalScope": false - }, - "./node_modules/@types/lodash/common/number.d.ts": { - "version": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a", - "signature": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a", - "affectsGlobalScope": false - }, - "./node_modules/@types/lodash/common/object.d.ts": { - "version": "c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793", - "signature": "c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793", - "affectsGlobalScope": false - }, - "./node_modules/@types/lodash/common/seq.d.ts": { - "version": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd", - "signature": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd", - "affectsGlobalScope": false - }, - "./node_modules/@types/lodash/common/string.d.ts": { - "version": "4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a", - "signature": "4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a", - "affectsGlobalScope": false - }, - "./node_modules/@types/lodash/common/util.d.ts": { - "version": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5", - "signature": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5", - "affectsGlobalScope": false - }, - "./node_modules/@types/lodash/index.d.ts": { - "version": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8", - "signature": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8", - "affectsGlobalScope": true - }, "./src/utils.ts": { "version": "0b8870cc133814bb5d74284e4d24496772577e94dc9062fdf31222f11d76670e", "signature": "7dc80f76c84c260a67073e85bd7d455330c09f8bb540a9d904a25382c5113ed0", @@ -787,7 +787,7 @@ "affectsGlobalScope": false }, "./src/server.ts": { - "version": "3ef86b921a4e5b4e7ab5e0a6d2090fa57ba89eecd94e48a51e0f56eda1816fcf", + "version": "c22c60ac847142bc82d2c6450135cf7db2ff6dab180c2adcc049ebbf91fc9f78", "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", "affectsGlobalScope": false }, @@ -1511,9 +1511,13 @@ "./node_modules/yaml/types.d.ts" ], "./src/ansibleConfig.ts": [ + "../node_modules/@types/node/child_process.d.ts", "../node_modules/@types/node/fs.d.ts", "../node_modules/@types/node/path.d.ts", - "./node_modules/@types/ini/index.d.ts" + "../node_modules/@types/node/util.d.ts", + "./node_modules/@types/ini/index.d.ts", + "./node_modules/@types/lodash/index.d.ts", + "./node_modules/vscode-languageserver/lib/common/api.d.ts" ], "./src/completionProvider.ts": [ "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", @@ -1552,6 +1556,7 @@ "./src/server.ts": [ "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/vscode-languageserver/node.d.ts", + "./src/ansibleConfig.ts", "./src/completionProvider.ts", "./src/docsLibrary.ts", "./src/hoverProvider.ts", @@ -2259,6 +2264,9 @@ "./node_modules/yaml/parse-cst.d.ts", "./node_modules/yaml/types.d.ts" ], + "./src/ansibleConfig.ts": [ + "./node_modules/vscode-languageserver/lib/common/api.d.ts" + ], "./src/completionProvider.ts": [ "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/vscode-languageserver/lib/common/api.d.ts", @@ -2269,7 +2277,8 @@ "./src/docsLibrary.ts" ], "./src/docsLibrary.ts": [ - "./node_modules/vscode-languageserver/lib/common/api.d.ts" + "./node_modules/vscode-languageserver/lib/common/api.d.ts", + "./src/ansibleConfig.ts" ], "./src/docsParser.ts": [ "./node_modules/yaml/util.d.ts" From 7d04806fbc5d1fd94eb67fe5235ee4e9259fc8ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Thu, 18 Mar 2021 22:17:49 +0100 Subject: [PATCH 022/558] Implemented metadata discovery and collection parsing Fixed completion for the first line line of module options. --- server/src/completionProvider.ts | 22 +++++++++-- server/src/docsLibrary.ts | 14 +++---- server/src/docsParser.ts | 47 ++++++++++++++++++++--- server/src/documentMeta.ts | 3 ++ server/src/server.ts | 13 ++++--- server/src/utils.ts | 65 +++++++++++++++++++++++++++++++- server/tsconfig.tsbuildinfo | 32 +++++++++++----- 7 files changed, 164 insertions(+), 32 deletions(-) create mode 100644 server/src/documentMeta.ts diff --git a/server/src/completionProvider.ts b/server/src/completionProvider.ts index 2c0d80468..be03f6172 100644 --- a/server/src/completionProvider.ts +++ b/server/src/completionProvider.ts @@ -12,10 +12,20 @@ export function doCompletion( position: Position, docsLibrary: DocsLibrary ): CompletionItem[] | null { - // we need a newline at the EOF, so that the YAML parser can properly recognize the scope - const yamlDocs = parseAllDocuments(`${document.getText()}\n`); + let preparedText = document.getText(); + const offset = document.offsetAt(position); + // HACK: We need to insert a dummy character, so that the YAML parser can properly recognize the scope. + // This is particularly important when parser has nothing more than + // indentation to determine the scope of the current line. `_:` is ok here, + // since we expect to work on a Pair level + preparedText = insert(preparedText, offset, '_:'); + // We need a newline at the EOF, so that the YAML parser can properly recognize the scope + // This is for future case when we might need to avoid the dummy character + preparedText = `${preparedText}\n`; + const yamlDocs = parseAllDocuments(preparedText); - // we need inclusive matching, since cursor position is the position of the character right after it + // We need inclusive matching, since cursor position is the position of the character right after it + // NOTE: Might no longer be required due to the hack above const path = getPathAt(document, position, yamlDocs, true); if (path) { const node = path[path.length - 1]; @@ -62,9 +72,13 @@ export function doCompletion( return null; } +function insert(str: string, index: number, val: string) { + return `${str.substring(0, index)}${val}${str.substring(index)}`; +} + function atEndOfLine(document: TextDocument, position: Position): boolean { const charAfterCursor = `${document.getText()}\n`[ document.offsetAt(position) ]; - return charAfterCursor === '\n' || charAfterCursor === '\n'; + return charAfterCursor === '\n' || charAfterCursor === '\r'; } diff --git a/server/src/docsLibrary.ts b/server/src/docsLibrary.ts index ed63d555f..dffbb6c24 100644 --- a/server/src/docsLibrary.ts +++ b/server/src/docsLibrary.ts @@ -1,14 +1,14 @@ import { collectionModuleFilter, DocsParser, - IDocumentation, + IModuleDocumentation, } from './docsParser'; import * as path from 'path'; import { WorkspaceFolder } from 'vscode-languageserver'; import { AnsibleConfig } from './ansibleConfig'; export class DocsLibrary { - private _builtInModules = new Map(); - private _collectionModules = new Map(); + private _builtInModules = new Map(); + private _collectionModules = new Map(); private _config: AnsibleConfig; private _workspace: WorkspaceFolder | undefined; @@ -20,18 +20,18 @@ export class DocsLibrary { public async initialize(): Promise { // this._workspace.uri; this._config.module_locations.forEach(async (modulesPath) => { - const docs = await DocsParser.parseDirectory(modulesPath); + const docs = await DocsParser.parseDirectory(modulesPath, 'builtin'); docs.forEach((doc) => { - this._builtInModules.set(doc.module, doc); + this._builtInModules.set(doc.name, doc); }); }); this._config.collections_paths.forEach(async (collectionsPath) => { const docs = await DocsParser.parseDirectory( collectionsPath, - collectionModuleFilter(collectionsPath) + 'collection' ); docs.forEach((doc) => { - this._collectionModules.set(doc.module, doc); + this._collectionModules.set(doc.name, doc); }); }); } diff --git a/server/src/docsParser.ts b/server/src/docsParser.ts index 87f211dc4..e6732d1ad 100644 --- a/server/src/docsParser.ts +++ b/server/src/docsParser.ts @@ -8,9 +8,21 @@ export class DocsParser { public static async parseDirectory( dir: string, - filter: (value: string) => unknown = () => true - ): Promise { + kind: 'builtin' | 'collection' + ): Promise { const files = await this._getFiles(dir); + let filter; + switch (kind) { + case 'builtin': + filter = () => true; + break; + case 'collection': + filter = (f: string) => { + const subPathArray = f.substr(dir.length).split(path.sep); + return subPathArray[subPathArray.length - 2] === 'modules'; + }; + break; + } return Promise.all( files.filter(filter).map(async (file) => { const contents = await fs.readFile(file, { encoding: 'utf8' }); @@ -20,9 +32,27 @@ export class DocsParser { // There's about 20 modules (out of ~3200) in Ansible 2.9 libs that contain YAML syntax errors // Still, document.toJSON() works on them const contents = document.toJSON(); + const name = contents.module as string; + let namespace; + let collection; + switch (kind) { + case 'builtin': + namespace = 'ansible'; + collection = 'builtin'; + break; + case 'collection': + const subPathArray = file.substr(dir.length).split(path.sep); + namespace = subPathArray[1]; // the first entry is 'ansible_collections' + collection = subPathArray[2]; + break; + } + return { source: file, - module: contents.module as string, + fqcn: `${namespace}.${collection}.${name}`, + namespace: namespace, + collection: collection, + name: name, contents: contents, errors: document.errors, }; @@ -30,7 +60,9 @@ export class DocsParser { }) ).then((results) => { return results.filter( - (i: IDocumentation | null | undefined): i is IDocumentation => !!i + ( + i: IModuleDocumentation | null | undefined + ): i is IModuleDocumentation => !!i ); }); } @@ -65,9 +97,12 @@ export function collectionModuleFilter( }; } -export interface IDocumentation { +export interface IModuleDocumentation { source: string; - module: string; + fqcn: string; + namespace: string; + collection: string; + name: string; contents: any; errors: YAMLError[]; } diff --git a/server/src/documentMeta.ts b/server/src/documentMeta.ts new file mode 100644 index 000000000..fe49629f1 --- /dev/null +++ b/server/src/documentMeta.ts @@ -0,0 +1,3 @@ +export interface DocumentMetadata { + collections: string[]; +} diff --git a/server/src/server.ts b/server/src/server.ts index a9fade13a..41ee04be4 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -12,7 +12,9 @@ import { import { AnsibleConfig } from './ansibleConfig'; import { doCompletion } from './completionProvider'; import { DocsLibrary } from './docsLibrary'; +import { DocumentMetadata } from './documentMeta'; import { doHover } from './hoverProvider'; +import { getAnsibleMetadata } from './utils'; import { doValidate } from './validationProvider'; // Create a connection for the server, using Node's IPC as a transport. @@ -96,6 +98,7 @@ let globalSettings: ExampleSettings = defaultSettings; // Cache the settings of all open documents const documentSettings: Map> = new Map(); +const documentMetadata: Map> = new Map(); connection.onDidChangeConfiguration((change) => { if (hasConfigurationCapability) { @@ -131,9 +134,14 @@ function getDocumentSettings(resource: string): Thenable { return result; } +documents.onDidOpen((e) => { + documentMetadata.set(e.document.uri, getAnsibleMetadata(e.document.uri)); +}); + // Only keep settings for open documents documents.onDidClose((e) => { documentSettings.delete(e.document.uri); + documentMetadata.delete(e.document.uri); }); // The content of a text document has changed. This event is emitted @@ -150,11 +158,6 @@ connection.onDidChangeWatchedFiles((_change) => { connection.console.log('We received a file change event'); }); -setTimeout(() => { - const ansibleConfig = new AnsibleConfig(connection); - ansibleConfig.initialize(rootFolder?.uri); -}, 5000); - const ansibleConfig = new AnsibleConfig(connection); ansibleConfig.initialize(rootFolder?.uri); diff --git a/server/src/utils.ts b/server/src/utils.ts index 30f6de7e8..e42bcb660 100644 --- a/server/src/utils.ts +++ b/server/src/utils.ts @@ -1,7 +1,12 @@ import { Position, TextDocument } from 'vscode-languageserver-textdocument'; -import { Document } from 'yaml'; +import { Document, parseAllDocuments } from 'yaml'; import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; import * as _ from 'lodash'; +import { promises as fs } from 'fs'; +import * as path from 'path'; +import { type } from 'node:os'; +import { DocumentMetadata } from './documentMeta'; +import { URL } from 'url'; export function getPathAt( document: TextDocument, @@ -53,6 +58,18 @@ export function getPathAtOffset( inclusive ); } + pair = _.find(currentNode.items, (p) => { + const inBetweenNode = new Node(); + const start = (p.key as Node).range?.[1]; + const end = (p.value as Node).range?.[0]; + if (start && end) { + inBetweenNode.range = [start, end - 1]; + return contains(inBetweenNode, offset, inclusive); + } else return false; + }); + if (pair) { + return path.concat(pair, new Node()); + } } else if (currentNode instanceof YAMLSeq) { const item = _.find(currentNode.items, (n) => contains(n, offset, inclusive) @@ -153,3 +170,49 @@ export function mayBeModule(path: Node[]): boolean { } return false; } + +export async function getAnsibleMetadata( + uri: string +): Promise { + let metaPath; + // const path = /file:\/\/(.*)/.exec(uri)?.groups + const pathArray = uri.split('/'); + // Find first + for (let index = pathArray.length - 1; index >= 0; index--) { + if (pathArray[index] === 'tasks') { + metaPath = pathArray.slice(0, index).concat('meta', 'main.yml').join('/'); + } + } + const metadata = { + collections: new Array(), + }; + if (metaPath) { + const metaContents = await fs.readFile(new URL(metaPath), { + encoding: 'utf8', + }); + parseAllDocuments(metaContents).forEach((metaDoc) => { + const metaObject: unknown = metaDoc.toJSON(); + if ( + hasOwnProperty(metaObject, 'collections') && + metaObject.collections instanceof Array + ) { + metaObject.collections.forEach((collection) => { + if (typeof collection === 'string') { + metadata.collections.push(collection); + } + }); + } + }); + } + return metadata; +} + +export function hasOwnProperty( + obj: X, + prop: Y +): obj is X & Record { + return ( + typeof obj === 'object' && + (obj as Record).hasOwnProperty(prop) + ); +} diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo index 16857a0cd..3bf436df4 100644 --- a/server/tsconfig.tsbuildinfo +++ b/server/tsconfig.tsbuildinfo @@ -472,12 +472,12 @@ "affectsGlobalScope": false }, "./src/docsParser.ts": { - "version": "5966d116febd4955e3ea7d97446c54f9fcc289072ed3022552e07d71243fac5d", - "signature": "0c2afb12b1d55a14d57eaa5f83120c92b4f2033a4c5f7368efa18a3916ef84a1", + "version": "77f702f07ac3da984f3e7515bcbab791fdcab5988fd8aa3a68271df686c3e44d", + "signature": "082467a440ed9cd42ca216d8cda20d2e22d64bd61194012e1f5b33fb77f57b96", "affectsGlobalScope": false }, "./src/docsLibrary.ts": { - "version": "29207ae039f0b7c1faec1872ca01e4734fe4bcf0e4695434c68e039a98803eb5", + "version": "afca8790fe2fe7ab96801ab58164c6bb82ec14e2a3468b98383172722f715f9c", "signature": "0fe06f87bfe517d686fe57a64e6e4f29b3d6a7b61a6e1749d5247e468f25153a", "affectsGlobalScope": false }, @@ -486,13 +486,18 @@ "signature": "0f153c55e776e5922dca1841dbba76d39c9ce52675db81b189599c1eb2117c04", "affectsGlobalScope": false }, + "./src/documentMeta.ts": { + "version": "0762b71d84f64011f2d1e49129d8add6c1828fd6af782b19a1507586f4017db8", + "signature": "deab2fffbcebd2149aa3a6d98cf2bb25d4ff9bcadf94a5cfe49851a8c07fb964", + "affectsGlobalScope": false + }, "./src/utils.ts": { - "version": "0b8870cc133814bb5d74284e4d24496772577e94dc9062fdf31222f11d76670e", - "signature": "7dc80f76c84c260a67073e85bd7d455330c09f8bb540a9d904a25382c5113ed0", + "version": "558f94b2d4e487a555baa99eccbdd349edfc3ee80958bdef302cf60c64059623", + "signature": "6b4eac44812dc202931c75113a0c25a2227b069bdc14c501f58789b3ad47aaf2", "affectsGlobalScope": false }, "./src/completionProvider.ts": { - "version": "134a4eed525da309fe2d6b887008a0a6e7b7f815208f10414a9a16e24f20a763", + "version": "8a190836c28c5114b55dc87baf86aa808db729fe94e5e6f449732608007955df", "signature": "1d9b5063ca708d4b5f3e722b57f7c3d156b4eda96cc9b053e9fb64673586d102", "affectsGlobalScope": false }, @@ -787,7 +792,7 @@ "affectsGlobalScope": false }, "./src/server.ts": { - "version": "c22c60ac847142bc82d2c6450135cf7db2ff6dab180c2adcc049ebbf91fc9f78", + "version": "4d62a9df8181fe3586b6ff90a3fa070071f3358077eb84442063bdff4b2ea291", "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", "affectsGlobalScope": false }, @@ -1559,7 +1564,9 @@ "./src/ansibleConfig.ts", "./src/completionProvider.ts", "./src/docsLibrary.ts", + "./src/documentMeta.ts", "./src/hoverProvider.ts", + "./src/utils.ts", "./src/validationProvider.ts" ], "./src/test/utils.test.ts": [ @@ -1573,10 +1580,15 @@ "./src/utils.ts" ], "./src/utils.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/url.d.ts", "./node_modules/@types/lodash/index.d.ts", "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/yaml/index.d.ts", - "./node_modules/yaml/types.d.ts" + "./node_modules/yaml/types.d.ts", + "./src/documentMeta.ts" ], "./src/validationProvider.ts": [ "./node_modules/@flatten-js/interval-tree/index.d.ts", @@ -2291,7 +2303,8 @@ "./src/utils.ts": [ "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/yaml/index.d.ts", - "./node_modules/yaml/types.d.ts" + "./node_modules/yaml/types.d.ts", + "./src/documentMeta.ts" ], "./src/validationProvider.ts": [ "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", @@ -2457,6 +2470,7 @@ "./src/docsFormatter.ts", "./src/docsLibrary.ts", "./src/docsParser.ts", + "./src/documentMeta.ts", "./src/hoverProvider.ts", "./src/server.ts", "./src/test/utils.test.ts", From 8cd74385a932ba4f41376985be484fedb204a17e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sun, 21 Mar 2021 16:48:26 +0100 Subject: [PATCH 023/558] Implemented lazy loading of module documentation Implemented better type checking for documentation --- server/src/completionProvider.ts | 11 ++- server/src/context.ts | 7 ++ server/src/docsLibrary.ts | 135 ++++++++++++++++++++++--------- server/src/docsParser.ts | 105 +++++++++++++++--------- server/src/hoverProvider.ts | 14 ++-- server/src/server.ts | 8 +- server/src/utils.ts | 1 + server/tsconfig.tsbuildinfo | 61 +++++++++----- 8 files changed, 236 insertions(+), 106 deletions(-) create mode 100644 server/src/context.ts diff --git a/server/src/completionProvider.ts b/server/src/completionProvider.ts index be03f6172..e84f9a720 100644 --- a/server/src/completionProvider.ts +++ b/server/src/completionProvider.ts @@ -7,11 +7,11 @@ import { DocsLibrary } from './docsLibrary'; import { mayBeModule } from './utils'; import { AncestryBuilder, getPathAt } from './utils'; -export function doCompletion( +export async function doCompletion( document: TextDocument, position: Position, docsLibrary: DocsLibrary -): CompletionItem[] | null { +): Promise { let preparedText = document.getText(); const offset = document.offsetAt(position); // HACK: We need to insert a dummy character, so that the YAML parser can properly recognize the scope. @@ -37,8 +37,11 @@ export function doCompletion( if (modulePath && mayBeModule(modulePath)) { const moduleNode = modulePath[modulePath.length - 1] as Scalar; - if (docsLibrary.isModule(moduleNode.value)) { - const options = docsLibrary.getModuleOptions(moduleNode.value); + if (await docsLibrary.isModule(moduleNode.value, document)) { + const options = await docsLibrary.getModuleOptions( + moduleNode.value, + document + ); if (options) { const optionMap = (new AncestryBuilder(modulePath) diff --git a/server/src/context.ts b/server/src/context.ts new file mode 100644 index 000000000..0358724cc --- /dev/null +++ b/server/src/context.ts @@ -0,0 +1,7 @@ +import { AnsibleConfig } from './ansibleConfig'; +import { DocumentMetadata } from './documentMeta'; + +export interface IContext { + ansibleConfig: AnsibleConfig; + documentMetadata: Map>; +} diff --git a/server/src/docsLibrary.ts b/server/src/docsLibrary.ts index dffbb6c24..b4c865cbe 100644 --- a/server/src/docsLibrary.ts +++ b/server/src/docsLibrary.ts @@ -3,48 +3,84 @@ import { DocsParser, IModuleDocumentation, } from './docsParser'; +import * as _ from 'lodash'; import * as path from 'path'; import { WorkspaceFolder } from 'vscode-languageserver'; -import { AnsibleConfig } from './ansibleConfig'; +import { IContext } from './context'; +import { TextDocument } from 'vscode-languageserver-textdocument'; +import { hasOwnProperty } from './utils'; export class DocsLibrary { - private _builtInModules = new Map(); - private _collectionModules = new Map(); - private _config: AnsibleConfig; + private _modules = new Map(); + private _context: IContext; private _workspace: WorkspaceFolder | undefined; - constructor(config: AnsibleConfig, workspace?: WorkspaceFolder) { - this._config = config; + constructor(context: IContext, workspace?: WorkspaceFolder) { + this._context = context; this._workspace = workspace; } public async initialize(): Promise { // this._workspace.uri; - this._config.module_locations.forEach(async (modulesPath) => { - const docs = await DocsParser.parseDirectory(modulesPath, 'builtin'); - docs.forEach((doc) => { - this._builtInModules.set(doc.name, doc); - }); - }); - this._config.collections_paths.forEach(async (collectionsPath) => { - const docs = await DocsParser.parseDirectory( - collectionsPath, - 'collection' - ); - docs.forEach((doc) => { - this._collectionModules.set(doc.name, doc); - }); - }); + this._context.ansibleConfig.module_locations.forEach( + async (modulesPath) => { + const docs = await DocsParser.parseDirectory(modulesPath, 'builtin'); + docs.forEach((doc) => { + this._modules.set(doc.fqcn, doc); + }); + } + ); + this._context.ansibleConfig.collections_paths.forEach( + async (collectionsPath) => { + const docs = await DocsParser.parseDirectory( + collectionsPath, + 'collection' + ); + docs.forEach((doc) => { + this._modules.set(doc.fqcn, doc); + }); + } + ); + } + + private async findModule( + searchText: string, + doc: TextDocument + ): Promise { + const prefixOptions = [ + '', // try searching as-is (FQCN match) + 'ansible.builtin.', // try searching built-in + ]; + const metadata = await this._context.documentMetadata.get(doc.uri); + if (metadata) { + // try searching declared collections + prefixOptions.push(...metadata.collections.map((s) => `${s}.`)); + } + const prefix = prefixOptions.find((prefix) => + this._modules.has(prefix + searchText) + ); + return this._modules.get(prefix + searchText); } - public getModuleDescription(module: string): IDescription | undefined { - const doc = this._builtInModules.get(module); - return doc?.contents.description; + public async getModuleDescription( + module: string, + doc: TextDocument + ): Promise { + const contents = (await this.findModule(module, doc))?.contents; + if ( + hasOwnProperty(contents, 'description') && + (contents.description instanceof Array || // won't check that all elements are string + typeof contents.description === 'string') + ) + return contents.description; } - public getModuleOptions(module: string): IOption[] | undefined { - const doc = this._builtInModules.get(module); - const options = doc?.contents.options; - if (options) { + public async getModuleOptions( + module: string, + doc: TextDocument + ): Promise { + const moduleDoc = await this.findModule(module, doc); + const options = moduleDoc?.contents.options; + if (options && typeof options === 'object') { return Object.entries(options).map( // eslint-disable-next-line @typescript-eslint/no-explicit-any ([optionName, optionObj]: [string, any]) => { @@ -59,26 +95,49 @@ export class DocsLibrary { } } - public getModuleOption(module: string, option: string): IOption | undefined { - const doc = this._builtInModules.get(module); - const optionObj = doc?.contents.options[option]; - if (optionObj) { - return { + public async getModuleOption( + module: string, + doc: TextDocument, + option: string + ): Promise { + const options = (await this.findModule(module, doc))?.contents.options; + if (hasOwnProperty(options, option)) { + const optionObj = options[option]; + const optionDoc: IOption = { name: option, - description: optionObj.description, - required: !!optionObj.required, - choices: optionObj.choices, + required: !!( + hasOwnProperty(optionObj, 'required') && optionObj.required + ), }; + if ( + hasOwnProperty(optionObj, 'description') && + isIDescription(optionObj.description) + ) + optionDoc.description = optionObj.description; + if ( + hasOwnProperty(optionObj, 'choices') && + optionObj.choices instanceof Array + ) + optionDoc.choices = optionObj.choices; + + return optionDoc; } } - public isModule(module: string): boolean { - return this._builtInModules.has(module); + public async isModule(module: string, doc: TextDocument): Promise { + return !!(await this.findModule(module, doc)); } } export type IDescription = string | Array; +function isIDescription(obj: unknown): obj is IDescription { + return ( + obj instanceof Array || // won't check that all elements are string + typeof obj === 'string' + ); +} + export interface IOption { name: string; description?: IDescription; diff --git a/server/src/docsParser.ts b/server/src/docsParser.ts index e6732d1ad..bd0c5a720 100644 --- a/server/src/docsParser.ts +++ b/server/src/docsParser.ts @@ -1,10 +1,10 @@ -import { promises as fs } from 'fs'; +import * as fs from 'fs'; import * as path from 'path'; import { parseDocument } from 'yaml'; import { YAMLError } from 'yaml/util'; export class DocsParser { - private static docsRegex = /\s*DOCUMENTATION\s*=\s*r?('''|""")(?:\n---)?\n?(?.*?)\1/s; + public static docsRegex = /\s*DOCUMENTATION\s*=\s*r?('''|""")(?:\n---)?\n?(?.*?)\1/s; public static async parseDirectory( dir: string, @@ -18,45 +18,35 @@ export class DocsParser { break; case 'collection': filter = (f: string) => { - const subPathArray = f.substr(dir.length).split(path.sep); - return subPathArray[subPathArray.length - 2] === 'modules'; + const pathArray = f.split(path.sep); + return pathArray[pathArray.length - 2] === 'modules'; }; break; } return Promise.all( files.filter(filter).map(async (file) => { - const contents = await fs.readFile(file, { encoding: 'utf8' }); - const m = this.docsRegex.exec(contents); - if (m && m.groups && m.groups.doc) { - const document = parseDocument(m.groups.doc); - // There's about 20 modules (out of ~3200) in Ansible 2.9 libs that contain YAML syntax errors - // Still, document.toJSON() works on them - const contents = document.toJSON(); - const name = contents.module as string; - let namespace; - let collection; - switch (kind) { - case 'builtin': - namespace = 'ansible'; - collection = 'builtin'; - break; - case 'collection': - const subPathArray = file.substr(dir.length).split(path.sep); - namespace = subPathArray[1]; // the first entry is 'ansible_collections' - collection = subPathArray[2]; - break; - } - - return { - source: file, - fqcn: `${namespace}.${collection}.${name}`, - namespace: namespace, - collection: collection, - name: name, - contents: contents, - errors: document.errors, - }; + const name = path.basename(file, '.py'); + let namespace; + let collection; + switch (kind) { + case 'builtin': + namespace = 'ansible'; + collection = 'builtin'; + break; + case 'collection': + const pathArray = file.split(path.sep); + namespace = pathArray[pathArray.length - 5]; + collection = pathArray[pathArray.length - 4]; + break; } + + return new LazyModuleDocumentation( + file, + `${namespace}.${collection}.${name}`, + namespace, + collection, + name + ); }) ).then((results) => { return results.filter( @@ -68,7 +58,7 @@ export class DocsParser { } private static async _getFiles(dir: string): Promise> { - const dirents = await fs.readdir(dir, { withFileTypes: true }); + const dirents = await fs.promises.readdir(dir, { withFileTypes: true }); const files = await Promise.all( dirents .filter((dirent) => { @@ -103,6 +93,47 @@ export interface IModuleDocumentation { namespace: string; collection: string; name: string; - contents: any; + contents: Record; errors: YAMLError[]; } + +export class LazyModuleDocumentation implements IModuleDocumentation { + source: string; + fqcn: string; + namespace: string; + collection: string; + name: string; + errors: YAMLError[] = []; + + private _contents: Record | undefined; + + constructor( + source: string, + fqcn: string, + namespace: string, + collection: string, + name: string + ) { + this.source = source; + this.fqcn = fqcn; + this.namespace = namespace; + this.collection = collection; + this.name = name; + } + + public get contents(): Record { + if (!this._contents) { + const contents = fs.readFileSync(this.source, { encoding: 'utf8' }); + const m = DocsParser.docsRegex.exec(contents); + if (m && m.groups && m.groups.doc) { + const document = parseDocument(m.groups.doc); + // There's about 20 modules (out of ~3200) in Ansible 2.9 libs that contain YAML syntax errors + // Still, document.toJSON() works on them + this._contents = document.toJSON(); + this.errors = document.errors; + } + this._contents = this._contents || {}; + } + return this._contents; + } +} diff --git a/server/src/hoverProvider.ts b/server/src/hoverProvider.ts index 4bea8c228..274483251 100644 --- a/server/src/hoverProvider.ts +++ b/server/src/hoverProvider.ts @@ -7,11 +7,11 @@ import { DocsLibrary } from './docsLibrary'; import { mayBeModule } from './utils'; import { AncestryBuilder, getPathAt } from './utils'; -export function doHover( +export async function doHover( document: TextDocument, position: Position, docsLibrary: DocsLibrary -): Hover | null { +): Promise { const yamlDocs = parseAllDocuments(document.getText()); const path = getPathAt(document, position, yamlDocs); if (path) { @@ -21,7 +21,10 @@ export function doHover( new AncestryBuilder(path).parentKey(node.value).get() === node // ensure we look at a key, not value of a Pair ) { if (mayBeModule(path)) { - const description = docsLibrary.getModuleDescription(node.value); + const description = await docsLibrary.getModuleDescription( + node.value, + document + ); if (description) { return { contents: formatDescription(description), @@ -36,9 +39,10 @@ export function doHover( if (modulePath && mayBeModule(modulePath)) { const moduleNode = modulePath[modulePath.length - 1] as Scalar; - if (docsLibrary.isModule(moduleNode.value)) { - const option = docsLibrary.getModuleOption( + if (await docsLibrary.isModule(moduleNode.value, document)) { + const option = await docsLibrary.getModuleOption( moduleNode.value, + document, node.value ); if (option) { diff --git a/server/src/server.ts b/server/src/server.ts index 41ee04be4..888dc986a 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -11,6 +11,7 @@ import { } from 'vscode-languageserver/node'; import { AnsibleConfig } from './ansibleConfig'; import { doCompletion } from './completionProvider'; +import { IContext } from './context'; import { DocsLibrary } from './docsLibrary'; import { DocumentMetadata } from './documentMeta'; import { doHover } from './hoverProvider'; @@ -161,7 +162,12 @@ connection.onDidChangeWatchedFiles((_change) => { const ansibleConfig = new AnsibleConfig(connection); ansibleConfig.initialize(rootFolder?.uri); -const docsLibrary = new DocsLibrary(ansibleConfig, rootFolder); +const context: IContext = { + ansibleConfig: ansibleConfig, + documentMetadata: documentMetadata, +}; + +const docsLibrary = new DocsLibrary(context, rootFolder); docsLibrary.initialize().then(() => { connection.onHover((params) => { const document = documents.get(params.textDocument.uri); diff --git a/server/src/utils.ts b/server/src/utils.ts index e42bcb660..508db0f87 100644 --- a/server/src/utils.ts +++ b/server/src/utils.ts @@ -212,6 +212,7 @@ export function hasOwnProperty( prop: Y ): obj is X & Record { return ( + obj && typeof obj === 'object' && (obj as Record).hasOwnProperty(prop) ); diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo index 3bf436df4..55c053cbe 100644 --- a/server/tsconfig.tsbuildinfo +++ b/server/tsconfig.tsbuildinfo @@ -472,18 +472,8 @@ "affectsGlobalScope": false }, "./src/docsParser.ts": { - "version": "77f702f07ac3da984f3e7515bcbab791fdcab5988fd8aa3a68271df686c3e44d", - "signature": "082467a440ed9cd42ca216d8cda20d2e22d64bd61194012e1f5b33fb77f57b96", - "affectsGlobalScope": false - }, - "./src/docsLibrary.ts": { - "version": "afca8790fe2fe7ab96801ab58164c6bb82ec14e2a3468b98383172722f715f9c", - "signature": "0fe06f87bfe517d686fe57a64e6e4f29b3d6a7b61a6e1749d5247e468f25153a", - "affectsGlobalScope": false - }, - "./src/docsFormatter.ts": { - "version": "a072e9918cbf6a113524a0d56fa34f7cd8584bf0b7f755ed28d14ba339b91e14", - "signature": "0f153c55e776e5922dca1841dbba76d39c9ce52675db81b189599c1eb2117c04", + "version": "6d3ef36b7c0978123922b3347b8fe5d4d7f40977c4654456703bb87d2ec06e06", + "signature": "94928d6a3d4a37317dbd1a0e86e9f1e7899de8578b92b5e37cdf6d902e25c67e", "affectsGlobalScope": false }, "./src/documentMeta.ts": { @@ -491,19 +481,34 @@ "signature": "deab2fffbcebd2149aa3a6d98cf2bb25d4ff9bcadf94a5cfe49851a8c07fb964", "affectsGlobalScope": false }, + "./src/context.ts": { + "version": "053e75936c7e88b1e36d7cda7f0585651e0dc649118eb80f9e395300ab5b89cd", + "signature": "d0c0218c22eeb33db1e46ab9f1a3be2d0baf14a50932b080c84d5e6ea79e0d35", + "affectsGlobalScope": false + }, "./src/utils.ts": { - "version": "558f94b2d4e487a555baa99eccbdd349edfc3ee80958bdef302cf60c64059623", + "version": "d8056159b7ce757cf9065f4cc3874225d21f55dbaa16441ee6cfd992381f5858", "signature": "6b4eac44812dc202931c75113a0c25a2227b069bdc14c501f58789b3ad47aaf2", "affectsGlobalScope": false }, + "./src/docsLibrary.ts": { + "version": "dd170bedfc6d611fa112563ed0bc03232c7b72b76e04090eee12138023a5121e", + "signature": "1bcc495513b47e517bbda564cc73a808938c18d5eeb41b420cd53469250a03fc", + "affectsGlobalScope": false + }, + "./src/docsFormatter.ts": { + "version": "a072e9918cbf6a113524a0d56fa34f7cd8584bf0b7f755ed28d14ba339b91e14", + "signature": "0f153c55e776e5922dca1841dbba76d39c9ce52675db81b189599c1eb2117c04", + "affectsGlobalScope": false + }, "./src/completionProvider.ts": { - "version": "8a190836c28c5114b55dc87baf86aa808db729fe94e5e6f449732608007955df", - "signature": "1d9b5063ca708d4b5f3e722b57f7c3d156b4eda96cc9b053e9fb64673586d102", + "version": "758e605b5ac6cf4eb68aa7e24a22cb5760173b6c3fa1e9cc9dd356a58a6cb0fe", + "signature": "9a36570ce874b967550b3698bf4df92f071e9a0e174bf03f49a37cae6b26ef9d", "affectsGlobalScope": false }, "./src/hoverProvider.ts": { - "version": "11967ff590c2cf717e9b78b53ce75bc9e0abe707d99da60d1e3c015ad583a116", - "signature": "14028932ece44f3c48823c969d5b1bda30f5a0ed08b23db42deb6f187bb2da44", + "version": "f42ffa2e68476c1c4e37f9d35dbe8dc0193383e3b63601aacfa888ebd30f936d", + "signature": "a988a2624e664f9098da756cb24a8c496bb6d7ac89f9c31eef4ba00d10e6dd60", "affectsGlobalScope": false }, "./node_modules/vscode-languageserver/typings/thenable.d.ts": { @@ -792,7 +797,7 @@ "affectsGlobalScope": false }, "./src/server.ts": { - "version": "4d62a9df8181fe3586b6ff90a3fa070071f3358077eb84442063bdff4b2ea291", + "version": "500587bee959b3160a6e9eae089d8a99bc5d8ffd5adbde3958d37c0efd9b07f0", "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", "affectsGlobalScope": false }, @@ -1533,15 +1538,22 @@ "./src/docsLibrary.ts", "./src/utils.ts" ], + "./src/context.ts": [ + "./src/ansibleConfig.ts", + "./src/documentMeta.ts" + ], "./src/docsFormatter.ts": [ "./node_modules/vscode-languageserver/lib/common/api.d.ts", "./src/docsLibrary.ts" ], "./src/docsLibrary.ts": [ "../node_modules/@types/node/path.d.ts", + "./node_modules/@types/lodash/index.d.ts", + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/vscode-languageserver/lib/common/api.d.ts", - "./src/ansibleConfig.ts", - "./src/docsParser.ts" + "./src/context.ts", + "./src/docsParser.ts", + "./src/utils.ts" ], "./src/docsParser.ts": [ "../node_modules/@types/node/fs.d.ts", @@ -1563,6 +1575,7 @@ "./node_modules/vscode-languageserver/node.d.ts", "./src/ansibleConfig.ts", "./src/completionProvider.ts", + "./src/context.ts", "./src/docsLibrary.ts", "./src/documentMeta.ts", "./src/hoverProvider.ts", @@ -2284,13 +2297,18 @@ "./node_modules/vscode-languageserver/lib/common/api.d.ts", "./src/docsLibrary.ts" ], + "./src/context.ts": [ + "./src/ansibleConfig.ts", + "./src/documentMeta.ts" + ], "./src/docsFormatter.ts": [ "./node_modules/vscode-languageserver/lib/common/api.d.ts", "./src/docsLibrary.ts" ], "./src/docsLibrary.ts": [ + "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/vscode-languageserver/lib/common/api.d.ts", - "./src/ansibleConfig.ts" + "./src/context.ts" ], "./src/docsParser.ts": [ "./node_modules/yaml/util.d.ts" @@ -2467,6 +2485,7 @@ "./node_modules/yaml/util.d.ts", "./src/ansibleConfig.ts", "./src/completionProvider.ts", + "./src/context.ts", "./src/docsFormatter.ts", "./src/docsLibrary.ts", "./src/docsParser.ts", From 788445ecf0d257b1b9c5227f45313a0bb962ab4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Thu, 25 Mar 2021 16:50:43 +0100 Subject: [PATCH 024/558] Implemented documentation fragment processing Improved completion and hover formatting Fixed some uncaught exceptions --- server/package-lock.json | 131 +++++++++- server/package.json | 3 +- server/src/ansibleConfig.ts | 4 - server/src/completionProvider.ts | 42 +++- server/src/docsFormatter.ts | 52 +++- server/src/docsLibrary.ts | 141 ++++++++--- server/src/docsParser.ts | 75 +++--- server/src/hoverProvider.ts | 2 +- server/src/utils.ts | 53 ++-- server/tsconfig.tsbuildinfo | 419 +++++++++++++++++++++++++++---- 10 files changed, 730 insertions(+), 192 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index 47bbc8bc9..496e9a219 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -9,6 +9,29 @@ "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.13.tgz", "integrity": "sha512-5thHHdUZIRdPdEPx6G9tY6mHFMGoXsq9/ivemRszDcEkERXqlZAv+7NozaFbAUOvKXxyWoccSnLyjK0c5UWJeQ==" }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, "@types/chai": { "version": "4.2.15", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.15.tgz", @@ -82,6 +105,11 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -114,7 +142,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -304,6 +331,14 @@ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -322,11 +357,31 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "requires": { + "reusify": "^1.0.4" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -390,11 +445,23 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, "requires": { "is-glob": "^4.0.1" } }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -413,6 +480,11 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -446,8 +518,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -459,7 +530,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -467,8 +537,7 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-plain-obj": { "version": "2.1.0", @@ -520,6 +589,20 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -619,6 +702,11 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, "pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -628,8 +716,12 @@ "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "randombytes": { "version": "2.1.0", @@ -655,6 +747,19 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -670,6 +775,11 @@ "randombytes": "^2.1.0" } }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -724,7 +834,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } diff --git a/server/package.json b/server/package.json index 2cb5082b6..5cd37cf77 100644 --- a/server/package.json +++ b/server/package.json @@ -31,6 +31,7 @@ "lodash": "^4.17.21", "yaml": "^1.10.0", "@flatten-js/interval-tree": "^1.0.13", - "ini": "^1.3.8" + "ini": "^1.3.8", + "globby": "^11.0.3" } } diff --git a/server/src/ansibleConfig.ts b/server/src/ansibleConfig.ts index b8489847f..13c1b011e 100644 --- a/server/src/ansibleConfig.ts +++ b/server/src/ansibleConfig.ts @@ -79,7 +79,3 @@ function parsePythonStringArray(array: string) { const quoted_elements = array.split(',').map((e) => e.trim()); return quoted_elements.map((e) => e.slice(1, e.length - 1)); } - -async function fileExists(filePath: string): Promise { - return !!(await fs.stat(filePath).catch(() => false)); -} diff --git a/server/src/completionProvider.ts b/server/src/completionProvider.ts index e84f9a720..80681aa75 100644 --- a/server/src/completionProvider.ts +++ b/server/src/completionProvider.ts @@ -1,8 +1,8 @@ -import { CompletionItem } from 'vscode-languageserver'; +import { CompletionItem, CompletionItemKind } from 'vscode-languageserver'; import { Position, TextDocument } from 'vscode-languageserver-textdocument'; import { parseAllDocuments } from 'yaml'; import { Pair, Scalar, YAMLMap } from 'yaml/types'; -import { formatDescription, formatOption } from './docsFormatter'; +import { formatDescription, formatOption, getDetails } from './docsFormatter'; import { DocsLibrary } from './docsLibrary'; import { mayBeModule } from './utils'; import { AncestryBuilder, getPathAt } from './utils'; @@ -47,6 +47,8 @@ export async function doCompletion( const optionMap = (new AncestryBuilder(modulePath) .parent(Pair) .get() as Pair).value as YAMLMap; + + // find options that have been already provided by the user const providedOptions = new Set( optionMap.items.map((pair) => { if (pair.key && pair.key instanceof Scalar) { @@ -54,19 +56,35 @@ export async function doCompletion( } }) ); + + // filter out the provided options from completion const filteredOptions = options?.filter( (o) => !providedOptions.has(o.name) ); - - return filteredOptions.map((option) => { - return { - label: option.name, - documentation: formatOption(option), - insertText: atEndOfLine(document, position) - ? `${option.name}: ` - : undefined, - }; - }); + return filteredOptions + .sort((a, b) => { + // make required options appear on the top + if (a.required && !b.required) { + return -1; + } else if (!a.required && b.required) { + return 1; + } else { + return 0; + } + }) + .map((option) => { + // translate option documentation to CompletionItem + const details = getDetails(option); + return { + label: option.name, + detail: details, + kind: CompletionItemKind.Property, + documentation: formatOption(option), + insertText: atEndOfLine(document, position) + ? `${option.name}: ` + : undefined, + }; + }); } } } diff --git a/server/src/docsFormatter.ts b/server/src/docsFormatter.ts index c7d1e7c65..208f81d42 100644 --- a/server/src/docsFormatter.ts +++ b/server/src/docsFormatter.ts @@ -1,6 +1,35 @@ import { MarkupContent, MarkupKind } from 'vscode-languageserver'; import { IDescription, IOption } from './docsLibrary'; +export function formatModule() {} + +export function formatOption( + option: IOption, + with_details = false +): MarkupContent { + const sections: string[] = []; + if (with_details) { + const details = getDetails(option); + if (details) { + sections.push(`*${details}*`); + } + } + if (option.description) { + sections.push(formatDescription(option.description, false).value); + } + if (option.default) { + sections.push(`*Default*: \`${option.default}\``); + } + if (option.choices) { + const formattedChoiceArray = option.choices.map((c) => `\`${c}\``); + sections.push(`*Choices*: [${formattedChoiceArray.toString()}]`); + } + return { + kind: MarkupKind.Markdown, + value: sections.join('\n\n'), + }; +} + export function formatDescription( doc?: IDescription, asList = true @@ -25,22 +54,19 @@ export function formatDescription( }; } -export function formatOption(option: IOption): MarkupContent { - const sections: string[] = []; +export function getDetails(option: IOption): string | undefined { + const details = []; if (option.required) { - sections.push('**Required**\n'); + details.push('(required)'); } - if (option.description) { - sections.push(formatDescription(option.description, false).value); + if (option.type) { + if (option.type === 'list' && option.elements) { + details.push(`list(${option.elements})`); + } else { + details.push(option.type); + } } - if (option.choices) { - const formattedChoiceArray = option.choices.map((c) => `\`${c}\``); - sections.push(`*Choices*: [${formattedChoiceArray.toString()}]`); - } - return { - kind: MarkupKind.Markdown, - value: sections.join('\n'), - }; + if (details) return details.join(' '); } // TODO: do something with links diff --git a/server/src/docsLibrary.ts b/server/src/docsLibrary.ts index b4c865cbe..09863890a 100644 --- a/server/src/docsLibrary.ts +++ b/server/src/docsLibrary.ts @@ -1,64 +1,113 @@ -import { - collectionModuleFilter, - DocsParser, - IModuleDocumentation, -} from './docsParser'; +import { collectionModuleFilter, DocsParser } from './docsParser'; import * as _ from 'lodash'; import * as path from 'path'; import { WorkspaceFolder } from 'vscode-languageserver'; import { IContext } from './context'; import { TextDocument } from 'vscode-languageserver-textdocument'; import { hasOwnProperty } from './utils'; +import { YAMLError } from 'yaml/util'; export class DocsLibrary { - private _modules = new Map(); - private _context: IContext; - private _workspace: WorkspaceFolder | undefined; + private modules = new Map(); + private docFragments = new Map(); + private context: IContext; + private workspace: WorkspaceFolder | undefined; constructor(context: IContext, workspace?: WorkspaceFolder) { - this._context = context; - this._workspace = workspace; + this.context = context; + this.workspace = workspace; } public async initialize(): Promise { // this._workspace.uri; - this._context.ansibleConfig.module_locations.forEach( - async (modulesPath) => { - const docs = await DocsParser.parseDirectory(modulesPath, 'builtin'); - docs.forEach((doc) => { - this._modules.set(doc.fqcn, doc); - }); - } - ); - this._context.ansibleConfig.collections_paths.forEach( - async (collectionsPath) => { - const docs = await DocsParser.parseDirectory( + for (const modulesPath of this.context.ansibleConfig.module_locations) { + (await DocsParser.parseDirectory(modulesPath, 'builtin')).forEach( + (doc) => { + this.modules.set(doc.fqcn, doc); + } + ); + ( + await DocsParser.parseDirectory(modulesPath, 'builtin_doc_fragment') + ).forEach((doc) => { + this.docFragments.set(doc.fqcn, doc); + }); + } + for (const collectionsPath of this.context.ansibleConfig + .collections_paths) { + (await DocsParser.parseDirectory(collectionsPath, 'collection')).forEach( + (doc) => { + this.modules.set(doc.fqcn, doc); + } + ); + ( + await DocsParser.parseDirectory( collectionsPath, - 'collection' - ); - docs.forEach((doc) => { - this._modules.set(doc.fqcn, doc); - }); - } - ); + 'collection_doc_fragment' + ) + ).forEach((doc) => { + this.docFragments.set(doc.fqcn, doc); + }); + } } private async findModule( searchText: string, doc: TextDocument - ): Promise { + ): Promise { const prefixOptions = [ '', // try searching as-is (FQCN match) 'ansible.builtin.', // try searching built-in ]; - const metadata = await this._context.documentMetadata.get(doc.uri); + const metadata = await this.context.documentMetadata.get(doc.uri); if (metadata) { // try searching declared collections prefixOptions.push(...metadata.collections.map((s) => `${s}.`)); } const prefix = prefixOptions.find((prefix) => - this._modules.has(prefix + searchText) + this.modules.has(prefix + searchText) ); - return this._modules.get(prefix + searchText); + const module = this.modules.get(prefix + searchText); + // Collect information from documentation fragments + if (module && !module.fragments) { + module.fragments = []; + if ( + hasOwnProperty(module.contents, 'extends_documentation_fragment') && + module.contents.extends_documentation_fragment instanceof Array + ) { + const resultContents = {}; + for (const docFragmentName of module.contents + .extends_documentation_fragment) { + const docFragment = this.docFragments.get(docFragmentName); + if (docFragment) { + module.fragments.push(docFragment); // currently used only as indicator + _.mergeWith( + resultContents, + docFragment.contents, + this.docFragmentMergeCustomizer + ); + } + } + _.mergeWith( + resultContents, + module.contents, + this.docFragmentMergeCustomizer + ); + module.contents = resultContents; + } + } + return module; + } + + private docFragmentMergeCustomizer( + objValue: unknown, + srcValue: unknown, + key: string + ): Record[] | undefined { + if ( + ['notes', 'requirements', 'seealso'].includes(key) && + _.isArray(objValue) + ) { + return objValue.concat(srcValue); + } } public async getModuleDescription( @@ -82,13 +131,18 @@ export class DocsLibrary { const options = moduleDoc?.contents.options; if (options && typeof options === 'object') { return Object.entries(options).map( + // TODO: perform typechecking // eslint-disable-next-line @typescript-eslint/no-explicit-any ([optionName, optionObj]: [string, any]) => { return { name: optionName, description: optionObj.description, required: !!optionObj.required, + default: optionObj.default, choices: optionObj.choices, + type: optionObj.type, + elements: optionObj.elements, + aliases: optionObj.aliases, }; } ); @@ -137,6 +191,29 @@ function isIDescription(obj: unknown): obj is IDescription { typeof obj === 'string' ); } +export interface IModuleDocumentation { + module: string; + shortDescription: IDescription; + description: IDescription; + versionAdded: string; + author: IDescription; + deprecated: Record; + options: IOption[]; + requirements: IDescription; + seealso: Record; + notes: IDescription; +} + +export interface IModuleMetadata { + source: string; + fqcn: string; + namespace: string; + collection: string; + name: string; + contents: Record; + fragments?: IModuleMetadata[]; + errors: YAMLError[]; +} export interface IOption { name: string; diff --git a/server/src/docsParser.ts b/server/src/docsParser.ts index bd0c5a720..a85d65ad1 100644 --- a/server/src/docsParser.ts +++ b/server/src/docsParser.ts @@ -1,39 +1,52 @@ import * as fs from 'fs'; +import globby = require('globby'); import * as path from 'path'; import { parseDocument } from 'yaml'; import { YAMLError } from 'yaml/util'; +import { IModuleMetadata } from './docsLibrary'; export class DocsParser { public static docsRegex = /\s*DOCUMENTATION\s*=\s*r?('''|""")(?:\n---)?\n?(?.*?)\1/s; public static async parseDirectory( dir: string, - kind: 'builtin' | 'collection' - ): Promise { - const files = await this._getFiles(dir); - let filter; + kind: + | 'builtin' + | 'collection' + | 'builtin_doc_fragment' + | 'collection_doc_fragment' + ): Promise { + let files; switch (kind) { case 'builtin': - filter = () => true; + files = await globby([`${dir}/**/*.py`, '!/**/_*.py']); + break; + case 'builtin_doc_fragment': + files = await globby([ + `${path.resolve(dir, '../')}/plugins/doc_fragments/*.py`, + '!/**/_*.py', + ]); break; case 'collection': - filter = (f: string) => { - const pathArray = f.split(path.sep); - return pathArray[pathArray.length - 2] === 'modules'; - }; + files = await globby([`${dir}/**/modules/*.py`, '!/**/_*.py']); + break; + case 'collection_doc_fragment': + files = await globby([`${dir}/**/doc_fragments/*.py`, '!/**/_*.py']); break; } return Promise.all( - files.filter(filter).map(async (file) => { + files.map(async (file) => { const name = path.basename(file, '.py'); let namespace; let collection; switch (kind) { case 'builtin': + case 'builtin_doc_fragment': namespace = 'ansible'; collection = 'builtin'; break; case 'collection': + case 'collection_doc_fragment': const pathArray = file.split(path.sep); namespace = pathArray[pathArray.length - 5]; collection = pathArray[pathArray.length - 4]; @@ -48,33 +61,7 @@ export class DocsParser { name ); }) - ).then((results) => { - return results.filter( - ( - i: IModuleDocumentation | null | undefined - ): i is IModuleDocumentation => !!i - ); - }); - } - - private static async _getFiles(dir: string): Promise> { - const dirents = await fs.promises.readdir(dir, { withFileTypes: true }); - const files = await Promise.all( - dirents - .filter((dirent) => { - return ( - dirent.isDirectory() || - (dirent.isFile() && - dirent.name.endsWith('.py') && - !dirent.name.startsWith('_')) // legacy files and __init__.py - ); - }) - .map((dirent) => { - const res = path.resolve(dir, dirent.name); - return dirent.isDirectory() ? this._getFiles(res) : [res]; - }) ); - return files.flat(); } } @@ -87,17 +74,7 @@ export function collectionModuleFilter( }; } -export interface IModuleDocumentation { - source: string; - fqcn: string; - namespace: string; - collection: string; - name: string; - contents: Record; - errors: YAMLError[]; -} - -export class LazyModuleDocumentation implements IModuleDocumentation { +export class LazyModuleDocumentation implements IModuleMetadata { source: string; fqcn: string; namespace: string; @@ -136,4 +113,8 @@ export class LazyModuleDocumentation implements IModuleDocumentation { } return this._contents; } + + public set contents(value: Record) { + this._contents = value; + } } diff --git a/server/src/hoverProvider.ts b/server/src/hoverProvider.ts index 274483251..9bf1e9768 100644 --- a/server/src/hoverProvider.ts +++ b/server/src/hoverProvider.ts @@ -47,7 +47,7 @@ export async function doHover( ); if (option) { return { - contents: formatOption(option), + contents: formatOption(option, true), }; } } diff --git a/server/src/utils.ts b/server/src/utils.ts index 508db0f87..44d9e53b4 100644 --- a/server/src/utils.ts +++ b/server/src/utils.ts @@ -60,8 +60,8 @@ export function getPathAtOffset( } pair = _.find(currentNode.items, (p) => { const inBetweenNode = new Node(); - const start = (p.key as Node).range?.[1]; - const end = (p.value as Node).range?.[0]; + const start = (p.key as Node)?.range?.[1]; + const end = (p.value as Node)?.range?.[0]; if (start && end) { inBetweenNode.range = [start, end - 1]; return contains(inBetweenNode, offset, inclusive); @@ -117,13 +117,12 @@ export class AncestryBuilder { parentKey(key?: string | RegExp): AncestryBuilder { this._index--; const node = this.get(); - if (typeof key == 'string') { - key = new RegExp(`^${key}$`); - } if ( node instanceof Pair && node.key instanceof Scalar && - (!key || (key instanceof RegExp && key.test(node.key.value))) + (!key || + (key instanceof RegExp && key.test(node.key.value)) || + (typeof key == 'string' && key === node.key.value)) ) { this._returnKey = true; } else { @@ -171,6 +170,10 @@ export function mayBeModule(path: Node[]): boolean { return false; } +async function fileExists(filePath: string): Promise { + return !!(await fs.stat(filePath).catch(() => false)); +} + export async function getAnsibleMetadata( uri: string ): Promise { @@ -186,23 +189,27 @@ export async function getAnsibleMetadata( const metadata = { collections: new Array(), }; - if (metaPath) { - const metaContents = await fs.readFile(new URL(metaPath), { - encoding: 'utf8', - }); - parseAllDocuments(metaContents).forEach((metaDoc) => { - const metaObject: unknown = metaDoc.toJSON(); - if ( - hasOwnProperty(metaObject, 'collections') && - metaObject.collections instanceof Array - ) { - metaObject.collections.forEach((collection) => { - if (typeof collection === 'string') { - metadata.collections.push(collection); - } - }); - } - }); + if (metaPath && fileExists(metaPath)) { + try { + const metaContents = await fs.readFile(new URL(metaPath), { + encoding: 'utf8', + }); + parseAllDocuments(metaContents).forEach((metaDoc) => { + const metaObject: unknown = metaDoc.toJSON(); + if ( + hasOwnProperty(metaObject, 'collections') && + metaObject.collections instanceof Array + ) { + metaObject.collections.forEach((collection) => { + if (typeof collection === 'string') { + metadata.collections.push(collection); + } + }); + } + }); + } catch (error) { + //TODO: Log debug + } } return metadata; } diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo index 55c053cbe..31ae1a8e8 100644 --- a/server/tsconfig.tsbuildinfo +++ b/server/tsconfig.tsbuildinfo @@ -442,7 +442,7 @@ "affectsGlobalScope": false }, "./src/ansibleConfig.ts": { - "version": "abd05e7369fd44156b53bb8a5494df8cdbe0cc194eab0764f6d06e5e96418743", + "version": "9005f621fe61966539cda57f2af16e814c05bab3ecf7c68c3e3dcbc2f1593678", "signature": "c42f1825b97bf1b2b8debd53aeb3e0c59079f02bf097fd146d4f1cd5e9b0f579", "affectsGlobalScope": false }, @@ -471,51 +471,6 @@ "signature": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49", "affectsGlobalScope": false }, - "./src/docsParser.ts": { - "version": "6d3ef36b7c0978123922b3347b8fe5d4d7f40977c4654456703bb87d2ec06e06", - "signature": "94928d6a3d4a37317dbd1a0e86e9f1e7899de8578b92b5e37cdf6d902e25c67e", - "affectsGlobalScope": false - }, - "./src/documentMeta.ts": { - "version": "0762b71d84f64011f2d1e49129d8add6c1828fd6af782b19a1507586f4017db8", - "signature": "deab2fffbcebd2149aa3a6d98cf2bb25d4ff9bcadf94a5cfe49851a8c07fb964", - "affectsGlobalScope": false - }, - "./src/context.ts": { - "version": "053e75936c7e88b1e36d7cda7f0585651e0dc649118eb80f9e395300ab5b89cd", - "signature": "d0c0218c22eeb33db1e46ab9f1a3be2d0baf14a50932b080c84d5e6ea79e0d35", - "affectsGlobalScope": false - }, - "./src/utils.ts": { - "version": "d8056159b7ce757cf9065f4cc3874225d21f55dbaa16441ee6cfd992381f5858", - "signature": "6b4eac44812dc202931c75113a0c25a2227b069bdc14c501f58789b3ad47aaf2", - "affectsGlobalScope": false - }, - "./src/docsLibrary.ts": { - "version": "dd170bedfc6d611fa112563ed0bc03232c7b72b76e04090eee12138023a5121e", - "signature": "1bcc495513b47e517bbda564cc73a808938c18d5eeb41b420cd53469250a03fc", - "affectsGlobalScope": false - }, - "./src/docsFormatter.ts": { - "version": "a072e9918cbf6a113524a0d56fa34f7cd8584bf0b7f755ed28d14ba339b91e14", - "signature": "0f153c55e776e5922dca1841dbba76d39c9ce52675db81b189599c1eb2117c04", - "affectsGlobalScope": false - }, - "./src/completionProvider.ts": { - "version": "758e605b5ac6cf4eb68aa7e24a22cb5760173b6c3fa1e9cc9dd356a58a6cb0fe", - "signature": "9a36570ce874b967550b3698bf4df92f071e9a0e174bf03f49a37cae6b26ef9d", - "affectsGlobalScope": false - }, - "./src/hoverProvider.ts": { - "version": "f42ffa2e68476c1c4e37f9d35dbe8dc0193383e3b63601aacfa888ebd30f936d", - "signature": "a988a2624e664f9098da756cb24a8c496bb6d7ac89f9c31eef4ba00d10e6dd60", - "affectsGlobalScope": false - }, - "./node_modules/vscode-languageserver/typings/thenable.d.ts": { - "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", - "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", - "affectsGlobalScope": true - }, "../node_modules/@types/node/globals.d.ts": { "version": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476", "signature": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476", @@ -751,6 +706,156 @@ "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", "affectsGlobalScope": false }, + "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts": { + "version": "6cee571d9f8ea88d197d1614e5cf328391e96dff69ca61ab5299a630d0c65822", + "signature": "6cee571d9f8ea88d197d1614e5cf328391e96dff69ca61ab5299a630d0c65822", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts": { + "version": "ceebf93146ac7b3f85276a2501de57c5cf5bb19742944c958bd831f995b41409", + "signature": "ceebf93146ac7b3f85276a2501de57c5cf5bb19742944c958bd831f995b41409", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.stat/out/settings.d.ts": { + "version": "30c47bd1f03a220a10e8c11708a2c73c04135999ca1a35271605f9683d36b432", + "signature": "30c47bd1f03a220a10e8c11708a2c73c04135999ca1a35271605f9683d36b432", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.stat/out/types/index.d.ts": { + "version": "8b9fa6dfb2bec7abe9937fe049505d896550b2ad600cb7114b6fe2813b5cf180", + "signature": "8b9fa6dfb2bec7abe9937fe049505d896550b2ad600cb7114b6fe2813b5cf180", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.stat/out/providers/async.d.ts": { + "version": "c692034610ac35559227657172f6f76581ee7b16c319c7d5973e19b650f11b9f", + "signature": "c692034610ac35559227657172f6f76581ee7b16c319c7d5973e19b650f11b9f", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.stat/out/index.d.ts": { + "version": "079488cc4bf1eef64297994ef8719c078a86380610beea1d1a920c9436997967", + "signature": "079488cc4bf1eef64297994ef8719c078a86380610beea1d1a920c9436997967", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.scandir/out/settings.d.ts": { + "version": "354b18c096926d3f35b597b6309d9792b6517840bbf972c095930d067e28de83", + "signature": "354b18c096926d3f35b597b6309d9792b6517840bbf972c095930d067e28de83", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts": { + "version": "a86bb35bb7b946058e544aba4a7ac5359648d58904184701f1ca23b26b36ccd3", + "signature": "a86bb35bb7b946058e544aba4a7ac5359648d58904184701f1ca23b26b36ccd3", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.scandir/out/providers/async.d.ts": { + "version": "fa316e5f457f8a5ef600f305a60cb0031f0cf07c7c6991b520d353739f56c6ad", + "signature": "fa316e5f457f8a5ef600f305a60cb0031f0cf07c7c6991b520d353739f56c6ad", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.scandir/out/index.d.ts": { + "version": "105b0c9e3b159a1f32ca33bf1cb5ead919ea15bab7143bd99b298ceb687b0e84", + "signature": "105b0c9e3b159a1f32ca33bf1cb5ead919ea15bab7143bd99b298ceb687b0e84", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.walk/out/types/index.d.ts": { + "version": "e336f6c501a424c6e016b3244b094d5924d06b320cb659aaa0adb647ab5a9fd6", + "signature": "e336f6c501a424c6e016b3244b094d5924d06b320cb659aaa0adb647ab5a9fd6", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.walk/out/settings.d.ts": { + "version": "07924b2c69a8f7019f242fbb1d9363b98731456d8afc791fc0622c91f60598b7", + "signature": "07924b2c69a8f7019f242fbb1d9363b98731456d8afc791fc0622c91f60598b7", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.walk/out/readers/reader.d.ts": { + "version": "b8576d89cac43fe52489662c1218b463cba5197c3bec501e2832f5663327838d", + "signature": "b8576d89cac43fe52489662c1218b463cba5197c3bec501e2832f5663327838d", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.walk/out/readers/async.d.ts": { + "version": "e7a91ba8f4fa3f6d166235d9c94fc01d3b055fc4a16bc18dcf0c5c1e0491f22b", + "signature": "e7a91ba8f4fa3f6d166235d9c94fc01d3b055fc4a16bc18dcf0c5c1e0491f22b", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.walk/out/providers/async.d.ts": { + "version": "51d7fcd7672c0f53f01c84e5ea8ef5f3947e8a385807de7eecdc0b7464c2dd68", + "signature": "51d7fcd7672c0f53f01c84e5ea8ef5f3947e8a385807de7eecdc0b7464c2dd68", + "affectsGlobalScope": false + }, + "./node_modules/@nodelib/fs.walk/out/index.d.ts": { + "version": "96892cc7ee950d2bbded6dc7f03ff50a719df54f6529aa938ce3854fef04ee2a", + "signature": "96892cc7ee950d2bbded6dc7f03ff50a719df54f6529aa938ce3854fef04ee2a", + "affectsGlobalScope": false + }, + "./node_modules/fast-glob/out/types/index.d.ts": { + "version": "4498108732bcb5b7000ff9cdc011058b4155e985271ac3f926468acfed0c79dd", + "signature": "4498108732bcb5b7000ff9cdc011058b4155e985271ac3f926468acfed0c79dd", + "affectsGlobalScope": false + }, + "./node_modules/fast-glob/out/settings.d.ts": { + "version": "36d7b72ed8f35f9e21cc223c06697eca0d4699178fc59cfd3a310e2983fd0fd6", + "signature": "36d7b72ed8f35f9e21cc223c06697eca0d4699178fc59cfd3a310e2983fd0fd6", + "affectsGlobalScope": false + }, + "./node_modules/fast-glob/out/managers/tasks.d.ts": { + "version": "8ef499f8b856beca668333ffd33b7a29a83641cbe18c9ad8f25d2748efdf4f0f", + "signature": "8ef499f8b856beca668333ffd33b7a29a83641cbe18c9ad8f25d2748efdf4f0f", + "affectsGlobalScope": false + }, + "./node_modules/fast-glob/out/index.d.ts": { + "version": "51bfe35171efe121cefb2501a6cd674c367d541c4c8b0ae639c126adcc84f37d", + "signature": "51bfe35171efe121cefb2501a6cd674c367d541c4c8b0ae639c126adcc84f37d", + "affectsGlobalScope": false + }, + "./node_modules/globby/index.d.ts": { + "version": "a93850a7116629f9ff482871d44c1b348aa708cbb3be3beece2bc1be2ac01b47", + "signature": "a93850a7116629f9ff482871d44c1b348aa708cbb3be3beece2bc1be2ac01b47", + "affectsGlobalScope": false + }, + "./src/docsParser.ts": { + "version": "0f11c8421b7874953a6951c94730626dd799de3e1670edcd34b56c384d7149a8", + "signature": "3bce7d02bd1075975b1dcbc11d8393234aa374e7d5f92b7a52331f5c74842745", + "affectsGlobalScope": false + }, + "./src/documentMeta.ts": { + "version": "0762b71d84f64011f2d1e49129d8add6c1828fd6af782b19a1507586f4017db8", + "signature": "deab2fffbcebd2149aa3a6d98cf2bb25d4ff9bcadf94a5cfe49851a8c07fb964", + "affectsGlobalScope": false + }, + "./src/context.ts": { + "version": "053e75936c7e88b1e36d7cda7f0585651e0dc649118eb80f9e395300ab5b89cd", + "signature": "d0c0218c22eeb33db1e46ab9f1a3be2d0baf14a50932b080c84d5e6ea79e0d35", + "affectsGlobalScope": false + }, + "./src/utils.ts": { + "version": "b35b74d5fe27ec1fd661db138008098ea41dd6ac97be5ccd43da15449f804b86", + "signature": "6b4eac44812dc202931c75113a0c25a2227b069bdc14c501f58789b3ad47aaf2", + "affectsGlobalScope": false + }, + "./src/docsLibrary.ts": { + "version": "59a367e11a1c9eee4fdc379236d415efecc16b7b8887322642fd79e3bff0d45e", + "signature": "321705166cecc7dd14527e868e68027b0e98ffa4faf188f5b5ac3862313da4ef", + "affectsGlobalScope": false + }, + "./src/docsFormatter.ts": { + "version": "71f8b7661b3074cbc2cb597b28ff6753238eb5458e595a2f371ad1502294df3b", + "signature": "1385f25443033b930f93bf3f2a3c0aabe8e8254b6d35ad75aad1dd9414bb50d2", + "affectsGlobalScope": false + }, + "./src/completionProvider.ts": { + "version": "42d3456b02e7beac0d35b127dae867d768811745a7a95ffb81cc4b396737fe1f", + "signature": "9a36570ce874b967550b3698bf4df92f071e9a0e174bf03f49a37cae6b26ef9d", + "affectsGlobalScope": false + }, + "./src/hoverProvider.ts": { + "version": "198de0921450ea616f9be8cb3b9396d0c8883f3eda9ce46ac7c63a885bead24e", + "signature": "a988a2624e664f9098da756cb24a8c496bb6d7ac89f9c31eef4ba00d10e6dd60", + "affectsGlobalScope": false + }, + "./node_modules/vscode-languageserver/typings/thenable.d.ts": { + "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", + "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d", + "affectsGlobalScope": true + }, "./node_modules/vscode-languageserver/lib/node/files.d.ts": { "version": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5", "signature": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5", @@ -1074,6 +1179,82 @@ "../node_modules/@types/node/stream.d.ts", "../node_modules/@types/node/zlib.d.ts" ], + "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/index.d.ts" + ], + "./node_modules/@nodelib/fs.scandir/out/index.d.ts": [ + "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts", + "./node_modules/@nodelib/fs.scandir/out/providers/async.d.ts", + "./node_modules/@nodelib/fs.scandir/out/settings.d.ts", + "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.scandir/out/providers/async.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/@nodelib/fs.scandir/out/settings.d.ts", + "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.scandir/out/settings.d.ts": [ + "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts", + "./node_modules/@nodelib/fs.stat/out/index.d.ts" + ], + "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/index.d.ts" + ], + "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/index.d.ts" + ], + "./node_modules/@nodelib/fs.stat/out/index.d.ts": [ + "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts", + "./node_modules/@nodelib/fs.stat/out/providers/async.d.ts", + "./node_modules/@nodelib/fs.stat/out/settings.d.ts", + "./node_modules/@nodelib/fs.stat/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.stat/out/providers/async.d.ts": [ + "./node_modules/@nodelib/fs.stat/out/settings.d.ts", + "./node_modules/@nodelib/fs.stat/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.stat/out/settings.d.ts": [ + "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts" + ], + "./node_modules/@nodelib/fs.stat/out/types/index.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/index.d.ts" + ], + "./node_modules/@nodelib/fs.walk/out/index.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "../node_modules/@types/node/stream.d.ts", + "./node_modules/@nodelib/fs.scandir/out/index.d.ts", + "./node_modules/@nodelib/fs.walk/out/providers/async.d.ts", + "./node_modules/@nodelib/fs.walk/out/settings.d.ts", + "./node_modules/@nodelib/fs.walk/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.walk/out/providers/async.d.ts": [ + "./node_modules/@nodelib/fs.walk/out/readers/async.d.ts", + "./node_modules/@nodelib/fs.walk/out/settings.d.ts", + "./node_modules/@nodelib/fs.walk/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.walk/out/readers/async.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/index.d.ts", + "./node_modules/@nodelib/fs.scandir/out/index.d.ts", + "./node_modules/@nodelib/fs.walk/out/readers/reader.d.ts", + "./node_modules/@nodelib/fs.walk/out/settings.d.ts", + "./node_modules/@nodelib/fs.walk/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.walk/out/readers/reader.d.ts": [ + "./node_modules/@nodelib/fs.walk/out/settings.d.ts" + ], + "./node_modules/@nodelib/fs.walk/out/settings.d.ts": [ + "./node_modules/@nodelib/fs.scandir/out/index.d.ts", + "./node_modules/@nodelib/fs.walk/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.walk/out/types/index.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/@nodelib/fs.scandir/out/index.d.ts" + ], "./node_modules/@types/lodash/common/array.d.ts": [ "./node_modules/@types/lodash/common/collection.d.ts", "./node_modules/@types/lodash/common/common.d.ts", @@ -1256,6 +1437,26 @@ "./node_modules/@types/lodash/common/string.d.ts", "./node_modules/@types/lodash/common/util.d.ts" ], + "./node_modules/fast-glob/out/index.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/fast-glob/out/managers/tasks.d.ts", + "./node_modules/fast-glob/out/settings.d.ts", + "./node_modules/fast-glob/out/types/index.d.ts" + ], + "./node_modules/fast-glob/out/managers/tasks.d.ts": [ + "./node_modules/fast-glob/out/settings.d.ts", + "./node_modules/fast-glob/out/types/index.d.ts" + ], + "./node_modules/fast-glob/out/settings.d.ts": [ + "./node_modules/fast-glob/out/types/index.d.ts" + ], + "./node_modules/fast-glob/out/types/index.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/@nodelib/fs.walk/out/index.d.ts" + ], + "./node_modules/globby/index.d.ts": [ + "./node_modules/fast-glob/out/index.d.ts" + ], "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": [ "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts", @@ -1551,6 +1752,7 @@ "./node_modules/@types/lodash/index.d.ts", "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/vscode-languageserver/lib/common/api.d.ts", + "./node_modules/yaml/util.d.ts", "./src/context.ts", "./src/docsParser.ts", "./src/utils.ts" @@ -1558,8 +1760,10 @@ "./src/docsParser.ts": [ "../node_modules/@types/node/fs.d.ts", "../node_modules/@types/node/path.d.ts", + "./node_modules/globby/index.d.ts", "./node_modules/yaml/index.d.ts", - "./node_modules/yaml/util.d.ts" + "./node_modules/yaml/util.d.ts", + "./src/docsLibrary.ts" ], "./src/hoverProvider.ts": [ "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", @@ -1843,6 +2047,82 @@ "../node_modules/@types/node/stream.d.ts", "../node_modules/@types/node/zlib.d.ts" ], + "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/index.d.ts" + ], + "./node_modules/@nodelib/fs.scandir/out/index.d.ts": [ + "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts", + "./node_modules/@nodelib/fs.scandir/out/providers/async.d.ts", + "./node_modules/@nodelib/fs.scandir/out/settings.d.ts", + "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.scandir/out/providers/async.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/@nodelib/fs.scandir/out/settings.d.ts", + "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.scandir/out/settings.d.ts": [ + "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts", + "./node_modules/@nodelib/fs.stat/out/index.d.ts" + ], + "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/index.d.ts" + ], + "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/index.d.ts" + ], + "./node_modules/@nodelib/fs.stat/out/index.d.ts": [ + "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts", + "./node_modules/@nodelib/fs.stat/out/providers/async.d.ts", + "./node_modules/@nodelib/fs.stat/out/settings.d.ts", + "./node_modules/@nodelib/fs.stat/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.stat/out/providers/async.d.ts": [ + "./node_modules/@nodelib/fs.stat/out/settings.d.ts", + "./node_modules/@nodelib/fs.stat/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.stat/out/settings.d.ts": [ + "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts" + ], + "./node_modules/@nodelib/fs.stat/out/types/index.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/index.d.ts" + ], + "./node_modules/@nodelib/fs.walk/out/index.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "../node_modules/@types/node/stream.d.ts", + "./node_modules/@nodelib/fs.scandir/out/index.d.ts", + "./node_modules/@nodelib/fs.walk/out/providers/async.d.ts", + "./node_modules/@nodelib/fs.walk/out/settings.d.ts", + "./node_modules/@nodelib/fs.walk/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.walk/out/providers/async.d.ts": [ + "./node_modules/@nodelib/fs.walk/out/readers/async.d.ts", + "./node_modules/@nodelib/fs.walk/out/settings.d.ts", + "./node_modules/@nodelib/fs.walk/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.walk/out/readers/async.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/index.d.ts", + "./node_modules/@nodelib/fs.scandir/out/index.d.ts", + "./node_modules/@nodelib/fs.walk/out/readers/reader.d.ts", + "./node_modules/@nodelib/fs.walk/out/settings.d.ts", + "./node_modules/@nodelib/fs.walk/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.walk/out/readers/reader.d.ts": [ + "./node_modules/@nodelib/fs.walk/out/settings.d.ts" + ], + "./node_modules/@nodelib/fs.walk/out/settings.d.ts": [ + "./node_modules/@nodelib/fs.scandir/out/index.d.ts", + "./node_modules/@nodelib/fs.walk/out/types/index.d.ts" + ], + "./node_modules/@nodelib/fs.walk/out/types/index.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/@nodelib/fs.scandir/out/index.d.ts" + ], "./node_modules/@types/lodash/common/array.d.ts": [ "./node_modules/@types/lodash/common/collection.d.ts", "./node_modules/@types/lodash/common/common.d.ts", @@ -2025,6 +2305,26 @@ "./node_modules/@types/lodash/common/string.d.ts", "./node_modules/@types/lodash/common/util.d.ts" ], + "./node_modules/fast-glob/out/index.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/fast-glob/out/managers/tasks.d.ts", + "./node_modules/fast-glob/out/settings.d.ts", + "./node_modules/fast-glob/out/types/index.d.ts" + ], + "./node_modules/fast-glob/out/managers/tasks.d.ts": [ + "./node_modules/fast-glob/out/settings.d.ts", + "./node_modules/fast-glob/out/types/index.d.ts" + ], + "./node_modules/fast-glob/out/settings.d.ts": [ + "./node_modules/fast-glob/out/types/index.d.ts" + ], + "./node_modules/fast-glob/out/types/index.d.ts": [ + "../node_modules/@types/node/index.d.ts", + "./node_modules/@nodelib/fs.walk/out/index.d.ts" + ], + "./node_modules/globby/index.d.ts": [ + "./node_modules/fast-glob/out/index.d.ts" + ], "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": [ "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts", @@ -2308,10 +2608,12 @@ "./src/docsLibrary.ts": [ "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/vscode-languageserver/lib/common/api.d.ts", + "./node_modules/yaml/util.d.ts", "./src/context.ts" ], "./src/docsParser.ts": [ - "./node_modules/yaml/util.d.ts" + "./node_modules/yaml/util.d.ts", + "./src/docsLibrary.ts" ], "./src/hoverProvider.ts": [ "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", @@ -2412,6 +2714,22 @@ "../node_modules/typescript/lib/lib.es5.d.ts", "../node_modules/typescript/lib/lib.esnext.intl.d.ts", "./node_modules/@flatten-js/interval-tree/index.d.ts", + "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts", + "./node_modules/@nodelib/fs.scandir/out/index.d.ts", + "./node_modules/@nodelib/fs.scandir/out/providers/async.d.ts", + "./node_modules/@nodelib/fs.scandir/out/settings.d.ts", + "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts", + "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts", + "./node_modules/@nodelib/fs.stat/out/index.d.ts", + "./node_modules/@nodelib/fs.stat/out/providers/async.d.ts", + "./node_modules/@nodelib/fs.stat/out/settings.d.ts", + "./node_modules/@nodelib/fs.stat/out/types/index.d.ts", + "./node_modules/@nodelib/fs.walk/out/index.d.ts", + "./node_modules/@nodelib/fs.walk/out/providers/async.d.ts", + "./node_modules/@nodelib/fs.walk/out/readers/async.d.ts", + "./node_modules/@nodelib/fs.walk/out/readers/reader.d.ts", + "./node_modules/@nodelib/fs.walk/out/settings.d.ts", + "./node_modules/@nodelib/fs.walk/out/types/index.d.ts", "./node_modules/@types/chai/index.d.ts", "./node_modules/@types/ini/index.d.ts", "./node_modules/@types/lodash/common/array.d.ts", @@ -2428,6 +2746,11 @@ "./node_modules/@types/lodash/common/util.d.ts", "./node_modules/@types/lodash/index.d.ts", "./node_modules/@types/mocha/index.d.ts", + "./node_modules/fast-glob/out/index.d.ts", + "./node_modules/fast-glob/out/managers/tasks.d.ts", + "./node_modules/fast-glob/out/settings.d.ts", + "./node_modules/fast-glob/out/types/index.d.ts", + "./node_modules/globby/index.d.ts", "./node_modules/vscode-jsonrpc/lib/common/api.d.ts", "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts", "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts", From 6e99a71c3cf5df1a2a7f2f09839bcc77d8882b46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Thu, 25 Mar 2021 19:46:50 +0100 Subject: [PATCH 025/558] Implemented processing of raw module documentation objects --- server/src/docsLibrary.ts | 114 ++++++++++++++++++++++++++++-------- server/src/docsParser.ts | 13 +--- server/src/utils.ts | 19 ++++-- server/tsconfig.tsbuildinfo | 13 ++-- 4 files changed, 110 insertions(+), 49 deletions(-) diff --git a/server/src/docsLibrary.ts b/server/src/docsLibrary.ts index 09863890a..37fbec719 100644 --- a/server/src/docsLibrary.ts +++ b/server/src/docsLibrary.ts @@ -1,10 +1,9 @@ -import { collectionModuleFilter, DocsParser } from './docsParser'; +import { DocsParser } from './docsParser'; import * as _ from 'lodash'; -import * as path from 'path'; import { WorkspaceFolder } from 'vscode-languageserver'; import { IContext } from './context'; import { TextDocument } from 'vscode-languageserver-textdocument'; -import { hasOwnProperty } from './utils'; +import { hasOwnProperty, isObject } from './utils'; import { YAMLError } from 'yaml/util'; export class DocsLibrary { private modules = new Map(); @@ -70,28 +69,31 @@ export class DocsLibrary { if (module && !module.fragments) { module.fragments = []; if ( - hasOwnProperty(module.contents, 'extends_documentation_fragment') && - module.contents.extends_documentation_fragment instanceof Array + hasOwnProperty( + module.rawDocumentation, + 'extends_documentation_fragment' + ) && + module.rawDocumentation.extends_documentation_fragment instanceof Array ) { const resultContents = {}; - for (const docFragmentName of module.contents + for (const docFragmentName of module.rawDocumentation .extends_documentation_fragment) { const docFragment = this.docFragments.get(docFragmentName); if (docFragment) { module.fragments.push(docFragment); // currently used only as indicator _.mergeWith( resultContents, - docFragment.contents, + docFragment.rawDocumentation, this.docFragmentMergeCustomizer ); } } _.mergeWith( resultContents, - module.contents, + module.rawDocumentation, this.docFragmentMergeCustomizer ); - module.contents = resultContents; + module.rawDocumentation = resultContents; } } return module; @@ -101,7 +103,7 @@ export class DocsLibrary { objValue: unknown, srcValue: unknown, key: string - ): Record[] | undefined { + ): Record[] | undefined { if ( ['notes', 'requirements', 'seealso'].includes(key) && _.isArray(objValue) @@ -110,14 +112,74 @@ export class DocsLibrary { } } + private processRawDocumentation( + rawDoc: unknown + ): IModuleDocumentation | undefined { + if (isObject(rawDoc) && typeof rawDoc.module === 'string') { + const moduleDoc: IModuleDocumentation = { + module: rawDoc.module, + options: this.processRawOptions(rawDoc.options), + deprecated: !!rawDoc.deprecated, + }; + if (isIDescription(rawDoc.short_description)) + moduleDoc.shortDescription = rawDoc.short_description; + if (isIDescription(rawDoc.description)) + moduleDoc.description = rawDoc.description; + if (typeof rawDoc.version_added === 'string') + moduleDoc.versionAdded = rawDoc.version_added; + if (isIDescription(rawDoc.author)) moduleDoc.author = rawDoc.author; + if (isIDescription(rawDoc.requirements)) + moduleDoc.requirements = rawDoc.requirements; + if (typeof rawDoc.seealso === 'object') + moduleDoc.seealso = rawDoc.seealso as Record; + if (isIDescription(rawDoc.notes)) moduleDoc.notes = rawDoc.notes; + return moduleDoc; + } + } + + private processRawOptions(rawOptions: unknown): Map { + const options = new Map(); + if (isObject(rawOptions)) { + for (const [optionName, rawOption] of Object.entries(rawOptions)) { + if (isObject(rawOption)) { + const optionDoc: IOption = { + name: optionName, + required: !!rawOption.required, + default: rawOption.default, + suboptions: rawOption.suboptions, + }; + if (isIDescription(rawOption.description)) + optionDoc.description = rawOption.description; + if (rawOption.choices instanceof Array) + optionDoc.choices = rawOption.choices; + if (typeof rawOption.type === 'string') + optionDoc.type = rawOption.type; + if (typeof rawOption.elements === 'string') + optionDoc.elements = rawOption.elements; + if (rawOption.aliases instanceof Array) + optionDoc.aliases = rawOption.aliases; + if (typeof rawOption.version_added === 'string') + optionDoc.versionAdded = rawOption.version_added; + options.set(optionName, optionDoc); + if (optionDoc.aliases) { + for (const alias of optionDoc.aliases) { + options.set(alias, optionDoc); + } + } + } + } + } + return options; + } + public async getModuleDescription( module: string, doc: TextDocument ): Promise { - const contents = (await this.findModule(module, doc))?.contents; + const contents = (await this.findModule(module, doc))?.rawDocumentation; if ( hasOwnProperty(contents, 'description') && - (contents.description instanceof Array || // won't check that all elements are string + (contents.description instanceof Array || // won't check if all elements are string typeof contents.description === 'string') ) return contents.description; @@ -128,7 +190,7 @@ export class DocsLibrary { doc: TextDocument ): Promise { const moduleDoc = await this.findModule(module, doc); - const options = moduleDoc?.contents.options; + const options = moduleDoc?.rawDocumentation.options; if (options && typeof options === 'object') { return Object.entries(options).map( // TODO: perform typechecking @@ -154,7 +216,8 @@ export class DocsLibrary { doc: TextDocument, option: string ): Promise { - const options = (await this.findModule(module, doc))?.contents.options; + const options = (await this.findModule(module, doc))?.rawDocumentation + .options; if (hasOwnProperty(options, option)) { const optionObj = options[option]; const optionDoc: IOption = { @@ -193,15 +256,15 @@ function isIDescription(obj: unknown): obj is IDescription { } export interface IModuleDocumentation { module: string; - shortDescription: IDescription; - description: IDescription; - versionAdded: string; - author: IDescription; - deprecated: Record; - options: IOption[]; - requirements: IDescription; - seealso: Record; - notes: IDescription; + shortDescription?: IDescription; + description?: IDescription; + versionAdded?: string; + author?: IDescription; + deprecated: boolean; + options: Map; + requirements?: IDescription; + seealso?: Record; + notes?: IDescription; } export interface IModuleMetadata { @@ -210,7 +273,8 @@ export interface IModuleMetadata { namespace: string; collection: string; name: string; - contents: Record; + rawDocumentation: Record; + documentation?: IModuleDocumentation; fragments?: IModuleMetadata[]; errors: YAMLError[]; } @@ -224,7 +288,7 @@ export interface IOption { type?: string; elements?: string; aliases?: Array; - version_added?: string; + versionAdded?: string; suboptions?: unknown; } diff --git a/server/src/docsParser.ts b/server/src/docsParser.ts index a85d65ad1..852b9e5e8 100644 --- a/server/src/docsParser.ts +++ b/server/src/docsParser.ts @@ -65,15 +65,6 @@ export class DocsParser { } } -export function collectionModuleFilter( - baseDir: string -): (value: string) => boolean { - return (f: string) => { - const subPathArray = f.substr(baseDir.length).split(path.sep); - return subPathArray[subPathArray.length - 2] === 'modules'; - }; -} - export class LazyModuleDocumentation implements IModuleMetadata { source: string; fqcn: string; @@ -98,7 +89,7 @@ export class LazyModuleDocumentation implements IModuleMetadata { this.name = name; } - public get contents(): Record { + public get rawDocumentation(): Record { if (!this._contents) { const contents = fs.readFileSync(this.source, { encoding: 'utf8' }); const m = DocsParser.docsRegex.exec(contents); @@ -114,7 +105,7 @@ export class LazyModuleDocumentation implements IModuleMetadata { return this._contents; } - public set contents(value: Record) { + public set rawDocumentation(value: Record) { this._contents = value; } } diff --git a/server/src/utils.ts b/server/src/utils.ts index 44d9e53b4..83f4838bf 100644 --- a/server/src/utils.ts +++ b/server/src/utils.ts @@ -217,10 +217,17 @@ export async function getAnsibleMetadata( export function hasOwnProperty( obj: X, prop: Y -): obj is X & Record { - return ( - obj && - typeof obj === 'object' && - (obj as Record).hasOwnProperty(prop) - ); +): obj is X & Record & Record { + return isObject(obj) && obj.hasOwnProperty(prop); +} + +/** + * Checks whether `obj` is a non-null object. + * @param obj + * @returns + */ +export function isObject( + obj: X +): obj is X & Record { + return obj && typeof obj === 'object'; } diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo index 31ae1a8e8..bf03118d1 100644 --- a/server/tsconfig.tsbuildinfo +++ b/server/tsconfig.tsbuildinfo @@ -812,8 +812,8 @@ "affectsGlobalScope": false }, "./src/docsParser.ts": { - "version": "0f11c8421b7874953a6951c94730626dd799de3e1670edcd34b56c384d7149a8", - "signature": "3bce7d02bd1075975b1dcbc11d8393234aa374e7d5f92b7a52331f5c74842745", + "version": "512aa23c5b5cbaf0f3b76ee9a1bf86a765ae69b456848ce3d5c2666c6cf773ea", + "signature": "7bb1d35d1ba5d8499ebf0cbb8c6a5a1fbe53b00611bcf3ce9a1051b63e012f7a", "affectsGlobalScope": false }, "./src/documentMeta.ts": { @@ -827,13 +827,13 @@ "affectsGlobalScope": false }, "./src/utils.ts": { - "version": "b35b74d5fe27ec1fd661db138008098ea41dd6ac97be5ccd43da15449f804b86", - "signature": "6b4eac44812dc202931c75113a0c25a2227b069bdc14c501f58789b3ad47aaf2", + "version": "b2f3fa6d0f3375b84d3a056a41acb21fa825d0c0373435b2b1a77b4be452f5d3", + "signature": "9e62915cfb6dfbd8f61020a2bddcedb26ce6215b3a3258739e5c7f6f5fc4975d", "affectsGlobalScope": false }, "./src/docsLibrary.ts": { - "version": "59a367e11a1c9eee4fdc379236d415efecc16b7b8887322642fd79e3bff0d45e", - "signature": "321705166cecc7dd14527e868e68027b0e98ffa4faf188f5b5ac3862313da4ef", + "version": "6bf08868a6cbfd293a6b3ba5d5aa3b7266fc17473fa96617ed54a00929fb52e9", + "signature": "0baef1a2b816e8859b0912121bf77b1d5ff3f3cb871492cdc113d276793355f3", "affectsGlobalScope": false }, "./src/docsFormatter.ts": { @@ -1748,7 +1748,6 @@ "./src/docsLibrary.ts" ], "./src/docsLibrary.ts": [ - "../node_modules/@types/node/path.d.ts", "./node_modules/@types/lodash/index.d.ts", "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts", "./node_modules/vscode-languageserver/lib/common/api.d.ts", From 5d0ca01681442be562a729a2865c6583fec6fcf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Fri, 26 Mar 2021 16:20:52 +0100 Subject: [PATCH 026/558] Implemented definition provider Conversion to typed structure for raw JSON with module documentation. Better formatting for documentation. Unified for hover & completion. --- server/src/completionProvider.ts | 118 +++++++++++++++------------ server/src/definitionProvider.ts | 49 +++++++++++ server/src/docsFormatter.ts | 53 ++++++++---- server/src/docsLibrary.ts | 136 ++++++++++--------------------- server/src/docsParser.ts | 11 ++- server/src/hoverProvider.ts | 26 +++--- server/src/server.ts | 9 ++ server/src/utils.ts | 10 +++ server/tsconfig.tsbuildinfo | 46 ++++++++--- 9 files changed, 271 insertions(+), 187 deletions(-) create mode 100644 server/src/definitionProvider.ts diff --git a/server/src/completionProvider.ts b/server/src/completionProvider.ts index 80681aa75..7e6ddc157 100644 --- a/server/src/completionProvider.ts +++ b/server/src/completionProvider.ts @@ -1,11 +1,11 @@ +import _ = require('lodash'); import { CompletionItem, CompletionItemKind } from 'vscode-languageserver'; import { Position, TextDocument } from 'vscode-languageserver-textdocument'; import { parseAllDocuments } from 'yaml'; import { Pair, Scalar, YAMLMap } from 'yaml/types'; -import { formatDescription, formatOption, getDetails } from './docsFormatter'; -import { DocsLibrary } from './docsLibrary'; -import { mayBeModule } from './utils'; -import { AncestryBuilder, getPathAt } from './utils'; +import { formatOption, getDetails } from './docsFormatter'; +import { DocsLibrary, IOption } from './docsLibrary'; +import { AncestryBuilder, getPathAt, mayBeModule } from './utils'; export async function doCompletion( document: TextDocument, @@ -37,55 +37,69 @@ export async function doCompletion( if (modulePath && mayBeModule(modulePath)) { const moduleNode = modulePath[modulePath.length - 1] as Scalar; - if (await docsLibrary.isModule(moduleNode.value, document)) { - const options = await docsLibrary.getModuleOptions( - moduleNode.value, - document - ); + const module = await docsLibrary.findModule(moduleNode.value, document); + if (module && module.documentation) { + const moduleOptions = module.documentation.options; - if (options) { - const optionMap = (new AncestryBuilder(modulePath) - .parent(Pair) - .get() as Pair).value as YAMLMap; + const optionMap = (new AncestryBuilder(modulePath) + .parent(Pair) + .get() as Pair).value as YAMLMap; - // find options that have been already provided by the user - const providedOptions = new Set( - optionMap.items.map((pair) => { - if (pair.key && pair.key instanceof Scalar) { - return pair.key.value; - } - }) - ); + // find options that have been already provided by the user + const providedOptions = new Set( + optionMap.items.map((pair) => { + if (pair.key && pair.key instanceof Scalar) { + return pair.key.value; + } + }) + ); - // filter out the provided options from completion - const filteredOptions = options?.filter( - (o) => !providedOptions.has(o.name) - ); - return filteredOptions - .sort((a, b) => { - // make required options appear on the top - if (a.required && !b.required) { - return -1; - } else if (!a.required && b.required) { - return 1; - } else { - return 0; - } - }) - .map((option) => { - // translate option documentation to CompletionItem - const details = getDetails(option); - return { - label: option.name, - detail: details, - kind: CompletionItemKind.Property, - documentation: formatOption(option), - insertText: atEndOfLine(document, position) - ? `${option.name}: ` - : undefined, - }; - }); - } + const remainingOptions = [...moduleOptions.entries()].filter( + (o) => !providedOptions.has(o[1].name) + ); + return remainingOptions + .map((entry) => { + return { + name: entry[0], + data: entry[1], + }; + }) + .sort((a, b) => { + // make required options appear on the top + if (a.data.required && !b.data.required) { + return -1; + } else if (!a.data.required && b.data.required) { + return 1; + } else { + return 0; + } + }) + .sort((a, b) => { + // push all aliases to the bottom + if (isAlias(a) && !isAlias(b)) { + return 1; + } else if (!isAlias(a) && isAlias(b)) { + return -1; + } else { + return 0; + } + }) + .map((option, index) => { + // translate option documentation to CompletionItem + const details = getDetails(option.data); + return { + label: option.name, + detail: details, + sortText: index.toString().padStart(3), + kind: isAlias(option) + ? CompletionItemKind.Reference + : CompletionItemKind.Property, + documentation: formatOption(option.data), + insertText: atEndOfLine(document, position) + ? `${option.name}: ` + : undefined, + }; + }); } } } @@ -93,6 +107,10 @@ export async function doCompletion( return null; } +function isAlias(option: { name: string; data: IOption }): boolean { + return option.name !== option.data.name; +} + function insert(str: string, index: number, val: string) { return `${str.substring(0, index)}${val}${str.substring(index)}`; } diff --git a/server/src/definitionProvider.ts b/server/src/definitionProvider.ts new file mode 100644 index 000000000..56c1e7946 --- /dev/null +++ b/server/src/definitionProvider.ts @@ -0,0 +1,49 @@ +import { Definition, DefinitionLink, Range } from 'vscode-languageserver'; +import { Position, TextDocument } from 'vscode-languageserver-textdocument'; +import { parseAllDocuments } from 'yaml'; +import { Scalar } from 'yaml/types'; +import { DocsLibrary } from './docsLibrary'; +import { AncestryBuilder, getPathAt, mayBeModule, toLspRange } from './utils'; + +export async function getDefinition( + document: TextDocument, + position: Position, + docsLibrary: DocsLibrary +): Promise { + const yamlDocs = parseAllDocuments(document.getText()); + const path = getPathAt(document, position, yamlDocs); + if (path) { + const node = path[path.length - 1]; + if ( + node instanceof Scalar && + new AncestryBuilder(path).parentKey(node.value).get() === node // ensure we look at a key, not value of a Pair + ) { + if (mayBeModule(path)) { + const module = await docsLibrary.findModule(node.value, document); + if (module) { + return [ + { + targetUri: module.source, + originSelectionRange: node.range + ? toLspRange(node.range, document) + : undefined, + targetRange: Range.create( + module.sourceLineRange[0], + 0, + module.sourceLineRange[1], + 0 + ), + targetSelectionRange: Range.create( + module.sourceLineRange[0], + 0, + module.sourceLineRange[1], + 0 + ), + }, + ]; + } + } + } + } + return null; +} diff --git a/server/src/docsFormatter.ts b/server/src/docsFormatter.ts index 208f81d42..36dd52ee2 100644 --- a/server/src/docsFormatter.ts +++ b/server/src/docsFormatter.ts @@ -1,7 +1,32 @@ +import { format } from 'util'; import { MarkupContent, MarkupKind } from 'vscode-languageserver'; -import { IDescription, IOption } from './docsLibrary'; +import { IDescription, IModuleDocumentation, IOption } from './docsLibrary'; -export function formatModule() {} +export function formatModule(module: IModuleDocumentation): MarkupContent { + const sections: string[] = []; + if (module.deprecated) { + sections.push('**DEPRECATED**'); + } + if (module.shortDescription) { + sections.push(`*${module.shortDescription}*`); + } + if (module.description) { + sections.push('**Description**'); + sections.push(formatDescription(module.description)); + } + if (module.requirements) { + sections.push('**Requirements**'); + sections.push(formatDescription(module.requirements)); + } + if (module.notes) { + sections.push('**Notes**'); + sections.push(formatDescription(module.notes)); + } + return { + kind: MarkupKind.Markdown, + value: sections.join('\n\n'), + }; +} export function formatOption( option: IOption, @@ -11,29 +36,32 @@ export function formatOption( if (with_details) { const details = getDetails(option); if (details) { - sections.push(`*${details}*`); + sections.push(`\`${details}\``); } } if (option.description) { - sections.push(formatDescription(option.description, false).value); + sections.push(formatDescription(option.description, false)); } - if (option.default) { - sections.push(`*Default*: \`${option.default}\``); + if (option.default !== undefined) { + sections.push( + `*Default*:\n \`\`\`javascript\n${format(option.default)}\n\`\`\`` + ); } if (option.choices) { const formattedChoiceArray = option.choices.map((c) => `\`${c}\``); sections.push(`*Choices*: [${formattedChoiceArray.toString()}]`); } + if (option.aliases) { + const formattedChoiceArray = option.aliases.map((a) => `\`${a}\``); + sections.push(`*Aliases*: [${formattedChoiceArray.toString()}]`); + } return { kind: MarkupKind.Markdown, value: sections.join('\n\n'), }; } -export function formatDescription( - doc?: IDescription, - asList = true -): MarkupContent { +export function formatDescription(doc?: IDescription, asList = true): string { let result = ''; if (doc instanceof Array) { const lines: string[] = []; @@ -48,10 +76,7 @@ export function formatDescription( } else if (typeof doc === 'string') { result += replaceMacros(doc); } - return { - kind: MarkupKind.Markdown, - value: `${result}\n`, - }; + return result; } export function getDetails(option: IOption): string | undefined { diff --git a/server/src/docsLibrary.ts b/server/src/docsLibrary.ts index 37fbec719..8e2dc91c5 100644 --- a/server/src/docsLibrary.ts +++ b/server/src/docsLibrary.ts @@ -48,7 +48,7 @@ export class DocsLibrary { } } - private async findModule( + public async findModule( searchText: string, doc: TextDocument ): Promise { @@ -65,40 +65,52 @@ export class DocsLibrary { this.modules.has(prefix + searchText) ); const module = this.modules.get(prefix + searchText); - // Collect information from documentation fragments - if (module && !module.fragments) { - module.fragments = []; - if ( - hasOwnProperty( - module.rawDocumentation, - 'extends_documentation_fragment' - ) && - module.rawDocumentation.extends_documentation_fragment instanceof Array - ) { - const resultContents = {}; - for (const docFragmentName of module.rawDocumentation - .extends_documentation_fragment) { - const docFragment = this.docFragments.get(docFragmentName); - if (docFragment) { - module.fragments.push(docFragment); // currently used only as indicator - _.mergeWith( - resultContents, - docFragment.rawDocumentation, - this.docFragmentMergeCustomizer - ); - } - } - _.mergeWith( - resultContents, - module.rawDocumentation, - this.docFragmentMergeCustomizer + if (module) { + if (!module.fragments) { + // collect information from documentation fragments + this.processDocumentationFragments(module); + } + if (!module.documentation) { + // translate raw documentation into a typed structure + module.documentation = this.processRawDocumentation( + module.rawDocumentation ); - module.rawDocumentation = resultContents; } } return module; } + private processDocumentationFragments(module: IModuleMetadata) { + module.fragments = []; + if ( + hasOwnProperty( + module.rawDocumentation, + 'extends_documentation_fragment' + ) && + module.rawDocumentation.extends_documentation_fragment instanceof Array + ) { + const resultContents = {}; + for (const docFragmentName of module.rawDocumentation + .extends_documentation_fragment) { + const docFragment = this.docFragments.get(docFragmentName); + if (docFragment) { + module.fragments.push(docFragment); // currently used only as indicator + _.mergeWith( + resultContents, + docFragment.rawDocumentation, + this.docFragmentMergeCustomizer + ); + } + } + _.mergeWith( + resultContents, + module.rawDocumentation, + this.docFragmentMergeCustomizer + ); + module.rawDocumentation = resultContents; + } + } + private docFragmentMergeCustomizer( objValue: unknown, srcValue: unknown, @@ -184,66 +196,6 @@ export class DocsLibrary { ) return contents.description; } - - public async getModuleOptions( - module: string, - doc: TextDocument - ): Promise { - const moduleDoc = await this.findModule(module, doc); - const options = moduleDoc?.rawDocumentation.options; - if (options && typeof options === 'object') { - return Object.entries(options).map( - // TODO: perform typechecking - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ([optionName, optionObj]: [string, any]) => { - return { - name: optionName, - description: optionObj.description, - required: !!optionObj.required, - default: optionObj.default, - choices: optionObj.choices, - type: optionObj.type, - elements: optionObj.elements, - aliases: optionObj.aliases, - }; - } - ); - } - } - - public async getModuleOption( - module: string, - doc: TextDocument, - option: string - ): Promise { - const options = (await this.findModule(module, doc))?.rawDocumentation - .options; - if (hasOwnProperty(options, option)) { - const optionObj = options[option]; - const optionDoc: IOption = { - name: option, - required: !!( - hasOwnProperty(optionObj, 'required') && optionObj.required - ), - }; - if ( - hasOwnProperty(optionObj, 'description') && - isIDescription(optionObj.description) - ) - optionDoc.description = optionObj.description; - if ( - hasOwnProperty(optionObj, 'choices') && - optionObj.choices instanceof Array - ) - optionDoc.choices = optionObj.choices; - - return optionDoc; - } - } - - public async isModule(module: string, doc: TextDocument): Promise { - return !!(await this.findModule(module, doc)); - } } export type IDescription = string | Array; @@ -269,6 +221,7 @@ export interface IModuleDocumentation { export interface IModuleMetadata { source: string; + sourceLineRange: [number, number]; fqcn: string; namespace: string; collection: string; @@ -291,8 +244,3 @@ export interface IOption { versionAdded?: string; suboptions?: unknown; } - -// const test = new DocsLibrary(); -// test.initialize().then(() => { -// console.log(test.builtInModules); -// }); diff --git a/server/src/docsParser.ts b/server/src/docsParser.ts index 852b9e5e8..1f7da1a7f 100644 --- a/server/src/docsParser.ts +++ b/server/src/docsParser.ts @@ -6,7 +6,7 @@ import { YAMLError } from 'yaml/util'; import { IModuleMetadata } from './docsLibrary'; export class DocsParser { - public static docsRegex = /\s*DOCUMENTATION\s*=\s*r?('''|""")(?:\n---)?\n?(?.*?)\1/s; + public static docsRegex = /(?
[ \t]*DOCUMENTATION\s*=\s*r?(?'''|""")(?:\n---)?\n?)(?.*?)\k/s;
 
   public static async parseDirectory(
     dir: string,
@@ -67,6 +67,7 @@ export class DocsParser {
 
 export class LazyModuleDocumentation implements IModuleMetadata {
   source: string;
+  sourceLineRange: [number, number] = [0, 0];
   fqcn: string;
   namespace: string;
   collection: string;
@@ -93,7 +94,13 @@ export class LazyModuleDocumentation implements IModuleMetadata {
     if (!this._contents) {
       const contents = fs.readFileSync(this.source, { encoding: 'utf8' });
       const m = DocsParser.docsRegex.exec(contents);
-      if (m && m.groups && m.groups.doc) {
+      if (m && m.groups && m.groups.doc && m.groups.pre) {
+        // determine documentation start/end lines for definition provider
+        let startLine = contents.substr(0, m.index).match(/\n/g)?.length || 0;
+        startLine += m.groups.pre.match(/\n/g)?.length || 0;
+        const endLine = startLine + (m.groups.doc.match(/\n/g)?.length || 0);
+        this.sourceLineRange = [startLine, endLine];
+
         const document = parseDocument(m.groups.doc);
         // There's about 20 modules (out of ~3200) in Ansible 2.9 libs that contain YAML syntax errors
         // Still, document.toJSON() works on them
diff --git a/server/src/hoverProvider.ts b/server/src/hoverProvider.ts
index 9bf1e9768..b99a183ef 100644
--- a/server/src/hoverProvider.ts
+++ b/server/src/hoverProvider.ts
@@ -1,11 +1,10 @@
 import { Hover } from 'vscode-languageserver';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
-import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
-import { formatDescription, formatOption } from './docsFormatter';
+import { Scalar, YAMLMap } from 'yaml/types';
+import { formatModule, formatOption } from './docsFormatter';
 import { DocsLibrary } from './docsLibrary';
-import { mayBeModule } from './utils';
-import { AncestryBuilder, getPathAt } from './utils';
+import { AncestryBuilder, getPathAt, mayBeModule, toLspRange } from './utils';
 
 export async function doHover(
   document: TextDocument,
@@ -21,13 +20,11 @@ export async function doHover(
       new AncestryBuilder(path).parentKey(node.value).get() === node // ensure we look at a key, not value of a Pair
     ) {
       if (mayBeModule(path)) {
-        const description = await docsLibrary.getModuleDescription(
-          node.value,
-          document
-        );
-        if (description) {
+        const module = await docsLibrary.findModule(node.value, document);
+        if (module && module.documentation) {
           return {
-            contents: formatDescription(description),
+            contents: formatModule(module.documentation),
+            range: node.range ? toLspRange(node.range, document) : undefined,
           };
         }
       }
@@ -39,12 +36,9 @@ export async function doHover(
 
       if (modulePath && mayBeModule(modulePath)) {
         const moduleNode = modulePath[modulePath.length - 1] as Scalar;
-        if (await docsLibrary.isModule(moduleNode.value, document)) {
-          const option = await docsLibrary.getModuleOption(
-            moduleNode.value,
-            document,
-            node.value
-          );
+        const module = await docsLibrary.findModule(moduleNode.value, document);
+        if (module && module.documentation) {
+          const option = module.documentation.options.get(node.value);
           if (option) {
             return {
               contents: formatOption(option, true),
diff --git a/server/src/server.ts b/server/src/server.ts
index 888dc986a..47903e0ae 100644
--- a/server/src/server.ts
+++ b/server/src/server.ts
@@ -12,6 +12,7 @@ import {
 import { AnsibleConfig } from './ansibleConfig';
 import { doCompletion } from './completionProvider';
 import { IContext } from './context';
+import { getDefinition } from './definitionProvider';
 import { DocsLibrary } from './docsLibrary';
 import { DocumentMetadata } from './documentMeta';
 import { doHover } from './hoverProvider';
@@ -58,6 +59,7 @@ connection.onInitialize((params: InitializeParams) => {
       completionProvider: {
         resolveProvider: false,
       },
+      definitionProvider: true,
     },
   };
   if (hasWorkspaceFolderCapability) {
@@ -183,6 +185,13 @@ docsLibrary.initialize().then(() => {
     }
     return null;
   });
+  connection.onDefinition((params) => {
+    const document = documents.get(params.textDocument.uri);
+    if (document) {
+      return getDefinition(document, params.position, docsLibrary);
+    }
+    return null;
+  });
 });
 
 // Make the text document manager listen on the connection
diff --git a/server/src/utils.ts b/server/src/utils.ts
index 83f4838bf..a244fade3 100644
--- a/server/src/utils.ts
+++ b/server/src/utils.ts
@@ -7,6 +7,7 @@ import * as path from 'path';
 import { type } from 'node:os';
 import { DocumentMetadata } from './documentMeta';
 import { URL } from 'url';
+import { Range } from 'vscode-languageserver-types';
 
 export function getPathAt(
   document: TextDocument,
@@ -214,6 +215,15 @@ export async function getAnsibleMetadata(
   return metadata;
 }
 
+export function toLspRange(
+  range: [number, number],
+  textDocument: TextDocument
+): Range {
+  const start = textDocument.positionAt(range[0]);
+  const end = textDocument.positionAt(range[1]);
+  return Range.create(start, end);
+}
+
 export function hasOwnProperty(
   obj: X,
   prop: Y
diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo
index bf03118d1..826ae116e 100644
--- a/server/tsconfig.tsbuildinfo
+++ b/server/tsconfig.tsbuildinfo
@@ -812,8 +812,8 @@
         "affectsGlobalScope": false
       },
       "./src/docsParser.ts": {
-        "version": "512aa23c5b5cbaf0f3b76ee9a1bf86a765ae69b456848ce3d5c2666c6cf773ea",
-        "signature": "7bb1d35d1ba5d8499ebf0cbb8c6a5a1fbe53b00611bcf3ce9a1051b63e012f7a",
+        "version": "92d8da99d2d08c61837310f4e88f6532bb5bb0479dc175dc5c43e442b434fc7c",
+        "signature": "79ec5df879e0f47c4c00d7084dab37a950f43747ac7548a41c448e77816d9c0a",
         "affectsGlobalScope": false
       },
       "./src/documentMeta.ts": {
@@ -827,27 +827,32 @@
         "affectsGlobalScope": false
       },
       "./src/utils.ts": {
-        "version": "b2f3fa6d0f3375b84d3a056a41acb21fa825d0c0373435b2b1a77b4be452f5d3",
-        "signature": "9e62915cfb6dfbd8f61020a2bddcedb26ce6215b3a3258739e5c7f6f5fc4975d",
+        "version": "6335a74ddd158e289da3a522a1bf5a7c96289f88a1ae638492de5b64aff60a87",
+        "signature": "08b40e57d0784881a1faecdd2a2c63bfa36b21f13d1ff1410f2f591b3a6bf153",
         "affectsGlobalScope": false
       },
       "./src/docsLibrary.ts": {
-        "version": "6bf08868a6cbfd293a6b3ba5d5aa3b7266fc17473fa96617ed54a00929fb52e9",
-        "signature": "0baef1a2b816e8859b0912121bf77b1d5ff3f3cb871492cdc113d276793355f3",
+        "version": "6045f0fd57a2e30643db99ffc787e8a74184a030e46a5c82ff39db71b0574cb8",
+        "signature": "541240e117c34af937c82f724d56ccd48dc61fa400f6ca21da3ef356278c8aed",
         "affectsGlobalScope": false
       },
       "./src/docsFormatter.ts": {
-        "version": "71f8b7661b3074cbc2cb597b28ff6753238eb5458e595a2f371ad1502294df3b",
-        "signature": "1385f25443033b930f93bf3f2a3c0aabe8e8254b6d35ad75aad1dd9414bb50d2",
+        "version": "6ee3e24700cc4890ab57bee2c148c75fd3231c4e82d1a63819bdcd13404b4d2d",
+        "signature": "e48a74c99ea25386a403faaa32831b96cc4ad663574974900cb7b51e039d12be",
         "affectsGlobalScope": false
       },
       "./src/completionProvider.ts": {
-        "version": "42d3456b02e7beac0d35b127dae867d768811745a7a95ffb81cc4b396737fe1f",
+        "version": "bd159cecda03443fdbba6274e7058dfe2da1b4fe0a82e841fa1b6ed9501a3415",
         "signature": "9a36570ce874b967550b3698bf4df92f071e9a0e174bf03f49a37cae6b26ef9d",
         "affectsGlobalScope": false
       },
+      "./src/definitionProvider.ts": {
+        "version": "2991723921466a63786bb3feef730c64a9bf9fe8636cc20fbd0ff920c99f61f0",
+        "signature": "fec2bb71409e9035906790291f3bb7e9a3f06a26496454c9768891e8d73811fb",
+        "affectsGlobalScope": false
+      },
       "./src/hoverProvider.ts": {
-        "version": "198de0921450ea616f9be8cb3b9396d0c8883f3eda9ce46ac7c63a885bead24e",
+        "version": "92dc32cf1b70f68dca438d438ac9b378ceabe86c6e8f033ca133322cb31b4e59",
         "signature": "a988a2624e664f9098da756cb24a8c496bb6d7ac89f9c31eef4ba00d10e6dd60",
         "affectsGlobalScope": false
       },
@@ -902,7 +907,7 @@
         "affectsGlobalScope": false
       },
       "./src/server.ts": {
-        "version": "500587bee959b3160a6e9eae089d8a99bc5d8ffd5adbde3958d37c0efd9b07f0",
+        "version": "67a891e53bf29aa07de58ad332a1010eaa7b6a326e5ade68420b67ad3ab6f815",
         "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",
         "affectsGlobalScope": false
       },
@@ -1731,6 +1736,7 @@
         "./node_modules/vscode-languageserver/lib/common/api.d.ts"
       ],
       "./src/completionProvider.ts": [
+        "./node_modules/@types/lodash/index.d.ts",
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
         "./node_modules/vscode-languageserver/lib/common/api.d.ts",
         "./node_modules/yaml/index.d.ts",
@@ -1743,7 +1749,16 @@
         "./src/ansibleConfig.ts",
         "./src/documentMeta.ts"
       ],
+      "./src/definitionProvider.ts": [
+        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
+        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
+        "./node_modules/yaml/index.d.ts",
+        "./node_modules/yaml/types.d.ts",
+        "./src/docsLibrary.ts",
+        "./src/utils.ts"
+      ],
       "./src/docsFormatter.ts": [
+        "../node_modules/@types/node/util.d.ts",
         "./node_modules/vscode-languageserver/lib/common/api.d.ts",
         "./src/docsLibrary.ts"
       ],
@@ -1779,6 +1794,7 @@
         "./src/ansibleConfig.ts",
         "./src/completionProvider.ts",
         "./src/context.ts",
+        "./src/definitionProvider.ts",
         "./src/docsLibrary.ts",
         "./src/documentMeta.ts",
         "./src/hoverProvider.ts",
@@ -1802,6 +1818,7 @@
         "../node_modules/@types/node/url.d.ts",
         "./node_modules/@types/lodash/index.d.ts",
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
+        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts",
         "./node_modules/yaml/index.d.ts",
         "./node_modules/yaml/types.d.ts",
         "./src/documentMeta.ts"
@@ -2600,6 +2617,11 @@
         "./src/ansibleConfig.ts",
         "./src/documentMeta.ts"
       ],
+      "./src/definitionProvider.ts": [
+        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
+        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
+        "./src/docsLibrary.ts"
+      ],
       "./src/docsFormatter.ts": [
         "./node_modules/vscode-languageserver/lib/common/api.d.ts",
         "./src/docsLibrary.ts"
@@ -2621,6 +2643,7 @@
       ],
       "./src/utils.ts": [
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
+        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts",
         "./node_modules/yaml/index.d.ts",
         "./node_modules/yaml/types.d.ts",
         "./src/documentMeta.ts"
@@ -2808,6 +2831,7 @@
       "./src/ansibleConfig.ts",
       "./src/completionProvider.ts",
       "./src/context.ts",
+      "./src/definitionProvider.ts",
       "./src/docsFormatter.ts",
       "./src/docsLibrary.ts",
       "./src/docsParser.ts",

From fea19471e1b963f2bb5ddc81d16c8b53e07b24c8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Wed, 31 Mar 2021 19:52:30 +0200
Subject: [PATCH 027/558] Added webpack for bundling the extension

Implemented (untested) collection declaration finder for plays.
Built in doc fragments are now correctly recognized.
---
 .gitignore                              |   1 +
 .vscode/extensions.json                 |   3 +
 .vscode/launch.json                     |   8 +-
 .vscode/tasks.json                      |  72 +-
 .vscodeignore                           |  13 +
 ansible-language-configuration.json     |  65 +-
 client/src/extension.ts                 |   2 +-
 client/webpack.config.js                |  18 +
 package-lock.json                       | 961 +++++++++++++++++++++++-
 package.json                            |  34 +-
 server/src/docsLibrary.ts               |   4 +-
 server/src/test/data/utils.playbook.yml |  14 +
 server/src/utils.ts                     |  36 +
 server/tsconfig.tsbuildinfo             |   6 +-
 server/webpack.config.js                |  18 +
 webpack.config.js                       |  55 ++
 16 files changed, 1253 insertions(+), 57 deletions(-)
 create mode 100644 .vscode/extensions.json
 create mode 100644 client/webpack.config.js
 create mode 100644 server/src/test/data/utils.playbook.yml
 create mode 100644 server/webpack.config.js
 create mode 100644 webpack.config.js

diff --git a/.gitignore b/.gitignore
index c223c3e79..c1111b4e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
 node_modules
 *.vsix
 out
+dist
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 000000000..c72796511
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+  "recommendations": ["eamodio.tsl-problem-matcher"]
+}
diff --git a/.vscode/launch.json b/.vscode/launch.json
index f3884cc17..547a8fa89 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -11,7 +11,7 @@
       "request": "launch",
       "skipFiles": ["/**"],
       "program": "${workspaceFolder}/server/src/docsLibrary.ts",
-      "outFiles": ["${workspaceFolder}/server/out/**/*.js"],
+      "outFiles": ["${workspaceFolder}/server/dist/**/*.js"],
       "preLaunchTask": "npm: watch"
     },
     {
@@ -20,8 +20,8 @@
       "request": "launch",
       "runtimeExecutable": "${execPath}",
       "args": ["--extensionDevelopmentPath=${workspaceFolder}"],
-      "outFiles": ["${workspaceFolder}/client/out/**/*.js"],
-      "preLaunchTask": "npm: watch"
+      "outFiles": ["${workspaceFolder}/client/dist/**/*.js"],
+      "preLaunchTask": "watch"
     },
     {
       "name": "Attach to Server",
@@ -29,7 +29,7 @@
       "request": "attach",
       "port": 6009,
       "restart": true,
-      "outFiles": ["${workspaceRoot}/server/out/**/*.js"]
+      "outFiles": ["${workspaceRoot}/server/dist/**/*.js"]
     }
     // {
     //   "name": "Language Server E2E Test",
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index b461b5947..4a4ccd4fe 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -14,9 +14,9 @@
       "problemMatcher": ["$tsc"]
     },
     {
+      "label": "Clean",
       "type": "npm",
-      "script": "watch",
-      "isBackground": true,
+      "script": "clean",
       "group": {
         "kind": "build",
         "isDefault": true
@@ -24,8 +24,74 @@
       "presentation": {
         "panel": "dedicated",
         "reveal": "never"
+      }
+    },
+    {
+      "label": "Server Build",
+      "type": "npm",
+      "script": "watch:server",
+      "isBackground": true,
+      "group": {
+        "kind": "build",
+        "isDefault": true
+      },
+      "presentation": {
+        "panel": "dedicated",
+        "reveal": "never",
+        "group": "Build"
+      },
+      "problemMatcher": [
+        {
+          "base": "$ts-checker-eslint-webpack",
+          "background": {
+            // "activeOnStart": true,
+            "beginsPattern": {
+              "regexp": "asset server.js.*?"
+            },
+            "endsPattern": {
+              "regexp": "[Cc]ompiled (.*?successfully|with .*?error)|[Cc]ompilation .*?finished"
+            }
+          }
+        }
+      ]
+    },
+    {
+      "label": "Client Build",
+      "type": "npm",
+      "script": "watch:client",
+      "isBackground": true,
+      "group": {
+        "kind": "build",
+        "isDefault": true
       },
-      "problemMatcher": ["$tsc-watch"]
+      "presentation": {
+        "panel": "dedicated",
+        "reveal": "never",
+        "group": "Build"
+      },
+      "problemMatcher": [
+        {
+          "base": "$ts-checker-eslint-webpack",
+          "background": {
+            "activeOnStart": true,
+            "beginsPattern": {
+              "regexp": "asset extension.js.*?"
+            },
+            "endsPattern": {
+              "regexp": "[Cc]ompiled (.*?successfully|with .*?error)|[Cc]ompilation .*?finished"
+            }
+          }
+        }
+      ]
+    },
+    {
+      "label": "watch",
+      "dependsOn": ["Client Build", "Server Build"]
+    },
+    {
+      "label": "clean & watch",
+      "dependsOrder": "sequence",
+      "dependsOn": ["Clean", "watch"]
     }
   ]
 }
diff --git a/.vscodeignore b/.vscodeignore
index f369b5e55..1edddb129 100644
--- a/.vscodeignore
+++ b/.vscodeignore
@@ -1,4 +1,17 @@
 .vscode/**
 .vscode-test/**
 .gitignore
+**/.ignore
 vsc-extension-quickstart.md
+**/node_modules
+**/out
+**/src
+**/*.ts
+**/*.map
+**/tsconfig.json
+**/webpack.config.js
+
+client/**
+!client/dist/extension.js
+server/**
+!server/dist/server.js
diff --git a/ansible-language-configuration.json b/ansible-language-configuration.json
index 65226bdd1..707dd0dd0 100644
--- a/ansible-language-configuration.json
+++ b/ansible-language-configuration.json
@@ -1,35 +1,36 @@
 // Imported from:
 // https://github.com/samuelcolvin/jinjahtml-vscode/blob/b8fe444cbd838afb4962bb2446e67c85e0443675/language-configuration.json
 {
-    "comments": {
-        // symbols used for start and end a block comment. Remove this entry if your language does not support block comments
-        "lineComment": "#"
-    },
-    // symbols used as brackets
-    "brackets": [
-        ["{", "}"],
-        ["[", "]"],
-        ["(", ")"]
-    ],
-    // symbols that are auto closed when typing
-    "autoClosingPairs": [
-        ["[", "]"],
-        ["{", "}"],
-        ["\"", "\""],
-        ["'", "'"],
-        ["{{ ", " "] // curly braces are already auto-closed, this adds space at the end if one is added at the beginning
-    ],
-    // added `'` and `"` -> in Ansible this pattern is extremely common:
-    // `"{{ jinja_expression }}"`
-    // with default config, `"` gets auto-closed and with cursor in the middle (`"|"`), brace auto-closing would not work
-    "autoCloseBefore": "'\";:.,=}])> \n\t",
-    // symbols that can be used to surround a selection
-    "surroundingPairs": [
-        ["{", "}"],
-        ["[", "]"],
-        ["(", ")"],
-        ["\"", "\""],
-        ["'", "'"],
-        [" ", " "] // for spacing Jinja (and other) expressions; this setting might be a bit controversial ;)
-    ]
-}
\ No newline at end of file
+  "comments": {
+    // symbols used for start and end a block comment. Remove this entry if your language does not support block comments
+    "lineComment": "#"
+  },
+  // symbols used as brackets
+  "brackets": [
+    ["{", "}"],
+    ["[", "]"],
+    ["(", ")"]
+  ],
+  // symbols that are auto closed when typing
+  "autoClosingPairs": [
+    ["[", "]"],
+    ["{", "}"],
+    ["(", ")"],
+    ["\"", "\""],
+    ["'", "'"],
+    ["{{ ", " "] // curly braces are already auto-closed, this adds space at the end if one is added at the beginning
+  ],
+  // added `'` and `"` -> in Ansible this pattern is extremely common:
+  // `"{{ jinja_expression }}"`
+  // with default config, `"` gets auto-closed and with cursor in the middle (`"|"`), brace auto-closing would not work
+  "autoCloseBefore": "'\";:.,=}])> \n\t",
+  // symbols that can be used to surround a selection
+  "surroundingPairs": [
+    ["{", "}"],
+    ["[", "]"],
+    ["(", ")"],
+    ["\"", "\""],
+    ["'", "'"],
+    [" ", " "] // for spacing Jinja (and other) expressions; this setting might be a bit controversial ;)
+  ]
+}
diff --git a/client/src/extension.ts b/client/src/extension.ts
index b914ba170..06328e84b 100644
--- a/client/src/extension.ts
+++ b/client/src/extension.ts
@@ -14,7 +14,7 @@ let client: LanguageClient;
 export function activate(context: ExtensionContext): void {
   // The server is implemented in node
   const serverModule = context.asAbsolutePath(
-    path.join('server', 'out', 'server.js')
+    path.join('server', 'dist', 'server.js')
   );
   // The debug options for the server
   // --inspect=6009: runs the server in Node's Inspector mode so VS Code can attach to the server for debugging
diff --git a/client/webpack.config.js b/client/webpack.config.js
new file mode 100644
index 000000000..424cd6c74
--- /dev/null
+++ b/client/webpack.config.js
@@ -0,0 +1,18 @@
+//@ts-check
+
+'use strict';
+
+/* eslint @typescript-eslint/no-var-requires: "off" */
+const withDefaults = require('../webpack.config');
+const path = require('path');
+
+module.exports = withDefaults({
+  context: path.resolve(__dirname),
+  entry: {
+    extension: './src/extension.ts',
+  },
+  output: {
+    filename: 'extension.js',
+    path: path.resolve(__dirname, 'dist'),
+  },
+});
diff --git a/package-lock.json b/package-lock.json
index 716e3b2b7..b94358e65 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
 {
     "name": "ansible",
-    "version": "0.0.1",
+    "version": "0.0.2",
     "lockfileVersion": 1,
     "requires": true,
     "dependencies": {
@@ -43,6 +43,12 @@
                 }
             }
         },
+        "@discoveryjs/json-ext": {
+            "version": "0.5.2",
+            "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz",
+            "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==",
+            "dev": true
+        },
         "@eslint/eslintrc": {
             "version": "0.3.0",
             "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz",
@@ -106,6 +112,32 @@
             "integrity": "sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ==",
             "dev": true
         },
+        "@types/eslint": {
+            "version": "7.2.8",
+            "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.8.tgz",
+            "integrity": "sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ==",
+            "dev": true,
+            "requires": {
+                "@types/estree": "*",
+                "@types/json-schema": "*"
+            }
+        },
+        "@types/eslint-scope": {
+            "version": "3.7.0",
+            "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz",
+            "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==",
+            "dev": true,
+            "requires": {
+                "@types/eslint": "*",
+                "@types/estree": "*"
+            }
+        },
+        "@types/estree": {
+            "version": "0.0.46",
+            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz",
+            "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==",
+            "dev": true
+        },
         "@types/json-schema": {
             "version": "7.0.7",
             "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz",
@@ -219,6 +251,185 @@
             "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
             "dev": true
         },
+        "@webassemblyjs/ast": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
+            "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==",
+            "dev": true,
+            "requires": {
+                "@webassemblyjs/helper-numbers": "1.11.0",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.0"
+            }
+        },
+        "@webassemblyjs/floating-point-hex-parser": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz",
+            "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==",
+            "dev": true
+        },
+        "@webassemblyjs/helper-api-error": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz",
+            "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==",
+            "dev": true
+        },
+        "@webassemblyjs/helper-buffer": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz",
+            "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==",
+            "dev": true
+        },
+        "@webassemblyjs/helper-numbers": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz",
+            "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==",
+            "dev": true,
+            "requires": {
+                "@webassemblyjs/floating-point-hex-parser": "1.11.0",
+                "@webassemblyjs/helper-api-error": "1.11.0",
+                "@xtuc/long": "4.2.2"
+            }
+        },
+        "@webassemblyjs/helper-wasm-bytecode": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz",
+            "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==",
+            "dev": true
+        },
+        "@webassemblyjs/helper-wasm-section": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz",
+            "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==",
+            "dev": true,
+            "requires": {
+                "@webassemblyjs/ast": "1.11.0",
+                "@webassemblyjs/helper-buffer": "1.11.0",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+                "@webassemblyjs/wasm-gen": "1.11.0"
+            }
+        },
+        "@webassemblyjs/ieee754": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz",
+            "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==",
+            "dev": true,
+            "requires": {
+                "@xtuc/ieee754": "^1.2.0"
+            }
+        },
+        "@webassemblyjs/leb128": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz",
+            "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==",
+            "dev": true,
+            "requires": {
+                "@xtuc/long": "4.2.2"
+            }
+        },
+        "@webassemblyjs/utf8": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz",
+            "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==",
+            "dev": true
+        },
+        "@webassemblyjs/wasm-edit": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz",
+            "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==",
+            "dev": true,
+            "requires": {
+                "@webassemblyjs/ast": "1.11.0",
+                "@webassemblyjs/helper-buffer": "1.11.0",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+                "@webassemblyjs/helper-wasm-section": "1.11.0",
+                "@webassemblyjs/wasm-gen": "1.11.0",
+                "@webassemblyjs/wasm-opt": "1.11.0",
+                "@webassemblyjs/wasm-parser": "1.11.0",
+                "@webassemblyjs/wast-printer": "1.11.0"
+            }
+        },
+        "@webassemblyjs/wasm-gen": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz",
+            "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==",
+            "dev": true,
+            "requires": {
+                "@webassemblyjs/ast": "1.11.0",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+                "@webassemblyjs/ieee754": "1.11.0",
+                "@webassemblyjs/leb128": "1.11.0",
+                "@webassemblyjs/utf8": "1.11.0"
+            }
+        },
+        "@webassemblyjs/wasm-opt": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz",
+            "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==",
+            "dev": true,
+            "requires": {
+                "@webassemblyjs/ast": "1.11.0",
+                "@webassemblyjs/helper-buffer": "1.11.0",
+                "@webassemblyjs/wasm-gen": "1.11.0",
+                "@webassemblyjs/wasm-parser": "1.11.0"
+            }
+        },
+        "@webassemblyjs/wasm-parser": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz",
+            "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==",
+            "dev": true,
+            "requires": {
+                "@webassemblyjs/ast": "1.11.0",
+                "@webassemblyjs/helper-api-error": "1.11.0",
+                "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+                "@webassemblyjs/ieee754": "1.11.0",
+                "@webassemblyjs/leb128": "1.11.0",
+                "@webassemblyjs/utf8": "1.11.0"
+            }
+        },
+        "@webassemblyjs/wast-printer": {
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz",
+            "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==",
+            "dev": true,
+            "requires": {
+                "@webassemblyjs/ast": "1.11.0",
+                "@xtuc/long": "4.2.2"
+            }
+        },
+        "@webpack-cli/configtest": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz",
+            "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==",
+            "dev": true
+        },
+        "@webpack-cli/info": {
+            "version": "1.2.3",
+            "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz",
+            "integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==",
+            "dev": true,
+            "requires": {
+                "envinfo": "^7.7.3"
+            }
+        },
+        "@webpack-cli/serve": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz",
+            "integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==",
+            "dev": true
+        },
+        "@xtuc/ieee754": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+            "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+            "dev": true
+        },
+        "@xtuc/long": {
+            "version": "4.2.2",
+            "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+            "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+            "dev": true
+        },
         "acorn": {
             "version": "7.4.1",
             "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
@@ -243,6 +454,12 @@
                 "uri-js": "^4.2.2"
             }
         },
+        "ajv-keywords": {
+            "version": "3.5.2",
+            "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+            "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+            "dev": true
+        },
         "ansi-colors": {
             "version": "4.1.1",
             "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
@@ -313,6 +530,12 @@
             "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
             "dev": true
         },
+        "big.js": {
+            "version": "5.2.2",
+            "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+            "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+            "dev": true
+        },
         "binary-extensions": {
             "version": "2.2.0",
             "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -344,6 +567,19 @@
             "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
             "dev": true
         },
+        "browserslist": {
+            "version": "4.16.3",
+            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
+            "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
+            "dev": true,
+            "requires": {
+                "caniuse-lite": "^1.0.30001181",
+                "colorette": "^1.2.1",
+                "electron-to-chromium": "^1.3.649",
+                "escalade": "^3.1.1",
+                "node-releases": "^1.1.70"
+            }
+        },
         "buffer-from": {
             "version": "1.1.1",
             "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@@ -362,6 +598,12 @@
             "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
             "dev": true
         },
+        "caniuse-lite": {
+            "version": "1.0.30001205",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001205.tgz",
+            "integrity": "sha512-TL1GrS5V6LElbitPazidkBMD9sa448bQDDLrumDqaggmKFcuU2JW1wTOHJPukAcOMtEmLcmDJEzfRrf+GjM0Og==",
+            "dev": true
+        },
         "chai": {
             "version": "4.3.1",
             "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.1.tgz",
@@ -449,6 +691,15 @@
                 "readdirp": "~3.5.0"
             }
         },
+        "chrome-trace-event": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+            "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+            "dev": true,
+            "requires": {
+                "tslib": "^1.9.0"
+            }
+        },
         "cliui": {
             "version": "7.0.4",
             "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -460,6 +711,17 @@
                 "wrap-ansi": "^7.0.0"
             }
         },
+        "clone-deep": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+            "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+            "dev": true,
+            "requires": {
+                "is-plain-object": "^2.0.4",
+                "kind-of": "^6.0.2",
+                "shallow-clone": "^3.0.0"
+            }
+        },
         "color-convert": {
             "version": "1.9.3",
             "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -475,12 +737,30 @@
             "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
             "dev": true
         },
+        "colorette": {
+            "version": "1.2.2",
+            "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
+            "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
+            "dev": true
+        },
+        "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
+        },
         "concat-map": {
             "version": "0.0.1",
             "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
             "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
             "dev": true
         },
+        "core-util-is": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+            "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+            "dev": true
+        },
         "create-require": {
             "version": "1.1.1",
             "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -552,12 +832,34 @@
                 "esutils": "^2.0.2"
             }
         },
+        "electron-to-chromium": {
+            "version": "1.3.703",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.703.tgz",
+            "integrity": "sha512-SVBVhNB+4zPL+rvtWLw7PZQkw/Eqj1HQZs22xtcqW36+xoifzEOEEDEpkxSMfB6RFeSIOcG00w6z5mSqLr1Y6w==",
+            "dev": true
+        },
         "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
         },
+        "emojis-list": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+            "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+            "dev": true
+        },
+        "enhanced-resolve": {
+            "version": "5.7.0",
+            "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz",
+            "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==",
+            "dev": true,
+            "requires": {
+                "graceful-fs": "^4.2.4",
+                "tapable": "^2.2.0"
+            }
+        },
         "enquirer": {
             "version": "2.3.6",
             "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
@@ -567,6 +869,27 @@
                 "ansi-colors": "^4.1.1"
             }
         },
+        "envinfo": {
+            "version": "7.7.4",
+            "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz",
+            "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==",
+            "dev": true
+        },
+        "errno": {
+            "version": "0.1.8",
+            "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+            "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+            "dev": true,
+            "requires": {
+                "prr": "~1.0.1"
+            }
+        },
+        "es-module-lexer": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz",
+            "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==",
+            "dev": true
+        },
         "escalade": {
             "version": "3.1.1",
             "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -742,6 +1065,29 @@
             "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
             "dev": true
         },
+        "events": {
+            "version": "3.3.0",
+            "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+            "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+            "dev": true
+        },
+        "execa": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz",
+            "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==",
+            "dev": true,
+            "requires": {
+                "cross-spawn": "^7.0.3",
+                "get-stream": "^6.0.0",
+                "human-signals": "^2.1.0",
+                "is-stream": "^2.0.0",
+                "merge-stream": "^2.0.0",
+                "npm-run-path": "^4.0.1",
+                "onetime": "^5.1.2",
+                "signal-exit": "^3.0.3",
+                "strip-final-newline": "^2.0.0"
+            }
+        },
         "fast-deep-equal": {
             "version": "3.1.3",
             "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -774,6 +1120,12 @@
             "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
             "dev": true
         },
+        "fastest-levenshtein": {
+            "version": "1.0.12",
+            "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
+            "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
+            "dev": true
+        },
         "fastq": {
             "version": "1.11.0",
             "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz",
@@ -846,6 +1198,12 @@
             "dev": true,
             "optional": true
         },
+        "function-bind": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+            "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+            "dev": true
+        },
         "functional-red-black-tree": {
             "version": "1.0.1",
             "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
@@ -864,6 +1222,12 @@
             "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
             "dev": true
         },
+        "get-stream": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz",
+            "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==",
+            "dev": true
+        },
         "glob": {
             "version": "7.1.6",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
@@ -887,6 +1251,12 @@
                 "is-glob": "^4.0.1"
             }
         },
+        "glob-to-regexp": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+            "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+            "dev": true
+        },
         "globals": {
             "version": "12.4.0",
             "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
@@ -910,12 +1280,27 @@
                 "slash": "^3.0.0"
             }
         },
+        "graceful-fs": {
+            "version": "4.2.6",
+            "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
+            "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
+            "dev": true
+        },
         "growl": {
             "version": "1.10.5",
             "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
             "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
             "dev": true
         },
+        "has": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+            "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+            "dev": true,
+            "requires": {
+                "function-bind": "^1.1.1"
+            }
+        },
         "has-flag": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -928,6 +1313,12 @@
             "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
             "dev": true
         },
+        "human-signals": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+            "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+            "dev": true
+        },
         "ignore": {
             "version": "5.1.8",
             "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
@@ -944,6 +1335,16 @@
                 "resolve-from": "^4.0.0"
             }
         },
+        "import-local": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
+            "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+            "dev": true,
+            "requires": {
+                "pkg-dir": "^4.2.0",
+                "resolve-cwd": "^3.0.0"
+            }
+        },
         "imurmurhash": {
             "version": "0.1.4",
             "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -966,6 +1367,12 @@
             "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
             "dev": true
         },
+        "interpret": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
+            "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
+            "dev": true
+        },
         "is-binary-path": {
             "version": "2.1.0",
             "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -975,6 +1382,15 @@
                 "binary-extensions": "^2.0.0"
             }
         },
+        "is-core-module": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
+            "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
+            "dev": true,
+            "requires": {
+                "has": "^1.0.3"
+            }
+        },
         "is-extglob": {
             "version": "2.1.1",
             "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -1008,12 +1424,67 @@
             "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
             "dev": true
         },
+        "is-plain-object": {
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+            "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+            "dev": true,
+            "requires": {
+                "isobject": "^3.0.1"
+            }
+        },
+        "is-stream": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+            "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+            "dev": true
+        },
+        "isarray": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+            "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+            "dev": true
+        },
         "isexe": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
             "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
             "dev": true
         },
+        "isobject": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+            "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+            "dev": true
+        },
+        "jest-worker": {
+            "version": "26.6.2",
+            "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
+            "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
+            "dev": true,
+            "requires": {
+                "@types/node": "*",
+                "merge-stream": "^2.0.0",
+                "supports-color": "^7.0.0"
+            },
+            "dependencies": {
+                "has-flag": {
+                    "version": "4.0.0",
+                    "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+                    "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+                    "dev": true
+                },
+                "supports-color": {
+                    "version": "7.2.0",
+                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+                    "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+                    "dev": true,
+                    "requires": {
+                        "has-flag": "^4.0.0"
+                    }
+                }
+            }
+        },
         "js-tokens": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -1030,6 +1501,12 @@
                 "esprima": "^4.0.0"
             }
         },
+        "json-parse-better-errors": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+            "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+            "dev": true
+        },
         "json-schema-traverse": {
             "version": "0.4.1",
             "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -1042,6 +1519,21 @@
             "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
             "dev": true
         },
+        "json5": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+            "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+            "dev": true,
+            "requires": {
+                "minimist": "^1.2.5"
+            }
+        },
+        "kind-of": {
+            "version": "6.0.3",
+            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+            "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+            "dev": true
+        },
         "levn": {
             "version": "0.4.1",
             "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -1052,6 +1544,23 @@
                 "type-check": "~0.4.0"
             }
         },
+        "loader-runner": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
+            "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
+            "dev": true
+        },
+        "loader-utils": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+            "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+            "dev": true,
+            "requires": {
+                "big.js": "^5.2.2",
+                "emojis-list": "^3.0.0",
+                "json5": "^2.1.2"
+            }
+        },
         "locate-path": {
             "version": "6.0.0",
             "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -1091,6 +1600,31 @@
             "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
             "dev": true
         },
+        "memory-fs": {
+            "version": "0.5.0",
+            "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+            "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+            "dev": true,
+            "requires": {
+                "errno": "^0.1.3",
+                "readable-stream": "^2.0.1"
+            }
+        },
+        "merge-options": {
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz",
+            "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==",
+            "dev": true,
+            "requires": {
+                "is-plain-obj": "^2.1.0"
+            }
+        },
+        "merge-stream": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+            "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+            "dev": true
+        },
         "merge2": {
             "version": "1.4.1",
             "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -1107,6 +1641,27 @@
                 "picomatch": "^2.0.5"
             }
         },
+        "mime-db": {
+            "version": "1.46.0",
+            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
+            "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
+            "dev": true
+        },
+        "mime-types": {
+            "version": "2.1.29",
+            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
+            "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
+            "dev": true,
+            "requires": {
+                "mime-db": "1.46.0"
+            }
+        },
+        "mimic-fn": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+            "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+            "dev": true
+        },
         "minimatch": {
             "version": "3.0.4",
             "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -1116,6 +1671,12 @@
                 "brace-expansion": "^1.1.7"
             }
         },
+        "minimist": {
+            "version": "1.2.5",
+            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+            "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+            "dev": true
+        },
         "mocha": {
             "version": "8.3.0",
             "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz",
@@ -1217,12 +1778,33 @@
             "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
             "dev": true
         },
+        "neo-async": {
+            "version": "2.6.2",
+            "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+            "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+            "dev": true
+        },
+        "node-releases": {
+            "version": "1.1.71",
+            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
+            "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==",
+            "dev": true
+        },
         "normalize-path": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
             "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
             "dev": true
         },
+        "npm-run-path": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+            "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+            "dev": true,
+            "requires": {
+                "path-key": "^3.0.0"
+            }
+        },
         "once": {
             "version": "1.4.0",
             "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -1232,6 +1814,15 @@
                 "wrappy": "1"
             }
         },
+        "onetime": {
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+            "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+            "dev": true,
+            "requires": {
+                "mimic-fn": "^2.1.0"
+            }
+        },
         "optionator": {
             "version": "0.9.1",
             "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -1264,6 +1855,12 @@
                 "p-limit": "^3.0.2"
             }
         },
+        "p-try": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+            "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+            "dev": true
+        },
         "parent-module": {
             "version": "1.0.1",
             "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -1291,6 +1888,12 @@
             "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
             "dev": true
         },
+        "path-parse": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+            "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+            "dev": true
+        },
         "path-type": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -1309,18 +1912,78 @@
             "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
             "dev": true
         },
+        "pkg-dir": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+            "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+            "dev": true,
+            "requires": {
+                "find-up": "^4.0.0"
+            },
+            "dependencies": {
+                "find-up": {
+                    "version": "4.1.0",
+                    "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+                    "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+                    "dev": true,
+                    "requires": {
+                        "locate-path": "^5.0.0",
+                        "path-exists": "^4.0.0"
+                    }
+                },
+                "locate-path": {
+                    "version": "5.0.0",
+                    "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+                    "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+                    "dev": true,
+                    "requires": {
+                        "p-locate": "^4.1.0"
+                    }
+                },
+                "p-limit": {
+                    "version": "2.3.0",
+                    "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+                    "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+                    "dev": true,
+                    "requires": {
+                        "p-try": "^2.0.0"
+                    }
+                },
+                "p-locate": {
+                    "version": "4.1.0",
+                    "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+                    "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+                    "dev": true,
+                    "requires": {
+                        "p-limit": "^2.2.0"
+                    }
+                }
+            }
+        },
         "prelude-ls": {
             "version": "1.2.1",
             "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
             "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
             "dev": true
         },
+        "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
+        },
         "progress": {
             "version": "2.0.3",
             "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
             "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
             "dev": true
         },
+        "prr": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+            "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+            "dev": true
+        },
         "punycode": {
             "version": "2.1.1",
             "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -1342,6 +2005,29 @@
                 "safe-buffer": "^5.1.0"
             }
         },
+        "readable-stream": {
+            "version": "2.3.7",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+            "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+            "dev": true,
+            "requires": {
+                "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"
+            },
+            "dependencies": {
+                "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
+                }
+            }
+        },
         "readdirp": {
             "version": "3.5.0",
             "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
@@ -1351,6 +2037,15 @@
                 "picomatch": "^2.2.1"
             }
         },
+        "rechoir": {
+            "version": "0.7.0",
+            "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz",
+            "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==",
+            "dev": true,
+            "requires": {
+                "resolve": "^1.9.0"
+            }
+        },
         "regexpp": {
             "version": "3.1.0",
             "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
@@ -1369,6 +2064,33 @@
             "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
             "dev": true
         },
+        "resolve": {
+            "version": "1.20.0",
+            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+            "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+            "dev": true,
+            "requires": {
+                "is-core-module": "^2.2.0",
+                "path-parse": "^1.0.6"
+            }
+        },
+        "resolve-cwd": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+            "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+            "dev": true,
+            "requires": {
+                "resolve-from": "^5.0.0"
+            },
+            "dependencies": {
+                "resolve-from": {
+                    "version": "5.0.0",
+                    "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+                    "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+                    "dev": true
+                }
+            }
+        },
         "resolve-from": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -1405,6 +2127,17 @@
             "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
             "dev": true
         },
+        "schema-utils": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+            "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+            "dev": true,
+            "requires": {
+                "@types/json-schema": "^7.0.6",
+                "ajv": "^6.12.5",
+                "ajv-keywords": "^3.5.2"
+            }
+        },
         "semver": {
             "version": "7.3.4",
             "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
@@ -1423,6 +2156,15 @@
                 "randombytes": "^2.1.0"
             }
         },
+        "shallow-clone": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+            "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+            "dev": true,
+            "requires": {
+                "kind-of": "^6.0.2"
+            }
+        },
         "shebang-command": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -1438,6 +2180,12 @@
             "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
             "dev": true
         },
+        "signal-exit": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+            "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+            "dev": true
+        },
         "slash": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -1481,6 +2229,12 @@
                 }
             }
         },
+        "source-list-map": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+            "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+            "dev": true
+        },
         "source-map": {
             "version": "0.6.1",
             "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1514,6 +2268,23 @@
                 "strip-ansi": "^6.0.0"
             }
         },
+        "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,
+            "requires": {
+                "safe-buffer": "~5.1.0"
+            },
+            "dependencies": {
+                "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
+                }
+            }
+        },
         "strip-ansi": {
             "version": "6.0.0",
             "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -1523,6 +2294,12 @@
                 "ansi-regex": "^5.0.0"
             }
         },
+        "strip-final-newline": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+            "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+            "dev": true
+        },
         "strip-json-comments": {
             "version": "3.1.1",
             "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -1570,6 +2347,45 @@
                 }
             }
         },
+        "tapable": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
+            "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
+            "dev": true
+        },
+        "terser": {
+            "version": "5.6.1",
+            "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz",
+            "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==",
+            "dev": true,
+            "requires": {
+                "commander": "^2.20.0",
+                "source-map": "~0.7.2",
+                "source-map-support": "~0.5.19"
+            },
+            "dependencies": {
+                "source-map": {
+                    "version": "0.7.3",
+                    "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+                    "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+                    "dev": true
+                }
+            }
+        },
+        "terser-webpack-plugin": {
+            "version": "5.1.1",
+            "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz",
+            "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==",
+            "dev": true,
+            "requires": {
+                "jest-worker": "^26.6.2",
+                "p-limit": "^3.1.0",
+                "schema-utils": "^3.0.0",
+                "serialize-javascript": "^5.0.1",
+                "source-map": "^0.6.1",
+                "terser": "^5.5.1"
+            }
+        },
         "text-table": {
             "version": "0.2.0",
             "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -1585,6 +2401,38 @@
                 "is-number": "^7.0.0"
             }
         },
+        "ts-loader": {
+            "version": "8.1.0",
+            "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.1.0.tgz",
+            "integrity": "sha512-YiQipGGAFj2zBfqLhp28yUvPP9jUGqHxRzrGYuc82Z2wM27YIHbElXiaZDc93c3x0mz4zvBmS6q/DgExpdj37A==",
+            "dev": true,
+            "requires": {
+                "chalk": "^4.1.0",
+                "enhanced-resolve": "^4.0.0",
+                "loader-utils": "^2.0.0",
+                "micromatch": "^4.0.0",
+                "semver": "^7.3.4"
+            },
+            "dependencies": {
+                "enhanced-resolve": {
+                    "version": "4.5.0",
+                    "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
+                    "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
+                    "dev": true,
+                    "requires": {
+                        "graceful-fs": "^4.1.2",
+                        "memory-fs": "^0.5.0",
+                        "tapable": "^1.0.0"
+                    }
+                },
+                "tapable": {
+                    "version": "1.1.3",
+                    "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+                    "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+                    "dev": true
+                }
+            }
+        },
         "ts-node": {
             "version": "9.1.1",
             "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz",
@@ -1650,12 +2498,117 @@
                 "punycode": "^2.1.0"
             }
         },
+        "util-deprecate": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+            "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+            "dev": true
+        },
         "v8-compile-cache": {
             "version": "2.2.0",
             "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
             "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
             "dev": true
         },
+        "watchpack": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
+            "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==",
+            "dev": true,
+            "requires": {
+                "glob-to-regexp": "^0.4.1",
+                "graceful-fs": "^4.1.2"
+            }
+        },
+        "webpack": {
+            "version": "5.28.0",
+            "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz",
+            "integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==",
+            "dev": true,
+            "requires": {
+                "@types/eslint-scope": "^3.7.0",
+                "@types/estree": "^0.0.46",
+                "@webassemblyjs/ast": "1.11.0",
+                "@webassemblyjs/wasm-edit": "1.11.0",
+                "@webassemblyjs/wasm-parser": "1.11.0",
+                "acorn": "^8.0.4",
+                "browserslist": "^4.14.5",
+                "chrome-trace-event": "^1.0.2",
+                "enhanced-resolve": "^5.7.0",
+                "es-module-lexer": "^0.4.0",
+                "eslint-scope": "^5.1.1",
+                "events": "^3.2.0",
+                "glob-to-regexp": "^0.4.1",
+                "graceful-fs": "^4.2.4",
+                "json-parse-better-errors": "^1.0.2",
+                "loader-runner": "^4.2.0",
+                "mime-types": "^2.1.27",
+                "neo-async": "^2.6.2",
+                "schema-utils": "^3.0.0",
+                "tapable": "^2.1.1",
+                "terser-webpack-plugin": "^5.1.1",
+                "watchpack": "^2.0.0",
+                "webpack-sources": "^2.1.1"
+            },
+            "dependencies": {
+                "acorn": {
+                    "version": "8.1.0",
+                    "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz",
+                    "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==",
+                    "dev": true
+                }
+            }
+        },
+        "webpack-cli": {
+            "version": "4.6.0",
+            "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz",
+            "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==",
+            "dev": true,
+            "requires": {
+                "@discoveryjs/json-ext": "^0.5.0",
+                "@webpack-cli/configtest": "^1.0.2",
+                "@webpack-cli/info": "^1.2.3",
+                "@webpack-cli/serve": "^1.3.1",
+                "colorette": "^1.2.1",
+                "commander": "^7.0.0",
+                "enquirer": "^2.3.6",
+                "execa": "^5.0.0",
+                "fastest-levenshtein": "^1.0.12",
+                "import-local": "^3.0.2",
+                "interpret": "^2.2.0",
+                "rechoir": "^0.7.0",
+                "v8-compile-cache": "^2.2.0",
+                "webpack-merge": "^5.7.3"
+            },
+            "dependencies": {
+                "commander": {
+                    "version": "7.2.0",
+                    "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+                    "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+                    "dev": true
+                }
+            }
+        },
+        "webpack-merge": {
+            "version": "5.7.3",
+            "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz",
+            "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==",
+            "dev": true,
+            "requires": {
+                "clone-deep": "^4.0.1",
+                "wildcard": "^2.0.0"
+            }
+        },
+        "webpack-sources": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz",
+            "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==",
+            "dev": true,
+            "requires": {
+                "source-list-map": "^2.0.1",
+                "source-map": "^0.6.1"
+            }
+        },
         "which": {
             "version": "2.0.2",
             "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -1707,6 +2660,12 @@
                 }
             }
         },
+        "wildcard": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
+            "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
+            "dev": true
+        },
         "word-wrap": {
             "version": "1.2.3",
             "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
diff --git a/package.json b/package.json
index 84d11dc37..e6fc7b07c 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
   "description": "Ansible language support",
   "author": "Tomasz Maciążek",
   "license": "MIT",
-  "version": "0.0.1",
+  "version": "0.0.2",
   "repository": {
     "type": "git",
     "url": "https://github.com/tomaciazek/vscode-ansible.git"
@@ -19,7 +19,7 @@
   "activationEvents": [
     "onLanguage:ansible"
   ],
-  "main": "./client/out/extension.js",
+  "main": "./client/dist/extension",
   "contributes": {
     "configuration": {
       "type": "object",
@@ -145,24 +145,34 @@
     ]
   },
   "scripts": {
-    "vscode:prepublish": "npm run compile",
+    "vscode:prepublish": "npm run webpack",
+    "webpack": "npm run clean && webpack --mode production --config ./client/webpack.config.js && webpack --mode production --config ./server/webpack.config.js",
+    "webpack:dev": "npm run clean && webpack --mode development --config ./client/webpack.config.js && webpack --mode development --config ./server/webpack.config.js",
     "compile": "tsc -b",
-    "watch": "tsc -b -w",
-    "postinstall": "cd client && npm install && cd ../server && npm install && cd .."
+    "watch:client": "webpack --mode none --config ./client/webpack.config.js --watch",
+    "watch:server": "webpack --mode none --config ./server/webpack.config.js --watch",
+    "clean": "rimraf client/dist && rimraf server/dist",
+    "postinstall": "cd client && npm install && cd ../server && npm install && cd ..",
+    "test-compile": "tsc -p ./"
   },
   "devDependencies": {
-    "typescript": "^4.1.5",
-    "@types/node": "^14.14.31",
-    "@types/vscode": "^1.53.0",
-    "chai": "^4.3.1",
-    "mocha": "^8.3.0",
-    "ts-node": "^9.1.1",
     "@types/chai": "^4.2.15",
     "@types/mocha": "^8.2.1",
+    "@types/node": "^14.14.31",
+    "@types/vscode": "^1.53.0",
     "@typescript-eslint/eslint-plugin": "^4.15.2",
     "@typescript-eslint/parser": "^4.15.2",
+    "chai": "^4.3.1",
     "eslint": "^7.20.0",
-    "eslint-config-prettier": "^8.0.0"
+    "eslint-config-prettier": "^8.0.0",
+    "merge-options": "^3.0.4",
+    "mocha": "^8.3.0",
+    "rimraf": "^3.0.2",
+    "ts-loader": "^8.1.0",
+    "ts-node": "^9.1.1",
+    "typescript": "^4.1.5",
+    "webpack": "^5.28.0",
+    "webpack-cli": "^4.6.0"
   },
   "dependencies": {
     "yaml": "^1.10.0",
diff --git a/server/src/docsLibrary.ts b/server/src/docsLibrary.ts
index 8e2dc91c5..96a7a16cb 100644
--- a/server/src/docsLibrary.ts
+++ b/server/src/docsLibrary.ts
@@ -92,7 +92,9 @@ export class DocsLibrary {
       const resultContents = {};
       for (const docFragmentName of module.rawDocumentation
         .extends_documentation_fragment) {
-        const docFragment = this.docFragments.get(docFragmentName);
+        const docFragment =
+          this.docFragments.get(docFragmentName) ||
+          this.docFragments.get(`ansible.builtin.${docFragmentName}`);
         if (docFragment) {
           module.fragments.push(docFragment); // currently used only as indicator
           _.mergeWith(
diff --git a/server/src/test/data/utils.playbook.yml b/server/src/test/data/utils.playbook.yml
new file mode 100644
index 000000000..f9e000043
--- /dev/null
+++ b/server/src/test/data/utils.playbook.yml
@@ -0,0 +1,14 @@
+- name: Play name
+  hosts: localhost
+  gather_facts: false
+  collections:
+    - mynamespace.mycollection
+  tasks:
+    - name: Task name
+      mymodule:
+        option1: value1
+    - name: Block name
+      block:
+        - name: Task2 name
+          mymodule2:
+            option1: value1
diff --git a/server/src/utils.ts b/server/src/utils.ts
index a244fade3..d1f678d1d 100644
--- a/server/src/utils.ts
+++ b/server/src/utils.ts
@@ -215,6 +215,42 @@ export async function getAnsibleMetadata(
   return metadata;
 }
 
+export function getDeclaredCollections(modulePath: Node[]): string[] {
+  const declaredCollections: string[] = [];
+  let blockPath: Node[] | undefined = modulePath;
+  let path: Node[] | undefined = modulePath;
+  while (blockPath) {
+    // traverse the YAML up through the Ansible blocks
+    path = blockPath;
+    blockPath = new AncestryBuilder(modulePath)
+      .parent(YAMLMap)
+      .parent(YAMLSeq)
+      .parentKey('block')
+      .getPath();
+  }
+  // now we should be at the tasks/pre_tasks/post_tasks level
+  path = new AncestryBuilder(path)
+    .parent(YAMLMap)
+    .parent(YAMLSeq)
+    .parentKey('collections')
+    .parent(Pair)
+    .getPath();
+
+  if (path) {
+    // we've found the collections declaration
+    const collectionsNode = (path[path.length - 1] as Pair).value;
+    if (collectionsNode instanceof YAMLSeq) {
+      for (const collectionNode of collectionsNode.items) {
+        if (collectionNode instanceof Scalar) {
+          declaredCollections.push(collectionNode.value);
+        }
+      }
+    }
+  }
+
+  return declaredCollections;
+}
+
 export function toLspRange(
   range: [number, number],
   textDocument: TextDocument
diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo
index 826ae116e..1125d68fe 100644
--- a/server/tsconfig.tsbuildinfo
+++ b/server/tsconfig.tsbuildinfo
@@ -827,12 +827,12 @@
         "affectsGlobalScope": false
       },
       "./src/utils.ts": {
-        "version": "6335a74ddd158e289da3a522a1bf5a7c96289f88a1ae638492de5b64aff60a87",
-        "signature": "08b40e57d0784881a1faecdd2a2c63bfa36b21f13d1ff1410f2f591b3a6bf153",
+        "version": "659aff0d1a39c82424b520e9092193e5855d4cfc2baee1e50f3261342dd6f02e",
+        "signature": "d70c68c6d98a041c0f8fab8d01dfac424a280aa5c52b25645c17a42e5ec23387",
         "affectsGlobalScope": false
       },
       "./src/docsLibrary.ts": {
-        "version": "6045f0fd57a2e30643db99ffc787e8a74184a030e46a5c82ff39db71b0574cb8",
+        "version": "5acc6b6a2fec19dc4aa12ff54b0b4c8b6bf34b0a672fcfe6f9adc4395190da65",
         "signature": "541240e117c34af937c82f724d56ccd48dc61fa400f6ca21da3ef356278c8aed",
         "affectsGlobalScope": false
       },
diff --git a/server/webpack.config.js b/server/webpack.config.js
new file mode 100644
index 000000000..601156fbc
--- /dev/null
+++ b/server/webpack.config.js
@@ -0,0 +1,18 @@
+//@ts-check
+
+'use strict';
+
+/* eslint @typescript-eslint/no-var-requires: "off" */
+const withDefaults = require('../webpack.config');
+const path = require('path');
+
+module.exports = withDefaults({
+  context: path.resolve(__dirname),
+  entry: {
+    extension: './src/server.ts',
+  },
+  output: {
+    filename: 'server.js',
+    path: path.resolve(__dirname, 'dist'),
+  },
+});
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 000000000..11f23f7b9
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,55 @@
+//@ts-check
+/** @typedef {import('webpack').Configuration} WebpackConfig **/
+
+'use strict';
+/* eslint @typescript-eslint/no-var-requires: "off" */
+const path = require('path');
+const merge = require('merge-options');
+
+module.exports = function withDefaults(/**@type WebpackConfig*/ extConfig) {
+  /** @type WebpackConfig */
+  let defaultConfig = {
+    mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production')
+    target: 'node', // vscode extensions run in a Node.js-context
+    node: {
+      __dirname: false, // leave the __dirname-behaviour intact
+    },
+    entry: './client/src/extension.ts',
+    output: {
+      filename: '[name].js',
+      path: path.resolve(extConfig.context, 'dist'),
+      libraryTarget: 'commonjs2',
+      devtoolModuleFilenameTemplate: '../[resource-path]',
+    },
+    devtool: 'source-map',
+    externals: {
+      vscode: 'commonjs vscode', // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed
+    },
+    resolve: {
+      // support reading TypeScript and JavaScript files
+      extensions: ['.ts', '.js'],
+    },
+    module: {
+      rules: [
+        {
+          test: /\.ts$/,
+          exclude: /node_modules/,
+          use: [
+            {
+              // configure TypeScript loader:
+              // * enable sources maps for end-to-end source maps
+              loader: 'ts-loader',
+              options: {
+                compilerOptions: {
+                  sourceMap: true,
+                },
+              },
+            },
+          ],
+        },
+      ],
+    },
+  };
+
+  return merge(defaultConfig, extConfig);
+};

From b98a5942d7b33d165a6749db723a2ba900af42cc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Wed, 31 Mar 2021 21:28:32 +0200
Subject: [PATCH 028/558] Reconfigured to allow quick build & watch (without
 webpack)

---
 .gitignore                  |   1 -
 .vscode/launch.json         |  20 +++---
 .vscode/tasks.json          |  60 +++++++----------
 .vscodeignore               |   4 +-
 client/src/extension.ts     |   2 +-
 client/tsconfig.tsbuildinfo | 126 ++++++++++++++++++++++++++++++++++++
 client/webpack.config.js    |   2 +-
 package.json                |   9 +--
 server/tsconfig.tsbuildinfo |  56 ++++++++++++++++
 server/webpack.config.js    |   2 +-
 vsc-extension-quickstart.md |  29 ---------
 webpack.config.js           |   5 +-
 12 files changed, 231 insertions(+), 85 deletions(-)
 delete mode 100644 vsc-extension-quickstart.md

diff --git a/.gitignore b/.gitignore
index c1111b4e3..c223c3e79 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,3 @@
 node_modules
 *.vsix
 out
-dist
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 547a8fa89..7b3cf3648 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -6,12 +6,12 @@
   "version": "0.2.0",
   "configurations": [
     {
-      "name": "Launch Program",
-      "type": "node",
+      "name": "Launch Extension (quick)", // does not use webpack
+      "type": "extensionHost",
       "request": "launch",
-      "skipFiles": ["/**"],
-      "program": "${workspaceFolder}/server/src/docsLibrary.ts",
-      "outFiles": ["${workspaceFolder}/server/dist/**/*.js"],
+      "runtimeExecutable": "${execPath}",
+      "args": ["--extensionDevelopmentPath=${workspaceFolder}"],
+      "outFiles": ["${workspaceFolder}/client/out/**/*.js"],
       "preLaunchTask": "npm: watch"
     },
     {
@@ -20,16 +20,17 @@
       "request": "launch",
       "runtimeExecutable": "${execPath}",
       "args": ["--extensionDevelopmentPath=${workspaceFolder}"],
-      "outFiles": ["${workspaceFolder}/client/dist/**/*.js"],
-      "preLaunchTask": "watch"
+      "outFiles": ["${workspaceFolder}/client/out/**/*.js"],
+      "preLaunchTask": "Webpack Watch"
     },
     {
       "name": "Attach to Server",
       "type": "node",
       "request": "attach",
+      "timeout": 30000,
       "port": 6009,
       "restart": true,
-      "outFiles": ["${workspaceRoot}/server/dist/**/*.js"]
+      "outFiles": ["${workspaceRoot}/server/out/**/*.js"]
     }
     // {
     //   "name": "Language Server E2E Test",
@@ -47,7 +48,8 @@
   "compounds": [
     {
       "name": "Client + Server",
-      "configurations": ["Launch Extension", "Attach to Server"]
+      "stopAll": true,
+      "configurations": ["Launch Extension (quick)", "Attach to Server"]
     }
   ]
 }
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 4a4ccd4fe..a24749981 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -13,6 +13,20 @@
       },
       "problemMatcher": ["$tsc"]
     },
+    {
+      "type": "npm",
+      "script": "watch",
+      "isBackground": true,
+      "group": {
+        "kind": "build",
+        "isDefault": true
+      },
+      "presentation": {
+        "panel": "dedicated",
+        "reveal": "never"
+      },
+      "problemMatcher": ["$tsc-watch"]
+    },
     {
       "label": "Clean",
       "type": "npm",
@@ -27,9 +41,9 @@
       }
     },
     {
-      "label": "Server Build",
+      "label": "Server Watch",
       "type": "npm",
-      "script": "watch:server",
+      "script": "webpack:watch:server",
       "isBackground": true,
       "group": {
         "kind": "build",
@@ -40,25 +54,12 @@
         "reveal": "never",
         "group": "Build"
       },
-      "problemMatcher": [
-        {
-          "base": "$ts-checker-eslint-webpack",
-          "background": {
-            // "activeOnStart": true,
-            "beginsPattern": {
-              "regexp": "asset server.js.*?"
-            },
-            "endsPattern": {
-              "regexp": "[Cc]ompiled (.*?successfully|with .*?error)|[Cc]ompilation .*?finished"
-            }
-          }
-        }
-      ]
+      "problemMatcher": "$ts-webpack-watch"
     },
     {
-      "label": "Client Build",
+      "label": "Client Watch",
       "type": "npm",
-      "script": "watch:client",
+      "script": "webpack:watch:client",
       "isBackground": true,
       "group": {
         "kind": "build",
@@ -69,27 +70,16 @@
         "reveal": "never",
         "group": "Build"
       },
-      "problemMatcher": [
-        {
-          "base": "$ts-checker-eslint-webpack",
-          "background": {
-            "activeOnStart": true,
-            "beginsPattern": {
-              "regexp": "asset extension.js.*?"
-            },
-            "endsPattern": {
-              "regexp": "[Cc]ompiled (.*?successfully|with .*?error)|[Cc]ompilation .*?finished"
-            }
-          }
-        }
-      ]
+      "problemMatcher": "$ts-webpack-watch"
     },
     {
-      "label": "watch",
-      "dependsOn": ["Client Build", "Server Build"]
+      // this requires manually closing terminal windows with watch processes
+      // running, before the task can be launched again
+      "label": "Webpack Watch",
+      "dependsOn": ["Client Watch", "Server Watch"]
     },
     {
-      "label": "clean & watch",
+      "label": "Clean & Webpack Watch",
       "dependsOrder": "sequence",
       "dependsOn": ["Clean", "watch"]
     }
diff --git a/.vscodeignore b/.vscodeignore
index 1edddb129..291b60e44 100644
--- a/.vscodeignore
+++ b/.vscodeignore
@@ -12,6 +12,6 @@ vsc-extension-quickstart.md
 **/webpack.config.js
 
 client/**
-!client/dist/extension.js
+!client/out/extension.js
 server/**
-!server/dist/server.js
+!server/out/server.js
diff --git a/client/src/extension.ts b/client/src/extension.ts
index 06328e84b..b914ba170 100644
--- a/client/src/extension.ts
+++ b/client/src/extension.ts
@@ -14,7 +14,7 @@ let client: LanguageClient;
 export function activate(context: ExtensionContext): void {
   // The server is implemented in node
   const serverModule = context.asAbsolutePath(
-    path.join('server', 'dist', 'server.js')
+    path.join('server', 'out', 'server.js')
   );
   // The debug options for the server
   // --inspect=6009: runs the server in Node's Inspector mode so VS Code can attach to the server for debugging
diff --git a/client/tsconfig.tsbuildinfo b/client/tsconfig.tsbuildinfo
index 05fd4f2eb..94d22030c 100644
--- a/client/tsconfig.tsbuildinfo
+++ b/client/tsconfig.tsbuildinfo
@@ -711,10 +711,45 @@
         "signature": "28fd02b23f22a42df03edc496d91b458cbb5c0b39a9933a40f136e465bf6dc1f",
         "affectsGlobalScope": false
       },
+      "../node_modules/@types/chai/index.d.ts": {
+        "version": "267813ae499a9c070ea61bca2d235e31e785181d967e4461719cbcc78a35abfe",
+        "signature": "267813ae499a9c070ea61bca2d235e31e785181d967e4461719cbcc78a35abfe",
+        "affectsGlobalScope": true
+      },
+      "../node_modules/@types/eslint/helpers.d.ts": {
+        "version": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46",
+        "signature": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46",
+        "affectsGlobalScope": true
+      },
+      "../node_modules/@types/eslint/lib/rules/index.d.ts": {
+        "version": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0",
+        "signature": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0",
+        "affectsGlobalScope": false
+      },
       "../node_modules/@types/json-schema/index.d.ts": {
         "version": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27",
         "signature": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27",
         "affectsGlobalScope": false
+      },
+      "../node_modules/@types/estree/index.d.ts": {
+        "version": "745a853d60bf782583a58584f59e202cae5c7a898b0c92696442602a3ef17a87",
+        "signature": "745a853d60bf782583a58584f59e202cae5c7a898b0c92696442602a3ef17a87",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/eslint/index.d.ts": {
+        "version": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c",
+        "signature": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/eslint-scope/index.d.ts": {
+        "version": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed",
+        "signature": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/mocha/index.d.ts": {
+        "version": "d8cebc259915afa4b2c56b7efcb8056739ec65f4479c1b880ff668eb98654ae7",
+        "signature": "d8cebc259915afa4b2c56b7efcb8056739ec65f4479c1b880ff668eb98654ae7",
+        "affectsGlobalScope": true
       }
     },
     "options": {
@@ -1192,11 +1227,53 @@
         "./node_modules/vscode-languageclient/lib/common/client.d.ts",
         "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
       ],
+      "../node_modules/@types/chai/index.d.ts": [
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
+      "../node_modules/@types/eslint-scope/index.d.ts": [
+        "../node_modules/@types/eslint/index.d.ts",
+        "../node_modules/@types/estree/index.d.ts",
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
+      "../node_modules/@types/eslint/helpers.d.ts": [
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
+      "../node_modules/@types/eslint/index.d.ts": [
+        "../node_modules/@types/eslint/helpers.d.ts",
+        "../node_modules/@types/eslint/lib/rules/index.d.ts",
+        "../node_modules/@types/estree/index.d.ts",
+        "../node_modules/@types/json-schema/index.d.ts",
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
+      "../node_modules/@types/eslint/lib/rules/index.d.ts": [
+        "../node_modules/@types/eslint/index.d.ts",
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
+      "../node_modules/@types/estree/index.d.ts": [
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
       "../node_modules/@types/json-schema/index.d.ts": [
         "./node_modules/@types/vscode/index.d.ts",
         "./node_modules/vscode-languageclient/lib/common/client.d.ts",
         "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
       ],
+      "../node_modules/@types/mocha/index.d.ts": [
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
       "../node_modules/@types/node/assert.d.ts": [
         "../node_modules/@types/node/assert.d.ts",
         "./node_modules/@types/vscode/index.d.ts",
@@ -2214,11 +2291,53 @@
       "./src/semanticTokens.ts": [
         "./node_modules/@types/vscode/index.d.ts"
       ],
+      "../node_modules/@types/chai/index.d.ts": [
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
+      "../node_modules/@types/eslint-scope/index.d.ts": [
+        "../node_modules/@types/eslint/index.d.ts",
+        "../node_modules/@types/estree/index.d.ts",
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
+      "../node_modules/@types/eslint/helpers.d.ts": [
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
+      "../node_modules/@types/eslint/index.d.ts": [
+        "../node_modules/@types/eslint/helpers.d.ts",
+        "../node_modules/@types/eslint/lib/rules/index.d.ts",
+        "../node_modules/@types/estree/index.d.ts",
+        "../node_modules/@types/json-schema/index.d.ts",
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
+      "../node_modules/@types/eslint/lib/rules/index.d.ts": [
+        "../node_modules/@types/eslint/index.d.ts",
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
+      "../node_modules/@types/estree/index.d.ts": [
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
       "../node_modules/@types/json-schema/index.d.ts": [
         "./node_modules/@types/vscode/index.d.ts",
         "./node_modules/vscode-languageclient/lib/common/client.d.ts",
         "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
       ],
+      "../node_modules/@types/mocha/index.d.ts": [
+        "./node_modules/@types/vscode/index.d.ts",
+        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
+        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
+      ],
       "../node_modules/@types/node/assert.d.ts": [
         "../node_modules/@types/node/assert.d.ts",
         "./node_modules/@types/vscode/index.d.ts",
@@ -2846,7 +2965,14 @@
       "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts",
       "./src/extension.ts",
       "./src/semanticTokens.ts",
+      "../node_modules/@types/chai/index.d.ts",
+      "../node_modules/@types/eslint-scope/index.d.ts",
+      "../node_modules/@types/eslint/helpers.d.ts",
+      "../node_modules/@types/eslint/index.d.ts",
+      "../node_modules/@types/eslint/lib/rules/index.d.ts",
+      "../node_modules/@types/estree/index.d.ts",
       "../node_modules/@types/json-schema/index.d.ts",
+      "../node_modules/@types/mocha/index.d.ts",
       "../node_modules/@types/node/assert.d.ts",
       "../node_modules/@types/node/async_hooks.d.ts",
       "../node_modules/@types/node/base.d.ts",
diff --git a/client/webpack.config.js b/client/webpack.config.js
index 424cd6c74..dada3bc72 100644
--- a/client/webpack.config.js
+++ b/client/webpack.config.js
@@ -13,6 +13,6 @@ module.exports = withDefaults({
   },
   output: {
     filename: 'extension.js',
-    path: path.resolve(__dirname, 'dist'),
+    path: path.resolve(__dirname, 'out'),
   },
 });
diff --git a/package.json b/package.json
index e6fc7b07c..0d145c318 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
   "activationEvents": [
     "onLanguage:ansible"
   ],
-  "main": "./client/dist/extension",
+  "main": "./client/out/extension",
   "contributes": {
     "configuration": {
       "type": "object",
@@ -149,9 +149,10 @@
     "webpack": "npm run clean && webpack --mode production --config ./client/webpack.config.js && webpack --mode production --config ./server/webpack.config.js",
     "webpack:dev": "npm run clean && webpack --mode development --config ./client/webpack.config.js && webpack --mode development --config ./server/webpack.config.js",
     "compile": "tsc -b",
-    "watch:client": "webpack --mode none --config ./client/webpack.config.js --watch",
-    "watch:server": "webpack --mode none --config ./server/webpack.config.js --watch",
-    "clean": "rimraf client/dist && rimraf server/dist",
+    "watch": "tsc -b -w",
+    "webpack:watch:client": "webpack --mode none --config ./client/webpack.config.js --watch",
+    "webpack:watch:server": "webpack --mode none --config ./server/webpack.config.js --watch",
+    "clean": "rimraf client/out && rimraf server/out",
     "postinstall": "cd client && npm install && cd ../server && npm install && cd ..",
     "test-compile": "tsc -p ./"
   },
diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo
index 1125d68fe..4feb70caf 100644
--- a/server/tsconfig.tsbuildinfo
+++ b/server/tsconfig.tsbuildinfo
@@ -926,11 +926,36 @@
         "signature": "d8cebc259915afa4b2c56b7efcb8056739ec65f4479c1b880ff668eb98654ae7",
         "affectsGlobalScope": true
       },
+      "../node_modules/@types/eslint/helpers.d.ts": {
+        "version": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46",
+        "signature": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46",
+        "affectsGlobalScope": true
+      },
+      "../node_modules/@types/eslint/lib/rules/index.d.ts": {
+        "version": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0",
+        "signature": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0",
+        "affectsGlobalScope": false
+      },
       "../node_modules/@types/json-schema/index.d.ts": {
         "version": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27",
         "signature": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27",
         "affectsGlobalScope": false
       },
+      "../node_modules/@types/estree/index.d.ts": {
+        "version": "745a853d60bf782583a58584f59e202cae5c7a898b0c92696442602a3ef17a87",
+        "signature": "745a853d60bf782583a58584f59e202cae5c7a898b0c92696442602a3ef17a87",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/eslint/index.d.ts": {
+        "version": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c",
+        "signature": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/eslint-scope/index.d.ts": {
+        "version": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed",
+        "signature": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed",
+        "affectsGlobalScope": false
+      },
       "../node_modules/@types/vscode/index.d.ts": {
         "version": "0d2ae25abaa1163188d256f0c438a274459099c30c44aa3be144c9c1232f4081",
         "signature": "0d2ae25abaa1163188d256f0c438a274459099c30c44aa3be144c9c1232f4081",
@@ -953,6 +978,19 @@
       "configFilePath": "./tsconfig.json"
     },
     "referencedMap": {
+      "../node_modules/@types/eslint-scope/index.d.ts": [
+        "../node_modules/@types/eslint/index.d.ts",
+        "../node_modules/@types/estree/index.d.ts"
+      ],
+      "../node_modules/@types/eslint/index.d.ts": [
+        "../node_modules/@types/eslint/helpers.d.ts",
+        "../node_modules/@types/eslint/lib/rules/index.d.ts",
+        "../node_modules/@types/estree/index.d.ts",
+        "../node_modules/@types/json-schema/index.d.ts"
+      ],
+      "../node_modules/@types/eslint/lib/rules/index.d.ts": [
+        "../node_modules/@types/eslint/index.d.ts"
+      ],
       "../node_modules/@types/node/assert.d.ts": [
         "../node_modules/@types/node/assert.d.ts"
       ],
@@ -1832,6 +1870,19 @@
       ]
     },
     "exportedModulesMap": {
+      "../node_modules/@types/eslint-scope/index.d.ts": [
+        "../node_modules/@types/eslint/index.d.ts",
+        "../node_modules/@types/estree/index.d.ts"
+      ],
+      "../node_modules/@types/eslint/index.d.ts": [
+        "../node_modules/@types/eslint/helpers.d.ts",
+        "../node_modules/@types/eslint/lib/rules/index.d.ts",
+        "../node_modules/@types/estree/index.d.ts",
+        "../node_modules/@types/json-schema/index.d.ts"
+      ],
+      "../node_modules/@types/eslint/lib/rules/index.d.ts": [
+        "../node_modules/@types/eslint/index.d.ts"
+      ],
       "../node_modules/@types/node/assert.d.ts": [
         "../node_modules/@types/node/assert.d.ts"
       ],
@@ -2654,6 +2705,11 @@
       ]
     },
     "semanticDiagnosticsPerFile": [
+      "../node_modules/@types/eslint-scope/index.d.ts",
+      "../node_modules/@types/eslint/helpers.d.ts",
+      "../node_modules/@types/eslint/index.d.ts",
+      "../node_modules/@types/eslint/lib/rules/index.d.ts",
+      "../node_modules/@types/estree/index.d.ts",
       "../node_modules/@types/json-schema/index.d.ts",
       "../node_modules/@types/node/assert.d.ts",
       "../node_modules/@types/node/async_hooks.d.ts",
diff --git a/server/webpack.config.js b/server/webpack.config.js
index 601156fbc..ac5aaff6d 100644
--- a/server/webpack.config.js
+++ b/server/webpack.config.js
@@ -13,6 +13,6 @@ module.exports = withDefaults({
   },
   output: {
     filename: 'server.js',
-    path: path.resolve(__dirname, 'dist'),
+    path: path.resolve(__dirname, 'out'),
   },
 });
diff --git a/vsc-extension-quickstart.md b/vsc-extension-quickstart.md
deleted file mode 100644
index 9b8c0d900..000000000
--- a/vsc-extension-quickstart.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Welcome to your VS Code Extension
-
-## What's in the folder
-
-* This folder contains all of the files necessary for your extension.
-* `package.json` - this is the manifest file in which you declare your language support and define the location of the grammar file that has been copied into your extension.
-* `syntaxes/ansible.tmLanguage.json` - this is the Text mate grammar file that is used for tokenization.
-* `language-configuration.json` - this is the language configuration, defining the tokens that are used for comments and brackets.
-
-## Get up and running straight away
-
-* Make sure the language configuration settings in `language-configuration.json` are accurate.
-* Press `F5` to open a new window with your extension loaded.
-* Create a new file with a file name suffix matching your language.
-* Verify that syntax highlighting works and that the language configuration settings are working.
-
-## Make changes
-
-* You can relaunch the extension from the debug toolbar after making changes to the files listed above.
-* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.
-
-## Add more language features
-
-* To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at https://code.visualstudio.com/docs
-
-## Install your extension
-
-* To start using your extension with Visual Studio Code copy it into the `/.vscode/extensions` folder and restart Code.
-* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension.
diff --git a/webpack.config.js b/webpack.config.js
index 11f23f7b9..7721d5045 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -9,7 +9,7 @@ const merge = require('merge-options');
 module.exports = function withDefaults(/**@type WebpackConfig*/ extConfig) {
   /** @type WebpackConfig */
   let defaultConfig = {
-    mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production')
+    mode: 'none',
     target: 'node', // vscode extensions run in a Node.js-context
     node: {
       __dirname: false, // leave the __dirname-behaviour intact
@@ -17,10 +17,11 @@ module.exports = function withDefaults(/**@type WebpackConfig*/ extConfig) {
     entry: './client/src/extension.ts',
     output: {
       filename: '[name].js',
-      path: path.resolve(extConfig.context, 'dist'),
+      path: path.resolve(extConfig.context, 'out'),
       libraryTarget: 'commonjs2',
       devtoolModuleFilenameTemplate: '../[resource-path]',
     },
+    // stats: 'verbose', // doesn't help with watcher
     devtool: 'source-map',
     externals: {
       vscode: 'commonjs vscode', // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed

From 9e2abf5ec398ebf9a61deb1e3094c682dfae43d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Thu, 1 Apr 2021 22:07:43 +0200
Subject: [PATCH 029/558] Restructure/refactor code into libraries

Tested & finalized declared collection discovery for plays
---
 server/src/context.ts                         |   7 -
 server/src/documentMeta.ts                    |   3 -
 server/src/interfaces/context.ts              |   7 +
 server/src/interfaces/documentMeta.ts         |   3 +
 .../src/{ => providers}/completionProvider.ts |   6 +-
 .../src/{ => providers}/definitionProvider.ts |   7 +-
 server/src/{ => providers}/hoverProvider.ts   |   7 +-
 .../src/{ => providers}/validationProvider.ts |   2 +-
 server/src/server.ts                          |  22 +-
 server/src/{ => services}/ansibleConfig.ts    |  33 +-
 server/src/{ => services}/docsLibrary.ts      |   6 +-
 server/src/{ => services}/docsParser.ts       |   2 +-
 server/src/test/data/utils.playbook.yml       |  25 +
 .../{utils.test.ts => utils/yaml.test.ts}     |  60 +-
 server/src/{ => utils}/docsFormatter.ts       |   6 +-
 server/src/utils/misc.ts                      |  77 ++
 server/src/{utils.ts => utils/yaml.ts}        | 234 ++---
 server/tsconfig.tsbuildinfo                   | 868 +++++++++---------
 18 files changed, 724 insertions(+), 651 deletions(-)
 delete mode 100644 server/src/context.ts
 delete mode 100644 server/src/documentMeta.ts
 create mode 100644 server/src/interfaces/context.ts
 create mode 100644 server/src/interfaces/documentMeta.ts
 rename server/src/{ => providers}/completionProvider.ts (95%)
 rename server/src/{ => providers}/definitionProvider.ts (85%)
 rename server/src/{ => providers}/hoverProvider.ts (87%)
 rename server/src/{ => providers}/validationProvider.ts (100%)
 rename server/src/{ => services}/ansibleConfig.ts (65%)
 rename server/src/{ => services}/docsLibrary.ts (98%)
 rename server/src/{ => services}/docsParser.ts (100%)
 rename server/src/test/{utils.test.ts => utils/yaml.test.ts} (71%)
 rename server/src/{ => utils}/docsFormatter.ts (97%)
 create mode 100644 server/src/utils/misc.ts
 rename server/src/{utils.ts => utils/yaml.ts} (65%)

diff --git a/server/src/context.ts b/server/src/context.ts
deleted file mode 100644
index 0358724cc..000000000
--- a/server/src/context.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { AnsibleConfig } from './ansibleConfig';
-import { DocumentMetadata } from './documentMeta';
-
-export interface IContext {
-  ansibleConfig: AnsibleConfig;
-  documentMetadata: Map>;
-}
diff --git a/server/src/documentMeta.ts b/server/src/documentMeta.ts
deleted file mode 100644
index fe49629f1..000000000
--- a/server/src/documentMeta.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export interface DocumentMetadata {
-  collections: string[];
-}
diff --git a/server/src/interfaces/context.ts b/server/src/interfaces/context.ts
new file mode 100644
index 000000000..adc86dfe8
--- /dev/null
+++ b/server/src/interfaces/context.ts
@@ -0,0 +1,7 @@
+import { AnsibleConfig } from '../services/ansibleConfig';
+import { IDocumentMetadata } from './documentMeta';
+
+export interface IContext {
+  ansibleConfig: AnsibleConfig;
+  documentMetadata: Map>;
+}
diff --git a/server/src/interfaces/documentMeta.ts b/server/src/interfaces/documentMeta.ts
new file mode 100644
index 000000000..0a3a1ef89
--- /dev/null
+++ b/server/src/interfaces/documentMeta.ts
@@ -0,0 +1,3 @@
+export interface IDocumentMetadata {
+  collections: string[];
+}
diff --git a/server/src/completionProvider.ts b/server/src/providers/completionProvider.ts
similarity index 95%
rename from server/src/completionProvider.ts
rename to server/src/providers/completionProvider.ts
index 7e6ddc157..146b81bd5 100644
--- a/server/src/completionProvider.ts
+++ b/server/src/providers/completionProvider.ts
@@ -3,9 +3,9 @@ import { CompletionItem, CompletionItemKind } from 'vscode-languageserver';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
 import { Pair, Scalar, YAMLMap } from 'yaml/types';
-import { formatOption, getDetails } from './docsFormatter';
-import { DocsLibrary, IOption } from './docsLibrary';
-import { AncestryBuilder, getPathAt, mayBeModule } from './utils';
+import { DocsLibrary, IOption } from '../services/docsLibrary';
+import { formatOption, getDetails } from '../utils/docsFormatter';
+import { AncestryBuilder, getPathAt, mayBeModule } from '../utils/yaml';
 
 export async function doCompletion(
   document: TextDocument,
diff --git a/server/src/definitionProvider.ts b/server/src/providers/definitionProvider.ts
similarity index 85%
rename from server/src/definitionProvider.ts
rename to server/src/providers/definitionProvider.ts
index 56c1e7946..195ce0823 100644
--- a/server/src/definitionProvider.ts
+++ b/server/src/providers/definitionProvider.ts
@@ -1,9 +1,10 @@
-import { Definition, DefinitionLink, Range } from 'vscode-languageserver';
+import { DefinitionLink, Range } from 'vscode-languageserver';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
 import { Scalar } from 'yaml/types';
-import { DocsLibrary } from './docsLibrary';
-import { AncestryBuilder, getPathAt, mayBeModule, toLspRange } from './utils';
+import { DocsLibrary } from '../services/docsLibrary';
+import { toLspRange } from '../utils/misc';
+import { AncestryBuilder, getPathAt, mayBeModule } from '../utils/yaml';
 
 export async function getDefinition(
   document: TextDocument,
diff --git a/server/src/hoverProvider.ts b/server/src/providers/hoverProvider.ts
similarity index 87%
rename from server/src/hoverProvider.ts
rename to server/src/providers/hoverProvider.ts
index b99a183ef..a2d3700da 100644
--- a/server/src/hoverProvider.ts
+++ b/server/src/providers/hoverProvider.ts
@@ -2,9 +2,10 @@ import { Hover } from 'vscode-languageserver';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
 import { Scalar, YAMLMap } from 'yaml/types';
-import { formatModule, formatOption } from './docsFormatter';
-import { DocsLibrary } from './docsLibrary';
-import { AncestryBuilder, getPathAt, mayBeModule, toLspRange } from './utils';
+import { DocsLibrary } from '../services/docsLibrary';
+import { formatModule, formatOption } from '../utils/docsFormatter';
+import { toLspRange } from '../utils/misc';
+import { AncestryBuilder, getPathAt, mayBeModule } from '../utils/yaml';
 
 export async function doHover(
   document: TextDocument,
diff --git a/server/src/validationProvider.ts b/server/src/providers/validationProvider.ts
similarity index 100%
rename from server/src/validationProvider.ts
rename to server/src/providers/validationProvider.ts
index cda1838f1..e18183881 100644
--- a/server/src/validationProvider.ts
+++ b/server/src/providers/validationProvider.ts
@@ -1,4 +1,5 @@
 import IntervalTree from '@flatten-js/interval-tree';
+import * as _ from 'lodash';
 import {
   Diagnostic,
   DiagnosticRelatedInformation,
@@ -8,7 +9,6 @@ import {
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
-import * as _ from 'lodash';
 
 export function doValidate(textDocument: TextDocument): Diagnostic[] {
   const diagnostics: Diagnostic[] = [];
diff --git a/server/src/server.ts b/server/src/server.ts
index 47903e0ae..4cc98a38a 100644
--- a/server/src/server.ts
+++ b/server/src/server.ts
@@ -9,15 +9,15 @@ import {
   TextDocumentSyncKind,
   WorkspaceFolder,
 } from 'vscode-languageserver/node';
-import { AnsibleConfig } from './ansibleConfig';
-import { doCompletion } from './completionProvider';
-import { IContext } from './context';
-import { getDefinition } from './definitionProvider';
-import { DocsLibrary } from './docsLibrary';
-import { DocumentMetadata } from './documentMeta';
-import { doHover } from './hoverProvider';
-import { getAnsibleMetadata } from './utils';
-import { doValidate } from './validationProvider';
+import { AnsibleConfig } from './services/ansibleConfig';
+import { doCompletion } from './providers/completionProvider';
+import { IContext } from './interfaces/context';
+import { getDefinition } from './providers/definitionProvider';
+import { DocsLibrary } from './services/docsLibrary';
+import { IDocumentMetadata } from './interfaces/documentMeta';
+import { doHover } from './providers/hoverProvider';
+import { getAnsibleMetadata } from './utils/misc';
+import { doValidate } from './providers/validationProvider';
 
 // Create a connection for the server, using Node's IPC as a transport.
 // Also include all preview / proposed LSP features.
@@ -101,7 +101,7 @@ let globalSettings: ExampleSettings = defaultSettings;
 
 // Cache the settings of all open documents
 const documentSettings: Map> = new Map();
-const documentMetadata: Map> = new Map();
+const documentMetadata: Map> = new Map();
 
 connection.onDidChangeConfiguration((change) => {
   if (hasConfigurationCapability) {
@@ -162,7 +162,7 @@ connection.onDidChangeWatchedFiles((_change) => {
 });
 
 const ansibleConfig = new AnsibleConfig(connection);
-ansibleConfig.initialize(rootFolder?.uri);
+ansibleConfig.initialize();
 
 const context: IContext = {
   ansibleConfig: ansibleConfig,
diff --git a/server/src/ansibleConfig.ts b/server/src/services/ansibleConfig.ts
similarity index 65%
rename from server/src/ansibleConfig.ts
rename to server/src/services/ansibleConfig.ts
index 13c1b011e..e041cab81 100644
--- a/server/src/ansibleConfig.ts
+++ b/server/src/services/ansibleConfig.ts
@@ -1,24 +1,22 @@
-import { promises as fs } from 'fs';
+import * as child_process from 'child_process';
 import * as ini from 'ini';
-import * as path from 'path';
 import * as _ from 'lodash';
-import * as child_process from 'child_process';
-import { promisify } from 'node:util';
-import { _Connection } from 'vscode-languageserver';
 import { SpawnSyncReturns } from 'node:child_process';
+import * as path from 'path';
+import { _Connection } from 'vscode-languageserver';
 
 // const exec = promisify(child_process.exec);
 
 export class AnsibleConfig {
-  private _connection: _Connection;
+  private connection: _Connection;
   private _collection_paths: string[] = [];
   private _module_locations: string[] = [];
 
   constructor(connection: _Connection) {
-    this._connection = connection;
+    this.connection = connection;
   }
 
-  public async initialize(workspacePath?: string): Promise {
+  public async initialize(): Promise {
     try {
       const ansibleConfigResult = child_process.execSync(
         'ansible-config dump',
@@ -44,27 +42,10 @@ export class AnsibleConfig {
         path.resolve(versionInfo['ansible python module location'], 'modules')
       );
     } catch (error) {
-      this._connection.console.error(
-        (error as SpawnSyncReturns).stderr
-      );
+      this.connection.console.error((error as SpawnSyncReturns).stderr);
     }
-    // for (const location of this._config_file_locations) {
-    //   const cfgPath = path.resolve(workspacePath, location);
-    //   if (fileExists(cfgPath)) {
-    //     await this.parseConfig(cfgPath);
-    //     break;
-    //   }
-    // }
   }
 
-  // private async parseConfig(cfgPath: string) {
-  //   const config = ini.parse(await fs.readFile(cfgPath, { encoding: 'utf-8' }));
-  //   const collections_paths = config?.default.collections_paths;
-  //   if (collections_paths && typeof collections_paths === 'string') {
-  //     this._collections_paths = collections_paths.split(':');
-  //   }
-  // }
-
   get collections_paths(): string[] {
     return this._collection_paths;
   }
diff --git a/server/src/docsLibrary.ts b/server/src/services/docsLibrary.ts
similarity index 98%
rename from server/src/docsLibrary.ts
rename to server/src/services/docsLibrary.ts
index 96a7a16cb..e24dadd50 100644
--- a/server/src/docsLibrary.ts
+++ b/server/src/services/docsLibrary.ts
@@ -1,10 +1,10 @@
-import { DocsParser } from './docsParser';
 import * as _ from 'lodash';
 import { WorkspaceFolder } from 'vscode-languageserver';
-import { IContext } from './context';
 import { TextDocument } from 'vscode-languageserver-textdocument';
-import { hasOwnProperty, isObject } from './utils';
 import { YAMLError } from 'yaml/util';
+import { IContext } from '../interfaces/context';
+import { hasOwnProperty, isObject } from '../utils/misc';
+import { DocsParser } from './docsParser';
 export class DocsLibrary {
   private modules = new Map();
   private docFragments = new Map();
diff --git a/server/src/docsParser.ts b/server/src/services/docsParser.ts
similarity index 100%
rename from server/src/docsParser.ts
rename to server/src/services/docsParser.ts
index 1f7da1a7f..83e37c589 100644
--- a/server/src/docsParser.ts
+++ b/server/src/services/docsParser.ts
@@ -1,9 +1,9 @@
 import * as fs from 'fs';
-import globby = require('globby');
 import * as path from 'path';
 import { parseDocument } from 'yaml';
 import { YAMLError } from 'yaml/util';
 import { IModuleMetadata } from './docsLibrary';
+import globby = require('globby');
 
 export class DocsParser {
   public static docsRegex = /(?
[ \t]*DOCUMENTATION\s*=\s*r?(?'''|""")(?:\n---)?\n?)(?.*?)\k/s;
diff --git a/server/src/test/data/utils.playbook.yml b/server/src/test/data/utils.playbook.yml
index f9e000043..4381d09b4 100644
--- a/server/src/test/data/utils.playbook.yml
+++ b/server/src/test/data/utils.playbook.yml
@@ -3,6 +3,11 @@
   gather_facts: false
   collections:
     - mynamespace.mycollection
+    - mynamespace2.mycollection2
+  pre_tasks:
+    - name: PreTask name
+      mymodule:
+        option1: value1
   tasks:
     - name: Task name
       mymodule:
@@ -12,3 +17,23 @@
         - name: Task2 name
           mymodule2:
             option1: value1
+        - name: Nested block name
+          block:
+            - name: Task3 name
+              mymodule3:
+                option1: value1
+- name: Play name2
+  hosts: localhost
+  gather_facts: false
+  tasks:
+    - name: Task name
+      mymodule:
+        option1: value1
+- name: Play name3
+  hosts: localhost
+  gather_facts: false
+  collections:
+  tasks:
+    - name: Task name
+      mymodule:
+        option1: value1
diff --git a/server/src/test/utils.test.ts b/server/src/test/utils/yaml.test.ts
similarity index 71%
rename from server/src/test/utils.test.ts
rename to server/src/test/utils/yaml.test.ts
index 1157058aa..086118c41 100644
--- a/server/src/test/utils.test.ts
+++ b/server/src/test/utils/yaml.test.ts
@@ -1,11 +1,14 @@
-import * as assert from 'assert';
-import * as path from 'path';
+import { expect } from 'chai';
 import { promises as fs } from 'fs';
+import * as path from 'path';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
-import { Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
-import { AncestryBuilder, getPathAt } from '../utils';
-import { expect } from 'chai';
+import { Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
+import {
+  AncestryBuilder,
+  getDeclaredCollections,
+  getPathAt,
+} from '../../utils/yaml';
 
 async function getYamlDoc(yamlFile: string) {
   const yaml = await fs.readFile(
@@ -31,7 +34,7 @@ async function getPathInFile(
   );
 }
 
-describe('utils', () => {
+describe('yaml', () => {
   describe('AncestryBuilder', () => {
     it('canGetParent', async () => {
       const path = await getPathInFile('utils.block.yml', 4, 7);
@@ -150,4 +153,49 @@ describe('utils', () => {
         .to.have.property('value', 'lineinfile');
     });
   });
+
+  describe('getDeclaredCollections', () => {
+    it('canGetCollections', async () => {
+      const path = await getPathInFile('utils.playbook.yml', 13, 7);
+      const collections = getDeclaredCollections(path);
+      expect(collections).to.have.members([
+        'mynamespace.mycollection',
+        'mynamespace2.mycollection2',
+      ]);
+    });
+    it('canGetCollectionsFromPreTasks', async () => {
+      const path = await getPathInFile('utils.playbook.yml', 9, 7);
+      const collections = getDeclaredCollections(path);
+      expect(collections).to.have.members([
+        'mynamespace.mycollection',
+        'mynamespace2.mycollection2',
+      ]);
+    });
+    it('canGetCollectionsFromBlock', async () => {
+      const path = await getPathInFile('utils.playbook.yml', 12, 11);
+      const collections = getDeclaredCollections(path);
+      expect(collections).to.have.members([
+        'mynamespace.mycollection',
+        'mynamespace2.mycollection2',
+      ]);
+    });
+    it('canGetCollectionsFromNestedBlock', async () => {
+      const path = await getPathInFile('utils.playbook.yml', 23, 15);
+      const collections = getDeclaredCollections(path);
+      expect(collections).to.have.members([
+        'mynamespace.mycollection',
+        'mynamespace2.mycollection2',
+      ]);
+    });
+    it('canWorkWithoutCollections', async () => {
+      const path = await getPathInFile('utils.playbook.yml', 30, 7);
+      const collections = getDeclaredCollections(path);
+      expect(collections).to.have.members([]);
+    });
+    it('canWorkWithEmptyCollections', async () => {
+      const path = await getPathInFile('utils.playbook.yml', 38, 7);
+      const collections = getDeclaredCollections(path);
+      expect(collections).to.have.members([]);
+    });
+  });
 });
diff --git a/server/src/docsFormatter.ts b/server/src/utils/docsFormatter.ts
similarity index 97%
rename from server/src/docsFormatter.ts
rename to server/src/utils/docsFormatter.ts
index 36dd52ee2..4e0199a73 100644
--- a/server/src/docsFormatter.ts
+++ b/server/src/utils/docsFormatter.ts
@@ -1,6 +1,10 @@
 import { format } from 'util';
 import { MarkupContent, MarkupKind } from 'vscode-languageserver';
-import { IDescription, IModuleDocumentation, IOption } from './docsLibrary';
+import {
+  IDescription,
+  IModuleDocumentation,
+  IOption,
+} from '../services/docsLibrary';
 
 export function formatModule(module: IModuleDocumentation): MarkupContent {
   const sections: string[] = [];
diff --git a/server/src/utils/misc.ts b/server/src/utils/misc.ts
new file mode 100644
index 000000000..ccc44d770
--- /dev/null
+++ b/server/src/utils/misc.ts
@@ -0,0 +1,77 @@
+import { promises as fs } from 'fs';
+import { URL } from 'url';
+import { TextDocument } from 'vscode-languageserver-textdocument';
+import { Range } from 'vscode-languageserver-types';
+import { parseAllDocuments } from 'yaml';
+import { IDocumentMetadata } from '../interfaces/documentMeta';
+
+async function fileExists(filePath: string): Promise {
+  return !!(await fs.stat(filePath).catch(() => false));
+}
+
+export async function getAnsibleMetadata(
+  uri: string
+): Promise {
+  let metaPath;
+  // const path = /file:\/\/(.*)/.exec(uri)?.groups
+  const pathArray = uri.split('/');
+  // Find first
+  for (let index = pathArray.length - 1; index >= 0; index--) {
+    if (pathArray[index] === 'tasks') {
+      metaPath = pathArray.slice(0, index).concat('meta', 'main.yml').join('/');
+    }
+  }
+  const metadata = {
+    collections: new Array(),
+  };
+  if (metaPath && fileExists(metaPath)) {
+    try {
+      const metaContents = await fs.readFile(new URL(metaPath), {
+        encoding: 'utf8',
+      });
+      parseAllDocuments(metaContents).forEach((metaDoc) => {
+        const metaObject: unknown = metaDoc.toJSON();
+        if (
+          hasOwnProperty(metaObject, 'collections') &&
+          metaObject.collections instanceof Array
+        ) {
+          metaObject.collections.forEach((collection) => {
+            if (typeof collection === 'string') {
+              metadata.collections.push(collection);
+            }
+          });
+        }
+      });
+    } catch (error) {
+      //TODO: Log debug
+    }
+  }
+  return metadata;
+}
+
+export function toLspRange(
+  range: [number, number],
+  textDocument: TextDocument
+): Range {
+  const start = textDocument.positionAt(range[0]);
+  const end = textDocument.positionAt(range[1]);
+  return Range.create(start, end);
+}
+
+export function hasOwnProperty(
+  obj: X,
+  prop: Y
+): obj is X & Record & Record {
+  return isObject(obj) && obj.hasOwnProperty(prop);
+}
+
+/**
+ * Checks whether `obj` is a non-null object.
+ * @param obj
+ * @returns
+ */
+export function isObject(
+  obj: X
+): obj is X & Record {
+  return obj && typeof obj === 'object';
+}
diff --git a/server/src/utils.ts b/server/src/utils/yaml.ts
similarity index 65%
rename from server/src/utils.ts
rename to server/src/utils/yaml.ts
index d1f678d1d..a89c12a15 100644
--- a/server/src/utils.ts
+++ b/server/src/utils/yaml.ts
@@ -1,13 +1,72 @@
+import * as _ from 'lodash';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
-import { Document, parseAllDocuments } from 'yaml';
+import { Document } from 'yaml';
 import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
-import * as _ from 'lodash';
-import { promises as fs } from 'fs';
-import * as path from 'path';
-import { type } from 'node:os';
-import { DocumentMetadata } from './documentMeta';
-import { URL } from 'url';
-import { Range } from 'vscode-languageserver-types';
+
+export class AncestryBuilder {
+  private _path: Node[];
+
+  private _index: number;
+
+  private _returnKey: boolean;
+
+  constructor(path: Node[] | null, index?: number) {
+    this._path = path || [];
+    this._index = index || this._path.length - 1;
+    this._returnKey = false;
+  }
+
+  parent(type?: typeof Node | typeof Pair): AncestryBuilder {
+    this._index--;
+    if (this.get() instanceof Pair) {
+      if (!(type === Pair)) {
+        this._index--; // unless Pair is explicitly requested, we ignore pair when just going up
+      }
+    }
+    if (type) {
+      if (!(this.get() instanceof type)) {
+        this._index = Number.MIN_SAFE_INTEGER;
+      }
+    }
+    this._returnKey = false;
+    return this;
+  }
+
+  parentKey(key?: string | RegExp): AncestryBuilder {
+    this._index--;
+    const node = this.get();
+    if (
+      node instanceof Pair &&
+      node.key instanceof Scalar &&
+      (!key ||
+        (key instanceof RegExp && key.test(node.key.value)) ||
+        (typeof key == 'string' && key === node.key.value))
+    ) {
+      this._returnKey = true;
+    } else {
+      this._index = Number.MIN_SAFE_INTEGER;
+    }
+    return this;
+  }
+
+  get(): Node | null {
+    const node = this._path[this._index];
+    if (this._returnKey && node instanceof Pair) {
+      return node.key;
+    }
+    return node;
+  }
+
+  getPath(): Node[] | null {
+    if (this._index < 0) return null;
+    const node = this._path[this._index];
+    const path = this._path.slice(0, this._index + 1);
+    if (this._returnKey && node instanceof Pair) {
+      path.push(node.key);
+    }
+    return path;
+  }
+}
 
 export function getPathAt(
   document: TextDocument,
@@ -86,71 +145,6 @@ export function getPathAtOffset(
   return null;
 }
 
-export class AncestryBuilder {
-  private _path: Node[];
-
-  private _index: number;
-
-  private _returnKey: boolean;
-
-  constructor(path: Node[] | null, index?: number) {
-    this._path = path || [];
-    this._index = index || this._path.length - 1;
-    this._returnKey = false;
-  }
-
-  parent(type?: typeof Node | typeof Pair): AncestryBuilder {
-    this._index--;
-    if (this.get() instanceof Pair) {
-      if (!(type === Pair)) {
-        this._index--; // unless Pair is explicitly requested, we ignore pair when just going up
-      }
-    }
-    if (type) {
-      if (!(this.get() instanceof type)) {
-        this._index = Number.MIN_SAFE_INTEGER;
-      }
-    }
-    this._returnKey = false;
-    return this;
-  }
-
-  parentKey(key?: string | RegExp): AncestryBuilder {
-    this._index--;
-    const node = this.get();
-    if (
-      node instanceof Pair &&
-      node.key instanceof Scalar &&
-      (!key ||
-        (key instanceof RegExp && key.test(node.key.value)) ||
-        (typeof key == 'string' && key === node.key.value))
-    ) {
-      this._returnKey = true;
-    } else {
-      this._index = Number.MIN_SAFE_INTEGER;
-    }
-    return this;
-  }
-
-  get(): Node | undefined {
-    const node = this._path[this._index];
-    if (this._returnKey && node instanceof Pair) {
-      return node.key;
-    }
-    return node;
-  }
-
-  getPath(): Node[] | undefined {
-    if (this._index < 0) return undefined;
-    const node = this._path[this._index];
-    const path = this._path.slice(0, this._index + 1);
-    if (this._returnKey && node instanceof Pair) {
-      path.push(node.key);
-    }
-    return path;
-  }
-}
-
 export const tasksKey = /^(tasks|pre_tasks|post_tasks|block|rescue|always)$/;
 export function mayBeModule(path: Node[]): boolean {
   const taskListPath = new AncestryBuilder(path)
@@ -171,74 +165,33 @@ export function mayBeModule(path: Node[]): boolean {
   return false;
 }
 
-async function fileExists(filePath: string): Promise {
-  return !!(await fs.stat(filePath).catch(() => false));
-}
-
-export async function getAnsibleMetadata(
-  uri: string
-): Promise {
-  let metaPath;
-  // const path = /file:\/\/(.*)/.exec(uri)?.groups
-  const pathArray = uri.split('/');
-  // Find first
-  for (let index = pathArray.length - 1; index >= 0; index--) {
-    if (pathArray[index] === 'tasks') {
-      metaPath = pathArray.slice(0, index).concat('meta', 'main.yml').join('/');
-    }
-  }
-  const metadata = {
-    collections: new Array(),
-  };
-  if (metaPath && fileExists(metaPath)) {
-    try {
-      const metaContents = await fs.readFile(new URL(metaPath), {
-        encoding: 'utf8',
-      });
-      parseAllDocuments(metaContents).forEach((metaDoc) => {
-        const metaObject: unknown = metaDoc.toJSON();
-        if (
-          hasOwnProperty(metaObject, 'collections') &&
-          metaObject.collections instanceof Array
-        ) {
-          metaObject.collections.forEach((collection) => {
-            if (typeof collection === 'string') {
-              metadata.collections.push(collection);
-            }
-          });
-        }
-      });
-    } catch (error) {
-      //TODO: Log debug
-    }
-  }
-  return metadata;
-}
-
-export function getDeclaredCollections(modulePath: Node[]): string[] {
+export function getDeclaredCollections(modulePath: Node[] | null): string[] {
   const declaredCollections: string[] = [];
-  let blockPath: Node[] | undefined = modulePath;
-  let path: Node[] | undefined = modulePath;
+  let blockPath: Node[] | null = modulePath;
+  let path: Node[] | null = modulePath;
   while (blockPath) {
     // traverse the YAML up through the Ansible blocks
     path = blockPath;
-    blockPath = new AncestryBuilder(modulePath)
+    blockPath = new AncestryBuilder(blockPath)
       .parent(YAMLMap)
       .parent(YAMLSeq)
       .parentKey('block')
       .getPath();
   }
   // now we should be at the tasks/pre_tasks/post_tasks level
-  path = new AncestryBuilder(path)
+  const playNode = new AncestryBuilder(path)
     .parent(YAMLMap)
     .parent(YAMLSeq)
-    .parentKey('collections')
-    .parent(Pair)
-    .getPath();
+    .parent(YAMLMap)
+    .get() as YAMLMap | null;
+  const collectionsPair = _.find(
+    playNode?.items,
+    (pair) => pair.key instanceof Scalar && pair.key.value === 'collections'
+  );
 
-  if (path) {
+  if (collectionsPair) {
     // we've found the collections declaration
-    const collectionsNode = (path[path.length - 1] as Pair).value;
+    const collectionsNode = collectionsPair.value;
     if (collectionsNode instanceof YAMLSeq) {
       for (const collectionNode of collectionsNode.items) {
         if (collectionNode instanceof Scalar) {
@@ -250,30 +203,3 @@ export function getDeclaredCollections(modulePath: Node[]): string[] {
 
   return declaredCollections;
 }
-
-export function toLspRange(
-  range: [number, number],
-  textDocument: TextDocument
-): Range {
-  const start = textDocument.positionAt(range[0]);
-  const end = textDocument.positionAt(range[1]);
-  return Range.create(start, end);
-}
-
-export function hasOwnProperty(
-  obj: X,
-  prop: Y
-): obj is X & Record & Record {
-  return isObject(obj) && obj.hasOwnProperty(prop);
-}
-
-/**
- * Checks whether `obj` is a non-null object.
- * @param obj
- * @returns
- */
-export function isObject(
-  obj: X
-): obj is X & Record {
-  return obj && typeof obj === 'object';
-}
diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo
index 4feb70caf..696c749f2 100644
--- a/server/tsconfig.tsbuildinfo
+++ b/server/tsconfig.tsbuildinfo
@@ -161,76 +161,251 @@
         "signature": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd",
         "affectsGlobalScope": true
       },
-      "./node_modules/@types/ini/index.d.ts": {
-        "version": "3cc26d1f94c768ae2896d3900ffa268e0657a332b399e94c1fb52da1f9e07625",
-        "signature": "3cc26d1f94c768ae2896d3900ffa268e0657a332b399e94c1fb52da1f9e07625",
+      "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts": {
+        "version": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538",
+        "signature": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/common/common.d.ts": {
-        "version": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc",
-        "signature": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc",
+      "./node_modules/vscode-languageserver/typings/thenable.d.ts": {
+        "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d",
+        "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d",
+        "affectsGlobalScope": true
+      },
+      "../node_modules/@types/node/globals.d.ts": {
+        "version": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476",
+        "signature": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476",
+        "affectsGlobalScope": true
+      },
+      "../node_modules/@types/node/async_hooks.d.ts": {
+        "version": "7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641",
+        "signature": "7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/common/array.d.ts": {
-        "version": "438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2",
-        "signature": "438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2",
+      "../node_modules/@types/node/buffer.d.ts": {
+        "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1",
+        "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/common/collection.d.ts": {
-        "version": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8",
-        "signature": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8",
+      "../node_modules/@types/node/child_process.d.ts": {
+        "version": "89a3409a743c2a408d02bd68255a61d8416225b76c2c66d8e2e74dad3e00bc5d",
+        "signature": "89a3409a743c2a408d02bd68255a61d8416225b76c2c66d8e2e74dad3e00bc5d",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/common/date.d.ts": {
-        "version": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42",
-        "signature": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42",
+      "../node_modules/@types/node/cluster.d.ts": {
+        "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef",
+        "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/common/function.d.ts": {
-        "version": "c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe",
-        "signature": "c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe",
+      "../node_modules/@types/node/console.d.ts": {
+        "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096",
+        "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096",
+        "affectsGlobalScope": true
+      },
+      "../node_modules/@types/node/constants.d.ts": {
+        "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83",
+        "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/common/lang.d.ts": {
-        "version": "509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32",
-        "signature": "509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32",
+      "../node_modules/@types/node/crypto.d.ts": {
+        "version": "64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d",
+        "signature": "64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/common/math.d.ts": {
-        "version": "9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb",
-        "signature": "9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb",
+      "../node_modules/@types/node/dgram.d.ts": {
+        "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed",
+        "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/common/number.d.ts": {
-        "version": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a",
-        "signature": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a",
+      "../node_modules/@types/node/dns.d.ts": {
+        "version": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317",
+        "signature": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/common/object.d.ts": {
-        "version": "c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793",
-        "signature": "c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793",
+      "../node_modules/@types/node/domain.d.ts": {
+        "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70",
+        "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70",
+        "affectsGlobalScope": true
+      },
+      "../node_modules/@types/node/events.d.ts": {
+        "version": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb",
+        "signature": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb",
+        "affectsGlobalScope": true
+      },
+      "../node_modules/@types/node/fs.d.ts": {
+        "version": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576",
+        "signature": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/common/seq.d.ts": {
-        "version": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd",
-        "signature": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd",
+      "../node_modules/@types/node/fs/promises.d.ts": {
+        "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10",
+        "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/common/string.d.ts": {
-        "version": "4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a",
-        "signature": "4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a",
+      "../node_modules/@types/node/http.d.ts": {
+        "version": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7",
+        "signature": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/common/util.d.ts": {
-        "version": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5",
-        "signature": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5",
+      "../node_modules/@types/node/http2.d.ts": {
+        "version": "4c260129d649d69f0608cd123e7016e61364b553a5ca2de9b66b0398594959cf",
+        "signature": "4c260129d649d69f0608cd123e7016e61364b553a5ca2de9b66b0398594959cf",
         "affectsGlobalScope": false
       },
-      "./node_modules/@types/lodash/index.d.ts": {
-        "version": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8",
-        "signature": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8",
+      "../node_modules/@types/node/https.d.ts": {
+        "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba",
+        "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/inspector.d.ts": {
+        "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466",
+        "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/module.d.ts": {
+        "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340",
+        "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/net.d.ts": {
+        "version": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657",
+        "signature": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/os.d.ts": {
+        "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc",
+        "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/path.d.ts": {
+        "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca",
+        "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/perf_hooks.d.ts": {
+        "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f",
+        "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/process.d.ts": {
+        "version": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e",
+        "signature": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e",
+        "affectsGlobalScope": true
+      },
+      "../node_modules/@types/node/punycode.d.ts": {
+        "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8",
+        "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/querystring.d.ts": {
+        "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3",
+        "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/readline.d.ts": {
+        "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da",
+        "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/repl.d.ts": {
+        "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71",
+        "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/stream.d.ts": {
+        "version": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25",
+        "signature": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/string_decoder.d.ts": {
+        "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa",
+        "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/timers.d.ts": {
+        "version": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9",
+        "signature": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/tls.d.ts": {
+        "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3",
+        "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/trace_events.d.ts": {
+        "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a",
+        "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/tty.d.ts": {
+        "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837",
+        "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/url.d.ts": {
+        "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9",
+        "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/util.d.ts": {
+        "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7",
+        "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/v8.d.ts": {
+        "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14",
+        "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/vm.d.ts": {
+        "version": "66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff",
+        "signature": "66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/worker_threads.d.ts": {
+        "version": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877",
+        "signature": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/zlib.d.ts": {
+        "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977",
+        "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/ts3.4/base.d.ts": {
+        "version": "d44028ae0127eb3e9fcfa5f55a8b81d64775ce15aca1020fe25c511bbb055834",
+        "signature": "d44028ae0127eb3e9fcfa5f55a8b81d64775ce15aca1020fe25c511bbb055834",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/globals.global.d.ts": {
+        "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1",
+        "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1",
         "affectsGlobalScope": true
       },
+      "../node_modules/@types/node/wasi.d.ts": {
+        "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf",
+        "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/ts3.6/base.d.ts": {
+        "version": "ad1ae5ae98eceb9af99061e83e867b9897d267aebc8f3b938c9424deabadf4bb",
+        "signature": "ad1ae5ae98eceb9af99061e83e867b9897d267aebc8f3b938c9424deabadf4bb",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/assert.d.ts": {
+        "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e",
+        "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/base.d.ts": {
+        "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b",
+        "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b",
+        "affectsGlobalScope": false
+      },
+      "../node_modules/@types/node/index.d.ts": {
+        "version": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f",
+        "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f",
+        "affectsGlobalScope": false
+      },
       "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": {
         "version": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba",
         "signature": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba",
@@ -436,274 +611,154 @@
         "signature": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617",
         "affectsGlobalScope": false
       },
-      "./node_modules/vscode-languageserver/lib/common/api.d.ts": {
-        "version": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081",
-        "signature": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081",
-        "affectsGlobalScope": false
-      },
-      "./src/ansibleConfig.ts": {
-        "version": "9005f621fe61966539cda57f2af16e814c05bab3ecf7c68c3e3dcbc2f1593678",
-        "signature": "c42f1825b97bf1b2b8debd53aeb3e0c59079f02bf097fd146d4f1cd5e9b0f579",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts": {
-        "version": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538",
-        "signature": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/yaml/types.d.ts": {
-        "version": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24",
-        "signature": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/yaml/util.d.ts": {
-        "version": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d",
-        "signature": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/yaml/parse-cst.d.ts": {
-        "version": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd",
-        "signature": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/yaml/index.d.ts": {
-        "version": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49",
-        "signature": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/globals.d.ts": {
-        "version": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476",
-        "signature": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/async_hooks.d.ts": {
-        "version": "7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641",
-        "signature": "7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/buffer.d.ts": {
-        "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1",
-        "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/child_process.d.ts": {
-        "version": "89a3409a743c2a408d02bd68255a61d8416225b76c2c66d8e2e74dad3e00bc5d",
-        "signature": "89a3409a743c2a408d02bd68255a61d8416225b76c2c66d8e2e74dad3e00bc5d",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/cluster.d.ts": {
-        "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef",
-        "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/console.d.ts": {
-        "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096",
-        "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/constants.d.ts": {
-        "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83",
-        "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/crypto.d.ts": {
-        "version": "64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d",
-        "signature": "64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/dgram.d.ts": {
-        "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed",
-        "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/dns.d.ts": {
-        "version": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317",
-        "signature": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/domain.d.ts": {
-        "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70",
-        "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/events.d.ts": {
-        "version": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb",
-        "signature": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/fs.d.ts": {
-        "version": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576",
-        "signature": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/fs/promises.d.ts": {
-        "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10",
-        "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/http.d.ts": {
-        "version": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7",
-        "signature": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/http2.d.ts": {
-        "version": "4c260129d649d69f0608cd123e7016e61364b553a5ca2de9b66b0398594959cf",
-        "signature": "4c260129d649d69f0608cd123e7016e61364b553a5ca2de9b66b0398594959cf",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/https.d.ts": {
-        "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba",
-        "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/inspector.d.ts": {
-        "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466",
-        "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466",
+      "./node_modules/vscode-languageserver/lib/node/files.d.ts": {
+        "version": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5",
+        "signature": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/module.d.ts": {
-        "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340",
-        "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340",
+      "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": {
+        "version": "ddccf0a48338cac642e93bfdb563494dad6e05b70ef0e6e3605a454db88ca57e",
+        "signature": "ddccf0a48338cac642e93bfdb563494dad6e05b70ef0e6e3605a454db88ca57e",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/net.d.ts": {
-        "version": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657",
-        "signature": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657",
+      "./node_modules/vscode-jsonrpc/node.d.ts": {
+        "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
+        "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/os.d.ts": {
-        "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc",
-        "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc",
+      "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": {
+        "version": "d789022bf705385490fe89811bc7850225c207f37dd706ada2509eb1d8f31f12",
+        "signature": "d789022bf705385490fe89811bc7850225c207f37dd706ada2509eb1d8f31f12",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/path.d.ts": {
-        "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca",
-        "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca",
+      "./node_modules/vscode-languageserver-protocol/node.d.ts": {
+        "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
+        "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/perf_hooks.d.ts": {
-        "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f",
-        "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f",
+      "./node_modules/vscode-languageserver/lib/common/api.d.ts": {
+        "version": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081",
+        "signature": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/process.d.ts": {
-        "version": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e",
-        "signature": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/punycode.d.ts": {
-        "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8",
-        "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8",
+      "./node_modules/vscode-languageserver/lib/node/main.d.ts": {
+        "version": "cf1532b11d5ec78f63dc4d0c985353b281b4a09e91d35f63fb9aba42e36674ab",
+        "signature": "cf1532b11d5ec78f63dc4d0c985353b281b4a09e91d35f63fb9aba42e36674ab",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/querystring.d.ts": {
-        "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3",
-        "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3",
+      "./node_modules/vscode-languageserver/node.d.ts": {
+        "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
+        "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/readline.d.ts": {
-        "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da",
-        "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da",
+      "./node_modules/@types/ini/index.d.ts": {
+        "version": "3cc26d1f94c768ae2896d3900ffa268e0657a332b399e94c1fb52da1f9e07625",
+        "signature": "3cc26d1f94c768ae2896d3900ffa268e0657a332b399e94c1fb52da1f9e07625",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/repl.d.ts": {
-        "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71",
-        "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71",
+      "./node_modules/@types/lodash/common/common.d.ts": {
+        "version": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc",
+        "signature": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/stream.d.ts": {
-        "version": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25",
-        "signature": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25",
+      "./node_modules/@types/lodash/common/array.d.ts": {
+        "version": "438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2",
+        "signature": "438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/string_decoder.d.ts": {
-        "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa",
-        "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa",
+      "./node_modules/@types/lodash/common/collection.d.ts": {
+        "version": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8",
+        "signature": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/timers.d.ts": {
-        "version": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9",
-        "signature": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9",
+      "./node_modules/@types/lodash/common/date.d.ts": {
+        "version": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42",
+        "signature": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/tls.d.ts": {
-        "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3",
-        "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3",
+      "./node_modules/@types/lodash/common/function.d.ts": {
+        "version": "c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe",
+        "signature": "c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/trace_events.d.ts": {
-        "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a",
-        "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a",
+      "./node_modules/@types/lodash/common/lang.d.ts": {
+        "version": "509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32",
+        "signature": "509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/tty.d.ts": {
-        "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837",
-        "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837",
+      "./node_modules/@types/lodash/common/math.d.ts": {
+        "version": "9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb",
+        "signature": "9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/url.d.ts": {
-        "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9",
-        "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9",
+      "./node_modules/@types/lodash/common/number.d.ts": {
+        "version": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a",
+        "signature": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/util.d.ts": {
-        "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7",
-        "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7",
+      "./node_modules/@types/lodash/common/object.d.ts": {
+        "version": "c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793",
+        "signature": "c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/v8.d.ts": {
-        "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14",
-        "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14",
+      "./node_modules/@types/lodash/common/seq.d.ts": {
+        "version": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd",
+        "signature": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/vm.d.ts": {
-        "version": "66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff",
-        "signature": "66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff",
+      "./node_modules/@types/lodash/common/string.d.ts": {
+        "version": "4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a",
+        "signature": "4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/worker_threads.d.ts": {
-        "version": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877",
-        "signature": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877",
+      "./node_modules/@types/lodash/common/util.d.ts": {
+        "version": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5",
+        "signature": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/zlib.d.ts": {
-        "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977",
-        "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977",
+      "./node_modules/@types/lodash/index.d.ts": {
+        "version": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8",
+        "signature": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8",
+        "affectsGlobalScope": true
+      },
+      "./src/services/ansibleConfig.ts": {
+        "version": "97cbe91e6fa2739882a4851a56df173224e22dcb65f37ca636c7cab51d29e66f",
+        "signature": "37ebf09ca9068ea5f44c74277720e0d7e834a3a92aaa4d687ecc8a027ca17da9",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/ts3.4/base.d.ts": {
-        "version": "d44028ae0127eb3e9fcfa5f55a8b81d64775ce15aca1020fe25c511bbb055834",
-        "signature": "d44028ae0127eb3e9fcfa5f55a8b81d64775ce15aca1020fe25c511bbb055834",
+      "./node_modules/yaml/types.d.ts": {
+        "version": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24",
+        "signature": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/globals.global.d.ts": {
-        "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1",
-        "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1",
-        "affectsGlobalScope": true
+      "./node_modules/yaml/util.d.ts": {
+        "version": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d",
+        "signature": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d",
+        "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/wasi.d.ts": {
-        "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf",
-        "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf",
+      "./node_modules/yaml/parse-cst.d.ts": {
+        "version": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd",
+        "signature": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/ts3.6/base.d.ts": {
-        "version": "ad1ae5ae98eceb9af99061e83e867b9897d267aebc8f3b938c9424deabadf4bb",
-        "signature": "ad1ae5ae98eceb9af99061e83e867b9897d267aebc8f3b938c9424deabadf4bb",
+      "./node_modules/yaml/index.d.ts": {
+        "version": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49",
+        "signature": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/assert.d.ts": {
-        "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e",
-        "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e",
+      "./src/interfaces/documentMeta.ts": {
+        "version": "65c83d46301e0ab9ed2c4b03620c5240c36a60241c2e1578ac1a4236e5726d7a",
+        "signature": "cd260003e2b3cc7539f419be3c2d3fbd17dfdca742490c9377703703b56bc199",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/base.d.ts": {
-        "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b",
-        "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b",
+      "./src/interfaces/context.ts": {
+        "version": "da9be63575d4f645112c8773f1575992ec85bbff3ae1f35515256177d5bb1298",
+        "signature": "76bab451bfa703ca94be5f6daf7a97f44d9ea82bb1f164113b728554cb3fd71e",
         "affectsGlobalScope": false
       },
-      "../node_modules/@types/node/index.d.ts": {
-        "version": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f",
-        "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f",
+      "./src/utils/misc.ts": {
+        "version": "1d8b6c5802b70a95aca8dd51dee80f3660ef81447a63f8288d126e26c306e625",
+        "signature": "f7f8d7896e37fb0e062ce20fac8bcfbaad1787b2125c0b3cf682c9d4ed360449",
         "affectsGlobalScope": false
       },
       "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts": {
@@ -811,89 +866,39 @@
         "signature": "a93850a7116629f9ff482871d44c1b348aa708cbb3be3beece2bc1be2ac01b47",
         "affectsGlobalScope": false
       },
-      "./src/docsParser.ts": {
-        "version": "92d8da99d2d08c61837310f4e88f6532bb5bb0479dc175dc5c43e442b434fc7c",
+      "./src/services/docsParser.ts": {
+        "version": "c8af76d170c60bc109db2dfe6bfb89aa0b43a46d2fb8fa479d527c539004f7a7",
         "signature": "79ec5df879e0f47c4c00d7084dab37a950f43747ac7548a41c448e77816d9c0a",
         "affectsGlobalScope": false
       },
-      "./src/documentMeta.ts": {
-        "version": "0762b71d84f64011f2d1e49129d8add6c1828fd6af782b19a1507586f4017db8",
-        "signature": "deab2fffbcebd2149aa3a6d98cf2bb25d4ff9bcadf94a5cfe49851a8c07fb964",
-        "affectsGlobalScope": false
-      },
-      "./src/context.ts": {
-        "version": "053e75936c7e88b1e36d7cda7f0585651e0dc649118eb80f9e395300ab5b89cd",
-        "signature": "d0c0218c22eeb33db1e46ab9f1a3be2d0baf14a50932b080c84d5e6ea79e0d35",
-        "affectsGlobalScope": false
-      },
-      "./src/utils.ts": {
-        "version": "659aff0d1a39c82424b520e9092193e5855d4cfc2baee1e50f3261342dd6f02e",
-        "signature": "d70c68c6d98a041c0f8fab8d01dfac424a280aa5c52b25645c17a42e5ec23387",
-        "affectsGlobalScope": false
-      },
-      "./src/docsLibrary.ts": {
-        "version": "5acc6b6a2fec19dc4aa12ff54b0b4c8b6bf34b0a672fcfe6f9adc4395190da65",
-        "signature": "541240e117c34af937c82f724d56ccd48dc61fa400f6ca21da3ef356278c8aed",
-        "affectsGlobalScope": false
-      },
-      "./src/docsFormatter.ts": {
-        "version": "6ee3e24700cc4890ab57bee2c148c75fd3231c4e82d1a63819bdcd13404b4d2d",
-        "signature": "e48a74c99ea25386a403faaa32831b96cc4ad663574974900cb7b51e039d12be",
+      "./src/services/docsLibrary.ts": {
+        "version": "ac54e886d54ca01673893efe18e2cc762295490c72a87d1c6a3abc9afd9ee889",
+        "signature": "a81374c51b5a9d9c71ac59627261aed94fecb22cc270e89d4be663fce5a56d98",
         "affectsGlobalScope": false
       },
-      "./src/completionProvider.ts": {
-        "version": "bd159cecda03443fdbba6274e7058dfe2da1b4fe0a82e841fa1b6ed9501a3415",
-        "signature": "9a36570ce874b967550b3698bf4df92f071e9a0e174bf03f49a37cae6b26ef9d",
+      "./src/utils/docsFormatter.ts": {
+        "version": "b7c19dca9097453c1468dcf5b407792e1444ebe49be732821c0f0ec5d032ef08",
+        "signature": "bfaa86d7710e8c00f4de05c8e52eb4423fbdb7e0eee94b4566d6f303e1c56258",
         "affectsGlobalScope": false
       },
-      "./src/definitionProvider.ts": {
-        "version": "2991723921466a63786bb3feef730c64a9bf9fe8636cc20fbd0ff920c99f61f0",
-        "signature": "fec2bb71409e9035906790291f3bb7e9a3f06a26496454c9768891e8d73811fb",
+      "./src/utils/yaml.ts": {
+        "version": "e7229bad0d8fa268dc41db7678f17a962572e2b89ec3133d8ed54d9a7087be48",
+        "signature": "2fbbddee69fe9b287bdb5a20cf755bcda34c3cf8414ef341556120999a46a185",
         "affectsGlobalScope": false
       },
-      "./src/hoverProvider.ts": {
-        "version": "92dc32cf1b70f68dca438d438ac9b378ceabe86c6e8f033ca133322cb31b4e59",
-        "signature": "a988a2624e664f9098da756cb24a8c496bb6d7ac89f9c31eef4ba00d10e6dd60",
+      "./src/providers/completionProvider.ts": {
+        "version": "e97cad1c96a6efef88279a477a64231c55406b13197e4822d976f495398247d4",
+        "signature": "4f1dd15211c12749867e92b42be33b473fce62af8e1d5785d2003d2475b405c9",
         "affectsGlobalScope": false
       },
-      "./node_modules/vscode-languageserver/typings/thenable.d.ts": {
-        "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d",
-        "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d",
-        "affectsGlobalScope": true
-      },
-      "./node_modules/vscode-languageserver/lib/node/files.d.ts": {
-        "version": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5",
-        "signature": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": {
-        "version": "ddccf0a48338cac642e93bfdb563494dad6e05b70ef0e6e3605a454db88ca57e",
-        "signature": "ddccf0a48338cac642e93bfdb563494dad6e05b70ef0e6e3605a454db88ca57e",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/node.d.ts": {
-        "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": {
-        "version": "d789022bf705385490fe89811bc7850225c207f37dd706ada2509eb1d8f31f12",
-        "signature": "d789022bf705385490fe89811bc7850225c207f37dd706ada2509eb1d8f31f12",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/node.d.ts": {
-        "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/node/main.d.ts": {
-        "version": "cf1532b11d5ec78f63dc4d0c985353b281b4a09e91d35f63fb9aba42e36674ab",
-        "signature": "cf1532b11d5ec78f63dc4d0c985353b281b4a09e91d35f63fb9aba42e36674ab",
+      "./src/providers/definitionProvider.ts": {
+        "version": "c5324bd7383f1700a3b0807aa01f52a99508629dbfd109eb61a8a392b314b69d",
+        "signature": "1565a5530090b634c238a8e11c0622dfaa1914892166b3380d66b6af2ea11b2a",
         "affectsGlobalScope": false
       },
-      "./node_modules/vscode-languageserver/node.d.ts": {
-        "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
+      "./src/providers/hoverProvider.ts": {
+        "version": "e9020a7f8103b766976d8cdfb6a60847d3cf5a1bbc6bff97b185b60481eae770",
+        "signature": "25256b5067eaf84637e6dd0e282dd089c82a55eeee1bf060d2b14878ded5b86e",
         "affectsGlobalScope": false
       },
       "./node_modules/@flatten-js/interval-tree/index.d.ts": {
@@ -901,13 +906,13 @@
         "signature": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59",
         "affectsGlobalScope": false
       },
-      "./src/validationProvider.ts": {
-        "version": "9dc725a7a92587836069827bf7d398499ad3ba9a68845f20ae69bb34f5c51bbc",
+      "./src/providers/validationProvider.ts": {
+        "version": "dc6fc5c1c8bd9a825666fb94a90782729be955a0357693a233684f9f33e90112",
         "signature": "f3360d2bdd3e9199b55bca984df20071810c51097a8a96fb0ee33b6a1abb0b63",
         "affectsGlobalScope": false
       },
       "./src/server.ts": {
-        "version": "67a891e53bf29aa07de58ad332a1010eaa7b6a326e5ade68420b67ad3ab6f815",
+        "version": "41577690d9664d2f2a3fd48d9f90489ca5f68eb258d2374b9dd4c3cd1cad5244",
         "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",
         "affectsGlobalScope": false
       },
@@ -916,8 +921,8 @@
         "signature": "267813ae499a9c070ea61bca2d235e31e785181d967e4461719cbcc78a35abfe",
         "affectsGlobalScope": true
       },
-      "./src/test/utils.test.ts": {
-        "version": "42e6d94bc31f32203bae378b204c36e8b0915ffb524b6af1214e03eda31fdd94",
+      "./src/test/utils/yaml.test.ts": {
+        "version": "40badc2c4283c43ecfba4d3248db9618f6f1755eea77f52eca6f5a6125071a2d",
         "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",
         "affectsGlobalScope": false
       },
@@ -1764,109 +1769,110 @@
         "./node_modules/yaml/parse-cst.d.ts",
         "./node_modules/yaml/types.d.ts"
       ],
-      "./src/ansibleConfig.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/path.d.ts",
-        "../node_modules/@types/node/util.d.ts",
-        "./node_modules/@types/ini/index.d.ts",
-        "./node_modules/@types/lodash/index.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts"
+      "./src/interfaces/context.ts": [
+        "./src/interfaces/documentMeta.ts",
+        "./src/services/ansibleConfig.ts"
       ],
-      "./src/completionProvider.ts": [
+      "./src/providers/completionProvider.ts": [
         "./node_modules/@types/lodash/index.d.ts",
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
         "./node_modules/vscode-languageserver/lib/common/api.d.ts",
         "./node_modules/yaml/index.d.ts",
         "./node_modules/yaml/types.d.ts",
-        "./src/docsFormatter.ts",
-        "./src/docsLibrary.ts",
-        "./src/utils.ts"
+        "./src/services/docsLibrary.ts",
+        "./src/utils/docsFormatter.ts",
+        "./src/utils/yaml.ts"
       ],
-      "./src/context.ts": [
-        "./src/ansibleConfig.ts",
-        "./src/documentMeta.ts"
+      "./src/providers/definitionProvider.ts": [
+        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
+        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
+        "./node_modules/yaml/index.d.ts",
+        "./node_modules/yaml/types.d.ts",
+        "./src/services/docsLibrary.ts",
+        "./src/utils/misc.ts",
+        "./src/utils/yaml.ts"
       ],
-      "./src/definitionProvider.ts": [
+      "./src/providers/hoverProvider.ts": [
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
         "./node_modules/vscode-languageserver/lib/common/api.d.ts",
         "./node_modules/yaml/index.d.ts",
         "./node_modules/yaml/types.d.ts",
-        "./src/docsLibrary.ts",
-        "./src/utils.ts"
+        "./src/services/docsLibrary.ts",
+        "./src/utils/docsFormatter.ts",
+        "./src/utils/misc.ts",
+        "./src/utils/yaml.ts"
       ],
-      "./src/docsFormatter.ts": [
-        "../node_modules/@types/node/util.d.ts",
+      "./src/providers/validationProvider.ts": [
+        "./node_modules/@flatten-js/interval-tree/index.d.ts",
+        "./node_modules/@types/lodash/index.d.ts",
+        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
         "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./src/docsLibrary.ts"
+        "./node_modules/yaml/index.d.ts"
+      ],
+      "./src/server.ts": [
+        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
+        "./node_modules/vscode-languageserver/node.d.ts",
+        "./src/interfaces/context.ts",
+        "./src/interfaces/documentMeta.ts",
+        "./src/providers/completionProvider.ts",
+        "./src/providers/definitionProvider.ts",
+        "./src/providers/hoverProvider.ts",
+        "./src/providers/validationProvider.ts",
+        "./src/services/ansibleConfig.ts",
+        "./src/services/docsLibrary.ts",
+        "./src/utils/misc.ts"
+      ],
+      "./src/services/ansibleConfig.ts": [
+        "../node_modules/@types/node/child_process.d.ts",
+        "../node_modules/@types/node/path.d.ts",
+        "./node_modules/@types/ini/index.d.ts",
+        "./node_modules/@types/lodash/index.d.ts",
+        "./node_modules/vscode-languageserver/lib/common/api.d.ts"
       ],
-      "./src/docsLibrary.ts": [
+      "./src/services/docsLibrary.ts": [
         "./node_modules/@types/lodash/index.d.ts",
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
         "./node_modules/vscode-languageserver/lib/common/api.d.ts",
         "./node_modules/yaml/util.d.ts",
-        "./src/context.ts",
-        "./src/docsParser.ts",
-        "./src/utils.ts"
+        "./src/interfaces/context.ts",
+        "./src/services/docsParser.ts",
+        "./src/utils/misc.ts"
       ],
-      "./src/docsParser.ts": [
+      "./src/services/docsParser.ts": [
         "../node_modules/@types/node/fs.d.ts",
         "../node_modules/@types/node/path.d.ts",
         "./node_modules/globby/index.d.ts",
         "./node_modules/yaml/index.d.ts",
         "./node_modules/yaml/util.d.ts",
-        "./src/docsLibrary.ts"
-      ],
-      "./src/hoverProvider.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/types.d.ts",
-        "./src/docsFormatter.ts",
-        "./src/docsLibrary.ts",
-        "./src/utils.ts"
+        "./src/services/docsLibrary.ts"
       ],
-      "./src/server.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/node.d.ts",
-        "./src/ansibleConfig.ts",
-        "./src/completionProvider.ts",
-        "./src/context.ts",
-        "./src/definitionProvider.ts",
-        "./src/docsLibrary.ts",
-        "./src/documentMeta.ts",
-        "./src/hoverProvider.ts",
-        "./src/utils.ts",
-        "./src/validationProvider.ts"
-      ],
-      "./src/test/utils.test.ts": [
-        "../node_modules/@types/node/assert.d.ts",
+      "./src/test/utils/yaml.test.ts": [
         "../node_modules/@types/node/fs.d.ts",
         "../node_modules/@types/node/path.d.ts",
         "./node_modules/@types/chai/index.d.ts",
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
         "./node_modules/yaml/index.d.ts",
         "./node_modules/yaml/types.d.ts",
-        "./src/utils.ts"
+        "./src/utils/yaml.ts"
+      ],
+      "./src/utils/docsFormatter.ts": [
+        "../node_modules/@types/node/util.d.ts",
+        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
+        "./src/services/docsLibrary.ts"
       ],
-      "./src/utils.ts": [
+      "./src/utils/misc.ts": [
         "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/os.d.ts",
-        "../node_modules/@types/node/path.d.ts",
         "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/lodash/index.d.ts",
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
         "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts",
         "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/types.d.ts",
-        "./src/documentMeta.ts"
+        "./src/interfaces/documentMeta.ts"
       ],
-      "./src/validationProvider.ts": [
-        "./node_modules/@flatten-js/interval-tree/index.d.ts",
+      "./src/utils/yaml.ts": [
         "./node_modules/@types/lodash/index.d.ts",
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./node_modules/yaml/index.d.ts"
+        "./node_modules/yaml/index.d.ts",
+        "./node_modules/yaml/types.d.ts"
       ]
     },
     "exportedModulesMap": {
@@ -2656,52 +2662,55 @@
         "./node_modules/yaml/parse-cst.d.ts",
         "./node_modules/yaml/types.d.ts"
       ],
-      "./src/ansibleConfig.ts": [
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts"
+      "./src/interfaces/context.ts": [
+        "./src/interfaces/documentMeta.ts",
+        "./src/services/ansibleConfig.ts"
       ],
-      "./src/completionProvider.ts": [
+      "./src/providers/completionProvider.ts": [
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
         "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./src/docsLibrary.ts"
-      ],
-      "./src/context.ts": [
-        "./src/ansibleConfig.ts",
-        "./src/documentMeta.ts"
+        "./src/services/docsLibrary.ts"
       ],
-      "./src/definitionProvider.ts": [
+      "./src/providers/definitionProvider.ts": [
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
         "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./src/docsLibrary.ts"
+        "./src/services/docsLibrary.ts"
       ],
-      "./src/docsFormatter.ts": [
+      "./src/providers/hoverProvider.ts": [
+        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
         "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./src/docsLibrary.ts"
+        "./src/services/docsLibrary.ts"
+      ],
+      "./src/providers/validationProvider.ts": [
+        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
+        "./node_modules/vscode-languageserver/lib/common/api.d.ts"
       ],
-      "./src/docsLibrary.ts": [
+      "./src/services/ansibleConfig.ts": [
+        "./node_modules/vscode-languageserver/lib/common/api.d.ts"
+      ],
+      "./src/services/docsLibrary.ts": [
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
         "./node_modules/vscode-languageserver/lib/common/api.d.ts",
         "./node_modules/yaml/util.d.ts",
-        "./src/context.ts"
+        "./src/interfaces/context.ts"
       ],
-      "./src/docsParser.ts": [
+      "./src/services/docsParser.ts": [
         "./node_modules/yaml/util.d.ts",
-        "./src/docsLibrary.ts"
+        "./src/services/docsLibrary.ts"
       ],
-      "./src/hoverProvider.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
+      "./src/utils/docsFormatter.ts": [
         "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./src/docsLibrary.ts"
+        "./src/services/docsLibrary.ts"
       ],
-      "./src/utils.ts": [
+      "./src/utils/misc.ts": [
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
         "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts",
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/types.d.ts",
-        "./src/documentMeta.ts"
+        "./src/interfaces/documentMeta.ts"
       ],
-      "./src/validationProvider.ts": [
+      "./src/utils/yaml.ts": [
         "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts"
+        "./node_modules/yaml/index.d.ts",
+        "./node_modules/yaml/types.d.ts"
       ]
     },
     "semanticDiagnosticsPerFile": [
@@ -2884,19 +2893,20 @@
       "./node_modules/yaml/parse-cst.d.ts",
       "./node_modules/yaml/types.d.ts",
       "./node_modules/yaml/util.d.ts",
-      "./src/ansibleConfig.ts",
-      "./src/completionProvider.ts",
-      "./src/context.ts",
-      "./src/definitionProvider.ts",
-      "./src/docsFormatter.ts",
-      "./src/docsLibrary.ts",
-      "./src/docsParser.ts",
-      "./src/documentMeta.ts",
-      "./src/hoverProvider.ts",
+      "./src/interfaces/context.ts",
+      "./src/interfaces/documentMeta.ts",
+      "./src/providers/completionProvider.ts",
+      "./src/providers/definitionProvider.ts",
+      "./src/providers/hoverProvider.ts",
+      "./src/providers/validationProvider.ts",
       "./src/server.ts",
-      "./src/test/utils.test.ts",
-      "./src/utils.ts",
-      "./src/validationProvider.ts"
+      "./src/services/ansibleConfig.ts",
+      "./src/services/docsLibrary.ts",
+      "./src/services/docsParser.ts",
+      "./src/test/utils/yaml.test.ts",
+      "./src/utils/docsFormatter.ts",
+      "./src/utils/misc.ts",
+      "./src/utils/yaml.ts"
     ]
   },
   "version": "4.1.5"

From 0b670775523887d7de626ef2c872b827117fb77f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Fri, 2 Apr 2021 08:58:21 +0200
Subject: [PATCH 030/558] Clean-up

---
 .gitignore                     |    1 +
 client/tsconfig.tsbuildinfo    | 3062 --------------------------------
 sample/sample.semanticLanguage |   19 -
 server/tsconfig.tsbuildinfo    | 2913 ------------------------------
 src/extension.ts               |  254 ---
 5 files changed, 1 insertion(+), 6248 deletions(-)
 delete mode 100644 client/tsconfig.tsbuildinfo
 delete mode 100644 sample/sample.semanticLanguage
 delete mode 100644 server/tsconfig.tsbuildinfo
 delete mode 100644 src/extension.ts

diff --git a/.gitignore b/.gitignore
index c223c3e79..1e2fb964c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
 node_modules
 *.vsix
 out
+tsconfig.tsbuildinfo
diff --git a/client/tsconfig.tsbuildinfo b/client/tsconfig.tsbuildinfo
deleted file mode 100644
index 94d22030c..000000000
--- a/client/tsconfig.tsbuildinfo
+++ /dev/null
@@ -1,3062 +0,0 @@
-{
-  "program": {
-    "fileInfos": {
-      "../node_modules/typescript/lib/lib.es5.d.ts": {
-        "version": "9622e8bd7cc72a7dab819a8011ecbf81d443638082e5cb99ecf2e75ff56ffc9d",
-        "signature": "9622e8bd7cc72a7dab819a8011ecbf81d443638082e5cb99ecf2e75ff56ffc9d",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.d.ts": {
-        "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6",
-        "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/typescript/lib/lib.es2016.d.ts": {
-        "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467",
-        "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/typescript/lib/lib.es2017.d.ts": {
-        "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9",
-        "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/typescript/lib/lib.es2018.d.ts": {
-        "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06",
-        "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/typescript/lib/lib.es2019.d.ts": {
-        "version": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84",
-        "signature": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/typescript/lib/lib.es2015.core.d.ts": {
-        "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17",
-        "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.collection.d.ts": {
-        "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c",
-        "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.generator.d.ts": {
-        "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a",
-        "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": {
-        "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a",
-        "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.promise.d.ts": {
-        "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c",
-        "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": {
-        "version": "7207e317a2cb07a177e7d963ab7b8c0e85dde7f9ddb50351f830239bf597569e",
-        "signature": "7207e317a2cb07a177e7d963ab7b8c0e85dde7f9ddb50351f830239bf597569e",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": {
-        "version": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d",
-        "signature": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": {
-        "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93",
-        "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": {
-        "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551",
-        "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": {
-        "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006",
-        "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2017.object.d.ts": {
-        "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a",
-        "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": {
-        "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98",
-        "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2017.string.d.ts": {
-        "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577",
-        "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2017.intl.d.ts": {
-        "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d",
-        "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": {
-        "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e",
-        "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": {
-        "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a",
-        "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": {
-        "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359",
-        "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2018.intl.d.ts": {
-        "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e",
-        "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2018.promise.d.ts": {
-        "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c",
-        "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": {
-        "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8",
-        "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2019.array.d.ts": {
-        "version": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951",
-        "signature": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2019.object.d.ts": {
-        "version": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de",
-        "signature": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2019.string.d.ts": {
-        "version": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1",
-        "signature": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2019.symbol.d.ts": {
-        "version": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993",
-        "signature": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": {
-        "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09",
-        "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.esnext.intl.d.ts": {
-        "version": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd",
-        "signature": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd",
-        "affectsGlobalScope": true
-      },
-      "./node_modules/@types/vscode/index.d.ts": {
-        "version": "0d2ae25abaa1163188d256f0c438a274459099c30c44aa3be144c9c1232f4081",
-        "signature": "0d2ae25abaa1163188d256f0c438a274459099c30c44aa3be144c9c1232f4081",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/globals.d.ts": {
-        "version": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476",
-        "signature": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/async_hooks.d.ts": {
-        "version": "7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641",
-        "signature": "7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/buffer.d.ts": {
-        "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1",
-        "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/child_process.d.ts": {
-        "version": "89a3409a743c2a408d02bd68255a61d8416225b76c2c66d8e2e74dad3e00bc5d",
-        "signature": "89a3409a743c2a408d02bd68255a61d8416225b76c2c66d8e2e74dad3e00bc5d",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/cluster.d.ts": {
-        "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef",
-        "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/console.d.ts": {
-        "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096",
-        "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/constants.d.ts": {
-        "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83",
-        "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/crypto.d.ts": {
-        "version": "64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d",
-        "signature": "64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/dgram.d.ts": {
-        "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed",
-        "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/dns.d.ts": {
-        "version": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317",
-        "signature": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/domain.d.ts": {
-        "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70",
-        "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/events.d.ts": {
-        "version": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb",
-        "signature": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/fs.d.ts": {
-        "version": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576",
-        "signature": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/fs/promises.d.ts": {
-        "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10",
-        "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/http.d.ts": {
-        "version": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7",
-        "signature": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/http2.d.ts": {
-        "version": "4c260129d649d69f0608cd123e7016e61364b553a5ca2de9b66b0398594959cf",
-        "signature": "4c260129d649d69f0608cd123e7016e61364b553a5ca2de9b66b0398594959cf",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/https.d.ts": {
-        "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba",
-        "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/inspector.d.ts": {
-        "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466",
-        "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/module.d.ts": {
-        "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340",
-        "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/net.d.ts": {
-        "version": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657",
-        "signature": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/os.d.ts": {
-        "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc",
-        "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/path.d.ts": {
-        "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca",
-        "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/perf_hooks.d.ts": {
-        "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f",
-        "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/process.d.ts": {
-        "version": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e",
-        "signature": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/punycode.d.ts": {
-        "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8",
-        "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/querystring.d.ts": {
-        "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3",
-        "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/readline.d.ts": {
-        "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da",
-        "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/repl.d.ts": {
-        "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71",
-        "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/stream.d.ts": {
-        "version": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25",
-        "signature": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/string_decoder.d.ts": {
-        "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa",
-        "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/timers.d.ts": {
-        "version": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9",
-        "signature": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/tls.d.ts": {
-        "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3",
-        "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/trace_events.d.ts": {
-        "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a",
-        "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/tty.d.ts": {
-        "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837",
-        "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/url.d.ts": {
-        "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9",
-        "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/util.d.ts": {
-        "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7",
-        "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/v8.d.ts": {
-        "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14",
-        "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/vm.d.ts": {
-        "version": "66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff",
-        "signature": "66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/worker_threads.d.ts": {
-        "version": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877",
-        "signature": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/zlib.d.ts": {
-        "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977",
-        "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/ts3.4/base.d.ts": {
-        "version": "d44028ae0127eb3e9fcfa5f55a8b81d64775ce15aca1020fe25c511bbb055834",
-        "signature": "d44028ae0127eb3e9fcfa5f55a8b81d64775ce15aca1020fe25c511bbb055834",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/globals.global.d.ts": {
-        "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1",
-        "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/wasi.d.ts": {
-        "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf",
-        "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/ts3.6/base.d.ts": {
-        "version": "ad1ae5ae98eceb9af99061e83e867b9897d267aebc8f3b938c9424deabadf4bb",
-        "signature": "ad1ae5ae98eceb9af99061e83e867b9897d267aebc8f3b938c9424deabadf4bb",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/assert.d.ts": {
-        "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e",
-        "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/base.d.ts": {
-        "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b",
-        "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/index.d.ts": {
-        "version": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f",
-        "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": {
-        "version": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba",
-        "signature": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/typings/thenable.d.ts": {
-        "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d",
-        "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d",
-        "affectsGlobalScope": true
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts": {
-        "version": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f",
-        "signature": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts": {
-        "version": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1",
-        "signature": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": {
-        "version": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383",
-        "signature": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": {
-        "version": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576",
-        "signature": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": {
-        "version": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e",
-        "signature": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": {
-        "version": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6",
-        "signature": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": {
-        "version": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8",
-        "signature": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": {
-        "version": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636",
-        "signature": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": {
-        "version": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91",
-        "signature": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": {
-        "version": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0",
-        "signature": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": {
-        "version": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656",
-        "signature": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": {
-        "version": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc",
-        "signature": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": {
-        "version": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d",
-        "signature": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": {
-        "version": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90",
-        "signature": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": {
-        "version": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec",
-        "signature": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": {
-        "version": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676",
-        "signature": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": {
-        "version": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c",
-        "signature": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": {
-        "version": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1",
-        "signature": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": {
-        "version": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2",
-        "signature": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": {
-        "version": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656",
-        "signature": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": {
-        "version": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6",
-        "signature": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": {
-        "version": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0",
-        "signature": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": {
-        "version": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0",
-        "signature": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": {
-        "version": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc",
-        "signature": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": {
-        "version": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323",
-        "signature": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": {
-        "version": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533",
-        "signature": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": {
-        "version": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd",
-        "signature": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": {
-        "version": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7",
-        "signature": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": {
-        "version": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184",
-        "signature": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/colorProvider.d.ts": {
-        "version": "0e92ff071bc64da789f3219daf517a377414b37b5e109b7d4db263daa864d789",
-        "signature": "0e92ff071bc64da789f3219daf517a377414b37b5e109b7d4db263daa864d789",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/implementation.d.ts": {
-        "version": "9a82c78b7cd0b92985d9e66dbac9fafcf5904a1e482a43507f98694d7fb9391e",
-        "signature": "9a82c78b7cd0b92985d9e66dbac9fafcf5904a1e482a43507f98694d7fb9391e",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts": {
-        "version": "55d47ad2ee85e2d257cc4518bd4fe6b5a2e29e6b5b76441474eaa66f97714f07",
-        "signature": "55d47ad2ee85e2d257cc4518bd4fe6b5a2e29e6b5b76441474eaa66f97714f07",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/configuration.d.ts": {
-        "version": "dded3cbf269b0200f558ec6a5286621d9eccea63c0275cc9e3b60b7b716b51b0",
-        "signature": "dded3cbf269b0200f558ec6a5286621d9eccea63c0275cc9e3b60b7b716b51b0",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/workspaceFolders.d.ts": {
-        "version": "f1b86db6e3f40b07b911ba0f1b20d566ab5f0182774d50fc3e62bf655b3b3e57",
-        "signature": "f1b86db6e3f40b07b911ba0f1b20d566ab5f0182774d50fc3e62bf655b3b3e57",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/foldingRange.d.ts": {
-        "version": "5263e3fedade113a9c85e153c9f3a0408dbf38282385589a1a0153a9fe3ebb0d",
-        "signature": "5263e3fedade113a9c85e153c9f3a0408dbf38282385589a1a0153a9fe3ebb0d",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/declaration.d.ts": {
-        "version": "d01f01508ae58d616976c2c29a84ff3caac8cf0f44c38918fc365fd5f7c50e32",
-        "signature": "d01f01508ae58d616976c2c29a84ff3caac8cf0f44c38918fc365fd5f7c50e32",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/selectionRange.d.ts": {
-        "version": "08496a1fad0e2cd9d884b9076cdb5c4d2efbe63c0ad1d8fdbfdb6fe8ad157c32",
-        "signature": "08496a1fad0e2cd9d884b9076cdb5c4d2efbe63c0ad1d8fdbfdb6fe8ad157c32",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts": {
-        "version": "df40de3af1c5bd3e4befadbbe981752ada6d38340b9d29f5fb083aedff7a7c13",
-        "signature": "df40de3af1c5bd3e4befadbbe981752ada6d38340b9d29f5fb083aedff7a7c13",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts": {
-        "version": "6f8d7d04d2c7a24b1a2defb3faaf66c1323ca7473ff09bae7131b4c54ea97744",
-        "signature": "6f8d7d04d2c7a24b1a2defb3faaf66c1323ca7473ff09bae7131b4c54ea97744",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/fileOperations.d.ts": {
-        "version": "0e96615c5ed8377938951c95c5062d7da63b7ff71ef5f57831b621caaf78df71",
-        "signature": "0e96615c5ed8377938951c95c5062d7da63b7ff71ef5f57831b621caaf78df71",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts": {
-        "version": "609ea1b77f40a3a6d7350cd954a9bd25db791a6d1676584591cf42ff6bc78c5a",
-        "signature": "609ea1b77f40a3a6d7350cd954a9bd25db791a6d1676584591cf42ff6bc78c5a",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts": {
-        "version": "86e8989831b1ea4668aa688a56362cf5e2c99f1dd5f28022874f089545205bf4",
-        "signature": "86e8989831b1ea4668aa688a56362cf5e2c99f1dd5f28022874f089545205bf4",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts": {
-        "version": "8113b8de14bdf47c2f9b4ead98b6ad65378ddc65a7626fc2705eb2916b76a1ce",
-        "signature": "8113b8de14bdf47c2f9b4ead98b6ad65378ddc65a7626fc2705eb2916b76a1ce",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts": {
-        "version": "c5149fec51912b455e00ff7dc0c0e4dfd6af79926cefa977b9b628bb5a2f47e2",
-        "signature": "c5149fec51912b455e00ff7dc0c0e4dfd6af79926cefa977b9b628bb5a2f47e2",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts": {
-        "version": "0ac47cdf1f25ce509b319ab217315ac5df7811ba57b0ba76f19148791ca27fdd",
-        "signature": "0ac47cdf1f25ce509b319ab217315ac5df7811ba57b0ba76f19148791ca27fdd",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/client.d.ts": {
-        "version": "4567fe06fdc6858c1a9ad40000a45361785f4fec2897133dccebf7633abc5f78",
-        "signature": "4567fe06fdc6858c1a9ad40000a45361785f4fec2897133dccebf7633abc5f78",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts": {
-        "version": "12789f348093a550858496353ff19de898f77edfe54dfbc32cfdb73ea20d4cdb",
-        "signature": "12789f348093a550858496353ff19de898f77edfe54dfbc32cfdb73ea20d4cdb",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": {
-        "version": "ddccf0a48338cac642e93bfdb563494dad6e05b70ef0e6e3605a454db88ca57e",
-        "signature": "ddccf0a48338cac642e93bfdb563494dad6e05b70ef0e6e3605a454db88ca57e",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/node.d.ts": {
-        "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": {
-        "version": "d789022bf705385490fe89811bc7850225c207f37dd706ada2509eb1d8f31f12",
-        "signature": "d789022bf705385490fe89811bc7850225c207f37dd706ada2509eb1d8f31f12",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/node.d.ts": {
-        "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/common/api.d.ts": {
-        "version": "8a45a7b6f28e8ad27bf9cd44254cec14d009744205500a0600b7d5e8855ab1a9",
-        "signature": "8a45a7b6f28e8ad27bf9cd44254cec14d009744205500a0600b7d5e8855ab1a9",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/lib/node/main.d.ts": {
-        "version": "75b69717fd90ebb37fb5acac671a7900b58b74c535bc25c509dc780b827c0dbf",
-        "signature": "75b69717fd90ebb37fb5acac671a7900b58b74c535bc25c509dc780b827c0dbf",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageclient/node.d.ts": {
-        "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/yaml/types.d.ts": {
-        "version": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24",
-        "signature": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/yaml/util.d.ts": {
-        "version": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d",
-        "signature": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/yaml/parse-cst.d.ts": {
-        "version": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd",
-        "signature": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/yaml/index.d.ts": {
-        "version": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49",
-        "signature": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49",
-        "affectsGlobalScope": false
-      },
-      "./src/semanticTokens.ts": {
-        "version": "53f659e7d30acd7620102bb494ee08457ab0ace8f38562b8bd4766e819d8662b",
-        "signature": "e8f68cbfde24db58ecf33e9c268ca0e0706bc9f7740602bae5c80999bffa75c2",
-        "affectsGlobalScope": false
-      },
-      "./src/extension.ts": {
-        "version": "a36ce5689359bfe2ca0ae138d3fa10257b0e03b923bd581a54508699db629bcb",
-        "signature": "28fd02b23f22a42df03edc496d91b458cbb5c0b39a9933a40f136e465bf6dc1f",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/chai/index.d.ts": {
-        "version": "267813ae499a9c070ea61bca2d235e31e785181d967e4461719cbcc78a35abfe",
-        "signature": "267813ae499a9c070ea61bca2d235e31e785181d967e4461719cbcc78a35abfe",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/eslint/helpers.d.ts": {
-        "version": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46",
-        "signature": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/eslint/lib/rules/index.d.ts": {
-        "version": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0",
-        "signature": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/json-schema/index.d.ts": {
-        "version": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27",
-        "signature": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/estree/index.d.ts": {
-        "version": "745a853d60bf782583a58584f59e202cae5c7a898b0c92696442602a3ef17a87",
-        "signature": "745a853d60bf782583a58584f59e202cae5c7a898b0c92696442602a3ef17a87",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/eslint/index.d.ts": {
-        "version": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c",
-        "signature": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/eslint-scope/index.d.ts": {
-        "version": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed",
-        "signature": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/mocha/index.d.ts": {
-        "version": "d8cebc259915afa4b2c56b7efcb8056739ec65f4479c1b880ff668eb98654ae7",
-        "signature": "d8cebc259915afa4b2c56b7efcb8056739ec65f4479c1b880ff668eb98654ae7",
-        "affectsGlobalScope": true
-      }
-    },
-    "options": {
-      "composite": true,
-      "target": 6,
-      "lib": [
-        "lib.es2019.d.ts"
-      ],
-      "module": 1,
-      "moduleResolution": 2,
-      "outDir": "./out",
-      "rootDir": "./src",
-      "sourceMap": true,
-      "strict": true,
-      "watch": true,
-      "configFilePath": "./tsconfig.json"
-    },
-    "referencedMap": {
-      "./node_modules/@types/vscode/index.d.ts": [
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-        "./node_modules/vscode-jsonrpc/typings/thenable.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/index.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/node.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/node/main.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/typings/thenable.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/api.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/client.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/colorProvider.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/configuration.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/declaration.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/fileOperations.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/foldingRange.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/implementation.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/selectionRange.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/workspaceFolders.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/colorProvider.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/configuration.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/declaration.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/fileOperations.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/foldingRange.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/implementation.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/selectionRange.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/workspaceFolders.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/node/main.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/node.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/node.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/lib/node/main.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/node.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/node.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./src/extension.ts": [
-        "../node_modules/@types/node/path.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/node.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./src/semanticTokens.ts"
-      ],
-      "./src/semanticTokens.ts": [
-        "../node_modules/@types/node/perf_hooks.d.ts",
-        "../node_modules/yaml/index.d.ts",
-        "../node_modules/yaml/types.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/chai/index.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/eslint-scope/index.d.ts": [
-        "../node_modules/@types/eslint/index.d.ts",
-        "../node_modules/@types/estree/index.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/eslint/helpers.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/eslint/index.d.ts": [
-        "../node_modules/@types/eslint/helpers.d.ts",
-        "../node_modules/@types/eslint/lib/rules/index.d.ts",
-        "../node_modules/@types/estree/index.d.ts",
-        "../node_modules/@types/json-schema/index.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/eslint/lib/rules/index.d.ts": [
-        "../node_modules/@types/eslint/index.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/estree/index.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/json-schema/index.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/mocha/index.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/assert.d.ts": [
-        "../node_modules/@types/node/assert.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/async_hooks.d.ts": [
-        "../node_modules/@types/node/async_hooks.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/base.d.ts": [
-        "../node_modules/@types/node/assert.d.ts",
-        "../node_modules/@types/node/ts3.6/base.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/buffer.d.ts": [
-        "../node_modules/@types/node/buffer.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/child_process.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/cluster.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/cluster.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/console.d.ts": [
-        "../node_modules/@types/node/util.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/constants.d.ts": [
-        "../node_modules/@types/node/constants.d.ts",
-        "../node_modules/@types/node/crypto.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/os.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/crypto.d.ts": [
-        "../node_modules/@types/node/crypto.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/dgram.d.ts": [
-        "../node_modules/@types/node/dgram.d.ts",
-        "../node_modules/@types/node/dns.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/dns.d.ts": [
-        "../node_modules/@types/node/dns.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/domain.d.ts": [
-        "../node_modules/@types/node/domain.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/events.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/fs.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/fs/promises.d.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/globals.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/globals.global.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/http.d.ts": [
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/http2.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/http2.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/https.d.ts": [
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/https.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/index.d.ts": [
-        "../node_modules/@types/node/base.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/inspector.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/inspector.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/module.d.ts": [
-        "../node_modules/@types/node/module.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/net.d.ts": [
-        "../node_modules/@types/node/dns.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/os.d.ts": [
-        "../node_modules/@types/node/os.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/path.d.ts": [
-        "../node_modules/@types/node/path.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/perf_hooks.d.ts": [
-        "../node_modules/@types/node/async_hooks.d.ts",
-        "../node_modules/@types/node/perf_hooks.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/process.d.ts": [
-        "../node_modules/@types/node/tty.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/punycode.d.ts": [
-        "../node_modules/@types/node/punycode.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/querystring.d.ts": [
-        "../node_modules/@types/node/querystring.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/readline.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/readline.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/repl.d.ts": [
-        "../node_modules/@types/node/readline.d.ts",
-        "../node_modules/@types/node/repl.d.ts",
-        "../node_modules/@types/node/util.d.ts",
-        "../node_modules/@types/node/vm.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/stream.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/string_decoder.d.ts": [
-        "../node_modules/@types/node/string_decoder.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/timers.d.ts": [
-        "../node_modules/@types/node/timers.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/tls.d.ts": [
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/trace_events.d.ts": [
-        "../node_modules/@types/node/trace_events.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/ts3.4/base.d.ts": [
-        "../node_modules/@types/node/async_hooks.d.ts",
-        "../node_modules/@types/node/buffer.d.ts",
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/cluster.d.ts",
-        "../node_modules/@types/node/console.d.ts",
-        "../node_modules/@types/node/constants.d.ts",
-        "../node_modules/@types/node/crypto.d.ts",
-        "../node_modules/@types/node/dgram.d.ts",
-        "../node_modules/@types/node/dns.d.ts",
-        "../node_modules/@types/node/domain.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "../node_modules/@types/node/globals.d.ts",
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/http2.d.ts",
-        "../node_modules/@types/node/https.d.ts",
-        "../node_modules/@types/node/inspector.d.ts",
-        "../node_modules/@types/node/module.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/os.d.ts",
-        "../node_modules/@types/node/path.d.ts",
-        "../node_modules/@types/node/perf_hooks.d.ts",
-        "../node_modules/@types/node/process.d.ts",
-        "../node_modules/@types/node/punycode.d.ts",
-        "../node_modules/@types/node/querystring.d.ts",
-        "../node_modules/@types/node/readline.d.ts",
-        "../node_modules/@types/node/repl.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/string_decoder.d.ts",
-        "../node_modules/@types/node/timers.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "../node_modules/@types/node/trace_events.d.ts",
-        "../node_modules/@types/node/tty.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "../node_modules/@types/node/util.d.ts",
-        "../node_modules/@types/node/v8.d.ts",
-        "../node_modules/@types/node/vm.d.ts",
-        "../node_modules/@types/node/worker_threads.d.ts",
-        "../node_modules/@types/node/zlib.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/ts3.6/base.d.ts": [
-        "../node_modules/@types/node/globals.global.d.ts",
-        "../node_modules/@types/node/ts3.4/base.d.ts",
-        "../node_modules/@types/node/wasi.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/tty.d.ts": [
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/tty.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/url.d.ts": [
-        "../node_modules/@types/node/querystring.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/util.d.ts": [
-        "../node_modules/@types/node/util.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/v8.d.ts": [
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/v8.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/vm.d.ts": [
-        "../node_modules/@types/node/vm.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/wasi.d.ts": [
-        "../node_modules/@types/node/wasi.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/worker_threads.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "../node_modules/@types/node/vm.d.ts",
-        "../node_modules/@types/node/worker_threads.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/zlib.d.ts": [
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/zlib.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.collection.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.core.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.generator.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.promise.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2016.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2017.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2017.intl.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2017.object.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2017.string.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2018.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2018.intl.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2018.promise.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2019.array.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2019.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2019.object.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2019.string.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2019.symbol.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es5.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.esnext.intl.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/yaml/index.d.ts": [
-        "../node_modules/yaml/parse-cst.d.ts",
-        "../node_modules/yaml/types.d.ts",
-        "../node_modules/yaml/util.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/yaml/parse-cst.d.ts": [
-        "../node_modules/yaml/util.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/yaml/types.d.ts": [
-        "../node_modules/yaml/index.d.ts",
-        "../node_modules/yaml/parse-cst.d.ts",
-        "../node_modules/yaml/util.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/yaml/util.d.ts": [
-        "../node_modules/yaml/index.d.ts",
-        "../node_modules/yaml/parse-cst.d.ts",
-        "../node_modules/yaml/types.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ]
-    },
-    "exportedModulesMap": {
-      "./node_modules/@types/vscode/index.d.ts": [
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-        "./node_modules/vscode-jsonrpc/typings/thenable.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/index.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/node.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/node/main.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/typings/thenable.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/api.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/client.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/colorProvider.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/configuration.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/declaration.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/fileOperations.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/foldingRange.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/implementation.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/selectionRange.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/workspaceFolders.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/colorProvider.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/configuration.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/declaration.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/fileOperations.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/foldingRange.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/implementation.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/selectionRange.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/common/workspaceFolders.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/lib/node/main.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/node.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/node.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/lib/node/main.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-jsonrpc/node.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/node.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "./src/extension.ts": [
-        "./node_modules/@types/vscode/index.d.ts"
-      ],
-      "./src/semanticTokens.ts": [
-        "./node_modules/@types/vscode/index.d.ts"
-      ],
-      "../node_modules/@types/chai/index.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/eslint-scope/index.d.ts": [
-        "../node_modules/@types/eslint/index.d.ts",
-        "../node_modules/@types/estree/index.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/eslint/helpers.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/eslint/index.d.ts": [
-        "../node_modules/@types/eslint/helpers.d.ts",
-        "../node_modules/@types/eslint/lib/rules/index.d.ts",
-        "../node_modules/@types/estree/index.d.ts",
-        "../node_modules/@types/json-schema/index.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/eslint/lib/rules/index.d.ts": [
-        "../node_modules/@types/eslint/index.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/estree/index.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/json-schema/index.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/mocha/index.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/assert.d.ts": [
-        "../node_modules/@types/node/assert.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/async_hooks.d.ts": [
-        "../node_modules/@types/node/async_hooks.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/base.d.ts": [
-        "../node_modules/@types/node/assert.d.ts",
-        "../node_modules/@types/node/ts3.6/base.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/buffer.d.ts": [
-        "../node_modules/@types/node/buffer.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/child_process.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/cluster.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/cluster.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/console.d.ts": [
-        "../node_modules/@types/node/util.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/constants.d.ts": [
-        "../node_modules/@types/node/constants.d.ts",
-        "../node_modules/@types/node/crypto.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/os.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/crypto.d.ts": [
-        "../node_modules/@types/node/crypto.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/dgram.d.ts": [
-        "../node_modules/@types/node/dgram.d.ts",
-        "../node_modules/@types/node/dns.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/dns.d.ts": [
-        "../node_modules/@types/node/dns.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/domain.d.ts": [
-        "../node_modules/@types/node/domain.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/events.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/fs.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/fs/promises.d.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/globals.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/globals.global.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/http.d.ts": [
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/http2.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/http2.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/https.d.ts": [
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/https.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/index.d.ts": [
-        "../node_modules/@types/node/base.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/inspector.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/inspector.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/module.d.ts": [
-        "../node_modules/@types/node/module.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/net.d.ts": [
-        "../node_modules/@types/node/dns.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/os.d.ts": [
-        "../node_modules/@types/node/os.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/path.d.ts": [
-        "../node_modules/@types/node/path.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/perf_hooks.d.ts": [
-        "../node_modules/@types/node/async_hooks.d.ts",
-        "../node_modules/@types/node/perf_hooks.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/process.d.ts": [
-        "../node_modules/@types/node/tty.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/punycode.d.ts": [
-        "../node_modules/@types/node/punycode.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/querystring.d.ts": [
-        "../node_modules/@types/node/querystring.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/readline.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/readline.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/repl.d.ts": [
-        "../node_modules/@types/node/readline.d.ts",
-        "../node_modules/@types/node/repl.d.ts",
-        "../node_modules/@types/node/util.d.ts",
-        "../node_modules/@types/node/vm.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/stream.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/string_decoder.d.ts": [
-        "../node_modules/@types/node/string_decoder.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/timers.d.ts": [
-        "../node_modules/@types/node/timers.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/tls.d.ts": [
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/trace_events.d.ts": [
-        "../node_modules/@types/node/trace_events.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/ts3.4/base.d.ts": [
-        "../node_modules/@types/node/async_hooks.d.ts",
-        "../node_modules/@types/node/buffer.d.ts",
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/cluster.d.ts",
-        "../node_modules/@types/node/console.d.ts",
-        "../node_modules/@types/node/constants.d.ts",
-        "../node_modules/@types/node/crypto.d.ts",
-        "../node_modules/@types/node/dgram.d.ts",
-        "../node_modules/@types/node/dns.d.ts",
-        "../node_modules/@types/node/domain.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "../node_modules/@types/node/globals.d.ts",
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/http2.d.ts",
-        "../node_modules/@types/node/https.d.ts",
-        "../node_modules/@types/node/inspector.d.ts",
-        "../node_modules/@types/node/module.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/os.d.ts",
-        "../node_modules/@types/node/path.d.ts",
-        "../node_modules/@types/node/perf_hooks.d.ts",
-        "../node_modules/@types/node/process.d.ts",
-        "../node_modules/@types/node/punycode.d.ts",
-        "../node_modules/@types/node/querystring.d.ts",
-        "../node_modules/@types/node/readline.d.ts",
-        "../node_modules/@types/node/repl.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/string_decoder.d.ts",
-        "../node_modules/@types/node/timers.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "../node_modules/@types/node/trace_events.d.ts",
-        "../node_modules/@types/node/tty.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "../node_modules/@types/node/util.d.ts",
-        "../node_modules/@types/node/v8.d.ts",
-        "../node_modules/@types/node/vm.d.ts",
-        "../node_modules/@types/node/worker_threads.d.ts",
-        "../node_modules/@types/node/zlib.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/ts3.6/base.d.ts": [
-        "../node_modules/@types/node/globals.global.d.ts",
-        "../node_modules/@types/node/ts3.4/base.d.ts",
-        "../node_modules/@types/node/wasi.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/tty.d.ts": [
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/tty.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/url.d.ts": [
-        "../node_modules/@types/node/querystring.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/util.d.ts": [
-        "../node_modules/@types/node/util.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/v8.d.ts": [
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/v8.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/vm.d.ts": [
-        "../node_modules/@types/node/vm.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/wasi.d.ts": [
-        "../node_modules/@types/node/wasi.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/worker_threads.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "../node_modules/@types/node/vm.d.ts",
-        "../node_modules/@types/node/worker_threads.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/@types/node/zlib.d.ts": [
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/zlib.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.collection.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.core.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.generator.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.promise.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2016.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2017.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2017.intl.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2017.object.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2017.string.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2018.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2018.intl.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2018.promise.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2019.array.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2019.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2019.object.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2019.string.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2019.symbol.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.es5.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/typescript/lib/lib.esnext.intl.d.ts": [
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/yaml/index.d.ts": [
-        "../node_modules/yaml/parse-cst.d.ts",
-        "../node_modules/yaml/types.d.ts",
-        "../node_modules/yaml/util.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/yaml/parse-cst.d.ts": [
-        "../node_modules/yaml/util.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/yaml/types.d.ts": [
-        "../node_modules/yaml/index.d.ts",
-        "../node_modules/yaml/parse-cst.d.ts",
-        "../node_modules/yaml/util.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ],
-      "../node_modules/yaml/util.d.ts": [
-        "../node_modules/yaml/index.d.ts",
-        "../node_modules/yaml/parse-cst.d.ts",
-        "../node_modules/yaml/types.d.ts",
-        "./node_modules/@types/vscode/index.d.ts",
-        "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-        "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts"
-      ]
-    },
-    "semanticDiagnosticsPerFile": [
-      "./node_modules/@types/vscode/index.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/node/main.d.ts",
-      "./node_modules/vscode-jsonrpc/node.d.ts",
-      "./node_modules/vscode-jsonrpc/typings/thenable.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/api.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/callHierarchy.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/client.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/codeConverter.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/colorProvider.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/commonClient.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/configuration.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/declaration.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/fileOperations.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/foldingRange.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/implementation.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/linkedEditingRange.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/protocolCompletionItem.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/protocolConverter.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/selectionRange.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/semanticTokens.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/typeDefinition.d.ts",
-      "./node_modules/vscode-languageclient/lib/common/workspaceFolders.d.ts",
-      "./node_modules/vscode-languageclient/lib/node/main.d.ts",
-      "./node_modules/vscode-languageclient/node.d.ts",
-      "./node_modules/vscode-languageclient/typings/vscode-proposed.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts",
-      "./node_modules/vscode-languageserver-protocol/node.d.ts",
-      "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts",
-      "./src/extension.ts",
-      "./src/semanticTokens.ts",
-      "../node_modules/@types/chai/index.d.ts",
-      "../node_modules/@types/eslint-scope/index.d.ts",
-      "../node_modules/@types/eslint/helpers.d.ts",
-      "../node_modules/@types/eslint/index.d.ts",
-      "../node_modules/@types/eslint/lib/rules/index.d.ts",
-      "../node_modules/@types/estree/index.d.ts",
-      "../node_modules/@types/json-schema/index.d.ts",
-      "../node_modules/@types/mocha/index.d.ts",
-      "../node_modules/@types/node/assert.d.ts",
-      "../node_modules/@types/node/async_hooks.d.ts",
-      "../node_modules/@types/node/base.d.ts",
-      "../node_modules/@types/node/buffer.d.ts",
-      "../node_modules/@types/node/child_process.d.ts",
-      "../node_modules/@types/node/cluster.d.ts",
-      "../node_modules/@types/node/console.d.ts",
-      "../node_modules/@types/node/constants.d.ts",
-      "../node_modules/@types/node/crypto.d.ts",
-      "../node_modules/@types/node/dgram.d.ts",
-      "../node_modules/@types/node/dns.d.ts",
-      "../node_modules/@types/node/domain.d.ts",
-      "../node_modules/@types/node/events.d.ts",
-      "../node_modules/@types/node/fs.d.ts",
-      "../node_modules/@types/node/fs/promises.d.ts",
-      "../node_modules/@types/node/globals.d.ts",
-      "../node_modules/@types/node/globals.global.d.ts",
-      "../node_modules/@types/node/http.d.ts",
-      "../node_modules/@types/node/http2.d.ts",
-      "../node_modules/@types/node/https.d.ts",
-      "../node_modules/@types/node/index.d.ts",
-      "../node_modules/@types/node/inspector.d.ts",
-      "../node_modules/@types/node/module.d.ts",
-      "../node_modules/@types/node/net.d.ts",
-      "../node_modules/@types/node/os.d.ts",
-      "../node_modules/@types/node/path.d.ts",
-      "../node_modules/@types/node/perf_hooks.d.ts",
-      "../node_modules/@types/node/process.d.ts",
-      "../node_modules/@types/node/punycode.d.ts",
-      "../node_modules/@types/node/querystring.d.ts",
-      "../node_modules/@types/node/readline.d.ts",
-      "../node_modules/@types/node/repl.d.ts",
-      "../node_modules/@types/node/stream.d.ts",
-      "../node_modules/@types/node/string_decoder.d.ts",
-      "../node_modules/@types/node/timers.d.ts",
-      "../node_modules/@types/node/tls.d.ts",
-      "../node_modules/@types/node/trace_events.d.ts",
-      "../node_modules/@types/node/ts3.4/base.d.ts",
-      "../node_modules/@types/node/ts3.6/base.d.ts",
-      "../node_modules/@types/node/tty.d.ts",
-      "../node_modules/@types/node/url.d.ts",
-      "../node_modules/@types/node/util.d.ts",
-      "../node_modules/@types/node/v8.d.ts",
-      "../node_modules/@types/node/vm.d.ts",
-      "../node_modules/@types/node/wasi.d.ts",
-      "../node_modules/@types/node/worker_threads.d.ts",
-      "../node_modules/@types/node/zlib.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.collection.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.core.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.generator.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.iterable.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.promise.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.proxy.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.reflect.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.symbol.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts",
-      "../node_modules/typescript/lib/lib.es2016.array.include.d.ts",
-      "../node_modules/typescript/lib/lib.es2016.d.ts",
-      "../node_modules/typescript/lib/lib.es2017.d.ts",
-      "../node_modules/typescript/lib/lib.es2017.intl.d.ts",
-      "../node_modules/typescript/lib/lib.es2017.object.d.ts",
-      "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts",
-      "../node_modules/typescript/lib/lib.es2017.string.d.ts",
-      "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts",
-      "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts",
-      "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts",
-      "../node_modules/typescript/lib/lib.es2018.d.ts",
-      "../node_modules/typescript/lib/lib.es2018.intl.d.ts",
-      "../node_modules/typescript/lib/lib.es2018.promise.d.ts",
-      "../node_modules/typescript/lib/lib.es2018.regexp.d.ts",
-      "../node_modules/typescript/lib/lib.es2019.array.d.ts",
-      "../node_modules/typescript/lib/lib.es2019.d.ts",
-      "../node_modules/typescript/lib/lib.es2019.object.d.ts",
-      "../node_modules/typescript/lib/lib.es2019.string.d.ts",
-      "../node_modules/typescript/lib/lib.es2019.symbol.d.ts",
-      "../node_modules/typescript/lib/lib.es2020.bigint.d.ts",
-      "../node_modules/typescript/lib/lib.es5.d.ts",
-      "../node_modules/typescript/lib/lib.esnext.intl.d.ts",
-      "../node_modules/yaml/index.d.ts",
-      "../node_modules/yaml/parse-cst.d.ts",
-      "../node_modules/yaml/types.d.ts",
-      "../node_modules/yaml/util.d.ts"
-    ]
-  },
-  "version": "4.1.5"
-}
\ No newline at end of file
diff --git a/sample/sample.semanticLanguage b/sample/sample.semanticLanguage
deleted file mode 100644
index d5e4810cd..000000000
--- a/sample/sample.semanticLanguage
+++ /dev/null
@@ -1,19 +0,0 @@
-Available token types:
-    [comment] [string] [keyword] [number] [regexp] [operator] [namespace]
-    [type] [struct] [class] [interface] [enum] [typeParameter] [function]
-    [method] [macro] [variable] [parameter] [property] [label]
-
-Available token modifiers:
-    [type.declaration] [type.documentation] [type.readonly] [type.static]
-    [type.abstract] [type.deprecated] [type.modification] [type.async]
-
-Some examples:
-    [class.static.token]     [type.static.abstract]
-    [class.static.token]     [type.static]
-
-    [struct]
-
-    [function.private]
-
-An error case:
-    [notInLegend]
diff --git a/server/tsconfig.tsbuildinfo b/server/tsconfig.tsbuildinfo
deleted file mode 100644
index 696c749f2..000000000
--- a/server/tsconfig.tsbuildinfo
+++ /dev/null
@@ -1,2913 +0,0 @@
-{
-  "program": {
-    "fileInfos": {
-      "../node_modules/typescript/lib/lib.es5.d.ts": {
-        "version": "9622e8bd7cc72a7dab819a8011ecbf81d443638082e5cb99ecf2e75ff56ffc9d",
-        "signature": "9622e8bd7cc72a7dab819a8011ecbf81d443638082e5cb99ecf2e75ff56ffc9d",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.d.ts": {
-        "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6",
-        "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/typescript/lib/lib.es2016.d.ts": {
-        "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467",
-        "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/typescript/lib/lib.es2017.d.ts": {
-        "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9",
-        "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/typescript/lib/lib.es2018.d.ts": {
-        "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06",
-        "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/typescript/lib/lib.es2019.d.ts": {
-        "version": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84",
-        "signature": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/typescript/lib/lib.es2015.core.d.ts": {
-        "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17",
-        "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.collection.d.ts": {
-        "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c",
-        "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.generator.d.ts": {
-        "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a",
-        "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": {
-        "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a",
-        "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.promise.d.ts": {
-        "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c",
-        "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": {
-        "version": "7207e317a2cb07a177e7d963ab7b8c0e85dde7f9ddb50351f830239bf597569e",
-        "signature": "7207e317a2cb07a177e7d963ab7b8c0e85dde7f9ddb50351f830239bf597569e",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": {
-        "version": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d",
-        "signature": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": {
-        "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93",
-        "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": {
-        "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551",
-        "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": {
-        "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006",
-        "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2017.object.d.ts": {
-        "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a",
-        "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": {
-        "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98",
-        "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2017.string.d.ts": {
-        "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577",
-        "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2017.intl.d.ts": {
-        "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d",
-        "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": {
-        "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e",
-        "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": {
-        "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a",
-        "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": {
-        "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359",
-        "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2018.intl.d.ts": {
-        "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e",
-        "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2018.promise.d.ts": {
-        "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c",
-        "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": {
-        "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8",
-        "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2019.array.d.ts": {
-        "version": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951",
-        "signature": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2019.object.d.ts": {
-        "version": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de",
-        "signature": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2019.string.d.ts": {
-        "version": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1",
-        "signature": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2019.symbol.d.ts": {
-        "version": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993",
-        "signature": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": {
-        "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09",
-        "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/typescript/lib/lib.esnext.intl.d.ts": {
-        "version": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd",
-        "signature": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd",
-        "affectsGlobalScope": true
-      },
-      "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts": {
-        "version": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538",
-        "signature": "21f9731fc2e8e009fdaef137a04546c27877314c748c6702fe9329518fb16538",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/typings/thenable.d.ts": {
-        "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d",
-        "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/globals.d.ts": {
-        "version": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476",
-        "signature": "e9a43c3ee6fb8376bb9a4d318a660412c6abcfe5161c106e801e5431b41b7476",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/async_hooks.d.ts": {
-        "version": "7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641",
-        "signature": "7698983d080f951eaf53ff81e5c7bd61abc02e4a1a21266f1bd79ea85c0dc641",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/buffer.d.ts": {
-        "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1",
-        "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/child_process.d.ts": {
-        "version": "89a3409a743c2a408d02bd68255a61d8416225b76c2c66d8e2e74dad3e00bc5d",
-        "signature": "89a3409a743c2a408d02bd68255a61d8416225b76c2c66d8e2e74dad3e00bc5d",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/cluster.d.ts": {
-        "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef",
-        "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/console.d.ts": {
-        "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096",
-        "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/constants.d.ts": {
-        "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83",
-        "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/crypto.d.ts": {
-        "version": "64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d",
-        "signature": "64813a6beff756b9e3f3c06d1b648d55e7c90af2b55c64d13a69d6c7f573643d",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/dgram.d.ts": {
-        "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed",
-        "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/dns.d.ts": {
-        "version": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317",
-        "signature": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/domain.d.ts": {
-        "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70",
-        "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/events.d.ts": {
-        "version": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb",
-        "signature": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/fs.d.ts": {
-        "version": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576",
-        "signature": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/fs/promises.d.ts": {
-        "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10",
-        "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/http.d.ts": {
-        "version": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7",
-        "signature": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/http2.d.ts": {
-        "version": "4c260129d649d69f0608cd123e7016e61364b553a5ca2de9b66b0398594959cf",
-        "signature": "4c260129d649d69f0608cd123e7016e61364b553a5ca2de9b66b0398594959cf",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/https.d.ts": {
-        "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba",
-        "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/inspector.d.ts": {
-        "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466",
-        "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/module.d.ts": {
-        "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340",
-        "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/net.d.ts": {
-        "version": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657",
-        "signature": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/os.d.ts": {
-        "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc",
-        "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/path.d.ts": {
-        "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca",
-        "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/perf_hooks.d.ts": {
-        "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f",
-        "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/process.d.ts": {
-        "version": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e",
-        "signature": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/punycode.d.ts": {
-        "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8",
-        "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/querystring.d.ts": {
-        "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3",
-        "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/readline.d.ts": {
-        "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da",
-        "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/repl.d.ts": {
-        "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71",
-        "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/stream.d.ts": {
-        "version": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25",
-        "signature": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/string_decoder.d.ts": {
-        "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa",
-        "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/timers.d.ts": {
-        "version": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9",
-        "signature": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/tls.d.ts": {
-        "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3",
-        "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/trace_events.d.ts": {
-        "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a",
-        "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/tty.d.ts": {
-        "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837",
-        "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/url.d.ts": {
-        "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9",
-        "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/util.d.ts": {
-        "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7",
-        "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/v8.d.ts": {
-        "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14",
-        "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/vm.d.ts": {
-        "version": "66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff",
-        "signature": "66679e8ffbf1fddef1796c60757e54e6e6551dd9823f75ef2f80176473bdaaff",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/worker_threads.d.ts": {
-        "version": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877",
-        "signature": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/zlib.d.ts": {
-        "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977",
-        "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/ts3.4/base.d.ts": {
-        "version": "d44028ae0127eb3e9fcfa5f55a8b81d64775ce15aca1020fe25c511bbb055834",
-        "signature": "d44028ae0127eb3e9fcfa5f55a8b81d64775ce15aca1020fe25c511bbb055834",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/globals.global.d.ts": {
-        "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1",
-        "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/node/wasi.d.ts": {
-        "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf",
-        "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/ts3.6/base.d.ts": {
-        "version": "ad1ae5ae98eceb9af99061e83e867b9897d267aebc8f3b938c9424deabadf4bb",
-        "signature": "ad1ae5ae98eceb9af99061e83e867b9897d267aebc8f3b938c9424deabadf4bb",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/assert.d.ts": {
-        "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e",
-        "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/base.d.ts": {
-        "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b",
-        "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/node/index.d.ts": {
-        "version": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f",
-        "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts": {
-        "version": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba",
-        "signature": "a337b9716b16c46e80a8810209cb162d32af16c6c93b331edcc01cdce5d82eba",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/typings/thenable.d.ts": {
-        "version": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d",
-        "signature": "65b9243c80068ec9696b1fbdd23c9acf80d51df02f97b2d7a0514312b0a9fe7d",
-        "affectsGlobalScope": true
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts": {
-        "version": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f",
-        "signature": "58bdd5fd93f39bae19f34924ad304608ee37b6c6b357a57823ddfd2585a56d0f",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts": {
-        "version": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1",
-        "signature": "f0745ab78e18a2befaf1d9951481973318722c4e2f33e859239f55fa999ff2b1",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": {
-        "version": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383",
-        "signature": "b61ebe734dabd3ca10247807bfa4585ed51c889282e5decd152eea86daea7383",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": {
-        "version": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576",
-        "signature": "41a35a21d3c9c0450229cf41be783285f3c01edd84039a41ffd162d42a93a576",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": {
-        "version": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e",
-        "signature": "ec9d55888e353f9b5cdda761308dffc7eeb6aa0b7b25d328c64d3776a1cf2a7e",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": {
-        "version": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6",
-        "signature": "9686c9ade71de53d81ee3e41ff7450d08bd08fff4f545af39e37eeda228745d6",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": {
-        "version": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8",
-        "signature": "78fbf5d1265bdca3b2e54323d63678e3f73fecf70c05d988966a683da4cdf2f8",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": {
-        "version": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636",
-        "signature": "37c0fd48eb043fdc395435716585587815f63afc66159588db8ed6c25a5f0636",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": {
-        "version": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91",
-        "signature": "7cd0faa5800c730d5e9387a5ad312732d95d0a3bd5a67e266721f36ae1068a91",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": {
-        "version": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0",
-        "signature": "03a931e4fb1e8b851a171b246a8aeba575fcdecde60c914b23f472af5beb29b0",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": {
-        "version": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656",
-        "signature": "f22230ec7c2b08a8f8dc110bacd30c910701cb7347b3129b9cf12f6e28130656",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": {
-        "version": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc",
-        "signature": "73623979b2b6f47b9af0efea985d91197a3c3303466ed786163757f0aa6b45bc",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": {
-        "version": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d",
-        "signature": "ad91f5cc45805d17ac94b01428f82b182c6ff0ebe6343d72fd298945478d203d",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": {
-        "version": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90",
-        "signature": "df4ba08679bfd850b787d662118aae3c4741dcaa661cf8689a768dab462cfd90",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": {
-        "version": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec",
-        "signature": "4acc4bccbdec774c58992a87f3ac2731f9d38c821520d06b4d53911898d0e3ec",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": {
-        "version": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676",
-        "signature": "94d6422d3c3faf923fbdff1ce7457a25f9b0b55e8a2fe0fefa8bfa7a89cf6676",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": {
-        "version": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c",
-        "signature": "1c775cb43c5edae0a7b4a5e543c07baab07f751e5cccc60a22c5bc3f6e38309c",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": {
-        "version": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1",
-        "signature": "0eef4cf077011e3d1839dfb93ab894cd611cf552c26eb995c822e8d9b71d93a1",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": {
-        "version": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2",
-        "signature": "f356e7999affebf5745d8ffdf0cb70426bc966da461166408099e4dac35e98c2",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": {
-        "version": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656",
-        "signature": "254265a792bdf31050dc2524733465d3ace0b179779e1ff8a97b2752a9b56656",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": {
-        "version": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6",
-        "signature": "1b85664bf562d2d216d71b940d8097600b4ed626f67528c868ced65dbe7288e6",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": {
-        "version": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0",
-        "signature": "7891c7290f213b63911a1391b3dfe08c9bfa54d401f28e167d0c57553eee80c0",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": {
-        "version": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0",
-        "signature": "707db20cf8a4ee166e63861c0a7d355b44595555e0248565479e745f6c1034d0",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": {
-        "version": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc",
-        "signature": "2a9788e7789f4ab603d4d3982fe5a98ff51b699b8ec4653fceb3192e147337dc",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": {
-        "version": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323",
-        "signature": "5bee6b675b1a0ece9d5082d438e923f112343685d4bc54b20a4dfbed09dbe323",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": {
-        "version": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533",
-        "signature": "ebd7209e5b648af7b6e3677280368b3c8ccef579a27c2386f7f5d376f1e14533",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": {
-        "version": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd",
-        "signature": "60f5fe888f5364424f9cdf43eef013cdcd6827cbec1d6d20fa191f5ebe827afd",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": {
-        "version": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7",
-        "signature": "aca0e55a2961b519f8857517e2cdf6085f024bb10c6961e120c80b76569fc4d7",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": {
-        "version": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184",
-        "signature": "26245b1b8452c300347a31b37a052c3244a36393dec03facfa4b31a8d8687184",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/common/progress.d.ts": {
-        "version": "f1f23acd4a8193453749f69d4432f5f122d6d572b793a8b630dd12fe80b0c3d3",
-        "signature": "f1f23acd4a8193453749f69d4432f5f122d6d572b793a8b630dd12fe80b0c3d3",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/common/configuration.d.ts": {
-        "version": "7662d6994d28c9ebbe61b88cc35c3d705804351eedbf363df30ea9fe8c4961dc",
-        "signature": "7662d6994d28c9ebbe61b88cc35c3d705804351eedbf363df30ea9fe8c4961dc",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts": {
-        "version": "1fb68106bddae35448e5279095461a4b54c4bbb42787cd629f70924b17e9a11e",
-        "signature": "1fb68106bddae35448e5279095461a4b54c4bbb42787cd629f70924b17e9a11e",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts": {
-        "version": "9acd551d1b5fb8a4ea4bfd65e8fcc8beca89a4b98fc1a9321924308256383565",
-        "signature": "9acd551d1b5fb8a4ea4bfd65e8fcc8beca89a4b98fc1a9321924308256383565",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts": {
-        "version": "a7024322dc86e43685c5564b438decad7557de62baae80b062fee78752c3b2f4",
-        "signature": "a7024322dc86e43685c5564b438decad7557de62baae80b062fee78752c3b2f4",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts": {
-        "version": "351bbf43d585484825ee6c4b4805aac137ffc8e8a3b9812af99945a202db7c02",
-        "signature": "351bbf43d585484825ee6c4b4805aac137ffc8e8a3b9812af99945a202db7c02",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts": {
-        "version": "a0116a0ba37624acef486fba35bd5530c8c25415798c8908a35e5f72913d2365",
-        "signature": "a0116a0ba37624acef486fba35bd5530c8c25415798c8908a35e5f72913d2365",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts": {
-        "version": "3bd2fc1b877ba4f9c91fca3231333471f3ff0edf85e146eaafdff2bc42c9a44c",
-        "signature": "3bd2fc1b877ba4f9c91fca3231333471f3ff0edf85e146eaafdff2bc42c9a44c",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/common/moniker.d.ts": {
-        "version": "387a6dc0d57a9f602d0d7f2f4ba88b65540c1c19d84088157610ca0176793a03",
-        "signature": "387a6dc0d57a9f602d0d7f2f4ba88b65540c1c19d84088157610ca0176793a03",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/common/server.d.ts": {
-        "version": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617",
-        "signature": "7078f6149d25fa110b2bd24dece6754520e5984a2dd014875bef7ebe91016617",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/node/files.d.ts": {
-        "version": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5",
-        "signature": "a58402dc75738c188a741ccca86ccf898b0af98d305ad075c428171f193a6cd5",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": {
-        "version": "ddccf0a48338cac642e93bfdb563494dad6e05b70ef0e6e3605a454db88ca57e",
-        "signature": "ddccf0a48338cac642e93bfdb563494dad6e05b70ef0e6e3605a454db88ca57e",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-jsonrpc/node.d.ts": {
-        "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": {
-        "version": "d789022bf705385490fe89811bc7850225c207f37dd706ada2509eb1d8f31f12",
-        "signature": "d789022bf705385490fe89811bc7850225c207f37dd706ada2509eb1d8f31f12",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver-protocol/node.d.ts": {
-        "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/common/api.d.ts": {
-        "version": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081",
-        "signature": "3b4ba8322f73cc571cd57e55199b909e04b5da79d00d58a3a20fd71463f8c081",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/lib/node/main.d.ts": {
-        "version": "cf1532b11d5ec78f63dc4d0c985353b281b4a09e91d35f63fb9aba42e36674ab",
-        "signature": "cf1532b11d5ec78f63dc4d0c985353b281b4a09e91d35f63fb9aba42e36674ab",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/vscode-languageserver/node.d.ts": {
-        "version": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "signature": "9c98df0145d99011af92c397fa787fc39d42cc04019614ab5581febe71fb32e1",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/ini/index.d.ts": {
-        "version": "3cc26d1f94c768ae2896d3900ffa268e0657a332b399e94c1fb52da1f9e07625",
-        "signature": "3cc26d1f94c768ae2896d3900ffa268e0657a332b399e94c1fb52da1f9e07625",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/common/common.d.ts": {
-        "version": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc",
-        "signature": "3594c022901a1c8993b0f78a3f534cfb81e7b619ed215348f7f6882f3db02abc",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/common/array.d.ts": {
-        "version": "438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2",
-        "signature": "438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/common/collection.d.ts": {
-        "version": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8",
-        "signature": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/common/date.d.ts": {
-        "version": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42",
-        "signature": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/common/function.d.ts": {
-        "version": "c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe",
-        "signature": "c9f396e71966bd3a890d8a36a6a497dbf260e9b868158ea7824d4b5421210afe",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/common/lang.d.ts": {
-        "version": "509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32",
-        "signature": "509235563ea2b939e1bbe92aae17e71e6a82ceab8f568b45fb4fce7d72523a32",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/common/math.d.ts": {
-        "version": "9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb",
-        "signature": "9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/common/number.d.ts": {
-        "version": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a",
-        "signature": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/common/object.d.ts": {
-        "version": "c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793",
-        "signature": "c311349ec71bb69399ffc4092853e7d8a86c1ca39ddb4cd129e775c19d985793",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/common/seq.d.ts": {
-        "version": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd",
-        "signature": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/common/string.d.ts": {
-        "version": "4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a",
-        "signature": "4908e4c00832b26ce77a629de8501b0e23a903c094f9e79a7fec313a15da796a",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/common/util.d.ts": {
-        "version": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5",
-        "signature": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/lodash/index.d.ts": {
-        "version": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8",
-        "signature": "0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8",
-        "affectsGlobalScope": true
-      },
-      "./src/services/ansibleConfig.ts": {
-        "version": "97cbe91e6fa2739882a4851a56df173224e22dcb65f37ca636c7cab51d29e66f",
-        "signature": "37ebf09ca9068ea5f44c74277720e0d7e834a3a92aaa4d687ecc8a027ca17da9",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/yaml/types.d.ts": {
-        "version": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24",
-        "signature": "c3a8e97bce8330542633139409885c529c46ff9bcf8fda0dc28a7c8fdda41e24",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/yaml/util.d.ts": {
-        "version": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d",
-        "signature": "4d99772cffbb09646a934867ca42d77337dc3cfd591b648b78fc0b6e09e2d88d",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/yaml/parse-cst.d.ts": {
-        "version": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd",
-        "signature": "8f6d0753317a18771a5b8bd5f3d143110d224de5813ca19e04a87733885e73cd",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/yaml/index.d.ts": {
-        "version": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49",
-        "signature": "2752e1ab9e145dd1132d1e45d29b9d14aff9c46959f502ef77ea83e6c3d54e49",
-        "affectsGlobalScope": false
-      },
-      "./src/interfaces/documentMeta.ts": {
-        "version": "65c83d46301e0ab9ed2c4b03620c5240c36a60241c2e1578ac1a4236e5726d7a",
-        "signature": "cd260003e2b3cc7539f419be3c2d3fbd17dfdca742490c9377703703b56bc199",
-        "affectsGlobalScope": false
-      },
-      "./src/interfaces/context.ts": {
-        "version": "da9be63575d4f645112c8773f1575992ec85bbff3ae1f35515256177d5bb1298",
-        "signature": "76bab451bfa703ca94be5f6daf7a97f44d9ea82bb1f164113b728554cb3fd71e",
-        "affectsGlobalScope": false
-      },
-      "./src/utils/misc.ts": {
-        "version": "1d8b6c5802b70a95aca8dd51dee80f3660ef81447a63f8288d126e26c306e625",
-        "signature": "f7f8d7896e37fb0e062ce20fac8bcfbaad1787b2125c0b3cf682c9d4ed360449",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts": {
-        "version": "6cee571d9f8ea88d197d1614e5cf328391e96dff69ca61ab5299a630d0c65822",
-        "signature": "6cee571d9f8ea88d197d1614e5cf328391e96dff69ca61ab5299a630d0c65822",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts": {
-        "version": "ceebf93146ac7b3f85276a2501de57c5cf5bb19742944c958bd831f995b41409",
-        "signature": "ceebf93146ac7b3f85276a2501de57c5cf5bb19742944c958bd831f995b41409",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.stat/out/settings.d.ts": {
-        "version": "30c47bd1f03a220a10e8c11708a2c73c04135999ca1a35271605f9683d36b432",
-        "signature": "30c47bd1f03a220a10e8c11708a2c73c04135999ca1a35271605f9683d36b432",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.stat/out/types/index.d.ts": {
-        "version": "8b9fa6dfb2bec7abe9937fe049505d896550b2ad600cb7114b6fe2813b5cf180",
-        "signature": "8b9fa6dfb2bec7abe9937fe049505d896550b2ad600cb7114b6fe2813b5cf180",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.stat/out/providers/async.d.ts": {
-        "version": "c692034610ac35559227657172f6f76581ee7b16c319c7d5973e19b650f11b9f",
-        "signature": "c692034610ac35559227657172f6f76581ee7b16c319c7d5973e19b650f11b9f",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.stat/out/index.d.ts": {
-        "version": "079488cc4bf1eef64297994ef8719c078a86380610beea1d1a920c9436997967",
-        "signature": "079488cc4bf1eef64297994ef8719c078a86380610beea1d1a920c9436997967",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.scandir/out/settings.d.ts": {
-        "version": "354b18c096926d3f35b597b6309d9792b6517840bbf972c095930d067e28de83",
-        "signature": "354b18c096926d3f35b597b6309d9792b6517840bbf972c095930d067e28de83",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts": {
-        "version": "a86bb35bb7b946058e544aba4a7ac5359648d58904184701f1ca23b26b36ccd3",
-        "signature": "a86bb35bb7b946058e544aba4a7ac5359648d58904184701f1ca23b26b36ccd3",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.scandir/out/providers/async.d.ts": {
-        "version": "fa316e5f457f8a5ef600f305a60cb0031f0cf07c7c6991b520d353739f56c6ad",
-        "signature": "fa316e5f457f8a5ef600f305a60cb0031f0cf07c7c6991b520d353739f56c6ad",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.scandir/out/index.d.ts": {
-        "version": "105b0c9e3b159a1f32ca33bf1cb5ead919ea15bab7143bd99b298ceb687b0e84",
-        "signature": "105b0c9e3b159a1f32ca33bf1cb5ead919ea15bab7143bd99b298ceb687b0e84",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.walk/out/types/index.d.ts": {
-        "version": "e336f6c501a424c6e016b3244b094d5924d06b320cb659aaa0adb647ab5a9fd6",
-        "signature": "e336f6c501a424c6e016b3244b094d5924d06b320cb659aaa0adb647ab5a9fd6",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.walk/out/settings.d.ts": {
-        "version": "07924b2c69a8f7019f242fbb1d9363b98731456d8afc791fc0622c91f60598b7",
-        "signature": "07924b2c69a8f7019f242fbb1d9363b98731456d8afc791fc0622c91f60598b7",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.walk/out/readers/reader.d.ts": {
-        "version": "b8576d89cac43fe52489662c1218b463cba5197c3bec501e2832f5663327838d",
-        "signature": "b8576d89cac43fe52489662c1218b463cba5197c3bec501e2832f5663327838d",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.walk/out/readers/async.d.ts": {
-        "version": "e7a91ba8f4fa3f6d166235d9c94fc01d3b055fc4a16bc18dcf0c5c1e0491f22b",
-        "signature": "e7a91ba8f4fa3f6d166235d9c94fc01d3b055fc4a16bc18dcf0c5c1e0491f22b",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.walk/out/providers/async.d.ts": {
-        "version": "51d7fcd7672c0f53f01c84e5ea8ef5f3947e8a385807de7eecdc0b7464c2dd68",
-        "signature": "51d7fcd7672c0f53f01c84e5ea8ef5f3947e8a385807de7eecdc0b7464c2dd68",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@nodelib/fs.walk/out/index.d.ts": {
-        "version": "96892cc7ee950d2bbded6dc7f03ff50a719df54f6529aa938ce3854fef04ee2a",
-        "signature": "96892cc7ee950d2bbded6dc7f03ff50a719df54f6529aa938ce3854fef04ee2a",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/fast-glob/out/types/index.d.ts": {
-        "version": "4498108732bcb5b7000ff9cdc011058b4155e985271ac3f926468acfed0c79dd",
-        "signature": "4498108732bcb5b7000ff9cdc011058b4155e985271ac3f926468acfed0c79dd",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/fast-glob/out/settings.d.ts": {
-        "version": "36d7b72ed8f35f9e21cc223c06697eca0d4699178fc59cfd3a310e2983fd0fd6",
-        "signature": "36d7b72ed8f35f9e21cc223c06697eca0d4699178fc59cfd3a310e2983fd0fd6",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/fast-glob/out/managers/tasks.d.ts": {
-        "version": "8ef499f8b856beca668333ffd33b7a29a83641cbe18c9ad8f25d2748efdf4f0f",
-        "signature": "8ef499f8b856beca668333ffd33b7a29a83641cbe18c9ad8f25d2748efdf4f0f",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/fast-glob/out/index.d.ts": {
-        "version": "51bfe35171efe121cefb2501a6cd674c367d541c4c8b0ae639c126adcc84f37d",
-        "signature": "51bfe35171efe121cefb2501a6cd674c367d541c4c8b0ae639c126adcc84f37d",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/globby/index.d.ts": {
-        "version": "a93850a7116629f9ff482871d44c1b348aa708cbb3be3beece2bc1be2ac01b47",
-        "signature": "a93850a7116629f9ff482871d44c1b348aa708cbb3be3beece2bc1be2ac01b47",
-        "affectsGlobalScope": false
-      },
-      "./src/services/docsParser.ts": {
-        "version": "c8af76d170c60bc109db2dfe6bfb89aa0b43a46d2fb8fa479d527c539004f7a7",
-        "signature": "79ec5df879e0f47c4c00d7084dab37a950f43747ac7548a41c448e77816d9c0a",
-        "affectsGlobalScope": false
-      },
-      "./src/services/docsLibrary.ts": {
-        "version": "ac54e886d54ca01673893efe18e2cc762295490c72a87d1c6a3abc9afd9ee889",
-        "signature": "a81374c51b5a9d9c71ac59627261aed94fecb22cc270e89d4be663fce5a56d98",
-        "affectsGlobalScope": false
-      },
-      "./src/utils/docsFormatter.ts": {
-        "version": "b7c19dca9097453c1468dcf5b407792e1444ebe49be732821c0f0ec5d032ef08",
-        "signature": "bfaa86d7710e8c00f4de05c8e52eb4423fbdb7e0eee94b4566d6f303e1c56258",
-        "affectsGlobalScope": false
-      },
-      "./src/utils/yaml.ts": {
-        "version": "e7229bad0d8fa268dc41db7678f17a962572e2b89ec3133d8ed54d9a7087be48",
-        "signature": "2fbbddee69fe9b287bdb5a20cf755bcda34c3cf8414ef341556120999a46a185",
-        "affectsGlobalScope": false
-      },
-      "./src/providers/completionProvider.ts": {
-        "version": "e97cad1c96a6efef88279a477a64231c55406b13197e4822d976f495398247d4",
-        "signature": "4f1dd15211c12749867e92b42be33b473fce62af8e1d5785d2003d2475b405c9",
-        "affectsGlobalScope": false
-      },
-      "./src/providers/definitionProvider.ts": {
-        "version": "c5324bd7383f1700a3b0807aa01f52a99508629dbfd109eb61a8a392b314b69d",
-        "signature": "1565a5530090b634c238a8e11c0622dfaa1914892166b3380d66b6af2ea11b2a",
-        "affectsGlobalScope": false
-      },
-      "./src/providers/hoverProvider.ts": {
-        "version": "e9020a7f8103b766976d8cdfb6a60847d3cf5a1bbc6bff97b185b60481eae770",
-        "signature": "25256b5067eaf84637e6dd0e282dd089c82a55eeee1bf060d2b14878ded5b86e",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@flatten-js/interval-tree/index.d.ts": {
-        "version": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59",
-        "signature": "bf7c29e7a08abac0ce48ae320749c8122a095d5bf0206168040caad4b7508b59",
-        "affectsGlobalScope": false
-      },
-      "./src/providers/validationProvider.ts": {
-        "version": "dc6fc5c1c8bd9a825666fb94a90782729be955a0357693a233684f9f33e90112",
-        "signature": "f3360d2bdd3e9199b55bca984df20071810c51097a8a96fb0ee33b6a1abb0b63",
-        "affectsGlobalScope": false
-      },
-      "./src/server.ts": {
-        "version": "41577690d9664d2f2a3fd48d9f90489ca5f68eb258d2374b9dd4c3cd1cad5244",
-        "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/chai/index.d.ts": {
-        "version": "267813ae499a9c070ea61bca2d235e31e785181d967e4461719cbcc78a35abfe",
-        "signature": "267813ae499a9c070ea61bca2d235e31e785181d967e4461719cbcc78a35abfe",
-        "affectsGlobalScope": true
-      },
-      "./src/test/utils/yaml.test.ts": {
-        "version": "40badc2c4283c43ecfba4d3248db9618f6f1755eea77f52eca6f5a6125071a2d",
-        "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",
-        "affectsGlobalScope": false
-      },
-      "./node_modules/@types/mocha/index.d.ts": {
-        "version": "d8cebc259915afa4b2c56b7efcb8056739ec65f4479c1b880ff668eb98654ae7",
-        "signature": "d8cebc259915afa4b2c56b7efcb8056739ec65f4479c1b880ff668eb98654ae7",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/eslint/helpers.d.ts": {
-        "version": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46",
-        "signature": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46",
-        "affectsGlobalScope": true
-      },
-      "../node_modules/@types/eslint/lib/rules/index.d.ts": {
-        "version": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0",
-        "signature": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/json-schema/index.d.ts": {
-        "version": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27",
-        "signature": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/estree/index.d.ts": {
-        "version": "745a853d60bf782583a58584f59e202cae5c7a898b0c92696442602a3ef17a87",
-        "signature": "745a853d60bf782583a58584f59e202cae5c7a898b0c92696442602a3ef17a87",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/eslint/index.d.ts": {
-        "version": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c",
-        "signature": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/eslint-scope/index.d.ts": {
-        "version": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed",
-        "signature": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed",
-        "affectsGlobalScope": false
-      },
-      "../node_modules/@types/vscode/index.d.ts": {
-        "version": "0d2ae25abaa1163188d256f0c438a274459099c30c44aa3be144c9c1232f4081",
-        "signature": "0d2ae25abaa1163188d256f0c438a274459099c30c44aa3be144c9c1232f4081",
-        "affectsGlobalScope": true
-      }
-    },
-    "options": {
-      "composite": true,
-      "target": 6,
-      "lib": [
-        "lib.es2019.d.ts"
-      ],
-      "module": 1,
-      "moduleResolution": 2,
-      "outDir": "./out",
-      "rootDir": "./src",
-      "sourceMap": true,
-      "strict": true,
-      "watch": true,
-      "configFilePath": "./tsconfig.json"
-    },
-    "referencedMap": {
-      "../node_modules/@types/eslint-scope/index.d.ts": [
-        "../node_modules/@types/eslint/index.d.ts",
-        "../node_modules/@types/estree/index.d.ts"
-      ],
-      "../node_modules/@types/eslint/index.d.ts": [
-        "../node_modules/@types/eslint/helpers.d.ts",
-        "../node_modules/@types/eslint/lib/rules/index.d.ts",
-        "../node_modules/@types/estree/index.d.ts",
-        "../node_modules/@types/json-schema/index.d.ts"
-      ],
-      "../node_modules/@types/eslint/lib/rules/index.d.ts": [
-        "../node_modules/@types/eslint/index.d.ts"
-      ],
-      "../node_modules/@types/node/assert.d.ts": [
-        "../node_modules/@types/node/assert.d.ts"
-      ],
-      "../node_modules/@types/node/async_hooks.d.ts": [
-        "../node_modules/@types/node/async_hooks.d.ts"
-      ],
-      "../node_modules/@types/node/base.d.ts": [
-        "../node_modules/@types/node/assert.d.ts",
-        "../node_modules/@types/node/ts3.6/base.d.ts"
-      ],
-      "../node_modules/@types/node/buffer.d.ts": [
-        "../node_modules/@types/node/buffer.d.ts"
-      ],
-      "../node_modules/@types/node/child_process.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts"
-      ],
-      "../node_modules/@types/node/cluster.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/cluster.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/net.d.ts"
-      ],
-      "../node_modules/@types/node/console.d.ts": [
-        "../node_modules/@types/node/util.d.ts"
-      ],
-      "../node_modules/@types/node/constants.d.ts": [
-        "../node_modules/@types/node/constants.d.ts",
-        "../node_modules/@types/node/crypto.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/os.d.ts"
-      ],
-      "../node_modules/@types/node/crypto.d.ts": [
-        "../node_modules/@types/node/crypto.d.ts",
-        "../node_modules/@types/node/stream.d.ts"
-      ],
-      "../node_modules/@types/node/dgram.d.ts": [
-        "../node_modules/@types/node/dgram.d.ts",
-        "../node_modules/@types/node/dns.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/net.d.ts"
-      ],
-      "../node_modules/@types/node/dns.d.ts": [
-        "../node_modules/@types/node/dns.d.ts"
-      ],
-      "../node_modules/@types/node/domain.d.ts": [
-        "../node_modules/@types/node/domain.d.ts",
-        "../node_modules/@types/node/events.d.ts"
-      ],
-      "../node_modules/@types/node/events.d.ts": [
-        "../node_modules/@types/node/events.d.ts"
-      ],
-      "../node_modules/@types/node/fs.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/url.d.ts"
-      ],
-      "../node_modules/@types/node/fs/promises.d.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts"
-      ],
-      "../node_modules/@types/node/http.d.ts": [
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/url.d.ts"
-      ],
-      "../node_modules/@types/node/http2.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/http2.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "../node_modules/@types/node/url.d.ts"
-      ],
-      "../node_modules/@types/node/https.d.ts": [
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/https.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "../node_modules/@types/node/url.d.ts"
-      ],
-      "../node_modules/@types/node/index.d.ts": [
-        "../node_modules/@types/node/base.d.ts"
-      ],
-      "../node_modules/@types/node/inspector.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/inspector.d.ts"
-      ],
-      "../node_modules/@types/node/module.d.ts": [
-        "../node_modules/@types/node/module.d.ts",
-        "../node_modules/@types/node/url.d.ts"
-      ],
-      "../node_modules/@types/node/net.d.ts": [
-        "../node_modules/@types/node/dns.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts"
-      ],
-      "../node_modules/@types/node/os.d.ts": [
-        "../node_modules/@types/node/os.d.ts"
-      ],
-      "../node_modules/@types/node/path.d.ts": [
-        "../node_modules/@types/node/path.d.ts"
-      ],
-      "../node_modules/@types/node/perf_hooks.d.ts": [
-        "../node_modules/@types/node/async_hooks.d.ts",
-        "../node_modules/@types/node/perf_hooks.d.ts"
-      ],
-      "../node_modules/@types/node/process.d.ts": [
-        "../node_modules/@types/node/tty.d.ts"
-      ],
-      "../node_modules/@types/node/punycode.d.ts": [
-        "../node_modules/@types/node/punycode.d.ts"
-      ],
-      "../node_modules/@types/node/querystring.d.ts": [
-        "../node_modules/@types/node/querystring.d.ts"
-      ],
-      "../node_modules/@types/node/readline.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/readline.d.ts"
-      ],
-      "../node_modules/@types/node/repl.d.ts": [
-        "../node_modules/@types/node/readline.d.ts",
-        "../node_modules/@types/node/repl.d.ts",
-        "../node_modules/@types/node/util.d.ts",
-        "../node_modules/@types/node/vm.d.ts"
-      ],
-      "../node_modules/@types/node/stream.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/stream.d.ts"
-      ],
-      "../node_modules/@types/node/string_decoder.d.ts": [
-        "../node_modules/@types/node/string_decoder.d.ts"
-      ],
-      "../node_modules/@types/node/timers.d.ts": [
-        "../node_modules/@types/node/timers.d.ts"
-      ],
-      "../node_modules/@types/node/tls.d.ts": [
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/tls.d.ts"
-      ],
-      "../node_modules/@types/node/trace_events.d.ts": [
-        "../node_modules/@types/node/trace_events.d.ts"
-      ],
-      "../node_modules/@types/node/ts3.4/base.d.ts": [
-        "../node_modules/@types/node/async_hooks.d.ts",
-        "../node_modules/@types/node/buffer.d.ts",
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/cluster.d.ts",
-        "../node_modules/@types/node/console.d.ts",
-        "../node_modules/@types/node/constants.d.ts",
-        "../node_modules/@types/node/crypto.d.ts",
-        "../node_modules/@types/node/dgram.d.ts",
-        "../node_modules/@types/node/dns.d.ts",
-        "../node_modules/@types/node/domain.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "../node_modules/@types/node/globals.d.ts",
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/http2.d.ts",
-        "../node_modules/@types/node/https.d.ts",
-        "../node_modules/@types/node/inspector.d.ts",
-        "../node_modules/@types/node/module.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/os.d.ts",
-        "../node_modules/@types/node/path.d.ts",
-        "../node_modules/@types/node/perf_hooks.d.ts",
-        "../node_modules/@types/node/process.d.ts",
-        "../node_modules/@types/node/punycode.d.ts",
-        "../node_modules/@types/node/querystring.d.ts",
-        "../node_modules/@types/node/readline.d.ts",
-        "../node_modules/@types/node/repl.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/string_decoder.d.ts",
-        "../node_modules/@types/node/timers.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "../node_modules/@types/node/trace_events.d.ts",
-        "../node_modules/@types/node/tty.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "../node_modules/@types/node/util.d.ts",
-        "../node_modules/@types/node/v8.d.ts",
-        "../node_modules/@types/node/vm.d.ts",
-        "../node_modules/@types/node/worker_threads.d.ts",
-        "../node_modules/@types/node/zlib.d.ts"
-      ],
-      "../node_modules/@types/node/ts3.6/base.d.ts": [
-        "../node_modules/@types/node/globals.global.d.ts",
-        "../node_modules/@types/node/ts3.4/base.d.ts",
-        "../node_modules/@types/node/wasi.d.ts"
-      ],
-      "../node_modules/@types/node/tty.d.ts": [
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/tty.d.ts"
-      ],
-      "../node_modules/@types/node/url.d.ts": [
-        "../node_modules/@types/node/querystring.d.ts",
-        "../node_modules/@types/node/url.d.ts"
-      ],
-      "../node_modules/@types/node/util.d.ts": [
-        "../node_modules/@types/node/util.d.ts"
-      ],
-      "../node_modules/@types/node/v8.d.ts": [
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/v8.d.ts"
-      ],
-      "../node_modules/@types/node/vm.d.ts": [
-        "../node_modules/@types/node/vm.d.ts"
-      ],
-      "../node_modules/@types/node/wasi.d.ts": [
-        "../node_modules/@types/node/wasi.d.ts"
-      ],
-      "../node_modules/@types/node/worker_threads.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "../node_modules/@types/node/vm.d.ts",
-        "../node_modules/@types/node/worker_threads.d.ts"
-      ],
-      "../node_modules/@types/node/zlib.d.ts": [
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/zlib.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.scandir/out/index.d.ts": [
-        "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/providers/async.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.scandir/out/providers/async.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.scandir/out/settings.d.ts": [
-        "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts",
-        "./node_modules/@nodelib/fs.stat/out/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.stat/out/index.d.ts": [
-        "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts",
-        "./node_modules/@nodelib/fs.stat/out/providers/async.d.ts",
-        "./node_modules/@nodelib/fs.stat/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.stat/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.stat/out/providers/async.d.ts": [
-        "./node_modules/@nodelib/fs.stat/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.stat/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.stat/out/settings.d.ts": [
-        "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.stat/out/types/index.d.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.walk/out/index.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/index.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/providers/async.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.walk/out/providers/async.d.ts": [
-        "./node_modules/@nodelib/fs.walk/out/readers/async.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.walk/out/readers/async.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/index.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/readers/reader.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.walk/out/readers/reader.d.ts": [
-        "./node_modules/@nodelib/fs.walk/out/settings.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.walk/out/settings.d.ts": [
-        "./node_modules/@nodelib/fs.scandir/out/index.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.walk/out/types/index.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/array.d.ts": [
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/collection.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/common.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/date.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/function.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/lang.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/math.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/number.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/object.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/seq.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/string.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/util.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/index.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts"
-      ],
-      "./node_modules/fast-glob/out/index.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/fast-glob/out/managers/tasks.d.ts",
-        "./node_modules/fast-glob/out/settings.d.ts",
-        "./node_modules/fast-glob/out/types/index.d.ts"
-      ],
-      "./node_modules/fast-glob/out/managers/tasks.d.ts": [
-        "./node_modules/fast-glob/out/settings.d.ts",
-        "./node_modules/fast-glob/out/types/index.d.ts"
-      ],
-      "./node_modules/fast-glob/out/settings.d.ts": [
-        "./node_modules/fast-glob/out/types/index.d.ts"
-      ],
-      "./node_modules/fast-glob/out/types/index.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/index.d.ts"
-      ],
-      "./node_modules/globby/index.d.ts": [
-        "./node_modules/fast-glob/out/index.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-        "./node_modules/vscode-jsonrpc/typings/thenable.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/index.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/node.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/node/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/vscode-jsonrpc/node.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/node.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/api.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/progress.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/configuration.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/moniker.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/progress.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/server.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/configuration.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/moniker.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/progress.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/node/main.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/vscode-languageserver-protocol/node.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts",
-        "./node_modules/vscode-languageserver/lib/node/files.d.ts",
-        "./node_modules/vscode-languageserver/typings/thenable.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/node.d.ts": [
-        "./node_modules/vscode-languageserver/lib/node/main.d.ts"
-      ],
-      "./node_modules/yaml/index.d.ts": [
-        "./node_modules/yaml/parse-cst.d.ts",
-        "./node_modules/yaml/types.d.ts",
-        "./node_modules/yaml/util.d.ts"
-      ],
-      "./node_modules/yaml/parse-cst.d.ts": [
-        "./node_modules/yaml/util.d.ts"
-      ],
-      "./node_modules/yaml/types.d.ts": [
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/parse-cst.d.ts",
-        "./node_modules/yaml/util.d.ts"
-      ],
-      "./node_modules/yaml/util.d.ts": [
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/parse-cst.d.ts",
-        "./node_modules/yaml/types.d.ts"
-      ],
-      "./src/interfaces/context.ts": [
-        "./src/interfaces/documentMeta.ts",
-        "./src/services/ansibleConfig.ts"
-      ],
-      "./src/providers/completionProvider.ts": [
-        "./node_modules/@types/lodash/index.d.ts",
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/types.d.ts",
-        "./src/services/docsLibrary.ts",
-        "./src/utils/docsFormatter.ts",
-        "./src/utils/yaml.ts"
-      ],
-      "./src/providers/definitionProvider.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/types.d.ts",
-        "./src/services/docsLibrary.ts",
-        "./src/utils/misc.ts",
-        "./src/utils/yaml.ts"
-      ],
-      "./src/providers/hoverProvider.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/types.d.ts",
-        "./src/services/docsLibrary.ts",
-        "./src/utils/docsFormatter.ts",
-        "./src/utils/misc.ts",
-        "./src/utils/yaml.ts"
-      ],
-      "./src/providers/validationProvider.ts": [
-        "./node_modules/@flatten-js/interval-tree/index.d.ts",
-        "./node_modules/@types/lodash/index.d.ts",
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./node_modules/yaml/index.d.ts"
-      ],
-      "./src/server.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/node.d.ts",
-        "./src/interfaces/context.ts",
-        "./src/interfaces/documentMeta.ts",
-        "./src/providers/completionProvider.ts",
-        "./src/providers/definitionProvider.ts",
-        "./src/providers/hoverProvider.ts",
-        "./src/providers/validationProvider.ts",
-        "./src/services/ansibleConfig.ts",
-        "./src/services/docsLibrary.ts",
-        "./src/utils/misc.ts"
-      ],
-      "./src/services/ansibleConfig.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/path.d.ts",
-        "./node_modules/@types/ini/index.d.ts",
-        "./node_modules/@types/lodash/index.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts"
-      ],
-      "./src/services/docsLibrary.ts": [
-        "./node_modules/@types/lodash/index.d.ts",
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./node_modules/yaml/util.d.ts",
-        "./src/interfaces/context.ts",
-        "./src/services/docsParser.ts",
-        "./src/utils/misc.ts"
-      ],
-      "./src/services/docsParser.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/path.d.ts",
-        "./node_modules/globby/index.d.ts",
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/util.d.ts",
-        "./src/services/docsLibrary.ts"
-      ],
-      "./src/test/utils/yaml.test.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/path.d.ts",
-        "./node_modules/@types/chai/index.d.ts",
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/types.d.ts",
-        "./src/utils/yaml.ts"
-      ],
-      "./src/utils/docsFormatter.ts": [
-        "../node_modules/@types/node/util.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./src/services/docsLibrary.ts"
-      ],
-      "./src/utils/misc.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts",
-        "./node_modules/yaml/index.d.ts",
-        "./src/interfaces/documentMeta.ts"
-      ],
-      "./src/utils/yaml.ts": [
-        "./node_modules/@types/lodash/index.d.ts",
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/types.d.ts"
-      ]
-    },
-    "exportedModulesMap": {
-      "../node_modules/@types/eslint-scope/index.d.ts": [
-        "../node_modules/@types/eslint/index.d.ts",
-        "../node_modules/@types/estree/index.d.ts"
-      ],
-      "../node_modules/@types/eslint/index.d.ts": [
-        "../node_modules/@types/eslint/helpers.d.ts",
-        "../node_modules/@types/eslint/lib/rules/index.d.ts",
-        "../node_modules/@types/estree/index.d.ts",
-        "../node_modules/@types/json-schema/index.d.ts"
-      ],
-      "../node_modules/@types/eslint/lib/rules/index.d.ts": [
-        "../node_modules/@types/eslint/index.d.ts"
-      ],
-      "../node_modules/@types/node/assert.d.ts": [
-        "../node_modules/@types/node/assert.d.ts"
-      ],
-      "../node_modules/@types/node/async_hooks.d.ts": [
-        "../node_modules/@types/node/async_hooks.d.ts"
-      ],
-      "../node_modules/@types/node/base.d.ts": [
-        "../node_modules/@types/node/assert.d.ts",
-        "../node_modules/@types/node/ts3.6/base.d.ts"
-      ],
-      "../node_modules/@types/node/buffer.d.ts": [
-        "../node_modules/@types/node/buffer.d.ts"
-      ],
-      "../node_modules/@types/node/child_process.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts"
-      ],
-      "../node_modules/@types/node/cluster.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/cluster.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/net.d.ts"
-      ],
-      "../node_modules/@types/node/console.d.ts": [
-        "../node_modules/@types/node/util.d.ts"
-      ],
-      "../node_modules/@types/node/constants.d.ts": [
-        "../node_modules/@types/node/constants.d.ts",
-        "../node_modules/@types/node/crypto.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/os.d.ts"
-      ],
-      "../node_modules/@types/node/crypto.d.ts": [
-        "../node_modules/@types/node/crypto.d.ts",
-        "../node_modules/@types/node/stream.d.ts"
-      ],
-      "../node_modules/@types/node/dgram.d.ts": [
-        "../node_modules/@types/node/dgram.d.ts",
-        "../node_modules/@types/node/dns.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/net.d.ts"
-      ],
-      "../node_modules/@types/node/dns.d.ts": [
-        "../node_modules/@types/node/dns.d.ts"
-      ],
-      "../node_modules/@types/node/domain.d.ts": [
-        "../node_modules/@types/node/domain.d.ts",
-        "../node_modules/@types/node/events.d.ts"
-      ],
-      "../node_modules/@types/node/events.d.ts": [
-        "../node_modules/@types/node/events.d.ts"
-      ],
-      "../node_modules/@types/node/fs.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/url.d.ts"
-      ],
-      "../node_modules/@types/node/fs/promises.d.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts"
-      ],
-      "../node_modules/@types/node/http.d.ts": [
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/url.d.ts"
-      ],
-      "../node_modules/@types/node/http2.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/http2.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "../node_modules/@types/node/url.d.ts"
-      ],
-      "../node_modules/@types/node/https.d.ts": [
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/https.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "../node_modules/@types/node/url.d.ts"
-      ],
-      "../node_modules/@types/node/index.d.ts": [
-        "../node_modules/@types/node/base.d.ts"
-      ],
-      "../node_modules/@types/node/inspector.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/inspector.d.ts"
-      ],
-      "../node_modules/@types/node/module.d.ts": [
-        "../node_modules/@types/node/module.d.ts",
-        "../node_modules/@types/node/url.d.ts"
-      ],
-      "../node_modules/@types/node/net.d.ts": [
-        "../node_modules/@types/node/dns.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/stream.d.ts"
-      ],
-      "../node_modules/@types/node/os.d.ts": [
-        "../node_modules/@types/node/os.d.ts"
-      ],
-      "../node_modules/@types/node/path.d.ts": [
-        "../node_modules/@types/node/path.d.ts"
-      ],
-      "../node_modules/@types/node/perf_hooks.d.ts": [
-        "../node_modules/@types/node/async_hooks.d.ts",
-        "../node_modules/@types/node/perf_hooks.d.ts"
-      ],
-      "../node_modules/@types/node/process.d.ts": [
-        "../node_modules/@types/node/tty.d.ts"
-      ],
-      "../node_modules/@types/node/punycode.d.ts": [
-        "../node_modules/@types/node/punycode.d.ts"
-      ],
-      "../node_modules/@types/node/querystring.d.ts": [
-        "../node_modules/@types/node/querystring.d.ts"
-      ],
-      "../node_modules/@types/node/readline.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/readline.d.ts"
-      ],
-      "../node_modules/@types/node/repl.d.ts": [
-        "../node_modules/@types/node/readline.d.ts",
-        "../node_modules/@types/node/repl.d.ts",
-        "../node_modules/@types/node/util.d.ts",
-        "../node_modules/@types/node/vm.d.ts"
-      ],
-      "../node_modules/@types/node/stream.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/stream.d.ts"
-      ],
-      "../node_modules/@types/node/string_decoder.d.ts": [
-        "../node_modules/@types/node/string_decoder.d.ts"
-      ],
-      "../node_modules/@types/node/timers.d.ts": [
-        "../node_modules/@types/node/timers.d.ts"
-      ],
-      "../node_modules/@types/node/tls.d.ts": [
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/tls.d.ts"
-      ],
-      "../node_modules/@types/node/trace_events.d.ts": [
-        "../node_modules/@types/node/trace_events.d.ts"
-      ],
-      "../node_modules/@types/node/ts3.4/base.d.ts": [
-        "../node_modules/@types/node/async_hooks.d.ts",
-        "../node_modules/@types/node/buffer.d.ts",
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/cluster.d.ts",
-        "../node_modules/@types/node/console.d.ts",
-        "../node_modules/@types/node/constants.d.ts",
-        "../node_modules/@types/node/crypto.d.ts",
-        "../node_modules/@types/node/dgram.d.ts",
-        "../node_modules/@types/node/dns.d.ts",
-        "../node_modules/@types/node/domain.d.ts",
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "../node_modules/@types/node/globals.d.ts",
-        "../node_modules/@types/node/http.d.ts",
-        "../node_modules/@types/node/http2.d.ts",
-        "../node_modules/@types/node/https.d.ts",
-        "../node_modules/@types/node/inspector.d.ts",
-        "../node_modules/@types/node/module.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/os.d.ts",
-        "../node_modules/@types/node/path.d.ts",
-        "../node_modules/@types/node/perf_hooks.d.ts",
-        "../node_modules/@types/node/process.d.ts",
-        "../node_modules/@types/node/punycode.d.ts",
-        "../node_modules/@types/node/querystring.d.ts",
-        "../node_modules/@types/node/readline.d.ts",
-        "../node_modules/@types/node/repl.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/string_decoder.d.ts",
-        "../node_modules/@types/node/timers.d.ts",
-        "../node_modules/@types/node/tls.d.ts",
-        "../node_modules/@types/node/trace_events.d.ts",
-        "../node_modules/@types/node/tty.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "../node_modules/@types/node/util.d.ts",
-        "../node_modules/@types/node/v8.d.ts",
-        "../node_modules/@types/node/vm.d.ts",
-        "../node_modules/@types/node/worker_threads.d.ts",
-        "../node_modules/@types/node/zlib.d.ts"
-      ],
-      "../node_modules/@types/node/ts3.6/base.d.ts": [
-        "../node_modules/@types/node/globals.global.d.ts",
-        "../node_modules/@types/node/ts3.4/base.d.ts",
-        "../node_modules/@types/node/wasi.d.ts"
-      ],
-      "../node_modules/@types/node/tty.d.ts": [
-        "../node_modules/@types/node/net.d.ts",
-        "../node_modules/@types/node/tty.d.ts"
-      ],
-      "../node_modules/@types/node/url.d.ts": [
-        "../node_modules/@types/node/querystring.d.ts",
-        "../node_modules/@types/node/url.d.ts"
-      ],
-      "../node_modules/@types/node/util.d.ts": [
-        "../node_modules/@types/node/util.d.ts"
-      ],
-      "../node_modules/@types/node/v8.d.ts": [
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/v8.d.ts"
-      ],
-      "../node_modules/@types/node/vm.d.ts": [
-        "../node_modules/@types/node/vm.d.ts"
-      ],
-      "../node_modules/@types/node/wasi.d.ts": [
-        "../node_modules/@types/node/wasi.d.ts"
-      ],
-      "../node_modules/@types/node/worker_threads.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/fs/promises.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/url.d.ts",
-        "../node_modules/@types/node/vm.d.ts",
-        "../node_modules/@types/node/worker_threads.d.ts"
-      ],
-      "../node_modules/@types/node/zlib.d.ts": [
-        "../node_modules/@types/node/stream.d.ts",
-        "../node_modules/@types/node/zlib.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.scandir/out/index.d.ts": [
-        "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/providers/async.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.scandir/out/providers/async.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.scandir/out/settings.d.ts": [
-        "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts",
-        "./node_modules/@nodelib/fs.stat/out/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.stat/out/index.d.ts": [
-        "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts",
-        "./node_modules/@nodelib/fs.stat/out/providers/async.d.ts",
-        "./node_modules/@nodelib/fs.stat/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.stat/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.stat/out/providers/async.d.ts": [
-        "./node_modules/@nodelib/fs.stat/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.stat/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.stat/out/settings.d.ts": [
-        "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.stat/out/types/index.d.ts": [
-        "../node_modules/@types/node/fs.d.ts",
-        "../node_modules/@types/node/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.walk/out/index.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "../node_modules/@types/node/stream.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/index.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/providers/async.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.walk/out/providers/async.d.ts": [
-        "./node_modules/@nodelib/fs.walk/out/readers/async.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.walk/out/readers/async.d.ts": [
-        "../node_modules/@types/node/events.d.ts",
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/index.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/readers/reader.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/settings.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.walk/out/readers/reader.d.ts": [
-        "./node_modules/@nodelib/fs.walk/out/settings.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.walk/out/settings.d.ts": [
-        "./node_modules/@nodelib/fs.scandir/out/index.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/types/index.d.ts"
-      ],
-      "./node_modules/@nodelib/fs.walk/out/types/index.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/@nodelib/fs.scandir/out/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/array.d.ts": [
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/collection.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/common.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/date.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/function.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/lang.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/math.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/number.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/object.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/seq.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/string.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/common/util.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/index.d.ts"
-      ],
-      "./node_modules/@types/lodash/index.d.ts": [
-        "./node_modules/@types/lodash/common/array.d.ts",
-        "./node_modules/@types/lodash/common/collection.d.ts",
-        "./node_modules/@types/lodash/common/common.d.ts",
-        "./node_modules/@types/lodash/common/date.d.ts",
-        "./node_modules/@types/lodash/common/function.d.ts",
-        "./node_modules/@types/lodash/common/lang.d.ts",
-        "./node_modules/@types/lodash/common/math.d.ts",
-        "./node_modules/@types/lodash/common/number.d.ts",
-        "./node_modules/@types/lodash/common/object.d.ts",
-        "./node_modules/@types/lodash/common/seq.d.ts",
-        "./node_modules/@types/lodash/common/string.d.ts",
-        "./node_modules/@types/lodash/common/util.d.ts"
-      ],
-      "./node_modules/fast-glob/out/index.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/fast-glob/out/managers/tasks.d.ts",
-        "./node_modules/fast-glob/out/settings.d.ts",
-        "./node_modules/fast-glob/out/types/index.d.ts"
-      ],
-      "./node_modules/fast-glob/out/managers/tasks.d.ts": [
-        "./node_modules/fast-glob/out/settings.d.ts",
-        "./node_modules/fast-glob/out/types/index.d.ts"
-      ],
-      "./node_modules/fast-glob/out/settings.d.ts": [
-        "./node_modules/fast-glob/out/types/index.d.ts"
-      ],
-      "./node_modules/fast-glob/out/types/index.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/@nodelib/fs.walk/out/index.d.ts"
-      ],
-      "./node_modules/globby/index.d.ts": [
-        "./node_modules/fast-glob/out/index.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/api.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-        "./node_modules/vscode-jsonrpc/typings/thenable.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/events.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/lib/node/main.d.ts": [
-        "../node_modules/@types/node/child_process.d.ts",
-        "../node_modules/@types/node/index.d.ts",
-        "../node_modules/@types/node/net.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts"
-      ],
-      "./node_modules/vscode-jsonrpc/node.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/node/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts": [
-        "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/vscode-jsonrpc/node.d.ts",
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts"
-      ],
-      "./node_modules/vscode-languageserver-protocol/node.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/api.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/progress.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/configuration.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/moniker.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/progress.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/server.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/configuration.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/moniker.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/progress.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts": [
-        "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/lib/node/main.d.ts": [
-        "../node_modules/@types/node/index.d.ts",
-        "./node_modules/vscode-languageserver-protocol/node.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/server.d.ts",
-        "./node_modules/vscode-languageserver/lib/node/files.d.ts",
-        "./node_modules/vscode-languageserver/typings/thenable.d.ts"
-      ],
-      "./node_modules/vscode-languageserver/node.d.ts": [
-        "./node_modules/vscode-languageserver/lib/node/main.d.ts"
-      ],
-      "./node_modules/yaml/index.d.ts": [
-        "./node_modules/yaml/parse-cst.d.ts",
-        "./node_modules/yaml/types.d.ts",
-        "./node_modules/yaml/util.d.ts"
-      ],
-      "./node_modules/yaml/parse-cst.d.ts": [
-        "./node_modules/yaml/util.d.ts"
-      ],
-      "./node_modules/yaml/types.d.ts": [
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/parse-cst.d.ts",
-        "./node_modules/yaml/util.d.ts"
-      ],
-      "./node_modules/yaml/util.d.ts": [
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/parse-cst.d.ts",
-        "./node_modules/yaml/types.d.ts"
-      ],
-      "./src/interfaces/context.ts": [
-        "./src/interfaces/documentMeta.ts",
-        "./src/services/ansibleConfig.ts"
-      ],
-      "./src/providers/completionProvider.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./src/services/docsLibrary.ts"
-      ],
-      "./src/providers/definitionProvider.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./src/services/docsLibrary.ts"
-      ],
-      "./src/providers/hoverProvider.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./src/services/docsLibrary.ts"
-      ],
-      "./src/providers/validationProvider.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts"
-      ],
-      "./src/services/ansibleConfig.ts": [
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts"
-      ],
-      "./src/services/docsLibrary.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./node_modules/yaml/util.d.ts",
-        "./src/interfaces/context.ts"
-      ],
-      "./src/services/docsParser.ts": [
-        "./node_modules/yaml/util.d.ts",
-        "./src/services/docsLibrary.ts"
-      ],
-      "./src/utils/docsFormatter.ts": [
-        "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-        "./src/services/docsLibrary.ts"
-      ],
-      "./src/utils/misc.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts",
-        "./src/interfaces/documentMeta.ts"
-      ],
-      "./src/utils/yaml.ts": [
-        "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-        "./node_modules/yaml/index.d.ts",
-        "./node_modules/yaml/types.d.ts"
-      ]
-    },
-    "semanticDiagnosticsPerFile": [
-      "../node_modules/@types/eslint-scope/index.d.ts",
-      "../node_modules/@types/eslint/helpers.d.ts",
-      "../node_modules/@types/eslint/index.d.ts",
-      "../node_modules/@types/eslint/lib/rules/index.d.ts",
-      "../node_modules/@types/estree/index.d.ts",
-      "../node_modules/@types/json-schema/index.d.ts",
-      "../node_modules/@types/node/assert.d.ts",
-      "../node_modules/@types/node/async_hooks.d.ts",
-      "../node_modules/@types/node/base.d.ts",
-      "../node_modules/@types/node/buffer.d.ts",
-      "../node_modules/@types/node/child_process.d.ts",
-      "../node_modules/@types/node/cluster.d.ts",
-      "../node_modules/@types/node/console.d.ts",
-      "../node_modules/@types/node/constants.d.ts",
-      "../node_modules/@types/node/crypto.d.ts",
-      "../node_modules/@types/node/dgram.d.ts",
-      "../node_modules/@types/node/dns.d.ts",
-      "../node_modules/@types/node/domain.d.ts",
-      "../node_modules/@types/node/events.d.ts",
-      "../node_modules/@types/node/fs.d.ts",
-      "../node_modules/@types/node/fs/promises.d.ts",
-      "../node_modules/@types/node/globals.d.ts",
-      "../node_modules/@types/node/globals.global.d.ts",
-      "../node_modules/@types/node/http.d.ts",
-      "../node_modules/@types/node/http2.d.ts",
-      "../node_modules/@types/node/https.d.ts",
-      "../node_modules/@types/node/index.d.ts",
-      "../node_modules/@types/node/inspector.d.ts",
-      "../node_modules/@types/node/module.d.ts",
-      "../node_modules/@types/node/net.d.ts",
-      "../node_modules/@types/node/os.d.ts",
-      "../node_modules/@types/node/path.d.ts",
-      "../node_modules/@types/node/perf_hooks.d.ts",
-      "../node_modules/@types/node/process.d.ts",
-      "../node_modules/@types/node/punycode.d.ts",
-      "../node_modules/@types/node/querystring.d.ts",
-      "../node_modules/@types/node/readline.d.ts",
-      "../node_modules/@types/node/repl.d.ts",
-      "../node_modules/@types/node/stream.d.ts",
-      "../node_modules/@types/node/string_decoder.d.ts",
-      "../node_modules/@types/node/timers.d.ts",
-      "../node_modules/@types/node/tls.d.ts",
-      "../node_modules/@types/node/trace_events.d.ts",
-      "../node_modules/@types/node/ts3.4/base.d.ts",
-      "../node_modules/@types/node/ts3.6/base.d.ts",
-      "../node_modules/@types/node/tty.d.ts",
-      "../node_modules/@types/node/url.d.ts",
-      "../node_modules/@types/node/util.d.ts",
-      "../node_modules/@types/node/v8.d.ts",
-      "../node_modules/@types/node/vm.d.ts",
-      "../node_modules/@types/node/wasi.d.ts",
-      "../node_modules/@types/node/worker_threads.d.ts",
-      "../node_modules/@types/node/zlib.d.ts",
-      "../node_modules/@types/vscode/index.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.collection.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.core.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.generator.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.iterable.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.promise.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.proxy.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.reflect.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.symbol.d.ts",
-      "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts",
-      "../node_modules/typescript/lib/lib.es2016.array.include.d.ts",
-      "../node_modules/typescript/lib/lib.es2016.d.ts",
-      "../node_modules/typescript/lib/lib.es2017.d.ts",
-      "../node_modules/typescript/lib/lib.es2017.intl.d.ts",
-      "../node_modules/typescript/lib/lib.es2017.object.d.ts",
-      "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts",
-      "../node_modules/typescript/lib/lib.es2017.string.d.ts",
-      "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts",
-      "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts",
-      "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts",
-      "../node_modules/typescript/lib/lib.es2018.d.ts",
-      "../node_modules/typescript/lib/lib.es2018.intl.d.ts",
-      "../node_modules/typescript/lib/lib.es2018.promise.d.ts",
-      "../node_modules/typescript/lib/lib.es2018.regexp.d.ts",
-      "../node_modules/typescript/lib/lib.es2019.array.d.ts",
-      "../node_modules/typescript/lib/lib.es2019.d.ts",
-      "../node_modules/typescript/lib/lib.es2019.object.d.ts",
-      "../node_modules/typescript/lib/lib.es2019.string.d.ts",
-      "../node_modules/typescript/lib/lib.es2019.symbol.d.ts",
-      "../node_modules/typescript/lib/lib.es2020.bigint.d.ts",
-      "../node_modules/typescript/lib/lib.es5.d.ts",
-      "../node_modules/typescript/lib/lib.esnext.intl.d.ts",
-      "./node_modules/@flatten-js/interval-tree/index.d.ts",
-      "./node_modules/@nodelib/fs.scandir/out/adapters/fs.d.ts",
-      "./node_modules/@nodelib/fs.scandir/out/index.d.ts",
-      "./node_modules/@nodelib/fs.scandir/out/providers/async.d.ts",
-      "./node_modules/@nodelib/fs.scandir/out/settings.d.ts",
-      "./node_modules/@nodelib/fs.scandir/out/types/index.d.ts",
-      "./node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts",
-      "./node_modules/@nodelib/fs.stat/out/index.d.ts",
-      "./node_modules/@nodelib/fs.stat/out/providers/async.d.ts",
-      "./node_modules/@nodelib/fs.stat/out/settings.d.ts",
-      "./node_modules/@nodelib/fs.stat/out/types/index.d.ts",
-      "./node_modules/@nodelib/fs.walk/out/index.d.ts",
-      "./node_modules/@nodelib/fs.walk/out/providers/async.d.ts",
-      "./node_modules/@nodelib/fs.walk/out/readers/async.d.ts",
-      "./node_modules/@nodelib/fs.walk/out/readers/reader.d.ts",
-      "./node_modules/@nodelib/fs.walk/out/settings.d.ts",
-      "./node_modules/@nodelib/fs.walk/out/types/index.d.ts",
-      "./node_modules/@types/chai/index.d.ts",
-      "./node_modules/@types/ini/index.d.ts",
-      "./node_modules/@types/lodash/common/array.d.ts",
-      "./node_modules/@types/lodash/common/collection.d.ts",
-      "./node_modules/@types/lodash/common/common.d.ts",
-      "./node_modules/@types/lodash/common/date.d.ts",
-      "./node_modules/@types/lodash/common/function.d.ts",
-      "./node_modules/@types/lodash/common/lang.d.ts",
-      "./node_modules/@types/lodash/common/math.d.ts",
-      "./node_modules/@types/lodash/common/number.d.ts",
-      "./node_modules/@types/lodash/common/object.d.ts",
-      "./node_modules/@types/lodash/common/seq.d.ts",
-      "./node_modules/@types/lodash/common/string.d.ts",
-      "./node_modules/@types/lodash/common/util.d.ts",
-      "./node_modules/@types/lodash/index.d.ts",
-      "./node_modules/@types/mocha/index.d.ts",
-      "./node_modules/fast-glob/out/index.d.ts",
-      "./node_modules/fast-glob/out/managers/tasks.d.ts",
-      "./node_modules/fast-glob/out/settings.d.ts",
-      "./node_modules/fast-glob/out/types/index.d.ts",
-      "./node_modules/globby/index.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/api.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/cancellation.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/connection.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/disposable.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/encoding.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/events.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/messageReader.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/messageWriter.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/messages.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/common/ral.d.ts",
-      "./node_modules/vscode-jsonrpc/lib/node/main.d.ts",
-      "./node_modules/vscode-jsonrpc/node.d.ts",
-      "./node_modules/vscode-jsonrpc/typings/thenable.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/api.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/connection.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/messages.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.d.ts",
-      "./node_modules/vscode-languageserver-protocol/lib/node/main.d.ts",
-      "./node_modules/vscode-languageserver-protocol/node.d.ts",
-      "./node_modules/vscode-languageserver-textdocument/lib/umd/main.d.ts",
-      "./node_modules/vscode-languageserver-types/lib/umd/main.d.ts",
-      "./node_modules/vscode-languageserver/lib/common/api.d.ts",
-      "./node_modules/vscode-languageserver/lib/common/callHierarchy.d.ts",
-      "./node_modules/vscode-languageserver/lib/common/configuration.d.ts",
-      "./node_modules/vscode-languageserver/lib/common/fileOperations.d.ts",
-      "./node_modules/vscode-languageserver/lib/common/linkedEditingRange.d.ts",
-      "./node_modules/vscode-languageserver/lib/common/moniker.d.ts",
-      "./node_modules/vscode-languageserver/lib/common/progress.d.ts",
-      "./node_modules/vscode-languageserver/lib/common/semanticTokens.d.ts",
-      "./node_modules/vscode-languageserver/lib/common/server.d.ts",
-      "./node_modules/vscode-languageserver/lib/common/showDocument.d.ts",
-      "./node_modules/vscode-languageserver/lib/common/workspaceFolders.d.ts",
-      "./node_modules/vscode-languageserver/lib/node/files.d.ts",
-      "./node_modules/vscode-languageserver/lib/node/main.d.ts",
-      "./node_modules/vscode-languageserver/node.d.ts",
-      "./node_modules/vscode-languageserver/typings/thenable.d.ts",
-      "./node_modules/yaml/index.d.ts",
-      "./node_modules/yaml/parse-cst.d.ts",
-      "./node_modules/yaml/types.d.ts",
-      "./node_modules/yaml/util.d.ts",
-      "./src/interfaces/context.ts",
-      "./src/interfaces/documentMeta.ts",
-      "./src/providers/completionProvider.ts",
-      "./src/providers/definitionProvider.ts",
-      "./src/providers/hoverProvider.ts",
-      "./src/providers/validationProvider.ts",
-      "./src/server.ts",
-      "./src/services/ansibleConfig.ts",
-      "./src/services/docsLibrary.ts",
-      "./src/services/docsParser.ts",
-      "./src/test/utils/yaml.test.ts",
-      "./src/utils/docsFormatter.ts",
-      "./src/utils/misc.ts",
-      "./src/utils/yaml.ts"
-    ]
-  },
-  "version": "4.1.5"
-}
\ No newline at end of file
diff --git a/src/extension.ts b/src/extension.ts
deleted file mode 100644
index 45dcc6f3e..000000000
--- a/src/extension.ts
+++ /dev/null
@@ -1,254 +0,0 @@
-import IntervalTree from '@flatten-js/interval-tree';
-import { performance } from 'perf_hooks';
-import * as vscode from 'vscode';
-import { parseAllDocuments } from 'yaml';
-import { Node, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
-
-const tokenTypes = ['method'];
-
-const tokenModifiers = ['defaultLibrary'];
-
-const keywords = new Set([
-  'action',
-  'always',
-  'any_errors_fatal',
-  'args',
-  'async',
-  'become',
-  'become_exe',
-  'become_flags',
-  'become_method',
-  'become_user',
-  'block',
-  'changed_when',
-  'check_mode',
-  'collections',
-  'connection',
-  'debugger',
-  'delay',
-  'delegate_facts',
-  'delegate_to',
-  'diff',
-  'environment',
-  'extended',
-  'fact_path',
-  'failed_when',
-  'force_handlers',
-  'gather_facts',
-  'gather_subset',
-  'gather_timeout',
-  'handlers',
-  'hosts',
-  'ignore_errors',
-  'ignore_unreachable',
-  'label',
-  'local_action',
-  'loop',
-  'loop_control',
-  'max_fail_percentage',
-  'module_defaults',
-  'name',
-  'no_log',
-  'notify',
-  'order',
-  'pause',
-  'poll',
-  'port',
-  'post_tasks',
-  'pre_tasks',
-  'register',
-  'remote_user',
-  'rescue',
-  'retries',
-  'roles',
-  'run_once',
-  'serial',
-  'strategy',
-  'tags',
-  'tasks',
-  'throttle',
-  'timeout',
-  'until',
-  'vars',
-  'vars_files',
-  'vars_prompt',
-  'when',
-]);
-
-const withKeywords = /^with_[a-z_]+$/;
-
-const legend = new vscode.SemanticTokensLegend(tokenTypes, tokenModifiers);
-
-export function activate(context: vscode.ExtensionContext): void {
-  context.subscriptions.push(
-    vscode.languages.registerDocumentSemanticTokensProvider(
-      { language: 'ansible' },
-      new DocumentSemanticTokensProvider(),
-      legend
-    )
-  );
-  const collection = vscode.languages.createDiagnosticCollection('ansible');
-  context.subscriptions.push(collection);
-
-  if (vscode.window.activeTextEditor) {
-    updateDiagnostics(vscode.window.activeTextEditor.document, collection);
-  }
-  context.subscriptions.push(
-    vscode.window.onDidChangeActiveTextEditor((editor) => {
-      if (editor) {
-        updateDiagnostics(editor.document, collection);
-      }
-    })
-  );
-  context.subscriptions.push(
-    vscode.workspace.onDidChangeTextDocument((editor) => {
-      updateDiagnostics(editor.document, collection);
-    })
-  );
-  context.subscriptions.push(
-    vscode.workspace.onDidOpenTextDocument((doc) => {
-      updateDiagnostics(doc, collection);
-    })
-  );
-  context.subscriptions.push(
-    vscode.workspace.onDidCloseTextDocument((doc) => {
-      collection.delete(doc.uri);
-    })
-  );
-}
-
-function updateDiagnostics(
-  document: vscode.TextDocument,
-  collection: vscode.DiagnosticCollection
-): void {
-  if (document && document.languageId === 'ansible') {
-    const yDocuments = parseAllDocuments(document.getText(), {
-      prettyErrors: false,
-    });
-    const diagnostics: vscode.Diagnostic[] = [];
-    const rangeTree = new IntervalTree();
-    yDocuments.forEach((yDoc) => {
-      yDoc.errors.forEach((error) => {
-        const errorRange = error.range || error.source?.range;
-        let range;
-        if (errorRange) {
-          const start = document.positionAt(errorRange.start);
-          const end = document.positionAt(errorRange.end);
-          range = new vscode.Range(start, end);
-
-          let severity;
-          switch (error.name) {
-            case 'YAMLReferenceError':
-            case 'YAMLSemanticError':
-            case 'YAMLSyntaxError':
-              severity = vscode.DiagnosticSeverity.Error;
-              break;
-            case 'YAMLWarning':
-              severity = vscode.DiagnosticSeverity.Warning;
-              break;
-            default:
-              severity = vscode.DiagnosticSeverity.Information;
-              break;
-          }
-          rangeTree.insert([errorRange.start, errorRange.end], {
-            message: error.message,
-            range: range || new vscode.Range(0, 0, 0, 0),
-            severity: severity,
-            source: 'Ansible [YAML]',
-          });
-        }
-      });
-    });
-    rangeTree.forEach((range, diag) => {
-      const searchResult = rangeTree.search(range);
-      if (searchResult) {
-        const allRangesAreEqual = searchResult.every(
-          (foundDiag: vscode.Diagnostic) => {
-            // (range start == range end) in case it has already been collapsed
-            return (
-              foundDiag.range.start == foundDiag.range.end ||
-              foundDiag.range.isEqual(diag.range)
-            );
-          }
-        );
-        if (!allRangesAreEqual) {
-          // Prevent large error scopes hiding/obscuring other error scopes
-          // In YAML this is very common in case of syntax errors
-          const range = diag.range;
-          diag.relatedInformation = [
-            new vscode.DiagnosticRelatedInformation(
-              new vscode.Location(
-                document.uri,
-                range.with(range.end, undefined)
-              ),
-              'the scope of this error ends here'
-            ),
-          ];
-          // collapse the range
-          diag.range = range.with(undefined, range.start);
-        }
-      }
-      diagnostics.push(diag);
-    });
-    collection.set(document.uri, diagnostics);
-  } else {
-    collection.clear();
-  }
-}
-
-interface IParsedToken {
-  line: number;
-  startCharacter: number;
-  length: number;
-  tokenType: string;
-  tokenModifiers: string[];
-}
-
-// Makes Ansible keyword tags distinct from other tags
-class DocumentSemanticTokensProvider
-  implements vscode.DocumentSemanticTokensProvider {
-  async provideDocumentSemanticTokens(
-    document: vscode.TextDocument,
-    token: vscode.CancellationToken
-  ): Promise {
-    const builder = new vscode.SemanticTokensBuilder(legend);
-    const start = performance.now();
-    const yDocuments = parseAllDocuments(document.getText());
-    yDocuments.forEach((yDoc) => {
-      this._markKeywords(yDoc.contents, builder, document);
-    });
-    const stop = performance.now();
-    return builder.build();
-  }
-
-  private _markKeywords(
-    node: Node | null,
-    builder: vscode.SemanticTokensBuilder,
-    document: vscode.TextDocument,
-    context: Node[] = []
-  ) {
-    if (node instanceof YAMLMap) {
-      node.items.forEach((pair) => {
-        const key: Node | null = pair.key;
-        if (
-          key instanceof Scalar &&
-          (keywords.has(key.value) || withKeywords.test(key.value))
-        ) {
-          const parent = context[context.length - 1];
-          if (parent && parent instanceof YAMLSeq && key.range) {
-            const startPosition = document.positionAt(key.range[0]);
-            const length = key.range[1] - key.range[0];
-            const endPosition = startPosition.translate(0, length);
-            const range = new vscode.Range(startPosition, endPosition);
-            builder.push(range, 'method', ['defaultLibrary']);
-          }
-        }
-        this._markKeywords(pair.value, builder, document, context.concat(node));
-      });
-    } else if (node instanceof YAMLSeq) {
-      node.items.forEach((item: Node | null) =>
-        this._markKeywords(item, builder, document, context.concat(node))
-      );
-    }
-  }
-}

From 3995fd0688982ddc0ff4f66dec2d4fa64abef2c2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Fri, 2 Apr 2021 11:54:45 +0200
Subject: [PATCH 031/558] Added collection definition discovery to
 DocsLibrary.findModule

Refactored most of the server into a service
Refactored test data
---
 server/src/ansibleLanguageService.ts          | 197 +++++++++++++++++
 server/src/interfaces/context.ts              |   2 +
 server/src/interfaces/extensionSettings.ts    |   3 +
 server/src/providers/completionProvider.ts    |   6 +-
 server/src/providers/definitionProvider.ts    |   2 +-
 server/src/providers/hoverProvider.ts         |   8 +-
 server/src/server.ts                          | 200 ++----------------
 server/src/services/docsLibrary.ts            |  23 +-
 .../yaml/ancestryBuilder.yml}                 |   0
 .../yaml/getDeclaredCollections.yml}          |   8 +
 server/src/test/utils/yaml.test.ts            |  66 +++---
 server/src/utils/yaml.ts                      |   4 +-
 12 files changed, 290 insertions(+), 229 deletions(-)
 create mode 100644 server/src/ansibleLanguageService.ts
 create mode 100644 server/src/interfaces/extensionSettings.ts
 rename server/src/test/data/{utils.block.yml => utils/yaml/ancestryBuilder.yml} (100%)
 rename server/src/test/data/{utils.playbook.yml => utils/yaml/getDeclaredCollections.yml} (81%)

diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
new file mode 100644
index 000000000..e7c3fc3ea
--- /dev/null
+++ b/server/src/ansibleLanguageService.ts
@@ -0,0 +1,197 @@
+import {
+  Connection,
+  DidChangeConfigurationNotification,
+  DidChangeWatchedFilesNotification,
+  InitializeParams,
+  InitializeResult,
+  TextDocuments,
+  TextDocumentSyncKind,
+  WorkspaceFolder,
+} from 'vscode-languageserver';
+import { TextDocument } from 'vscode-languageserver-textdocument';
+import { IContext } from './interfaces/context';
+import { IDocumentMetadata } from './interfaces/documentMeta';
+import { ExtensionSettings } from './interfaces/extensionSettings';
+import { doCompletion } from './providers/completionProvider';
+import { getDefinition } from './providers/definitionProvider';
+import { doHover } from './providers/hoverProvider';
+import { doValidate } from './providers/validationProvider';
+import { getAnsibleMetadata } from './utils/misc';
+import { AnsibleConfig } from './services/ansibleConfig';
+import { DocsLibrary } from './services/docsLibrary';
+
+export class AnsibleLanguageService {
+  private connection: Connection;
+  private documents: TextDocuments;
+
+  private rootFolder: WorkspaceFolder | undefined;
+  private hasConfigurationCapability = false;
+  private hasWorkspaceFolderCapability = false;
+  private hasDiagnosticRelatedInformationCapability = false;
+
+  private defaultSettings: ExtensionSettings = { maxNumberOfProblems: 1000 };
+  private globalSettings: ExtensionSettings = this.defaultSettings;
+
+  private docsLibrary: DocsLibrary;
+  private context: IContext;
+  constructor(connection: Connection, documents: TextDocuments) {
+    this.connection = connection;
+    this.documents = documents;
+    this.context = {
+      ansibleConfig: new AnsibleConfig(connection),
+      documentMetadata: new Map(),
+      documentSettings: new Map(),
+    };
+    this.docsLibrary = new DocsLibrary(this.context);
+  }
+
+  public initialize(): void {
+    this.initializeConnection();
+    this.registerLifecycleEventHandlers();
+    this.context.ansibleConfig.initialize();
+    this.docsLibrary.initialize();
+    this.registerProviders();
+  }
+
+  private initializeConnection() {
+    this.connection.onInitialize((params: InitializeParams) => {
+      if (params.workspaceFolders) {
+        this.rootFolder = params.workspaceFolders[0]; //TODO: support multiroot
+      }
+      const capabilities = params.capabilities;
+
+      // Does the client support the `workspace/configuration` request?
+      // If not, we fall back using global settings.
+      this.hasConfigurationCapability = !!(
+        capabilities.workspace && !!capabilities.workspace.configuration
+      );
+      this.hasWorkspaceFolderCapability = !!(
+        capabilities.workspace && !!capabilities.workspace.workspaceFolders
+      );
+      this.hasDiagnosticRelatedInformationCapability = !!(
+        capabilities.textDocument &&
+        capabilities.textDocument.publishDiagnostics &&
+        capabilities.textDocument.publishDiagnostics.relatedInformation
+      );
+
+      const result: InitializeResult = {
+        capabilities: {
+          textDocumentSync: TextDocumentSyncKind.Incremental,
+          hoverProvider: true,
+          // Tell the client that this server supports code completion.
+          completionProvider: {
+            resolveProvider: false,
+          },
+          definitionProvider: true,
+          workspace: {},
+        },
+      };
+      if (this.hasWorkspaceFolderCapability) {
+        result.capabilities.workspace = {
+          workspaceFolders: {
+            supported: true,
+          },
+        };
+      }
+      return result;
+    });
+
+    this.connection.onInitialized(() => {
+      if (this.hasConfigurationCapability) {
+        // Register for all configuration changes.
+        this.connection.client.register(
+          DidChangeConfigurationNotification.type,
+          undefined
+        );
+
+        this.connection.client.register(
+          DidChangeWatchedFilesNotification.type,
+          {
+            watchers: [
+              {
+                globPattern: '',
+              },
+            ],
+          }
+        );
+      }
+      if (this.hasWorkspaceFolderCapability) {
+        this.connection.workspace.onDidChangeWorkspaceFolders((_event) => {
+          this.connection.console.log(
+            'Workspace folder change event received.'
+          );
+        });
+      }
+      this.connection.client;
+    });
+  }
+
+  private registerLifecycleEventHandlers() {
+    this.connection.onDidChangeConfiguration((change) => {
+      if (this.hasConfigurationCapability) {
+        // Reset all cached document settings
+        this.context.documentSettings.clear();
+      } else {
+        this.globalSettings = (
+          (change.settings.languageServerExample || this.defaultSettings)
+        );
+      }
+
+      // Revalidate all open text documents
+      this.documents.all().forEach((doc) => {
+        this.connection.sendDiagnostics({
+          uri: doc.uri,
+          diagnostics: doValidate(doc),
+        });
+      });
+    });
+
+    this.documents.onDidOpen((e) => {
+      this.context.documentMetadata.set(
+        e.document.uri,
+        getAnsibleMetadata(e.document.uri)
+      );
+    });
+
+    // Only keep settings for open documents
+    this.documents.onDidClose((e) => {
+      this.context.documentSettings.delete(e.document.uri);
+      this.context.documentMetadata.delete(e.document.uri);
+    });
+
+    this.connection.onDidChangeWatchedFiles((_change) => {
+      // Monitored files have change in VSCode
+      this.connection.console.log('We received a file change event');
+    });
+  }
+
+  private registerProviders() {
+    this.documents.onDidChangeContent((change) => {
+      this.connection.sendDiagnostics({
+        uri: change.document.uri,
+        diagnostics: doValidate(change.document),
+      });
+    });
+    this.connection.onHover((params) => {
+      const document = this.documents.get(params.textDocument.uri);
+      if (document) {
+        return doHover(document, params.position, this.docsLibrary);
+      }
+      return null;
+    });
+    this.connection.onCompletion((params) => {
+      const document = this.documents.get(params.textDocument.uri);
+      if (document) {
+        return doCompletion(document, params.position, this.docsLibrary);
+      }
+      return null;
+    });
+    this.connection.onDefinition((params) => {
+      const document = this.documents.get(params.textDocument.uri);
+      if (document) {
+        return getDefinition(document, params.position, this.docsLibrary);
+      }
+      return null;
+    });
+  }
+}
diff --git a/server/src/interfaces/context.ts b/server/src/interfaces/context.ts
index adc86dfe8..d06dfe9ad 100644
--- a/server/src/interfaces/context.ts
+++ b/server/src/interfaces/context.ts
@@ -1,7 +1,9 @@
 import { AnsibleConfig } from '../services/ansibleConfig';
 import { IDocumentMetadata } from './documentMeta';
+import { ExtensionSettings } from './extensionSettings';
 
 export interface IContext {
   ansibleConfig: AnsibleConfig;
   documentMetadata: Map>;
+  documentSettings: Map>;
 }
diff --git a/server/src/interfaces/extensionSettings.ts b/server/src/interfaces/extensionSettings.ts
new file mode 100644
index 000000000..e3bd30720
--- /dev/null
+++ b/server/src/interfaces/extensionSettings.ts
@@ -0,0 +1,3 @@
+export interface ExtensionSettings {
+  maxNumberOfProblems: number;
+}
diff --git a/server/src/providers/completionProvider.ts b/server/src/providers/completionProvider.ts
index 146b81bd5..1969de1c4 100644
--- a/server/src/providers/completionProvider.ts
+++ b/server/src/providers/completionProvider.ts
@@ -37,7 +37,11 @@ export async function doCompletion(
 
       if (modulePath && mayBeModule(modulePath)) {
         const moduleNode = modulePath[modulePath.length - 1] as Scalar;
-        const module = await docsLibrary.findModule(moduleNode.value, document);
+        const module = await docsLibrary.findModule(
+          moduleNode.value,
+          modulePath,
+          document
+        );
         if (module && module.documentation) {
           const moduleOptions = module.documentation.options;
 
diff --git a/server/src/providers/definitionProvider.ts b/server/src/providers/definitionProvider.ts
index 195ce0823..784f2c7af 100644
--- a/server/src/providers/definitionProvider.ts
+++ b/server/src/providers/definitionProvider.ts
@@ -20,7 +20,7 @@ export async function getDefinition(
       new AncestryBuilder(path).parentKey(node.value).get() === node // ensure we look at a key, not value of a Pair
     ) {
       if (mayBeModule(path)) {
-        const module = await docsLibrary.findModule(node.value, document);
+        const module = await docsLibrary.findModule(node.value, path, document);
         if (module) {
           return [
             {
diff --git a/server/src/providers/hoverProvider.ts b/server/src/providers/hoverProvider.ts
index a2d3700da..d28b667e6 100644
--- a/server/src/providers/hoverProvider.ts
+++ b/server/src/providers/hoverProvider.ts
@@ -21,7 +21,7 @@ export async function doHover(
       new AncestryBuilder(path).parentKey(node.value).get() === node // ensure we look at a key, not value of a Pair
     ) {
       if (mayBeModule(path)) {
-        const module = await docsLibrary.findModule(node.value, document);
+        const module = await docsLibrary.findModule(node.value, path, document);
         if (module && module.documentation) {
           return {
             contents: formatModule(module.documentation),
@@ -37,7 +37,11 @@ export async function doHover(
 
       if (modulePath && mayBeModule(modulePath)) {
         const moduleNode = modulePath[modulePath.length - 1] as Scalar;
-        const module = await docsLibrary.findModule(moduleNode.value, document);
+        const module = await docsLibrary.findModule(
+          moduleNode.value,
+          modulePath,
+          document
+        );
         if (module && module.documentation) {
           const option = module.documentation.options.get(node.value);
           if (option) {
diff --git a/server/src/server.ts b/server/src/server.ts
index 4cc98a38a..ed1a90024 100644
--- a/server/src/server.ts
+++ b/server/src/server.ts
@@ -1,23 +1,10 @@
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import {
   createConnection,
-  DidChangeConfigurationNotification,
-  InitializeParams,
-  InitializeResult,
   ProposedFeatures,
   TextDocuments,
-  TextDocumentSyncKind,
-  WorkspaceFolder,
 } from 'vscode-languageserver/node';
-import { AnsibleConfig } from './services/ansibleConfig';
-import { doCompletion } from './providers/completionProvider';
-import { IContext } from './interfaces/context';
-import { getDefinition } from './providers/definitionProvider';
-import { DocsLibrary } from './services/docsLibrary';
-import { IDocumentMetadata } from './interfaces/documentMeta';
-import { doHover } from './providers/hoverProvider';
-import { getAnsibleMetadata } from './utils/misc';
-import { doValidate } from './providers/validationProvider';
+import { AnsibleLanguageService } from './ansibleLanguageService';
 
 // Create a connection for the server, using Node's IPC as a transport.
 // Also include all preview / proposed LSP features.
@@ -26,177 +13,26 @@ const connection = createConnection(ProposedFeatures.all);
 // Create a simple text document manager.
 const documents: TextDocuments = new TextDocuments(TextDocument);
 
-let rootFolder: WorkspaceFolder | undefined;
-let hasConfigurationCapability = false;
-let hasWorkspaceFolderCapability = false;
-let hasDiagnosticRelatedInformationCapability = false;
-
-connection.onInitialize((params: InitializeParams) => {
-  if (params.workspaceFolders) {
-    rootFolder = params.workspaceFolders[0]; //TODO: support multiroot
-  }
-  const capabilities = params.capabilities;
-
-  // Does the client support the `workspace/configuration` request?
-  // If not, we fall back using global settings.
-  hasConfigurationCapability = !!(
-    capabilities.workspace && !!capabilities.workspace.configuration
-  );
-  hasWorkspaceFolderCapability = !!(
-    capabilities.workspace && !!capabilities.workspace.workspaceFolders
-  );
-  hasDiagnosticRelatedInformationCapability = !!(
-    capabilities.textDocument &&
-    capabilities.textDocument.publishDiagnostics &&
-    capabilities.textDocument.publishDiagnostics.relatedInformation
-  );
-
-  const result: InitializeResult = {
-    capabilities: {
-      textDocumentSync: TextDocumentSyncKind.Incremental,
-      hoverProvider: true,
-      // Tell the client that this server supports code completion.
-      completionProvider: {
-        resolveProvider: false,
-      },
-      definitionProvider: true,
-    },
-  };
-  if (hasWorkspaceFolderCapability) {
-    result.capabilities.workspace = {
-      workspaceFolders: {
-        supported: true,
-      },
-    };
-  }
-  return result;
-});
-
-connection.onInitialized(() => {
-  if (hasConfigurationCapability) {
-    // Register for all configuration changes.
-    connection.client.register(
-      DidChangeConfigurationNotification.type,
-      undefined
-    );
-  }
-  if (hasWorkspaceFolderCapability) {
-    connection.workspace.onDidChangeWorkspaceFolders((_event) => {
-      connection.console.log('Workspace folder change event received.');
-    });
-  }
-  connection.client;
-});
-
-// The example settings
-interface ExampleSettings {
-  maxNumberOfProblems: number;
-}
-
-// The global settings, used when the `workspace/configuration` request is not supported by the client.
-// Please note that this is not the case when using this server with the client provided in this example
-// but could happen with other clients.
-const defaultSettings: ExampleSettings = { maxNumberOfProblems: 1000 };
-let globalSettings: ExampleSettings = defaultSettings;
-
-// Cache the settings of all open documents
-const documentSettings: Map> = new Map();
-const documentMetadata: Map> = new Map();
-
-connection.onDidChangeConfiguration((change) => {
-  if (hasConfigurationCapability) {
-    // Reset all cached document settings
-    documentSettings.clear();
-  } else {
-    globalSettings = (
-      (change.settings.languageServerExample || defaultSettings)
-    );
-  }
-
-  // Revalidate all open text documents
-  documents.all().forEach((doc) => {
-    connection.sendDiagnostics({
-      uri: doc.uri,
-      diagnostics: doValidate(doc),
-    });
-  });
-});
-
-function getDocumentSettings(resource: string): Thenable {
-  if (!hasConfigurationCapability) {
-    return Promise.resolve(globalSettings);
-  }
-  let result = documentSettings.get(resource);
-  if (!result) {
-    result = connection.workspace.getConfiguration({
-      scopeUri: resource,
-      section: 'languageServerExample',
-    });
-    documentSettings.set(resource, result);
-  }
-  return result;
-}
-
-documents.onDidOpen((e) => {
-  documentMetadata.set(e.document.uri, getAnsibleMetadata(e.document.uri));
-});
-
-// Only keep settings for open documents
-documents.onDidClose((e) => {
-  documentSettings.delete(e.document.uri);
-  documentMetadata.delete(e.document.uri);
-});
-
-// The content of a text document has changed. This event is emitted
-// when the text document first opened or when its content has changed.
-documents.onDidChangeContent((change) => {
-  connection.sendDiagnostics({
-    uri: change.document.uri,
-    diagnostics: doValidate(change.document),
-  });
-});
-
-connection.onDidChangeWatchedFiles((_change) => {
-  // Monitored files have change in VSCode
-  connection.console.log('We received a file change event');
-});
-
-const ansibleConfig = new AnsibleConfig(connection);
-ansibleConfig.initialize();
-
-const context: IContext = {
-  ansibleConfig: ansibleConfig,
-  documentMetadata: documentMetadata,
-};
-
-const docsLibrary = new DocsLibrary(context, rootFolder);
-docsLibrary.initialize().then(() => {
-  connection.onHover((params) => {
-    const document = documents.get(params.textDocument.uri);
-    if (document) {
-      return doHover(document, params.position, docsLibrary);
-    }
-    return null;
-  });
-  connection.onCompletion((params) => {
-    const document = documents.get(params.textDocument.uri);
-    if (document) {
-      return doCompletion(document, params.position, docsLibrary);
-    }
-    return null;
-  });
-  connection.onDefinition((params) => {
-    const document = documents.get(params.textDocument.uri);
-    if (document) {
-      return getDefinition(document, params.position, docsLibrary);
-    }
-    return null;
-  });
-});
+// function getDocumentSettings(resource: string): Thenable {
+//   if (!hasConfigurationCapability) {
+//     return Promise.resolve(globalSettings);
+//   }
+//   let result = documentSettings.get(resource);
+//   if (!result) {
+//     result = connection.workspace.getConfiguration({
+//       scopeUri: resource,
+//       section: 'languageServerExample',
+//     });
+//     documentSettings.set(resource, result);
+//   }
+//   return result;
+// }
+
+const context = new AnsibleLanguageService(connection, documents);
+context.initialize();
 
 // Make the text document manager listen on the connection
 // for open, change and close text document events
 documents.listen(connection);
-
 // Listen on the connection
 connection.listen();
diff --git a/server/src/services/docsLibrary.ts b/server/src/services/docsLibrary.ts
index e24dadd50..8a0d14a18 100644
--- a/server/src/services/docsLibrary.ts
+++ b/server/src/services/docsLibrary.ts
@@ -1,19 +1,19 @@
 import * as _ from 'lodash';
 import { WorkspaceFolder } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
+import { Node } from 'yaml/types';
 import { YAMLError } from 'yaml/util';
 import { IContext } from '../interfaces/context';
 import { hasOwnProperty, isObject } from '../utils/misc';
+import { getDeclaredCollections } from '../utils/yaml';
 import { DocsParser } from './docsParser';
 export class DocsLibrary {
   private modules = new Map();
   private docFragments = new Map();
   private context: IContext;
-  private workspace: WorkspaceFolder | undefined;
 
-  constructor(context: IContext, workspace?: WorkspaceFolder) {
+  constructor(context: IContext) {
     this.context = context;
-    this.workspace = workspace;
   }
 
   public async initialize(): Promise {
@@ -50,6 +50,7 @@ export class DocsLibrary {
 
   public async findModule(
     searchText: string,
+    contextPath: Node[],
     doc: TextDocument
   ): Promise {
     const prefixOptions = [
@@ -61,6 +62,9 @@ export class DocsLibrary {
       // try searching declared collections
       prefixOptions.push(...metadata.collections.map((s) => `${s}.`));
     }
+    prefixOptions.push(
+      ...getDeclaredCollections(contextPath).map((s) => `${s}.`)
+    );
     const prefix = prefixOptions.find((prefix) =>
       this.modules.has(prefix + searchText)
     );
@@ -185,19 +189,6 @@ export class DocsLibrary {
     }
     return options;
   }
-
-  public async getModuleDescription(
-    module: string,
-    doc: TextDocument
-  ): Promise {
-    const contents = (await this.findModule(module, doc))?.rawDocumentation;
-    if (
-      hasOwnProperty(contents, 'description') &&
-      (contents.description instanceof Array || // won't check if all elements are string
-        typeof contents.description === 'string')
-    )
-      return contents.description;
-  }
 }
 
 export type IDescription = string | Array;
diff --git a/server/src/test/data/utils.block.yml b/server/src/test/data/utils/yaml/ancestryBuilder.yml
similarity index 100%
rename from server/src/test/data/utils.block.yml
rename to server/src/test/data/utils/yaml/ancestryBuilder.yml
diff --git a/server/src/test/data/utils.playbook.yml b/server/src/test/data/utils/yaml/getDeclaredCollections.yml
similarity index 81%
rename from server/src/test/data/utils.playbook.yml
rename to server/src/test/data/utils/yaml/getDeclaredCollections.yml
index 4381d09b4..e2b137333 100644
--- a/server/src/test/data/utils.playbook.yml
+++ b/server/src/test/data/utils/yaml/getDeclaredCollections.yml
@@ -22,6 +22,14 @@
             - name: Task3 name
               mymodule3:
                 option1: value1
+      rescue:
+        - name: Rescue task
+          mymodule2:
+            option1: value1
+      always:
+        - name: Always task
+          mymodule2:
+            option1: value1
 - name: Play name2
   hosts: localhost
   gather_facts: false
diff --git a/server/src/test/utils/yaml.test.ts b/server/src/test/utils/yaml.test.ts
index 086118c41..842959d79 100644
--- a/server/src/test/utils/yaml.test.ts
+++ b/server/src/test/utils/yaml.test.ts
@@ -12,7 +12,7 @@ import {
 
 async function getYamlDoc(yamlFile: string) {
   const yaml = await fs.readFile(
-    path.resolve('server', 'src', 'test', 'data', yamlFile),
+    path.resolve('server', 'src', 'test', 'data', 'utils', 'yaml', yamlFile),
     {
       encoding: 'utf8',
     }
@@ -35,33 +35,33 @@ async function getPathInFile(
 }
 
 describe('yaml', () => {
-  describe('AncestryBuilder', () => {
+  describe('ancestryBuilder', () => {
     it('canGetParent', async () => {
-      const path = await getPathInFile('utils.block.yml', 4, 7);
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
       const node = new AncestryBuilder(path).parent().get();
       expect(node).to.be.an.instanceOf(YAMLMap);
     });
 
     it('canGetAssertedParent', async () => {
-      const path = await getPathInFile('utils.block.yml', 4, 7);
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
       const node = new AncestryBuilder(path).parent(YAMLMap).get();
       expect(node).to.be.an.instanceOf(YAMLMap);
     });
 
     it('canAssertParent', async () => {
-      const path = await getPathInFile('utils.block.yml', 4, 7);
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
       const node = new AncestryBuilder(path).parent().parent(YAMLMap).get();
-      expect(node).to.be.undefined;
+      expect(node).to.be.null;
     });
 
     it('canGetAncestor', async () => {
-      const path = await getPathInFile('utils.block.yml', 4, 7);
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
       const node = new AncestryBuilder(path).parent().parent().get();
       expect(node).to.be.an.instanceOf(YAMLSeq);
     });
 
     it('canGetKey', async () => {
-      const path = await getPathInFile('utils.block.yml', 4, 7);
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
       const node = new AncestryBuilder(path).parentKey().get();
       expect(node)
         .to.be.an.instanceOf(Scalar)
@@ -69,7 +69,7 @@ describe('yaml', () => {
     });
 
     it('canGetKeyPath', async () => {
-      const path = await getPathInFile('utils.block.yml', 4, 7);
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
       const subPath = new AncestryBuilder(path).parentKey().getPath();
       expect(subPath)
         .to.be.an.instanceOf(Array)
@@ -81,7 +81,7 @@ describe('yaml', () => {
     });
 
     it('canGetAssertedKey', async () => {
-      const path = await getPathInFile('utils.block.yml', 4, 7);
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
       const node = new AncestryBuilder(path).parentKey('name').get();
       expect(node)
         .to.be.an.instanceOf(Scalar)
@@ -89,7 +89,7 @@ describe('yaml', () => {
     });
 
     it('canGetAssertedRegexKey', async () => {
-      const path = await getPathInFile('utils.block.yml', 4, 7);
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
       const node = new AncestryBuilder(path).parentKey(/^(name|other)$/).get();
       expect(node)
         .to.be.an.instanceOf(Scalar)
@@ -97,19 +97,19 @@ describe('yaml', () => {
     });
 
     it('canAssertKey', async () => {
-      const path = await getPathInFile('utils.block.yml', 4, 7);
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
       const node = new AncestryBuilder(path).parentKey('other').get();
-      expect(node).to.be.undefined;
+      expect(node).to.be.null;
     });
 
     it('canAssertKeyPath', async () => {
-      const path = await getPathInFile('utils.block.yml', 4, 7);
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
       const subPath = new AncestryBuilder(path).parentKey('other').getPath();
-      expect(subPath).to.be.undefined;
+      expect(subPath).to.be.null;
     });
 
     it('canGetAssertedAncestorKey', async () => {
-      const path = await getPathInFile('utils.block.yml', 4, 7);
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
       const node = new AncestryBuilder(path)
         .parent(YAMLMap)
         .parent(YAMLSeq)
@@ -121,7 +121,7 @@ describe('yaml', () => {
     });
 
     it('canGetIndentationParent', async () => {
-      const path = await getPathInFile('utils.block.yml', 7, 9);
+      const path = await getPathInFile('ancestryBuilder.yml', 7, 9);
       const node = new AncestryBuilder(path)
         .parent()
         .parentKey('lineinfile')
@@ -132,7 +132,7 @@ describe('yaml', () => {
     });
 
     it('canGetIndentationParentAtEndOfMap', async () => {
-      const path = await getPathInFile('utils.block.yml', 9, 9);
+      const path = await getPathInFile('ancestryBuilder.yml', 9, 9);
       const node = new AncestryBuilder(path)
         .parent()
         .parentKey('lineinfile')
@@ -143,7 +143,7 @@ describe('yaml', () => {
     });
 
     it('canGetIndentationParentAtEOF', async () => {
-      const path = await getPathInFile('utils.block.yml', 15, 9);
+      const path = await getPathInFile('ancestryBuilder.yml', 15, 9);
       const node = new AncestryBuilder(path)
         .parent()
         .parentKey('lineinfile')
@@ -156,7 +156,7 @@ describe('yaml', () => {
 
   describe('getDeclaredCollections', () => {
     it('canGetCollections', async () => {
-      const path = await getPathInFile('utils.playbook.yml', 13, 7);
+      const path = await getPathInFile('getDeclaredCollections.yml', 13, 7);
       const collections = getDeclaredCollections(path);
       expect(collections).to.have.members([
         'mynamespace.mycollection',
@@ -164,7 +164,7 @@ describe('yaml', () => {
       ]);
     });
     it('canGetCollectionsFromPreTasks', async () => {
-      const path = await getPathInFile('utils.playbook.yml', 9, 7);
+      const path = await getPathInFile('getDeclaredCollections.yml', 9, 7);
       const collections = getDeclaredCollections(path);
       expect(collections).to.have.members([
         'mynamespace.mycollection',
@@ -172,7 +172,7 @@ describe('yaml', () => {
       ]);
     });
     it('canGetCollectionsFromBlock', async () => {
-      const path = await getPathInFile('utils.playbook.yml', 12, 11);
+      const path = await getPathInFile('getDeclaredCollections.yml', 12, 11);
       const collections = getDeclaredCollections(path);
       expect(collections).to.have.members([
         'mynamespace.mycollection',
@@ -180,7 +180,23 @@ describe('yaml', () => {
       ]);
     });
     it('canGetCollectionsFromNestedBlock', async () => {
-      const path = await getPathInFile('utils.playbook.yml', 23, 15);
+      const path = await getPathInFile('getDeclaredCollections.yml', 23, 15);
+      const collections = getDeclaredCollections(path);
+      expect(collections).to.have.members([
+        'mynamespace.mycollection',
+        'mynamespace2.mycollection2',
+      ]);
+    });
+    it('canGetCollectionsFromRescue', async () => {
+      const path = await getPathInFile('getDeclaredCollections.yml', 27, 11);
+      const collections = getDeclaredCollections(path);
+      expect(collections).to.have.members([
+        'mynamespace.mycollection',
+        'mynamespace2.mycollection2',
+      ]);
+    });
+    it('canGetCollectionsFromAlways', async () => {
+      const path = await getPathInFile('getDeclaredCollections.yml', 31, 11);
       const collections = getDeclaredCollections(path);
       expect(collections).to.have.members([
         'mynamespace.mycollection',
@@ -188,12 +204,12 @@ describe('yaml', () => {
       ]);
     });
     it('canWorkWithoutCollections', async () => {
-      const path = await getPathInFile('utils.playbook.yml', 30, 7);
+      const path = await getPathInFile('getDeclaredCollections.yml', 38, 7);
       const collections = getDeclaredCollections(path);
       expect(collections).to.have.members([]);
     });
     it('canWorkWithEmptyCollections', async () => {
-      const path = await getPathInFile('utils.playbook.yml', 38, 7);
+      const path = await getPathInFile('getDeclaredCollections.yml', 46, 7);
       const collections = getDeclaredCollections(path);
       expect(collections).to.have.members([]);
     });
diff --git a/server/src/utils/yaml.ts b/server/src/utils/yaml.ts
index a89c12a15..28ecd14e6 100644
--- a/server/src/utils/yaml.ts
+++ b/server/src/utils/yaml.ts
@@ -50,7 +50,7 @@ export class AncestryBuilder {
   }
 
   get(): Node | null {
-    const node = this._path[this._index];
+    const node = this._path[this._index] || null;
     if (this._returnKey && node instanceof Pair) {
       return node.key;
     }
@@ -175,7 +175,7 @@ export function getDeclaredCollections(modulePath: Node[] | null): string[] {
     blockPath = new AncestryBuilder(blockPath)
       .parent(YAMLMap)
       .parent(YAMLSeq)
-      .parentKey('block')
+      .parentKey(/^block|rescue|always$/)
       .getPath();
   }
   // now we should be at the tasks/pre_tasks/post_tasks level

From e70b58103d5bc4ca81d368dc6d9eb733472686da Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Fri, 2 Apr 2021 14:11:24 +0200
Subject: [PATCH 032/558] Implemented dynamic metadata handling with watchers

---
 server/src/ansibleLanguageService.ts   |  28 +++---
 server/src/interfaces/documentMeta.ts  |   1 +
 server/src/services/metadataLibrary.ts | 122 +++++++++++++++++++++++++
 server/src/utils/misc.ts               |  45 +--------
 4 files changed, 140 insertions(+), 56 deletions(-)
 create mode 100644 server/src/services/metadataLibrary.ts

diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index e7c3fc3ea..046b1707e 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -10,15 +10,14 @@ import {
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { IContext } from './interfaces/context';
-import { IDocumentMetadata } from './interfaces/documentMeta';
 import { ExtensionSettings } from './interfaces/extensionSettings';
 import { doCompletion } from './providers/completionProvider';
 import { getDefinition } from './providers/definitionProvider';
 import { doHover } from './providers/hoverProvider';
 import { doValidate } from './providers/validationProvider';
-import { getAnsibleMetadata } from './utils/misc';
 import { AnsibleConfig } from './services/ansibleConfig';
 import { DocsLibrary } from './services/docsLibrary';
+import { MetadataLibrary } from './services/metadataLibrary';
 
 export class AnsibleLanguageService {
   private connection: Connection;
@@ -34,6 +33,8 @@ export class AnsibleLanguageService {
 
   private docsLibrary: DocsLibrary;
   private context: IContext;
+  private metadataLibrary: MetadataLibrary;
+
   constructor(connection: Connection, documents: TextDocuments) {
     this.connection = connection;
     this.documents = documents;
@@ -43,6 +44,7 @@ export class AnsibleLanguageService {
       documentSettings: new Map(),
     };
     this.docsLibrary = new DocsLibrary(this.context);
+    this.metadataLibrary = new MetadataLibrary(this.context);
   }
 
   public initialize(): void {
@@ -109,7 +111,8 @@ export class AnsibleLanguageService {
           {
             watchers: [
               {
-                globPattern: '',
+                // watch for documentMetadata
+                globPattern: '**/meta/main.{yml,yaml}',
               },
             ],
           }
@@ -146,22 +149,23 @@ export class AnsibleLanguageService {
       });
     });
 
-    this.documents.onDidOpen((e) => {
-      this.context.documentMetadata.set(
-        e.document.uri,
-        getAnsibleMetadata(e.document.uri)
-      );
+    this.documents.onDidOpen(async (e) => {
+      this.metadataLibrary.handleDocumentOpened(e.document.uri);
     });
 
-    // Only keep settings for open documents
     this.documents.onDidClose((e) => {
       this.context.documentSettings.delete(e.document.uri);
-      this.context.documentMetadata.delete(e.document.uri);
+      this.metadataLibrary.handleDocumentClosed(e.document.uri);
+
+      // need to clear the diagnostics, otherwise they remain after changing language
+      this.connection.sendDiagnostics({
+        uri: e.document.uri,
+        diagnostics: [],
+      });
     });
 
     this.connection.onDidChangeWatchedFiles((_change) => {
-      // Monitored files have change in VSCode
-      this.connection.console.log('We received a file change event');
+      this.metadataLibrary.handleWatchedDocumentChange(_change);
     });
   }
 
diff --git a/server/src/interfaces/documentMeta.ts b/server/src/interfaces/documentMeta.ts
index 0a3a1ef89..0ce498194 100644
--- a/server/src/interfaces/documentMeta.ts
+++ b/server/src/interfaces/documentMeta.ts
@@ -1,3 +1,4 @@
 export interface IDocumentMetadata {
+  source: string;
   collections: string[];
 }
diff --git a/server/src/services/metadataLibrary.ts b/server/src/services/metadataLibrary.ts
new file mode 100644
index 000000000..322f7e573
--- /dev/null
+++ b/server/src/services/metadataLibrary.ts
@@ -0,0 +1,122 @@
+import { promises as fs } from 'fs';
+import { URL } from 'url';
+import { DidChangeWatchedFilesParams } from 'vscode-languageserver-protocol';
+import { parseAllDocuments } from 'yaml';
+import { IContext } from '../interfaces/context';
+import { IDocumentMetadata } from '../interfaces/documentMeta';
+import { fileExists, hasOwnProperty } from '../utils/misc';
+export class MetadataLibrary {
+  private context: IContext;
+
+  // maps metadata files (also inexistent) to the documents that use it
+  private metadataUsage: Map> = new Map();
+
+  // maps metadata files to promises of parsed contents
+  private metadata: Map> = new Map();
+
+  constructor(context: IContext) {
+    this.context = context;
+  }
+
+  public handleDocumentOpened(uri: string): void {
+    const metadataUri = this.getAnsibleMetadataUri(uri);
+    if (metadataUri) {
+      const metadataPromise = this.getMetadata(metadataUri);
+      this.context.documentMetadata.set(uri, metadataPromise);
+      this.getMetadataUsage(metadataUri).add(uri);
+    }
+  }
+
+  public handleDocumentClosed(uri: string): void {
+    const metadataUri = this.getAnsibleMetadataUri(uri);
+    if (metadataUri) {
+      this.getMetadataUsage(metadataUri).delete(uri);
+    }
+    this.context.documentMetadata.delete(uri);
+  }
+
+  public handleWatchedDocumentChange(
+    change: DidChangeWatchedFilesParams
+  ): void {
+    for (const fileEvent of change.changes) {
+      if (this.metadata.has(fileEvent.uri)) {
+        // This is one of metadata files that is/has been used. We shall
+        // recreate the contents promise and make it accessible to all documents
+        // that use it.
+        this.metadata.delete(fileEvent.uri);
+        for (const documentUri of this.getMetadataUsage(fileEvent.uri)) {
+          const metadata = this.getMetadata(fileEvent.uri);
+          this.context.documentMetadata.set(documentUri, metadata);
+        }
+      }
+    }
+  }
+
+  /**
+   * Finds a path where the metadata file for a given document should reside.
+   * @param uri The `URI` of the document for which a metadata file path should
+   * be found.
+   * @returns The path or undefined in case the file cannot have any related
+   * metadata file.
+   */
+  private getAnsibleMetadataUri(uri: string): string | undefined {
+    let metaPath;
+    const pathArray = uri.split('/');
+    // Find first
+    for (let index = pathArray.length - 1; index >= 0; index--) {
+      if (pathArray[index] === 'tasks') {
+        metaPath = pathArray
+          .slice(0, index)
+          .concat('meta', 'main.yml')
+          .join('/');
+      }
+    }
+    return metaPath;
+  }
+
+  private getMetadata(metadataUri: string): Thenable {
+    if (!this.metadata.has(metadataUri)) {
+      this.metadata.set(metadataUri, this.readAnsibleMetadata(metadataUri));
+    }
+    return this.metadata.get(metadataUri) as Thenable;
+  }
+
+  private getMetadataUsage(key: string): Set {
+    if (!this.metadataUsage.has(key)) {
+      this.metadataUsage.set(key, new Set());
+    }
+    return this.metadataUsage.get(key) as Set;
+  }
+
+  private async readAnsibleMetadata(
+    metadataUri: string
+  ): Promise {
+    const metadata = {
+      source: metadataUri,
+      collections: new Array(),
+    };
+    if (fileExists(metadataUri)) {
+      try {
+        const metaContents = await fs.readFile(new URL(metadataUri), {
+          encoding: 'utf8',
+        });
+        parseAllDocuments(metaContents).forEach((metaDoc) => {
+          const metaObject: unknown = metaDoc.toJSON();
+          if (
+            hasOwnProperty(metaObject, 'collections') &&
+            metaObject.collections instanceof Array
+          ) {
+            metaObject.collections.forEach((collection) => {
+              if (typeof collection === 'string') {
+                metadata.collections.push(collection);
+              }
+            });
+          }
+        });
+      } catch (error) {
+        //TODO: Log debug
+      }
+    }
+    return metadata;
+  }
+}
diff --git a/server/src/utils/misc.ts b/server/src/utils/misc.ts
index ccc44d770..2e96b9c84 100644
--- a/server/src/utils/misc.ts
+++ b/server/src/utils/misc.ts
@@ -1,54 +1,11 @@
 import { promises as fs } from 'fs';
-import { URL } from 'url';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { Range } from 'vscode-languageserver-types';
-import { parseAllDocuments } from 'yaml';
-import { IDocumentMetadata } from '../interfaces/documentMeta';
 
-async function fileExists(filePath: string): Promise {
+export async function fileExists(filePath: string): Promise {
   return !!(await fs.stat(filePath).catch(() => false));
 }
 
-export async function getAnsibleMetadata(
-  uri: string
-): Promise {
-  let metaPath;
-  // const path = /file:\/\/(.*)/.exec(uri)?.groups
-  const pathArray = uri.split('/');
-  // Find first
-  for (let index = pathArray.length - 1; index >= 0; index--) {
-    if (pathArray[index] === 'tasks') {
-      metaPath = pathArray.slice(0, index).concat('meta', 'main.yml').join('/');
-    }
-  }
-  const metadata = {
-    collections: new Array(),
-  };
-  if (metaPath && fileExists(metaPath)) {
-    try {
-      const metaContents = await fs.readFile(new URL(metaPath), {
-        encoding: 'utf8',
-      });
-      parseAllDocuments(metaContents).forEach((metaDoc) => {
-        const metaObject: unknown = metaDoc.toJSON();
-        if (
-          hasOwnProperty(metaObject, 'collections') &&
-          metaObject.collections instanceof Array
-        ) {
-          metaObject.collections.forEach((collection) => {
-            if (typeof collection === 'string') {
-              metadata.collections.push(collection);
-            }
-          });
-        }
-      });
-    } catch (error) {
-      //TODO: Log debug
-    }
-  }
-  return metadata;
-}
-
 export function toLspRange(
   range: [number, number],
   textDocument: TextDocument

From e95622e21fc4186a7f0070ff0a08e7a4e8572982 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Sat, 3 Apr 2021 00:58:38 +0200
Subject: [PATCH 033/558] WIP: Ansible-lint

---
 server/src/ansibleLanguageService.ts      |  12 +++
 server/src/services/ansibleLint.ts        | 110 ++++++++++++++++++++++
 server/src/services/metadataLibrary.ts    |   2 +
 server/src/test/data/utils/yaml/test.json |  17 ++++
 4 files changed, 141 insertions(+)
 create mode 100644 server/src/services/ansibleLint.ts
 create mode 100644 server/src/test/data/utils/yaml/test.json

diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index 046b1707e..872e7093f 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -16,6 +16,7 @@ import { getDefinition } from './providers/definitionProvider';
 import { doHover } from './providers/hoverProvider';
 import { doValidate } from './providers/validationProvider';
 import { AnsibleConfig } from './services/ansibleConfig';
+import { AnsibleLint } from './services/ansibleLint';
 import { DocsLibrary } from './services/docsLibrary';
 import { MetadataLibrary } from './services/metadataLibrary';
 
@@ -34,6 +35,7 @@ export class AnsibleLanguageService {
   private docsLibrary: DocsLibrary;
   private context: IContext;
   private metadataLibrary: MetadataLibrary;
+  private ansibleLint: AnsibleLint;
 
   constructor(connection: Connection, documents: TextDocuments) {
     this.connection = connection;
@@ -45,6 +47,7 @@ export class AnsibleLanguageService {
     };
     this.docsLibrary = new DocsLibrary(this.context);
     this.metadataLibrary = new MetadataLibrary(this.context);
+    this.ansibleLint = new AnsibleLint(connection);
   }
 
   public initialize(): void {
@@ -170,6 +173,15 @@ export class AnsibleLanguageService {
   }
 
   private registerProviders() {
+    this.documents.onDidSave(async (change) => {
+      const diagnostics = await this.ansibleLint.doValidate(change.document);
+      diagnostics.forEach((fileDiagnostics, fileUri) => {
+        this.connection.sendDiagnostics({
+          uri: fileUri,
+          diagnostics: fileDiagnostics,
+        });
+      });
+    });
     this.documents.onDidChangeContent((change) => {
       this.connection.sendDiagnostics({
         uri: change.document.uri,
diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
new file mode 100644
index 000000000..82112f9b6
--- /dev/null
+++ b/server/src/services/ansibleLint.ts
@@ -0,0 +1,110 @@
+import * as child_process from 'child_process';
+import { ExecException } from 'node:child_process';
+import { URL } from 'url';
+import { promisify } from 'util';
+import {
+  Connection,
+  Diagnostic,
+  DiagnosticSeverity,
+  Position,
+  Range,
+} from 'vscode-languageserver';
+import { TextDocument } from 'vscode-languageserver-textdocument';
+const exec = promisify(child_process.exec);
+
+export class AnsibleLint {
+  private connection: Connection;
+
+  constructor(connection: Connection) {
+    this.connection = connection;
+  }
+
+  public async doValidate(
+    textDocument: TextDocument
+  ): Promise> {
+    const docPath = new URL(textDocument.uri).pathname;
+    let diagnostics: Map = new Map();
+    try {
+      const result = await exec(
+        `ansible-lint --offline --nocolor -f codeclimate ${docPath}`,
+        {
+          encoding: 'utf-8',
+        }
+      );
+      diagnostics = this.processReport(result, textDocument);
+
+      if (result.stderr) {
+        this.connection.console.warn(result.stderr);
+      }
+    } catch (error) {
+      const execError = error as ExecException & StdResult;
+      if (execError.code === 2) {
+        diagnostics = this.processReport(
+          {
+            stdout: execError.stdout,
+            stderr: execError.stderr,
+          },
+          textDocument
+        );
+      } else {
+        this.connection.console.error(error.message);
+      }
+    }
+
+    return diagnostics;
+  }
+
+  private processReport(
+    result: StdResult,
+    textDocument: TextDocument
+  ): Map {
+    const diagnostics: Map = new Map();
+    const report = JSON.parse(result.stdout);
+    if (report instanceof Array) {
+      for (const item of report) {
+        if (
+          typeof item.check_name === 'string' &&
+          item.location &&
+          typeof item.location.path === 'string' &&
+          item.location.lines &&
+          item.location.lines.begin
+        ) {
+          const begin_line =
+            item.location.lines.begin || item.location.lines.begin.line || 1;
+          const begin_column = item.location.lines.begin.column || 1;
+          const start: Position = {
+            line: begin_line - 1,
+            character: begin_column - 1,
+          };
+          const end: Position = {
+            line: begin_line - 1,
+            character: Number.MAX_SAFE_INTEGER,
+          };
+          const range: Range = {
+            start: start,
+            end: end,
+          };
+          if (!diagnostics.has(textDocument.uri)) {
+            diagnostics.set(textDocument.uri, []);
+          }
+          const fileDiagnostics = diagnostics.get(
+            textDocument.uri
+          ) as Diagnostic[];
+
+          fileDiagnostics.push({
+            message: item.check_name,
+            range: range || Range.create(0, 0, 0, 0),
+            severity: DiagnosticSeverity.Error,
+            source: 'Ansible [YAML]',
+          });
+        }
+      }
+    }
+    return diagnostics;
+  }
+}
+
+interface StdResult {
+  stdout: string;
+  stderr: string;
+}
diff --git a/server/src/services/metadataLibrary.ts b/server/src/services/metadataLibrary.ts
index 322f7e573..89d413d94 100644
--- a/server/src/services/metadataLibrary.ts
+++ b/server/src/services/metadataLibrary.ts
@@ -62,6 +62,8 @@ export class MetadataLibrary {
   private getAnsibleMetadataUri(uri: string): string | undefined {
     let metaPath;
     const pathArray = uri.split('/');
+
+    // const path = /file:\/\/(.*)/.exec(uri)?.groups
     // Find first
     for (let index = pathArray.length - 1; index >= 0; index--) {
       if (pathArray[index] === 'tasks') {
diff --git a/server/src/test/data/utils/yaml/test.json b/server/src/test/data/utils/yaml/test.json
new file mode 100644
index 000000000..3637f130a
--- /dev/null
+++ b/server/src/test/data/utils/yaml/test.json
@@ -0,0 +1,17 @@
+[
+  {
+    "type": "issue",
+    "check_name": "[syntax-check] couldn't resolve module/action 'mymodule'. This often indicates a misspelling, missing collection, or incorrect module path.",
+    "categories": ["core"],
+    "severity": "blocker",
+    "description": "Running ansible-playbook --syntax-check ... reported an error.",
+    "fingerprint": "ef869ef9e247f7edd6bc37bb803cc9d158173db1d896be0664aa3456b4157621",
+    "location": {
+      "path": "getDeclaredCollections.yml",
+      "lines": { "begin": { "line": 8, "column": 7 } }
+    },
+    "content": {
+      "body": "[WARNING]: provided hosts list is empty, only localhost is available. Note that\nthe implicit localhost does not match 'all'\nERROR! couldn't resolve module/action 'mymodule'. This often indicates a misspelling, missing collection, or incorrect module path.\n\nThe error appears to be in '/mnt/c/Workspace/vscode-grammar-plist/vscode-ansible/server/src/test/data/utils/yaml/getDeclaredCollections.yml': line 8, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n  pre_tasks:\n    - name: PreTask name\n      ^ here\n"
+    }
+  }
+]

From f43b61c26b139c4fb6a0a365ffd321fc2f490aa3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Sun, 9 May 2021 16:36:47 +0200
Subject: [PATCH 034/558] Implemented ansible-lint diagnostic caching

---
 package.json                         |  2 +-
 server/src/ansibleLanguageService.ts | 19 ++++++++++-
 server/src/server.ts                 | 32 +++++++++++++++++--
 server/src/services/ansibleLint.ts   | 48 +++++++++++++++++++++++++++-
 4 files changed, 95 insertions(+), 6 deletions(-)

diff --git a/package.json b/package.json
index 0d145c318..66a1b087b 100644
--- a/package.json
+++ b/package.json
@@ -152,7 +152,7 @@
     "watch": "tsc -b -w",
     "webpack:watch:client": "webpack --mode none --config ./client/webpack.config.js --watch",
     "webpack:watch:server": "webpack --mode none --config ./server/webpack.config.js --watch",
-    "clean": "rimraf client/out && rimraf server/out",
+    "clean": "rimraf client/out && rimraf server/out && rimraf **/tsconfig.tsbuildinfo",
     "postinstall": "cd client && npm install && cd ../server && npm install && cd ..",
     "test-compile": "tsc -p ./"
   },
diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index 872e7093f..feb86ed54 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -176,16 +176,33 @@ export class AnsibleLanguageService {
     this.documents.onDidSave(async (change) => {
       const diagnostics = await this.ansibleLint.doValidate(change.document);
       diagnostics.forEach((fileDiagnostics, fileUri) => {
+        if (change.document.uri === fileUri) {
+          // ensure that regular diagnostics are still present
+          fileDiagnostics.push(...doValidate(change.document));
+        }
         this.connection.sendDiagnostics({
           uri: fileUri,
           diagnostics: fileDiagnostics,
         });
       });
     });
+    this.connection.onDidChangeTextDocument((change) => {
+      this.ansibleLint.invalidateCacheItems(
+        change.textDocument.uri,
+        change.contentChanges
+      );
+    });
     this.documents.onDidChangeContent((change) => {
+      const diagnostics = doValidate(change.document);
+      const lintDiagnostics = this.ansibleLint.getValidationFromCache(
+        change.document.uri
+      );
+      if (lintDiagnostics) {
+        diagnostics.push(...lintDiagnostics);
+      }
       this.connection.sendDiagnostics({
         uri: change.document.uri,
-        diagnostics: doValidate(change.document),
+        diagnostics: diagnostics,
       });
     });
     this.connection.onHover((params) => {
diff --git a/server/src/server.ts b/server/src/server.ts
index ed1a90024..4aae23388 100644
--- a/server/src/server.ts
+++ b/server/src/server.ts
@@ -1,6 +1,9 @@
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import {
+  Connection,
   createConnection,
+  DidChangeTextDocumentParams,
+  NotificationHandler,
   ProposedFeatures,
   TextDocuments,
 } from 'vscode-languageserver/node';
@@ -8,7 +11,30 @@ import { AnsibleLanguageService } from './ansibleLanguageService';
 
 // Create a connection for the server, using Node's IPC as a transport.
 // Also include all preview / proposed LSP features.
-const connection = createConnection(ProposedFeatures.all);
+const connection: Connection = createConnection(ProposedFeatures.all);
+
+const docChangeHandlers: NotificationHandler[] = [];
+connection.onDidChangeTextDocument((params) => {
+  for (const handler of docChangeHandlers) {
+    handler(params);
+  }
+});
+
+// HACK: Using a connection proxy to allow multiple handlers
+// This hack is necessary to simultaneously take advantage of the TextDocuments
+// listener implementations and still be able to register handlers that it
+// overrides, such as `onDidChangeTextDocument`.
+const connectionProxy = new Proxy(connection, {
+  get: (target, p, receiver) => {
+    if (p === 'onDidChangeTextDocument') {
+      return (handler: NotificationHandler) => {
+        docChangeHandlers.push(handler);
+      };
+    } else {
+      return Reflect.get(target, p, receiver);
+    }
+  },
+});
 
 // Create a simple text document manager.
 const documents: TextDocuments = new TextDocuments(TextDocument);
@@ -28,11 +54,11 @@ const documents: TextDocuments = new TextDocuments(TextDocument);
 //   return result;
 // }
 
-const context = new AnsibleLanguageService(connection, documents);
+const context = new AnsibleLanguageService(connectionProxy, documents);
 context.initialize();
 
 // Make the text document manager listen on the connection
 // for open, change and close text document events
-documents.listen(connection);
+documents.listen(connectionProxy);
 // Listen on the connection
 connection.listen();
diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
index 82112f9b6..2b0872ae3 100644
--- a/server/src/services/ansibleLint.ts
+++ b/server/src/services/ansibleLint.ts
@@ -1,3 +1,4 @@
+import IntervalTree from '@flatten-js/interval-tree';
 import * as child_process from 'child_process';
 import { ExecException } from 'node:child_process';
 import { URL } from 'url';
@@ -8,12 +9,14 @@ import {
   DiagnosticSeverity,
   Position,
   Range,
+  TextDocumentContentChangeEvent,
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 const exec = promisify(child_process.exec);
 
 export class AnsibleLint {
   private connection: Connection;
+  private validationCache: Map> = new Map();
 
   constructor(connection: Connection) {
     this.connection = connection;
@@ -47,9 +50,23 @@ export class AnsibleLint {
           textDocument
         );
       } else {
-        this.connection.console.error(error.message);
+        this.connection.window.showErrorMessage(error.message);
       }
     }
+    diagnostics.forEach((fileDiagnostics, fileUri) => {
+      if (!this.validationCache.has(fileUri)) {
+        this.validationCache.set(fileUri, new IntervalTree());
+      }
+      const diagnosticTree = this.validationCache.get(
+        fileUri
+      ) as IntervalTree;
+      for (const diagnostic of fileDiagnostics) {
+        diagnosticTree.insert(
+          [diagnostic.range.start.line, diagnostic.range.end.line],
+          diagnostic
+        );
+      }
+    });
 
     return diagnostics;
   }
@@ -102,6 +119,35 @@ export class AnsibleLint {
     }
     return diagnostics;
   }
+
+  public invalidateCacheItems(
+    fileUri: string,
+    changes: TextDocumentContentChangeEvent[]
+  ): void {
+    const diagnosticTree = this.validationCache.get(fileUri);
+    if (diagnosticTree) {
+      for (const change of changes) {
+        if ('range' in change) {
+          const influencedDiagnostics = diagnosticTree.search([
+            change.range.start.line,
+            change.range.end.line,
+          ]);
+          if (influencedDiagnostics) {
+            for (const diagnostic of influencedDiagnostics as Array) {
+              diagnosticTree.remove(
+                [diagnostic.range.start.line, diagnostic.range.end.line],
+                diagnostic
+              );
+            }
+          }
+        }
+      }
+    }
+  }
+
+  public getValidationFromCache(fileUri: string): Diagnostic[] | undefined {
+    return this.validationCache.get(fileUri)?.values;
+  }
 }
 
 interface StdResult {

From 9512bfb97893cf5c0af1891e7f6ea8bbd24e760f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Tue, 11 May 2021 22:18:15 +0200
Subject: [PATCH 035/558] Implemented multiroot workspace launching

---
 .vscode/launch.json            |  16 +++-
 client/src/extension.ts        | 151 +++++++++++++++++++++++++--------
 client/src/workspaceManager.ts |  43 ++++++++++
 3 files changed, 173 insertions(+), 37 deletions(-)
 create mode 100644 client/src/workspaceManager.ts

diff --git a/.vscode/launch.json b/.vscode/launch.json
index 7b3cf3648..47bce4f05 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -24,13 +24,22 @@
       "preLaunchTask": "Webpack Watch"
     },
     {
-      "name": "Attach to Server",
+      "name": "Attach to Server (default)",
       "type": "node",
       "request": "attach",
       "timeout": 30000,
       "port": 6009,
       "restart": true,
       "outFiles": ["${workspaceRoot}/server/out/**/*.js"]
+    },
+    {
+      "name": "Attach to Server (folder 1)",
+      "type": "node",
+      "request": "attach",
+      "timeout": 30000,
+      "port": 6010,
+      "restart": true,
+      "outFiles": ["${workspaceRoot}/server/out/**/*.js"]
     }
     // {
     //   "name": "Language Server E2E Test",
@@ -49,7 +58,10 @@
     {
       "name": "Client + Server",
       "stopAll": true,
-      "configurations": ["Launch Extension (quick)", "Attach to Server"]
+      "configurations": [
+        "Launch Extension (quick)",
+        "Attach to Server (folder 1)"
+      ]
     }
   ]
 }
diff --git a/client/src/extension.ts b/client/src/extension.ts
index b914ba170..586c6bbb2 100644
--- a/client/src/extension.ts
+++ b/client/src/extension.ts
@@ -1,28 +1,32 @@
 import * as path from 'path';
-import { workspace, ExtensionContext, languages } from 'vscode';
-
+import {
+  ExtensionContext,
+  languages,
+  OutputChannel,
+  TextDocument,
+  window as Window,
+  workspace as Workspace,
+  WorkspaceFolder,
+} from 'vscode';
 import {
   LanguageClient,
   LanguageClientOptions,
-  ServerOptions,
   TransportKind,
 } from 'vscode-languageclient/node';
 import { DocumentSemanticTokensProvider, legend } from './semanticTokens';
+import { WorkspaceManager } from './workspaceManager';
 
-let client: LanguageClient;
-
-export function activate(context: ExtensionContext): void {
-  // The server is implemented in node
-  const serverModule = context.asAbsolutePath(
-    path.join('server', 'out', 'server.js')
-  );
-  // The debug options for the server
-  // --inspect=6009: runs the server in Node's Inspector mode so VS Code can attach to the server for debugging
-  const debugOptions = { execArgv: ['--nolazy', '--inspect=6009'] };
+let defaultClient: LanguageClient;
+const clients: Map = new Map();
 
-  // If the extension is launched in debug mode then the debug server options are used
-  // Otherwise the run options are used
-  const serverOptions: ServerOptions = {
+function getLanguageClient(
+  serverModule: string,
+  outputChannel: OutputChannel,
+  debugPort: number,
+  folder?: WorkspaceFolder
+): LanguageClient {
+  const debugOptions = { execArgv: ['--nolazy', `--inspect=${debugPort}`] };
+  const serverOptions = {
     run: { module: serverModule, transport: TransportKind.ipc },
     debug: {
       module: serverModule,
@@ -30,24 +34,100 @@ export function activate(context: ExtensionContext): void {
       options: debugOptions,
     },
   };
-
-  // Options to control the language client
-  const clientOptions: LanguageClientOptions = {
-    // Register the server for Ansible documents
-    documentSelector: [{ scheme: 'file', language: 'ansible' }],
-    synchronize: {
-      // Notify the server about file changes to ansible.cfg files contained in the workspace
-      fileEvents: workspace.createFileSystemWatcher('**/ansible.cfg'),
-    },
-  };
-
-  // Create the language client and start the client.
-  client = new LanguageClient(
+  const clientOptions: LanguageClientOptions = folder
+    ? {
+        documentSelector: [
+          {
+            scheme: 'file',
+            language: 'ansible',
+            pattern: `${folder.uri.fsPath}/**/*`,
+          },
+        ],
+        workspaceFolder: folder,
+        synchronize: {
+          // Notify the server about file changes to ansible.cfg files contained in the root folder
+          fileEvents: Workspace.createFileSystemWatcher(
+            `${folder.uri.fsPath}/**/ansible.cfg`
+          ),
+        },
+      }
+    : {
+        documentSelector: [{ scheme: 'untitled', language: 'ansible' }],
+        synchronize: {
+          // Notify the server about file changes to the top ansible.cfg file of the workspace
+          fileEvents: Workspace.createFileSystemWatcher('ansible.cfg'),
+        },
+      };
+  clientOptions.diagnosticCollectionName = 'ansible-lang';
+  clientOptions.outputChannel = outputChannel;
+  return new LanguageClient(
     'ansibleServer',
     'Ansible Server',
     serverOptions,
     clientOptions
   );
+}
+
+export function activate(context: ExtensionContext): void {
+  // The server is implemented in node
+  const serverModule = context.asAbsolutePath(
+    path.join('server', 'out', 'server.js')
+  );
+  const outputChannel: OutputChannel = Window.createOutputChannel(
+    'Ansible-Language-Server'
+  );
+
+  const workspaceManager = new WorkspaceManager();
+
+  function textDocumentOpenedHandler(document: TextDocument): void {
+    if (
+      // Check if we're dealing with a regular 'ansible' file
+      document.languageId === 'ansible' &&
+      (document.uri.scheme === 'file' || document.uri.scheme === 'untitled')
+    ) {
+      const uri = document.uri;
+      // Untitled files go to a default client.
+      if (uri.scheme === 'untitled' && !defaultClient) {
+        defaultClient = getLanguageClient(serverModule, outputChannel, 6009);
+        defaultClient.start();
+        return;
+      }
+      let folder = Workspace.getWorkspaceFolder(uri);
+      // Files outside a folder should be handled by the default client as well.
+      if (!folder && !defaultClient) {
+        defaultClient = getLanguageClient(serverModule, outputChannel, 6009);
+        defaultClient.start();
+        return;
+      }
+      if (folder) {
+        // If we have nested workspace folders we only start a server on the outer most workspace folder.
+        folder = workspaceManager.getOuterMostWorkspaceFolder(folder);
+
+        if (!clients.has(folder.uri.toString())) {
+          const client = getLanguageClient(
+            serverModule,
+            outputChannel,
+            6010 + clients.size,
+            folder
+          );
+          client.start();
+          clients.set(folder.uri.toString(), client);
+        }
+      }
+    }
+  }
+
+  Workspace.onDidOpenTextDocument(textDocumentOpenedHandler);
+  Workspace.textDocuments.forEach(textDocumentOpenedHandler);
+  Workspace.onDidChangeWorkspaceFolders((event) => {
+    for (const folder of event.removed) {
+      const client = clients.get(folder.uri.toString());
+      if (client) {
+        clients.delete(folder.uri.toString());
+        client.stop();
+      }
+    }
+  });
 
   context.subscriptions.push(
     languages.registerDocumentSemanticTokensProvider(
@@ -56,14 +136,15 @@ export function activate(context: ExtensionContext): void {
       legend
     )
   );
-
-  // Start the client. This will also launch the server
-  client.start();
 }
 
 export function deactivate(): Thenable | undefined {
-  if (!client) {
-    return undefined;
+  const promises: Thenable[] = [];
+  if (defaultClient) {
+    promises.push(defaultClient.stop());
+  }
+  for (const client of clients.values()) {
+    promises.push(client.stop());
   }
-  return client.stop();
+  return Promise.all(promises).then(() => undefined);
 }
diff --git a/client/src/workspaceManager.ts b/client/src/workspaceManager.ts
new file mode 100644
index 000000000..b252099e3
--- /dev/null
+++ b/client/src/workspaceManager.ts
@@ -0,0 +1,43 @@
+import { Uri, workspace as Workspace, WorkspaceFolder } from 'vscode';
+
+export class WorkspaceManager {
+  private sortedWorkspaceFolders: string[] = [];
+  constructor() {
+    Workspace.onDidChangeWorkspaceFolders(() => this.refreshWorkspaceFolders());
+    this.refreshWorkspaceFolders();
+  }
+
+  public getOuterMostWorkspaceFolder(folder: WorkspaceFolder): WorkspaceFolder {
+    for (const element of this.sortedWorkspaceFolders) {
+      let uri = folder.uri.toString();
+      if (!uri.endsWith('/')) {
+        uri = `${uri}/`;
+      }
+      if (uri.startsWith(element)) {
+        const outerFolder = Workspace.getWorkspaceFolder(Uri.parse(element));
+        if (outerFolder) {
+          return outerFolder;
+        }
+      }
+    }
+    return folder;
+  }
+
+  private refreshWorkspaceFolders() {
+    if (Workspace.workspaceFolders) {
+      this.sortedWorkspaceFolders = Workspace.workspaceFolders
+        .map((folder) => {
+          let result = folder.uri.toString();
+          if (!result.endsWith('/')) {
+            result = `${result}/`;
+          }
+          return result;
+        })
+        .sort((a, b) => {
+          return a.length - b.length;
+        });
+    } else {
+      this.sortedWorkspaceFolders = [];
+    }
+  }
+}

From 9fb6c5684fd852b91154e4ea096b2a20911cdb1d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Wed, 12 May 2021 08:48:41 +0200
Subject: [PATCH 036/558] WIP: Multiroot workspace server

---
 .vscode/launch.json                    | 13 +++++-
 server/src/ansibleLanguageService.ts   |  8 ++--
 server/src/interfaces/context.ts       |  4 ++
 server/src/services/settingsManager.ts | 62 ++++++++++++++++++++++++++
 4 files changed, 80 insertions(+), 7 deletions(-)
 create mode 100644 server/src/services/settingsManager.ts

diff --git a/.vscode/launch.json b/.vscode/launch.json
index 47bce4f05..cefe73298 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -10,7 +10,7 @@
       "type": "extensionHost",
       "request": "launch",
       "runtimeExecutable": "${execPath}",
-      "args": ["--extensionDevelopmentPath=${workspaceFolder}"],
+      "args": ["--extensionDevelopmentPath=${workspaceRoot}"],
       "outFiles": ["${workspaceFolder}/client/out/**/*.js"],
       "preLaunchTask": "npm: watch"
     },
@@ -19,7 +19,7 @@
       "type": "extensionHost",
       "request": "launch",
       "runtimeExecutable": "${execPath}",
-      "args": ["--extensionDevelopmentPath=${workspaceFolder}"],
+      "args": ["--extensionDevelopmentPath=${workspaceRoot}"],
       "outFiles": ["${workspaceFolder}/client/out/**/*.js"],
       "preLaunchTask": "Webpack Watch"
     },
@@ -40,6 +40,15 @@
       "port": 6010,
       "restart": true,
       "outFiles": ["${workspaceRoot}/server/out/**/*.js"]
+    },
+    {
+      "name": "Attach to Server (folder 2)",
+      "type": "node",
+      "request": "attach",
+      "timeout": 30000,
+      "port": 6011,
+      "restart": true,
+      "outFiles": ["${workspaceRoot}/server/out/**/*.js"]
     }
     // {
     //   "name": "Language Server E2E Test",
diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index feb86ed54..4adbec11f 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -24,7 +24,7 @@ export class AnsibleLanguageService {
   private connection: Connection;
   private documents: TextDocuments;
 
-  private rootFolder: WorkspaceFolder | undefined;
+  private rootFolderUri: string | null = null;
   private hasConfigurationCapability = false;
   private hasWorkspaceFolderCapability = false;
   private hasDiagnosticRelatedInformationCapability = false;
@@ -60,9 +60,7 @@ export class AnsibleLanguageService {
 
   private initializeConnection() {
     this.connection.onInitialize((params: InitializeParams) => {
-      if (params.workspaceFolders) {
-        this.rootFolder = params.workspaceFolders[0]; //TODO: support multiroot
-      }
+      this.rootFolderUri = params.rootUri;
       const capabilities = params.capabilities;
 
       // Does the client support the `workspace/configuration` request?
@@ -108,13 +106,13 @@ export class AnsibleLanguageService {
           DidChangeConfigurationNotification.type,
           undefined
         );
-
         this.connection.client.register(
           DidChangeWatchedFilesNotification.type,
           {
             watchers: [
               {
                 // watch for documentMetadata
+                // TODO: Narrow down this watcher once LSP support for multi-root gets better
                 globPattern: '**/meta/main.{yml,yaml}',
               },
             ],
diff --git a/server/src/interfaces/context.ts b/server/src/interfaces/context.ts
index d06dfe9ad..01a495983 100644
--- a/server/src/interfaces/context.ts
+++ b/server/src/interfaces/context.ts
@@ -7,3 +7,7 @@ export interface IContext {
   documentMetadata: Map>;
   documentSettings: Map>;
 }
+
+export interface ValueSource {
+  get(key: K): V;
+}
diff --git a/server/src/services/settingsManager.ts b/server/src/services/settingsManager.ts
new file mode 100644
index 000000000..959b09b83
--- /dev/null
+++ b/server/src/services/settingsManager.ts
@@ -0,0 +1,62 @@
+import { promises as fs } from 'fs';
+import { URL } from 'url';
+import { Connection } from 'vscode-languageserver';
+import {
+  DidChangeConfigurationParams,
+  DidChangeWatchedFilesParams,
+} from 'vscode-languageserver-protocol';
+import { parseAllDocuments } from 'yaml';
+import { ValueSource } from '../interfaces/context';
+import { IDocumentMetadata } from '../interfaces/documentMeta';
+import { ExtensionSettings } from '../interfaces/extensionSettings';
+import { fileExists, hasOwnProperty } from '../utils/misc';
+
+export class SettingsManager
+  implements ValueSource>
+{
+  private connection: Connection;
+  private hasConfigurationCapability;
+
+  private documentSettings: Map> =
+    new Map();
+
+  private defaultSettings: ExtensionSettings = { maxNumberOfProblems: 1000 };
+  private globalSettings: ExtensionSettings = this.defaultSettings;
+
+  constructor(connection: Connection, hasConfigurationCapability: boolean) {
+    this.connection = connection;
+    this.hasConfigurationCapability = hasConfigurationCapability;
+  }
+
+  public get(uri: string): Thenable {
+    if (!this.hasConfigurationCapability) {
+      return Promise.resolve(this.globalSettings);
+    }
+    let result = this.documentSettings.get(uri);
+    if (!result) {
+      result = this.connection.workspace.getConfiguration({
+        scopeUri: uri,
+        section: 'languageServerExample',
+      });
+      this.documentSettings.set(uri, result);
+    }
+    return result;
+  }
+
+  public handleDocumentClosed(uri: string): void {
+    this.documentSettings.delete(uri);
+  }
+
+  public handleConfigurationChanged(
+    change: DidChangeConfigurationParams
+  ): void {
+    this.documentSettings.clear();
+    if (this.hasConfigurationCapability) {
+      // Reset all cached document settings
+      this.documentSettings.clear();
+    } else {
+      this.globalSettings =
+        change.settings.languageServerExample || this.defaultSettings;
+    }
+  }
+}

From 796362b51a013a5264fde32cb9bd4344442a8bea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Thu, 13 May 2021 00:32:57 +0200
Subject: [PATCH 037/558] Reimplemented multi-root workspace with single server
 instance. Consolidated context. Refactored MetadataLibrary.

---
 .vscode/launch.json                     |  29 +----
 client/src/extension.ts                 | 151 ++++++-----------------
 client/src/workspaceManager.ts          |  43 -------
 server/src/ansibleLanguageService.ts    | 156 +++++++++++++-----------
 server/src/interfaces/context.ts        |  13 --
 server/src/services/ansibleConfig.ts    |  11 +-
 server/src/services/ansibleLint.ts      |  38 +++---
 server/src/services/docsLibrary.ts      |   8 +-
 server/src/services/metadataLibrary.ts  |  60 +++------
 server/src/services/settingsManager.ts  |  18 +--
 server/src/services/workspaceManager.ts | 139 +++++++++++++++++++++
 11 files changed, 311 insertions(+), 355 deletions(-)
 delete mode 100644 client/src/workspaceManager.ts
 delete mode 100644 server/src/interfaces/context.ts
 create mode 100644 server/src/services/workspaceManager.ts

diff --git a/.vscode/launch.json b/.vscode/launch.json
index cefe73298..7b3cf3648 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -10,7 +10,7 @@
       "type": "extensionHost",
       "request": "launch",
       "runtimeExecutable": "${execPath}",
-      "args": ["--extensionDevelopmentPath=${workspaceRoot}"],
+      "args": ["--extensionDevelopmentPath=${workspaceFolder}"],
       "outFiles": ["${workspaceFolder}/client/out/**/*.js"],
       "preLaunchTask": "npm: watch"
     },
@@ -19,36 +19,18 @@
       "type": "extensionHost",
       "request": "launch",
       "runtimeExecutable": "${execPath}",
-      "args": ["--extensionDevelopmentPath=${workspaceRoot}"],
+      "args": ["--extensionDevelopmentPath=${workspaceFolder}"],
       "outFiles": ["${workspaceFolder}/client/out/**/*.js"],
       "preLaunchTask": "Webpack Watch"
     },
     {
-      "name": "Attach to Server (default)",
+      "name": "Attach to Server",
       "type": "node",
       "request": "attach",
       "timeout": 30000,
       "port": 6009,
       "restart": true,
       "outFiles": ["${workspaceRoot}/server/out/**/*.js"]
-    },
-    {
-      "name": "Attach to Server (folder 1)",
-      "type": "node",
-      "request": "attach",
-      "timeout": 30000,
-      "port": 6010,
-      "restart": true,
-      "outFiles": ["${workspaceRoot}/server/out/**/*.js"]
-    },
-    {
-      "name": "Attach to Server (folder 2)",
-      "type": "node",
-      "request": "attach",
-      "timeout": 30000,
-      "port": 6011,
-      "restart": true,
-      "outFiles": ["${workspaceRoot}/server/out/**/*.js"]
     }
     // {
     //   "name": "Language Server E2E Test",
@@ -67,10 +49,7 @@
     {
       "name": "Client + Server",
       "stopAll": true,
-      "configurations": [
-        "Launch Extension (quick)",
-        "Attach to Server (folder 1)"
-      ]
+      "configurations": ["Launch Extension (quick)", "Attach to Server"]
     }
   ]
 }
diff --git a/client/src/extension.ts b/client/src/extension.ts
index 586c6bbb2..b914ba170 100644
--- a/client/src/extension.ts
+++ b/client/src/extension.ts
@@ -1,32 +1,28 @@
 import * as path from 'path';
-import {
-  ExtensionContext,
-  languages,
-  OutputChannel,
-  TextDocument,
-  window as Window,
-  workspace as Workspace,
-  WorkspaceFolder,
-} from 'vscode';
+import { workspace, ExtensionContext, languages } from 'vscode';
+
 import {
   LanguageClient,
   LanguageClientOptions,
+  ServerOptions,
   TransportKind,
 } from 'vscode-languageclient/node';
 import { DocumentSemanticTokensProvider, legend } from './semanticTokens';
-import { WorkspaceManager } from './workspaceManager';
 
-let defaultClient: LanguageClient;
-const clients: Map = new Map();
+let client: LanguageClient;
+
+export function activate(context: ExtensionContext): void {
+  // The server is implemented in node
+  const serverModule = context.asAbsolutePath(
+    path.join('server', 'out', 'server.js')
+  );
+  // The debug options for the server
+  // --inspect=6009: runs the server in Node's Inspector mode so VS Code can attach to the server for debugging
+  const debugOptions = { execArgv: ['--nolazy', '--inspect=6009'] };
 
-function getLanguageClient(
-  serverModule: string,
-  outputChannel: OutputChannel,
-  debugPort: number,
-  folder?: WorkspaceFolder
-): LanguageClient {
-  const debugOptions = { execArgv: ['--nolazy', `--inspect=${debugPort}`] };
-  const serverOptions = {
+  // If the extension is launched in debug mode then the debug server options are used
+  // Otherwise the run options are used
+  const serverOptions: ServerOptions = {
     run: { module: serverModule, transport: TransportKind.ipc },
     debug: {
       module: serverModule,
@@ -34,100 +30,24 @@ function getLanguageClient(
       options: debugOptions,
     },
   };
-  const clientOptions: LanguageClientOptions = folder
-    ? {
-        documentSelector: [
-          {
-            scheme: 'file',
-            language: 'ansible',
-            pattern: `${folder.uri.fsPath}/**/*`,
-          },
-        ],
-        workspaceFolder: folder,
-        synchronize: {
-          // Notify the server about file changes to ansible.cfg files contained in the root folder
-          fileEvents: Workspace.createFileSystemWatcher(
-            `${folder.uri.fsPath}/**/ansible.cfg`
-          ),
-        },
-      }
-    : {
-        documentSelector: [{ scheme: 'untitled', language: 'ansible' }],
-        synchronize: {
-          // Notify the server about file changes to the top ansible.cfg file of the workspace
-          fileEvents: Workspace.createFileSystemWatcher('ansible.cfg'),
-        },
-      };
-  clientOptions.diagnosticCollectionName = 'ansible-lang';
-  clientOptions.outputChannel = outputChannel;
-  return new LanguageClient(
+
+  // Options to control the language client
+  const clientOptions: LanguageClientOptions = {
+    // Register the server for Ansible documents
+    documentSelector: [{ scheme: 'file', language: 'ansible' }],
+    synchronize: {
+      // Notify the server about file changes to ansible.cfg files contained in the workspace
+      fileEvents: workspace.createFileSystemWatcher('**/ansible.cfg'),
+    },
+  };
+
+  // Create the language client and start the client.
+  client = new LanguageClient(
     'ansibleServer',
     'Ansible Server',
     serverOptions,
     clientOptions
   );
-}
-
-export function activate(context: ExtensionContext): void {
-  // The server is implemented in node
-  const serverModule = context.asAbsolutePath(
-    path.join('server', 'out', 'server.js')
-  );
-  const outputChannel: OutputChannel = Window.createOutputChannel(
-    'Ansible-Language-Server'
-  );
-
-  const workspaceManager = new WorkspaceManager();
-
-  function textDocumentOpenedHandler(document: TextDocument): void {
-    if (
-      // Check if we're dealing with a regular 'ansible' file
-      document.languageId === 'ansible' &&
-      (document.uri.scheme === 'file' || document.uri.scheme === 'untitled')
-    ) {
-      const uri = document.uri;
-      // Untitled files go to a default client.
-      if (uri.scheme === 'untitled' && !defaultClient) {
-        defaultClient = getLanguageClient(serverModule, outputChannel, 6009);
-        defaultClient.start();
-        return;
-      }
-      let folder = Workspace.getWorkspaceFolder(uri);
-      // Files outside a folder should be handled by the default client as well.
-      if (!folder && !defaultClient) {
-        defaultClient = getLanguageClient(serverModule, outputChannel, 6009);
-        defaultClient.start();
-        return;
-      }
-      if (folder) {
-        // If we have nested workspace folders we only start a server on the outer most workspace folder.
-        folder = workspaceManager.getOuterMostWorkspaceFolder(folder);
-
-        if (!clients.has(folder.uri.toString())) {
-          const client = getLanguageClient(
-            serverModule,
-            outputChannel,
-            6010 + clients.size,
-            folder
-          );
-          client.start();
-          clients.set(folder.uri.toString(), client);
-        }
-      }
-    }
-  }
-
-  Workspace.onDidOpenTextDocument(textDocumentOpenedHandler);
-  Workspace.textDocuments.forEach(textDocumentOpenedHandler);
-  Workspace.onDidChangeWorkspaceFolders((event) => {
-    for (const folder of event.removed) {
-      const client = clients.get(folder.uri.toString());
-      if (client) {
-        clients.delete(folder.uri.toString());
-        client.stop();
-      }
-    }
-  });
 
   context.subscriptions.push(
     languages.registerDocumentSemanticTokensProvider(
@@ -136,15 +56,14 @@ export function activate(context: ExtensionContext): void {
       legend
     )
   );
+
+  // Start the client. This will also launch the server
+  client.start();
 }
 
 export function deactivate(): Thenable | undefined {
-  const promises: Thenable[] = [];
-  if (defaultClient) {
-    promises.push(defaultClient.stop());
-  }
-  for (const client of clients.values()) {
-    promises.push(client.stop());
+  if (!client) {
+    return undefined;
   }
-  return Promise.all(promises).then(() => undefined);
+  return client.stop();
 }
diff --git a/client/src/workspaceManager.ts b/client/src/workspaceManager.ts
deleted file mode 100644
index b252099e3..000000000
--- a/client/src/workspaceManager.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import { Uri, workspace as Workspace, WorkspaceFolder } from 'vscode';
-
-export class WorkspaceManager {
-  private sortedWorkspaceFolders: string[] = [];
-  constructor() {
-    Workspace.onDidChangeWorkspaceFolders(() => this.refreshWorkspaceFolders());
-    this.refreshWorkspaceFolders();
-  }
-
-  public getOuterMostWorkspaceFolder(folder: WorkspaceFolder): WorkspaceFolder {
-    for (const element of this.sortedWorkspaceFolders) {
-      let uri = folder.uri.toString();
-      if (!uri.endsWith('/')) {
-        uri = `${uri}/`;
-      }
-      if (uri.startsWith(element)) {
-        const outerFolder = Workspace.getWorkspaceFolder(Uri.parse(element));
-        if (outerFolder) {
-          return outerFolder;
-        }
-      }
-    }
-    return folder;
-  }
-
-  private refreshWorkspaceFolders() {
-    if (Workspace.workspaceFolders) {
-      this.sortedWorkspaceFolders = Workspace.workspaceFolders
-        .map((folder) => {
-          let result = folder.uri.toString();
-          if (!result.endsWith('/')) {
-            result = `${result}/`;
-          }
-          return result;
-        })
-        .sort((a, b) => {
-          return a.length - b.length;
-        });
-    } else {
-      this.sortedWorkspaceFolders = [];
-    }
-  }
-}
diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index 4adbec11f..f4937d1df 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -6,61 +6,41 @@ import {
   InitializeResult,
   TextDocuments,
   TextDocumentSyncKind,
-  WorkspaceFolder,
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
-import { IContext } from './interfaces/context';
-import { ExtensionSettings } from './interfaces/extensionSettings';
 import { doCompletion } from './providers/completionProvider';
 import { getDefinition } from './providers/definitionProvider';
 import { doHover } from './providers/hoverProvider';
 import { doValidate } from './providers/validationProvider';
-import { AnsibleConfig } from './services/ansibleConfig';
-import { AnsibleLint } from './services/ansibleLint';
-import { DocsLibrary } from './services/docsLibrary';
-import { MetadataLibrary } from './services/metadataLibrary';
+import {
+  WorkspaceFolderContext,
+  WorkspaceManager,
+} from './services/workspaceManager';
 
 export class AnsibleLanguageService {
   private connection: Connection;
   private documents: TextDocuments;
 
-  private rootFolderUri: string | null = null;
+  private workspaceManager: WorkspaceManager;
   private hasConfigurationCapability = false;
   private hasWorkspaceFolderCapability = false;
   private hasDiagnosticRelatedInformationCapability = false;
 
-  private defaultSettings: ExtensionSettings = { maxNumberOfProblems: 1000 };
-  private globalSettings: ExtensionSettings = this.defaultSettings;
-
-  private docsLibrary: DocsLibrary;
-  private context: IContext;
-  private metadataLibrary: MetadataLibrary;
-  private ansibleLint: AnsibleLint;
-
   constructor(connection: Connection, documents: TextDocuments) {
     this.connection = connection;
     this.documents = documents;
-    this.context = {
-      ansibleConfig: new AnsibleConfig(connection),
-      documentMetadata: new Map(),
-      documentSettings: new Map(),
-    };
-    this.docsLibrary = new DocsLibrary(this.context);
-    this.metadataLibrary = new MetadataLibrary(this.context);
-    this.ansibleLint = new AnsibleLint(connection);
+    this.workspaceManager = new WorkspaceManager(connection);
   }
 
   public initialize(): void {
     this.initializeConnection();
     this.registerLifecycleEventHandlers();
-    this.context.ansibleConfig.initialize();
-    this.docsLibrary.initialize();
-    this.registerProviders();
   }
 
   private initializeConnection() {
     this.connection.onInitialize((params: InitializeParams) => {
-      this.rootFolderUri = params.rootUri;
+      this.workspaceManager.setWorkspaceFolders(params.workspaceFolders || []);
+      this.workspaceManager.setCapabilities(params.capabilities);
       const capabilities = params.capabilities;
 
       // Does the client support the `workspace/configuration` request?
@@ -120,26 +100,18 @@ export class AnsibleLanguageService {
         );
       }
       if (this.hasWorkspaceFolderCapability) {
-        this.connection.workspace.onDidChangeWorkspaceFolders((_event) => {
-          this.connection.console.log(
-            'Workspace folder change event received.'
-          );
+        this.connection.workspace.onDidChangeWorkspaceFolders((event) => {
+          this.workspaceManager.handleWorkspaceChanged(event);
         });
       }
-      this.connection.client;
     });
   }
 
   private registerLifecycleEventHandlers() {
     this.connection.onDidChangeConfiguration((change) => {
-      if (this.hasConfigurationCapability) {
-        // Reset all cached document settings
-        this.context.documentSettings.clear();
-      } else {
-        this.globalSettings = (
-          (change.settings.languageServerExample || this.defaultSettings)
-        );
-      }
+      this.workspaceManager.forEachContext((context) => {
+        context.documentSettings.handleConfigurationChanged(change);
+      });
 
       // Revalidate all open text documents
       this.documents.all().forEach((doc) => {
@@ -151,12 +123,17 @@ export class AnsibleLanguageService {
     });
 
     this.documents.onDidOpen(async (e) => {
-      this.metadataLibrary.handleDocumentOpened(e.document.uri);
+      const context = this.workspaceManager.getContext(e.document.uri);
+      if (context) {
+        await this.doFullValidation(context, e.document);
+      }
     });
 
     this.documents.onDidClose((e) => {
-      this.context.documentSettings.delete(e.document.uri);
-      this.metadataLibrary.handleDocumentClosed(e.document.uri);
+      const context = this.workspaceManager.getContext(e.document.uri);
+      if (context) {
+        context.documentSettings.handleDocumentClosed(e.document.uri);
+      }
 
       // need to clear the diagnostics, otherwise they remain after changing language
       this.connection.sendDiagnostics({
@@ -165,64 +142,101 @@ export class AnsibleLanguageService {
       });
     });
 
-    this.connection.onDidChangeWatchedFiles((_change) => {
-      this.metadataLibrary.handleWatchedDocumentChange(_change);
+    this.connection.onDidChangeWatchedFiles((change) => {
+      this.workspaceManager.forEachContext((context) => {
+        context.documentMetadata.handleWatchedDocumentChange(change);
+      });
     });
-  }
 
-  private registerProviders() {
     this.documents.onDidSave(async (change) => {
-      const diagnostics = await this.ansibleLint.doValidate(change.document);
-      diagnostics.forEach((fileDiagnostics, fileUri) => {
-        if (change.document.uri === fileUri) {
-          // ensure that regular diagnostics are still present
-          fileDiagnostics.push(...doValidate(change.document));
-        }
-        this.connection.sendDiagnostics({
-          uri: fileUri,
-          diagnostics: fileDiagnostics,
-        });
-      });
+      const context = this.workspaceManager.getContext(change.document.uri);
+      if (context) {
+        await this.doFullValidation(context, change.document);
+      }
     });
+
     this.connection.onDidChangeTextDocument((change) => {
-      this.ansibleLint.invalidateCacheItems(
-        change.textDocument.uri,
-        change.contentChanges
-      );
+      const context = this.workspaceManager.getContext(change.textDocument.uri);
+      if (context) {
+        context.ansibleLint.invalidateCacheItems(
+          change.textDocument.uri,
+          change.contentChanges
+        );
+      }
     });
+
     this.documents.onDidChangeContent((change) => {
       const diagnostics = doValidate(change.document);
-      const lintDiagnostics = this.ansibleLint.getValidationFromCache(
-        change.document.uri
-      );
-      if (lintDiagnostics) {
-        diagnostics.push(...lintDiagnostics);
+
+      const context = this.workspaceManager.getContext(change.document.uri);
+      if (context) {
+        const lintDiagnostics = context.ansibleLint.getValidationFromCache(
+          change.document.uri
+        );
+        if (lintDiagnostics) {
+          diagnostics.push(...lintDiagnostics);
+        }
       }
       this.connection.sendDiagnostics({
         uri: change.document.uri,
         diagnostics: diagnostics,
       });
     });
+
     this.connection.onHover((params) => {
       const document = this.documents.get(params.textDocument.uri);
       if (document) {
-        return doHover(document, params.position, this.docsLibrary);
+        const context = this.workspaceManager.getContext(
+          params.textDocument.uri
+        );
+        if (context) {
+          return doHover(document, params.position, context.docsLibrary);
+        }
       }
       return null;
     });
+
     this.connection.onCompletion((params) => {
       const document = this.documents.get(params.textDocument.uri);
       if (document) {
-        return doCompletion(document, params.position, this.docsLibrary);
+        const context = this.workspaceManager.getContext(
+          params.textDocument.uri
+        );
+        if (context) {
+          return doCompletion(document, params.position, context.docsLibrary);
+        }
       }
       return null;
     });
+
     this.connection.onDefinition((params) => {
       const document = this.documents.get(params.textDocument.uri);
       if (document) {
-        return getDefinition(document, params.position, this.docsLibrary);
+        const context = this.workspaceManager.getContext(
+          params.textDocument.uri
+        );
+        if (context) {
+          return getDefinition(document, params.position, context.docsLibrary);
+        }
       }
       return null;
     });
   }
+
+  private async doFullValidation(
+    context: WorkspaceFolderContext,
+    document: TextDocument
+  ) {
+    const diagnostics = await context.ansibleLint.doValidate(document);
+    for (const [fileUri, fileDiagnostics] of diagnostics) {
+      if (document.uri === fileUri) {
+        // ensure that regular diagnostics are still present
+        fileDiagnostics.push(...doValidate(document));
+      }
+      this.connection.sendDiagnostics({
+        uri: fileUri,
+        diagnostics: fileDiagnostics,
+      });
+    }
+  }
 }
diff --git a/server/src/interfaces/context.ts b/server/src/interfaces/context.ts
deleted file mode 100644
index 01a495983..000000000
--- a/server/src/interfaces/context.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { AnsibleConfig } from '../services/ansibleConfig';
-import { IDocumentMetadata } from './documentMeta';
-import { ExtensionSettings } from './extensionSettings';
-
-export interface IContext {
-  ansibleConfig: AnsibleConfig;
-  documentMetadata: Map>;
-  documentSettings: Map>;
-}
-
-export interface ValueSource {
-  get(key: K): V;
-}
diff --git a/server/src/services/ansibleConfig.ts b/server/src/services/ansibleConfig.ts
index e041cab81..0a27505ae 100644
--- a/server/src/services/ansibleConfig.ts
+++ b/server/src/services/ansibleConfig.ts
@@ -3,17 +3,21 @@ import * as ini from 'ini';
 import * as _ from 'lodash';
 import { SpawnSyncReturns } from 'node:child_process';
 import * as path from 'path';
-import { _Connection } from 'vscode-languageserver';
+import { URL } from 'url';
+import { Connection } from 'vscode-languageserver';
+import { WorkspaceFolderContext } from './workspaceManager';
 
 // const exec = promisify(child_process.exec);
 
 export class AnsibleConfig {
-  private connection: _Connection;
+  private connection: Connection;
+  private context: WorkspaceFolderContext;
   private _collection_paths: string[] = [];
   private _module_locations: string[] = [];
 
-  constructor(connection: _Connection) {
+  constructor(connection: Connection, context: WorkspaceFolderContext) {
     this.connection = connection;
+    this.context = context;
   }
 
   public async initialize(): Promise {
@@ -22,6 +26,7 @@ export class AnsibleConfig {
         'ansible-config dump',
         {
           encoding: 'utf-8',
+          cwd: new URL(this.context.workspaceFolder.uri).pathname,
         }
       );
       let config = ini.parse(ansibleConfigResult);
diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
index 2b0872ae3..54c3c7852 100644
--- a/server/src/services/ansibleLint.ts
+++ b/server/src/services/ansibleLint.ts
@@ -12,14 +12,17 @@ import {
   TextDocumentContentChangeEvent,
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
+import { WorkspaceFolderContext } from './workspaceManager';
 const exec = promisify(child_process.exec);
 
 export class AnsibleLint {
   private connection: Connection;
+  private context: WorkspaceFolderContext;
   private validationCache: Map> = new Map();
 
-  constructor(connection: Connection) {
+  constructor(connection: Connection, context: WorkspaceFolderContext) {
     this.connection = connection;
+    this.context = context;
   }
 
   public async doValidate(
@@ -32,9 +35,10 @@ export class AnsibleLint {
         `ansible-lint --offline --nocolor -f codeclimate ${docPath}`,
         {
           encoding: 'utf-8',
+          cwd: new URL(this.context.workspaceFolder.uri).pathname,
         }
       );
-      diagnostics = this.processReport(result, textDocument);
+      diagnostics = this.processReport(result);
 
       if (result.stderr) {
         this.connection.console.warn(result.stderr);
@@ -42,13 +46,10 @@ export class AnsibleLint {
     } catch (error) {
       const execError = error as ExecException & StdResult;
       if (execError.code === 2) {
-        diagnostics = this.processReport(
-          {
-            stdout: execError.stdout,
-            stderr: execError.stderr,
-          },
-          textDocument
-        );
+        diagnostics = this.processReport({
+          stdout: execError.stdout,
+          stderr: execError.stderr,
+        });
       } else {
         this.connection.window.showErrorMessage(error.message);
       }
@@ -71,10 +72,7 @@ export class AnsibleLint {
     return diagnostics;
   }
 
-  private processReport(
-    result: StdResult,
-    textDocument: TextDocument
-  ): Map {
+  private processReport(result: StdResult): Map {
     const diagnostics: Map = new Map();
     const report = JSON.parse(result.stdout);
     if (report instanceof Array) {
@@ -84,7 +82,8 @@ export class AnsibleLint {
           item.location &&
           typeof item.location.path === 'string' &&
           item.location.lines &&
-          item.location.lines.begin
+          (item.location.lines.begin ||
+            typeof item.location.lines.begin === 'number')
         ) {
           const begin_line =
             item.location.lines.begin || item.location.lines.begin.line || 1;
@@ -101,18 +100,17 @@ export class AnsibleLint {
             start: start,
             end: end,
           };
-          if (!diagnostics.has(textDocument.uri)) {
-            diagnostics.set(textDocument.uri, []);
+          const locationUri = `${this.context.workspaceFolder.uri}/${item.location.path}`;
+          if (!diagnostics.has(locationUri)) {
+            diagnostics.set(locationUri, []);
           }
-          const fileDiagnostics = diagnostics.get(
-            textDocument.uri
-          ) as Diagnostic[];
+          const fileDiagnostics = diagnostics.get(locationUri) as Diagnostic[];
 
           fileDiagnostics.push({
             message: item.check_name,
             range: range || Range.create(0, 0, 0, 0),
             severity: DiagnosticSeverity.Error,
-            source: 'Ansible [YAML]',
+            source: 'Ansible',
           });
         }
       }
diff --git a/server/src/services/docsLibrary.ts b/server/src/services/docsLibrary.ts
index 8a0d14a18..cff4a7547 100644
--- a/server/src/services/docsLibrary.ts
+++ b/server/src/services/docsLibrary.ts
@@ -1,23 +1,21 @@
 import * as _ from 'lodash';
-import { WorkspaceFolder } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { Node } from 'yaml/types';
 import { YAMLError } from 'yaml/util';
-import { IContext } from '../interfaces/context';
 import { hasOwnProperty, isObject } from '../utils/misc';
 import { getDeclaredCollections } from '../utils/yaml';
 import { DocsParser } from './docsParser';
+import { WorkspaceFolderContext } from './workspaceManager';
 export class DocsLibrary {
   private modules = new Map();
   private docFragments = new Map();
-  private context: IContext;
+  private context: WorkspaceFolderContext;
 
-  constructor(context: IContext) {
+  constructor(context: WorkspaceFolderContext) {
     this.context = context;
   }
 
   public async initialize(): Promise {
-    // this._workspace.uri;
     for (const modulesPath of this.context.ansibleConfig.module_locations) {
       (await DocsParser.parseDirectory(modulesPath, 'builtin')).forEach(
         (doc) => {
diff --git a/server/src/services/metadataLibrary.ts b/server/src/services/metadataLibrary.ts
index 89d413d94..719d7ffa2 100644
--- a/server/src/services/metadataLibrary.ts
+++ b/server/src/services/metadataLibrary.ts
@@ -1,54 +1,38 @@
 import { promises as fs } from 'fs';
 import { URL } from 'url';
+import { Connection } from 'vscode-languageserver';
 import { DidChangeWatchedFilesParams } from 'vscode-languageserver-protocol';
 import { parseAllDocuments } from 'yaml';
-import { IContext } from '../interfaces/context';
 import { IDocumentMetadata } from '../interfaces/documentMeta';
 import { fileExists, hasOwnProperty } from '../utils/misc';
 export class MetadataLibrary {
-  private context: IContext;
+  private connection: Connection;
 
-  // maps metadata files (also inexistent) to the documents that use it
-  private metadataUsage: Map> = new Map();
-
-  // maps metadata files to promises of parsed contents
+  // cache of metadata contents per metadata file
   private metadata: Map> = new Map();
 
-  constructor(context: IContext) {
-    this.context = context;
+  constructor(connection: Connection) {
+    this.connection = connection;
   }
 
-  public handleDocumentOpened(uri: string): void {
+  public get(uri: string): Thenable | undefined {
     const metadataUri = this.getAnsibleMetadataUri(uri);
     if (metadataUri) {
-      const metadataPromise = this.getMetadata(metadataUri);
-      this.context.documentMetadata.set(uri, metadataPromise);
-      this.getMetadataUsage(metadataUri).add(uri);
-    }
-  }
-
-  public handleDocumentClosed(uri: string): void {
-    const metadataUri = this.getAnsibleMetadataUri(uri);
-    if (metadataUri) {
-      this.getMetadataUsage(metadataUri).delete(uri);
+      let metadata = this.metadata.get(metadataUri);
+      if (!metadata) {
+        metadata = this.readAnsibleMetadata(metadataUri);
+        this.metadata.set(metadataUri, metadata);
+      }
+      return metadata;
     }
-    this.context.documentMetadata.delete(uri);
   }
 
   public handleWatchedDocumentChange(
     change: DidChangeWatchedFilesParams
   ): void {
     for (const fileEvent of change.changes) {
-      if (this.metadata.has(fileEvent.uri)) {
-        // This is one of metadata files that is/has been used. We shall
-        // recreate the contents promise and make it accessible to all documents
-        // that use it.
-        this.metadata.delete(fileEvent.uri);
-        for (const documentUri of this.getMetadataUsage(fileEvent.uri)) {
-          const metadata = this.getMetadata(fileEvent.uri);
-          this.context.documentMetadata.set(documentUri, metadata);
-        }
-      }
+      // remove from cache on any change
+      this.metadata.delete(fileEvent.uri);
     }
   }
 
@@ -76,20 +60,6 @@ export class MetadataLibrary {
     return metaPath;
   }
 
-  private getMetadata(metadataUri: string): Thenable {
-    if (!this.metadata.has(metadataUri)) {
-      this.metadata.set(metadataUri, this.readAnsibleMetadata(metadataUri));
-    }
-    return this.metadata.get(metadataUri) as Thenable;
-  }
-
-  private getMetadataUsage(key: string): Set {
-    if (!this.metadataUsage.has(key)) {
-      this.metadataUsage.set(key, new Set());
-    }
-    return this.metadataUsage.get(key) as Set;
-  }
-
   private async readAnsibleMetadata(
     metadataUri: string
   ): Promise {
@@ -116,7 +86,7 @@ export class MetadataLibrary {
           }
         });
       } catch (error) {
-        //TODO: Log debug
+        this.connection.window.showErrorMessage(error);
       }
     }
     return metadata;
diff --git a/server/src/services/settingsManager.ts b/server/src/services/settingsManager.ts
index 959b09b83..aa38a9f09 100644
--- a/server/src/services/settingsManager.ts
+++ b/server/src/services/settingsManager.ts
@@ -1,22 +1,12 @@
-import { promises as fs } from 'fs';
-import { URL } from 'url';
 import { Connection } from 'vscode-languageserver';
-import {
-  DidChangeConfigurationParams,
-  DidChangeWatchedFilesParams,
-} from 'vscode-languageserver-protocol';
-import { parseAllDocuments } from 'yaml';
-import { ValueSource } from '../interfaces/context';
-import { IDocumentMetadata } from '../interfaces/documentMeta';
+import { DidChangeConfigurationParams } from 'vscode-languageserver-protocol';
 import { ExtensionSettings } from '../interfaces/extensionSettings';
-import { fileExists, hasOwnProperty } from '../utils/misc';
 
-export class SettingsManager
-  implements ValueSource>
-{
+export class SettingsManager {
   private connection: Connection;
   private hasConfigurationCapability;
 
+  // cache of document settings per workspace file
   private documentSettings: Map> =
     new Map();
 
@@ -36,7 +26,7 @@ export class SettingsManager
     if (!result) {
       result = this.connection.workspace.getConfiguration({
         scopeUri: uri,
-        section: 'languageServerExample',
+        section: 'ansible',
       });
       this.documentSettings.set(uri, result);
     }
diff --git a/server/src/services/workspaceManager.ts b/server/src/services/workspaceManager.ts
new file mode 100644
index 000000000..827ba1a47
--- /dev/null
+++ b/server/src/services/workspaceManager.ts
@@ -0,0 +1,139 @@
+import {
+  ClientCapabilities,
+  Connection,
+  WorkspaceFolder,
+  WorkspaceFoldersChangeEvent,
+} from 'vscode-languageserver';
+import { AnsibleConfig } from './ansibleConfig';
+import { AnsibleLint } from './ansibleLint';
+import { DocsLibrary } from './docsLibrary';
+import { MetadataLibrary } from './metadataLibrary';
+import { SettingsManager } from './settingsManager';
+
+export class WorkspaceManager {
+  private connection: Connection;
+  private sortedWorkspaceFolders: WorkspaceFolder[] = [];
+  private folderContexts: Map = new Map();
+  private capabilities: ClientCapabilities = {};
+
+  constructor(connection: Connection) {
+    this.connection = connection;
+  }
+
+  public setWorkspaceFolders(workspaceFolders: WorkspaceFolder[]): void {
+    this.sortedWorkspaceFolders = this.sortWorkspaceFolders(workspaceFolders);
+  }
+
+  public setCapabilities(capabilities: ClientCapabilities): void {
+    this.capabilities = capabilities;
+  }
+
+  /**
+   * Determines the workspace folder context for the given URI.
+   */
+  public getContext(uri: string): WorkspaceFolderContext | undefined {
+    const workspaceFolder = this.getWorkspaceFolder(uri);
+    if (workspaceFolder) {
+      let context = this.folderContexts.get(workspaceFolder.uri);
+      if (!context) {
+        context = new WorkspaceFolderContext(
+          this.connection,
+          workspaceFolder,
+          this.capabilities
+        );
+        this.folderContexts.set(workspaceFolder.uri, context);
+      }
+      return context;
+    }
+  }
+
+  public forEachContext(
+    callbackfn: (value: WorkspaceFolderContext) => void
+  ): void {
+    for (const folder of this.folderContexts.values()) {
+      callbackfn(folder);
+    }
+  }
+
+  /**
+   * Finds the inner-most workspace folder for the given URI.
+   */
+  public getWorkspaceFolder(uri: string): WorkspaceFolder | undefined {
+    for (const workspaceFolder of this.sortedWorkspaceFolders) {
+      if (uri.startsWith(workspaceFolder.uri)) {
+        return workspaceFolder;
+      }
+    }
+  }
+
+  public handleWorkspaceChanged(event: WorkspaceFoldersChangeEvent): void {
+    const removedUris = new Set(event.removed.map((folder) => folder.uri));
+
+    // We only keep contexts of existing workspace folders
+    for (const removedUri of removedUris) {
+      this.folderContexts.delete(removedUri);
+    }
+
+    const newWorkspaceFolders = this.sortedWorkspaceFolders.filter((folder) => {
+      return !removedUris.has(folder.uri);
+    });
+    newWorkspaceFolders.push(...event.added);
+    this.sortedWorkspaceFolders =
+      this.sortWorkspaceFolders(newWorkspaceFolders);
+  }
+
+  private sortWorkspaceFolders(workspaceFolders: WorkspaceFolder[]) {
+    return workspaceFolders.sort((a, b) => {
+      return b.uri.length - a.uri.length;
+    });
+  }
+}
+
+export class WorkspaceFolderContext {
+  private connection: Connection;
+  public workspaceFolder: WorkspaceFolder;
+  public documentMetadata: MetadataLibrary;
+  public documentSettings: SettingsManager;
+
+  // Lazy-loading anything that needs this context itself
+  private _docsLibrary: DocsLibrary | undefined;
+  private _ansibleConfig: AnsibleConfig | undefined;
+  public _ansibleLint: AnsibleLint | undefined;
+
+  constructor(
+    connection: Connection,
+    workspaceFolder: WorkspaceFolder,
+    capabilities: ClientCapabilities
+  ) {
+    this.connection = connection;
+    this.workspaceFolder = workspaceFolder;
+    this.documentMetadata = new MetadataLibrary(connection);
+    this.documentSettings = new SettingsManager(
+      connection,
+      !!(capabilities.workspace && !!capabilities.workspace.configuration)
+    );
+  }
+
+  public get docsLibrary(): DocsLibrary {
+    if (!this._docsLibrary) {
+      this._docsLibrary = new DocsLibrary(this);
+      this._docsLibrary.initialize();
+    }
+    return this._docsLibrary;
+  }
+
+  public get ansibleConfig(): AnsibleConfig {
+    if (!this._ansibleConfig) {
+      this._ansibleConfig = new AnsibleConfig(this.connection, this);
+      this._ansibleConfig.initialize();
+    }
+    return this._ansibleConfig;
+  }
+
+  public get ansibleLint(): AnsibleLint {
+    if (!this._ansibleLint) {
+      this._ansibleLint = new AnsibleLint(this.connection, this);
+    }
+    return this._ansibleLint;
+  }
+}

From 3de49a255c50afe333b328cb3bc35651a632f709 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Thu, 13 May 2021 22:33:12 +0200
Subject: [PATCH 038/558] Implemented configuration options. Improved error
 logging for AnsibleLint and AnsibleConfig.

---
 package.json                               | 29 ++++++------
 server/src/interfaces/extensionSettings.ts |  3 +-
 server/src/services/ansibleConfig.ts       | 25 ++++++++--
 server/src/services/ansibleLint.ts         | 54 +++++++++++++---------
 server/src/services/settingsManager.ts     |  5 +-
 5 files changed, 72 insertions(+), 44 deletions(-)

diff --git a/package.json b/package.json
index 66a1b087b..2adfb52e7 100644
--- a/package.json
+++ b/package.json
@@ -23,24 +23,25 @@
   "contributes": {
     "configuration": {
       "type": "object",
-      "title": "Example configuration",
+      "title": "Ansible",
       "properties": {
-        "ansible.maxNumberOfProblems": {
+        "ansible.ansible.path": {
           "scope": "resource",
-          "type": "number",
-          "default": 100,
-          "description": "Controls the maximum number of problems produced by the server."
+          "type": "string",
+          "default": "ansible",
+          "description": "Path to the ansible executable."
+        },
+        "ansible.ansibleLint.enabled": {
+          "scope": "resource",
+          "type": "boolean",
+          "default": true,
+          "description": "Enable linting with ansible-lint on document open/save."
         },
-        "ansible.trace.server": {
-          "scope": "window",
+        "ansible.ansibleLint.path": {
+          "scope": "resource",
           "type": "string",
-          "enum": [
-            "off",
-            "messages",
-            "verbose"
-          ],
-          "default": "off",
-          "description": "Traces the communication between VS Code and the language server."
+          "default": "ansible-lint",
+          "description": "Path to the ansible-lint executable."
         }
       }
     },
diff --git a/server/src/interfaces/extensionSettings.ts b/server/src/interfaces/extensionSettings.ts
index e3bd30720..a37bf926a 100644
--- a/server/src/interfaces/extensionSettings.ts
+++ b/server/src/interfaces/extensionSettings.ts
@@ -1,3 +1,4 @@
 export interface ExtensionSettings {
-  maxNumberOfProblems: number;
+  ansible: { path: string };
+  ansibleLint: { enabled: boolean; path: string };
 }
diff --git a/server/src/services/ansibleConfig.ts b/server/src/services/ansibleConfig.ts
index 0a27505ae..a51814fa9 100644
--- a/server/src/services/ansibleConfig.ts
+++ b/server/src/services/ansibleConfig.ts
@@ -22,8 +22,14 @@ export class AnsibleConfig {
 
   public async initialize(): Promise {
     try {
+      const ansibleExecutable = (
+        await this.context.documentSettings.get(
+          this.context.workspaceFolder.uri
+        )
+      ).ansible.path;
+
       const ansibleConfigResult = child_process.execSync(
-        'ansible-config dump',
+        `${ansibleExecutable}-config dump`,
         {
           encoding: 'utf-8',
           cwd: new URL(this.context.workspaceFolder.uri).pathname,
@@ -36,9 +42,12 @@ export class AnsibleConfig {
       );
       this._collection_paths = parsePythonStringArray(config.COLLECTIONS_PATHS);
 
-      const ansibleVersionResult = child_process.execSync('ansible --version', {
-        encoding: 'utf-8',
-      });
+      const ansibleVersionResult = child_process.execSync(
+        `${ansibleExecutable} --version`,
+        {
+          encoding: 'utf-8',
+        }
+      );
       const versionInfo = ini.parse(ansibleVersionResult);
       this._module_locations = parsePythonStringArray(
         versionInfo['configured module search path']
@@ -47,7 +56,13 @@ export class AnsibleConfig {
         path.resolve(versionInfo['ansible python module location'], 'modules')
       );
     } catch (error) {
-      this.connection.console.error((error as SpawnSyncReturns).stderr);
+      if (error instanceof Error) {
+        this.connection.window.showErrorMessage(error.message);
+      } else {
+        this.connection.console.error(
+          `Exception in AnsibleConfig service: ${JSON.stringify(error)}`
+        );
+      }
     }
   }
 
diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
index 54c3c7852..8dcda5c40 100644
--- a/server/src/services/ansibleLint.ts
+++ b/server/src/services/ansibleLint.ts
@@ -31,27 +31,40 @@ export class AnsibleLint {
     const docPath = new URL(textDocument.uri).pathname;
     let diagnostics: Map = new Map();
     try {
-      const result = await exec(
-        `ansible-lint --offline --nocolor -f codeclimate ${docPath}`,
-        {
-          encoding: 'utf-8',
-          cwd: new URL(this.context.workspaceFolder.uri).pathname,
-        }
+      const settings = await this.context.documentSettings.get(
+        textDocument.uri
       );
-      diagnostics = this.processReport(result);
 
-      if (result.stderr) {
-        this.connection.console.warn(result.stderr);
+      if (settings.ansibleLint.enabled) {
+        const result = await exec(
+          `${settings.ansibleLint.path} --offline --nocolor -f codeclimate ${docPath}`,
+          {
+            encoding: 'utf-8',
+            cwd: new URL(this.context.workspaceFolder.uri).pathname,
+          }
+        );
+        diagnostics = this.processReport(result.stdout);
+
+        if (result.stderr) {
+          this.connection.window.showErrorMessage(result.stderr);
+        }
       }
     } catch (error) {
-      const execError = error as ExecException & StdResult;
-      if (execError.code === 2) {
-        diagnostics = this.processReport({
-          stdout: execError.stdout,
-          stderr: execError.stderr,
-        });
+      if (error instanceof Error) {
+        const execError = error as ExecException & {
+          // according to the docs, these are always available
+          stdout: string;
+          stderr: string;
+        };
+        if (execError.code === 2) {
+          diagnostics = this.processReport(execError.stdout);
+        } else {
+          this.connection.window.showErrorMessage(execError.message);
+        }
       } else {
-        this.connection.window.showErrorMessage(error.message);
+        this.connection.console.error(
+          `Exception in AnsibleLint service: ${JSON.stringify(error)}`
+        );
       }
     }
     diagnostics.forEach((fileDiagnostics, fileUri) => {
@@ -72,9 +85,9 @@ export class AnsibleLint {
     return diagnostics;
   }
 
-  private processReport(result: StdResult): Map {
+  private processReport(result: string): Map {
     const diagnostics: Map = new Map();
-    const report = JSON.parse(result.stdout);
+    const report = JSON.parse(result);
     if (report instanceof Array) {
       for (const item of report) {
         if (
@@ -147,8 +160,3 @@ export class AnsibleLint {
     return this.validationCache.get(fileUri)?.values;
   }
 }
-
-interface StdResult {
-  stdout: string;
-  stderr: string;
-}
diff --git a/server/src/services/settingsManager.ts b/server/src/services/settingsManager.ts
index aa38a9f09..43c32eb1e 100644
--- a/server/src/services/settingsManager.ts
+++ b/server/src/services/settingsManager.ts
@@ -10,7 +10,10 @@ export class SettingsManager {
   private documentSettings: Map> =
     new Map();
 
-  private defaultSettings: ExtensionSettings = { maxNumberOfProblems: 1000 };
+  private defaultSettings: ExtensionSettings = {
+    ansible: { path: 'ansible' },
+    ansibleLint: { enabled: true, path: 'ansible-lint' },
+  };
   private globalSettings: ExtensionSettings = this.defaultSettings;
 
   constructor(connection: Connection, hasConfigurationCapability: boolean) {

From 921451a2936ad08e6e6afa6288e922979f742844 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Thu, 13 May 2021 23:56:18 +0200
Subject: [PATCH 039/558] Refactored validation Fixed async loading of
 DocsLibrary and AnsibleConfig

---
 server/src/ansibleLanguageService.ts       | 93 +++++++++-------------
 server/src/providers/validationProvider.ts | 38 ++++++++-
 server/src/services/ansibleConfig.ts       |  3 -
 server/src/services/docsLibrary.ts         |  6 +-
 server/src/services/metadataLibrary.ts     |  4 +-
 server/src/services/workspaceManager.ts    | 20 ++---
 6 files changed, 92 insertions(+), 72 deletions(-)

diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index f4937d1df..8a8ec2686 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -1,5 +1,6 @@
 import {
   Connection,
+  Diagnostic,
   DidChangeConfigurationNotification,
   DidChangeWatchedFilesNotification,
   InitializeParams,
@@ -12,10 +13,7 @@ import { doCompletion } from './providers/completionProvider';
 import { getDefinition } from './providers/definitionProvider';
 import { doHover } from './providers/hoverProvider';
 import { doValidate } from './providers/validationProvider';
-import {
-  WorkspaceFolderContext,
-  WorkspaceManager,
-} from './services/workspaceManager';
+import { WorkspaceManager } from './services/workspaceManager';
 
 export class AnsibleLanguageService {
   private connection: Connection;
@@ -92,7 +90,6 @@ export class AnsibleLanguageService {
             watchers: [
               {
                 // watch for documentMetadata
-                // TODO: Narrow down this watcher once LSP support for multi-root gets better
                 globPattern: '**/meta/main.{yml,yaml}',
               },
             ],
@@ -100,32 +97,29 @@ export class AnsibleLanguageService {
         );
       }
       if (this.hasWorkspaceFolderCapability) {
-        this.connection.workspace.onDidChangeWorkspaceFolders((event) => {
-          this.workspaceManager.handleWorkspaceChanged(event);
+        this.connection.workspace.onDidChangeWorkspaceFolders((e) => {
+          this.workspaceManager.handleWorkspaceChanged(e);
         });
       }
     });
   }
 
   private registerLifecycleEventHandlers() {
-    this.connection.onDidChangeConfiguration((change) => {
+    this.connection.onDidChangeConfiguration((params) => {
       this.workspaceManager.forEachContext((context) => {
-        context.documentSettings.handleConfigurationChanged(change);
+        context.documentSettings.handleConfigurationChanged(params);
       });
 
       // Revalidate all open text documents
-      this.documents.all().forEach((doc) => {
-        this.connection.sendDiagnostics({
-          uri: doc.uri,
-          diagnostics: doValidate(doc),
-        });
+      this.documents.all().forEach(async (doc) => {
+        this.sendDiagnostics(await doValidate(doc));
       });
     });
 
     this.documents.onDidOpen(async (e) => {
       const context = this.workspaceManager.getContext(e.document.uri);
       if (context) {
-        await this.doFullValidation(context, e.document);
+        this.sendDiagnostics(await doValidate(e.document, context.ansibleLint));
       }
     });
 
@@ -142,97 +136,88 @@ export class AnsibleLanguageService {
       });
     });
 
-    this.connection.onDidChangeWatchedFiles((change) => {
+    this.connection.onDidChangeWatchedFiles((params) => {
       this.workspaceManager.forEachContext((context) => {
-        context.documentMetadata.handleWatchedDocumentChange(change);
+        context.documentMetadata.handleWatchedDocumentChange(params);
       });
     });
 
-    this.documents.onDidSave(async (change) => {
-      const context = this.workspaceManager.getContext(change.document.uri);
+    this.documents.onDidSave(async (e) => {
+      const context = this.workspaceManager.getContext(e.document.uri);
       if (context) {
-        await this.doFullValidation(context, change.document);
+        this.sendDiagnostics(await doValidate(e.document, context.ansibleLint));
       }
     });
 
-    this.connection.onDidChangeTextDocument((change) => {
-      const context = this.workspaceManager.getContext(change.textDocument.uri);
+    this.connection.onDidChangeTextDocument((e) => {
+      const context = this.workspaceManager.getContext(e.textDocument.uri);
       if (context) {
         context.ansibleLint.invalidateCacheItems(
-          change.textDocument.uri,
-          change.contentChanges
+          e.textDocument.uri,
+          e.contentChanges
         );
       }
     });
 
-    this.documents.onDidChangeContent((change) => {
-      const diagnostics = doValidate(change.document);
+    this.documents.onDidChangeContent(async (e) => {
+      const context = this.workspaceManager.getContext(e.document.uri);
+      const diagnostics = await (context
+        ? doValidate(e.document, context.ansibleLint, true)
+        : doValidate(e.document));
 
-      const context = this.workspaceManager.getContext(change.document.uri);
-      if (context) {
-        const lintDiagnostics = context.ansibleLint.getValidationFromCache(
-          change.document.uri
-        );
-        if (lintDiagnostics) {
-          diagnostics.push(...lintDiagnostics);
-        }
-      }
-      this.connection.sendDiagnostics({
-        uri: change.document.uri,
-        diagnostics: diagnostics,
-      });
+      this.sendDiagnostics(diagnostics);
     });
 
-    this.connection.onHover((params) => {
+    this.connection.onHover(async (params) => {
       const document = this.documents.get(params.textDocument.uri);
       if (document) {
         const context = this.workspaceManager.getContext(
           params.textDocument.uri
         );
         if (context) {
-          return doHover(document, params.position, context.docsLibrary);
+          return doHover(document, params.position, await context.docsLibrary);
         }
       }
       return null;
     });
 
-    this.connection.onCompletion((params) => {
+    this.connection.onCompletion(async (params) => {
       const document = this.documents.get(params.textDocument.uri);
       if (document) {
         const context = this.workspaceManager.getContext(
           params.textDocument.uri
         );
         if (context) {
-          return doCompletion(document, params.position, context.docsLibrary);
+          return doCompletion(
+            document,
+            params.position,
+            await context.docsLibrary
+          );
         }
       }
       return null;
     });
 
-    this.connection.onDefinition((params) => {
+    this.connection.onDefinition(async (params) => {
       const document = this.documents.get(params.textDocument.uri);
       if (document) {
         const context = this.workspaceManager.getContext(
           params.textDocument.uri
         );
         if (context) {
-          return getDefinition(document, params.position, context.docsLibrary);
+          return getDefinition(
+            document,
+            params.position,
+            await context.docsLibrary
+          );
         }
       }
       return null;
     });
   }
 
-  private async doFullValidation(
-    context: WorkspaceFolderContext,
-    document: TextDocument
-  ) {
-    const diagnostics = await context.ansibleLint.doValidate(document);
+  private sendDiagnostics(diagnostics: Map) {
     for (const [fileUri, fileDiagnostics] of diagnostics) {
-      if (document.uri === fileUri) {
-        // ensure that regular diagnostics are still present
-        fileDiagnostics.push(...doValidate(document));
-      }
       this.connection.sendDiagnostics({
         uri: fileUri,
         diagnostics: fileDiagnostics,
diff --git a/server/src/providers/validationProvider.ts b/server/src/providers/validationProvider.ts
index e18183881..6eeb7c8f5 100644
--- a/server/src/providers/validationProvider.ts
+++ b/server/src/providers/validationProvider.ts
@@ -9,8 +9,44 @@ import {
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
+import { AnsibleLint } from '../services/ansibleLint';
 
-export function doValidate(textDocument: TextDocument): Diagnostic[] {
+/**
+ * Validates the given document.
+ * @param textDocument - the document to validate
+ * @param linter - uses linter
+ * @param quick - only re-evaluates YAML validation and uses lint cache
+ * @returns Map of diagnostics per file.
+ */
+export async function doValidate(
+  textDocument: TextDocument,
+  linter?: AnsibleLint,
+  quick = false
+): Promise> {
+  if (linter) {
+    if (quick) {
+      const diagnostics = getYamlValidation(textDocument);
+      const lintDiagnostics = linter.getValidationFromCache(textDocument.uri);
+      if (lintDiagnostics) {
+        diagnostics.push(...lintDiagnostics);
+      }
+      return new Map([[textDocument.uri, diagnostics]]);
+    } else {
+      const diagnostics = await linter.doValidate(textDocument);
+      for (const [fileUri, fileDiagnostics] of diagnostics) {
+        if (textDocument.uri === fileUri) {
+          // ensure that regular diagnostics are still present
+          fileDiagnostics.push(...getYamlValidation(textDocument));
+        }
+      }
+      return diagnostics;
+    }
+  } else {
+    return new Map([[textDocument.uri, getYamlValidation(textDocument)]]);
+  }
+}
+
+function getYamlValidation(textDocument: TextDocument): Diagnostic[] {
   const diagnostics: Diagnostic[] = [];
   const yDocuments = parseAllDocuments(textDocument.getText(), {
     prettyErrors: false,
diff --git a/server/src/services/ansibleConfig.ts b/server/src/services/ansibleConfig.ts
index a51814fa9..13f68265e 100644
--- a/server/src/services/ansibleConfig.ts
+++ b/server/src/services/ansibleConfig.ts
@@ -1,14 +1,11 @@
 import * as child_process from 'child_process';
 import * as ini from 'ini';
 import * as _ from 'lodash';
-import { SpawnSyncReturns } from 'node:child_process';
 import * as path from 'path';
 import { URL } from 'url';
 import { Connection } from 'vscode-languageserver';
 import { WorkspaceFolderContext } from './workspaceManager';
 
-// const exec = promisify(child_process.exec);
-
 export class AnsibleConfig {
   private connection: Connection;
   private context: WorkspaceFolderContext;
diff --git a/server/src/services/docsLibrary.ts b/server/src/services/docsLibrary.ts
index cff4a7547..83c424821 100644
--- a/server/src/services/docsLibrary.ts
+++ b/server/src/services/docsLibrary.ts
@@ -16,7 +16,8 @@ export class DocsLibrary {
   }
 
   public async initialize(): Promise {
-    for (const modulesPath of this.context.ansibleConfig.module_locations) {
+    const ansibleConfig = await this.context.ansibleConfig;
+    for (const modulesPath of ansibleConfig.module_locations) {
       (await DocsParser.parseDirectory(modulesPath, 'builtin')).forEach(
         (doc) => {
           this.modules.set(doc.fqcn, doc);
@@ -28,8 +29,7 @@ export class DocsLibrary {
         this.docFragments.set(doc.fqcn, doc);
       });
     }
-    for (const collectionsPath of this.context.ansibleConfig
-      .collections_paths) {
+    for (const collectionsPath of ansibleConfig.collections_paths) {
       (await DocsParser.parseDirectory(collectionsPath, 'collection')).forEach(
         (doc) => {
           this.modules.set(doc.fqcn, doc);
diff --git a/server/src/services/metadataLibrary.ts b/server/src/services/metadataLibrary.ts
index 719d7ffa2..811f4bdcf 100644
--- a/server/src/services/metadataLibrary.ts
+++ b/server/src/services/metadataLibrary.ts
@@ -28,9 +28,9 @@ export class MetadataLibrary {
   }
 
   public handleWatchedDocumentChange(
-    change: DidChangeWatchedFilesParams
+    params: DidChangeWatchedFilesParams
   ): void {
-    for (const fileEvent of change.changes) {
+    for (const fileEvent of params.changes) {
       // remove from cache on any change
       this.metadata.delete(fileEvent.uri);
     }
diff --git a/server/src/services/workspaceManager.ts b/server/src/services/workspaceManager.ts
index 827ba1a47..7f52c25fc 100644
--- a/server/src/services/workspaceManager.ts
+++ b/server/src/services/workspaceManager.ts
@@ -96,9 +96,9 @@ export class WorkspaceFolderContext {
   public documentSettings: SettingsManager;
 
   // Lazy-loading anything that needs this context itself
-  private _docsLibrary: DocsLibrary | undefined;
-  private _ansibleConfig: AnsibleConfig | undefined;
-  public _ansibleLint: AnsibleLint | undefined;
+  private _docsLibrary: Thenable | undefined;
+  private _ansibleConfig: Thenable | undefined;
+  private _ansibleLint: AnsibleLint | undefined;
 
   constructor(
     connection: Connection,
@@ -114,18 +114,20 @@ export class WorkspaceFolderContext {
     );
   }
 
-  public get docsLibrary(): DocsLibrary {
+  public get docsLibrary(): Thenable {
     if (!this._docsLibrary) {
-      this._docsLibrary = new DocsLibrary(this);
-      this._docsLibrary.initialize();
+      const docsLibrary = new DocsLibrary(this);
+      this._docsLibrary = docsLibrary.initialize().then(() => docsLibrary);
     }
     return this._docsLibrary;
   }
 
-  public get ansibleConfig(): AnsibleConfig {
+  public get ansibleConfig(): Thenable {
     if (!this._ansibleConfig) {
-      this._ansibleConfig = new AnsibleConfig(this.connection, this);
-      this._ansibleConfig.initialize();
+      const ansibleConfig = new AnsibleConfig(this.connection, this);
+      this._ansibleConfig = ansibleConfig
+        .initialize()
+        .then(() => ansibleConfig);
     }
     return this._ansibleConfig;
   }

From c8ae40a804ae675cdaed8335c79e26134fdc7c54 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Mon, 17 May 2021 00:07:34 +0200
Subject: [PATCH 040/558] Implemented better handling of configuration changes.
 Cleaned-up client capability handling.

---
 server/src/ansibleLanguageService.ts       | 75 ++++++++++------------
 server/src/providers/completionProvider.ts |  7 +-
 server/src/server.ts                       | 18 +-----
 server/src/services/settingsManager.ts     | 67 +++++++++++++++----
 server/src/services/workspaceManager.ts    | 41 ++++++++----
 5 files changed, 123 insertions(+), 85 deletions(-)

diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index 8a8ec2686..14cee49f8 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -15,14 +15,19 @@ import { doHover } from './providers/hoverProvider';
 import { doValidate } from './providers/validationProvider';
 import { WorkspaceManager } from './services/workspaceManager';
 
+/**
+ * Initializes the connection and registers all lifecycle event handlers.
+ *
+ * The event handlers interact with the `WorkspaceManager` to find the relevant
+ * context and service instance, and then perform the required actions.
+ *
+ * Providers are used here directly in the event handlers.
+ */
 export class AnsibleLanguageService {
   private connection: Connection;
   private documents: TextDocuments;
 
   private workspaceManager: WorkspaceManager;
-  private hasConfigurationCapability = false;
-  private hasWorkspaceFolderCapability = false;
-  private hasDiagnosticRelatedInformationCapability = false;
 
   constructor(connection: Connection, documents: TextDocuments) {
     this.connection = connection;
@@ -39,27 +44,11 @@ export class AnsibleLanguageService {
     this.connection.onInitialize((params: InitializeParams) => {
       this.workspaceManager.setWorkspaceFolders(params.workspaceFolders || []);
       this.workspaceManager.setCapabilities(params.capabilities);
-      const capabilities = params.capabilities;
-
-      // Does the client support the `workspace/configuration` request?
-      // If not, we fall back using global settings.
-      this.hasConfigurationCapability = !!(
-        capabilities.workspace && !!capabilities.workspace.configuration
-      );
-      this.hasWorkspaceFolderCapability = !!(
-        capabilities.workspace && !!capabilities.workspace.workspaceFolders
-      );
-      this.hasDiagnosticRelatedInformationCapability = !!(
-        capabilities.textDocument &&
-        capabilities.textDocument.publishDiagnostics &&
-        capabilities.textDocument.publishDiagnostics.relatedInformation
-      );
 
       const result: InitializeResult = {
         capabilities: {
           textDocumentSync: TextDocumentSyncKind.Incremental,
           hoverProvider: true,
-          // Tell the client that this server supports code completion.
           completionProvider: {
             resolveProvider: false,
           },
@@ -67,10 +56,13 @@ export class AnsibleLanguageService {
           workspace: {},
         },
       };
-      if (this.hasWorkspaceFolderCapability) {
+      if (
+        this.workspaceManager.clientCapabilities.workspace?.workspaceFolders
+      ) {
         result.capabilities.workspace = {
           workspaceFolders: {
             supported: true,
+            changeNotifications: true,
           },
         };
       }
@@ -78,39 +70,40 @@ export class AnsibleLanguageService {
     });
 
     this.connection.onInitialized(() => {
-      if (this.hasConfigurationCapability) {
-        // Register for all configuration changes.
+      if (this.workspaceManager.clientCapabilities.workspace?.configuration) {
+        // register for all configuration changes
         this.connection.client.register(
           DidChangeConfigurationNotification.type,
-          undefined
-        );
-        this.connection.client.register(
-          DidChangeWatchedFilesNotification.type,
           {
-            watchers: [
-              {
-                // watch for documentMetadata
-                globPattern: '**/meta/main.{yml,yaml}',
-              },
-            ],
+            section: 'ansible',
           }
         );
       }
-      if (this.hasWorkspaceFolderCapability) {
+      if (
+        this.workspaceManager.clientCapabilities.workspace?.workspaceFolders
+      ) {
         this.connection.workspace.onDidChangeWorkspaceFolders((e) => {
           this.workspaceManager.handleWorkspaceChanged(e);
         });
       }
+      this.connection.client.register(DidChangeWatchedFilesNotification.type, {
+        watchers: [
+          {
+            // watch for documentMetadata
+            globPattern: '**/meta/main.{yml,yaml}',
+          },
+        ],
+      });
     });
   }
 
   private registerLifecycleEventHandlers() {
-    this.connection.onDidChangeConfiguration((params) => {
-      this.workspaceManager.forEachContext((context) => {
-        context.documentSettings.handleConfigurationChanged(params);
-      });
+    this.connection.onDidChangeConfiguration(async (params) => {
+      await this.workspaceManager.forEachContext((context) =>
+        context.documentSettings.handleConfigurationChanged(params)
+      );
 
-      // Revalidate all open text documents
+      // revalidate all open text documents
       this.documents.all().forEach(async (doc) => {
         this.sendDiagnostics(await doValidate(doc));
       });
@@ -137,9 +130,9 @@ export class AnsibleLanguageService {
     });
 
     this.connection.onDidChangeWatchedFiles((params) => {
-      this.workspaceManager.forEachContext((context) => {
-        context.documentMetadata.handleWatchedDocumentChange(params);
-      });
+      this.workspaceManager.forEachContext((context) =>
+        context.documentMetadata.handleWatchedDocumentChange(params)
+      );
     });
 
     this.documents.onDidSave(async (e) => {
diff --git a/server/src/providers/completionProvider.ts b/server/src/providers/completionProvider.ts
index 1969de1c4..f6673c416 100644
--- a/server/src/providers/completionProvider.ts
+++ b/server/src/providers/completionProvider.ts
@@ -1,4 +1,3 @@
-import _ = require('lodash');
 import { CompletionItem, CompletionItemKind } from 'vscode-languageserver';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
@@ -45,9 +44,9 @@ export async function doCompletion(
         if (module && module.documentation) {
           const moduleOptions = module.documentation.options;
 
-          const optionMap = (new AncestryBuilder(modulePath)
-            .parent(Pair)
-            .get() as Pair).value as YAMLMap;
+          const optionMap = (
+            new AncestryBuilder(modulePath).parent(Pair).get() as Pair
+          ).value as YAMLMap;
 
           // find options that have been already provided by the user
           const providedOptions = new Set(
diff --git a/server/src/server.ts b/server/src/server.ts
index 4aae23388..41a179506 100644
--- a/server/src/server.ts
+++ b/server/src/server.ts
@@ -13,7 +13,8 @@ import { AnsibleLanguageService } from './ansibleLanguageService';
 // Also include all preview / proposed LSP features.
 const connection: Connection = createConnection(ProposedFeatures.all);
 
-const docChangeHandlers: NotificationHandler[] = [];
+const docChangeHandlers: NotificationHandler[] =
+  [];
 connection.onDidChangeTextDocument((params) => {
   for (const handler of docChangeHandlers) {
     handler(params);
@@ -39,21 +40,6 @@ const connectionProxy = new Proxy(connection, {
 // Create a simple text document manager.
 const documents: TextDocuments = new TextDocuments(TextDocument);
 
-// function getDocumentSettings(resource: string): Thenable {
-//   if (!hasConfigurationCapability) {
-//     return Promise.resolve(globalSettings);
-//   }
-//   let result = documentSettings.get(resource);
-//   if (!result) {
-//     result = connection.workspace.getConfiguration({
-//       scopeUri: resource,
-//       section: 'languageServerExample',
-//     });
-//     documentSettings.set(resource, result);
-//   }
-//   return result;
-// }
-
 const context = new AnsibleLanguageService(connectionProxy, documents);
 context.initialize();
 
diff --git a/server/src/services/settingsManager.ts b/server/src/services/settingsManager.ts
index 43c32eb1e..b6a099ad8 100644
--- a/server/src/services/settingsManager.ts
+++ b/server/src/services/settingsManager.ts
@@ -1,10 +1,12 @@
+import * as _ from 'lodash';
 import { Connection } from 'vscode-languageserver';
 import { DidChangeConfigurationParams } from 'vscode-languageserver-protocol';
 import { ExtensionSettings } from '../interfaces/extensionSettings';
 
 export class SettingsManager {
   private connection: Connection;
-  private hasConfigurationCapability;
+  private clientSupportsConfigRequests;
+  private configurationChangeHandlers: Map = new Map();
 
   // cache of document settings per workspace file
   private documentSettings: Map> =
@@ -16,13 +18,23 @@ export class SettingsManager {
   };
   private globalSettings: ExtensionSettings = this.defaultSettings;
 
-  constructor(connection: Connection, hasConfigurationCapability: boolean) {
+  constructor(connection: Connection, clientSupportsConfigRequests: boolean) {
     this.connection = connection;
-    this.hasConfigurationCapability = hasConfigurationCapability;
+    this.clientSupportsConfigRequests = clientSupportsConfigRequests;
+  }
+
+  /**
+   * Register a handler for configuration change on particular URI.
+   *
+   * Change detection is cache-based. If the client does not support the
+   * configuration requests, all handlers will be fired.
+   */
+  public onConfigurationChanged(uri: string, handler: { (): void }): void {
+    this.configurationChangeHandlers.set(uri, handler);
   }
 
   public get(uri: string): Thenable {
-    if (!this.hasConfigurationCapability) {
+    if (!this.clientSupportsConfigRequests) {
       return Promise.resolve(this.globalSettings);
     }
     let result = this.documentSettings.get(uri);
@@ -40,16 +52,45 @@ export class SettingsManager {
     this.documentSettings.delete(uri);
   }
 
-  public handleConfigurationChanged(
-    change: DidChangeConfigurationParams
-  ): void {
-    this.documentSettings.clear();
-    if (this.hasConfigurationCapability) {
-      // Reset all cached document settings
-      this.documentSettings.clear();
+  public async handleConfigurationChanged(
+    params: DidChangeConfigurationParams
+  ): Promise {
+    if (this.clientSupportsConfigRequests) {
+      // find configuration change handlers to fire
+
+      const newDocumentSettings: Map> =
+        new Map();
+      const handlersToFire: { (): void }[] = [];
+
+      for (const [uri, handler] of this.configurationChangeHandlers) {
+        const config = await this.documentSettings.get(uri);
+        if (config) {
+          // found cached values, now compare to the new ones
+
+          const newConfigPromise = this.connection.workspace.getConfiguration({
+            scopeUri: uri,
+            section: 'ansible',
+          });
+          newDocumentSettings.set(uri, newConfigPromise);
+
+          if (!_.isEqual(config, await newConfigPromise)) {
+            // handlers may need to read config, so can't fire them until the
+            // cache is purged
+            handlersToFire.push(handler);
+          }
+        }
+      }
+
+      // resetting documents settings, but not wasting newly fetched values
+      this.documentSettings = newDocumentSettings;
+
+      // fire handlers
+      handlersToFire.forEach((h) => h());
     } else {
-      this.globalSettings =
-        change.settings.languageServerExample || this.defaultSettings;
+      if (params.settings.ansible) {
+        this.configurationChangeHandlers.forEach((h) => h());
+      }
+      this.globalSettings = params.settings.ansible || this.defaultSettings;
     }
   }
 }
diff --git a/server/src/services/workspaceManager.ts b/server/src/services/workspaceManager.ts
index 7f52c25fc..a61b84365 100644
--- a/server/src/services/workspaceManager.ts
+++ b/server/src/services/workspaceManager.ts
@@ -1,3 +1,4 @@
+import * as _ from 'lodash';
 import {
   ClientCapabilities,
   Connection,
@@ -10,11 +11,14 @@ import { DocsLibrary } from './docsLibrary';
 import { MetadataLibrary } from './metadataLibrary';
 import { SettingsManager } from './settingsManager';
 
+/**
+ * Holds the overall context for the whole workspace.
+ */
 export class WorkspaceManager {
   private connection: Connection;
   private sortedWorkspaceFolders: WorkspaceFolder[] = [];
   private folderContexts: Map = new Map();
-  private capabilities: ClientCapabilities = {};
+  public clientCapabilities: ClientCapabilities = {};
 
   constructor(connection: Connection) {
     this.connection = connection;
@@ -25,7 +29,7 @@ export class WorkspaceManager {
   }
 
   public setCapabilities(capabilities: ClientCapabilities): void {
-    this.capabilities = capabilities;
+    this.clientCapabilities = capabilities;
   }
 
   /**
@@ -39,7 +43,7 @@ export class WorkspaceManager {
         context = new WorkspaceFolderContext(
           this.connection,
           workspaceFolder,
-          this.capabilities
+          this
         );
         this.folderContexts.set(workspaceFolder.uri, context);
       }
@@ -47,12 +51,14 @@ export class WorkspaceManager {
     }
   }
 
-  public forEachContext(
-    callbackfn: (value: WorkspaceFolderContext) => void
-  ): void {
-    for (const folder of this.folderContexts.values()) {
-      callbackfn(folder);
-    }
+  public async forEachContext(
+    callbackfn: (value: WorkspaceFolderContext) => Promise | void
+  ): Promise {
+    await Promise.all(
+      _.map(Array.from(this.folderContexts.values()), (folder) =>
+        callbackfn(folder)
+      )
+    );
   }
 
   /**
@@ -89,6 +95,10 @@ export class WorkspaceManager {
   }
 }
 
+/**
+ * Holds the context for particular workspace folder. This context is used by
+ * all services to interact with the client and with each other.
+ */
 export class WorkspaceFolderContext {
   private connection: Connection;
   public workspaceFolder: WorkspaceFolder;
@@ -103,14 +113,23 @@ export class WorkspaceFolderContext {
   constructor(
     connection: Connection,
     workspaceFolder: WorkspaceFolder,
-    capabilities: ClientCapabilities
+    workspaceManager: WorkspaceManager
   ) {
     this.connection = connection;
     this.workspaceFolder = workspaceFolder;
     this.documentMetadata = new MetadataLibrary(connection);
     this.documentSettings = new SettingsManager(
       connection,
-      !!(capabilities.workspace && !!capabilities.workspace.configuration)
+      !!workspaceManager.clientCapabilities.workspace?.configuration
+    );
+    this.documentSettings.onConfigurationChanged(
+      this.workspaceFolder.uri,
+      () => {
+        // in case the configuration changes for this folder, we should
+        // invalidate the services that rely on it in initialization
+        this._ansibleConfig = undefined;
+        this._docsLibrary = undefined;
+      }
     );
   }
 

From 391a1b016282bb8ea31e66e6bb3dfd21a5f229d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Wed, 19 May 2021 00:26:45 +0200
Subject: [PATCH 041/558] WIP: Module name completion implementation

---
 server/src/providers/completionProvider.ts | 49 ++++++++++++++++++++--
 server/src/services/ansibleLint.ts         |  2 +-
 server/src/services/docsLibrary.ts         |  7 ++++
 server/src/services/docsParser.ts          | 10 +++--
 server/src/utils/ansible.ts                | 47 +++++++++++++++++++++
 server/src/utils/yaml.ts                   |  4 ++
 6 files changed, 112 insertions(+), 7 deletions(-)
 create mode 100644 server/src/utils/ansible.ts

diff --git a/server/src/providers/completionProvider.ts b/server/src/providers/completionProvider.ts
index f6673c416..a42c02ca4 100644
--- a/server/src/providers/completionProvider.ts
+++ b/server/src/providers/completionProvider.ts
@@ -3,6 +3,7 @@ import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
 import { Pair, Scalar, YAMLMap } from 'yaml/types';
 import { DocsLibrary, IOption } from '../services/docsLibrary';
+import { isTaskKeyword } from '../utils/ansible';
 import { formatOption, getDetails } from '../utils/docsFormatter';
 import { AncestryBuilder, getPathAt, mayBeModule } from '../utils/yaml';
 
@@ -13,13 +14,13 @@ export async function doCompletion(
 ): Promise {
   let preparedText = document.getText();
   const offset = document.offsetAt(position);
-  // HACK: We need to insert a dummy character, so that the YAML parser can properly recognize the scope.
+  // HACK: We need to insert a dummy mapping, so that the YAML parser can properly recognize the scope.
   // This is particularly important when parser has nothing more than
   // indentation to determine the scope of the current line. `_:` is ok here,
   // since we expect to work on a Pair level
   preparedText = insert(preparedText, offset, '_:');
   // We need a newline at the EOF, so that the YAML parser can properly recognize the scope
-  // This is for future case when we might need to avoid the dummy character
+  // This is for future case when we might need to avoid the dummy mapping
   preparedText = `${preparedText}\n`;
   const yamlDocs = parseAllDocuments(preparedText);
 
@@ -29,7 +30,9 @@ export async function doCompletion(
   if (path) {
     const node = path[path.length - 1];
     if (node) {
-      const modulePath = new AncestryBuilder(path)
+      // First check if we're looking for module options
+      // In that case, the module name is a key of a map
+      let modulePath = new AncestryBuilder(path)
         .parent(YAMLMap)
         .parentKey()
         .getPath();
@@ -105,6 +108,46 @@ export async function doCompletion(
             });
         }
       }
+      modulePath = path;
+      if (modulePath && mayBeModule(modulePath)) {
+        const taskParameterMap = new AncestryBuilder(modulePath)
+          .parent(YAMLMap)
+          .get() as YAMLMap;
+
+        // find task parameters that have been already provided by the user
+        const providedParameters = new Set(
+          taskParameterMap.items.map((pair) => {
+            if (pair.key && pair.key instanceof Scalar) {
+              return pair.key.value;
+            }
+          })
+        );
+        // should usually be 0 or 1
+        const providedModuleNames = [...providedParameters].filter(
+          (x) => !x || !isTaskKeyword(x)
+        );
+
+        // check if the module has already been provided
+        let moduleAlreadyProvided = false;
+        for (const m of providedModuleNames) {
+          // incidentally, the hack mentioned above prevents finding a module in
+          // case the cursor is on it
+          if (await docsLibrary.findModule(m, path, document)) {
+            moduleAlreadyProvided = true;
+            break;
+          }
+        }
+        if (!moduleAlreadyProvided)
+          return Array.from(docsLibrary.moduleFqcns).map((moduleFqcn) => {
+            const [namespace, collection, name] = moduleFqcn.split('.');
+            return {
+              label: name,
+              kind: CompletionItemKind.Method,
+              detail: `${namespace}.${collection}`,
+              filterText: moduleFqcn,
+            };
+          });
+      }
     }
   }
   return null;
diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
index 8dcda5c40..0f6b5fc99 100644
--- a/server/src/services/ansibleLint.ts
+++ b/server/src/services/ansibleLint.ts
@@ -99,7 +99,7 @@ export class AnsibleLint {
             typeof item.location.lines.begin === 'number')
         ) {
           const begin_line =
-            item.location.lines.begin || item.location.lines.begin.line || 1;
+            item.location.lines.begin.line || item.location.lines.begin || 1;
           const begin_column = item.location.lines.begin.column || 1;
           const start: Position = {
             line: begin_line - 1,
diff --git a/server/src/services/docsLibrary.ts b/server/src/services/docsLibrary.ts
index 83c424821..4e8cc0557 100644
--- a/server/src/services/docsLibrary.ts
+++ b/server/src/services/docsLibrary.ts
@@ -8,6 +8,7 @@ import { DocsParser } from './docsParser';
 import { WorkspaceFolderContext } from './workspaceManager';
 export class DocsLibrary {
   private modules = new Map();
+  private _moduleFqcns = new Set();
   private docFragments = new Map();
   private context: WorkspaceFolderContext;
 
@@ -21,6 +22,7 @@ export class DocsLibrary {
       (await DocsParser.parseDirectory(modulesPath, 'builtin')).forEach(
         (doc) => {
           this.modules.set(doc.fqcn, doc);
+          this.moduleFqcns.add(doc.fqcn);
         }
       );
       (
@@ -33,6 +35,7 @@ export class DocsLibrary {
       (await DocsParser.parseDirectory(collectionsPath, 'collection')).forEach(
         (doc) => {
           this.modules.set(doc.fqcn, doc);
+          this.moduleFqcns.add(doc.fqcn);
         }
       );
       (
@@ -82,6 +85,10 @@ export class DocsLibrary {
     return module;
   }
 
+  get moduleFqcns(): Set {
+    return this._moduleFqcns;
+  }
+
   private processDocumentationFragments(module: IModuleMetadata) {
     module.fragments = [];
     if (
diff --git a/server/src/services/docsParser.ts b/server/src/services/docsParser.ts
index 83e37c589..1b8bdec8d 100644
--- a/server/src/services/docsParser.ts
+++ b/server/src/services/docsParser.ts
@@ -6,7 +6,8 @@ import { IModuleMetadata } from './docsLibrary';
 import globby = require('globby');
 
 export class DocsParser {
-  public static docsRegex = /(?
[ \t]*DOCUMENTATION\s*=\s*r?(?'''|""")(?:\n---)?\n?)(?.*?)\k/s;
+  public static docsRegex =
+    /(?
[ \t]*DOCUMENTATION\s*=\s*r?(?'''|""")(?:\n---)?\n?)(?.*?)\k/s;
 
   public static async parseDirectory(
     dir: string,
@@ -28,10 +29,13 @@ export class DocsParser {
         ]);
         break;
       case 'collection':
-        files = await globby([`${dir}/**/modules/*.py`, '!/**/_*.py']);
+        files = await globby([`${dir}/**/modules/*.py`, `!${dir}/**/_*.py`]);
         break;
       case 'collection_doc_fragment':
-        files = await globby([`${dir}/**/doc_fragments/*.py`, '!/**/_*.py']);
+        files = await globby([
+          `${dir}/**/doc_fragments/*.py`,
+          `!${dir}/**/doc_fragments/_*.py`,
+        ]);
         break;
     }
     return Promise.all(
diff --git a/server/src/utils/ansible.ts b/server/src/utils/ansible.ts
new file mode 100644
index 000000000..b39d9884f
--- /dev/null
+++ b/server/src/utils/ansible.ts
@@ -0,0 +1,47 @@
+export const taskKeywords = new Set([
+  'action',
+  'any_errors_fatal',
+  'args',
+  'async',
+  'become',
+  'become_exe',
+  'become_flags',
+  'become_method',
+  'become_user',
+  'changed_when',
+  'check_mode',
+  'collections',
+  'connection',
+  'debugger',
+  'delay',
+  'delegate_facts',
+  'delegate_to',
+  'diff',
+  'environment',
+  'failed_when',
+  'ignore_errors',
+  'ignore_unreachable',
+  'local_action',
+  'loop',
+  'loop_control',
+  'module_defaults',
+  'name',
+  'no_log',
+  'notify',
+  'poll',
+  'port',
+  'register',
+  'remote_user',
+  'retries',
+  'run_once',
+  'tags',
+  'throttle',
+  'timeout',
+  'until',
+  'vars',
+  'when',
+]);
+
+export function isTaskKeyword(value: string): boolean {
+  return taskKeywords.has(value) || value.startsWith('with_');
+}
diff --git a/server/src/utils/yaml.ts b/server/src/utils/yaml.ts
index 28ecd14e6..10c4f867f 100644
--- a/server/src/utils/yaml.ts
+++ b/server/src/utils/yaml.ts
@@ -3,6 +3,10 @@ import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { Document } from 'yaml';
 import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
 
+/**
+ * A helper class used for building YAML path assertions. The assertions are
+ * built up from the most nested (last in array) element.
+ */
 export class AncestryBuilder {
   private _path: Node[];
 

From d512d16b6cfb7c1d12c72802b1d13600b1b21474 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Thu, 20 May 2021 00:18:12 +0200
Subject: [PATCH 042/558] Finished implementation of module name completions.
 Added exception handling for lifecycle event handlers.

---
 package.json                               |   6 +
 server/src/ansibleLanguageService.ts       | 207 ++++++++++++++-------
 server/src/interfaces/extensionSettings.ts |   2 +-
 server/src/providers/completionProvider.ts |  84 ++++++++-
 server/src/providers/definitionProvider.ts |   6 +-
 server/src/providers/hoverProvider.ts      |   8 +-
 server/src/services/ansibleLint.ts         |   1 +
 server/src/services/docsLibrary.ts         |  31 ++-
 server/src/services/settingsManager.ts     |   2 +-
 server/src/utils/docsFormatter.ts          |  10 +-
 10 files changed, 269 insertions(+), 88 deletions(-)

diff --git a/package.json b/package.json
index 2adfb52e7..105388841 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,12 @@
           "default": "ansible",
           "description": "Path to the ansible executable."
         },
+        "ansible.ansible.useFullyQualifiedCollectionNames": {
+          "scope": "resource",
+          "type": "boolean",
+          "default": true,
+          "description": "Always use fully qualified collection names (FQCN) when inserting a module name. Disabling it will only use FQCNs when necessary."
+        },
         "ansible.ansibleLint.enabled": {
           "scope": "resource",
           "type": "boolean",
diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index 14cee49f8..cadac1b1e 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -9,7 +9,10 @@ import {
   TextDocumentSyncKind,
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
-import { doCompletion } from './providers/completionProvider';
+import {
+  doCompletion,
+  doCompletionResolve,
+} from './providers/completionProvider';
 import { getDefinition } from './providers/definitionProvider';
 import { doHover } from './providers/hoverProvider';
 import { doValidate } from './providers/validationProvider';
@@ -50,7 +53,7 @@ export class AnsibleLanguageService {
           textDocumentSync: TextDocumentSyncKind.Incremental,
           hoverProvider: true,
           completionProvider: {
-            resolveProvider: false,
+            resolveProvider: true,
           },
           definitionProvider: true,
           workspace: {},
@@ -99,116 +102,190 @@ export class AnsibleLanguageService {
 
   private registerLifecycleEventHandlers() {
     this.connection.onDidChangeConfiguration(async (params) => {
-      await this.workspaceManager.forEachContext((context) =>
-        context.documentSettings.handleConfigurationChanged(params)
-      );
+      try {
+        await this.workspaceManager.forEachContext((context) =>
+          context.documentSettings.handleConfigurationChanged(params)
+        );
 
-      // revalidate all open text documents
-      this.documents.all().forEach(async (doc) => {
-        this.sendDiagnostics(await doValidate(doc));
-      });
+        // revalidate all open text documents
+        this.documents.all().forEach(async (doc) => {
+          this.sendDiagnostics(await doValidate(doc));
+        });
+      } catch (error) {
+        this.handleError(error, 'onDidChangeConfiguration');
+      }
     });
 
     this.documents.onDidOpen(async (e) => {
-      const context = this.workspaceManager.getContext(e.document.uri);
-      if (context) {
-        this.sendDiagnostics(await doValidate(e.document, context.ansibleLint));
+      try {
+        const context = this.workspaceManager.getContext(e.document.uri);
+        if (context) {
+          this.sendDiagnostics(
+            await doValidate(e.document, context.ansibleLint)
+          );
+        }
+      } catch (error) {
+        this.handleError(error, 'onDidOpen');
       }
     });
 
     this.documents.onDidClose((e) => {
-      const context = this.workspaceManager.getContext(e.document.uri);
-      if (context) {
-        context.documentSettings.handleDocumentClosed(e.document.uri);
-      }
+      try {
+        const context = this.workspaceManager.getContext(e.document.uri);
+        if (context) {
+          context.documentSettings.handleDocumentClosed(e.document.uri);
+        }
 
-      // need to clear the diagnostics, otherwise they remain after changing language
-      this.connection.sendDiagnostics({
-        uri: e.document.uri,
-        diagnostics: [],
-      });
+        // need to clear the diagnostics, otherwise they remain after changing language
+        this.connection.sendDiagnostics({
+          uri: e.document.uri,
+          diagnostics: [],
+        });
+      } catch (error) {
+        this.handleError(error, 'onDidClose');
+      }
     });
 
     this.connection.onDidChangeWatchedFiles((params) => {
-      this.workspaceManager.forEachContext((context) =>
-        context.documentMetadata.handleWatchedDocumentChange(params)
-      );
+      try {
+        this.workspaceManager.forEachContext((context) =>
+          context.documentMetadata.handleWatchedDocumentChange(params)
+        );
+      } catch (error) {
+        this.handleError(error, 'onDidChangeWatchedFiles');
+      }
     });
 
     this.documents.onDidSave(async (e) => {
-      const context = this.workspaceManager.getContext(e.document.uri);
-      if (context) {
-        this.sendDiagnostics(await doValidate(e.document, context.ansibleLint));
+      try {
+        const context = this.workspaceManager.getContext(e.document.uri);
+        if (context) {
+          this.sendDiagnostics(
+            await doValidate(e.document, context.ansibleLint)
+          );
+        }
+      } catch (error) {
+        this.handleError(error, 'onDidSave');
       }
     });
 
     this.connection.onDidChangeTextDocument((e) => {
-      const context = this.workspaceManager.getContext(e.textDocument.uri);
-      if (context) {
-        context.ansibleLint.invalidateCacheItems(
-          e.textDocument.uri,
-          e.contentChanges
-        );
+      try {
+        const context = this.workspaceManager.getContext(e.textDocument.uri);
+        if (context) {
+          context.ansibleLint.invalidateCacheItems(
+            e.textDocument.uri,
+            e.contentChanges
+          );
+        }
+      } catch (error) {
+        this.handleError(error, 'onDidChangeTextDocument');
       }
     });
 
     this.documents.onDidChangeContent(async (e) => {
-      const context = this.workspaceManager.getContext(e.document.uri);
-      const diagnostics = await (context
-        ? doValidate(e.document, context.ansibleLint, true)
-        : doValidate(e.document));
+      try {
+        const context = this.workspaceManager.getContext(e.document.uri);
+        // depending on whether we have the context, we either validate with
+        // Ansible-lint or perform simple YAML validation
+        const diagnostics = await (context
+          ? doValidate(e.document, context.ansibleLint, true)
+          : doValidate(e.document));
 
-      this.sendDiagnostics(diagnostics);
+        this.sendDiagnostics(diagnostics);
+      } catch (error) {
+        this.handleError(error, 'onDidChangeContent');
+      }
     });
 
     this.connection.onHover(async (params) => {
-      const document = this.documents.get(params.textDocument.uri);
-      if (document) {
-        const context = this.workspaceManager.getContext(
-          params.textDocument.uri
-        );
-        if (context) {
-          return doHover(document, params.position, await context.docsLibrary);
+      try {
+        const document = this.documents.get(params.textDocument.uri);
+        if (document) {
+          const context = this.workspaceManager.getContext(
+            params.textDocument.uri
+          );
+          if (context) {
+            return await doHover(
+              document,
+              params.position,
+              await context.docsLibrary
+            );
+          }
         }
+      } catch (error) {
+        this.handleError(error, 'onHover');
       }
       return null;
     });
 
     this.connection.onCompletion(async (params) => {
-      const document = this.documents.get(params.textDocument.uri);
-      if (document) {
-        const context = this.workspaceManager.getContext(
-          params.textDocument.uri
-        );
-        if (context) {
-          return doCompletion(
-            document,
-            params.position,
-            await context.docsLibrary
+      try {
+        const document = this.documents.get(params.textDocument.uri);
+        if (document) {
+          const context = this.workspaceManager.getContext(
+            params.textDocument.uri
           );
+          if (context) {
+            return await doCompletion(document, params.position, context);
+          }
         }
+      } catch (error) {
+        this.handleError(error, 'onCompletion');
       }
       return null;
     });
 
+    this.connection.onCompletionResolve(async (completionItem) => {
+      try {
+        if (completionItem.data?.documentUri) {
+          const context = this.workspaceManager.getContext(
+            completionItem.data?.documentUri
+          );
+          if (context) {
+            return await doCompletionResolve(completionItem, context);
+          }
+        }
+      } catch (error) {
+        this.handleError(error, 'onCompletionResolve');
+      }
+      return completionItem;
+    });
+
     this.connection.onDefinition(async (params) => {
-      const document = this.documents.get(params.textDocument.uri);
-      if (document) {
-        const context = this.workspaceManager.getContext(
-          params.textDocument.uri
-        );
-        if (context) {
-          return getDefinition(
-            document,
-            params.position,
-            await context.docsLibrary
+      try {
+        const document = this.documents.get(params.textDocument.uri);
+        if (document) {
+          const context = this.workspaceManager.getContext(
+            params.textDocument.uri
           );
+          if (context) {
+            return await getDefinition(
+              document,
+              params.position,
+              await context.docsLibrary
+            );
+          }
         }
+      } catch (error) {
+        this.handleError(error, 'onDefinition');
       }
       return null;
     });
   }
 
+  private handleError(error: unknown, contextName: string) {
+    const leadMessage = `An error occurred in '${contextName}' handler: `;
+    if (error instanceof Error) {
+      const stack = error.stack ? `\n${error.stack}` : '';
+      this.connection.console.error(
+        `${leadMessage}[${error.name}] ${error.message}${stack}`
+      );
+    } else {
+      this.connection.console.error(leadMessage + JSON.stringify(error));
+    }
+  }
+
   private sendDiagnostics(diagnostics: Map) {
     for (const [fileUri, fileDiagnostics] of diagnostics) {
       this.connection.sendDiagnostics({
diff --git a/server/src/interfaces/extensionSettings.ts b/server/src/interfaces/extensionSettings.ts
index a37bf926a..391db139c 100644
--- a/server/src/interfaces/extensionSettings.ts
+++ b/server/src/interfaces/extensionSettings.ts
@@ -1,4 +1,4 @@
 export interface ExtensionSettings {
-  ansible: { path: string };
+  ansible: { path: string; useFullyQualifiedCollectionNames: boolean };
   ansibleLint: { enabled: boolean; path: string };
 }
diff --git a/server/src/providers/completionProvider.ts b/server/src/providers/completionProvider.ts
index a42c02ca4..ead2001c6 100644
--- a/server/src/providers/completionProvider.ts
+++ b/server/src/providers/completionProvider.ts
@@ -3,14 +3,20 @@ import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
 import { Pair, Scalar, YAMLMap } from 'yaml/types';
 import { DocsLibrary, IOption } from '../services/docsLibrary';
+import { WorkspaceFolderContext } from '../services/workspaceManager';
 import { isTaskKeyword } from '../utils/ansible';
-import { formatOption, getDetails } from '../utils/docsFormatter';
-import { AncestryBuilder, getPathAt, mayBeModule } from '../utils/yaml';
+import { formatModule, formatOption, getDetails } from '../utils/docsFormatter';
+import {
+  AncestryBuilder,
+  getDeclaredCollections,
+  getPathAt,
+  mayBeModule,
+} from '../utils/yaml';
 
 export async function doCompletion(
   document: TextDocument,
   position: Position,
-  docsLibrary: DocsLibrary
+  context: WorkspaceFolderContext
 ): Promise {
   let preparedText = document.getText();
   const offset = document.offsetAt(position);
@@ -30,6 +36,8 @@ export async function doCompletion(
   if (path) {
     const node = path[path.length - 1];
     if (node) {
+      const docsLibrary = await context.docsLibrary;
+      const config = await context.documentSettings.get(document.uri);
       // First check if we're looking for module options
       // In that case, the module name is a key of a map
       let modulePath = new AncestryBuilder(path)
@@ -42,7 +50,7 @@ export async function doCompletion(
         const module = await docsLibrary.findModule(
           moduleNode.value,
           modulePath,
-          document
+          document.uri
         );
         if (module && module.documentation) {
           const moduleOptions = module.documentation.options;
@@ -132,7 +140,7 @@ export async function doCompletion(
         for (const m of providedModuleNames) {
           // incidentally, the hack mentioned above prevents finding a module in
           // case the cursor is on it
-          if (await docsLibrary.findModule(m, path, document)) {
+          if (await docsLibrary.findModule(m, path, document.uri)) {
             moduleAlreadyProvided = true;
             break;
           }
@@ -142,9 +150,17 @@ export async function doCompletion(
             const [namespace, collection, name] = moduleFqcn.split('.');
             return {
               label: name,
-              kind: CompletionItemKind.Method,
+              kind: CompletionItemKind.Class,
               detail: `${namespace}.${collection}`,
               filterText: moduleFqcn,
+              data: {
+                documentUri: document.uri, // preserve document URI for completion request
+                moduleFqcn: moduleFqcn,
+                inlineCollections: getDeclaredCollections(modulePath),
+              },
+              insertText: atEndOfLine(document, position)
+                ? `${moduleFqcn}: `
+                : moduleFqcn,
             };
           });
       }
@@ -153,6 +169,62 @@ export async function doCompletion(
   return null;
 }
 
+export async function doCompletionResolve(
+  completionItem: CompletionItem,
+  context: WorkspaceFolderContext
+): Promise {
+  if (completionItem.kind === CompletionItemKind.Class) {
+    // resolve completion for a module
+
+    if (completionItem.data?.moduleFqcn && completionItem.data?.documentUri) {
+      const module = await (
+        await context.docsLibrary
+      ).findModule(completionItem.data.moduleFqcn);
+
+      if (module && module.documentation) {
+        const [namespace, collection, name] =
+          completionItem.data.moduleFqcn.split('.');
+
+        let useFqcn = (
+          await context.documentSettings.get(completionItem.data.documentUri)
+        ).ansible.useFullyQualifiedCollectionNames;
+
+        if (!useFqcn) {
+          // determine if the short name can really be used
+
+          const declaredCollections: Array =
+            completionItem.data?.inlineCollections || [];
+          declaredCollections.push('ansible.builtin');
+
+          const metadata = await context.documentMetadata.get(
+            completionItem.data.documentUri
+          );
+          if (metadata) {
+            declaredCollections.push(...metadata.collections);
+          }
+
+          const canUseShortName = declaredCollections.some(
+            (c) => c === `${namespace}.${collection}`
+          );
+          if (!canUseShortName) {
+            // not an Ansible built-in module, and not part of the declared
+            // collections
+            useFqcn = true;
+          }
+        }
+
+        const insertName = useFqcn ? completionItem.data.moduleFqcn : name;
+        completionItem.insertText = completionItem.insertText?.endsWith(': ')
+          ? `${insertName}: `
+          : insertName;
+
+        completionItem.documentation = formatModule(module.documentation);
+      }
+    }
+  }
+  return completionItem;
+}
+
 function isAlias(option: { name: string; data: IOption }): boolean {
   return option.name !== option.data.name;
 }
diff --git a/server/src/providers/definitionProvider.ts b/server/src/providers/definitionProvider.ts
index 784f2c7af..dfaf1065f 100644
--- a/server/src/providers/definitionProvider.ts
+++ b/server/src/providers/definitionProvider.ts
@@ -20,7 +20,11 @@ export async function getDefinition(
       new AncestryBuilder(path).parentKey(node.value).get() === node // ensure we look at a key, not value of a Pair
     ) {
       if (mayBeModule(path)) {
-        const module = await docsLibrary.findModule(node.value, path, document);
+        const module = await docsLibrary.findModule(
+          node.value,
+          path,
+          document.uri
+        );
         if (module) {
           return [
             {
diff --git a/server/src/providers/hoverProvider.ts b/server/src/providers/hoverProvider.ts
index d28b667e6..5041b31d7 100644
--- a/server/src/providers/hoverProvider.ts
+++ b/server/src/providers/hoverProvider.ts
@@ -21,7 +21,11 @@ export async function doHover(
       new AncestryBuilder(path).parentKey(node.value).get() === node // ensure we look at a key, not value of a Pair
     ) {
       if (mayBeModule(path)) {
-        const module = await docsLibrary.findModule(node.value, path, document);
+        const module = await docsLibrary.findModule(
+          node.value,
+          path,
+          document.uri
+        );
         if (module && module.documentation) {
           return {
             contents: formatModule(module.documentation),
@@ -40,7 +44,7 @@ export async function doHover(
         const module = await docsLibrary.findModule(
           moduleNode.value,
           modulePath,
-          document
+          document.uri
         );
         if (module && module.documentation) {
           const option = module.documentation.options.get(node.value);
diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
index 0f6b5fc99..50e71f676 100644
--- a/server/src/services/ansibleLint.ts
+++ b/server/src/services/ansibleLint.ts
@@ -67,6 +67,7 @@ export class AnsibleLint {
         );
       }
     }
+    // FIXME: validationCache gets duplicate records on each save
     diagnostics.forEach((fileDiagnostics, fileUri) => {
       if (!this.validationCache.has(fileUri)) {
         this.validationCache.set(fileUri, new IntervalTree());
diff --git a/server/src/services/docsLibrary.ts b/server/src/services/docsLibrary.ts
index 4e8cc0557..598d73761 100644
--- a/server/src/services/docsLibrary.ts
+++ b/server/src/services/docsLibrary.ts
@@ -49,23 +49,34 @@ export class DocsLibrary {
     }
   }
 
+  /**
+   * Tries to find an Ansible module for a given name or FQCN.
+   *
+   * Parameters `contextPath` and `documentUri` are used to obtain contextual
+   * information on declared collections. Hence these are not needed when
+   * searching with FQCN.
+   */
   public async findModule(
     searchText: string,
-    contextPath: Node[],
-    doc: TextDocument
+    contextPath?: Node[],
+    documentUri?: string
   ): Promise {
     const prefixOptions = [
       '', // try searching as-is (FQCN match)
       'ansible.builtin.', // try searching built-in
     ];
-    const metadata = await this.context.documentMetadata.get(doc.uri);
-    if (metadata) {
-      // try searching declared collections
-      prefixOptions.push(...metadata.collections.map((s) => `${s}.`));
+    if (documentUri) {
+      const metadata = await this.context.documentMetadata.get(documentUri);
+      if (metadata) {
+        // try searching declared collections
+        prefixOptions.push(...metadata.collections.map((s) => `${s}.`));
+      }
+    }
+    if (contextPath) {
+      prefixOptions.push(
+        ...getDeclaredCollections(contextPath).map((s) => `${s}.`)
+      );
     }
-    prefixOptions.push(
-      ...getDeclaredCollections(contextPath).map((s) => `${s}.`)
-    );
     const prefix = prefixOptions.find((prefix) =>
       this.modules.has(prefix + searchText)
     );
@@ -196,7 +207,7 @@ export class DocsLibrary {
   }
 }
 
-export type IDescription = string | Array;
+export type IDescription = string | Array;
 
 function isIDescription(obj: unknown): obj is IDescription {
   return (
diff --git a/server/src/services/settingsManager.ts b/server/src/services/settingsManager.ts
index b6a099ad8..ea8539422 100644
--- a/server/src/services/settingsManager.ts
+++ b/server/src/services/settingsManager.ts
@@ -13,7 +13,7 @@ export class SettingsManager {
     new Map();
 
   private defaultSettings: ExtensionSettings = {
-    ansible: { path: 'ansible' },
+    ansible: { path: 'ansible', useFullyQualifiedCollectionNames: true },
     ansibleLint: { enabled: true, path: 'ansible-lint' },
   };
   private globalSettings: ExtensionSettings = this.defaultSettings;
diff --git a/server/src/utils/docsFormatter.ts b/server/src/utils/docsFormatter.ts
index 4e0199a73..479196946 100644
--- a/server/src/utils/docsFormatter.ts
+++ b/server/src/utils/docsFormatter.ts
@@ -109,8 +109,14 @@ const macroPatterns = {
   bold: /B\((.*?)\)/g,
   hr: /\bHORIZONTALLINE\b/,
 };
-function replaceMacros(text: string): string {
-  return text
+function replaceMacros(text: unknown): string {
+  let safeText;
+  if (typeof text === 'string') {
+    safeText = text;
+  } else {
+    safeText = JSON.stringify(text);
+  }
+  return safeText
     .replace(macroPatterns.link, '[$1]($2)')
     .replace(macroPatterns.url, '$1')
     .replace(macroPatterns.reference, '[$1]($2)')

From aba82200d27faa3ea308e424f59cb4b413dc30ac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Mon, 24 May 2021 23:23:09 +0200
Subject: [PATCH 043/558] Reimplemented the AncestryBuilder. Implemented
 additional Ansible YAML tests/assertions.

---
 server/src/providers/completionProvider.ts    |  38 +--
 server/src/providers/definitionProvider.ts    |   6 +-
 server/src/providers/hoverProvider.ts         |  14 +-
 server/src/services/ansibleLint.ts            |  16 +-
 server/src/test/data/utils/yaml/isBlock.yml   |   6 +
 server/src/test/data/utils/yaml/isPlay.yml    |  15 ++
 server/src/test/data/utils/yaml/isRole.yml    |  15 ++
 .../test/data/utils/yaml/isTaskParameter.yml  |  15 ++
 server/src/test/utils/yaml.test.ts            | 231 +++++++++++++-----
 server/src/utils/ansible.ts                   | 114 +++++++++
 server/src/utils/misc.ts                      |   4 +
 server/src/utils/yaml.ts                      | 212 ++++++++++++----
 12 files changed, 536 insertions(+), 150 deletions(-)
 create mode 100644 server/src/test/data/utils/yaml/isBlock.yml
 create mode 100644 server/src/test/data/utils/yaml/isPlay.yml
 create mode 100644 server/src/test/data/utils/yaml/isRole.yml
 create mode 100644 server/src/test/data/utils/yaml/isTaskParameter.yml

diff --git a/server/src/providers/completionProvider.ts b/server/src/providers/completionProvider.ts
index ead2001c6..7f2143edb 100644
--- a/server/src/providers/completionProvider.ts
+++ b/server/src/providers/completionProvider.ts
@@ -2,15 +2,17 @@ import { CompletionItem, CompletionItemKind } from 'vscode-languageserver';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
 import { Pair, Scalar, YAMLMap } from 'yaml/types';
-import { DocsLibrary, IOption } from '../services/docsLibrary';
+import { IOption } from '../services/docsLibrary';
 import { WorkspaceFolderContext } from '../services/workspaceManager';
 import { isTaskKeyword } from '../utils/ansible';
 import { formatModule, formatOption, getDetails } from '../utils/docsFormatter';
+import { insert } from '../utils/misc';
 import {
   AncestryBuilder,
   getDeclaredCollections,
   getPathAt,
-  mayBeModule,
+  getYamlMapKeys,
+  isTaskParameter,
 } from '../utils/yaml';
 
 export async function doCompletion(
@@ -25,9 +27,6 @@ export async function doCompletion(
   // indentation to determine the scope of the current line. `_:` is ok here,
   // since we expect to work on a Pair level
   preparedText = insert(preparedText, offset, '_:');
-  // We need a newline at the EOF, so that the YAML parser can properly recognize the scope
-  // This is for future case when we might need to avoid the dummy mapping
-  preparedText = `${preparedText}\n`;
   const yamlDocs = parseAllDocuments(preparedText);
 
   // We need inclusive matching, since cursor position is the position of the character right after it
@@ -37,15 +36,14 @@ export async function doCompletion(
     const node = path[path.length - 1];
     if (node) {
       const docsLibrary = await context.docsLibrary;
-      const config = await context.documentSettings.get(document.uri);
       // First check if we're looking for module options
       // In that case, the module name is a key of a map
       let modulePath = new AncestryBuilder(path)
+        .parentOfKey()
         .parent(YAMLMap)
-        .parentKey()
-        .getPath();
+        .getKeyPath();
 
-      if (modulePath && mayBeModule(modulePath)) {
+      if (modulePath && isTaskParameter(modulePath)) {
         const moduleNode = modulePath[modulePath.length - 1] as Scalar;
         const module = await docsLibrary.findModule(
           moduleNode.value,
@@ -60,13 +58,7 @@ export async function doCompletion(
           ).value as YAMLMap;
 
           // find options that have been already provided by the user
-          const providedOptions = new Set(
-            optionMap.items.map((pair) => {
-              if (pair.key && pair.key instanceof Scalar) {
-                return pair.key.value;
-              }
-            })
-          );
+          const providedOptions = new Set(getYamlMapKeys(optionMap));
 
           const remainingOptions = [...moduleOptions.entries()].filter(
             (o) => !providedOptions.has(o[1].name)
@@ -117,19 +109,13 @@ export async function doCompletion(
         }
       }
       modulePath = path;
-      if (modulePath && mayBeModule(modulePath)) {
+      if (modulePath && isTaskParameter(modulePath)) {
         const taskParameterMap = new AncestryBuilder(modulePath)
           .parent(YAMLMap)
           .get() as YAMLMap;
 
         // find task parameters that have been already provided by the user
-        const providedParameters = new Set(
-          taskParameterMap.items.map((pair) => {
-            if (pair.key && pair.key instanceof Scalar) {
-              return pair.key.value;
-            }
-          })
-        );
+        const providedParameters = new Set(getYamlMapKeys(taskParameterMap));
         // should usually be 0 or 1
         const providedModuleNames = [...providedParameters].filter(
           (x) => !x || !isTaskKeyword(x)
@@ -229,10 +215,6 @@ function isAlias(option: { name: string; data: IOption }): boolean {
   return option.name !== option.data.name;
 }
 
-function insert(str: string, index: number, val: string) {
-  return `${str.substring(0, index)}${val}${str.substring(index)}`;
-}
-
 function atEndOfLine(document: TextDocument, position: Position): boolean {
   const charAfterCursor = `${document.getText()}\n`[
     document.offsetAt(position)
diff --git a/server/src/providers/definitionProvider.ts b/server/src/providers/definitionProvider.ts
index dfaf1065f..0b3d212b2 100644
--- a/server/src/providers/definitionProvider.ts
+++ b/server/src/providers/definitionProvider.ts
@@ -4,7 +4,7 @@ import { parseAllDocuments } from 'yaml';
 import { Scalar } from 'yaml/types';
 import { DocsLibrary } from '../services/docsLibrary';
 import { toLspRange } from '../utils/misc';
-import { AncestryBuilder, getPathAt, mayBeModule } from '../utils/yaml';
+import { AncestryBuilder, getPathAt, isTaskParameter } from '../utils/yaml';
 
 export async function getDefinition(
   document: TextDocument,
@@ -17,9 +17,9 @@ export async function getDefinition(
     const node = path[path.length - 1];
     if (
       node instanceof Scalar &&
-      new AncestryBuilder(path).parentKey(node.value).get() === node // ensure we look at a key, not value of a Pair
+      new AncestryBuilder(path).parentOfKey().get() // ensure we look at a key, not value of a Pair
     ) {
-      if (mayBeModule(path)) {
+      if (isTaskParameter(path)) {
         const module = await docsLibrary.findModule(
           node.value,
           path,
diff --git a/server/src/providers/hoverProvider.ts b/server/src/providers/hoverProvider.ts
index 5041b31d7..e23be0bc0 100644
--- a/server/src/providers/hoverProvider.ts
+++ b/server/src/providers/hoverProvider.ts
@@ -5,7 +5,7 @@ import { Scalar, YAMLMap } from 'yaml/types';
 import { DocsLibrary } from '../services/docsLibrary';
 import { formatModule, formatOption } from '../utils/docsFormatter';
 import { toLspRange } from '../utils/misc';
-import { AncestryBuilder, getPathAt, mayBeModule } from '../utils/yaml';
+import { AncestryBuilder, getPathAt, isTaskParameter } from '../utils/yaml';
 
 export async function doHover(
   document: TextDocument,
@@ -18,9 +18,10 @@ export async function doHover(
     const node = path[path.length - 1];
     if (
       node instanceof Scalar &&
-      new AncestryBuilder(path).parentKey(node.value).get() === node // ensure we look at a key, not value of a Pair
+      new AncestryBuilder(path).parentOfKey().get() // ensure we look at a key, not value of a Pair
     ) {
-      if (mayBeModule(path)) {
+      // hovering over a module name
+      if (isTaskParameter(path)) {
         const module = await docsLibrary.findModule(
           node.value,
           path,
@@ -34,12 +35,13 @@ export async function doHover(
         }
       }
 
+      // hovering over a module parameter
       const modulePath = new AncestryBuilder(path)
+        .parentOfKey()
         .parent(YAMLMap)
-        .parentKey()
-        .getPath();
+        .getKeyPath();
 
-      if (modulePath && mayBeModule(modulePath)) {
+      if (modulePath && isTaskParameter(modulePath)) {
         const moduleNode = modulePath[modulePath.length - 1] as Scalar;
         const module = await docsLibrary.findModule(
           moduleNode.value,
diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
index 50e71f676..0a066fa11 100644
--- a/server/src/services/ansibleLint.ts
+++ b/server/src/services/ansibleLint.ts
@@ -67,21 +67,19 @@ export class AnsibleLint {
         );
       }
     }
-    // FIXME: validationCache gets duplicate records on each save
-    diagnostics.forEach((fileDiagnostics, fileUri) => {
-      if (!this.validationCache.has(fileUri)) {
-        this.validationCache.set(fileUri, new IntervalTree());
-      }
-      const diagnosticTree = this.validationCache.get(
-        fileUri
-      ) as IntervalTree;
+
+    for (const [fileUri, fileDiagnostics] of diagnostics) {
+      // (re-)set validation cache for each impacted file
+      const diagnosticTree = new IntervalTree();
+      this.validationCache.set(fileUri, diagnosticTree);
+
       for (const diagnostic of fileDiagnostics) {
         diagnosticTree.insert(
           [diagnostic.range.start.line, diagnostic.range.end.line],
           diagnostic
         );
       }
-    });
+    }
 
     return diagnostics;
   }
diff --git a/server/src/test/data/utils/yaml/isBlock.yml b/server/src/test/data/utils/yaml/isBlock.yml
new file mode 100644
index 000000000..72a1c9e36
--- /dev/null
+++ b/server/src/test/data/utils/yaml/isBlock.yml
@@ -0,0 +1,6 @@
+- name: Test block
+  become: yes
+  block:
+
+- name: Test task
+  become: yes
diff --git a/server/src/test/data/utils/yaml/isPlay.yml b/server/src/test/data/utils/yaml/isPlay.yml
new file mode 100644
index 000000000..c102e3ba0
--- /dev/null
+++ b/server/src/test/data/utils/yaml/isPlay.yml
@@ -0,0 +1,15 @@
+- name: Test play
+  hosts: localhost
+  gather_facts: false
+  roles:
+    - role1
+---
+- name: Test task
+  become: yes
+---
+- name: Test play with tasks
+  hosts: localhost
+  gather_facts: false
+  tasks:
+    - name: Test task
+      some_module:
diff --git a/server/src/test/data/utils/yaml/isRole.yml b/server/src/test/data/utils/yaml/isRole.yml
new file mode 100644
index 000000000..0a45ba94e
--- /dev/null
+++ b/server/src/test/data/utils/yaml/isRole.yml
@@ -0,0 +1,15 @@
+- name: Test play
+  hosts: localhost
+  gather_facts: false
+  roles:
+    - role1
+
+- name: Test task
+  become: yes
+
+- name: Test play with tasks
+  hosts: localhost
+  gather_facts: false
+  tasks:
+    - name: Test task
+      some_module:
diff --git a/server/src/test/data/utils/yaml/isTaskParameter.yml b/server/src/test/data/utils/yaml/isTaskParameter.yml
new file mode 100644
index 000000000..0ff887afc
--- /dev/null
+++ b/server/src/test/data/utils/yaml/isTaskParameter.yml
@@ -0,0 +1,15 @@
+- name: Test task
+  become: yes
+---
+- name: Test play with tasks
+  hosts: localhost
+  gather_facts: false
+  pre_tasks:
+    - name: Test pre-task
+      some_module:
+  tasks:
+    - name: Test task
+      some_module:
+    - block:
+        - name: Test task in block
+          some_module:
diff --git a/server/src/test/utils/yaml.test.ts b/server/src/test/utils/yaml.test.ts
index 842959d79..3b601252d 100644
--- a/server/src/test/utils/yaml.test.ts
+++ b/server/src/test/utils/yaml.test.ts
@@ -3,11 +3,14 @@ import { promises as fs } from 'fs';
 import * as path from 'path';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
-import { Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
+import { Node, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
 import {
   AncestryBuilder,
   getDeclaredCollections,
   getPathAt,
+  isBlock,
+  isPlay,
+  isTaskParameter,
 } from '../../utils/yaml';
 
 async function getYamlDoc(yamlFile: string) {
@@ -26,7 +29,7 @@ async function getPathInFile(
   character: number
 ) {
   const textDoc = await getYamlDoc(yamlFile);
-  const parsedDocs = parseAllDocuments(`${textDoc.getText()}\n`); // the newline is crucial for completion provider
+  const parsedDocs = parseAllDocuments(textDoc.getText());
   return getPathAt(
     textDoc,
     { line: line - 1, character: character - 1 },
@@ -50,7 +53,7 @@ describe('yaml', () => {
 
     it('canAssertParent', async () => {
       const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
-      const node = new AncestryBuilder(path).parent().parent(YAMLMap).get();
+      const node = new AncestryBuilder(path).parent(YAMLSeq).get();
       expect(node).to.be.null;
     });
 
@@ -60,17 +63,29 @@ describe('yaml', () => {
       expect(node).to.be.an.instanceOf(YAMLSeq);
     });
 
+    it('canGetParentPath', async () => {
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
+      const subPath = new AncestryBuilder(path).parent().getPath();
+      expect(subPath)
+        .to.be.an.instanceOf(Array)
+        .to.have.lengthOf((path?.length || 0) - 2);
+    });
+
     it('canGetKey', async () => {
       const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
-      const node = new AncestryBuilder(path).parentKey().get();
-      expect(node)
-        .to.be.an.instanceOf(Scalar)
-        .to.have.property('value', 'name');
+      const key = new AncestryBuilder(path).parent(YAMLMap).getStringKey();
+      expect(key).to.be.equal('name');
+    });
+
+    it('canGetKeyForValue', async () => {
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 13);
+      const key = new AncestryBuilder(path).parent(YAMLMap).getStringKey();
+      expect(key).to.be.equal('name');
     });
 
     it('canGetKeyPath', async () => {
       const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
-      const subPath = new AncestryBuilder(path).parentKey().getPath();
+      const subPath = new AncestryBuilder(path).parent(YAMLMap).getKeyPath();
       expect(subPath)
         .to.be.an.instanceOf(Array)
         .to.have.lengthOf(path?.length || 0);
@@ -80,77 +95,50 @@ describe('yaml', () => {
           .to.have.property('value', 'name');
     });
 
-    it('canGetAssertedKey', async () => {
-      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
-      const node = new AncestryBuilder(path).parentKey('name').get();
-      expect(node)
-        .to.be.an.instanceOf(Scalar)
-        .to.have.property('value', 'name');
-    });
-
-    it('canGetAssertedRegexKey', async () => {
+    it('canGetAssertedParentOfKey', async () => {
       const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
-      const node = new AncestryBuilder(path).parentKey(/^(name|other)$/).get();
-      expect(node)
-        .to.be.an.instanceOf(Scalar)
-        .to.have.property('value', 'name');
+      const node = new AncestryBuilder(path).parentOfKey().get();
+      expect(node).to.be.an.instanceOf(YAMLMap);
+      expect(node).to.have.nested.property('items[0].key.value', 'name');
     });
 
-    it('canAssertKey', async () => {
-      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
-      const node = new AncestryBuilder(path).parentKey('other').get();
+    it('canAssertParentOfKey', async () => {
+      const path = await getPathInFile('ancestryBuilder.yml', 4, 13);
+      const node = new AncestryBuilder(path).parentOfKey().get();
       expect(node).to.be.null;
     });
 
-    it('canAssertKeyPath', async () => {
-      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
-      const subPath = new AncestryBuilder(path).parentKey('other').getPath();
-      expect(subPath).to.be.null;
-    });
-
-    it('canGetAssertedAncestorKey', async () => {
-      const path = await getPathInFile('ancestryBuilder.yml', 4, 7);
-      const node = new AncestryBuilder(path)
-        .parent(YAMLMap)
-        .parent(YAMLSeq)
-        .parentKey('block')
-        .get();
-      expect(node)
-        .to.be.an.instanceOf(Scalar)
-        .to.have.property('value', 'block');
-    });
-
     it('canGetIndentationParent', async () => {
       const path = await getPathInFile('ancestryBuilder.yml', 7, 9);
       const node = new AncestryBuilder(path)
-        .parent()
-        .parentKey('lineinfile')
-        .get();
-      expect(node)
-        .to.be.an.instanceOf(Scalar)
-        .to.have.property('value', 'lineinfile');
+        .parent(YAMLMap)
+        .parent(YAMLMap)
+        .getStringKey();
+      expect(node).to.be.equal('lineinfile');
     });
 
-    it('canGetIndentationParentAtEndOfMap', async () => {
+    it.skip('canGetIndentationParentAtEndOfMap', async () => {
+      // skipped -> the YAML parser doesn't correctly interpret indentation in
+      // otherwise empty lines; a workaround is implemented for completion
+      // provider
       const path = await getPathInFile('ancestryBuilder.yml', 9, 9);
       const node = new AncestryBuilder(path)
-        .parent()
-        .parentKey('lineinfile')
-        .get();
-      expect(node)
-        .to.be.an.instanceOf(Scalar)
-        .to.have.property('value', 'lineinfile');
+        .parent(YAMLMap)
+        .parent(YAMLMap)
+        .getStringKey();
+      expect(node).to.be.equal('lineinfile');
     });
 
-    it('canGetIndentationParentAtEOF', async () => {
+    it.skip('canGetIndentationParentAtEOF', async () => {
+      // skipped -> the YAML parser doesn't correctly interpret indentation in
+      // otherwise empty lines; a workaround is implemented for completion
+      // provider
       const path = await getPathInFile('ancestryBuilder.yml', 15, 9);
       const node = new AncestryBuilder(path)
-        .parent()
-        .parentKey('lineinfile')
-        .get();
-      expect(node)
-        .to.be.an.instanceOf(Scalar)
-        .to.have.property('value', 'lineinfile');
+        .parent(YAMLMap)
+        .parent(YAMLMap)
+        .getStringKey();
+      expect(node).to.be.equal('lineinfile');
     });
   });
 
@@ -214,4 +202,123 @@ describe('yaml', () => {
       expect(collections).to.have.members([]);
     });
   });
+
+  describe('isTaskParameter', () => {
+    it('canCorrectlyConfirmTaskParameter', async () => {
+      const path = (await getPathInFile('isTaskParameter.yml', 1, 3)) as Node[];
+      const test = isTaskParameter(path);
+      expect(test).to.be.eq(true);
+    });
+
+    it('canCorrectlyNegateTaskParameter', async () => {
+      const path = (await getPathInFile('isTaskParameter.yml', 4, 3)) as Node[];
+      const test = isTaskParameter(path);
+      expect(test).to.be.eq(false);
+    });
+
+    it('canCorrectlyNegateTaskParameterForValue', async () => {
+      const path = (await getPathInFile('isTaskParameter.yml', 1, 9)) as Node[];
+      const test = isTaskParameter(path);
+      expect(test).to.be.eq(false);
+    });
+
+    it('canCorrectlyConfirmTaskParameterInPreTasks', async () => {
+      const path = (await getPathInFile('isTaskParameter.yml', 8, 7)) as Node[];
+      const test = isTaskParameter(path);
+      expect(test).to.be.eq(true);
+    });
+
+    it('canCorrectlyConfirmTaskParameterInTasks', async () => {
+      const path = (await getPathInFile(
+        'isTaskParameter.yml',
+        11,
+        7
+      )) as Node[];
+      const test = isTaskParameter(path);
+      expect(test).to.be.eq(true);
+    });
+
+    it('canCorrectlyConfirmTaskParameterInBlock', async () => {
+      const path = (await getPathInFile(
+        'isTaskParameter.yml',
+        15,
+        11
+      )) as Node[];
+      const test = isTaskParameter(path);
+      expect(test).to.be.eq(true);
+    });
+  });
+
+  describe('isPlay', () => {
+    it('canCorrectlyConfirmPlay', async () => {
+      const path = (await getPathInFile('isPlay.yml', 1, 3)) as Node[];
+      const test = isPlay(path, 'file://test/isPlay.yml');
+      expect(test).to.be.eq(true);
+    });
+    it('canCorrectlyConfirmPlayWithoutPath', async () => {
+      const path = (await getPathInFile('isPlay.yml', 1, 3)) as Node[];
+      const test = isPlay(path);
+      expect(test).to.be.eq(true);
+    });
+
+    it('canCorrectlyConfirmPlayInStrangePath', async () => {
+      const path = (await getPathInFile('isPlay.yml', 1, 3)) as Node[];
+      const test = isPlay(path, 'file:///roles/test/tasks/isPlay.yml');
+      expect(test).to.be.eq(true);
+    });
+
+    it('canCorrectlyNegatePlayInRolePathWithoutPlayKeywords', async () => {
+      const path = (await getPathInFile('isPlay.yml', 7, 3)) as Node[];
+      const test = isPlay(path, 'file:///roles/test/tasks/isPlay.yml');
+      expect(test).to.be.eq(false);
+    });
+
+    it('isUndecisiveWithoutPlayKeywords', async () => {
+      const path = (await getPathInFile('isPlay.yml', 7, 3)) as Node[];
+      const test = isPlay(path, 'file://test/isPlay.yml');
+      expect(test).to.be.eq(undefined);
+    });
+
+    it('isUndecisiveWithoutPlayKeywordsWithoutPath', async () => {
+      const path = (await getPathInFile('isPlay.yml', 7, 3)) as Node[];
+      const test = isPlay(path);
+      expect(test).to.be.eq(undefined);
+    });
+
+    it('canCorrectlyNegatePlayForNonRootSequence', async () => {
+      const path = (await getPathInFile('isPlay.yml', 14, 7)) as Node[];
+      const test = isPlay(path, 'file://test/isPlay.yml');
+      expect(test).to.be.eq(false);
+    });
+
+    it('canCorrectlyNegatePlayForNonRootSequenceWithoutPath', async () => {
+      const path = (await getPathInFile('isPlay.yml', 14, 7)) as Node[];
+      const test = isPlay(path);
+      expect(test).to.be.eq(false);
+    });
+
+    it('canCorrectlyNegatePlayForValue', async () => {
+      const path = (await getPathInFile('isPlay.yml', 1, 9)) as Node[];
+      const test = isPlay(path);
+      expect(test).to.be.eq(false);
+    });
+  });
+
+  describe('isBlock', () => {
+    it('canCorrectlyConfirmBlock', async () => {
+      const path = (await getPathInFile('isBlock.yml', 2, 3)) as Node[];
+      const test = isBlock(path);
+      expect(test).to.be.eq(true);
+    });
+    it('canCorrectlyNegateBlock', async () => {
+      const path = (await getPathInFile('isBlock.yml', 5, 3)) as Node[];
+      const test = isBlock(path);
+      expect(test).to.be.eq(false);
+    });
+    it('canCorrectlyNegateBlockOnValue', async () => {
+      const path = (await getPathInFile('isBlock.yml', 2, 11)) as Node[];
+      const test = isBlock(path);
+      expect(test).to.be.eq(false);
+    });
+  });
 });
diff --git a/server/src/utils/ansible.ts b/server/src/utils/ansible.ts
index b39d9884f..8e034a054 100644
--- a/server/src/utils/ansible.ts
+++ b/server/src/utils/ansible.ts
@@ -42,6 +42,120 @@ export const taskKeywords = new Set([
   'when',
 ]);
 
+export const playKeywords = new Set([
+  'any_errors_fatal',
+  'become',
+  'become_exe',
+  'become_flags',
+  'become_method',
+  'become_user',
+  'check_mode',
+  'collections',
+  'connection',
+  'debugger',
+  'diff',
+  'environment',
+  'fact_path',
+  'force_handlers',
+  'gather_facts',
+  'gather_subset',
+  'gather_timeout',
+  'handlers',
+  'hosts',
+  'ignore_errors',
+  'ignore_unreachable',
+  'max_fail_percentage',
+  'module_defaults',
+  'name',
+  'no_log',
+  'order',
+  'port',
+  'post_tasks',
+  'pre_tasks',
+  'remote_user',
+  'roles',
+  'run_once',
+  'serial',
+  'strategy',
+  'tags',
+  'tasks',
+  'throttle',
+  'timeout',
+  'vars',
+  'vars_files',
+  'vars_prompt',
+]);
+
+export const roleKeywords = new Set([
+  'any_errors_fatal',
+  'become',
+  'become_exe',
+  'become_flags',
+  'become_method',
+  'become_user',
+  'check_mode',
+  'collections',
+  'connection',
+  'debugger',
+  'delegate_facts',
+  'delegate_to',
+  'diff',
+  'environment',
+  'ignore_errors',
+  'ignore_unreachable',
+  'module_defaults',
+  'name',
+  'no_log',
+  'port',
+  'remote_user',
+  'run_once',
+  'tags',
+  'throttle',
+  'timeout',
+  'vars',
+  'when',
+]);
+
+export const blockKeywords = new Set([
+  'always',
+  'any_errors_fatal',
+  'become',
+  'become_exe',
+  'become_flags',
+  'become_method',
+  'become_user',
+  'block',
+  'check_mode',
+  'collections',
+  'connection',
+  'debugger',
+  'delegate_facts',
+  'delegate_to',
+  'diff',
+  'environment',
+  'ignore_errors',
+  'ignore_unreachable',
+  'module_defaults',
+  'name',
+  'no_log',
+  'notify',
+  'port',
+  'remote_user',
+  'rescue',
+  'run_once',
+  'tags',
+  'throttle',
+  'timeout',
+  'vars',
+  'when',
+]);
+
+export const playExclusiveKeywords = new Set(
+  [...playKeywords].filter(
+    (k) => !taskKeywords.has(k) && !roleKeywords.has(k) && !blockKeywords.has(k)
+  )
+);
+
 export function isTaskKeyword(value: string): boolean {
   return taskKeywords.has(value) || value.startsWith('with_');
 }
diff --git a/server/src/utils/misc.ts b/server/src/utils/misc.ts
index 2e96b9c84..a31b3184f 100644
--- a/server/src/utils/misc.ts
+++ b/server/src/utils/misc.ts
@@ -32,3 +32,7 @@ export function isObject(
 ): obj is X & Record {
   return obj && typeof obj === 'object';
 }
+
+export function insert(str: string, index: number, val: string): string {
+  return `${str.substring(0, index)}${val}${str.substring(index)}`;
+}
diff --git a/server/src/utils/yaml.ts b/server/src/utils/yaml.ts
index 10c4f867f..52d9793cb 100644
--- a/server/src/utils/yaml.ts
+++ b/server/src/utils/yaml.ts
@@ -2,29 +2,36 @@ import * as _ from 'lodash';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { Document } from 'yaml';
 import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
+import { playExclusiveKeywords } from './ansible';
 
 /**
- * A helper class used for building YAML path assertions. The assertions are
- * built up from the most nested (last in array) element.
+ * A helper class used for building YAML path assertions and retrieving parent
+ * nodes. The assertions are built up from the most nested (last in array)
+ * element.
  */
-export class AncestryBuilder {
+export class AncestryBuilder {
   private _path: Node[];
 
   private _index: number;
 
-  private _returnKey: boolean;
-
   constructor(path: Node[] | null, index?: number) {
     this._path = path || [];
     this._index = index || this._path.length - 1;
-    this._returnKey = false;
   }
 
-  parent(type?: typeof Node | typeof Pair): AncestryBuilder {
+  /**
+   * Move up the path, optionally asserting the type of the parent.
+   *
+   * Unless Pair is explicitly asserted, it is ignored/skipped over when moving
+   * up.
+   */
+  parent(
+    type?: new (...args: unknown[]) => X
+  ): AncestryBuilder {
     this._index--;
     if (this.get() instanceof Pair) {
-      if (!(type === Pair)) {
-        this._index--; // unless Pair is explicitly requested, we ignore pair when just going up
+      if (!type || !(type === Pair.prototype.constructor)) {
+        this._index--;
       }
     }
     if (type) {
@@ -32,43 +39,90 @@ export class AncestryBuilder {
         this._index = Number.MIN_SAFE_INTEGER;
       }
     }
-    this._returnKey = false;
-    return this;
+    return this as unknown as AncestryBuilder;
   }
 
-  parentKey(key?: string | RegExp): AncestryBuilder {
-    this._index--;
+  /**
+   * Move up the path, asserting that the current node was a key of a mapping
+   * pair. The builder skips over the Pair to the parent YAMLMap.
+   */
+  parentOfKey(): AncestryBuilder {
     const node = this.get();
+    this.parent(Pair);
+    const pairNode = this.get();
+    if (pairNode instanceof Pair && pairNode.key === node) {
+      this.parent(YAMLMap);
+    } else {
+      this._index = Number.MIN_SAFE_INTEGER;
+    }
+    return this as unknown as AncestryBuilder;
+  }
+
+  /**
+   * Get node up to which the assertions have led.
+   */
+  get(): N | null {
+    return (this._path[this._index] as N) || null;
+  }
+
+  /**
+   * Get the key of the Pair one level down the path.
+   *
+   * The key is returned only if it indeed is a string Scalar.
+   */
+  // The `this` argument is for generics restriction of this method.
+  getStringKey(this: AncestryBuilder): string | null {
+    const node = this._path[this._index + 1];
     if (
       node instanceof Pair &&
       node.key instanceof Scalar &&
-      (!key ||
-        (key instanceof RegExp && key.test(node.key.value)) ||
-        (typeof key == 'string' && key === node.key.value))
+      typeof node.key.value === 'string'
     ) {
-      this._returnKey = true;
-    } else {
-      this._index = Number.MIN_SAFE_INTEGER;
+      return node.key.value;
     }
-    return this;
+    return null;
   }
 
-  get(): Node | null {
-    const node = this._path[this._index] || null;
-    if (this._returnKey && node instanceof Pair) {
-      return node.key;
+  /**
+   * Get the value of the Pair one level down the path.
+   */
+  // The `this` argument is for generics restriction of this method.
+  getValue(this: AncestryBuilder): Node | null {
+    const node = this._path[this._index + 1];
+    if (node instanceof Pair) {
+      return node.value;
     }
-    return node;
+    return null;
   }
 
+  /**
+   * Get the path to which the assertions have led.
+   *
+   * The path will be a subpath of the original path.
+   */
   getPath(): Node[] | null {
     if (this._index < 0) return null;
-    const node = this._path[this._index];
     const path = this._path.slice(0, this._index + 1);
-    if (this._returnKey && node instanceof Pair) {
+    return path;
+  }
+
+  /**
+   * Get the path to the key of the Pair one level down the path to which the
+   * assertions have led.
+   *
+   * The path will be a subpath of the original path.
+   */
+  // The `this` argument is for generics restriction of this method.
+  getKeyPath(this: AncestryBuilder): Node[] | null {
+    if (this._index < 0) return null;
+    const path = this._path.slice(0, this._index + 1);
+    const node = this._path[this._index + 1];
+    if (node instanceof Pair) {
+      path.push(node);
       path.push(node.key);
+      return path;
     }
-    return path;
+    return null;
   }
 }
 
@@ -150,9 +204,14 @@ export function getPathAtOffset(
 }
 
 export const tasksKey = /^(tasks|pre_tasks|post_tasks|block|rescue|always)$/;
-export function mayBeModule(path: Node[]): boolean {
+
+/**
+ * Determines whether the path points at a parameter key of an Ansible task.
+ */
+export function isTaskParameter(path: Node[]): boolean {
+  if (isPlay(path)) return false;
   const taskListPath = new AncestryBuilder(path)
-    .parent(YAMLMap)
+    .parentOfKey()
     .parent(YAMLSeq)
     .getPath();
   if (taskListPath) {
@@ -161,7 +220,10 @@ export function mayBeModule(path: Node[]): boolean {
       // case when the task list is at the top level of the document
       return true;
     }
-    if (new AncestryBuilder(taskListPath).parentKey(tasksKey).get()) {
+    const taskListKey = new AncestryBuilder(taskListPath)
+      .parent(YAMLMap)
+      .getStringKey();
+    if (taskListKey && tasksKey.test(taskListKey)) {
       // case when a task list is defined explicitly by a keyword
       return true;
     }
@@ -169,25 +231,29 @@ export function mayBeModule(path: Node[]): boolean {
   return false;
 }
 
+/**
+ * Tries to find the list of collections declared at the Ansible play level.
+ */
 export function getDeclaredCollections(modulePath: Node[] | null): string[] {
   const declaredCollections: string[] = [];
-  let blockPath: Node[] | null = modulePath;
-  let path: Node[] | null = modulePath;
-  while (blockPath) {
+  let path: Node[] | null = new AncestryBuilder(modulePath)
+    .parent(YAMLMap)
+    .getPath();
+  while (true) {
     // traverse the YAML up through the Ansible blocks
-    path = blockPath;
-    blockPath = new AncestryBuilder(blockPath)
-      .parent(YAMLMap)
-      .parent(YAMLSeq)
-      .parentKey(/^block|rescue|always$/)
-      .getPath();
+    const builder = new AncestryBuilder(path).parent(YAMLSeq).parent(YAMLMap);
+    const key = builder.getStringKey();
+    if (key && /^block|rescue|always$/.test(key)) {
+      path = builder.getPath();
+    } else {
+      break;
+    }
   }
   // now we should be at the tasks/pre_tasks/post_tasks level
   const playNode = new AncestryBuilder(path)
-    .parent(YAMLMap)
     .parent(YAMLSeq)
     .parent(YAMLMap)
-    .get() as YAMLMap | null;
+    .get();
   const collectionsPair = _.find(
     playNode?.items,
     (pair) => pair.key instanceof Scalar && pair.key.value === 'collections'
@@ -207,3 +273,65 @@ export function getDeclaredCollections(modulePath: Node[] | null): string[] {
 
   return declaredCollections;
 }
+
+/**
+ * Heuristically determines whether the path points at an Ansible play. The
+ * `fileUri` helps guessing in case the YAML tree doesn't give any clues.
+ *
+ * Returns `undefined` if highly uncertain.
+ */
+export function isPlay(path: Node[], fileUri?: string): boolean | undefined {
+  const isAtRoot =
+    new AncestryBuilder(path).parentOfKey().parent(YAMLSeq).getPath()
+      ?.length === 1;
+  if (isAtRoot) {
+    const mapNode = new AncestryBuilder(path).parentOfKey().get() as YAMLMap;
+    const providedKeys = getYamlMapKeys(mapNode);
+    const containsPlayKeyword = providedKeys.some((p) =>
+      playExclusiveKeywords.has(p)
+    );
+    if (containsPlayKeyword) {
+      return true;
+    }
+    if (fileUri) {
+      const isInRole = /\/roles\/[^/]+\/tasks\//.test(fileUri);
+      if (isInRole) {
+        return false;
+      }
+    }
+  } else {
+    return false;
+  }
+}
+
+/**
+ * Determines whether the path points at one of Ansible block parameter keys.
+ */
+export function isBlock(path: Node[]): boolean {
+  const mapNode = new AncestryBuilder(path).parentOfKey().get();
+  if (mapNode) {
+    const providedKeys = getYamlMapKeys(mapNode);
+    return providedKeys.includes('block');
+  }
+  return false;
+}
+
+/**
+ * Determines whether the path points at one of Ansible role parameter keys.
+ */
+export function isRole(path: Node[]): boolean {
+  const mapNode = new AncestryBuilder(path).parentOfKey().get();
+  if (mapNode) {
+    const providedKeys = getYamlMapKeys(mapNode);
+    return providedKeys.includes('role');
+  }
+  return false;
+}
+
+export function getYamlMapKeys(mapNode: YAMLMap): Array {
+  return mapNode.items.map((pair) => {
+    if (pair.key && pair.key instanceof Scalar) {
+      return pair.key.value;
+    }
+  });
+}

From 4a5c4b119f78a797315d176033174563dfc33141 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Mon, 24 May 2021 23:38:44 +0200
Subject: [PATCH 044/558] Renamed YAML tests. Fixed isRoleParam

---
 server/src/providers/completionProvider.ts    |   6 +-
 server/src/providers/definitionProvider.ts    |   4 +-
 server/src/providers/hoverProvider.ts         |   6 +-
 .../yaml/{isBlock.yml => isBlockParam.yml}    |   0
 .../yaml/{isPlay.yml => isPlayParam.yml}      |   0
 server/src/test/data/utils/yaml/isRole.yml    |  15 --
 .../src/test/data/utils/yaml/isRoleParam.yml  |   6 +
 .../{isTaskParameter.yml => isTaskParam.yml}  |   0
 server/src/test/utils/yaml.test.ts            | 147 ++++++++++--------
 server/src/utils/yaml.ts                      |  25 +--
 10 files changed, 109 insertions(+), 100 deletions(-)
 rename server/src/test/data/utils/yaml/{isBlock.yml => isBlockParam.yml} (100%)
 rename server/src/test/data/utils/yaml/{isPlay.yml => isPlayParam.yml} (100%)
 delete mode 100644 server/src/test/data/utils/yaml/isRole.yml
 create mode 100644 server/src/test/data/utils/yaml/isRoleParam.yml
 rename server/src/test/data/utils/yaml/{isTaskParameter.yml => isTaskParam.yml} (100%)

diff --git a/server/src/providers/completionProvider.ts b/server/src/providers/completionProvider.ts
index 7f2143edb..210008f55 100644
--- a/server/src/providers/completionProvider.ts
+++ b/server/src/providers/completionProvider.ts
@@ -12,7 +12,7 @@ import {
   getDeclaredCollections,
   getPathAt,
   getYamlMapKeys,
-  isTaskParameter,
+  isTaskParam,
 } from '../utils/yaml';
 
 export async function doCompletion(
@@ -43,7 +43,7 @@ export async function doCompletion(
         .parent(YAMLMap)
         .getKeyPath();
 
-      if (modulePath && isTaskParameter(modulePath)) {
+      if (modulePath && isTaskParam(modulePath)) {
         const moduleNode = modulePath[modulePath.length - 1] as Scalar;
         const module = await docsLibrary.findModule(
           moduleNode.value,
@@ -109,7 +109,7 @@ export async function doCompletion(
         }
       }
       modulePath = path;
-      if (modulePath && isTaskParameter(modulePath)) {
+      if (modulePath && isTaskParam(modulePath)) {
         const taskParameterMap = new AncestryBuilder(modulePath)
           .parent(YAMLMap)
           .get() as YAMLMap;
diff --git a/server/src/providers/definitionProvider.ts b/server/src/providers/definitionProvider.ts
index 0b3d212b2..e239e18e0 100644
--- a/server/src/providers/definitionProvider.ts
+++ b/server/src/providers/definitionProvider.ts
@@ -4,7 +4,7 @@ import { parseAllDocuments } from 'yaml';
 import { Scalar } from 'yaml/types';
 import { DocsLibrary } from '../services/docsLibrary';
 import { toLspRange } from '../utils/misc';
-import { AncestryBuilder, getPathAt, isTaskParameter } from '../utils/yaml';
+import { AncestryBuilder, getPathAt, isTaskParam } from '../utils/yaml';
 
 export async function getDefinition(
   document: TextDocument,
@@ -19,7 +19,7 @@ export async function getDefinition(
       node instanceof Scalar &&
       new AncestryBuilder(path).parentOfKey().get() // ensure we look at a key, not value of a Pair
     ) {
-      if (isTaskParameter(path)) {
+      if (isTaskParam(path)) {
         const module = await docsLibrary.findModule(
           node.value,
           path,
diff --git a/server/src/providers/hoverProvider.ts b/server/src/providers/hoverProvider.ts
index e23be0bc0..07b37eb52 100644
--- a/server/src/providers/hoverProvider.ts
+++ b/server/src/providers/hoverProvider.ts
@@ -5,7 +5,7 @@ import { Scalar, YAMLMap } from 'yaml/types';
 import { DocsLibrary } from '../services/docsLibrary';
 import { formatModule, formatOption } from '../utils/docsFormatter';
 import { toLspRange } from '../utils/misc';
-import { AncestryBuilder, getPathAt, isTaskParameter } from '../utils/yaml';
+import { AncestryBuilder, getPathAt, isTaskParam } from '../utils/yaml';
 
 export async function doHover(
   document: TextDocument,
@@ -21,7 +21,7 @@ export async function doHover(
       new AncestryBuilder(path).parentOfKey().get() // ensure we look at a key, not value of a Pair
     ) {
       // hovering over a module name
-      if (isTaskParameter(path)) {
+      if (isTaskParam(path)) {
         const module = await docsLibrary.findModule(
           node.value,
           path,
@@ -41,7 +41,7 @@ export async function doHover(
         .parent(YAMLMap)
         .getKeyPath();
 
-      if (modulePath && isTaskParameter(modulePath)) {
+      if (modulePath && isTaskParam(modulePath)) {
         const moduleNode = modulePath[modulePath.length - 1] as Scalar;
         const module = await docsLibrary.findModule(
           moduleNode.value,
diff --git a/server/src/test/data/utils/yaml/isBlock.yml b/server/src/test/data/utils/yaml/isBlockParam.yml
similarity index 100%
rename from server/src/test/data/utils/yaml/isBlock.yml
rename to server/src/test/data/utils/yaml/isBlockParam.yml
diff --git a/server/src/test/data/utils/yaml/isPlay.yml b/server/src/test/data/utils/yaml/isPlayParam.yml
similarity index 100%
rename from server/src/test/data/utils/yaml/isPlay.yml
rename to server/src/test/data/utils/yaml/isPlayParam.yml
diff --git a/server/src/test/data/utils/yaml/isRole.yml b/server/src/test/data/utils/yaml/isRole.yml
deleted file mode 100644
index 0a45ba94e..000000000
--- a/server/src/test/data/utils/yaml/isRole.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-- name: Test play
-  hosts: localhost
-  gather_facts: false
-  roles:
-    - role1
-
-- name: Test task
-  become: yes
-
-- name: Test play with tasks
-  hosts: localhost
-  gather_facts: false
-  tasks:
-    - name: Test task
-      some_module:
diff --git a/server/src/test/data/utils/yaml/isRoleParam.yml b/server/src/test/data/utils/yaml/isRoleParam.yml
new file mode 100644
index 000000000..661a11d14
--- /dev/null
+++ b/server/src/test/data/utils/yaml/isRoleParam.yml
@@ -0,0 +1,6 @@
+- name: Test play
+  hosts: localhost
+  gather_facts: false
+  roles:
+    - name: role
+      when: condition
diff --git a/server/src/test/data/utils/yaml/isTaskParameter.yml b/server/src/test/data/utils/yaml/isTaskParam.yml
similarity index 100%
rename from server/src/test/data/utils/yaml/isTaskParameter.yml
rename to server/src/test/data/utils/yaml/isTaskParam.yml
diff --git a/server/src/test/utils/yaml.test.ts b/server/src/test/utils/yaml.test.ts
index 3b601252d..8a867b4c6 100644
--- a/server/src/test/utils/yaml.test.ts
+++ b/server/src/test/utils/yaml.test.ts
@@ -8,9 +8,10 @@ import {
   AncestryBuilder,
   getDeclaredCollections,
   getPathAt,
-  isBlock,
-  isPlay,
-  isTaskParameter,
+  isBlockParam,
+  isPlayParam,
+  isRoleParam,
+  isTaskParam,
 } from '../../utils/yaml';
 
 async function getYamlDoc(yamlFile: string) {
@@ -203,121 +204,135 @@ describe('yaml', () => {
     });
   });
 
-  describe('isTaskParameter', () => {
-    it('canCorrectlyConfirmTaskParameter', async () => {
-      const path = (await getPathInFile('isTaskParameter.yml', 1, 3)) as Node[];
-      const test = isTaskParameter(path);
+  describe('isTaskParam', () => {
+    it('canCorrectlyConfirmTaskParam', async () => {
+      const path = (await getPathInFile('isTaskParam.yml', 1, 3)) as Node[];
+      const test = isTaskParam(path);
       expect(test).to.be.eq(true);
     });
 
-    it('canCorrectlyNegateTaskParameter', async () => {
-      const path = (await getPathInFile('isTaskParameter.yml', 4, 3)) as Node[];
-      const test = isTaskParameter(path);
+    it('canCorrectlyNegateTaskParam', async () => {
+      const path = (await getPathInFile('isTaskParam.yml', 4, 3)) as Node[];
+      const test = isTaskParam(path);
       expect(test).to.be.eq(false);
     });
 
-    it('canCorrectlyNegateTaskParameterForValue', async () => {
-      const path = (await getPathInFile('isTaskParameter.yml', 1, 9)) as Node[];
-      const test = isTaskParameter(path);
+    it('canCorrectlyNegateTaskParamForValue', async () => {
+      const path = (await getPathInFile('isTaskParam.yml', 1, 9)) as Node[];
+      const test = isTaskParam(path);
       expect(test).to.be.eq(false);
     });
 
-    it('canCorrectlyConfirmTaskParameterInPreTasks', async () => {
-      const path = (await getPathInFile('isTaskParameter.yml', 8, 7)) as Node[];
-      const test = isTaskParameter(path);
+    it('canCorrectlyConfirmTaskParamInPreTasks', async () => {
+      const path = (await getPathInFile('isTaskParam.yml', 8, 7)) as Node[];
+      const test = isTaskParam(path);
       expect(test).to.be.eq(true);
     });
 
-    it('canCorrectlyConfirmTaskParameterInTasks', async () => {
-      const path = (await getPathInFile(
-        'isTaskParameter.yml',
-        11,
-        7
-      )) as Node[];
-      const test = isTaskParameter(path);
+    it('canCorrectlyConfirmTaskParamInTasks', async () => {
+      const path = (await getPathInFile('isTaskParam.yml', 11, 7)) as Node[];
+      const test = isTaskParam(path);
       expect(test).to.be.eq(true);
     });
 
-    it('canCorrectlyConfirmTaskParameterInBlock', async () => {
-      const path = (await getPathInFile(
-        'isTaskParameter.yml',
-        15,
-        11
-      )) as Node[];
-      const test = isTaskParameter(path);
+    it('canCorrectlyConfirmTaskParamInBlock', async () => {
+      const path = (await getPathInFile('isTaskParam.yml', 15, 11)) as Node[];
+      const test = isTaskParam(path);
       expect(test).to.be.eq(true);
     });
   });
 
-  describe('isPlay', () => {
-    it('canCorrectlyConfirmPlay', async () => {
-      const path = (await getPathInFile('isPlay.yml', 1, 3)) as Node[];
-      const test = isPlay(path, 'file://test/isPlay.yml');
+  describe('isPlayParam', () => {
+    it('canCorrectlyConfirmPlayParam', async () => {
+      const path = (await getPathInFile('isPlayParam.yml', 1, 3)) as Node[];
+      const test = isPlayParam(path, 'file://test/isPlay.yml');
       expect(test).to.be.eq(true);
     });
-    it('canCorrectlyConfirmPlayWithoutPath', async () => {
-      const path = (await getPathInFile('isPlay.yml', 1, 3)) as Node[];
-      const test = isPlay(path);
+    it('canCorrectlyConfirmPlayParamWithoutPath', async () => {
+      const path = (await getPathInFile('isPlayParam.yml', 1, 3)) as Node[];
+      const test = isPlayParam(path);
       expect(test).to.be.eq(true);
     });
 
-    it('canCorrectlyConfirmPlayInStrangePath', async () => {
-      const path = (await getPathInFile('isPlay.yml', 1, 3)) as Node[];
-      const test = isPlay(path, 'file:///roles/test/tasks/isPlay.yml');
+    it('canCorrectlyConfirmPlayParamInStrangePath', async () => {
+      const path = (await getPathInFile('isPlayParam.yml', 1, 3)) as Node[];
+      const test = isPlayParam(path, 'file:///roles/test/tasks/isPlay.yml');
       expect(test).to.be.eq(true);
     });
 
-    it('canCorrectlyNegatePlayInRolePathWithoutPlayKeywords', async () => {
-      const path = (await getPathInFile('isPlay.yml', 7, 3)) as Node[];
-      const test = isPlay(path, 'file:///roles/test/tasks/isPlay.yml');
+    it('canCorrectlyNegatePlayParamInRolePathWithoutPlayKeywords', async () => {
+      const path = (await getPathInFile('isPlayParam.yml', 7, 3)) as Node[];
+      const test = isPlayParam(path, 'file:///roles/test/tasks/isPlay.yml');
       expect(test).to.be.eq(false);
     });
 
     it('isUndecisiveWithoutPlayKeywords', async () => {
-      const path = (await getPathInFile('isPlay.yml', 7, 3)) as Node[];
-      const test = isPlay(path, 'file://test/isPlay.yml');
+      const path = (await getPathInFile('isPlayParam.yml', 7, 3)) as Node[];
+      const test = isPlayParam(path, 'file://test/isPlay.yml');
       expect(test).to.be.eq(undefined);
     });
 
     it('isUndecisiveWithoutPlayKeywordsWithoutPath', async () => {
-      const path = (await getPathInFile('isPlay.yml', 7, 3)) as Node[];
-      const test = isPlay(path);
+      const path = (await getPathInFile('isPlayParam.yml', 7, 3)) as Node[];
+      const test = isPlayParam(path);
       expect(test).to.be.eq(undefined);
     });
 
-    it('canCorrectlyNegatePlayForNonRootSequence', async () => {
-      const path = (await getPathInFile('isPlay.yml', 14, 7)) as Node[];
-      const test = isPlay(path, 'file://test/isPlay.yml');
+    it('canCorrectlyNegatePlayParamForNonRootSequence', async () => {
+      const path = (await getPathInFile('isPlayParam.yml', 14, 7)) as Node[];
+      const test = isPlayParam(path, 'file://test/isPlay.yml');
       expect(test).to.be.eq(false);
     });
 
-    it('canCorrectlyNegatePlayForNonRootSequenceWithoutPath', async () => {
-      const path = (await getPathInFile('isPlay.yml', 14, 7)) as Node[];
-      const test = isPlay(path);
+    it('canCorrectlyNegatePlayParamForNonRootSequenceWithoutPath', async () => {
+      const path = (await getPathInFile('isPlayParam.yml', 14, 7)) as Node[];
+      const test = isPlayParam(path);
       expect(test).to.be.eq(false);
     });
 
-    it('canCorrectlyNegatePlayForValue', async () => {
-      const path = (await getPathInFile('isPlay.yml', 1, 9)) as Node[];
-      const test = isPlay(path);
+    it('canCorrectlyNegatePlayParamForValue', async () => {
+      const path = (await getPathInFile('isPlayParam.yml', 1, 9)) as Node[];
+      const test = isPlayParam(path);
       expect(test).to.be.eq(false);
     });
   });
 
-  describe('isBlock', () => {
-    it('canCorrectlyConfirmBlock', async () => {
-      const path = (await getPathInFile('isBlock.yml', 2, 3)) as Node[];
-      const test = isBlock(path);
+  describe('isBlockParam', () => {
+    it('canCorrectlyConfirmBlockParam', async () => {
+      const path = (await getPathInFile('isBlockParam.yml', 2, 3)) as Node[];
+      const test = isBlockParam(path);
       expect(test).to.be.eq(true);
     });
-    it('canCorrectlyNegateBlock', async () => {
-      const path = (await getPathInFile('isBlock.yml', 5, 3)) as Node[];
-      const test = isBlock(path);
+
+    it('canCorrectlyNegateBlockParam', async () => {
+      const path = (await getPathInFile('isBlockParam.yml', 5, 3)) as Node[];
+      const test = isBlockParam(path);
+      expect(test).to.be.eq(false);
+    });
+
+    it('canCorrectlyNegateBlockParamOnValue', async () => {
+      const path = (await getPathInFile('isBlockParam.yml', 2, 11)) as Node[];
+      const test = isBlockParam(path);
+      expect(test).to.be.eq(false);
+    });
+  });
+
+  describe('isRoleParam', () => {
+    it('canCorrectlyConfirmRoleParam', async () => {
+      const path = (await getPathInFile('isRoleParam.yml', 5, 7)) as Node[];
+      const test = isRoleParam(path);
+      expect(test).to.be.eq(true);
+    });
+
+    it('canCorrectlyNegateRoleParam', async () => {
+      const path = (await getPathInFile('isRoleParam.yml', 4, 3)) as Node[];
+      const test = isRoleParam(path);
       expect(test).to.be.eq(false);
     });
-    it('canCorrectlyNegateBlockOnValue', async () => {
-      const path = (await getPathInFile('isBlock.yml', 2, 11)) as Node[];
-      const test = isBlock(path);
+
+    it('canCorrectlyNegateRoleParamOnValue', async () => {
+      const path = (await getPathInFile('isRoleParam.yml', 5, 13)) as Node[];
+      const test = isRoleParam(path);
       expect(test).to.be.eq(false);
     });
   });
diff --git a/server/src/utils/yaml.ts b/server/src/utils/yaml.ts
index 52d9793cb..147524836 100644
--- a/server/src/utils/yaml.ts
+++ b/server/src/utils/yaml.ts
@@ -208,8 +208,8 @@ export const tasksKey = /^(tasks|pre_tasks|post_tasks|block|rescue|always)$/;
 /**
  * Determines whether the path points at a parameter key of an Ansible task.
  */
-export function isTaskParameter(path: Node[]): boolean {
-  if (isPlay(path)) return false;
+export function isTaskParam(path: Node[]): boolean {
+  if (isPlayParam(path)) return false;
   const taskListPath = new AncestryBuilder(path)
     .parentOfKey()
     .parent(YAMLSeq)
@@ -280,7 +280,10 @@ export function getDeclaredCollections(modulePath: Node[] | null): string[] {
  *
  * Returns `undefined` if highly uncertain.
  */
-export function isPlay(path: Node[], fileUri?: string): boolean | undefined {
+export function isPlayParam(
+  path: Node[],
+  fileUri?: string
+): boolean | undefined {
   const isAtRoot =
     new AncestryBuilder(path).parentOfKey().parent(YAMLSeq).getPath()
       ?.length === 1;
@@ -307,7 +310,7 @@ export function isPlay(path: Node[], fileUri?: string): boolean | undefined {
 /**
  * Determines whether the path points at one of Ansible block parameter keys.
  */
-export function isBlock(path: Node[]): boolean {
+export function isBlockParam(path: Node[]): boolean {
   const mapNode = new AncestryBuilder(path).parentOfKey().get();
   if (mapNode) {
     const providedKeys = getYamlMapKeys(mapNode);
@@ -319,13 +322,13 @@ export function isBlock(path: Node[]): boolean {
 /**
  * Determines whether the path points at one of Ansible role parameter keys.
  */
-export function isRole(path: Node[]): boolean {
-  const mapNode = new AncestryBuilder(path).parentOfKey().get();
-  if (mapNode) {
-    const providedKeys = getYamlMapKeys(mapNode);
-    return providedKeys.includes('role');
-  }
-  return false;
+export function isRoleParam(path: Node[]): boolean {
+  const rolesKey = new AncestryBuilder(path)
+    .parentOfKey()
+    .parent(YAMLSeq)
+    .parent(YAMLMap)
+    .getStringKey();
+  return rolesKey === 'roles';
 }
 
 export function getYamlMapKeys(mapNode: YAMLMap): Array {

From 1faffe0246cc37c7e68ad333b11b526a79f0deb7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Sun, 30 May 2021 12:22:40 +0200
Subject: [PATCH 045/558] Implemented keyword completion and hover. Implemented
 warning config handling for AnsibleLint. Clarified watchedDocumentChange
 handling. Fixed fileExists

---
 server/src/ansibleLanguageService.ts          |   6 +-
 server/src/interfaces/ansibleLintConfig.ts    |   3 +
 server/src/providers/completionProvider.ts    | 184 +++--
 server/src/providers/hoverProvider.ts         |  55 +-
 server/src/services/ansibleLint.ts            | 182 ++++-
 server/src/services/metadataLibrary.ts        |   5 +-
 server/src/services/workspaceManager.ts       |  20 +-
 .../src/test/data/utils/yaml/isTaskParam.yml  |   6 +
 server/src/test/utils/yaml.test.ts            |  30 +-
 server/src/utils/ansible.ts                   | 702 ++++++++++++++++--
 server/src/utils/misc.ts                      |   5 +-
 server/src/utils/yaml.ts                      |  21 +-
 12 files changed, 1049 insertions(+), 170 deletions(-)
 create mode 100644 server/src/interfaces/ansibleLintConfig.ts

diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index cadac1b1e..4e7c45911 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -95,6 +95,10 @@ export class AnsibleLanguageService {
             // watch for documentMetadata
             globPattern: '**/meta/main.{yml,yaml}',
           },
+          {
+            // watch for documentMetadata
+            globPattern: '**/.ansible-lint',
+          },
         ],
       });
     });
@@ -149,7 +153,7 @@ export class AnsibleLanguageService {
     this.connection.onDidChangeWatchedFiles((params) => {
       try {
         this.workspaceManager.forEachContext((context) =>
-          context.documentMetadata.handleWatchedDocumentChange(params)
+          context.handleWatchedDocumentChange(params)
         );
       } catch (error) {
         this.handleError(error, 'onDidChangeWatchedFiles');
diff --git a/server/src/interfaces/ansibleLintConfig.ts b/server/src/interfaces/ansibleLintConfig.ts
new file mode 100644
index 000000000..b493bbfcf
--- /dev/null
+++ b/server/src/interfaces/ansibleLintConfig.ts
@@ -0,0 +1,3 @@
+export interface IAnsibleLintConfig {
+  warnList: Set;
+}
diff --git a/server/src/providers/completionProvider.ts b/server/src/providers/completionProvider.ts
index 210008f55..753f58852 100644
--- a/server/src/providers/completionProvider.ts
+++ b/server/src/providers/completionProvider.ts
@@ -1,10 +1,20 @@
-import { CompletionItem, CompletionItemKind } from 'vscode-languageserver';
+import {
+  CompletionItem,
+  CompletionItemKind,
+  MarkupContent,
+} from 'vscode-languageserver';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
-import { Pair, Scalar, YAMLMap } from 'yaml/types';
+import { Node, Pair, Scalar, YAMLMap } from 'yaml/types';
 import { IOption } from '../services/docsLibrary';
 import { WorkspaceFolderContext } from '../services/workspaceManager';
-import { isTaskKeyword } from '../utils/ansible';
+import {
+  blockKeywords,
+  isTaskKeyword,
+  playKeywords,
+  roleKeywords,
+  taskKeywords,
+} from '../utils/ansible';
 import { formatModule, formatOption, getDetails } from '../utils/docsFormatter';
 import { insert } from '../utils/misc';
 import {
@@ -12,6 +22,9 @@ import {
   getDeclaredCollections,
   getPathAt,
   getYamlMapKeys,
+  isBlockParam,
+  isPlayParam,
+  isRoleParam,
   isTaskParam,
 } from '../utils/yaml';
 
@@ -36,9 +49,77 @@ export async function doCompletion(
     const node = path[path.length - 1];
     if (node) {
       const docsLibrary = await context.docsLibrary;
-      // First check if we're looking for module options
+
+      if (isPlayParam(path)) {
+        return getKeywordCompletion(document, position, path, playKeywords);
+      }
+
+      if (isBlockParam(path)) {
+        return getKeywordCompletion(document, position, path, blockKeywords);
+      }
+
+      if (isRoleParam(path)) {
+        return getKeywordCompletion(document, position, path, roleKeywords);
+      }
+
+      if (isTaskParam(path)) {
+        // provide basic keywords
+        const completionItems = getKeywordCompletion(
+          document,
+          position,
+          path,
+          taskKeywords
+        );
+
+        const taskParameterMap = new AncestryBuilder(path)
+          .parent(YAMLMap)
+          .get() as YAMLMap;
+
+        // find task parameters that have been already provided by the user
+        const providedParameters = new Set(getYamlMapKeys(taskParameterMap));
+        // should usually be 0 or 1
+        const providedModuleNames = [...providedParameters].filter(
+          (x) => !x || !isTaskKeyword(x)
+        );
+
+        // check if the module has already been provided
+        let moduleAlreadyProvided = false;
+        for (const m of providedModuleNames) {
+          // incidentally, the hack mentioned above prevents finding a module in
+          // case the cursor is on it
+          if (await docsLibrary.findModule(m, path, document.uri)) {
+            moduleAlreadyProvided = true;
+            break;
+          }
+        }
+        if (!moduleAlreadyProvided) {
+          const moduleCompletionItems = [...docsLibrary.moduleFqcns].map(
+            (moduleFqcn) => {
+              const [namespace, collection, name] = moduleFqcn.split('.');
+              return {
+                label: name,
+                kind: CompletionItemKind.Class,
+                detail: `${namespace}.${collection}`,
+                filterText: moduleFqcn,
+                data: {
+                  documentUri: document.uri, // preserve document URI for completion request
+                  moduleFqcn: moduleFqcn,
+                  inlineCollections: getDeclaredCollections(path),
+                },
+                insertText: atEndOfLine(document, position)
+                  ? `${moduleFqcn}:`
+                  : moduleFqcn,
+              };
+            }
+          );
+          completionItems.push(...moduleCompletionItems);
+        }
+        return completionItems;
+      }
+
+      // Finally, check if we're looking for module options
       // In that case, the module name is a key of a map
-      let modulePath = new AncestryBuilder(path)
+      const modulePath = new AncestryBuilder(path)
         .parentOfKey()
         .parent(YAMLMap)
         .getKeyPath();
@@ -61,20 +142,20 @@ export async function doCompletion(
           const providedOptions = new Set(getYamlMapKeys(optionMap));
 
           const remainingOptions = [...moduleOptions.entries()].filter(
-            (o) => !providedOptions.has(o[1].name)
+            ([, specs]) => !providedOptions.has(specs.name)
           );
           return remainingOptions
-            .map((entry) => {
+            .map(([option, specs]) => {
               return {
-                name: entry[0],
-                data: entry[1],
+                name: option,
+                specs: specs,
               };
             })
             .sort((a, b) => {
               // make required options appear on the top
-              if (a.data.required && !b.data.required) {
+              if (a.specs.required && !b.specs.required) {
                 return -1;
-              } else if (!a.data.required && b.data.required) {
+              } else if (!a.specs.required && b.specs.required) {
                 return 1;
               } else {
                 return 0;
@@ -92,7 +173,7 @@ export async function doCompletion(
             })
             .map((option, index) => {
               // translate option documentation to CompletionItem
-              const details = getDetails(option.data);
+              const details = getDetails(option.specs);
               return {
                 label: option.name,
                 detail: details,
@@ -100,61 +181,44 @@ export async function doCompletion(
                 kind: isAlias(option)
                   ? CompletionItemKind.Reference
                   : CompletionItemKind.Property,
-                documentation: formatOption(option.data),
+                documentation: formatOption(option.specs),
                 insertText: atEndOfLine(document, position)
-                  ? `${option.name}: `
+                  ? `${option.name}:`
                   : undefined,
               };
             });
         }
       }
-      modulePath = path;
-      if (modulePath && isTaskParam(modulePath)) {
-        const taskParameterMap = new AncestryBuilder(modulePath)
-          .parent(YAMLMap)
-          .get() as YAMLMap;
-
-        // find task parameters that have been already provided by the user
-        const providedParameters = new Set(getYamlMapKeys(taskParameterMap));
-        // should usually be 0 or 1
-        const providedModuleNames = [...providedParameters].filter(
-          (x) => !x || !isTaskKeyword(x)
-        );
-
-        // check if the module has already been provided
-        let moduleAlreadyProvided = false;
-        for (const m of providedModuleNames) {
-          // incidentally, the hack mentioned above prevents finding a module in
-          // case the cursor is on it
-          if (await docsLibrary.findModule(m, path, document.uri)) {
-            moduleAlreadyProvided = true;
-            break;
-          }
-        }
-        if (!moduleAlreadyProvided)
-          return Array.from(docsLibrary.moduleFqcns).map((moduleFqcn) => {
-            const [namespace, collection, name] = moduleFqcn.split('.');
-            return {
-              label: name,
-              kind: CompletionItemKind.Class,
-              detail: `${namespace}.${collection}`,
-              filterText: moduleFqcn,
-              data: {
-                documentUri: document.uri, // preserve document URI for completion request
-                moduleFqcn: moduleFqcn,
-                inlineCollections: getDeclaredCollections(modulePath),
-              },
-              insertText: atEndOfLine(document, position)
-                ? `${moduleFqcn}: `
-                : moduleFqcn,
-            };
-          });
-      }
     }
   }
   return null;
 }
 
+function getKeywordCompletion(
+  document: TextDocument,
+  position: Position,
+  path: Node[],
+  keywords: Map
+): CompletionItem[] {
+  const parameterMap = new AncestryBuilder(path)
+    .parent(YAMLMap)
+    .get() as YAMLMap;
+  // find options that have been already provided by the user
+  const providedParams = new Set(getYamlMapKeys(parameterMap));
+
+  const remainingParams = [...keywords.entries()].filter(
+    ([keyword]) => !providedParams.has(keyword)
+  );
+  return remainingParams.map(([keyword, description]) => {
+    return {
+      label: keyword,
+      kind: CompletionItemKind.Property,
+      documentation: description,
+      insertText: atEndOfLine(document, position) ? `${keyword}:` : undefined,
+    };
+  });
+}
+
 export async function doCompletionResolve(
   completionItem: CompletionItem,
   context: WorkspaceFolderContext
@@ -200,8 +264,8 @@ export async function doCompletionResolve(
         }
 
         const insertName = useFqcn ? completionItem.data.moduleFqcn : name;
-        completionItem.insertText = completionItem.insertText?.endsWith(': ')
-          ? `${insertName}: `
+        completionItem.insertText = completionItem.insertText?.endsWith(':')
+          ? `${insertName}:`
           : insertName;
 
         completionItem.documentation = formatModule(module.documentation);
@@ -211,8 +275,8 @@ export async function doCompletionResolve(
   return completionItem;
 }
 
-function isAlias(option: { name: string; data: IOption }): boolean {
-  return option.name !== option.data.name;
+function isAlias(option: { name: string; specs: IOption }): boolean {
+  return option.name !== option.specs.name;
 }
 
 function atEndOfLine(document: TextDocument, position: Position): boolean {
diff --git a/server/src/providers/hoverProvider.ts b/server/src/providers/hoverProvider.ts
index 07b37eb52..d708b8b5e 100644
--- a/server/src/providers/hoverProvider.ts
+++ b/server/src/providers/hoverProvider.ts
@@ -1,11 +1,24 @@
-import { Hover } from 'vscode-languageserver';
+import { Hover, MarkupContent, MarkupKind } from 'vscode-languageserver';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
-import { Scalar, YAMLMap } from 'yaml/types';
+import { Node, Scalar, YAMLMap } from 'yaml/types';
 import { DocsLibrary } from '../services/docsLibrary';
+import {
+  blockKeywords,
+  playKeywords,
+  roleKeywords,
+  taskKeywords,
+} from '../utils/ansible';
 import { formatModule, formatOption } from '../utils/docsFormatter';
 import { toLspRange } from '../utils/misc';
-import { AncestryBuilder, getPathAt, isTaskParam } from '../utils/yaml';
+import {
+  AncestryBuilder,
+  getPathAt,
+  isBlockParam,
+  isPlayParam,
+  isRoleParam,
+  isTaskParam,
+} from '../utils/yaml';
 
 export async function doHover(
   document: TextDocument,
@@ -20,7 +33,18 @@ export async function doHover(
       node instanceof Scalar &&
       new AncestryBuilder(path).parentOfKey().get() // ensure we look at a key, not value of a Pair
     ) {
-      // hovering over a module name
+      if (isPlayParam(path)) {
+        return getKeywordHover(document, node, playKeywords);
+      }
+
+      if (isBlockParam(path)) {
+        return getKeywordHover(document, node, blockKeywords);
+      }
+
+      if (isRoleParam(path)) {
+        return getKeywordHover(document, node, roleKeywords);
+      }
+
       if (isTaskParam(path)) {
         const module = await docsLibrary.findModule(
           node.value,
@@ -32,6 +56,8 @@ export async function doHover(
             contents: formatModule(module.documentation),
             range: node.range ? toLspRange(node.range, document) : undefined,
           };
+        } else {
+          return getKeywordHover(document, node, taskKeywords);
         }
       }
 
@@ -61,3 +87,24 @@ export async function doHover(
   }
   return null;
 }
+
+function getKeywordHover(
+  document: TextDocument,
+  node: Scalar,
+  keywords: Map
+): Hover | null {
+  const keywordDocumentation = keywords.get(node.value);
+  const markupDoc =
+    typeof keywordDocumentation === 'string'
+      ? {
+          kind: MarkupKind.Markdown,
+          value: keywordDocumentation,
+        }
+      : keywordDocumentation;
+  if (markupDoc) {
+    return {
+      contents: markupDoc,
+      range: node.range ? toLspRange(node.range, document) : undefined,
+    };
+  } else return null;
+}
diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
index 0a066fa11..8f3160846 100644
--- a/server/src/services/ansibleLint.ts
+++ b/server/src/services/ansibleLint.ts
@@ -1,52 +1,98 @@
 import IntervalTree from '@flatten-js/interval-tree';
 import * as child_process from 'child_process';
+import { promises as fs } from 'fs';
 import { ExecException } from 'node:child_process';
 import { URL } from 'url';
+import * as path from 'path';
 import { promisify } from 'util';
 import {
   Connection,
   Diagnostic,
   DiagnosticSeverity,
+  DidChangeWatchedFilesParams,
   Position,
   Range,
   TextDocumentContentChangeEvent,
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
+import { parseAllDocuments } from 'yaml';
+import { IAnsibleLintConfig } from '../interfaces/ansibleLintConfig';
+import { fileExists, hasOwnProperty } from '../utils/misc';
 import { WorkspaceFolderContext } from './workspaceManager';
 const exec = promisify(child_process.exec);
 
+/**
+ * Acts as and interface to ansible-lint and a cache of its output.
+ *
+ * ansible-lint may provide diagnostics for more than just the file for which
+ * linting was triggered, and this is reflected in the implementation.
+ */
 export class AnsibleLint {
   private connection: Connection;
   private context: WorkspaceFolderContext;
   private validationCache: Map> = new Map();
+  private useProgressTracker = false;
+  private configCache: Map = new Map();
 
   constructor(connection: Connection, context: WorkspaceFolderContext) {
     this.connection = connection;
     this.context = context;
+    this.useProgressTracker =
+      !!context.clientCapabilities.window?.workDoneProgress;
   }
 
+  /**
+   * Perform linting for the given document.
+   *
+   * In case no errors are found for the current document, then only the cache
+   * is cleared, and not the diagnostics on the client side. That way old
+   * diagnostics will persist until the file is changed. This allows inspecting
+   * more complex errors reported in other files.
+   */
   public async doValidate(
     textDocument: TextDocument
   ): Promise> {
     const docPath = new URL(textDocument.uri).pathname;
     let diagnostics: Map = new Map();
+    let progressTracker;
+    if (this.useProgressTracker) {
+      progressTracker = await this.connection.window.createWorkDoneProgress();
+    }
+
+    const ansibleLintConfigPromise = this.getAnsibleLintConfig(
+      textDocument.uri
+    );
+
+    const workingDirectory = path.dirname(new URL(textDocument.uri).pathname);
+
     try {
       const settings = await this.context.documentSettings.get(
         textDocument.uri
       );
 
       if (settings.ansibleLint.enabled) {
+        if (progressTracker) {
+          progressTracker.begin(
+            'ansible-lint',
+            undefined,
+            'Processing files...'
+          );
+        }
         const result = await exec(
           `${settings.ansibleLint.path} --offline --nocolor -f codeclimate ${docPath}`,
           {
             encoding: 'utf-8',
-            cwd: new URL(this.context.workspaceFolder.uri).pathname,
+            cwd: workingDirectory,
           }
         );
-        diagnostics = this.processReport(result.stdout);
+        diagnostics = this.processReport(
+          result.stdout,
+          await ansibleLintConfigPromise,
+          workingDirectory
+        );
 
         if (result.stderr) {
-          this.connection.window.showErrorMessage(result.stderr);
+          this.connection.console.info(`[ansible-lint] ${result.stderr}`);
         }
       }
     } catch (error) {
@@ -57,10 +103,18 @@ export class AnsibleLint {
           stderr: string;
         };
         if (execError.code === 2) {
-          diagnostics = this.processReport(execError.stdout);
+          diagnostics = this.processReport(
+            execError.stdout,
+            await ansibleLintConfigPromise,
+            workingDirectory
+          );
         } else {
           this.connection.window.showErrorMessage(execError.message);
         }
+
+        if (execError.stderr) {
+          this.connection.console.info(`[ansible-lint] ${execError.stderr}`);
+        }
       } else {
         this.connection.console.error(
           `Exception in AnsibleLint service: ${JSON.stringify(error)}`
@@ -68,6 +122,9 @@ export class AnsibleLint {
       }
     }
 
+    // (re-)set validation cache for file that triggered validation
+    this.validationCache.set(textDocument.uri, new IntervalTree());
+
     for (const [fileUri, fileDiagnostics] of diagnostics) {
       // (re-)set validation cache for each impacted file
       const diagnosticTree = new IntervalTree();
@@ -80,11 +137,17 @@ export class AnsibleLint {
         );
       }
     }
-
+    if (progressTracker) {
+      progressTracker.done();
+    }
     return diagnostics;
   }
 
-  private processReport(result: string): Map {
+  private processReport(
+    result: string,
+    ansibleLintConfig: IAnsibleLintConfig | undefined,
+    workingDirectory: string
+  ): Map {
     const diagnostics: Map = new Map();
     const report = JSON.parse(result);
     if (report instanceof Array) {
@@ -112,16 +175,36 @@ export class AnsibleLint {
             start: start,
             end: end,
           };
-          const locationUri = `${this.context.workspaceFolder.uri}/${item.location.path}`;
-          if (!diagnostics.has(locationUri)) {
-            diagnostics.set(locationUri, []);
+
+          let severity: DiagnosticSeverity = DiagnosticSeverity.Error;
+          if (ansibleLintConfig) {
+            const lintRuleName = (item.check_name as string).match(
+              /\[(?[a-z\-]+)\].*/
+            )?.groups?.name;
+
+            if (lintRuleName && ansibleLintConfig.warnList.has(lintRuleName)) {
+              severity = DiagnosticSeverity.Warning;
+            }
+
+            const categories = item.categories;
+            if (categories instanceof Array) {
+              if (categories.some((c) => ansibleLintConfig.warnList.has(c))) {
+                severity = DiagnosticSeverity.Warning;
+              }
+            }
           }
-          const fileDiagnostics = diagnostics.get(locationUri) as Diagnostic[];
 
+          const locationUri = `${workingDirectory}/${item.location.path}`;
+
+          let fileDiagnostics = diagnostics.get(locationUri);
+          if (!fileDiagnostics) {
+            fileDiagnostics = [];
+            diagnostics.set(locationUri, fileDiagnostics);
+          }
           fileDiagnostics.push({
             message: item.check_name,
             range: range || Range.create(0, 0, 0, 0),
-            severity: DiagnosticSeverity.Error,
+            severity: severity,
             source: 'Ansible',
           });
         }
@@ -158,4 +241,81 @@ export class AnsibleLint {
   public getValidationFromCache(fileUri: string): Diagnostic[] | undefined {
     return this.validationCache.get(fileUri)?.values;
   }
+
+  public handleWatchedDocumentChange(
+    params: DidChangeWatchedFilesParams
+  ): void {
+    for (const fileEvent of params.changes) {
+      // remove from cache on any change
+      this.configCache.delete(fileEvent.uri);
+    }
+  }
+
+  private async getAnsibleLintConfig(
+    uri: string
+  ): Promise {
+    const configPath = await this.getAnsibleLintConfigPath(uri);
+    if (configPath) {
+      let config = this.configCache.get(configPath);
+      if (!config) {
+        config = await this.readAnsibleLintConfig(configPath);
+        this.configCache.set(configPath, config);
+      }
+      return config;
+    }
+  }
+
+  private async readAnsibleLintConfig(
+    configPath: string
+  ): Promise {
+    const config = {
+      warnList: new Set(),
+    };
+    try {
+      const configContents = await fs.readFile(new URL(configPath), {
+        encoding: 'utf8',
+      });
+      parseAllDocuments(configContents).forEach((configDoc) => {
+        const configObject: unknown = configDoc.toJSON();
+        if (
+          hasOwnProperty(configObject, 'warn_list') &&
+          configObject.warn_list instanceof Array
+        ) {
+          for (const warn_item of configObject.warn_list) {
+            if (typeof warn_item === 'string') {
+              config.warnList.add(warn_item);
+            }
+          }
+        }
+      });
+    } catch (error) {
+      this.connection.window.showErrorMessage(error);
+    }
+    return config;
+  }
+
+  private async getAnsibleLintConfigPath(
+    uri: string
+  ): Promise {
+    // find configuration path
+    let configPath;
+    const pathArray = uri.split('/');
+
+    // Find first configuration file going up until workspace root
+    for (let index = pathArray.length - 1; index >= 0; index--) {
+      const candidatePath = pathArray
+        .slice(0, index)
+        .concat('.ansible-lint')
+        .join('/');
+      if (!candidatePath.startsWith(this.context.workspaceFolder.uri)) {
+        // we've gone out of the workspace folder
+        break;
+      }
+      if (await fileExists(candidatePath)) {
+        configPath = candidatePath;
+        break;
+      }
+    }
+    return configPath;
+  }
 }
diff --git a/server/src/services/metadataLibrary.ts b/server/src/services/metadataLibrary.ts
index 811f4bdcf..7b65d8351 100644
--- a/server/src/services/metadataLibrary.ts
+++ b/server/src/services/metadataLibrary.ts
@@ -38,8 +38,6 @@ export class MetadataLibrary {
 
   /**
    * Finds a path where the metadata file for a given document should reside.
-   * @param uri The `URI` of the document for which a metadata file path should
-   * be found.
    * @returns The path or undefined in case the file cannot have any related
    * metadata file.
    */
@@ -47,7 +45,6 @@ export class MetadataLibrary {
     let metaPath;
     const pathArray = uri.split('/');
 
-    // const path = /file:\/\/(.*)/.exec(uri)?.groups
     // Find first
     for (let index = pathArray.length - 1; index >= 0; index--) {
       if (pathArray[index] === 'tasks') {
@@ -67,7 +64,7 @@ export class MetadataLibrary {
       source: metadataUri,
       collections: new Array(),
     };
-    if (fileExists(metadataUri)) {
+    if (await fileExists(metadataUri)) {
       try {
         const metaContents = await fs.readFile(new URL(metadataUri), {
           encoding: 'utf8',
diff --git a/server/src/services/workspaceManager.ts b/server/src/services/workspaceManager.ts
index a61b84365..495e5c7a4 100644
--- a/server/src/services/workspaceManager.ts
+++ b/server/src/services/workspaceManager.ts
@@ -2,6 +2,7 @@ import * as _ from 'lodash';
 import {
   ClientCapabilities,
   Connection,
+  DidChangeWatchedFilesParams,
   WorkspaceFolder,
   WorkspaceFoldersChangeEvent,
 } from 'vscode-languageserver';
@@ -101,6 +102,7 @@ export class WorkspaceManager {
  */
 export class WorkspaceFolderContext {
   private connection: Connection;
+  public clientCapabilities: ClientCapabilities;
   public workspaceFolder: WorkspaceFolder;
   public documentMetadata: MetadataLibrary;
   public documentSettings: SettingsManager;
@@ -116,11 +118,12 @@ export class WorkspaceFolderContext {
     workspaceManager: WorkspaceManager
   ) {
     this.connection = connection;
+    this.clientCapabilities = workspaceManager.clientCapabilities;
     this.workspaceFolder = workspaceFolder;
     this.documentMetadata = new MetadataLibrary(connection);
     this.documentSettings = new SettingsManager(
       connection,
-      !!workspaceManager.clientCapabilities.workspace?.configuration
+      !!this.clientCapabilities.workspace?.configuration
     );
     this.documentSettings.onConfigurationChanged(
       this.workspaceFolder.uri,
@@ -133,6 +136,21 @@ export class WorkspaceFolderContext {
     );
   }
 
+  public handleWatchedDocumentChange(
+    params: DidChangeWatchedFilesParams
+  ): void {
+    this.documentMetadata.handleWatchedDocumentChange(params);
+    this.ansibleLint.handleWatchedDocumentChange(params);
+    for (const fileEvent of params.changes) {
+      if (fileEvent.uri.startsWith(this.workspaceFolder.uri)) {
+        // in case the configuration changes for this folder, we should
+        // invalidate the services that rely on it in initialization
+        this._ansibleConfig = undefined;
+        this._docsLibrary = undefined;
+      }
+    }
+  }
+
   public get docsLibrary(): Thenable {
     if (!this._docsLibrary) {
       const docsLibrary = new DocsLibrary(this);
diff --git a/server/src/test/data/utils/yaml/isTaskParam.yml b/server/src/test/data/utils/yaml/isTaskParam.yml
index 0ff887afc..d4cc748b5 100644
--- a/server/src/test/data/utils/yaml/isTaskParam.yml
+++ b/server/src/test/data/utils/yaml/isTaskParam.yml
@@ -1,3 +1,5 @@
+test: parameter
+---
 - name: Test task
   become: yes
 ---
@@ -13,3 +15,7 @@
     - block:
         - name: Test task in block
           some_module:
+      become: yes
+  roles:
+    - name: test
+      when: false
diff --git a/server/src/test/utils/yaml.test.ts b/server/src/test/utils/yaml.test.ts
index 8a867b4c6..3938a16e8 100644
--- a/server/src/test/utils/yaml.test.ts
+++ b/server/src/test/utils/yaml.test.ts
@@ -206,37 +206,55 @@ describe('yaml', () => {
 
   describe('isTaskParam', () => {
     it('canCorrectlyConfirmTaskParam', async () => {
-      const path = (await getPathInFile('isTaskParam.yml', 1, 3)) as Node[];
+      const path = (await getPathInFile('isTaskParam.yml', 3, 3)) as Node[];
       const test = isTaskParam(path);
       expect(test).to.be.eq(true);
     });
 
     it('canCorrectlyNegateTaskParam', async () => {
-      const path = (await getPathInFile('isTaskParam.yml', 4, 3)) as Node[];
+      const path = (await getPathInFile('isTaskParam.yml', 1, 1)) as Node[];
       const test = isTaskParam(path);
       expect(test).to.be.eq(false);
     });
 
     it('canCorrectlyNegateTaskParamForValue', async () => {
-      const path = (await getPathInFile('isTaskParam.yml', 1, 9)) as Node[];
+      const path = (await getPathInFile('isTaskParam.yml', 2, 9)) as Node[];
+      const test = isTaskParam(path);
+      expect(test).to.be.eq(false);
+    });
+
+    it('canCorrectlyNegateTaskParamForPlay', async () => {
+      const path = (await getPathInFile('isTaskParam.yml', 7, 3)) as Node[];
+      const test = isTaskParam(path);
+      expect(test).to.be.eq(false);
+    });
+
+    it('canCorrectlyNegateTaskParamForBlock', async () => {
+      const path = (await getPathInFile('isTaskParam.yml', 18, 7)) as Node[];
+      const test = isTaskParam(path);
+      expect(test).to.be.eq(false);
+    });
+
+    it('canCorrectlyNegateTaskParamForRole', async () => {
+      const path = (await getPathInFile('isTaskParam.yml', 21, 7)) as Node[];
       const test = isTaskParam(path);
       expect(test).to.be.eq(false);
     });
 
     it('canCorrectlyConfirmTaskParamInPreTasks', async () => {
-      const path = (await getPathInFile('isTaskParam.yml', 8, 7)) as Node[];
+      const path = (await getPathInFile('isTaskParam.yml', 10, 7)) as Node[];
       const test = isTaskParam(path);
       expect(test).to.be.eq(true);
     });
 
     it('canCorrectlyConfirmTaskParamInTasks', async () => {
-      const path = (await getPathInFile('isTaskParam.yml', 11, 7)) as Node[];
+      const path = (await getPathInFile('isTaskParam.yml', 13, 7)) as Node[];
       const test = isTaskParam(path);
       expect(test).to.be.eq(true);
     });
 
     it('canCorrectlyConfirmTaskParamInBlock', async () => {
-      const path = (await getPathInFile('isTaskParam.yml', 15, 11)) as Node[];
+      const path = (await getPathInFile('isTaskParam.yml', 17, 11)) as Node[];
       const test = isTaskParam(path);
       expect(test).to.be.eq(true);
     });
diff --git a/server/src/utils/ansible.ts b/server/src/utils/ansible.ts
index 8e034a054..704d05678 100644
--- a/server/src/utils/ansible.ts
+++ b/server/src/utils/ansible.ts
@@ -1,157 +1,705 @@
-export const taskKeywords = new Set([
-  'action',
+import { MarkupContent, MarkupKind } from 'vscode-languageserver';
+export const playKeywords = new Map();
+playKeywords.set(
   'any_errors_fatal',
-  'args',
-  'async',
-  'become',
-  'become_exe',
-  'become_flags',
-  'become_method',
-  'become_user',
-  'changed_when',
-  'check_mode',
-  'collections',
-  'connection',
-  'debugger',
-  'delay',
-  'delegate_facts',
-  'delegate_to',
-  'diff',
-  'environment',
-  'failed_when',
-  'ignore_errors',
-  'ignore_unreachable',
-  'local_action',
-  'loop',
-  'loop_control',
-  'module_defaults',
-  'name',
-  'no_log',
-  'notify',
-  'poll',
-  'port',
-  'register',
-  'remote_user',
-  'retries',
-  'run_once',
-  'tags',
-  'throttle',
-  'timeout',
-  'until',
-  'vars',
-  'when',
-]);
+  'Force any un-handled task errors on any host to propagate to all hosts and end the play.'
+);
 
-export const playKeywords = new Set([
-  'any_errors_fatal',
+playKeywords.set(
   'become',
-  'become_exe',
+  'Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin.'
+);
+
+playKeywords.set('become_exe', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Path to the executable used to elevate privileges. Implemented by the become plugin. See `Become Plugins`.',
+});
+
+playKeywords.set(
   'become_flags',
+  'A string of flag(s) to pass to the privilege escalation program when become is True.'
+);
+
+playKeywords.set(
   'become_method',
+  'Which method of privilege escalation to use (such as sudo or su).'
+);
+
+playKeywords.set(
   'become_user',
-  'check_mode',
-  'collections',
-  'connection',
-  'debugger',
+  'User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user.'
+);
+
+playKeywords.set('check_mode', {
+  kind: MarkupKind.Markdown,
+  value:
+    'A boolean that controls if a task is executed in ‘check’ mode. See `Validating tasks: check mode and diff mode`.',
+});
+
+playKeywords.set('collections', {
+  kind: MarkupKind.Markdown,
+  value: `List of collection namespaces to search for modules, plugins, and roles. See \`Using collections in a Playbook\`.
+
+NOTE:
+Tasks within a role do not inherit the value of \`collections\` from the play. To have a role search a list of collections, use the \`collections\` keyword in \`meta/main.yml\` within a role.`,
+});
+
+playKeywords.set('connection', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Allows you to change the connection plugin used for tasks to execute on the target. See `Using connection plugins`.',
+});
+
+playKeywords.set('debugger', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Enable debugging tasks based on state of the task result. See `Debugging tasks`.',
+});
+
+playKeywords.set(
   'diff',
+  'Toggle to make tasks return ‘diff’ information or not.'
+);
+
+playKeywords.set(
   'environment',
+  'A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data.'
+);
+
+playKeywords.set(
   'fact_path',
+  'Set the fact path option for the fact gathering plugin controlled by gather_facts.'
+);
+
+playKeywords.set(
   'force_handlers',
+  'Will force notified handler execution for hosts even if they failed during the play. Will not trigger if the play itself fails.'
+);
+
+playKeywords.set(
   'gather_facts',
+  'A boolean that controls if the play will automatically run the ‘setup’ task to gather facts for the hosts.'
+);
+
+playKeywords.set(
   'gather_subset',
+  'Allows you to pass subset options to the fact gathering plugin controlled by gather_facts.'
+);
+
+playKeywords.set(
   'gather_timeout',
+  'Allows you to set the timeout for the fact gathering plugin controlled by gather_facts.'
+);
+
+playKeywords.set(
   'handlers',
+  'A section with tasks that are treated as handlers, these won’t get executed normally, only when notified after each section of tasks is complete. A handler’s listen field is not templatable.'
+);
+
+playKeywords.set(
   'hosts',
+  'A list of groups, hosts or host pattern that translates into a list of hosts that are the play’s target.'
+);
+
+playKeywords.set(
   'ignore_errors',
+  'Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.'
+);
+
+playKeywords.set(
   'ignore_unreachable',
+  'Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts.'
+);
+
+playKeywords.set(
   'max_fail_percentage',
+  'Can be used to abort the run after a given percentage of hosts in the current batch has failed. This only works on linear or linear derived strategies.'
+);
+
+playKeywords.set(
   'module_defaults',
+  'Specifies default parameter values for modules.'
+);
+
+playKeywords.set(
   'name',
-  'no_log',
+  'Identifier. Can be used for documentation, or in tasks/handlers.'
+);
+
+playKeywords.set('no_log', 'Boolean that controls information disclosure.');
+
+playKeywords.set(
   'order',
+  'Controls the sorting of hosts as they are used for executing the play. Possible values are inventory (default), sorted, reverse_sorted, reverse_inventory and shuffle.'
+);
+
+playKeywords.set(
   'port',
+  'Used to override the default port used in a connection.'
+);
+
+playKeywords.set(
   'post_tasks',
-  'pre_tasks',
+  'A list of tasks to execute after the tasks section.'
+);
+
+playKeywords.set('pre_tasks', 'A list of tasks to execute before roles.');
+
+playKeywords.set(
   'remote_user',
-  'roles',
+  'User used to log into the target via the connection plugin.'
+);
+
+playKeywords.set('roles', 'List of roles to be imported into the play');
+
+playKeywords.set(
   'run_once',
+  'Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch.'
+);
+
+playKeywords.set(
   'serial',
+  'Explicitly define how Ansible batches the execution of the current play on the play’s target'
+);
+
+playKeywords.set(
   'strategy',
+  'Allows you to choose the connection plugin to use for the play.'
+);
+
+playKeywords.set(
   'tags',
+  'Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.'
+);
+
+playKeywords.set(
   'tasks',
+  'Main list of tasks to execute in the play, they run after roles and before post_tasks.'
+);
+
+playKeywords.set(
   'throttle',
+  'Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel.'
+);
+
+playKeywords.set(
   'timeout',
-  'vars',
+  'Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task.'
+);
+
+playKeywords.set('vars', 'Dictionary/map of variables');
+
+playKeywords.set(
   'vars_files',
-  'vars_prompt',
-]);
+  'List of files that contain vars to include in the play.'
+);
 
-export const roleKeywords = new Set([
+playKeywords.set('vars_prompt', 'List of variables to prompt for.');
+
+export const roleKeywords = new Map();
+roleKeywords.set(
   'any_errors_fatal',
-  'become',
-  'become_exe',
+  'Force any un-handled task errors on any host to propagate to all hosts and end the play.'
+);
+
+roleKeywords.set('become', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin. See `Become Plugins`.',
+});
+
+roleKeywords.set('become_exe', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Path to the executable used to elevate privileges. Implemented by the become plugin. See `Become Plugins`.',
+});
+
+roleKeywords.set(
   'become_flags',
+  'A string of flag(s) to pass to the privilege escalation program when become is True.'
+);
+
+roleKeywords.set(
   'become_method',
+  'Which method of privilege escalation to use (such as sudo or su).'
+);
+
+roleKeywords.set(
   'become_user',
-  'check_mode',
-  'collections',
-  'connection',
-  'debugger',
+  'User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user.'
+);
+
+roleKeywords.set('check_mode', {
+  kind: MarkupKind.Markdown,
+  value:
+    'A boolean that controls if a task is executed in ‘check’ mode. See `Validating tasks: check mode and diff mode`.',
+});
+
+roleKeywords.set('collections', {
+  kind: MarkupKind.Markdown,
+  value: `List of collection namespaces to search for modules, plugins, and roles. See \`Using collections in a Playbook\`.
+
+NOTE:
+Tasks within a role do not inherit the value of \`collections\` from the play. To have a role search a list of collections, use the \`collections\` keyword in \`meta/main.yml\` within a role.`,
+});
+
+roleKeywords.set('connection', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Allows you to change the connection plugin used for tasks to execute on the target. See `Using connection plugins`.',
+});
+
+roleKeywords.set('debugger', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Enable debugging tasks based on state of the task result. See `Debugging tasks`.',
+});
+
+roleKeywords.set(
   'delegate_facts',
+  'Boolean that allows you to apply facts to a delegated host instead of inventory_hostname.'
+);
+
+roleKeywords.set(
   'delegate_to',
+  'Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task.'
+);
+
+roleKeywords.set(
   'diff',
+  'Toggle to make tasks return ‘diff’ information or not.'
+);
+
+roleKeywords.set(
   'environment',
+  'A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data.'
+);
+
+roleKeywords.set(
   'ignore_errors',
+  'Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.'
+);
+
+roleKeywords.set(
   'ignore_unreachable',
+  'Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts.'
+);
+
+roleKeywords.set(
   'module_defaults',
+  'Specifies default parameter values for modules.'
+);
+
+roleKeywords.set(
   'name',
-  'no_log',
+  'Identifier. Can be used for documentation, or in tasks/handlers.'
+);
+
+roleKeywords.set('no_log', 'Boolean that controls information disclosure.');
+
+roleKeywords.set(
   'port',
+  'Used to override the default port used in a connection.'
+);
+
+roleKeywords.set(
   'remote_user',
+  'User used to log into the target via the connection plugin.'
+);
+
+roleKeywords.set(
   'run_once',
+  'Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch.'
+);
+
+roleKeywords.set(
   'tags',
+  'Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.'
+);
+
+roleKeywords.set(
   'throttle',
+  'Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel.'
+);
+
+roleKeywords.set(
   'timeout',
-  'vars',
+  'Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task.'
+);
+
+roleKeywords.set('vars', 'Dictionary/map of variables');
+
+roleKeywords.set(
   'when',
-]);
+  'Conditional expression, determines if an iteration of a task is run or not.'
+);
 
-export const blockKeywords = new Set([
+export const blockKeywords = new Map();
+blockKeywords.set(
   'always',
+  'List of tasks, in a block, that execute no matter if there is an error in the block or not.'
+);
+
+blockKeywords.set(
   'any_errors_fatal',
-  'become',
-  'become_exe',
+  'Force any un-handled task errors on any host to propagate to all hosts and end the play.'
+);
+
+blockKeywords.set('become', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin. See `Become Plugins`.',
+});
+
+blockKeywords.set('become_exe', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Path to the executable used to elevate privileges. Implemented by the become plugin. See `Become Plugins`.',
+});
+
+blockKeywords.set(
   'become_flags',
+  'A string of flag(s) to pass to the privilege escalation program when become is True.'
+);
+
+blockKeywords.set(
   'become_method',
+  'Which method of privilege escalation to use (such as sudo or su).'
+);
+
+blockKeywords.set(
   'become_user',
-  'block',
-  'check_mode',
-  'collections',
-  'connection',
-  'debugger',
+  'User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user.'
+);
+
+blockKeywords.set('block', 'List of tasks in a block.');
+
+blockKeywords.set('check_mode', {
+  kind: MarkupKind.Markdown,
+  value:
+    'A boolean that controls if a task is executed in ‘check’ mode. See `Validating tasks: check mode and diff mode`.',
+});
+
+blockKeywords.set('collections', {
+  kind: MarkupKind.Markdown,
+  value: `List of collection namespaces to search for modules, plugins, and roles. See \`Using collections in a Playbook\`.
+
+NOTE:
+Tasks within a role do not inherit the value of \`collections\` from the play. To have a role search a list of collections, use the \`collections\` keyword in \`meta/main.yml\` within a role.`,
+});
+
+blockKeywords.set('connection', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Allows you to change the connection plugin used for tasks to execute on the target. See `Using connection plugins`.',
+});
+
+blockKeywords.set('debugger', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Enable debugging tasks based on state of the task result. See `Debugging tasks`.',
+});
+
+blockKeywords.set(
   'delegate_facts',
+  'Boolean that allows you to apply facts to a delegated host instead of inventory_hostname.'
+);
+
+blockKeywords.set(
   'delegate_to',
+  'Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task.'
+);
+
+blockKeywords.set(
   'diff',
+  'Toggle to make tasks return ‘diff’ information or not.'
+);
+
+blockKeywords.set(
   'environment',
+  'A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data.'
+);
+
+blockKeywords.set(
   'ignore_errors',
+  'Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.'
+);
+
+blockKeywords.set(
   'ignore_unreachable',
+  'Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts.'
+);
+
+blockKeywords.set(
   'module_defaults',
+  'Specifies default parameter values for modules.'
+);
+
+blockKeywords.set(
   'name',
-  'no_log',
+  'Identifier. Can be used for documentation, or in tasks/handlers.'
+);
+
+blockKeywords.set('no_log', 'Boolean that controls information disclosure.');
+
+blockKeywords.set(
   'notify',
+  'List of handlers to notify when the task returns a ‘changed=True’ status.'
+);
+
+blockKeywords.set(
   'port',
+  'Used to override the default port used in a connection.'
+);
+
+blockKeywords.set(
   'remote_user',
+  'User used to log into the target via the connection plugin.'
+);
+
+blockKeywords.set(
   'rescue',
+  'List of tasks in a block that run if there is a task error in the main block list.'
+);
+
+blockKeywords.set(
   'run_once',
+  'Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch.'
+);
+
+blockKeywords.set(
   'tags',
+  'Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.'
+);
+
+blockKeywords.set(
   'throttle',
+  'Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel.'
+);
+
+blockKeywords.set(
   'timeout',
-  'vars',
+  'Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task.'
+);
+
+blockKeywords.set('vars', 'Dictionary/map of variables');
+
+blockKeywords.set(
   'when',
-]);
+  'Conditional expression, determines if an iteration of a task is run or not.'
+);
+
+export const taskKeywords = new Map();
+taskKeywords.set(
+  'action',
+  'The ‘action’ to execute for a task, it normally translates into a C(module) or action plugin.'
+);
+
+taskKeywords.set(
+  'any_errors_fatal',
+  'Force any un-handled task errors on any host to propagate to all hosts and end the play.'
+);
+
+taskKeywords.set(
+  'args',
+  'A secondary way to add arguments into a task. Takes a dictionary in which keys map to options and values.'
+);
+
+taskKeywords.set(
+  'async',
+  'Run a task asynchronously if the C(action) supports this; value is maximum runtime in seconds.'
+);
+
+taskKeywords.set('become', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin. See `Become Plugins`.',
+});
+
+taskKeywords.set('become_exe', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Path to the executable used to elevate privileges. Implemented by the become plugin. See `Become Plugins`.',
+});
+
+taskKeywords.set(
+  'become_flags',
+  'A string of flag(s) to pass to the privilege escalation program when become is True.'
+);
+
+taskKeywords.set(
+  'become_method',
+  'Which method of privilege escalation to use (such as sudo or su).'
+);
+
+taskKeywords.set(
+  'become_user',
+  'User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user.'
+);
+
+taskKeywords.set(
+  'changed_when',
+  'Conditional expression that overrides the task’s normal ‘changed’ status.'
+);
+
+taskKeywords.set('check_mode', {
+  kind: MarkupKind.Markdown,
+  value:
+    'A boolean that controls if a task is executed in ‘check’ mode. See `Validating tasks: check mode and diff mode`.',
+});
+
+taskKeywords.set('collections', {
+  kind: MarkupKind.Markdown,
+  value: `List of collection namespaces to search for modules, plugins, and roles. See \`Using collections in a Playbook\`.
+
+NOTE:
+Tasks within a role do not inherit the value of \`collections\` from the play. To have a role search a list of collections, use the \`collections\` keyword in \`meta/main.yml\` within a role.`,
+});
+
+taskKeywords.set('connection', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Allows you to change the connection plugin used for tasks to execute on the target. See `Using connection plugins`.',
+});
+
+taskKeywords.set('debugger', {
+  kind: MarkupKind.Markdown,
+  value:
+    'Enable debugging tasks based on state of the task result. See `Debugging tasks`.',
+});
+
+taskKeywords.set(
+  'delay',
+  'Number of seconds to delay between retries. This setting is only used in combination with until.'
+);
+
+taskKeywords.set(
+  'delegate_facts',
+  'Boolean that allows you to apply facts to a delegated host instead of inventory_hostname.'
+);
+
+taskKeywords.set(
+  'delegate_to',
+  'Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task.'
+);
+
+taskKeywords.set(
+  'diff',
+  'Toggle to make tasks return ‘diff’ information or not.'
+);
+
+taskKeywords.set(
+  'environment',
+  'A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data.'
+);
+
+taskKeywords.set(
+  'failed_when',
+  'Conditional expression that overrides the task’s normal ‘failed’ status.'
+);
+
+taskKeywords.set(
+  'ignore_errors',
+  'Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.'
+);
+
+taskKeywords.set(
+  'ignore_unreachable',
+  'Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts.'
+);
+
+taskKeywords.set(
+  'local_action',
+  'Same as action but also implies delegate_to: localhost'
+);
+
+taskKeywords.set(
+  'loop',
+  'Takes a list for the task to iterate over, saving each list element into the item variable (configurable via loop_control)'
+);
+
+taskKeywords.set(
+  'loop_control',
+  'Several keys here allow you to modify/set loop behaviour in a task.'
+);
+
+taskKeywords.set(
+  'module_defaults',
+  'Specifies default parameter values for modules.'
+);
+
+taskKeywords.set(
+  'name',
+  'Identifier. Can be used for documentation, or in tasks/handlers.'
+);
+
+taskKeywords.set('no_log', 'Boolean that controls information disclosure.');
+
+taskKeywords.set(
+  'notify',
+  'List of handlers to notify when the task returns a ‘changed=True’ status.'
+);
+
+taskKeywords.set(
+  'poll',
+  'Sets the polling interval in seconds for async tasks (default 10s).'
+);
+
+taskKeywords.set(
+  'port',
+  'Used to override the default port used in a connection.'
+);
+
+taskKeywords.set(
+  'register',
+  'Name of variable that will contain task status and module return data.'
+);
+
+taskKeywords.set(
+  'remote_user',
+  'User used to log into the target via the connection plugin.'
+);
+
+taskKeywords.set(
+  'retries',
+  'Number of retries before giving up in a until loop. This setting is only used in combination with until.'
+);
+
+taskKeywords.set(
+  'run_once',
+  'Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch.'
+);
+
+taskKeywords.set(
+  'tags',
+  'Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.'
+);
+
+taskKeywords.set(
+  'throttle',
+  'Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel.'
+);
+
+taskKeywords.set(
+  'timeout',
+  'Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task.'
+);
+
+taskKeywords.set(
+  'until',
+  'This keyword implies a ‘retries loop’ that will go on until the condition supplied here is met or we hit the retries limit.'
+);
+
+taskKeywords.set('vars', 'Dictionary/map of variables');
+
+taskKeywords.set(
+  'when',
+  'Conditional expression, determines if an iteration of a task is run or not.'
+);
 
 export const playExclusiveKeywords = new Set(
-  [...playKeywords].filter(
+  [...playKeywords.keys()].filter(
     (k) => !taskKeywords.has(k) && !roleKeywords.has(k) && !blockKeywords.has(k)
   )
 );
diff --git a/server/src/utils/misc.ts b/server/src/utils/misc.ts
index a31b3184f..ca66439e5 100644
--- a/server/src/utils/misc.ts
+++ b/server/src/utils/misc.ts
@@ -1,9 +1,10 @@
 import { promises as fs } from 'fs';
+import { URL } from 'url';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { Range } from 'vscode-languageserver-types';
 
-export async function fileExists(filePath: string): Promise {
-  return !!(await fs.stat(filePath).catch(() => false));
+export async function fileExists(fileUri: string): Promise {
+  return !!(await fs.stat(new URL(fileUri)).catch(() => false));
 }
 
 export function toLspRange(
diff --git a/server/src/utils/yaml.ts b/server/src/utils/yaml.ts
index 147524836..e63dbceaf 100644
--- a/server/src/utils/yaml.ts
+++ b/server/src/utils/yaml.ts
@@ -209,13 +209,16 @@ export const tasksKey = /^(tasks|pre_tasks|post_tasks|block|rescue|always)$/;
  * Determines whether the path points at a parameter key of an Ansible task.
  */
 export function isTaskParam(path: Node[]): boolean {
-  if (isPlayParam(path)) return false;
   const taskListPath = new AncestryBuilder(path)
     .parentOfKey()
     .parent(YAMLSeq)
     .getPath();
   if (taskListPath) {
     // basic shape of the task list has been found
+
+    if (isPlayParam(path) || isBlockParam(path) || isRoleParam(path))
+      return false;
+
     if (taskListPath.length === 1) {
       // case when the task list is at the top level of the document
       return true;
@@ -232,10 +235,13 @@ export function isTaskParam(path: Node[]): boolean {
 }
 
 /**
- * Tries to find the list of collections declared at the Ansible play level.
+ * Tries to find the list of collections declared at the Ansible play/block/task level.
  */
 export function getDeclaredCollections(modulePath: Node[] | null): string[] {
   const declaredCollections: string[] = [];
+  const taskParamsNode = new AncestryBuilder(modulePath).parent(YAMLMap).get();
+  declaredCollections.push(...getDeclaredCollectionsForMap(taskParamsNode));
+
   let path: Node[] | null = new AncestryBuilder(modulePath)
     .parent(YAMLMap)
     .getPath();
@@ -244,16 +250,24 @@ export function getDeclaredCollections(modulePath: Node[] | null): string[] {
     const builder = new AncestryBuilder(path).parent(YAMLSeq).parent(YAMLMap);
     const key = builder.getStringKey();
     if (key && /^block|rescue|always$/.test(key)) {
+      declaredCollections.push(...getDeclaredCollectionsForMap(builder.get()));
       path = builder.getPath();
     } else {
       break;
     }
   }
   // now we should be at the tasks/pre_tasks/post_tasks level
-  const playNode = new AncestryBuilder(path)
+  const playParamsNode = new AncestryBuilder(path)
     .parent(YAMLSeq)
     .parent(YAMLMap)
     .get();
+  declaredCollections.push(...getDeclaredCollectionsForMap(playParamsNode));
+
+  return [...new Set(declaredCollections)]; // deduplicate
+}
+
+function getDeclaredCollectionsForMap(playNode: YAMLMap | null): string[] {
+  const declaredCollections: string[] = [];
   const collectionsPair = _.find(
     playNode?.items,
     (pair) => pair.key instanceof Scalar && pair.key.value === 'collections'
@@ -270,7 +284,6 @@ export function getDeclaredCollections(modulePath: Node[] | null): string[] {
       }
     }
   }
-
   return declaredCollections;
 }
 

From 06241d7a2358aa0620cad27f01ef0a9cfd451167 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Sun, 30 May 2021 12:38:53 +0200
Subject: [PATCH 046/558] Updated dependencies

---
 client/package-lock.json           |  18 +-
 client/package.json                |   4 +-
 package-lock.json                  | 566 +++++++++++++++--------------
 package.json                       |  32 +-
 server/package-lock.json           |  66 ++--
 server/package.json                |  24 +-
 server/src/services/ansibleLint.ts |   2 +-
 7 files changed, 372 insertions(+), 340 deletions(-)

diff --git a/client/package-lock.json b/client/package-lock.json
index 76c3fdcc0..2ef984af9 100644
--- a/client/package-lock.json
+++ b/client/package-lock.json
@@ -11,9 +11,9 @@
       "dev": true
     },
     "@types/vscode": {
-      "version": "1.53.0",
-      "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.53.0.tgz",
-      "integrity": "sha512-XjFWbSPOM0EKIT2XhhYm3D3cx3nn3lshMUcWNy1eqefk+oqRuBq8unVb6BYIZqXy9lQZyeUl7eaBCOZWv+LcXQ==",
+      "version": "1.56.0",
+      "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz",
+      "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==",
       "dev": true
     },
     "agent-base": {
@@ -141,9 +141,9 @@
       }
     },
     "glob": {
-      "version": "7.1.6",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-      "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+      "version": "7.1.7",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+      "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
       "dev": true,
       "requires": {
         "fs.realpath": "^1.0.0",
@@ -380,9 +380,9 @@
       "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA=="
     },
     "vscode-test": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.1.tgz",
-      "integrity": "sha512-tDloz6euDne+GeUSglhufL0c2xhuYAPAT74hjsuGxfflALfXF9bYnJ7ehZEeVkr/ZnQEh/T8EBrfPL+m0h5qEQ==",
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.2.tgz",
+      "integrity": "sha512-x9PVfKxF6EInH9iSFGQi0V8H5zIW1fC7RAer6yNQR6sy3WyOwlWkuT3I+wf75xW/cO53hxMi1aj/EvqQfDFOAg==",
       "dev": true,
       "requires": {
         "http-proxy-agent": "^4.0.1",
diff --git a/client/package.json b/client/package.json
index ead775cc4..413666f4e 100644
--- a/client/package.json
+++ b/client/package.json
@@ -17,7 +17,7 @@
     "vscode-languageclient": "^7.0.0"
   },
   "devDependencies": {
-    "@types/vscode": "^1.53.0",
-    "vscode-test": "^1.3.0"
+    "@types/vscode": "^1.56.0",
+    "vscode-test": "^1.5.2"
   }
 }
diff --git a/package-lock.json b/package-lock.json
index b94358e65..55a17ab1c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,18 +14,18 @@
             }
         },
         "@babel/helper-validator-identifier": {
-            "version": "7.12.11",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
-            "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
+            "version": "7.14.0",
+            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz",
+            "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==",
             "dev": true
         },
         "@babel/highlight": {
-            "version": "7.13.8",
-            "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.8.tgz",
-            "integrity": "sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==",
+            "version": "7.14.0",
+            "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz",
+            "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==",
             "dev": true,
             "requires": {
-                "@babel/helper-validator-identifier": "^7.12.11",
+                "@babel/helper-validator-identifier": "^7.14.0",
                 "chalk": "^2.0.0",
                 "js-tokens": "^4.0.0"
             },
@@ -40,19 +40,25 @@
                         "escape-string-regexp": "^1.0.5",
                         "supports-color": "^5.3.0"
                     }
+                },
+                "escape-string-regexp": {
+                    "version": "1.0.5",
+                    "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+                    "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+                    "dev": true
                 }
             }
         },
         "@discoveryjs/json-ext": {
-            "version": "0.5.2",
-            "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz",
-            "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==",
+            "version": "0.5.3",
+            "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz",
+            "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==",
             "dev": true
         },
         "@eslint/eslintrc": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz",
-            "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==",
+            "version": "0.4.1",
+            "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz",
+            "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==",
             "dev": true,
             "requires": {
                 "ajv": "^6.12.4",
@@ -62,11 +68,19 @@
                 "ignore": "^4.0.6",
                 "import-fresh": "^3.2.1",
                 "js-yaml": "^3.13.1",
-                "lodash": "^4.17.20",
                 "minimatch": "^3.0.4",
                 "strip-json-comments": "^3.1.1"
             },
             "dependencies": {
+                "globals": {
+                    "version": "12.4.0",
+                    "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
+                    "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+                    "dev": true,
+                    "requires": {
+                        "type-fest": "^0.8.1"
+                    }
+                },
                 "ignore": {
                     "version": "4.0.6",
                     "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@@ -76,9 +90,9 @@
             }
         },
         "@flatten-js/interval-tree": {
-            "version": "1.0.13",
-            "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.13.tgz",
-            "integrity": "sha512-5thHHdUZIRdPdEPx6G9tY6mHFMGoXsq9/ivemRszDcEkERXqlZAv+7NozaFbAUOvKXxyWoccSnLyjK0c5UWJeQ=="
+            "version": "1.0.14",
+            "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz",
+            "integrity": "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg=="
         },
         "@nodelib/fs.scandir": {
             "version": "2.1.4",
@@ -107,15 +121,15 @@
             }
         },
         "@types/chai": {
-            "version": "4.2.15",
-            "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.15.tgz",
-            "integrity": "sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ==",
+            "version": "4.2.18",
+            "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.18.tgz",
+            "integrity": "sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ==",
             "dev": true
         },
         "@types/eslint": {
-            "version": "7.2.8",
-            "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.8.tgz",
-            "integrity": "sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ==",
+            "version": "7.2.12",
+            "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.12.tgz",
+            "integrity": "sha512-HjikV/jX6e0Pg4DcB+rtOBKSrG6w5IaxWpmi3efL/eLxMz5lZTK+W1DKERrX5a+mNzL78axfsDNXu7JHFP4uLg==",
             "dev": true,
             "requires": {
                 "@types/estree": "*",
@@ -133,9 +147,9 @@
             }
         },
         "@types/estree": {
-            "version": "0.0.46",
-            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz",
-            "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==",
+            "version": "0.0.47",
+            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz",
+            "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==",
             "dev": true
         },
         "@types/json-schema": {
@@ -145,31 +159,31 @@
             "dev": true
         },
         "@types/mocha": {
-            "version": "8.2.1",
-            "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.1.tgz",
-            "integrity": "sha512-NysN+bNqj6E0Hv4CTGWSlPzMW6vTKjDpOteycDkV4IWBsO+PU48JonrPzV9ODjiI2XrjmA05KInLgF5ivZ/YGQ==",
+            "version": "8.2.2",
+            "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz",
+            "integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==",
             "dev": true
         },
         "@types/node": {
-            "version": "14.14.31",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz",
-            "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==",
+            "version": "14.17.1",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.1.tgz",
+            "integrity": "sha512-/tpUyFD7meeooTRwl3sYlihx2BrJE7q9XF71EguPFIySj9B7qgnRtHsHTho+0AUm4m1SvWGm6uSncrR94q6Vtw==",
             "dev": true
         },
         "@types/vscode": {
-            "version": "1.53.0",
-            "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.53.0.tgz",
-            "integrity": "sha512-XjFWbSPOM0EKIT2XhhYm3D3cx3nn3lshMUcWNy1eqefk+oqRuBq8unVb6BYIZqXy9lQZyeUl7eaBCOZWv+LcXQ==",
+            "version": "1.56.0",
+            "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz",
+            "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==",
             "dev": true
         },
         "@typescript-eslint/eslint-plugin": {
-            "version": "4.15.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz",
-            "integrity": "sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q==",
+            "version": "4.25.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.25.0.tgz",
+            "integrity": "sha512-Qfs3dWkTMKkKwt78xp2O/KZQB8MPS1UQ5D3YW2s6LQWBE1074BE+Rym+b1pXZIX3M3fSvPUDaCvZLKV2ylVYYQ==",
             "dev": true,
             "requires": {
-                "@typescript-eslint/experimental-utils": "4.15.2",
-                "@typescript-eslint/scope-manager": "4.15.2",
+                "@typescript-eslint/experimental-utils": "4.25.0",
+                "@typescript-eslint/scope-manager": "4.25.0",
                 "debug": "^4.1.1",
                 "functional-red-black-tree": "^1.0.1",
                 "lodash": "^4.17.15",
@@ -179,55 +193,55 @@
             }
         },
         "@typescript-eslint/experimental-utils": {
-            "version": "4.15.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz",
-            "integrity": "sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ==",
+            "version": "4.25.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.25.0.tgz",
+            "integrity": "sha512-f0doRE76vq7NEEU0tw+ajv6CrmPelw5wLoaghEHkA2dNLFb3T/zJQqGPQ0OYt5XlZaS13MtnN+GTPCuUVg338w==",
             "dev": true,
             "requires": {
                 "@types/json-schema": "^7.0.3",
-                "@typescript-eslint/scope-manager": "4.15.2",
-                "@typescript-eslint/types": "4.15.2",
-                "@typescript-eslint/typescript-estree": "4.15.2",
+                "@typescript-eslint/scope-manager": "4.25.0",
+                "@typescript-eslint/types": "4.25.0",
+                "@typescript-eslint/typescript-estree": "4.25.0",
                 "eslint-scope": "^5.0.0",
                 "eslint-utils": "^2.0.0"
             }
         },
         "@typescript-eslint/parser": {
-            "version": "4.15.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.2.tgz",
-            "integrity": "sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q==",
+            "version": "4.25.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.25.0.tgz",
+            "integrity": "sha512-OZFa1SKyEJpAhDx8FcbWyX+vLwh7OEtzoo2iQaeWwxucyfbi0mT4DijbOSsTgPKzGHr6GrF2V5p/CEpUH/VBxg==",
             "dev": true,
             "requires": {
-                "@typescript-eslint/scope-manager": "4.15.2",
-                "@typescript-eslint/types": "4.15.2",
-                "@typescript-eslint/typescript-estree": "4.15.2",
+                "@typescript-eslint/scope-manager": "4.25.0",
+                "@typescript-eslint/types": "4.25.0",
+                "@typescript-eslint/typescript-estree": "4.25.0",
                 "debug": "^4.1.1"
             }
         },
         "@typescript-eslint/scope-manager": {
-            "version": "4.15.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz",
-            "integrity": "sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ==",
+            "version": "4.25.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.25.0.tgz",
+            "integrity": "sha512-2NElKxMb/0rya+NJG1U71BuNnp1TBd1JgzYsldsdA83h/20Tvnf/HrwhiSlNmuq6Vqa0EzidsvkTArwoq+tH6w==",
             "dev": true,
             "requires": {
-                "@typescript-eslint/types": "4.15.2",
-                "@typescript-eslint/visitor-keys": "4.15.2"
+                "@typescript-eslint/types": "4.25.0",
+                "@typescript-eslint/visitor-keys": "4.25.0"
             }
         },
         "@typescript-eslint/types": {
-            "version": "4.15.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.2.tgz",
-            "integrity": "sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ==",
+            "version": "4.25.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.25.0.tgz",
+            "integrity": "sha512-+CNINNvl00OkW6wEsi32wU5MhHti2J25TJsJJqgQmJu3B3dYDBcmOxcE5w9cgoM13TrdE/5ND2HoEnBohasxRQ==",
             "dev": true
         },
         "@typescript-eslint/typescript-estree": {
-            "version": "4.15.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz",
-            "integrity": "sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw==",
+            "version": "4.25.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.25.0.tgz",
+            "integrity": "sha512-1B8U07TGNAFMxZbSpF6jqiDs1cVGO0izVkf18Q/SPcUAc9LhHxzvSowXDTvkHMWUVuPpagupaW63gB6ahTXVlg==",
             "dev": true,
             "requires": {
-                "@typescript-eslint/types": "4.15.2",
-                "@typescript-eslint/visitor-keys": "4.15.2",
+                "@typescript-eslint/types": "4.25.0",
+                "@typescript-eslint/visitor-keys": "4.25.0",
                 "debug": "^4.1.1",
                 "globby": "^11.0.1",
                 "is-glob": "^4.0.1",
@@ -236,12 +250,12 @@
             }
         },
         "@typescript-eslint/visitor-keys": {
-            "version": "4.15.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz",
-            "integrity": "sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg==",
+            "version": "4.25.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.25.0.tgz",
+            "integrity": "sha512-AmkqV9dDJVKP/TcZrbf6s6i1zYXt5Hl8qOLrRDTFfRNae4+LB8A4N3i+FLZPW85zIxRy39BgeWOfMS3HoH5ngg==",
             "dev": true,
             "requires": {
-                "@typescript-eslint/types": "4.15.2",
+                "@typescript-eslint/types": "4.25.0",
                 "eslint-visitor-keys": "^2.0.0"
             }
         },
@@ -398,24 +412,24 @@
             }
         },
         "@webpack-cli/configtest": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz",
-            "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==",
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz",
+            "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==",
             "dev": true
         },
         "@webpack-cli/info": {
-            "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz",
-            "integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==",
+            "version": "1.2.4",
+            "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz",
+            "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==",
             "dev": true,
             "requires": {
                 "envinfo": "^7.7.3"
             }
         },
         "@webpack-cli/serve": {
-            "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz",
-            "integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==",
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz",
+            "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==",
             "dev": true
         },
         "@xtuc/ieee754": {
@@ -482,9 +496,9 @@
             }
         },
         "anymatch": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
-            "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+            "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
             "dev": true,
             "requires": {
                 "normalize-path": "^3.0.0",
@@ -568,16 +582,16 @@
             "dev": true
         },
         "browserslist": {
-            "version": "4.16.3",
-            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
-            "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
+            "version": "4.16.6",
+            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
+            "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
             "dev": true,
             "requires": {
-                "caniuse-lite": "^1.0.30001181",
-                "colorette": "^1.2.1",
-                "electron-to-chromium": "^1.3.649",
+                "caniuse-lite": "^1.0.30001219",
+                "colorette": "^1.2.2",
+                "electron-to-chromium": "^1.3.723",
                 "escalade": "^3.1.1",
-                "node-releases": "^1.1.70"
+                "node-releases": "^1.1.71"
             }
         },
         "buffer-from": {
@@ -599,15 +613,15 @@
             "dev": true
         },
         "caniuse-lite": {
-            "version": "1.0.30001205",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001205.tgz",
-            "integrity": "sha512-TL1GrS5V6LElbitPazidkBMD9sa448bQDDLrumDqaggmKFcuU2JW1wTOHJPukAcOMtEmLcmDJEzfRrf+GjM0Og==",
+            "version": "1.0.30001230",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz",
+            "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==",
             "dev": true
         },
         "chai": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.1.tgz",
-            "integrity": "sha512-JClPZFGRcSl7X8dYzlCJY7v+X1fBA+9Y339Y8EqhBVfp0QC1hTnaf7nMfR+XZ74clkBC64b0iEw2cWKHt3EVqA==",
+            "version": "4.3.4",
+            "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
+            "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
             "dev": true,
             "requires": {
                 "assertion-error": "^1.1.0",
@@ -619,9 +633,9 @@
             }
         },
         "chalk": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
-            "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+            "version": "4.1.1",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+            "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
             "dev": true,
             "requires": {
                 "ansi-styles": "^4.1.0",
@@ -692,13 +706,10 @@
             }
         },
         "chrome-trace-event": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
-            "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
-            "dev": true,
-            "requires": {
-                "tslib": "^1.9.0"
-            }
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+            "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+            "dev": true
         },
         "cliui": {
             "version": "7.0.4",
@@ -833,9 +844,9 @@
             }
         },
         "electron-to-chromium": {
-            "version": "1.3.703",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.703.tgz",
-            "integrity": "sha512-SVBVhNB+4zPL+rvtWLw7PZQkw/Eqj1HQZs22xtcqW36+xoifzEOEEDEpkxSMfB6RFeSIOcG00w6z5mSqLr1Y6w==",
+            "version": "1.3.742",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz",
+            "integrity": "sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q==",
             "dev": true
         },
         "emoji-regex": {
@@ -851,13 +862,14 @@
             "dev": true
         },
         "enhanced-resolve": {
-            "version": "5.7.0",
-            "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz",
-            "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==",
+            "version": "4.5.0",
+            "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
+            "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
             "dev": true,
             "requires": {
-                "graceful-fs": "^4.2.4",
-                "tapable": "^2.2.0"
+                "graceful-fs": "^4.1.2",
+                "memory-fs": "^0.5.0",
+                "tapable": "^1.0.0"
             }
         },
         "enquirer": {
@@ -870,9 +882,9 @@
             }
         },
         "envinfo": {
-            "version": "7.7.4",
-            "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz",
-            "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==",
+            "version": "7.8.1",
+            "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
+            "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
             "dev": true
         },
         "errno": {
@@ -897,35 +909,37 @@
             "dev": true
         },
         "escape-string-regexp": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-            "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+            "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
             "dev": true
         },
         "eslint": {
-            "version": "7.20.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz",
-            "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==",
+            "version": "7.27.0",
+            "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz",
+            "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==",
             "dev": true,
             "requires": {
                 "@babel/code-frame": "7.12.11",
-                "@eslint/eslintrc": "^0.3.0",
+                "@eslint/eslintrc": "^0.4.1",
                 "ajv": "^6.10.0",
                 "chalk": "^4.0.0",
                 "cross-spawn": "^7.0.2",
                 "debug": "^4.0.1",
                 "doctrine": "^3.0.0",
                 "enquirer": "^2.3.5",
+                "escape-string-regexp": "^4.0.0",
                 "eslint-scope": "^5.1.1",
                 "eslint-utils": "^2.1.0",
                 "eslint-visitor-keys": "^2.0.0",
                 "espree": "^7.3.1",
                 "esquery": "^1.4.0",
                 "esutils": "^2.0.2",
-                "file-entry-cache": "^6.0.0",
+                "fast-deep-equal": "^3.1.3",
+                "file-entry-cache": "^6.0.1",
                 "functional-red-black-tree": "^1.0.1",
                 "glob-parent": "^5.0.0",
-                "globals": "^12.1.0",
+                "globals": "^13.6.0",
                 "ignore": "^4.0.6",
                 "import-fresh": "^3.0.0",
                 "imurmurhash": "^0.1.4",
@@ -933,7 +947,7 @@
                 "js-yaml": "^3.13.1",
                 "json-stable-stringify-without-jsonify": "^1.0.1",
                 "levn": "^0.4.1",
-                "lodash": "^4.17.20",
+                "lodash.merge": "^4.6.2",
                 "minimatch": "^3.0.4",
                 "natural-compare": "^1.4.0",
                 "optionator": "^0.9.1",
@@ -942,7 +956,7 @@
                 "semver": "^7.2.1",
                 "strip-ansi": "^6.0.0",
                 "strip-json-comments": "^3.1.0",
-                "table": "^6.0.4",
+                "table": "^6.0.9",
                 "text-table": "^0.2.0",
                 "v8-compile-cache": "^2.0.3"
             },
@@ -956,9 +970,9 @@
             }
         },
         "eslint-config-prettier": {
-            "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz",
-            "integrity": "sha512-5EaAVPsIHu+grmm5WKjxUia4yHgRrbkd8I0ffqUSwixCPMVBrbS97UnzlEY/Q7OWo584vgixefM0kJnUfo/VjA==",
+            "version": "8.3.0",
+            "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
+            "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
             "dev": true
         },
         "eslint-scope": {
@@ -989,9 +1003,9 @@
             }
         },
         "eslint-visitor-keys": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
-            "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+            "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
             "dev": true
         },
         "espree": {
@@ -1223,9 +1237,9 @@
             "dev": true
         },
         "get-stream": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz",
-            "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==",
+            "version": "6.0.1",
+            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+            "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
             "dev": true
         },
         "glob": {
@@ -1243,9 +1257,9 @@
             }
         },
         "glob-parent": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
-            "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
             "dev": true,
             "requires": {
                 "is-glob": "^4.0.1"
@@ -1258,18 +1272,26 @@
             "dev": true
         },
         "globals": {
-            "version": "12.4.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
-            "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+            "version": "13.9.0",
+            "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz",
+            "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==",
             "dev": true,
             "requires": {
-                "type-fest": "^0.8.1"
+                "type-fest": "^0.20.2"
+            },
+            "dependencies": {
+                "type-fest": {
+                    "version": "0.20.2",
+                    "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+                    "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+                    "dev": true
+                }
             }
         },
         "globby": {
-            "version": "11.0.2",
-            "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz",
-            "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==",
+            "version": "11.0.3",
+            "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz",
+            "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==",
             "dev": true,
             "requires": {
                 "array-union": "^2.1.0",
@@ -1383,9 +1405,9 @@
             }
         },
         "is-core-module": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
-            "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
+            "version": "2.4.0",
+            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz",
+            "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==",
             "dev": true,
             "requires": {
                 "has": "^1.0.3"
@@ -1576,6 +1598,24 @@
             "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
             "dev": true
         },
+        "lodash.clonedeep": {
+            "version": "4.5.0",
+            "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+            "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+            "dev": true
+        },
+        "lodash.merge": {
+            "version": "4.6.2",
+            "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+            "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+            "dev": true
+        },
+        "lodash.truncate": {
+            "version": "4.4.2",
+            "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+            "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
+            "dev": true
+        },
         "log-symbols": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
@@ -1632,28 +1672,28 @@
             "dev": true
         },
         "micromatch": {
-            "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-            "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+            "version": "4.0.4",
+            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+            "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
             "dev": true,
             "requires": {
                 "braces": "^3.0.1",
-                "picomatch": "^2.0.5"
+                "picomatch": "^2.2.3"
             }
         },
         "mime-db": {
-            "version": "1.46.0",
-            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
-            "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
+            "version": "1.47.0",
+            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
+            "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==",
             "dev": true
         },
         "mime-types": {
-            "version": "2.1.29",
-            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
-            "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
+            "version": "2.1.30",
+            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
+            "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
             "dev": true,
             "requires": {
-                "mime-db": "1.46.0"
+                "mime-db": "1.47.0"
             }
         },
         "mimic-fn": {
@@ -1678,9 +1718,9 @@
             "dev": true
         },
         "mocha": {
-            "version": "8.3.0",
-            "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz",
-            "integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==",
+            "version": "8.4.0",
+            "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz",
+            "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==",
             "dev": true,
             "requires": {
                 "@ungap/promise-all-settled": "1.1.2",
@@ -1722,12 +1762,6 @@
                     "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
                     "dev": true
                 },
-                "escape-string-regexp": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-                    "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-                    "dev": true
-                },
                 "has-flag": {
                     "version": "4.0.0",
                     "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -1785,9 +1819,9 @@
             "dev": true
         },
         "node-releases": {
-            "version": "1.1.71",
-            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
-            "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==",
+            "version": "1.1.72",
+            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz",
+            "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==",
             "dev": true
         },
         "normalize-path": {
@@ -1889,9 +1923,9 @@
             "dev": true
         },
         "path-parse": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-            "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+            "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
             "dev": true
         },
         "path-type": {
@@ -1907,9 +1941,9 @@
             "dev": true
         },
         "picomatch": {
-            "version": "2.2.2",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
-            "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
+            "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
             "dev": true
         },
         "pkg-dir": {
@@ -1991,9 +2025,9 @@
             "dev": true
         },
         "queue-microtask": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz",
-            "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==",
+            "version": "1.2.3",
+            "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+            "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
             "dev": true
         },
         "randombytes": {
@@ -2139,9 +2173,9 @@
             }
         },
         "semver": {
-            "version": "7.3.4",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
-            "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+            "version": "7.3.5",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+            "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
             "dev": true,
             "requires": {
                 "lru-cache": "^6.0.0"
@@ -2258,9 +2292,9 @@
             "dev": true
         },
         "string-width": {
-            "version": "4.2.1",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
-            "integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
+            "version": "4.2.2",
+            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
+            "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
             "dev": true,
             "requires": {
                 "emoji-regex": "^8.0.0",
@@ -2316,21 +2350,23 @@
             }
         },
         "table": {
-            "version": "6.0.7",
-            "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz",
-            "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==",
+            "version": "6.7.1",
+            "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
+            "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==",
             "dev": true,
             "requires": {
-                "ajv": "^7.0.2",
-                "lodash": "^4.17.20",
+                "ajv": "^8.0.1",
+                "lodash.clonedeep": "^4.5.0",
+                "lodash.truncate": "^4.4.2",
                 "slice-ansi": "^4.0.0",
-                "string-width": "^4.2.0"
+                "string-width": "^4.2.0",
+                "strip-ansi": "^6.0.0"
             },
             "dependencies": {
                 "ajv": {
-                    "version": "7.1.1",
-                    "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz",
-                    "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==",
+                    "version": "8.5.0",
+                    "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz",
+                    "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==",
                     "dev": true,
                     "requires": {
                         "fast-deep-equal": "^3.1.1",
@@ -2348,15 +2384,15 @@
             }
         },
         "tapable": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
-            "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+            "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
             "dev": true
         },
         "terser": {
-            "version": "5.6.1",
-            "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz",
-            "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==",
+            "version": "5.7.0",
+            "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz",
+            "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==",
             "dev": true,
             "requires": {
                 "commander": "^2.20.0",
@@ -2373,9 +2409,9 @@
             }
         },
         "terser-webpack-plugin": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz",
-            "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==",
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz",
+            "integrity": "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==",
             "dev": true,
             "requires": {
                 "jest-worker": "^26.6.2",
@@ -2383,7 +2419,7 @@
                 "schema-utils": "^3.0.0",
                 "serialize-javascript": "^5.0.1",
                 "source-map": "^0.6.1",
-                "terser": "^5.5.1"
+                "terser": "^5.7.0"
             }
         },
         "text-table": {
@@ -2402,9 +2438,9 @@
             }
         },
         "ts-loader": {
-            "version": "8.1.0",
-            "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.1.0.tgz",
-            "integrity": "sha512-YiQipGGAFj2zBfqLhp28yUvPP9jUGqHxRzrGYuc82Z2wM27YIHbElXiaZDc93c3x0mz4zvBmS6q/DgExpdj37A==",
+            "version": "8.3.0",
+            "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz",
+            "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==",
             "dev": true,
             "requires": {
                 "chalk": "^4.1.0",
@@ -2412,25 +2448,6 @@
                 "loader-utils": "^2.0.0",
                 "micromatch": "^4.0.0",
                 "semver": "^7.3.4"
-            },
-            "dependencies": {
-                "enhanced-resolve": {
-                    "version": "4.5.0",
-                    "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
-                    "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "memory-fs": "^0.5.0",
-                        "tapable": "^1.0.0"
-                    }
-                },
-                "tapable": {
-                    "version": "1.1.3",
-                    "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
-                    "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
-                    "dev": true
-                }
             }
         },
         "ts-node": {
@@ -2454,9 +2471,9 @@
             "dev": true
         },
         "tsutils": {
-            "version": "3.20.0",
-            "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz",
-            "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==",
+            "version": "3.21.0",
+            "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+            "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
             "dev": true,
             "requires": {
                 "tslib": "^1.8.1"
@@ -2484,9 +2501,9 @@
             "dev": true
         },
         "typescript": {
-            "version": "4.1.5",
-            "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz",
-            "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==",
+            "version": "4.3.2",
+            "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz",
+            "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==",
             "dev": true
         },
         "uri-js": {
@@ -2505,15 +2522,15 @@
             "dev": true
         },
         "v8-compile-cache": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
-            "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+            "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
             "dev": true
         },
         "watchpack": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
-            "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==",
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz",
+            "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==",
             "dev": true,
             "requires": {
                 "glob-to-regexp": "^0.4.1",
@@ -2521,22 +2538,22 @@
             }
         },
         "webpack": {
-            "version": "5.28.0",
-            "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz",
-            "integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==",
+            "version": "5.38.1",
+            "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz",
+            "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==",
             "dev": true,
             "requires": {
                 "@types/eslint-scope": "^3.7.0",
-                "@types/estree": "^0.0.46",
+                "@types/estree": "^0.0.47",
                 "@webassemblyjs/ast": "1.11.0",
                 "@webassemblyjs/wasm-edit": "1.11.0",
                 "@webassemblyjs/wasm-parser": "1.11.0",
-                "acorn": "^8.0.4",
+                "acorn": "^8.2.1",
                 "browserslist": "^4.14.5",
                 "chrome-trace-event": "^1.0.2",
-                "enhanced-resolve": "^5.7.0",
+                "enhanced-resolve": "^5.8.0",
                 "es-module-lexer": "^0.4.0",
-                "eslint-scope": "^5.1.1",
+                "eslint-scope": "5.1.1",
                 "events": "^3.2.0",
                 "glob-to-regexp": "^0.4.1",
                 "graceful-fs": "^4.2.4",
@@ -2547,31 +2564,46 @@
                 "schema-utils": "^3.0.0",
                 "tapable": "^2.1.1",
                 "terser-webpack-plugin": "^5.1.1",
-                "watchpack": "^2.0.0",
-                "webpack-sources": "^2.1.1"
+                "watchpack": "^2.2.0",
+                "webpack-sources": "^2.3.0"
             },
             "dependencies": {
                 "acorn": {
-                    "version": "8.1.0",
-                    "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz",
-                    "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==",
+                    "version": "8.2.4",
+                    "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz",
+                    "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==",
+                    "dev": true
+                },
+                "enhanced-resolve": {
+                    "version": "5.8.2",
+                    "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz",
+                    "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==",
+                    "dev": true,
+                    "requires": {
+                        "graceful-fs": "^4.2.4",
+                        "tapable": "^2.2.0"
+                    }
+                },
+                "tapable": {
+                    "version": "2.2.0",
+                    "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
+                    "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
                     "dev": true
                 }
             }
         },
         "webpack-cli": {
-            "version": "4.6.0",
-            "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz",
-            "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==",
+            "version": "4.7.0",
+            "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz",
+            "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==",
             "dev": true,
             "requires": {
                 "@discoveryjs/json-ext": "^0.5.0",
-                "@webpack-cli/configtest": "^1.0.2",
-                "@webpack-cli/info": "^1.2.3",
-                "@webpack-cli/serve": "^1.3.1",
+                "@webpack-cli/configtest": "^1.0.3",
+                "@webpack-cli/info": "^1.2.4",
+                "@webpack-cli/serve": "^1.4.0",
                 "colorette": "^1.2.1",
                 "commander": "^7.0.0",
-                "enquirer": "^2.3.6",
                 "execa": "^5.0.0",
                 "fastest-levenshtein": "^1.0.12",
                 "import-local": "^3.0.2",
@@ -2600,9 +2632,9 @@
             }
         },
         "webpack-sources": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz",
-            "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==",
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz",
+            "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==",
             "dev": true,
             "requires": {
                 "source-list-map": "^2.0.1",
@@ -2722,9 +2754,9 @@
             "dev": true
         },
         "y18n": {
-            "version": "5.0.5",
-            "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
-            "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
+            "version": "5.0.8",
+            "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+            "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
             "dev": true
         },
         "yallist": {
@@ -2734,9 +2766,9 @@
             "dev": true
         },
         "yaml": {
-            "version": "1.10.0",
-            "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
-            "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg=="
+            "version": "1.10.2",
+            "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+            "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
         },
         "yargs": {
             "version": "16.2.0",
diff --git a/package.json b/package.json
index 105388841..58d182d29 100644
--- a/package.json
+++ b/package.json
@@ -164,26 +164,26 @@
     "test-compile": "tsc -p ./"
   },
   "devDependencies": {
-    "@types/chai": "^4.2.15",
-    "@types/mocha": "^8.2.1",
-    "@types/node": "^14.14.31",
-    "@types/vscode": "^1.53.0",
-    "@typescript-eslint/eslint-plugin": "^4.15.2",
-    "@typescript-eslint/parser": "^4.15.2",
-    "chai": "^4.3.1",
-    "eslint": "^7.20.0",
-    "eslint-config-prettier": "^8.0.0",
+    "@types/chai": "^4.2.18",
+    "@types/mocha": "^8.2.2",
+    "@types/node": "^14.17.1",
+    "@types/vscode": "^1.56.0",
+    "@typescript-eslint/eslint-plugin": "^4.25.0",
+    "@typescript-eslint/parser": "^4.25.0",
+    "chai": "^4.3.4",
+    "eslint": "^7.27.0",
+    "eslint-config-prettier": "^8.3.0",
     "merge-options": "^3.0.4",
-    "mocha": "^8.3.0",
+    "mocha": "^8.4.0",
     "rimraf": "^3.0.2",
-    "ts-loader": "^8.1.0",
+    "ts-loader": "^8.3.0",
     "ts-node": "^9.1.1",
-    "typescript": "^4.1.5",
-    "webpack": "^5.28.0",
-    "webpack-cli": "^4.6.0"
+    "typescript": "^4.3.2",
+    "webpack": "^5.38.1",
+    "webpack-cli": "^4.7.0"
   },
   "dependencies": {
-    "yaml": "^1.10.0",
-    "@flatten-js/interval-tree": "^1.0.13"
+    "@flatten-js/interval-tree": "^1.0.14",
+    "yaml": "^1.10.2"
   }
 }
diff --git a/server/package-lock.json b/server/package-lock.json
index 496e9a219..f187f7e9d 100644
--- a/server/package-lock.json
+++ b/server/package-lock.json
@@ -5,9 +5,9 @@
   "requires": true,
   "dependencies": {
     "@flatten-js/interval-tree": {
-      "version": "1.0.13",
-      "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.13.tgz",
-      "integrity": "sha512-5thHHdUZIRdPdEPx6G9tY6mHFMGoXsq9/ivemRszDcEkERXqlZAv+7NozaFbAUOvKXxyWoccSnLyjK0c5UWJeQ=="
+      "version": "1.0.14",
+      "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz",
+      "integrity": "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg=="
     },
     "@nodelib/fs.scandir": {
       "version": "2.1.4",
@@ -33,9 +33,9 @@
       }
     },
     "@types/chai": {
-      "version": "4.2.15",
-      "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.15.tgz",
-      "integrity": "sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ==",
+      "version": "4.2.18",
+      "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.18.tgz",
+      "integrity": "sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ==",
       "dev": true
     },
     "@types/ini": {
@@ -45,15 +45,15 @@
       "dev": true
     },
     "@types/lodash": {
-      "version": "4.14.168",
-      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz",
-      "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==",
+      "version": "4.14.170",
+      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.170.tgz",
+      "integrity": "sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==",
       "dev": true
     },
     "@types/mocha": {
-      "version": "8.2.1",
-      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.1.tgz",
-      "integrity": "sha512-NysN+bNqj6E0Hv4CTGWSlPzMW6vTKjDpOteycDkV4IWBsO+PU48JonrPzV9ODjiI2XrjmA05KInLgF5ivZ/YGQ==",
+      "version": "8.2.2",
+      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz",
+      "integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==",
       "dev": true
     },
     "@ungap/promise-all-settled": {
@@ -84,9 +84,9 @@
       }
     },
     "anymatch": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
-      "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
       "dev": true,
       "requires": {
         "normalize-path": "^3.0.0",
@@ -117,9 +117,9 @@
       "dev": true
     },
     "balanced-match": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
       "dev": true
     },
     "binary-extensions": {
@@ -165,9 +165,9 @@
       "dev": true
     },
     "chai": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.1.tgz",
-      "integrity": "sha512-JClPZFGRcSl7X8dYzlCJY7v+X1fBA+9Y339Y8EqhBVfp0QC1hTnaf7nMfR+XZ74clkBC64b0iEw2cWKHt3EVqA==",
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
+      "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
       "dev": true,
       "requires": {
         "assertion-error": "^1.1.0",
@@ -179,9 +179,9 @@
       }
     },
     "chalk": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
-      "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+      "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
       "dev": true,
       "requires": {
         "ansi-styles": "^4.1.0",
@@ -613,9 +613,9 @@
       }
     },
     "mocha": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz",
-      "integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz",
+      "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==",
       "dev": true,
       "requires": {
         "@ungap/promise-all-settled": "1.1.2",
@@ -974,15 +974,15 @@
       "dev": true
     },
     "y18n": {
-      "version": "5.0.5",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
-      "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
+      "version": "5.0.8",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
       "dev": true
     },
     "yaml": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
-      "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg=="
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
     },
     "yargs": {
       "version": "16.2.0",
diff --git a/server/package.json b/server/package.json
index 5cd37cf77..7c3db49c6 100644
--- a/server/package.json
+++ b/server/package.json
@@ -17,21 +17,21 @@
     "test": "mocha -r ts-node/register 'src/test/**/*.ts'"
   },
   "devDependencies": {
-    "@types/lodash": "^4.14.108",
-    "chai": "^4.3.1",
-    "mocha": "^8.3.0",
-    "ts-node": "^9.1.1",
-    "@types/chai": "^4.2.15",
-    "@types/mocha": "^8.2.1",
-    "@types/ini": "^1.3.30"
+    "@types/chai": "^4.2.18",
+    "@types/ini": "^1.3.30",
+    "@types/lodash": "^4.14.170",
+    "@types/mocha": "^8.2.2",
+    "chai": "^4.3.4",
+    "mocha": "^8.4.0",
+    "ts-node": "^9.1.1"
   },
   "dependencies": {
+    "@flatten-js/interval-tree": "^1.0.14",
+    "globby": "^11.0.3",
+    "ini": "^1.3.8",
+    "lodash": "^4.17.21",
     "vscode-languageserver": "^7.0.0",
     "vscode-languageserver-textdocument": "^1.0.1",
-    "lodash": "^4.17.21",
-    "yaml": "^1.10.0",
-    "@flatten-js/interval-tree": "^1.0.13",
-    "ini": "^1.3.8",
-    "globby": "^11.0.3"
+    "yaml": "^1.10.2"
   }
 }
diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
index 8f3160846..16b75ad97 100644
--- a/server/src/services/ansibleLint.ts
+++ b/server/src/services/ansibleLint.ts
@@ -1,7 +1,7 @@
 import IntervalTree from '@flatten-js/interval-tree';
 import * as child_process from 'child_process';
 import { promises as fs } from 'fs';
-import { ExecException } from 'node:child_process';
+import { ExecException } from 'child_process';
 import { URL } from 'url';
 import * as path from 'path';
 import { promisify } from 'util';

From 1c3fd61bc1850ed7589792d1275a3e35924337e5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Sun, 30 May 2021 22:41:45 +0200
Subject: [PATCH 047/558] Reimplemented semantic token highlighting
 server-side. Added support for module parameters specified in 'args'. Renamed
 docsParser -> docsFinder.

---
 client/src/extension.ts                       |  28 +--
 client/src/semanticTokens.ts                  | 130 -----------
 server/src/ansibleLanguageService.ts          |  46 +++-
 server/src/providers/completionProvider.ts    | 161 +++++++------
 server/src/providers/hoverProvider.ts         |  68 +++---
 server/src/providers/semanticTokenProvider.ts | 217 ++++++++++++++++++
 .../services/{docsParser.ts => docsFinder.ts} |  12 +-
 server/src/services/docsLibrary.ts            |  11 +-
 server/src/utils/yaml.ts                      |  37 ++-
 9 files changed, 431 insertions(+), 279 deletions(-)
 delete mode 100644 client/src/semanticTokens.ts
 create mode 100644 server/src/providers/semanticTokenProvider.ts
 rename server/src/services/{docsParser.ts => docsFinder.ts} (96%)

diff --git a/client/src/extension.ts b/client/src/extension.ts
index b914ba170..187b66114 100644
--- a/client/src/extension.ts
+++ b/client/src/extension.ts
@@ -1,5 +1,5 @@
 import * as path from 'path';
-import { workspace, ExtensionContext, languages } from 'vscode';
+import { ExtensionContext } from 'vscode';
 
 import {
   LanguageClient,
@@ -7,21 +7,17 @@ import {
   ServerOptions,
   TransportKind,
 } from 'vscode-languageclient/node';
-import { DocumentSemanticTokensProvider, legend } from './semanticTokens';
 
 let client: LanguageClient;
 
 export function activate(context: ExtensionContext): void {
-  // The server is implemented in node
   const serverModule = context.asAbsolutePath(
     path.join('server', 'out', 'server.js')
   );
-  // The debug options for the server
-  // --inspect=6009: runs the server in Node's Inspector mode so VS Code can attach to the server for debugging
+
+  // server is run at port 6009 for debugging
   const debugOptions = { execArgv: ['--nolazy', '--inspect=6009'] };
 
-  // If the extension is launched in debug mode then the debug server options are used
-  // Otherwise the run options are used
   const serverOptions: ServerOptions = {
     run: { module: serverModule, transport: TransportKind.ipc },
     debug: {
@@ -31,17 +27,11 @@ export function activate(context: ExtensionContext): void {
     },
   };
 
-  // Options to control the language client
   const clientOptions: LanguageClientOptions = {
-    // Register the server for Ansible documents
+    // register the server for Ansible documents
     documentSelector: [{ scheme: 'file', language: 'ansible' }],
-    synchronize: {
-      // Notify the server about file changes to ansible.cfg files contained in the workspace
-      fileEvents: workspace.createFileSystemWatcher('**/ansible.cfg'),
-    },
   };
 
-  // Create the language client and start the client.
   client = new LanguageClient(
     'ansibleServer',
     'Ansible Server',
@@ -49,15 +39,7 @@ export function activate(context: ExtensionContext): void {
     clientOptions
   );
 
-  context.subscriptions.push(
-    languages.registerDocumentSemanticTokensProvider(
-      { language: 'ansible' },
-      new DocumentSemanticTokensProvider(),
-      legend
-    )
-  );
-
-  // Start the client. This will also launch the server
+  // start the client and the server
   client.start();
 }
 
diff --git a/client/src/semanticTokens.ts b/client/src/semanticTokens.ts
deleted file mode 100644
index bfd5549ba..000000000
--- a/client/src/semanticTokens.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-import { performance } from 'perf_hooks';
-import * as vscode from 'vscode';
-import { parseAllDocuments } from 'yaml';
-import { Node, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
-
-const keywords = new Set([
-  'action',
-  'always',
-  'any_errors_fatal',
-  'args',
-  'async',
-  'become',
-  'become_exe',
-  'become_flags',
-  'become_method',
-  'become_user',
-  'block',
-  'changed_when',
-  'check_mode',
-  'collections',
-  'connection',
-  'debugger',
-  'delay',
-  'delegate_facts',
-  'delegate_to',
-  'diff',
-  'environment',
-  'extended',
-  'fact_path',
-  'failed_when',
-  'force_handlers',
-  'gather_facts',
-  'gather_subset',
-  'gather_timeout',
-  'handlers',
-  'hosts',
-  'ignore_errors',
-  'ignore_unreachable',
-  'label',
-  'local_action',
-  'loop',
-  'loop_control',
-  'max_fail_percentage',
-  'module_defaults',
-  'name',
-  'no_log',
-  'notify',
-  'order',
-  'pause',
-  'poll',
-  'port',
-  'post_tasks',
-  'pre_tasks',
-  'register',
-  'remote_user',
-  'rescue',
-  'retries',
-  'roles',
-  'run_once',
-  'serial',
-  'strategy',
-  'tags',
-  'tasks',
-  'throttle',
-  'timeout',
-  'until',
-  'vars',
-  'vars_files',
-  'vars_prompt',
-  'when',
-]);
-
-const withKeywords = /^with_[a-z_]+$/;
-
-const tokenTypes = ['method'];
-
-const tokenModifiers = ['defaultLibrary'];
-
-export const legend = new vscode.SemanticTokensLegend(
-  tokenTypes,
-  tokenModifiers
-);
-
-// Makes Ansible keyword tags distinct from other tags
-export class DocumentSemanticTokensProvider
-  implements vscode.DocumentSemanticTokensProvider {
-  async provideDocumentSemanticTokens(
-    document: vscode.TextDocument
-  ): Promise {
-    const builder = new vscode.SemanticTokensBuilder(legend);
-    const start = performance.now();
-    const yDocuments = parseAllDocuments(document.getText());
-    yDocuments.forEach((yDoc) => {
-      this._markKeywords(yDoc.contents, builder, document);
-    });
-    const stop = performance.now();
-    return builder.build();
-  }
-
-  private _markKeywords(
-    node: Node | null,
-    builder: vscode.SemanticTokensBuilder,
-    document: vscode.TextDocument,
-    context: Node[] = []
-  ) {
-    if (node instanceof YAMLMap) {
-      node.items.forEach((pair) => {
-        const key: Node | null = pair.key;
-        if (
-          key instanceof Scalar &&
-          (keywords.has(key.value) || withKeywords.test(key.value))
-        ) {
-          const parent = context[context.length - 1];
-          if (parent && parent instanceof YAMLSeq && key.range) {
-            const startPosition = document.positionAt(key.range[0]);
-            const length = key.range[1] - key.range[0];
-            const endPosition = startPosition.translate(0, length);
-            const range = new vscode.Range(startPosition, endPosition);
-            builder.push(range, 'method', ['defaultLibrary']);
-          }
-        }
-        this._markKeywords(pair.value, builder, document, context.concat(node));
-      });
-    } else if (node instanceof YAMLSeq) {
-      node.items.forEach((item: Node | null) =>
-        this._markKeywords(item, builder, document, context.concat(node))
-      );
-    }
-  }
-}
diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index 4e7c45911..22c59a894 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -15,6 +15,11 @@ import {
 } from './providers/completionProvider';
 import { getDefinition } from './providers/definitionProvider';
 import { doHover } from './providers/hoverProvider';
+import {
+  doSemanticTokens,
+  tokenModifiers,
+  tokenTypes,
+} from './providers/semanticTokenProvider';
 import { doValidate } from './providers/validationProvider';
 import { WorkspaceManager } from './services/workspaceManager';
 
@@ -51,6 +56,18 @@ export class AnsibleLanguageService {
       const result: InitializeResult = {
         capabilities: {
           textDocumentSync: TextDocumentSyncKind.Incremental,
+          semanticTokensProvider: {
+            documentSelector: [
+              {
+                language: 'ansible',
+              },
+            ],
+            full: true,
+            legend: {
+              tokenTypes: tokenTypes,
+              tokenModifiers: tokenModifiers,
+            },
+          },
           hoverProvider: true,
           completionProvider: {
             resolveProvider: true,
@@ -92,13 +109,17 @@ export class AnsibleLanguageService {
       this.connection.client.register(DidChangeWatchedFilesNotification.type, {
         watchers: [
           {
-            // watch for documentMetadata
-            globPattern: '**/meta/main.{yml,yaml}',
+            // watch ansible configuration
+            globPattern: '**/ansible.cfg',
           },
           {
-            // watch for documentMetadata
+            // watch ansible-lint configuration
             globPattern: '**/.ansible-lint',
           },
+          {
+            // watch role meta-configuration
+            globPattern: '**/meta/main.{yml,yaml}',
+          },
         ],
       });
     });
@@ -202,6 +223,25 @@ export class AnsibleLanguageService {
       }
     });
 
+    this.connection.languages.semanticTokens.on(async (params) => {
+      try {
+        const document = this.documents.get(params.textDocument.uri);
+        if (document) {
+          const context = this.workspaceManager.getContext(
+            params.textDocument.uri
+          );
+          if (context) {
+            return await doSemanticTokens(document, await context.docsLibrary);
+          }
+        }
+      } catch (error) {
+        this.handleError(error, 'onSemanticTokens');
+      }
+      return {
+        data: [],
+      };
+    });
+
     this.connection.onHover(async (params) => {
       try {
         const document = this.documents.get(params.textDocument.uri);
diff --git a/server/src/providers/completionProvider.ts b/server/src/providers/completionProvider.ts
index 753f58852..ff4ee7513 100644
--- a/server/src/providers/completionProvider.ts
+++ b/server/src/providers/completionProvider.ts
@@ -10,7 +10,6 @@ import { IOption } from '../services/docsLibrary';
 import { WorkspaceFolderContext } from '../services/workspaceManager';
 import {
   blockKeywords,
-  isTaskKeyword,
   playKeywords,
   roleKeywords,
   taskKeywords,
@@ -19,6 +18,7 @@ import { formatModule, formatOption, getDetails } from '../utils/docsFormatter';
 import { insert } from '../utils/misc';
 import {
   AncestryBuilder,
+  findProvidedModule,
   getDeclaredCollections,
   getPathAt,
   getYamlMapKeys,
@@ -71,28 +71,10 @@ export async function doCompletion(
           taskKeywords
         );
 
-        const taskParameterMap = new AncestryBuilder(path)
-          .parent(YAMLMap)
-          .get() as YAMLMap;
-
-        // find task parameters that have been already provided by the user
-        const providedParameters = new Set(getYamlMapKeys(taskParameterMap));
-        // should usually be 0 or 1
-        const providedModuleNames = [...providedParameters].filter(
-          (x) => !x || !isTaskKeyword(x)
-        );
-
-        // check if the module has already been provided
-        let moduleAlreadyProvided = false;
-        for (const m of providedModuleNames) {
-          // incidentally, the hack mentioned above prevents finding a module in
-          // case the cursor is on it
-          if (await docsLibrary.findModule(m, path, document.uri)) {
-            moduleAlreadyProvided = true;
-            break;
-          }
-        }
-        if (!moduleAlreadyProvided) {
+        // incidentally, the hack mentioned above prevents finding a module in
+        // case the cursor is on it
+        const module = await findProvidedModule(path, document, docsLibrary);
+        if (!module) {
           const moduleCompletionItems = [...docsLibrary.moduleFqcns].map(
             (moduleFqcn) => {
               const [namespace, collection, name] = moduleFqcn.split('.');
@@ -119,74 +101,85 @@ export async function doCompletion(
 
       // Finally, check if we're looking for module options
       // In that case, the module name is a key of a map
-      const modulePath = new AncestryBuilder(path)
+      const parentKeyPath = new AncestryBuilder(path)
         .parentOfKey()
         .parent(YAMLMap)
         .getKeyPath();
 
-      if (modulePath && isTaskParam(modulePath)) {
-        const moduleNode = modulePath[modulePath.length - 1] as Scalar;
-        const module = await docsLibrary.findModule(
-          moduleNode.value,
-          modulePath,
-          document.uri
-        );
-        if (module && module.documentation) {
-          const moduleOptions = module.documentation.options;
+      if (parentKeyPath && isTaskParam(parentKeyPath)) {
+        const parentKeyNode = parentKeyPath[parentKeyPath.length - 1];
+        if (parentKeyNode instanceof Scalar) {
+          let module;
+          if (parentKeyNode.value === 'args') {
+            module = await findProvidedModule(
+              parentKeyPath,
+              document,
+              docsLibrary
+            );
+          } else {
+            module = await docsLibrary.findModule(
+              parentKeyNode.value,
+              parentKeyPath,
+              document.uri
+            );
+          }
+          if (module && module.documentation) {
+            const moduleOptions = module.documentation.options;
 
-          const optionMap = (
-            new AncestryBuilder(modulePath).parent(Pair).get() as Pair
-          ).value as YAMLMap;
+            const optionMap = (
+              new AncestryBuilder(parentKeyPath).parent(Pair).get() as Pair
+            ).value as YAMLMap;
 
-          // find options that have been already provided by the user
-          const providedOptions = new Set(getYamlMapKeys(optionMap));
+            // find options that have been already provided by the user
+            const providedOptions = new Set(getYamlMapKeys(optionMap));
 
-          const remainingOptions = [...moduleOptions.entries()].filter(
-            ([, specs]) => !providedOptions.has(specs.name)
-          );
-          return remainingOptions
-            .map(([option, specs]) => {
-              return {
-                name: option,
-                specs: specs,
-              };
-            })
-            .sort((a, b) => {
-              // make required options appear on the top
-              if (a.specs.required && !b.specs.required) {
-                return -1;
-              } else if (!a.specs.required && b.specs.required) {
-                return 1;
-              } else {
-                return 0;
-              }
-            })
-            .sort((a, b) => {
-              // push all aliases to the bottom
-              if (isAlias(a) && !isAlias(b)) {
-                return 1;
-              } else if (!isAlias(a) && isAlias(b)) {
-                return -1;
-              } else {
-                return 0;
-              }
-            })
-            .map((option, index) => {
-              // translate option documentation to CompletionItem
-              const details = getDetails(option.specs);
-              return {
-                label: option.name,
-                detail: details,
-                sortText: index.toString().padStart(3),
-                kind: isAlias(option)
-                  ? CompletionItemKind.Reference
-                  : CompletionItemKind.Property,
-                documentation: formatOption(option.specs),
-                insertText: atEndOfLine(document, position)
-                  ? `${option.name}:`
-                  : undefined,
-              };
-            });
+            const remainingOptions = [...moduleOptions.entries()].filter(
+              ([, specs]) => !providedOptions.has(specs.name)
+            );
+            return remainingOptions
+              .map(([option, specs]) => {
+                return {
+                  name: option,
+                  specs: specs,
+                };
+              })
+              .sort((a, b) => {
+                // make required options appear on the top
+                if (a.specs.required && !b.specs.required) {
+                  return -1;
+                } else if (!a.specs.required && b.specs.required) {
+                  return 1;
+                } else {
+                  return 0;
+                }
+              })
+              .sort((a, b) => {
+                // push all aliases to the bottom
+                if (isAlias(a) && !isAlias(b)) {
+                  return 1;
+                } else if (!isAlias(a) && isAlias(b)) {
+                  return -1;
+                } else {
+                  return 0;
+                }
+              })
+              .map((option, index) => {
+                // translate option documentation to CompletionItem
+                const details = getDetails(option.specs);
+                return {
+                  label: option.name,
+                  detail: details,
+                  sortText: index.toString().padStart(3),
+                  kind: isAlias(option)
+                    ? CompletionItemKind.Reference
+                    : CompletionItemKind.Property,
+                  documentation: formatOption(option.specs),
+                  insertText: atEndOfLine(document, position)
+                    ? `${option.name}:`
+                    : undefined,
+                };
+              });
+          }
         }
       }
     }
diff --git a/server/src/providers/hoverProvider.ts b/server/src/providers/hoverProvider.ts
index d708b8b5e..b3f991dee 100644
--- a/server/src/providers/hoverProvider.ts
+++ b/server/src/providers/hoverProvider.ts
@@ -1,10 +1,11 @@
 import { Hover, MarkupContent, MarkupKind } from 'vscode-languageserver';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
-import { Node, Scalar, YAMLMap } from 'yaml/types';
+import { Scalar, YAMLMap } from 'yaml/types';
 import { DocsLibrary } from '../services/docsLibrary';
 import {
   blockKeywords,
+  isTaskKeyword,
   playKeywords,
   roleKeywords,
   taskKeywords,
@@ -13,6 +14,7 @@ import { formatModule, formatOption } from '../utils/docsFormatter';
 import { toLspRange } from '../utils/misc';
 import {
   AncestryBuilder,
+  findProvidedModule,
   getPathAt,
   isBlockParam,
   isPlayParam,
@@ -46,40 +48,54 @@ export async function doHover(
       }
 
       if (isTaskParam(path)) {
-        const module = await docsLibrary.findModule(
-          node.value,
-          path,
-          document.uri
-        );
-        if (module && module.documentation) {
-          return {
-            contents: formatModule(module.documentation),
-            range: node.range ? toLspRange(node.range, document) : undefined,
-          };
-        } else {
+        if (isTaskKeyword(node.value)) {
           return getKeywordHover(document, node, taskKeywords);
+        } else {
+          const module = await docsLibrary.findModule(
+            node.value,
+            path,
+            document.uri
+          );
+          if (module && module.documentation) {
+            return {
+              contents: formatModule(module.documentation),
+              range: node.range ? toLspRange(node.range, document) : undefined,
+            };
+          }
         }
       }
 
       // hovering over a module parameter
-      const modulePath = new AncestryBuilder(path)
+      // can either be directly under module or in 'args'
+      const parentKeyPath = new AncestryBuilder(path)
         .parentOfKey()
         .parent(YAMLMap)
         .getKeyPath();
 
-      if (modulePath && isTaskParam(modulePath)) {
-        const moduleNode = modulePath[modulePath.length - 1] as Scalar;
-        const module = await docsLibrary.findModule(
-          moduleNode.value,
-          modulePath,
-          document.uri
-        );
-        if (module && module.documentation) {
-          const option = module.documentation.options.get(node.value);
-          if (option) {
-            return {
-              contents: formatOption(option, true),
-            };
+      if (parentKeyPath && isTaskParam(parentKeyPath)) {
+        const parentKeyNode = parentKeyPath[parentKeyPath.length - 1];
+        if (parentKeyNode instanceof Scalar) {
+          let module;
+          if (parentKeyNode.value === 'args') {
+            module = await findProvidedModule(
+              parentKeyPath,
+              document,
+              docsLibrary
+            );
+          } else {
+            module = await docsLibrary.findModule(
+              parentKeyNode.value,
+              parentKeyPath,
+              document.uri
+            );
+          }
+          if (module && module.documentation) {
+            const option = module.documentation.options.get(node.value);
+            if (option) {
+              return {
+                contents: formatOption(option, true),
+              };
+            }
           }
         }
       }
diff --git a/server/src/providers/semanticTokenProvider.ts b/server/src/providers/semanticTokenProvider.ts
new file mode 100644
index 000000000..5cabf46b3
--- /dev/null
+++ b/server/src/providers/semanticTokenProvider.ts
@@ -0,0 +1,217 @@
+import {
+  SemanticTokenModifiers,
+  SemanticTokens,
+  SemanticTokensBuilder,
+  SemanticTokenTypes,
+} from 'vscode-languageserver';
+import { TextDocument } from 'vscode-languageserver-textdocument';
+import { parseAllDocuments } from 'yaml';
+import { Node, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
+import { DocsLibrary, IModuleMetadata } from '../services/docsLibrary';
+import {
+  blockKeywords,
+  isTaskKeyword,
+  playKeywords,
+  roleKeywords,
+} from '../utils/ansible';
+import {
+  findProvidedModule,
+  isBlockParam,
+  isPlayParam,
+  isRoleParam,
+  isTaskParam,
+} from '../utils/yaml';
+
+export const tokenTypes = [
+  SemanticTokenTypes.method,
+  SemanticTokenTypes.class,
+  SemanticTokenTypes.property,
+];
+
+const tokenTypesLegend = new Map(
+  tokenTypes.map((value, index) => [value, index])
+);
+
+export const tokenModifiers = [SemanticTokenModifiers.defaultLibrary];
+
+const tokenModifiersLegend = new Map(
+  tokenModifiers.map((value, index) => [value, index])
+);
+
+export async function doSemanticTokens(
+  document: TextDocument,
+  docsLibrary: DocsLibrary
+): Promise {
+  const builder = new SemanticTokensBuilder();
+  const yDocuments = parseAllDocuments(document.getText());
+  for (const yDoc of yDocuments) {
+    if (yDoc.contents) {
+      await markSemanticTokens([yDoc.contents], builder, document, docsLibrary);
+    }
+  }
+  return builder.build();
+}
+
+async function markSemanticTokens(
+  path: Node[],
+  builder: SemanticTokensBuilder,
+  document: TextDocument,
+  docsLibrary: DocsLibrary
+): Promise {
+  const node = path[path.length - 1];
+  if (node instanceof YAMLMap) {
+    for (const pair of node.items) {
+      if (pair.key instanceof Scalar) {
+        const keyPath = path.concat(pair, pair.key);
+        if (isPlayParam(keyPath) && playKeywords.has(pair.key.value)) {
+          markKeyword(pair.key, builder, document);
+        } else if (isBlockParam(keyPath) && blockKeywords.has(pair.key.value)) {
+          markKeyword(pair.key, builder, document);
+        } else if (isRoleParam(keyPath) && roleKeywords.has(pair.key.value)) {
+          markKeyword(pair.key, builder, document);
+        } else if (isTaskParam(keyPath)) {
+          if (isTaskKeyword(pair.key.value)) {
+            markKeyword(pair.key, builder, document);
+            if (pair.key.value === 'args') {
+              const module = await findProvidedModule(
+                path.concat(pair, pair.key),
+                document,
+                docsLibrary
+              );
+              if (module && pair.value instanceof YAMLMap) {
+                // highlight module parameters
+                markModuleParameters(pair.value, module, builder, document);
+              }
+            }
+          } else {
+            const module = await docsLibrary.findModule(
+              pair.key.value,
+              keyPath,
+              document.uri
+            );
+            if (module) {
+              // highlight module name
+              markNode(
+                pair.key,
+                SemanticTokenTypes.class,
+                [],
+                builder,
+                document
+              );
+              if (pair.value instanceof YAMLMap) {
+                // highlight module parameters
+                markModuleParameters(pair.value, module, builder, document);
+              }
+            }
+          }
+
+          // this pair has been completely processed
+          // tasks don't have any deeper structure
+          continue;
+        }
+      }
+
+      if (pair.value instanceof Node) {
+        await markSemanticTokens(
+          path.concat(pair, pair.value),
+          builder,
+          document,
+          docsLibrary
+        );
+      }
+    }
+  } else if (node instanceof YAMLSeq) {
+    for (const item of node.items) {
+      if (item instanceof Node) {
+        // the builder does not support out-of-order inserts yet, hence awaiting
+        // on each individual promise instead of using Promise.all
+        await markSemanticTokens(
+          path.concat(item),
+          builder,
+          document,
+          docsLibrary
+        );
+      }
+    }
+  }
+}
+
+function markModuleParameters(
+  moduleParamMap: YAMLMap,
+  module: IModuleMetadata,
+  builder: SemanticTokensBuilder,
+  document: TextDocument
+) {
+  for (const moduleParamPair of moduleParamMap.items) {
+    if (moduleParamPair.key instanceof Scalar) {
+      const option = module.documentation?.options.get(
+        moduleParamPair.key.value
+      );
+      if (option) {
+        markNode(
+          moduleParamPair.key,
+          SemanticTokenTypes.method,
+          [],
+          builder,
+          document
+        );
+      }
+    }
+  }
+}
+
+function markKeyword(
+  node: Scalar,
+  builder: SemanticTokensBuilder,
+  document: TextDocument
+) {
+  markNode(
+    node,
+    SemanticTokenTypes.method,
+    [SemanticTokenModifiers.defaultLibrary],
+    builder,
+    document
+  );
+}
+
+function markNode(
+  node: Scalar,
+  tokenType: SemanticTokenTypes,
+  tokenModifiers: SemanticTokenModifiers[],
+  builder: SemanticTokensBuilder,
+  document: TextDocument
+) {
+  if (node.range) {
+    const startPosition = document.positionAt(node.range[0]);
+    const length = node.range[1] - node.range[0];
+    builder.push(
+      startPosition.line,
+      startPosition.character,
+      length,
+      encodeTokenType(tokenType),
+      encodeTokenModifiers(tokenModifiers)
+    );
+  }
+}
+
+function encodeTokenType(tokenType: SemanticTokenTypes) {
+  const tokenTypeIndex = tokenTypesLegend.get(tokenType);
+  if (typeof tokenTypeIndex === 'undefined') {
+    throw new Error(`The ${tokenType} token type is not in legend`);
+  }
+  return tokenTypeIndex;
+}
+
+function encodeTokenModifiers(
+  tokenModifiers: SemanticTokenModifiers[]
+): number {
+  let encodedModifiers = 0;
+  for (const tokenModifier of tokenModifiers) {
+    const tokenModifierIndex = tokenModifiersLegend.get(tokenModifier);
+    if (typeof tokenModifierIndex === 'undefined') {
+      throw new Error(`The ${tokenModifier} token modifier is not in legend`);
+    }
+    encodedModifiers |= (1 << tokenModifierIndex) >>> 0;
+  }
+  return encodedModifiers;
+}
diff --git a/server/src/services/docsParser.ts b/server/src/services/docsFinder.ts
similarity index 96%
rename from server/src/services/docsParser.ts
rename to server/src/services/docsFinder.ts
index 1b8bdec8d..0a209cdea 100644
--- a/server/src/services/docsParser.ts
+++ b/server/src/services/docsFinder.ts
@@ -5,11 +5,8 @@ import { YAMLError } from 'yaml/util';
 import { IModuleMetadata } from './docsLibrary';
 import globby = require('globby');
 
-export class DocsParser {
-  public static docsRegex =
-    /(?
[ \t]*DOCUMENTATION\s*=\s*r?(?'''|""")(?:\n---)?\n?)(?.*?)\k/s;
-
-  public static async parseDirectory(
+export class DocsFinder {
+  public static async searchDirectory(
     dir: string,
     kind:
       | 'builtin'
@@ -70,6 +67,9 @@ export class DocsParser {
 }
 
 export class LazyModuleDocumentation implements IModuleMetadata {
+  public static docsRegex =
+    /(?
[ \t]*DOCUMENTATION\s*=\s*r?(?'''|""")(?:\n---)?\n?)(?.*?)\k/s;
+
   source: string;
   sourceLineRange: [number, number] = [0, 0];
   fqcn: string;
@@ -97,7 +97,7 @@ export class LazyModuleDocumentation implements IModuleMetadata {
   public get rawDocumentation(): Record {
     if (!this._contents) {
       const contents = fs.readFileSync(this.source, { encoding: 'utf8' });
-      const m = DocsParser.docsRegex.exec(contents);
+      const m = LazyModuleDocumentation.docsRegex.exec(contents);
       if (m && m.groups && m.groups.doc && m.groups.pre) {
         // determine documentation start/end lines for definition provider
         let startLine = contents.substr(0, m.index).match(/\n/g)?.length || 0;
diff --git a/server/src/services/docsLibrary.ts b/server/src/services/docsLibrary.ts
index 598d73761..5aac20f83 100644
--- a/server/src/services/docsLibrary.ts
+++ b/server/src/services/docsLibrary.ts
@@ -1,10 +1,9 @@
 import * as _ from 'lodash';
-import { TextDocument } from 'vscode-languageserver-textdocument';
 import { Node } from 'yaml/types';
 import { YAMLError } from 'yaml/util';
 import { hasOwnProperty, isObject } from '../utils/misc';
 import { getDeclaredCollections } from '../utils/yaml';
-import { DocsParser } from './docsParser';
+import { DocsFinder } from './docsFinder';
 import { WorkspaceFolderContext } from './workspaceManager';
 export class DocsLibrary {
   private modules = new Map();
@@ -19,27 +18,27 @@ export class DocsLibrary {
   public async initialize(): Promise {
     const ansibleConfig = await this.context.ansibleConfig;
     for (const modulesPath of ansibleConfig.module_locations) {
-      (await DocsParser.parseDirectory(modulesPath, 'builtin')).forEach(
+      (await DocsFinder.searchDirectory(modulesPath, 'builtin')).forEach(
         (doc) => {
           this.modules.set(doc.fqcn, doc);
           this.moduleFqcns.add(doc.fqcn);
         }
       );
       (
-        await DocsParser.parseDirectory(modulesPath, 'builtin_doc_fragment')
+        await DocsFinder.searchDirectory(modulesPath, 'builtin_doc_fragment')
       ).forEach((doc) => {
         this.docFragments.set(doc.fqcn, doc);
       });
     }
     for (const collectionsPath of ansibleConfig.collections_paths) {
-      (await DocsParser.parseDirectory(collectionsPath, 'collection')).forEach(
+      (await DocsFinder.searchDirectory(collectionsPath, 'collection')).forEach(
         (doc) => {
           this.modules.set(doc.fqcn, doc);
           this.moduleFqcns.add(doc.fqcn);
         }
       );
       (
-        await DocsParser.parseDirectory(
+        await DocsFinder.searchDirectory(
           collectionsPath,
           'collection_doc_fragment'
         )
diff --git a/server/src/utils/yaml.ts b/server/src/utils/yaml.ts
index e63dbceaf..9d9813b35 100644
--- a/server/src/utils/yaml.ts
+++ b/server/src/utils/yaml.ts
@@ -2,7 +2,8 @@ import * as _ from 'lodash';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { Document } from 'yaml';
 import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
-import { playExclusiveKeywords } from './ansible';
+import { DocsLibrary, IModuleMetadata } from '../services/docsLibrary';
+import { isTaskKeyword, playExclusiveKeywords } from './ansible';
 
 /**
  * A helper class used for building YAML path assertions and retrieving parent
@@ -344,6 +345,40 @@ export function isRoleParam(path: Node[]): boolean {
   return rolesKey === 'roles';
 }
 
+/**
+ * For a given Ansible task parameter path, find the module if it has been
+ * provided for the task.
+ */
+export async function findProvidedModule(
+  taskParamPath: Node[],
+  document: TextDocument,
+  docsLibrary: DocsLibrary
+): Promise {
+  const taskParameterMap = new AncestryBuilder(taskParamPath)
+    .parent(YAMLMap)
+    .get();
+  if (taskParameterMap) {
+    // find task parameters that have been provided by the user
+    const providedParameters = new Set(getYamlMapKeys(taskParameterMap));
+    // should usually be 0 or 1
+    const providedModuleNames = [...providedParameters].filter(
+      (x) => !x || !isTaskKeyword(x)
+    );
+
+    // find the module if it has been provided
+    for (const m of providedModuleNames) {
+      const module = await docsLibrary.findModule(
+        m,
+        taskParamPath,
+        document.uri
+      );
+      if (module) {
+        return module;
+      }
+    }
+  }
+}
+
 export function getYamlMapKeys(mapNode: YAMLMap): Array {
   return mapNode.items.map((pair) => {
     if (pair.key && pair.key instanceof Scalar) {

From 61470ddedad258d1c43f0f17a4dea30c8154991e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Sun, 30 May 2021 23:00:45 +0200
Subject: [PATCH 048/558] Fixed file URIs for AnsibleLint

---
 server/src/services/ansibleLint.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
index 16b75ad97..8e83a626b 100644
--- a/server/src/services/ansibleLint.ts
+++ b/server/src/services/ansibleLint.ts
@@ -194,7 +194,7 @@ export class AnsibleLint {
             }
           }
 
-          const locationUri = `${workingDirectory}/${item.location.path}`;
+          const locationUri = `file://${workingDirectory}/${item.location.path}`;
 
           let fileDiagnostics = diagnostics.get(locationUri);
           if (!fileDiagnostics) {

From 156371cca1a5d241583955d3455f68950bf9b7d5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Tue, 1 Jun 2021 00:31:24 +0200
Subject: [PATCH 049/558] Fixed keyword highlighting. Fixed unquoted string
 flow highlighting.

---
 client/package.json                           |   2 +-
 package.json                                  |   2 +-
 server/src/providers/semanticTokenProvider.ts |  10 +-
 .../generated/jinja-conditionals.tmLanguage   | 107 ++++++++++++++++--
 .../ansible/generated/keywords.tmLanguage     |  11 +-
 .../jinja-conditionals.tmLanguage.plist       |  76 +++++++++++--
 syntaxes/ansible/keywords.tmLanguage.plist    |   8 +-
 7 files changed, 176 insertions(+), 40 deletions(-)

diff --git a/client/package.json b/client/package.json
index 413666f4e..a159c6f9e 100644
--- a/client/package.json
+++ b/client/package.json
@@ -11,7 +11,7 @@
     "url": "https://github.com/tomaciazek/vscode-ansible.git"
   },
   "engines": {
-    "vscode": "^1.53.0"
+    "vscode": "^1.56.0"
   },
   "dependencies": {
     "vscode-languageclient": "^7.0.0"
diff --git a/package.json b/package.json
index 58d182d29..26e80ba31 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
     "url": "https://github.com/tomaciazek/vscode-ansible.git"
   },
   "engines": {
-    "vscode": "^1.53.0"
+    "vscode": "^1.56.0"
   },
   "categories": [
     "Programming Languages"
diff --git a/server/src/providers/semanticTokenProvider.ts b/server/src/providers/semanticTokenProvider.ts
index 5cabf46b3..bc0172989 100644
--- a/server/src/providers/semanticTokenProvider.ts
+++ b/server/src/providers/semanticTokenProvider.ts
@@ -25,7 +25,7 @@ import {
 export const tokenTypes = [
   SemanticTokenTypes.method,
   SemanticTokenTypes.class,
-  SemanticTokenTypes.property,
+  SemanticTokenTypes.keyword,
 ];
 
 const tokenTypesLegend = new Map(
@@ -165,13 +165,7 @@ function markKeyword(
   builder: SemanticTokensBuilder,
   document: TextDocument
 ) {
-  markNode(
-    node,
-    SemanticTokenTypes.method,
-    [SemanticTokenModifiers.defaultLibrary],
-    builder,
-    document
-  );
+  markNode(node, SemanticTokenTypes.keyword, [], builder, document);
 }
 
 function markNode(
diff --git a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage
index 09fdd2d79..25285399d 100644
--- a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage
+++ b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage
@@ -18,8 +18,8 @@
             Flow style collections are not supported (yet)
             Without additional contextual injections (which VSCode fortunately suports and that has been used in this extenion)
             proper YAML comment highlighting will not work in nested Jinja expressions. For example:
-                when: condition1 # this works
-                    or condition2
+                when: # this works
+                    condition1 or condition2
                 
                 when: (condition1 # this will not work
                     or condition2)
@@ -36,7 +36,7 @@
                 
                     
                         name
-                        meta.flow.ansible.condition
+                        meta.flow-unquoted.ansible.condition
                         begin
                         (?x)
                             ^(\s*) # 1
@@ -48,7 +48,7 @@
                                 | check_mode
                             )\b
                             \s* (:) # 5
-                            (\s (?!\s*[|>]|\s*$)) # not starting a block (scalar or other)
+                            (?=\s) (?!\s*[|>'"]|\s*$|\s*\#.*$) # starting an unquoted flow
                         
                         beginCaptures
                         
@@ -67,10 +67,55 @@
                                 name
                                 punctuation.separator.key-value.mapping.ansible
                             
-                            6
+                        
+                        end
+                        (?x)
+                            ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches
+                        
+                        patterns
+                        
+                            
+                                include
+                                source.ansible#comment
+                            
+                            
+                                include
+                                #yaml-unquoted-string
+                            
+                        
+                    
+                    
+                        name
+                        meta.flow.ansible.condition
+                        begin
+                        (?x)
+                            ^(\s*) # 1
+                            (?:(-)(\s+))? # 2, 3; in case it is first key of a list item
+                            \b( # 4
+                                changed_when
+                                | failed_when
+                                | when
+                                | check_mode
+                            )\b
+                            \s* (:) # 5
+                            (?=\s) (?!\s*[|>]|\s*$|\s*\#.*$) # not starting a block (scalar or other)
+                        
+                        beginCaptures
+                        
+                            2
                             
                                 name
-                                asdf
+                                punctuation.definition.block.sequence.item.ansible
+                            
+                            4
+                            
+                                name
+                                keyword.other.special-method.ansible
+                            
+                            5
+                            
+                                name
+                                punctuation.separator.key-value.mapping.ansible
                             
                         
                         end
@@ -194,7 +239,7 @@
                                 | check_mode
                             )\b
                             \s* (:) # 5
-                            \s*$ # starting other block
+                            (.*$) # comment or illegal
                         
                         beginCaptures
                         
@@ -213,6 +258,22 @@
                                 name
                                 punctuation.separator.key-value.mapping.ansible
                             
+                            6
+                            
+                                patterns
+                                
+                                    
+                                        include
+                                        source.ansible#comment
+                                    
+                                    
+                                        match
+                                        .+
+                                        name
+                                        invalid.illegal.expected-comment-or-newline.ansible
+                                    
+                                
+                            
                         
                         end
                         (?x)
@@ -266,6 +327,10 @@
                                 include
                                 #yaml-single-quoted-string
                             
+                            
+                                include
+                                #yaml-unquoted-string-block
+                            
                             
                                 include
                                 #yaml-unquoted-string
@@ -536,6 +601,34 @@
                     
                 
             
+            yaml-unquoted-string-block
+            
+                patterns
+                
+                    
+                        comment
+                        Capture any non-whitespace at the beginning of a block
+                        name
+                        string.unquoted-block.ansible
+                        begin
+                        (?x)
+                            ^(\s*) # 1
+                            (?=\S)
+                        end
+                        (?x)
+                            ^(?!\1\s*) # if the indentation is too small
+                        contentName
+                        variable.other.constant.ansible variable.language meta.embedded.inline.jinja
+                        patterns
+                        
+                            
+                                include
+                                source.ansible-jinja#expression
+                            
+                        
+                    
+                
+            
         
     
 
\ No newline at end of file
diff --git a/syntaxes/ansible/generated/keywords.tmLanguage b/syntaxes/ansible/generated/keywords.tmLanguage
index 429e43f84..bbfbec0bc 100644
--- a/syntaxes/ansible/generated/keywords.tmLanguage
+++ b/syntaxes/ansible/generated/keywords.tmLanguage
@@ -18,7 +18,7 @@
         
             
                 include
-                #ansible_tag
+                #keyword
             
         
         repository
@@ -26,7 +26,7 @@
             keyword
             
                 name
-                keyword.other.special-method.ansible
+                keyword.other.ansible
                 match
                 (?x)
                     \b(
@@ -42,13 +42,6 @@
                     )\b
                 
             
-            ansible_tag
-            
-                name
-                keyword.other.ansible
-                match
-                [\w.]+
-            
         
     
 
\ No newline at end of file
diff --git a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist
index e356adb7f..88a3f8ccd 100644
--- a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist
+++ b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist
@@ -8,8 +8,8 @@
         'Flow style collections are not supported (yet)',
         'Without additional contextual injections (which VSCode fortunately suports and that has been used in this extenion)
         proper YAML comment highlighting will not work in nested Jinja expressions. For example:
-            when: condition1 # this works
-                or condition2
+            when: # this works
+                condition1 or condition2
             
             when: (condition1 # this will not work
                 or condition2)
@@ -22,7 +22,7 @@
         ansible-condition = {
             patterns = (
                 {
-                    name = 'meta.flow.ansible.condition';
+                    name = 'meta.flow-unquoted.ansible.condition';
                     begin = '(?x)
                         ^(\s*) # 1
                         (?:(-)(\s+))? # 2, 3; in case it is first key of a list item
@@ -33,7 +33,7 @@
                             | check_mode
                         )\b
                         \s* (:) # 5
-                        (\s (?!\s*[|>]|\s*$)) # not starting a block (scalar or other)
+                        (?=\s) (?!\s*[|>''"]|\s*$|\s*\#.*$) # starting an unquoted flow
                     ';
                     beginCaptures = {
                         2 = {
@@ -45,8 +45,38 @@
                         5 = {
                             name = 'punctuation.separator.key-value.mapping.ansible';
                         };
-                        6 = {
-                            name = 'asdf';
+                    };
+                    end = '(?x)
+                        ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches
+                    ';
+                    patterns = (
+                        { include = 'source.ansible#comment'; },
+                        { include = '#yaml-unquoted-string'; }
+                    );
+                },
+                {
+                    name = 'meta.flow.ansible.condition';
+                    begin = '(?x)
+                        ^(\s*) # 1
+                        (?:(-)(\s+))? # 2, 3; in case it is first key of a list item
+                        \b( # 4
+                            changed_when
+                            | failed_when
+                            | when
+                            | check_mode
+                        )\b
+                        \s* (:) # 5
+                        (?=\s) (?!\s*[|>]|\s*$|\s*\#.*$) # not starting a block (scalar or other)
+                    ';
+                    beginCaptures = {
+                        2 = {
+                            name = 'punctuation.definition.block.sequence.item.ansible';
+                        };
+                        4 = {
+                            name = 'keyword.other.special-method.ansible';
+                        };
+                        5 = {
+                            name = 'punctuation.separator.key-value.mapping.ansible';
                         };
                     };
                     end = '(?x)
@@ -127,7 +157,7 @@
                             | check_mode
                         )\b
                         \s* (:) # 5
-                        \s*$ # starting other block
+                        (.*$) # comment or illegal
                     ';
                     beginCaptures = {
                         2 = {
@@ -139,6 +169,17 @@
                         5 = {
                             name = 'punctuation.separator.key-value.mapping.ansible';
                         };
+                        6 = {
+                            patterns = (
+                                {
+                                    include = 'source.ansible#comment';
+                                },
+                                {
+                                    match = '.+';
+                                    name = 'invalid.illegal.expected-comment-or-newline.ansible';
+                                }
+                            );
+                        };
                     };
                     end = '(?x)
                         ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches
@@ -168,6 +209,7 @@
                         { include = '#yaml-block-list-item'; },
                         { include = '#yaml-double-quoted-string'; },
                         { include = '#yaml-single-quoted-string'; },
+                        { include = '#yaml-unquoted-string-block'; },
                         { include = '#yaml-unquoted-string'; }
                     );
                 }
@@ -329,5 +371,23 @@
                 }
             );
         };
+
+        yaml-unquoted-string-block = {
+            patterns = (
+                {
+                    comment = 'Capture any non-whitespace at the beginning of a block';
+                    name = 'string.unquoted-block.ansible';
+                    begin = '(?x)
+                        ^(\s*) # 1
+                        (?=\S)';
+                    end = '(?x)
+                        ^(?!\1\s*) # if the indentation is too small';
+                    contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja';
+                    patterns = (
+                        { include = 'source.ansible-jinja#expression'; },
+                    );
+                }
+            );
+        };
     };
-}
\ No newline at end of file
+}
diff --git a/syntaxes/ansible/keywords.tmLanguage.plist b/syntaxes/ansible/keywords.tmLanguage.plist
index 6923eb9c8..968a638c6 100644
--- a/syntaxes/ansible/keywords.tmLanguage.plist
+++ b/syntaxes/ansible/keywords.tmLanguage.plist
@@ -8,11 +8,11 @@
         'Added `label`, `pause`, `loop_var`, `extended` as Ansible keywords (occur in loop_control)'
     );
     patterns = (
-        { include = '#ansible_tag'; }
+        { include = '#keyword'; }
     );
     repository = {
         keyword = {
-            name = 'keyword.other.special-method.ansible';
+            name = 'keyword.other.ansible';
             match = '(?x)
                 \b(
                     action | always | any_errors_fatal | args | async | become | become_exe | become_flags
@@ -27,9 +27,5 @@
                 )\b
             ';
         };
-        ansible_tag = {
-            name = 'keyword.other.ansible';
-            match = '[\w.]+';
-        };
     };
 }

From 3c2c656b3d0ee0ae358391e9e8d85def55844e48 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Tue, 1 Jun 2021 20:46:38 +0200
Subject: [PATCH 050/558] Implemented literal highlighting for Jinja Changed
 highlighting for Jinja content and braces.

---
 package.json                                  |  24 ++-
 syntaxes/ansible.tmLanguage.json              |  15 --
 syntaxes/ansible.tmLanguage.plist             | 185 ------------------
 .../ansible/generated/jinja-braces.tmLanguage |  22 ++-
 .../generated/jinja-conditionals.tmLanguage   |  21 +-
 .../ansible/generated/jinja-extras.tmLanguage |  63 ++++++
 .../generated/jinja-yaml-comments.tmLanguage  |  19 --
 .../ansible/jinja-braces.tmLanguage.plist     |  17 +-
 .../jinja-conditionals.tmLanguage.plist       |  23 +--
 .../ansible/jinja-extras.tmLanguage.plist     |  40 ++++
 .../jinja-yaml-comments.tmLanguage.plist      |   8 -
 syntaxes/injection.tmLanguage.plist           |  14 --
 12 files changed, 164 insertions(+), 287 deletions(-)
 delete mode 100644 syntaxes/ansible.tmLanguage.json
 delete mode 100644 syntaxes/ansible.tmLanguage.plist
 create mode 100644 syntaxes/ansible/generated/jinja-extras.tmLanguage
 delete mode 100644 syntaxes/ansible/generated/jinja-yaml-comments.tmLanguage
 create mode 100644 syntaxes/ansible/jinja-extras.tmLanguage.plist
 delete mode 100644 syntaxes/ansible/jinja-yaml-comments.tmLanguage.plist
 delete mode 100644 syntaxes/injection.tmLanguage.plist

diff --git a/package.json b/package.json
index 26e80ba31..cf1aae6f4 100644
--- a/package.json
+++ b/package.json
@@ -73,7 +73,7 @@
     "grammars": [
       {
         "comments": [
-          "YAML syntax as base for ansible",
+          "YAML syntax as base for Ansible",
           "scopeName changed so that we can use it as base for injections"
         ],
         "language": "ansible",
@@ -82,8 +82,8 @@
       },
       {
         "comments": [
-          "imported jinja syntax",
-          "this is so that we do not need to rely on Jinja extension being installed"
+          "Jinja syntax as injection into Ansible YAML",
+          "This is so that we do not need to rely on the Jinja extension being installed"
         ],
         "language": "ansible-jinja",
         "scopeName": "source.ansible-jinja",
@@ -91,7 +91,7 @@
       },
       {
         "comments": [
-          "changes highlighting of Ansible tags"
+          "Highlighting of Ansible keywords"
         ],
         "path": "./syntaxes/ansible/generated/keywords.tmLanguage",
         "scopeName": "injection.ansible.keywords",
@@ -99,6 +99,16 @@
           "source.ansible"
         ]
       },
+      {
+        "comments": [
+          "Additional Jinja grammars"
+        ],
+        "path": "./syntaxes/ansible/generated/jinja-extras.tmLanguage",
+        "scopeName": "injection.ansible.jinja-extras",
+        "injectTo": [
+          "source.ansible"
+        ]
+      },
       {
         "comments": [
           "Support for Jinja in double curly braces"
@@ -127,10 +137,7 @@
       },
       {
         "comments": [
-          "What follows are techniques that are basically abusing the injection system of VSCode.",
-          "These cannot be replicated in other IDEs with just TM grammars unless similar injection system is used.",
-          "The basic quote escapes (does not work inside brackets etc.) is implemented in the grammar anyway",
-          "if someone finds it useful.",
+          "The quote escapes implemented in the conditionals injection do not work inside brackets etc.",
           "Support for single quote escapes in Jinja"
         ],
         "path": "./syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage",
@@ -141,6 +148,7 @@
       },
       {
         "comments": [
+          "The quote escapes implemented in the conditionals injection do not work inside brackets etc.",
           "Support for double quote escapes in Jinja"
         ],
         "path": "./syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage",
diff --git a/syntaxes/ansible.tmLanguage.json b/syntaxes/ansible.tmLanguage.json
deleted file mode 100644
index af6b017db..000000000
--- a/syntaxes/ansible.tmLanguage.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-	"scopeName": "todo-comment.injection",
-	"injectionSelector": "L:comment.line.number-sign.yaml",
-	"patterns": [
-		{
-			"include": "#todo-keyword"
-		}
-	],
-	"repository": {
-		"todo-keyword": {
-			"match": "TODO",
-			"name": "keyword.todo"
-		}
-	}
-}
\ No newline at end of file
diff --git a/syntaxes/ansible.tmLanguage.plist b/syntaxes/ansible.tmLanguage.plist
deleted file mode 100644
index 8b4cb052e..000000000
--- a/syntaxes/ansible.tmLanguage.plist
+++ /dev/null
@@ -1,185 +0,0 @@
-{
-    '$schema' = 'https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json';
-    scopeName = 'source.tm-gplist';
-    name = 'TextMate Grammar Property List';
-    patterns = (
-        { include = '#dict'; }
-    );
-    repository = {
-        keyword = {
-            name = 'keyword.control.tm-gplist';
-            match = '(?x)
-                \b(
-                    scopeName
-                    | uuid
-                    | fileTypes
-                    | foldingStartMarker | foldingStopMarker
-                    | patterns
-                    | firstLineMatch
-                    | repository
-                    | name | contentName
-                    | match
-                    | begin | end | while
-                    | captures | beginCaptures | endCaptures
-                    | include 
-                    | comment
-                )\b
-            ';
-        };
-        element = {
-            patterns = (
-                { include = '#array'; },
-                { include = '#dict'; },
-                { include = '#string'; }
-            );
-        };
-        reference = {
-            name = 'variable.other.tm-gplist';
-            comment = 'Reference can only be an unquoted string';
-            match = '#[\w\d-]+';
-        };
-        string = {
-            patterns = (
-                {
-                    name = 'string.quoted.double.tm-gplist';
-                    begin = '"';
-                    beginCaptures = {
-                        0 = {
-                            name = 'punctuation.definition.string.begin.tm-gplist';
-                        };
-                    };
-                    end = '"';
-                    endCaptures = {
-                        0 = {
-                            name = 'punctuation.definition.string.end.tm-gplist';
-                        };
-                    };
-                    patterns = (
-                        { include = '#reference'; },
-                        {
-                            match = '\\(?:[\\fnrt"]|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})';
-                            name = 'constant.character.escape.tm-gplist';
-                        },
-                        {
-                            match = '\\.';
-                            name = 'invalid.illegal.unrecognized-string-escape.tm-gplist';
-                        }
-                    );
-                },
-                {
-                    name = 'string.quoted.single.tm-gplist';
-                    begin = "'";
-                    beginCaptures = {
-                        0 = {
-                            name = 'punctuation.definition.string.begin.tm-gplist';
-                        };
-                    };
-                    end = "'(?!')";
-                    endCaptures = {
-                        0 = {
-                            name = 'punctuation.definition.string.end.tm-gplist';
-                        };
-                    };
-                    patterns = (
-                        { include = '#reference'; },
-                        {
-                            name = 'constant.character.escape.tm-gplist';
-                            match = "''";
-                        }
-                    );
-                },
-                {
-                    name = 'string.unquoted.tm-gplist';
-                    match = '[\w\d-]+';
-                }
-            );
-        };
-        dict-key = {
-            name = 'entity.name.tag meta.structure.dict-key.tm-gplist';
-            comment = 'Match anything that can start a string (same as dict-item)';
-            begin = '(?=[\w\d\-''"])';
-            end = '(?==)';
-            patterns = (
-                { include = '#keyword'; },
-                {
-                    comment = 'Only unquoted keys will have special coloring';
-                    match = '[\w\d-]+';
-                },
-                { include = '#string'; },
-                {
-                    match = '[^\s=]';
-                    name = 'invalid.illegal.expected-dict-assignment-operator.tm-gplist';
-                }
-            );
-        };
-        dict-value = {
-            name = 'meta.structure.dict-value.tm-gplist';
-            comment = 'Consumes assignment operator';
-            begin = '=';
-            beginCaptures = {
-                0 = { name = 'keyword.operator.assignment.dict.tm-gplist'; };
-            };
-            end = '(?=;)';
-            patterns = (
-                { include = '#element'; },
-                {
-                    match = '[^\s;]';
-                    name = 'invalid.illegal.expected-dict-separator.tm-gplist';
-                }
-            );
-        };
-        dict-item = {
-            name = 'meta.structure.dict-item.tm-gplist';
-            comment = 'Match anything that can start a string (same as dict-key)';
-            begin = '(?=[\w\d\-''"])';
-            end = '(;)';
-            endCaptures = {
-                0 = { name = 'punctuation.separator.dict.end.tm-gplist'; };
-            };
-            patterns = (
-                { include = '#dict-key'; },
-                { include = '#dict-value'; }
-            );
-        };
-        dict = {
-            name = 'meta.structure.dict.tm-gplist';
-            begin = '\{';
-            beginCaptures = {
-                0 = { name = 'punctuation.definition.dict.begin.tm-gplist'; };
-            };
-            end = '\}';
-            endCaptures = {
-                0 = { name = 'punctuation.definition.dict.end.tm-gplist'; };
-            };
-            patterns = (
-                { include = '#dict-item'; },
-                {
-                    match = '[^\s\}]';
-                    name = 'invalid.illegal.expected-dict-end-bracket.tm-gplist';
-                }
-            );
-        };
-        array = {
-            name = 'meta.structure.array.tm-gplist';
-            begin = '\(';
-            beginCaptures = {
-                0 = { name = 'punctuation.definition.array.begin.tm-gplist'; };
-            };
-            end = '\)';
-            endCaptures = {
-                0 = { name = 'punctuation.definition.array.end.tm-gplist'; };
-            };
-            patterns = (
-                { include = '#element'; },
-                {
-                    match = ',';
-                    name = 'punctuation.separator.array.end.tm-gplist';
-                },
-                {
-                    match = '[^\s\)]';
-                    name = 'invalid.illegal.expected-array-separator-or-end.tm-gplist';
-                }
-            );
-        };
-    };
-}
\ No newline at end of file
diff --git a/syntaxes/ansible/generated/jinja-braces.tmLanguage b/syntaxes/ansible/generated/jinja-braces.tmLanguage
index 670509c59..56aee299c 100644
--- a/syntaxes/ansible/generated/jinja-braces.tmLanguage
+++ b/syntaxes/ansible/generated/jinja-braces.tmLanguage
@@ -5,7 +5,7 @@
         scopeName
         injection.ansible.jinja-braces
         injectionSelector
-        L:string
+        L:string -meta.embedded.inline.jinja
         name
         Grammar for Jinja2 expressions surrounded by double curly braces
         patterns
@@ -19,12 +19,30 @@
         
             jinja-expression
             
+                comment
+                The 'name' is used to undo highlighting as string
                 name
-                variable.other.constant.ansible variable.language
+                keyword.operator.ansible
                 begin
                 \{\{
                 end
                 \}\}
+                beginCaptures
+                
+                    0
+                    
+                        name
+                        constant.character.escape.ansible
+                    
+                
+                endCaptures
+                
+                    0
+                    
+                        name
+                        constant.character.escape.ansible
+                    
+                
                 contentName
                 meta.embedded.inline.jinja
                 patterns
diff --git a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage
index 25285399d..c9f147ddf 100644
--- a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage
+++ b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage
@@ -16,17 +16,6 @@
         comment
         
             Flow style collections are not supported (yet)
-            Without additional contextual injections (which VSCode fortunately suports and that has been used in this extenion)
-            proper YAML comment highlighting will not work in nested Jinja expressions. For example:
-                when: # this works
-                    condition1 or condition2
-                
-                when: (condition1 # this will not work
-                    or condition2)
-            It is impossible to implement that with TM grammars, without modifying the Jinja grammar itself.
-            
-            Same as above applies to escaping quotes, except that it cannot be achieved just with TM grammars
-            even by modifying the Jinja grammar
         
         repository
         
@@ -409,7 +398,7 @@
                             ^(?!\1\s+) # if the indentation is too small
                         
                         contentName
-                        variable.other.constant.ansible variable.language meta.embedded.inline.jinja
+                        keyword.operator.ansible meta.embedded.inline.jinja
                         patterns
                         
                             
@@ -456,7 +445,7 @@
                             
                         
                         contentName
-                        variable.other.constant.ansible variable.language meta.embedded.inline.jinja
+                        keyword.operator.ansible meta.embedded.inline.jinja
                         patterns
                         
                             
@@ -534,7 +523,7 @@
                             
                         
                         contentName
-                        variable.other.constant.ansible variable.language meta.embedded.inline.jinja
+                        keyword.operator.ansible meta.embedded.inline.jinja
                         patterns
                         
                             
@@ -590,7 +579,7 @@
                         end
                         (?!\G)
                         contentName
-                        variable.other.constant.ansible variable.language meta.embedded.inline.jinja
+                        keyword.operator.ansible meta.embedded.inline.jinja
                         patterns
                         
                             
@@ -618,7 +607,7 @@
                         (?x)
                             ^(?!\1\s*) # if the indentation is too small
                         contentName
-                        variable.other.constant.ansible variable.language meta.embedded.inline.jinja
+                        keyword.operator.ansible meta.embedded.inline.jinja
                         patterns
                         
                             
diff --git a/syntaxes/ansible/generated/jinja-extras.tmLanguage b/syntaxes/ansible/generated/jinja-extras.tmLanguage
new file mode 100644
index 000000000..f374fc8b8
--- /dev/null
+++ b/syntaxes/ansible/generated/jinja-extras.tmLanguage
@@ -0,0 +1,63 @@
+
+
+
+    
+        scopeName
+        injection.ansible.jinja-extras
+        injectionSelector
+        L:meta.embedded.inline.jinja -string.quoted.double.jinja -string.quoted.single.jinja
+        name
+        Grammar for Jinja2 syntax highlighting that is not provided out-of-the-box
+        patterns
+        
+            
+                include
+                #literals
+            
+        
+        repository
+        
+            literals
+            
+                match
+                (?x)
+                    (none|None)
+                    | (true|True|false|False)
+                    | (
+                          [-+]? 0b [0-1_]+ # (base 2)
+                        | [-+]? 0x [0-9a-fA-F_]+ # (base 16)
+                        | [-+]? 0  [0-7_]+ # (base 8)
+                        | [-+]? (?: 0|[1-9][0-9_]*) # (base 10)
+                        | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60)
+                      )
+                    | (
+                          [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10)
+                        | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60)
+                    )
+                captures
+                
+                    1
+                    
+                        name
+                        constant.language.none.ansible
+                    
+                    2
+                    
+                        name
+                        constant.language.boolean.ansible
+                    
+                    3
+                    
+                        name
+                        constant.numeric.integer.ansible
+                    
+                    4
+                    
+                        name
+                        constant.numeric.float.ansible
+                    
+                
+            
+        
+    
+
\ No newline at end of file
diff --git a/syntaxes/ansible/generated/jinja-yaml-comments.tmLanguage b/syntaxes/ansible/generated/jinja-yaml-comments.tmLanguage
deleted file mode 100644
index 9d788ce19..000000000
--- a/syntaxes/ansible/generated/jinja-yaml-comments.tmLanguage
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-    
-        scopeName
-        injection.ansible.jinja-comments
-        injectionSelector
-        L:string.unquoted meta.embedded.inline.jinja
-        name
-        Injection grammar for supproting YAML comments in Jinja2 expressions
-        patterns
-        
-            
-                include
-                source.ansible#comment
-            
-        
-    
-
\ No newline at end of file
diff --git a/syntaxes/ansible/jinja-braces.tmLanguage.plist b/syntaxes/ansible/jinja-braces.tmLanguage.plist
index 3022065a7..0fb1f963d 100644
--- a/syntaxes/ansible/jinja-braces.tmLanguage.plist
+++ b/syntaxes/ansible/jinja-braces.tmLanguage.plist
@@ -1,19 +1,30 @@
 {
     scopeName = 'injection.ansible.jinja-braces';
-    injectionSelector = 'L:string';
+    injectionSelector = 'L:string -meta.embedded.inline.jinja';
     name = 'Grammar for Jinja2 expressions surrounded by double curly braces';
     patterns = (
         { include = '#jinja-expression'; }
     );
     repository = {
         jinja-expression = {
-            name = 'variable.other.constant.ansible variable.language';
+            comment = "The 'name' is used to undo highlighting as string";
+            name = 'keyword.operator.ansible';
             begin = '\{\{';
             end = '\}\}';
+            beginCaptures = {
+                0 = {
+                    name = 'constant.character.escape.ansible';
+                };
+            };
+            endCaptures = {
+                0 = {
+                    name = 'constant.character.escape.ansible';
+                };
+            };
             contentName = 'meta.embedded.inline.jinja';
             patterns = (
                 { include = 'source.ansible-jinja#expression'; }
             );
         };
     };
-}
\ No newline at end of file
+}
diff --git a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist
index 88a3f8ccd..3800d4bf2 100644
--- a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist
+++ b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist
@@ -5,18 +5,7 @@
         { include = '#ansible-condition'; }
     );
     comment = (
-        'Flow style collections are not supported (yet)',
-        'Without additional contextual injections (which VSCode fortunately suports and that has been used in this extenion)
-        proper YAML comment highlighting will not work in nested Jinja expressions. For example:
-            when: # this works
-                condition1 or condition2
-            
-            when: (condition1 # this will not work
-                or condition2)
-        It is impossible to implement that with TM grammars, without modifying the Jinja grammar itself.
-        ',
-        'Same as above applies to escaping quotes, except that it cannot be achieved just with TM grammars
-        even by modifying the Jinja grammar'
+        'Flow style collections are not supported (yet)'
     );
     repository = {
         ansible-condition = {
@@ -256,7 +245,7 @@
                     end = '(?x)
                         ^(?!\1\s+) # if the indentation is too small
                     ';
-                    contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja';
+                    contentName = 'keyword.operator.ansible meta.embedded.inline.jinja';
                     patterns = (
                         { include = '#yaml-unquoted-string'; },
                     );
@@ -285,7 +274,7 @@
                             name = 'invalid.illegal.expected-comment-or-newline.ansible';
                         };
                     };
-                    contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja';
+                    contentName = 'keyword.operator.ansible meta.embedded.inline.jinja';
                     patterns = (
                         {
                             begin = "''";
@@ -332,7 +321,7 @@
                             name = 'invalid.illegal.expected-comment-or-newline.ansible';
                         };
                     };
-                    contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja';
+                    contentName = 'keyword.operator.ansible meta.embedded.inline.jinja';
                     patterns = (
                         {
                             begin = '\\"';
@@ -364,7 +353,7 @@
                     name = 'string.unquoted.ansible';
                     begin = '(?=\S)';
                     end = '(?!\G)';
-                    contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja';
+                    contentName = 'keyword.operator.ansible meta.embedded.inline.jinja';
                     patterns = (
                         { include = 'source.ansible-jinja#expression'; },
                     );
@@ -382,7 +371,7 @@
                         (?=\S)';
                     end = '(?x)
                         ^(?!\1\s*) # if the indentation is too small';
-                    contentName = 'variable.other.constant.ansible variable.language meta.embedded.inline.jinja';
+                    contentName = 'keyword.operator.ansible meta.embedded.inline.jinja';
                     patterns = (
                         { include = 'source.ansible-jinja#expression'; },
                     );
diff --git a/syntaxes/ansible/jinja-extras.tmLanguage.plist b/syntaxes/ansible/jinja-extras.tmLanguage.plist
new file mode 100644
index 000000000..ed6aaebca
--- /dev/null
+++ b/syntaxes/ansible/jinja-extras.tmLanguage.plist
@@ -0,0 +1,40 @@
+{
+    scopeName = 'injection.ansible.jinja-extras';
+    injectionSelector = 'L:meta.embedded.inline.jinja -string.quoted.double.jinja -string.quoted.single.jinja';
+    name = 'Grammar for Jinja2 syntax highlighting that is not provided out-of-the-box';
+    patterns = (
+        { include = '#literals'; }
+    );
+    repository = {
+        literals = {
+            match = '(?x)
+                (none|None)
+                | (true|True|false|False)
+                | (
+                      [-+]? 0b [0-1_]+ # (base 2)
+                    | [-+]? 0x [0-9a-fA-F_]+ # (base 16)
+                    | [-+]? 0  [0-7_]+ # (base 8)
+                    | [-+]? (?: 0|[1-9][0-9_]*) # (base 10)
+                    | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60)
+                  )
+                | (
+                      [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10)
+                    | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60)
+                )';
+                captures = {
+                    1 = {
+                        name = 'constant.language.none.ansible';
+                    };
+                    2 = {
+                        name = 'constant.language.boolean.ansible';
+                    };
+                    3 = {
+                        name = 'constant.numeric.integer.ansible';
+                    };
+                    4 = {
+                        name = 'constant.numeric.float.ansible';
+                    };
+                };
+        };
+    };
+}
diff --git a/syntaxes/ansible/jinja-yaml-comments.tmLanguage.plist b/syntaxes/ansible/jinja-yaml-comments.tmLanguage.plist
deleted file mode 100644
index ca9a590be..000000000
--- a/syntaxes/ansible/jinja-yaml-comments.tmLanguage.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-    scopeName = 'injection.ansible.jinja-comments';
-    injectionSelector = 'L:string.unquoted meta.embedded.inline.jinja';
-    name = 'Injection grammar for supproting YAML comments in Jinja2 expressions';
-    patterns = (
-        { include = 'source.ansible#comment'; }
-    );
-}
\ No newline at end of file
diff --git a/syntaxes/injection.tmLanguage.plist b/syntaxes/injection.tmLanguage.plist
deleted file mode 100644
index a80366729..000000000
--- a/syntaxes/injection.tmLanguage.plist
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-    scopeName = 'test.injection';
-    injectionSelector = 'L:entity.name.tag.yaml';
-    name = 'TextMate Grammar Property List';
-    patterns = (
-        { include = '#test'; }
-    );
-    repository = {
-        test = {
-            name = 'keyword.todo';
-            match = 'name';
-        };
-    };
-}
\ No newline at end of file

From 384c52dee175d9a37d7a2d41e53680468188e6fe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Tue, 1 Jun 2021 22:24:08 +0200
Subject: [PATCH 051/558] Added scripts that were used for plist conversion.

---
 syntaxes/README.md                      |  8 +++
 syntaxes/generated/injection.tmLanguage | 29 --------
 syntaxes/plist2xml.py                   | 89 ++++++++++++++++++++++++
 syntaxes/xml2plist.py                   | 90 +++++++++++++++++++++++++
 4 files changed, 187 insertions(+), 29 deletions(-)
 create mode 100644 syntaxes/README.md
 delete mode 100644 syntaxes/generated/injection.tmLanguage
 create mode 100644 syntaxes/plist2xml.py
 create mode 100644 syntaxes/xml2plist.py

diff --git a/syntaxes/README.md b/syntaxes/README.md
new file mode 100644
index 000000000..b1d0627cc
--- /dev/null
+++ b/syntaxes/README.md
@@ -0,0 +1,8 @@
+# TextMate grammar authoring
+TextMate grammars (which VS Code uses for syntax highlighting) are authored in a
+[textual property-list format](https://macromates.com/manual/en/language_grammars).
+This format is much easier to work with than its XML, JSON or even YAML
+representations.
+
+The two Python scripts `plist2xml.py` and `xml2plist.py` are provided to convert
+between the textual and XML representation of the TextMate grammars.
diff --git a/syntaxes/generated/injection.tmLanguage b/syntaxes/generated/injection.tmLanguage
deleted file mode 100644
index 8e58dfa18..000000000
--- a/syntaxes/generated/injection.tmLanguage
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-    
-        scopeName
-        test.injection
-        injectionSelector
-        L:entity.name.tag.yaml
-        name
-        TextMate Grammar Property List
-        patterns
-        
-            
-                include
-                #test
-            
-        
-        repository
-        
-            test
-            
-                name
-                keyword.todo
-                match
-                name
-            
-        
-    
-
\ No newline at end of file
diff --git a/syntaxes/plist2xml.py b/syntaxes/plist2xml.py
new file mode 100644
index 000000000..1efb7f635
--- /dev/null
+++ b/syntaxes/plist2xml.py
@@ -0,0 +1,89 @@
+import re
+from typing import Match
+import pyparsing as pp
+import lxml.etree as ET
+import click
+
+
+@click.command()
+@click.argument('source', required=True)
+@click.argument('dest', required=True)
+def main(source, dest):
+    ast = parse(source)
+
+    plist: ET.Element = ET.Element('plist', version="1.0")
+    generate_xml(plist, ast)
+
+    ET.indent(plist, '    ')
+    xml = ET.tostring(
+        plist, encoding='UTF-8', xml_declaration=True,
+        doctype=''
+    )
+
+    with open(dest, 'wb') as f:
+        f.write(xml)
+
+
+def parse(plistPath):
+    # https://macromates.com/manual/en/appendix#property-list-format
+    # https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/PropertyLists/OldStylePlists/OldStylePLists.html#//apple_ref/doc/uid/20001012-BBCBDBJE
+    LPAR, RPAR, LBRACE, RBRACE, EQUALS, SEMI, COL = map(pp.Suppress, "(){}=;,")
+
+    array = pp.Forward().setName('array')
+    dictionary = pp.Forward().setName('dict')
+    string = (pp.QuotedString('"', escChar="\\", multiline=True, convertWhitespaceEscapes=True) |
+              pp.QuotedString("'", escQuote="''", multiline=True, convertWhitespaceEscapes=False) |
+              pp.Word(pp.alphanums+'_-'))('string').setName('simple string or quoted string')
+
+    # order here is very important when using '-'
+    element = pp.Group(string | array | dictionary)('value')
+
+    # that '+' is required for matching the optional colon
+    array_elements = element - pp.ZeroOrMore(COL + element) - pp.Optional(COL)
+    array << pp.Group(LPAR - pp.Optional(array_elements) -
+                      RPAR)('array')
+
+    dict_item = pp.Group(string('key') - EQUALS - element - SEMI)
+    dictionary << pp.Group(LBRACE -
+                           pp.ZeroOrMore(dict_item) -
+                           RBRACE)('dict')
+
+    res = dictionary.parseFile(plistPath, parseAll=True)
+    return res
+
+
+def generate_xml(parent: ET.Element, data: pp.ParseResults, level=0, indent=4):
+    if 'dict' in data:
+        dictionary = data['dict']
+        parent = ET.SubElement(parent, 'dict')
+        for dict_item in dictionary:
+            key = dict_item['key']
+            x_key = ET.SubElement(parent, 'key')
+            x_key.text = key
+            value = dict_item['value']
+            generate_xml(parent, value, level+1, indent)
+        pass
+    elif 'array' in data:
+        array = data['array']
+        parent = ET.SubElement(parent, 'array')
+        for array_item in array:
+            generate_xml(parent, array_item, level+1, indent)
+    elif 'string' in data:
+        string: str = data['string']
+        lines = string.split('\n')
+        reindented_lines = [lines[0]]
+        for line in lines[1:]:
+            m: Match = re.match(f'^[ ]{{{(level-1)*indent}}}', line)
+            if m:
+                # remove plist indent
+                line = line[len(m.group(0)):]
+                # insert XML indent
+                line = ' '*((level)*indent) + line
+            reindented_lines.append(line)
+
+        x_string = ET.SubElement(parent, 'string')
+        x_string.text = '\n'.join(reindented_lines)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/syntaxes/xml2plist.py b/syntaxes/xml2plist.py
new file mode 100644
index 000000000..a9020158a
--- /dev/null
+++ b/syntaxes/xml2plist.py
@@ -0,0 +1,90 @@
+from typing import Match, Union
+import xml.etree.ElementTree as ET
+import re
+import click
+
+
+@click.command()
+@click.argument('source', required=True)
+@click.argument('dest', required=True)
+def main(source, dest):
+    root = ET.parse(source).getroot()
+
+    with open(dest, 'w') as f:
+        f.write(convert_to_plist(root))
+
+
+def to_safe_string(text: str):
+    if re.match(r'^[\w-]+$', text):
+        return text
+    else:
+        text = text.replace("'", "''")  # escape single-quotes
+        return f"'{text}'"
+
+
+def format(tag, value: Union[list, str], level, indent, context):
+    xml_indent = 4
+    indentation = ' '*indent*level
+    if context == 'mapping':
+        start_indent = ''
+    else:
+        start_indent = indentation
+
+    if type(value) is list:
+        if tag == 'dict':
+            start = '{'
+            end = '}'
+            joined_values = '\n'.join(value)
+        elif tag == 'array':
+            start = '('
+            end = ')'
+            joined_values = ',\n'.join(value)
+        return f"{start_indent}{start}\n{joined_values}\n{indentation}{end}"
+    else:
+        reindented_lines = []
+        lines = value.split('\n')
+        for line in lines:
+            m: Match = re.match(r'^[\t ]*', line)
+            # Normalize tabs to spaces
+            text_indentation = m.group(0).replace('\t', ' '*xml_indent)
+            # reindent in case indent does not match xml_indent
+            text_indentation = ' ' * \
+                int(len(text_indentation)/xml_indent *
+                    indent-indent)  # working one level lower (plist tag is removed)
+            reindented_lines.append(text_indentation + line.lstrip())
+        value = '\n'.join(reindented_lines)
+        return f"{start_indent}{value}"
+
+
+def convert_to_plist(element: ET.Element, level=0, indent=4, context: str = ''):
+    if element.tag == 'dict':
+        # with new level, since indent is appended already here
+        inner_indentation = ' '*indent*(level+1)
+        dict_iter = iter(element)
+        dict_items = []
+        while True:
+            try:
+                key_element = next(dict_iter)
+                assert key_element.tag == 'key', f"Got {key_element.tag}({key_element.text}) instead of key"
+                value_element = next(dict_iter, None)
+                assert value_element is not None, f"Got {key_element.tag}({key_element.text}) without value"
+                item_str = f"{inner_indentation}{to_safe_string(key_element.text)} = {convert_to_plist(value_element, level+1, indent, 'mapping')};"
+                dict_items.append(item_str)
+            except StopIteration:
+                break
+        return format(element.tag, dict_items, level, indent, context)
+    elif element.tag == 'array':
+        array_items = []
+        for item_element in element:
+            array_items.append(convert_to_plist(item_element, level+1, indent))
+        return format(element.tag, array_items, level, indent, context)
+    elif element.tag == 'string':
+        return format(element.tag, to_safe_string(element.text), level, indent, context)
+    elif element.tag == 'plist':
+        return convert_to_plist(element[0], level, indent)
+    else:
+        raise Exception(f"Unrecognized tag: {element.tag}")
+
+
+if __name__ == "__main__":
+    main()

From 6ce1d72407f055e5bf6b7d58671c3d2e49444820 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Wed, 2 Jun 2021 00:27:29 +0200
Subject: [PATCH 052/558] Improved syntax highlighting. Prioritized completion
 items. Fixed block detection. Added base-name of an option as reported alias.

---
 server/src/providers/completionProvider.ts    | 38 +++++++++-
 server/src/providers/semanticTokenProvider.ts | 75 ++++++++++++++++---
 server/src/utils/ansible.ts                   | 11 ++-
 server/src/utils/docsFormatter.ts             |  3 +-
 server/src/utils/yaml.ts                      |  7 +-
 5 files changed, 115 insertions(+), 19 deletions(-)

diff --git a/server/src/providers/completionProvider.ts b/server/src/providers/completionProvider.ts
index ff4ee7513..6af903550 100644
--- a/server/src/providers/completionProvider.ts
+++ b/server/src/providers/completionProvider.ts
@@ -11,6 +11,7 @@ import { WorkspaceFolderContext } from '../services/workspaceManager';
 import {
   blockKeywords,
   playKeywords,
+  playWithoutTaskKeywords,
   roleKeywords,
   taskKeywords,
 } from '../utils/ansible';
@@ -28,6 +29,12 @@ import {
   isTaskParam,
 } from '../utils/yaml';
 
+const priorityMap = {
+  nameKeyword: 1,
+  moduleName: 2,
+  keyword: 3,
+};
+
 export async function doCompletion(
   document: TextDocument,
   position: Position,
@@ -50,7 +57,8 @@ export async function doCompletion(
     if (node) {
       const docsLibrary = await context.docsLibrary;
 
-      if (isPlayParam(path)) {
+      const isPlay = isPlayParam(path);
+      if (isPlay) {
         return getKeywordCompletion(document, position, path, playKeywords);
       }
 
@@ -63,18 +71,40 @@ export async function doCompletion(
       }
 
       if (isTaskParam(path)) {
-        // provide basic keywords
+        // offer basic task keywords
         const completionItems = getKeywordCompletion(
           document,
           position,
           path,
           taskKeywords
         );
+        if (isPlay === undefined) {
+          // this can still turn into a play, so we should offer those keywords too
+          completionItems.push(
+            ...getKeywordCompletion(
+              document,
+              position,
+              path,
+              playWithoutTaskKeywords
+            )
+          );
+        }
 
         // incidentally, the hack mentioned above prevents finding a module in
         // case the cursor is on it
         const module = await findProvidedModule(path, document, docsLibrary);
         if (!module) {
+          // offer the 'block' keyword (as it is not one of taskKeywords)
+          completionItems.push(
+            ...getKeywordCompletion(
+              document,
+              position,
+              path,
+              new Map([['block', blockKeywords.get('block') as string]])
+            )
+          );
+
+          // offer modules
           const moduleCompletionItems = [...docsLibrary.moduleFqcns].map(
             (moduleFqcn) => {
               const [namespace, collection, name] = moduleFqcn.split('.');
@@ -82,6 +112,7 @@ export async function doCompletion(
                 label: name,
                 kind: CompletionItemKind.Class,
                 detail: `${namespace}.${collection}`,
+                sortText: `${priorityMap.moduleName}_${name}`,
                 filterText: moduleFqcn,
                 data: {
                   documentUri: document.uri, // preserve document URI for completion request
@@ -203,9 +234,12 @@ function getKeywordCompletion(
     ([keyword]) => !providedParams.has(keyword)
   );
   return remainingParams.map(([keyword, description]) => {
+    const priority =
+      keyword === 'name' ? priorityMap.nameKeyword : priorityMap.keyword;
     return {
       label: keyword,
       kind: CompletionItemKind.Property,
+      sortText: `${priority}_${keyword}`,
       documentation: description,
       insertText: atEndOfLine(document, position) ? `${keyword}:` : undefined,
     };
diff --git a/server/src/providers/semanticTokenProvider.ts b/server/src/providers/semanticTokenProvider.ts
index bc0172989..9fabd2884 100644
--- a/server/src/providers/semanticTokenProvider.ts
+++ b/server/src/providers/semanticTokenProvider.ts
@@ -26,13 +26,14 @@ export const tokenTypes = [
   SemanticTokenTypes.method,
   SemanticTokenTypes.class,
   SemanticTokenTypes.keyword,
+  SemanticTokenTypes.property,
 ];
 
 const tokenTypesLegend = new Map(
   tokenTypes.map((value, index) => [value, index])
 );
 
-export const tokenModifiers = [SemanticTokenModifiers.defaultLibrary];
+export const tokenModifiers = [SemanticTokenModifiers.definition];
 
 const tokenModifiersLegend = new Map(
   tokenModifiers.map((value, index) => [value, index])
@@ -63,12 +64,18 @@ async function markSemanticTokens(
     for (const pair of node.items) {
       if (pair.key instanceof Scalar) {
         const keyPath = path.concat(pair, pair.key);
-        if (isPlayParam(keyPath) && playKeywords.has(pair.key.value)) {
-          markKeyword(pair.key, builder, document);
-        } else if (isBlockParam(keyPath) && blockKeywords.has(pair.key.value)) {
-          markKeyword(pair.key, builder, document);
-        } else if (isRoleParam(keyPath) && roleKeywords.has(pair.key.value)) {
-          markKeyword(pair.key, builder, document);
+        if (isPlayParam(keyPath)) {
+          if (playKeywords.has(pair.key.value))
+            markKeyword(pair.key, builder, document);
+          else markOrdinaryKey(pair.key, builder, document);
+        } else if (isBlockParam(keyPath)) {
+          if (blockKeywords.has(pair.key.value))
+            markKeyword(pair.key, builder, document);
+          else markOrdinaryKey(pair.key, builder, document);
+        } else if (isRoleParam(keyPath)) {
+          if (roleKeywords.has(pair.key.value))
+            markKeyword(pair.key, builder, document);
+          else markOrdinaryKey(pair.key, builder, document);
         } else if (isTaskParam(keyPath)) {
           if (isTaskKeyword(pair.key.value)) {
             markKeyword(pair.key, builder, document);
@@ -102,12 +109,16 @@ async function markSemanticTokens(
                 // highlight module parameters
                 markModuleParameters(pair.value, module, builder, document);
               }
+            } else {
+              markOrdinaryKey(pair.key, builder, document);
             }
           }
 
           // this pair has been completely processed
           // tasks don't have any deeper structure
           continue;
+        } else {
+          markOrdinaryKey(pair.key, builder, document);
         }
       }
 
@@ -155,6 +166,34 @@ function markModuleParameters(
           builder,
           document
         );
+      } else {
+        markOrdinaryKey(moduleParamPair.key, builder, document);
+      }
+    }
+    if (moduleParamPair.value instanceof Node) {
+      markAllNestedKeysAsOrdinary(moduleParamPair.value, builder, document);
+    }
+  }
+}
+
+function markAllNestedKeysAsOrdinary(
+  node: Node,
+  builder: SemanticTokensBuilder,
+  document: TextDocument
+) {
+  if (node instanceof YAMLMap) {
+    for (const pair of node.items) {
+      if (pair.key instanceof Scalar) {
+        markOrdinaryKey(pair.key, builder, document);
+      }
+      if (pair.value instanceof Node) {
+        markAllNestedKeysAsOrdinary(pair.value, builder, document);
+      }
+    }
+  } else if (node instanceof YAMLSeq) {
+    for (const item of node.items) {
+      if (item instanceof Node) {
+        markAllNestedKeysAsOrdinary(item, builder, document);
       }
     }
   }
@@ -168,6 +207,20 @@ function markKeyword(
   markNode(node, SemanticTokenTypes.keyword, [], builder, document);
 }
 
+function markOrdinaryKey(
+  node: Scalar,
+  builder: SemanticTokensBuilder,
+  document: TextDocument
+) {
+  markNode(
+    node,
+    SemanticTokenTypes.property,
+    [SemanticTokenModifiers.definition],
+    builder,
+    document
+  );
+}
+
 function markNode(
   node: Scalar,
   tokenType: SemanticTokenTypes,
@@ -190,8 +243,8 @@ function markNode(
 
 function encodeTokenType(tokenType: SemanticTokenTypes) {
   const tokenTypeIndex = tokenTypesLegend.get(tokenType);
-  if (typeof tokenTypeIndex === 'undefined') {
-    throw new Error(`The ${tokenType} token type is not in legend`);
+  if (tokenTypeIndex === undefined) {
+    throw new Error(`The '${tokenType}' token type is not in legend`);
   }
   return tokenTypeIndex;
 }
@@ -202,8 +255,8 @@ function encodeTokenModifiers(
   let encodedModifiers = 0;
   for (const tokenModifier of tokenModifiers) {
     const tokenModifierIndex = tokenModifiersLegend.get(tokenModifier);
-    if (typeof tokenModifierIndex === 'undefined') {
-      throw new Error(`The ${tokenModifier} token modifier is not in legend`);
+    if (tokenModifierIndex === undefined) {
+      throw new Error(`The '${tokenModifier}' token modifier is not in legend`);
     }
     encodedModifiers |= (1 << tokenModifierIndex) >>> 0;
   }
diff --git a/server/src/utils/ansible.ts b/server/src/utils/ansible.ts
index 704d05678..e653bb6d0 100644
--- a/server/src/utils/ansible.ts
+++ b/server/src/utils/ansible.ts
@@ -698,12 +698,17 @@ taskKeywords.set(
   'Conditional expression, determines if an iteration of a task is run or not.'
 );
 
-export const playExclusiveKeywords = new Set(
-  [...playKeywords.keys()].filter(
-    (k) => !taskKeywords.has(k) && !roleKeywords.has(k) && !blockKeywords.has(k)
+export const playExclusiveKeywords = new Map(
+  [...playKeywords].filter(
+    ([k]) =>
+      !taskKeywords.has(k) && !roleKeywords.has(k) && !blockKeywords.has(k)
   )
 );
 
+export const playWithoutTaskKeywords = new Map(
+  [...playKeywords].filter(([k]) => !taskKeywords.has(k))
+);
+
 export function isTaskKeyword(value: string): boolean {
   return taskKeywords.has(value) || value.startsWith('with_');
 }
diff --git a/server/src/utils/docsFormatter.ts b/server/src/utils/docsFormatter.ts
index 479196946..3241a24c8 100644
--- a/server/src/utils/docsFormatter.ts
+++ b/server/src/utils/docsFormatter.ts
@@ -56,7 +56,8 @@ export function formatOption(
     sections.push(`*Choices*: [${formattedChoiceArray.toString()}]`);
   }
   if (option.aliases) {
-    const formattedChoiceArray = option.aliases.map((a) => `\`${a}\``);
+    const aliasesWithBaseName = [option.name].concat(option.aliases);
+    const formattedChoiceArray = aliasesWithBaseName.map((a) => `\`${a}\``);
     sections.push(`*Aliases*: [${formattedChoiceArray.toString()}]`);
   }
   return {
diff --git a/server/src/utils/yaml.ts b/server/src/utils/yaml.ts
index 9d9813b35..92260e2b6 100644
--- a/server/src/utils/yaml.ts
+++ b/server/src/utils/yaml.ts
@@ -325,8 +325,11 @@ export function isPlayParam(
  * Determines whether the path points at one of Ansible block parameter keys.
  */
 export function isBlockParam(path: Node[]): boolean {
-  const mapNode = new AncestryBuilder(path).parentOfKey().get();
-  if (mapNode) {
+  const builder = new AncestryBuilder(path).parentOfKey();
+  const mapNode = builder.get();
+  // the block must have a list as parent
+  const isInYAMLSeq = !!builder.parent(YAMLSeq).get();
+  if (mapNode && isInYAMLSeq) {
     const providedKeys = getYamlMapKeys(mapNode);
     return providedKeys.includes('block');
   }

From 07954dfc71b6e74a2edd3e07b136fa85985b18e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Sun, 6 Jun 2021 14:05:32 +0200
Subject: [PATCH 053/558] Implemented Python virtual environment handling.
 Implemented more robust diagnostics clean-up.

---
 package.json                               |  12 ++
 server/src/ansibleLanguageService.ts       |  27 ++--
 server/src/interfaces/extensionSettings.ts |   1 +
 server/src/providers/validationProvider.ts |  20 ++-
 server/src/services/ansibleConfig.ts       |  43 ++++--
 server/src/services/ansibleLint.ts         | 165 ++++++++++++++++++---
 server/src/services/settingsManager.ts     |   1 +
 server/src/utils/misc.ts                   |  44 +++++-
 8 files changed, 259 insertions(+), 54 deletions(-)

diff --git a/package.json b/package.json
index cf1aae6f4..62798f91c 100644
--- a/package.json
+++ b/package.json
@@ -48,6 +48,18 @@
           "type": "string",
           "default": "ansible-lint",
           "description": "Path to the ansible-lint executable."
+        },
+        "ansible.python.interpreterPath": {
+          "scope": "resource",
+          "type": "string",
+          "default": "",
+          "description": "Path to the Python interpreter executable. Particularly important if you are using a Python virtual environment. Leave blank to use Python from PATH."
+        },
+        "ansible.python.activationScript": {
+          "scope": "resource",
+          "type": "string",
+          "default": "",
+          "description": "Path to the virtual environment activation script. Use only if you have a custom activation script. It will be sourced using bash before executing Ansible commands. If set, the Interpreter Path setting is ignored."
         }
       }
     },
diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index 22c59a894..b180d973f 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -146,7 +146,11 @@ export class AnsibleLanguageService {
         const context = this.workspaceManager.getContext(e.document.uri);
         if (context) {
           this.sendDiagnostics(
-            await doValidate(e.document, context.ansibleLint)
+            await doValidate(e.document, {
+              linter: context.ansibleLint,
+              quick: false,
+              onOpen: true,
+            })
           );
         }
       } catch (error) {
@@ -159,13 +163,8 @@ export class AnsibleLanguageService {
         const context = this.workspaceManager.getContext(e.document.uri);
         if (context) {
           context.documentSettings.handleDocumentClosed(e.document.uri);
+          context.ansibleLint.handleDocumentClosed(e.document.uri);
         }
-
-        // need to clear the diagnostics, otherwise they remain after changing language
-        this.connection.sendDiagnostics({
-          uri: e.document.uri,
-          diagnostics: [],
-        });
       } catch (error) {
         this.handleError(error, 'onDidClose');
       }
@@ -186,7 +185,11 @@ export class AnsibleLanguageService {
         const context = this.workspaceManager.getContext(e.document.uri);
         if (context) {
           this.sendDiagnostics(
-            await doValidate(e.document, context.ansibleLint)
+            await doValidate(e.document, {
+              linter: context.ansibleLint,
+              quick: false,
+              onOpen: false,
+            })
           );
         }
       } catch (error) {
@@ -198,7 +201,7 @@ export class AnsibleLanguageService {
       try {
         const context = this.workspaceManager.getContext(e.textDocument.uri);
         if (context) {
-          context.ansibleLint.invalidateCacheItems(
+          context.ansibleLint.reconcileCacheItems(
             e.textDocument.uri,
             e.contentChanges
           );
@@ -214,7 +217,11 @@ export class AnsibleLanguageService {
         // depending on whether we have the context, we either validate with
         // Ansible-lint or perform simple YAML validation
         const diagnostics = await (context
-          ? doValidate(e.document, context.ansibleLint, true)
+          ? doValidate(e.document, {
+              linter: context.ansibleLint,
+              quick: true,
+              onOpen: false,
+            })
           : doValidate(e.document));
 
         this.sendDiagnostics(diagnostics);
diff --git a/server/src/interfaces/extensionSettings.ts b/server/src/interfaces/extensionSettings.ts
index 391db139c..ad0931522 100644
--- a/server/src/interfaces/extensionSettings.ts
+++ b/server/src/interfaces/extensionSettings.ts
@@ -1,4 +1,5 @@
 export interface ExtensionSettings {
   ansible: { path: string; useFullyQualifiedCollectionNames: boolean };
   ansibleLint: { enabled: boolean; path: string };
+  python: { interpreterPath: string; activationScript: string };
 }
diff --git a/server/src/providers/validationProvider.ts b/server/src/providers/validationProvider.ts
index 6eeb7c8f5..f2e6f9574 100644
--- a/server/src/providers/validationProvider.ts
+++ b/server/src/providers/validationProvider.ts
@@ -20,19 +20,27 @@ import { AnsibleLint } from '../services/ansibleLint';
  */
 export async function doValidate(
   textDocument: TextDocument,
-  linter?: AnsibleLint,
-  quick = false
+  linterParams?: {
+    linter: AnsibleLint;
+    quick: boolean;
+    onOpen: boolean;
+  }
 ): Promise> {
-  if (linter) {
-    if (quick) {
+  if (linterParams) {
+    if (linterParams.quick) {
       const diagnostics = getYamlValidation(textDocument);
-      const lintDiagnostics = linter.getValidationFromCache(textDocument.uri);
+      const lintDiagnostics = linterParams.linter.getValidationFromCache(
+        textDocument.uri
+      );
       if (lintDiagnostics) {
         diagnostics.push(...lintDiagnostics);
       }
       return new Map([[textDocument.uri, diagnostics]]);
     } else {
-      const diagnostics = await linter.doValidate(textDocument);
+      const diagnostics = await linterParams.linter.doValidate(
+        textDocument,
+        linterParams.onOpen
+      );
       for (const [fileUri, fileDiagnostics] of diagnostics) {
         if (textDocument.uri === fileUri) {
           // ensure that regular diagnostics are still present
diff --git a/server/src/services/ansibleConfig.ts b/server/src/services/ansibleConfig.ts
index 13f68265e..9004217ab 100644
--- a/server/src/services/ansibleConfig.ts
+++ b/server/src/services/ansibleConfig.ts
@@ -4,6 +4,7 @@ import * as _ from 'lodash';
 import * as path from 'path';
 import { URL } from 'url';
 import { Connection } from 'vscode-languageserver';
+import { withInterpreter } from '../utils/misc';
 import { WorkspaceFolderContext } from './workspaceManager';
 
 export class AnsibleConfig {
@@ -19,19 +20,23 @@ export class AnsibleConfig {
 
   public async initialize(): Promise {
     try {
-      const ansibleExecutable = (
-        await this.context.documentSettings.get(
-          this.context.workspaceFolder.uri
-        )
-      ).ansible.path;
+      const settings = await this.context.documentSettings.get(
+        this.context.workspaceFolder.uri
+      );
 
-      const ansibleConfigResult = child_process.execSync(
-        `${ansibleExecutable}-config dump`,
-        {
-          encoding: 'utf-8',
-          cwd: new URL(this.context.workspaceFolder.uri).pathname,
-        }
+      const [ansibleConfigCommand, ansibleConfigEnv] = withInterpreter(
+        `${settings.ansible.path}-config`,
+        'dump',
+        settings.python.interpreterPath,
+        settings.python.activationScript
       );
+
+      const ansibleConfigResult = child_process.execSync(ansibleConfigCommand, {
+        encoding: 'utf-8',
+        cwd: new URL(this.context.workspaceFolder.uri).pathname,
+        env: ansibleConfigEnv,
+      });
+
       let config = ini.parse(ansibleConfigResult);
       config = _.mapKeys(
         config,
@@ -39,12 +44,18 @@ export class AnsibleConfig {
       );
       this._collection_paths = parsePythonStringArray(config.COLLECTIONS_PATHS);
 
-      const ansibleVersionResult = child_process.execSync(
-        `${ansibleExecutable} --version`,
-        {
-          encoding: 'utf-8',
-        }
+      const [ansibleCommand, ansibleEnv] = withInterpreter(
+        `${settings.ansible.path}`,
+        '--version',
+        settings.python.interpreterPath,
+        settings.python.activationScript
       );
+
+      const ansibleVersionResult = child_process.execSync(ansibleCommand, {
+        encoding: 'utf-8',
+        env: ansibleEnv,
+      });
+
       const versionInfo = ini.parse(ansibleVersionResult);
       this._module_locations = parsePythonStringArray(
         versionInfo['configured module search path']
diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
index 8e83a626b..055d76aa9 100644
--- a/server/src/services/ansibleLint.ts
+++ b/server/src/services/ansibleLint.ts
@@ -17,7 +17,7 @@ import {
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
 import { IAnsibleLintConfig } from '../interfaces/ansibleLintConfig';
-import { fileExists, hasOwnProperty } from '../utils/misc';
+import { fileExists, withInterpreter, hasOwnProperty } from '../utils/misc';
 import { WorkspaceFolderContext } from './workspaceManager';
 const exec = promisify(child_process.exec);
 
@@ -30,10 +30,22 @@ const exec = promisify(child_process.exec);
 export class AnsibleLint {
   private connection: Connection;
   private context: WorkspaceFolderContext;
-  private validationCache: Map> = new Map();
   private useProgressTracker = false;
+
   private configCache: Map = new Map();
 
+  private validationCache: Map> = new Map();
+
+  /**
+   * Mapping from file that generated diagnostics, to files included in those diagnostics.
+   */
+  private validatedFilesBySource: Map> = new Map();
+
+  /**
+   * Mapping from file to number of distinct files for which that file had diagnostics generated.
+   */
+  private validatedFileRefCounter: Map = new Map();
+
   constructor(connection: Connection, context: WorkspaceFolderContext) {
     this.connection = connection;
     this.context = context;
@@ -44,13 +56,15 @@ export class AnsibleLint {
   /**
    * Perform linting for the given document.
    *
-   * In case no errors are found for the current document, then only the cache
-   * is cleared, and not the diagnostics on the client side. That way old
-   * diagnostics will persist until the file is changed. This allows inspecting
-   * more complex errors reported in other files.
+   * In case no errors are found for the current document, and linting has been
+   * performed on opening the document, then only the cache is cleared, and not
+   * the diagnostics on the client side. That way old diagnostics will persist
+   * until the file is changed. This allows inspecting more complex errors
+   * reported in other files.
    */
   public async doValidate(
-    textDocument: TextDocument
+    textDocument: TextDocument,
+    onOpen: boolean
   ): Promise> {
     const docPath = new URL(textDocument.uri).pathname;
     let diagnostics: Map = new Map();
@@ -78,13 +92,19 @@ export class AnsibleLint {
             'Processing files...'
           );
         }
-        const result = await exec(
-          `${settings.ansibleLint.path} --offline --nocolor -f codeclimate ${docPath}`,
-          {
-            encoding: 'utf-8',
-            cwd: workingDirectory,
-          }
+
+        const [command, env] = withInterpreter(
+          settings.ansibleLint.path,
+          `--offline --nocolor -f codeclimate ${docPath}`,
+          settings.python.interpreterPath,
+          settings.python.activationScript
         );
+
+        const result = await exec(command, {
+          encoding: 'utf-8',
+          cwd: workingDirectory,
+          env: env,
+        });
         diagnostics = this.processReport(
           result.stdout,
           await ansibleLintConfigPromise,
@@ -122,11 +142,45 @@ export class AnsibleLint {
       }
     }
 
-    // (re-)set validation cache for file that triggered validation
-    this.validationCache.set(textDocument.uri, new IntervalTree());
+    let diagnosedFiles = this.validatedFilesBySource.get(textDocument.uri);
+    if (!diagnosedFiles) {
+      diagnosedFiles = new Set();
+      this.validatedFilesBySource.set(textDocument.uri, diagnosedFiles);
+    }
+
+    const unreferencedFiles = [...diagnosedFiles].filter(
+      (f) => !diagnostics.has(f)
+    );
+
+    for (const fileUri of unreferencedFiles) {
+      diagnosedFiles.delete(fileUri);
+      // decrement files no longer referenced by this source
+      const counter = this.getRefCounter(fileUri) - 1;
+      if (counter <= 0) {
+        // clear diagnostics of files that are no longer referenced
+        this.validationCache.delete(fileUri);
+        this.connection.sendDiagnostics({
+          uri: fileUri,
+          diagnostics: [],
+        });
+        // remove file from reference counter
+        this.validatedFileRefCounter.delete(fileUri);
+      } else {
+        this.validatedFileRefCounter.set(fileUri, counter);
+      }
+    }
 
     for (const [fileUri, fileDiagnostics] of diagnostics) {
-      // (re-)set validation cache for each impacted file
+      // increment and save files referenced by this source
+      if (!diagnosedFiles.has(fileUri)) {
+        diagnosedFiles.add(fileUri);
+        this.validatedFileRefCounter.set(
+          fileUri,
+          this.getRefCounter(fileUri) + 1
+        );
+      }
+
+      // save validation cache for each impacted file
       const diagnosticTree = new IntervalTree();
       this.validationCache.set(fileUri, diagnosticTree);
 
@@ -137,6 +191,19 @@ export class AnsibleLint {
         );
       }
     }
+
+    if (!diagnostics.has(textDocument.uri)) {
+      // in case there are no diagnostics for the file that triggered the
+      // validation, cache & send an empty array in order to clear the validation
+      if (!onOpen) {
+        diagnostics.set(textDocument.uri, []);
+      }
+      this.validationCache.set(
+        textDocument.uri,
+        new IntervalTree()
+      );
+    }
+
     if (progressTracker) {
       progressTracker.done();
     }
@@ -213,7 +280,7 @@ export class AnsibleLint {
     return diagnostics;
   }
 
-  public invalidateCacheItems(
+  public reconcileCacheItems(
     fileUri: string,
     changes: TextDocumentContentChangeEvent[]
   ): void {
@@ -221,18 +288,44 @@ export class AnsibleLint {
     if (diagnosticTree) {
       for (const change of changes) {
         if ('range' in change) {
-          const influencedDiagnostics = diagnosticTree.search([
+          const invalidatedDiagnostics = diagnosticTree.search([
             change.range.start.line,
             change.range.end.line,
           ]);
-          if (influencedDiagnostics) {
-            for (const diagnostic of influencedDiagnostics as Array) {
+          if (invalidatedDiagnostics) {
+            for (const diagnostic of invalidatedDiagnostics as Array) {
               diagnosticTree.remove(
                 [diagnostic.range.start.line, diagnostic.range.end.line],
                 diagnostic
               );
             }
           }
+
+          // determine whether lines have been added or removed by subtracting
+          // change lines count from number of newline characters in the change
+          let displacement = 0;
+          displacement -= change.range.end.line - change.range.start.line;
+          displacement += change.text.match(/\n|\r\n|\r/g)?.length || 0;
+          if (displacement) {
+            const displacedDiagnostics = diagnosticTree.search([
+              change.range.start.line,
+              Number.MAX_SAFE_INTEGER,
+            ]);
+            if (displacedDiagnostics) {
+              for (const diagnostic of displacedDiagnostics as Array) {
+                diagnosticTree.remove(
+                  [diagnostic.range.start.line, diagnostic.range.end.line],
+                  diagnostic
+                );
+                diagnostic.range.start.line += displacement;
+                diagnostic.range.end.line += displacement;
+                diagnosticTree.insert(
+                  [diagnostic.range.start.line, diagnostic.range.end.line],
+                  diagnostic
+                );
+              }
+            }
+          }
         }
       }
     }
@@ -251,6 +344,38 @@ export class AnsibleLint {
     }
   }
 
+  public handleDocumentClosed(fileUri: string): void {
+    const referencedFiles = this.validatedFilesBySource.get(fileUri);
+    if (referencedFiles) {
+      for (const referencedFile of referencedFiles) {
+        const counter = this.getRefCounter(referencedFile) - 1;
+        if (counter <= 0) {
+          // clear diagnostics of files that are no longer referenced
+          this.validationCache.delete(referencedFile);
+          this.connection.sendDiagnostics({
+            uri: referencedFile,
+            diagnostics: [],
+          });
+          // remove file from reference counter
+          this.validatedFileRefCounter.delete(referencedFile);
+        } else {
+          this.validatedFileRefCounter.set(referencedFile, counter);
+        }
+      }
+      // removed the diagnostics source file from tracking
+      this.validatedFilesBySource.delete(fileUri);
+    }
+  }
+
+  private getRefCounter(fileUri: string) {
+    let counter = this.validatedFileRefCounter.get(fileUri);
+    if (counter === undefined) {
+      counter = 0;
+      this.validatedFileRefCounter.set(fileUri, counter);
+    }
+    return counter;
+  }
+
   private async getAnsibleLintConfig(
     uri: string
   ): Promise {
diff --git a/server/src/services/settingsManager.ts b/server/src/services/settingsManager.ts
index ea8539422..ecf5bc258 100644
--- a/server/src/services/settingsManager.ts
+++ b/server/src/services/settingsManager.ts
@@ -15,6 +15,7 @@ export class SettingsManager {
   private defaultSettings: ExtensionSettings = {
     ansible: { path: 'ansible', useFullyQualifiedCollectionNames: true },
     ansibleLint: { enabled: true, path: 'ansible-lint' },
+    python: { interpreterPath: '', activationScript: '' },
   };
   private globalSettings: ExtensionSettings = this.defaultSettings;
 
diff --git a/server/src/utils/misc.ts b/server/src/utils/misc.ts
index ca66439e5..f522affce 100644
--- a/server/src/utils/misc.ts
+++ b/server/src/utils/misc.ts
@@ -2,6 +2,7 @@ import { promises as fs } from 'fs';
 import { URL } from 'url';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { Range } from 'vscode-languageserver-types';
+import * as path from 'path';
 
 export async function fileExists(fileUri: string): Promise {
   return !!(await fs.stat(new URL(fileUri)).catch(() => false));
@@ -25,8 +26,6 @@ export function hasOwnProperty(
 
 /**
  * Checks whether `obj` is a non-null object.
- * @param obj
- * @returns
  */
 export function isObject(
   obj: X
@@ -37,3 +36,44 @@ export function isObject(
 export function insert(str: string, index: number, val: string): string {
   return `${str.substring(0, index)}${val}${str.substring(index)}`;
 }
+
+/**
+ * Adjusts the command and environment in case the interpreter path is provided.
+ */
+export function withInterpreter(
+  executable: string,
+  args: string,
+  interpreterPath: string,
+  activationScript: string
+): [string, NodeJS.ProcessEnv | undefined] {
+  let command = `${executable} ${args}`; // base case
+
+  if (activationScript) {
+    command = `bash -c 'source ${activationScript} && ${executable} ${args}'`;
+    return [command, undefined];
+  }
+
+  if (interpreterPath) {
+    const virtualEnv = path.resolve(interpreterPath, '../..');
+
+    const pathEntry = path.join(virtualEnv, 'bin');
+    if (path.isAbsolute(executable)) {
+      // if both interpreter path and absolute command path are provided, we can
+      // bolster the chances of success by letting the interpreter execute the
+      // command
+      command = `${interpreterPath} ${executable} ${args}`;
+    }
+
+    // emulating virtual environment activation script
+    const envOverride = {
+      VIRTUAL_ENV: virtualEnv,
+      PATH: `${pathEntry}:${process.env.PATH}`,
+    };
+    const newEnv = Object.assign({}, process.env, envOverride);
+    delete newEnv.PYTHONHOME;
+
+    return [command, newEnv];
+  } else {
+    return [command, undefined];
+  }
+}

From 0d568a18abba870745d6340737892b7a35636912 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Sun, 6 Jun 2021 20:34:17 +0200
Subject: [PATCH 054/558] Refarctored validation and extracted validation
 manager. Validation manager tracks references and provides the cache now.

---
 server/src/ansibleLanguageService.ts       |  76 +++----
 server/src/providers/validationProvider.ts |  65 +++---
 server/src/services/ansibleLint.ts         | 172 +---------------
 server/src/services/validationManager.ts   | 221 +++++++++++++++++++++
 4 files changed, 290 insertions(+), 244 deletions(-)
 create mode 100644 server/src/services/validationManager.ts

diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index b180d973f..81260b591 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -1,6 +1,5 @@
 import {
   Connection,
-  Diagnostic,
   DidChangeConfigurationNotification,
   DidChangeWatchedFilesNotification,
   InitializeParams,
@@ -21,6 +20,7 @@ import {
   tokenTypes,
 } from './providers/semanticTokenProvider';
 import { doValidate } from './providers/validationProvider';
+import { ValidationManager } from './services/validationManager';
 import { WorkspaceManager } from './services/workspaceManager';
 
 /**
@@ -36,11 +36,13 @@ export class AnsibleLanguageService {
   private documents: TextDocuments;
 
   private workspaceManager: WorkspaceManager;
+  private validationManager: ValidationManager;
 
   constructor(connection: Connection, documents: TextDocuments) {
     this.connection = connection;
     this.documents = documents;
     this.workspaceManager = new WorkspaceManager(connection);
+    this.validationManager = new ValidationManager(connection, documents);
   }
 
   public initialize(): void {
@@ -131,11 +133,6 @@ export class AnsibleLanguageService {
         await this.workspaceManager.forEachContext((context) =>
           context.documentSettings.handleConfigurationChanged(params)
         );
-
-        // revalidate all open text documents
-        this.documents.all().forEach(async (doc) => {
-          this.sendDiagnostics(await doValidate(doc));
-        });
       } catch (error) {
         this.handleError(error, 'onDidChangeConfiguration');
       }
@@ -145,12 +142,13 @@ export class AnsibleLanguageService {
       try {
         const context = this.workspaceManager.getContext(e.document.uri);
         if (context) {
-          this.sendDiagnostics(
-            await doValidate(e.document, {
-              linter: context.ansibleLint,
-              quick: false,
-              onOpen: true,
-            })
+          // perform full validation
+          await doValidate(
+            e.document,
+            this.validationManager,
+            true,
+            false,
+            context
           );
         }
       } catch (error) {
@@ -160,10 +158,10 @@ export class AnsibleLanguageService {
 
     this.documents.onDidClose((e) => {
       try {
+        this.validationManager.handleDocumentClosed(e.document.uri);
         const context = this.workspaceManager.getContext(e.document.uri);
         if (context) {
           context.documentSettings.handleDocumentClosed(e.document.uri);
-          context.ansibleLint.handleDocumentClosed(e.document.uri);
         }
       } catch (error) {
         this.handleError(error, 'onDidClose');
@@ -184,12 +182,13 @@ export class AnsibleLanguageService {
       try {
         const context = this.workspaceManager.getContext(e.document.uri);
         if (context) {
-          this.sendDiagnostics(
-            await doValidate(e.document, {
-              linter: context.ansibleLint,
-              quick: false,
-              onOpen: false,
-            })
+          // perform full validation
+          await doValidate(
+            e.document,
+            this.validationManager,
+            false,
+            false,
+            context
           );
         }
       } catch (error) {
@@ -199,13 +198,10 @@ export class AnsibleLanguageService {
 
     this.connection.onDidChangeTextDocument((e) => {
       try {
-        const context = this.workspaceManager.getContext(e.textDocument.uri);
-        if (context) {
-          context.ansibleLint.reconcileCacheItems(
-            e.textDocument.uri,
-            e.contentChanges
-          );
-        }
+        this.validationManager.reconcileCacheItems(
+          e.textDocument.uri,
+          e.contentChanges
+        );
       } catch (error) {
         this.handleError(error, 'onDidChangeTextDocument');
       }
@@ -213,18 +209,13 @@ export class AnsibleLanguageService {
 
     this.documents.onDidChangeContent(async (e) => {
       try {
-        const context = this.workspaceManager.getContext(e.document.uri);
-        // depending on whether we have the context, we either validate with
-        // Ansible-lint or perform simple YAML validation
-        const diagnostics = await (context
-          ? doValidate(e.document, {
-              linter: context.ansibleLint,
-              quick: true,
-              onOpen: false,
-            })
-          : doValidate(e.document));
-
-        this.sendDiagnostics(diagnostics);
+        await doValidate(
+          e.document,
+          this.validationManager,
+          false,
+          true,
+          this.workspaceManager.getContext(e.document.uri)
+        );
       } catch (error) {
         this.handleError(error, 'onDidChangeContent');
       }
@@ -336,13 +327,4 @@ export class AnsibleLanguageService {
       this.connection.console.error(leadMessage + JSON.stringify(error));
     }
   }
-
-  private sendDiagnostics(diagnostics: Map) {
-    for (const [fileUri, fileDiagnostics] of diagnostics) {
-      this.connection.sendDiagnostics({
-        uri: fileUri,
-        diagnostics: fileDiagnostics,
-      });
-    }
-  }
 }
diff --git a/server/src/providers/validationProvider.ts b/server/src/providers/validationProvider.ts
index f2e6f9574..5c6b8d684 100644
--- a/server/src/providers/validationProvider.ts
+++ b/server/src/providers/validationProvider.ts
@@ -9,7 +9,8 @@ import {
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
-import { AnsibleLint } from '../services/ansibleLint';
+import { ValidationManager } from '../services/validationManager';
+import { WorkspaceFolderContext } from '../services/workspaceManager';
 
 /**
  * Validates the given document.
@@ -20,38 +21,44 @@ import { AnsibleLint } from '../services/ansibleLint';
  */
 export async function doValidate(
   textDocument: TextDocument,
-  linterParams?: {
-    linter: AnsibleLint;
-    quick: boolean;
-    onOpen: boolean;
-  }
+  validationManager: ValidationManager,
+  onOpen = false,
+  quick = true,
+  context?: WorkspaceFolderContext
 ): Promise> {
-  if (linterParams) {
-    if (linterParams.quick) {
-      const diagnostics = getYamlValidation(textDocument);
-      const lintDiagnostics = linterParams.linter.getValidationFromCache(
-        textDocument.uri
-      );
-      if (lintDiagnostics) {
-        diagnostics.push(...lintDiagnostics);
-      }
-      return new Map([[textDocument.uri, diagnostics]]);
-    } else {
-      const diagnostics = await linterParams.linter.doValidate(
-        textDocument,
-        linterParams.onOpen
-      );
-      for (const [fileUri, fileDiagnostics] of diagnostics) {
-        if (textDocument.uri === fileUri) {
-          // ensure that regular diagnostics are still present
-          fileDiagnostics.push(...getYamlValidation(textDocument));
-        }
-      }
-      return diagnostics;
+  let diagnosticsByFile;
+  if (quick || !context) {
+    // get validation from cache
+    diagnosticsByFile =
+      validationManager.getValidationFromCache(textDocument.uri) ||
+      new Map();
+    if (!diagnosticsByFile.has(textDocument.uri)) {
+      // In case there are no diagnostics for the file that triggered the
+      // validation, set an empty array in order to clear the validation.
+      diagnosticsByFile.set(textDocument.uri, []);
     }
   } else {
-    return new Map([[textDocument.uri, getYamlValidation(textDocument)]]);
+    // full validation with ansible-lint
+    diagnosticsByFile = await context.ansibleLint.doValidate(textDocument);
+    if (!diagnosticsByFile.has(textDocument.uri) && !onOpen) {
+      // In case there are no diagnostics for the file that triggered the
+      // validation, set an empty array in order to clear the validation. If the
+      // validation happened on opening the document, this step is skipped. That
+      // way old diagnostics will persist until the file is changed/saved. This
+      // allows inspecting more complex errors reported in other files.
+      diagnosticsByFile.set(textDocument.uri, []);
+    }
+    validationManager.cacheDiagnostics(textDocument.uri, diagnosticsByFile);
+  }
+
+  // attach quick validation for the inspected file
+  for (const [fileUri, fileDiagnostics] of diagnosticsByFile) {
+    if (textDocument.uri === fileUri) {
+      fileDiagnostics.push(...getYamlValidation(textDocument));
+    }
   }
+  validationManager.processDiagnostics(textDocument.uri, diagnosticsByFile);
+  return diagnosticsByFile;
 }
 
 function getYamlValidation(textDocument: TextDocument): Diagnostic[] {
diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
index 055d76aa9..f3dd200eb 100644
--- a/server/src/services/ansibleLint.ts
+++ b/server/src/services/ansibleLint.ts
@@ -1,9 +1,8 @@
-import IntervalTree from '@flatten-js/interval-tree';
 import * as child_process from 'child_process';
-import { promises as fs } from 'fs';
 import { ExecException } from 'child_process';
-import { URL } from 'url';
+import { promises as fs } from 'fs';
 import * as path from 'path';
+import { URL } from 'url';
 import { promisify } from 'util';
 import {
   Connection,
@@ -12,12 +11,11 @@ import {
   DidChangeWatchedFilesParams,
   Position,
   Range,
-  TextDocumentContentChangeEvent,
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
 import { IAnsibleLintConfig } from '../interfaces/ansibleLintConfig';
-import { fileExists, withInterpreter, hasOwnProperty } from '../utils/misc';
+import { fileExists, hasOwnProperty, withInterpreter } from '../utils/misc';
 import { WorkspaceFolderContext } from './workspaceManager';
 const exec = promisify(child_process.exec);
 
@@ -34,18 +32,6 @@ export class AnsibleLint {
 
   private configCache: Map = new Map();
 
-  private validationCache: Map> = new Map();
-
-  /**
-   * Mapping from file that generated diagnostics, to files included in those diagnostics.
-   */
-  private validatedFilesBySource: Map> = new Map();
-
-  /**
-   * Mapping from file to number of distinct files for which that file had diagnostics generated.
-   */
-  private validatedFileRefCounter: Map = new Map();
-
   constructor(connection: Connection, context: WorkspaceFolderContext) {
     this.connection = connection;
     this.context = context;
@@ -63,8 +49,7 @@ export class AnsibleLint {
    * reported in other files.
    */
   public async doValidate(
-    textDocument: TextDocument,
-    onOpen: boolean
+    textDocument: TextDocument
   ): Promise> {
     const docPath = new URL(textDocument.uri).pathname;
     let diagnostics: Map = new Map();
@@ -142,68 +127,6 @@ export class AnsibleLint {
       }
     }
 
-    let diagnosedFiles = this.validatedFilesBySource.get(textDocument.uri);
-    if (!diagnosedFiles) {
-      diagnosedFiles = new Set();
-      this.validatedFilesBySource.set(textDocument.uri, diagnosedFiles);
-    }
-
-    const unreferencedFiles = [...diagnosedFiles].filter(
-      (f) => !diagnostics.has(f)
-    );
-
-    for (const fileUri of unreferencedFiles) {
-      diagnosedFiles.delete(fileUri);
-      // decrement files no longer referenced by this source
-      const counter = this.getRefCounter(fileUri) - 1;
-      if (counter <= 0) {
-        // clear diagnostics of files that are no longer referenced
-        this.validationCache.delete(fileUri);
-        this.connection.sendDiagnostics({
-          uri: fileUri,
-          diagnostics: [],
-        });
-        // remove file from reference counter
-        this.validatedFileRefCounter.delete(fileUri);
-      } else {
-        this.validatedFileRefCounter.set(fileUri, counter);
-      }
-    }
-
-    for (const [fileUri, fileDiagnostics] of diagnostics) {
-      // increment and save files referenced by this source
-      if (!diagnosedFiles.has(fileUri)) {
-        diagnosedFiles.add(fileUri);
-        this.validatedFileRefCounter.set(
-          fileUri,
-          this.getRefCounter(fileUri) + 1
-        );
-      }
-
-      // save validation cache for each impacted file
-      const diagnosticTree = new IntervalTree();
-      this.validationCache.set(fileUri, diagnosticTree);
-
-      for (const diagnostic of fileDiagnostics) {
-        diagnosticTree.insert(
-          [diagnostic.range.start.line, diagnostic.range.end.line],
-          diagnostic
-        );
-      }
-    }
-
-    if (!diagnostics.has(textDocument.uri)) {
-      // in case there are no diagnostics for the file that triggered the
-      // validation, cache & send an empty array in order to clear the validation
-      if (!onOpen) {
-        diagnostics.set(textDocument.uri, []);
-      }
-      this.validationCache.set(
-        textDocument.uri,
-        new IntervalTree()
-      );
-    }
-
     if (progressTracker) {
       progressTracker.done();
     }
@@ -280,61 +203,6 @@ export class AnsibleLint {
     return diagnostics;
   }
 
-  public reconcileCacheItems(
-    fileUri: string,
-    changes: TextDocumentContentChangeEvent[]
-  ): void {
-    const diagnosticTree = this.validationCache.get(fileUri);
-    if (diagnosticTree) {
-      for (const change of changes) {
-        if ('range' in change) {
-          const invalidatedDiagnostics = diagnosticTree.search([
-            change.range.start.line,
-            change.range.end.line,
-          ]);
-          if (invalidatedDiagnostics) {
-            for (const diagnostic of invalidatedDiagnostics as Array) {
-              diagnosticTree.remove(
-                [diagnostic.range.start.line, diagnostic.range.end.line],
-                diagnostic
-              );
-            }
-          }
-
-          // determine whether lines have been added or removed by subtracting
-          // change lines count from number of newline characters in the change
-          let displacement = 0;
-          displacement -= change.range.end.line - change.range.start.line;
-          displacement += change.text.match(/\n|\r\n|\r/g)?.length || 0;
-          if (displacement) {
-            const displacedDiagnostics = diagnosticTree.search([
-              change.range.start.line,
-              Number.MAX_SAFE_INTEGER,
-            ]);
-            if (displacedDiagnostics) {
-              for (const diagnostic of displacedDiagnostics as Array) {
-                diagnosticTree.remove(
-                  [diagnostic.range.start.line, diagnostic.range.end.line],
-                  diagnostic
-                );
-                diagnostic.range.start.line += displacement;
-                diagnostic.range.end.line += displacement;
-                diagnosticTree.insert(
-                  [diagnostic.range.start.line, diagnostic.range.end.line],
-                  diagnostic
-                );
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-
-  public getValidationFromCache(fileUri: string): Diagnostic[] | undefined {
-    return this.validationCache.get(fileUri)?.values;
-  }
-
   public handleWatchedDocumentChange(
     params: DidChangeWatchedFilesParams
   ): void {
@@ -344,38 +212,6 @@ export class AnsibleLint {
     }
   }
 
-  public handleDocumentClosed(fileUri: string): void {
-    const referencedFiles = this.validatedFilesBySource.get(fileUri);
-    if (referencedFiles) {
-      for (const referencedFile of referencedFiles) {
-        const counter = this.getRefCounter(referencedFile) - 1;
-        if (counter <= 0) {
-          // clear diagnostics of files that are no longer referenced
-          this.validationCache.delete(referencedFile);
-          this.connection.sendDiagnostics({
-            uri: referencedFile,
-            diagnostics: [],
-          });
-          // remove file from reference counter
-          this.validatedFileRefCounter.delete(referencedFile);
-        } else {
-          this.validatedFileRefCounter.set(referencedFile, counter);
-        }
-      }
-      // removed the diagnostics source file from tracking
-      this.validatedFilesBySource.delete(fileUri);
-    }
-  }
-
-  private getRefCounter(fileUri: string) {
-    let counter = this.validatedFileRefCounter.get(fileUri);
-    if (counter === undefined) {
-      counter = 0;
-      this.validatedFileRefCounter.set(fileUri, counter);
-    }
-    return counter;
-  }
-
   private async getAnsibleLintConfig(
     uri: string
   ): Promise {
diff --git a/server/src/services/validationManager.ts b/server/src/services/validationManager.ts
new file mode 100644
index 000000000..736e942d1
--- /dev/null
+++ b/server/src/services/validationManager.ts
@@ -0,0 +1,221 @@
+import IntervalTree from '@flatten-js/interval-tree';
+import {
+  Connection,
+  Diagnostic,
+  TextDocumentContentChangeEvent,
+  TextDocuments,
+} from 'vscode-languageserver';
+import { TextDocument } from 'vscode-languageserver-textdocument';
+
+/**
+ * Provides cache for selected diagnostics.
+ *
+ * Keeps track of origins of diagnostics so that reported items can be cleared
+ * up, when all its origins are closed. This allows the plugin to report
+ * validation issues only on what is currently open, taking into account that
+ * diagnostics generated for one file can have items that concern other files.
+ */
+export class ValidationManager {
+  private connection: Connection;
+  private documents: TextDocuments;
+
+  private validationCache: Map> = new Map();
+
+  /**
+   * Mapping from file that generated diagnostics (origin), to files included in
+   * those diagnostics.
+   */
+  private referencedFilesByOrigin: Map> = new Map();
+
+  /**
+   * Mapping from file to number of distinct files (origins) for which that file
+   * had diagnostics generated.
+   */
+  private referencedFileRefCounter: Map = new Map();
+
+  constructor(connection: Connection, documents: TextDocuments) {
+    this.connection = connection;
+    this.documents = documents;
+  }
+
+  /**
+   * Processes changes in diagnostics and sends the diagnostics to the client.
+   */
+  public processDiagnostics(
+    originFileUri: string,
+    diagnosticsByFile: Map
+  ): void {
+    if (!this.documents.get(originFileUri)) {
+      // the origin file has been closed before the diagnostics were delivered
+      return;
+    }
+    let referencedFiles = this.referencedFilesByOrigin.get(originFileUri);
+    if (!referencedFiles) {
+      referencedFiles = new Set();
+      this.referencedFilesByOrigin.set(originFileUri, referencedFiles);
+    }
+
+    const unreferencedFiles = [...referencedFiles].filter(
+      (f) => !diagnosticsByFile.has(f)
+    );
+
+    for (const fileUri of unreferencedFiles) {
+      // this file is no longer referenced by origin
+      referencedFiles.delete(fileUri);
+      this.handleFileUnreferenced(fileUri);
+    }
+
+    for (const [fileUri] of diagnosticsByFile) {
+      if (!referencedFiles.has(fileUri)) {
+        // this file has not been referenced by origin before
+        referencedFiles.add(fileUri);
+        this.handleFileReferenced(fileUri);
+      }
+    }
+
+    // send the diagnostics to the client
+    for (const [fileUri, fileDiagnostics] of diagnosticsByFile) {
+      this.connection.sendDiagnostics({
+        uri: fileUri,
+        diagnostics: fileDiagnostics,
+      });
+    }
+  }
+
+  /**
+   * Saves the diagnostics in a cache for later re-use in quick validation.
+   */
+  public cacheDiagnostics(
+    originFileUri: string,
+    cacheableDiagnostics: Map
+  ): void {
+    if (!this.documents.get(originFileUri)) {
+      // the origin file has been closed before the diagnostics were delivered
+      return;
+    }
+    for (const [fileUri, fileDiagnostics] of cacheableDiagnostics) {
+      // save validation cache for each impacted file
+      const diagnosticTree = new IntervalTree();
+      this.validationCache.set(fileUri, diagnosticTree);
+
+      for (const diagnostic of fileDiagnostics) {
+        diagnosticTree.insert(
+          [diagnostic.range.start.line, diagnostic.range.end.line],
+          diagnostic
+        );
+      }
+    }
+  }
+
+  public reconcileCacheItems(
+    fileUri: string,
+    changes: TextDocumentContentChangeEvent[]
+  ): void {
+    const diagnosticTree = this.validationCache.get(fileUri);
+    if (diagnosticTree) {
+      for (const change of changes) {
+        if ('range' in change) {
+          const invalidatedDiagnostics = diagnosticTree.search([
+            change.range.start.line,
+            change.range.end.line,
+          ]);
+          if (invalidatedDiagnostics) {
+            for (const diagnostic of invalidatedDiagnostics as Array) {
+              diagnosticTree.remove(
+                [diagnostic.range.start.line, diagnostic.range.end.line],
+                diagnostic
+              );
+            }
+          }
+
+          // determine whether lines have been added or removed by subtracting
+          // change lines count from number of newline characters in the change
+          let displacement = 0;
+          displacement -= change.range.end.line - change.range.start.line;
+          displacement += change.text.match(/\n|\r\n|\r/g)?.length || 0;
+          if (displacement) {
+            const displacedDiagnostics = diagnosticTree.search([
+              change.range.start.line,
+              Number.MAX_SAFE_INTEGER,
+            ]);
+            if (displacedDiagnostics) {
+              for (const diagnostic of displacedDiagnostics as Array) {
+                diagnosticTree.remove(
+                  [diagnostic.range.start.line, diagnostic.range.end.line],
+                  diagnostic
+                );
+                diagnostic.range.start.line += displacement;
+                diagnostic.range.end.line += displacement;
+                diagnosticTree.insert(
+                  [diagnostic.range.start.line, diagnostic.range.end.line],
+                  diagnostic
+                );
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  public getValidationFromCache(
+    fileUri: string
+  ): Map | undefined {
+    const referencedFiles = this.referencedFilesByOrigin.get(fileUri);
+    if (referencedFiles) {
+      // hit on origin of diagnostics
+      const diagnosticsByFile: Map = new Map();
+      for (const referencedFileUri of referencedFiles) {
+        const diagnostics = this.validationCache.get(referencedFileUri);
+        if (diagnostics) {
+          diagnosticsByFile.set(referencedFileUri, diagnostics.values);
+        }
+      }
+      return diagnosticsByFile;
+    } else {
+      const diagnostics = this.validationCache.get(fileUri);
+      if (diagnostics) {
+        // direct hit on given file
+        return new Map([[fileUri, diagnostics.values]]);
+      }
+    }
+  }
+
+  public handleDocumentClosed(fileUri: string): void {
+    const referencedFiles = this.referencedFilesByOrigin.get(fileUri);
+    if (referencedFiles) {
+      referencedFiles.forEach((f) => this.handleFileUnreferenced(f));
+      // remove the diagnostics origin file from tracking
+      this.referencedFilesByOrigin.delete(fileUri);
+    }
+  }
+
+  private handleFileReferenced(fileUri: string) {
+    this.referencedFileRefCounter.set(fileUri, this.getRefCounter(fileUri) + 1);
+  }
+
+  private handleFileUnreferenced(fileUri: string) {
+    const counter = this.getRefCounter(fileUri) - 1;
+    if (counter <= 0) {
+      // clear diagnostics of files that are no longer referenced
+      this.validationCache.delete(fileUri);
+      this.connection.sendDiagnostics({
+        uri: fileUri,
+        diagnostics: [],
+      });
+      // remove file from reference counter
+      this.referencedFileRefCounter.delete(fileUri);
+    } else {
+      this.referencedFileRefCounter.set(fileUri, counter);
+    }
+  }
+
+  private getRefCounter(fileUri: string) {
+    let counter = this.referencedFileRefCounter.get(fileUri);
+    if (counter === undefined) {
+      counter = 0;
+      this.referencedFileRefCounter.set(fileUri, counter);
+    }
+    return counter;
+  }
+}

From 6b6e2995695b889e463cd8cc1154f413d67246f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Sun, 6 Jun 2021 21:28:32 +0200
Subject: [PATCH 055/558] Removed the distinction whether validation is
 performed on opening a file.

---
 server/src/ansibleLanguageService.ts       | 17 ++---------------
 server/src/providers/validationProvider.ts | 20 ++++++--------------
 2 files changed, 8 insertions(+), 29 deletions(-)

diff --git a/server/src/ansibleLanguageService.ts b/server/src/ansibleLanguageService.ts
index 81260b591..abd22d6c6 100644
--- a/server/src/ansibleLanguageService.ts
+++ b/server/src/ansibleLanguageService.ts
@@ -143,13 +143,7 @@ export class AnsibleLanguageService {
         const context = this.workspaceManager.getContext(e.document.uri);
         if (context) {
           // perform full validation
-          await doValidate(
-            e.document,
-            this.validationManager,
-            true,
-            false,
-            context
-          );
+          await doValidate(e.document, this.validationManager, false, context);
         }
       } catch (error) {
         this.handleError(error, 'onDidOpen');
@@ -183,13 +177,7 @@ export class AnsibleLanguageService {
         const context = this.workspaceManager.getContext(e.document.uri);
         if (context) {
           // perform full validation
-          await doValidate(
-            e.document,
-            this.validationManager,
-            false,
-            false,
-            context
-          );
+          await doValidate(e.document, this.validationManager, false, context);
         }
       } catch (error) {
         this.handleError(error, 'onDidSave');
@@ -212,7 +200,6 @@ export class AnsibleLanguageService {
         await doValidate(
           e.document,
           this.validationManager,
-          false,
           true,
           this.workspaceManager.getContext(e.document.uri)
         );
diff --git a/server/src/providers/validationProvider.ts b/server/src/providers/validationProvider.ts
index 5c6b8d684..51d645af6 100644
--- a/server/src/providers/validationProvider.ts
+++ b/server/src/providers/validationProvider.ts
@@ -22,7 +22,6 @@ import { WorkspaceFolderContext } from '../services/workspaceManager';
 export async function doValidate(
   textDocument: TextDocument,
   validationManager: ValidationManager,
-  onOpen = false,
   quick = true,
   context?: WorkspaceFolderContext
 ): Promise> {
@@ -32,25 +31,18 @@ export async function doValidate(
     diagnosticsByFile =
       validationManager.getValidationFromCache(textDocument.uri) ||
       new Map();
-    if (!diagnosticsByFile.has(textDocument.uri)) {
-      // In case there are no diagnostics for the file that triggered the
-      // validation, set an empty array in order to clear the validation.
-      diagnosticsByFile.set(textDocument.uri, []);
-    }
   } else {
     // full validation with ansible-lint
     diagnosticsByFile = await context.ansibleLint.doValidate(textDocument);
-    if (!diagnosticsByFile.has(textDocument.uri) && !onOpen) {
-      // In case there are no diagnostics for the file that triggered the
-      // validation, set an empty array in order to clear the validation. If the
-      // validation happened on opening the document, this step is skipped. That
-      // way old diagnostics will persist until the file is changed/saved. This
-      // allows inspecting more complex errors reported in other files.
-      diagnosticsByFile.set(textDocument.uri, []);
-    }
     validationManager.cacheDiagnostics(textDocument.uri, diagnosticsByFile);
   }
 
+  if (!diagnosticsByFile.has(textDocument.uri)) {
+    // In case there are no diagnostics for the file that triggered the
+    // validation, set an empty array in order to clear the validation.
+    diagnosticsByFile.set(textDocument.uri, []);
+  }
+
   // attach quick validation for the inspected file
   for (const [fileUri, fileDiagnostics] of diagnosticsByFile) {
     if (textDocument.uri === fileUri) {

From 41d16fe5382fda919330e5239ec0ccdfb6a36d9f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Sun, 6 Jun 2021 23:54:47 +0200
Subject: [PATCH 056/558] More ordinary keyword highlighting .

---
 server/src/providers/semanticTokenProvider.ts | 24 +++++++++++--------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/server/src/providers/semanticTokenProvider.ts b/server/src/providers/semanticTokenProvider.ts
index 9fabd2884..2fcc72531 100644
--- a/server/src/providers/semanticTokenProvider.ts
+++ b/server/src/providers/semanticTokenProvider.ts
@@ -6,7 +6,7 @@ import {
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
-import { Node, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
+import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
 import { DocsLibrary, IModuleMetadata } from '../services/docsLibrary';
 import {
   blockKeywords,
@@ -110,7 +110,7 @@ async function markSemanticTokens(
                 markModuleParameters(pair.value, module, builder, document);
               }
             } else {
-              markOrdinaryKey(pair.key, builder, document);
+              markAllNestedKeysAsOrdinary(pair, builder, document);
             }
           }
 
@@ -118,7 +118,9 @@ async function markSemanticTokens(
           // tasks don't have any deeper structure
           continue;
         } else {
-          markOrdinaryKey(pair.key, builder, document);
+          markAllNestedKeysAsOrdinary(pair, builder, document);
+          // this pair has been completely processed
+          continue;
         }
       }
 
@@ -181,14 +183,16 @@ function markAllNestedKeysAsOrdinary(
   builder: SemanticTokensBuilder,
   document: TextDocument
 ) {
-  if (node instanceof YAMLMap) {
+  if (node instanceof Pair) {
+    if (node.key instanceof Scalar) {
+      markOrdinaryKey(node.key, builder, document);
+    }
+    if (node.value instanceof Node) {
+      markAllNestedKeysAsOrdinary(node.value, builder, document);
+    }
+  } else if (node instanceof YAMLMap) {
     for (const pair of node.items) {
-      if (pair.key instanceof Scalar) {
-        markOrdinaryKey(pair.key, builder, document);
-      }
-      if (pair.value instanceof Node) {
-        markAllNestedKeysAsOrdinary(pair.value, builder, document);
-      }
+      markAllNestedKeysAsOrdinary(pair, builder, document);
     }
   } else if (node instanceof YAMLSeq) {
     for (const item of node.items) {

From 28d54d395f96bac063a81f16147ec284b4db1226 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Tue, 6 Jul 2021 22:23:06 +0200
Subject: [PATCH 057/558] Added arguments configuration for ansible-lint
 ansible-lint is now launched at the root of the workspace. Added description
 to ansible-lint diagnostics.

---
 package.json                               |  8 +++++++-
 server/src/interfaces/extensionSettings.ts |  2 +-
 server/src/services/ansibleLint.ts         | 24 ++++++++++++++--------
 server/src/services/settingsManager.ts     |  8 +++++---
 4 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/package.json b/package.json
index 62798f91c..3fc10904c 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
   "description": "Ansible language support",
   "author": "Tomasz Maciążek",
   "license": "MIT",
-  "version": "0.0.2",
+  "version": "0.0.3",
   "repository": {
     "type": "git",
     "url": "https://github.com/tomaciazek/vscode-ansible.git"
@@ -49,6 +49,12 @@
           "default": "ansible-lint",
           "description": "Path to the ansible-lint executable."
         },
+        "ansible.ansibleLint.arguments": {
+          "scope": "resource",
+          "type": "string",
+          "default": "",
+          "description": "Command line arguments to be passed to ansible-lint."
+        },
         "ansible.python.interpreterPath": {
           "scope": "resource",
           "type": "string",
diff --git a/server/src/interfaces/extensionSettings.ts b/server/src/interfaces/extensionSettings.ts
index ad0931522..c9e6d3b8e 100644
--- a/server/src/interfaces/extensionSettings.ts
+++ b/server/src/interfaces/extensionSettings.ts
@@ -1,5 +1,5 @@
 export interface ExtensionSettings {
   ansible: { path: string; useFullyQualifiedCollectionNames: boolean };
-  ansibleLint: { enabled: boolean; path: string };
+  ansibleLint: { enabled: boolean; path: string; arguments: string };
   python: { interpreterPath: string; activationScript: string };
 }
diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts
index f3dd200eb..4709ed304 100644
--- a/server/src/services/ansibleLint.ts
+++ b/server/src/services/ansibleLint.ts
@@ -62,7 +62,7 @@ export class AnsibleLint {
       textDocument.uri
     );
 
-    const workingDirectory = path.dirname(new URL(textDocument.uri).pathname);
+    const workingDirectory = new URL(this.context.workspaceFolder.uri).pathname;
 
     try {
       const settings = await this.context.documentSettings.get(
@@ -80,7 +80,7 @@ export class AnsibleLint {
 
         const [command, env] = withInterpreter(
           settings.ansibleLint.path,
-          `--offline --nocolor -f codeclimate ${docPath}`,
+          `${settings.ansibleLint.arguments} --offline --nocolor -f codeclimate ${docPath}`,
           settings.python.interpreterPath,
           settings.python.activationScript
         );
@@ -108,11 +108,15 @@ export class AnsibleLint {
           stderr: string;
         };
         if (execError.code === 2) {
-          diagnostics = this.processReport(
-            execError.stdout,
-            await ansibleLintConfigPromise,
-            workingDirectory
-          );
+          try {
+            diagnostics = this.processReport(
+              execError.stdout,
+              await ansibleLintConfigPromise,
+              workingDirectory
+            );
+          } catch (error) {
+            this.connection.window.showErrorMessage(execError.message);
+          }
         } else {
           this.connection.window.showErrorMessage(execError.message);
         }
@@ -191,8 +195,12 @@ export class AnsibleLint {
             fileDiagnostics = [];
             diagnostics.set(locationUri, fileDiagnostics);
           }
+          let message: string = item.check_name;
+          if (item.description) {
+            message += `\nDescription: ${item.description}`;
+          }
           fileDiagnostics.push({
-            message: item.check_name,
+            message: message,
             range: range || Range.create(0, 0, 0, 0),
             severity: severity,
             source: 'Ansible',
diff --git a/server/src/services/settingsManager.ts b/server/src/services/settingsManager.ts
index ecf5bc258..fd5ecfc29 100644
--- a/server/src/services/settingsManager.ts
+++ b/server/src/services/settingsManager.ts
@@ -14,7 +14,7 @@ export class SettingsManager {
 
   private defaultSettings: ExtensionSettings = {
     ansible: { path: 'ansible', useFullyQualifiedCollectionNames: true },
-    ansibleLint: { enabled: true, path: 'ansible-lint' },
+    ansibleLint: { enabled: true, path: 'ansible-lint', arguments: '' },
     python: { interpreterPath: '', activationScript: '' },
   };
   private globalSettings: ExtensionSettings = this.defaultSettings;
@@ -59,8 +59,10 @@ export class SettingsManager {
     if (this.clientSupportsConfigRequests) {
       // find configuration change handlers to fire
 
-      const newDocumentSettings: Map> =
-        new Map();
+      const newDocumentSettings: Map<
+        string,
+        Thenable
+      > = new Map();
       const handlersToFire: { (): void }[] = [];
 
       for (const [uri, handler] of this.configurationChangeHandlers) {

From 8d8fe7938e19e329553486185ae14285b310ca18 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Tue, 6 Jul 2021 22:27:08 +0200
Subject: [PATCH 058/558] Implemented sys.path discovery. WIP: Reading runtime
 plugin config and redirections.

---
 server/src/providers/validationProvider.ts |  11 +-
 server/src/services/ansibleConfig.ts       |  31 ++++
 server/src/services/docsFinder.ts          | 181 +++++++++++++++++----
 server/src/services/docsLibrary.ts         |  43 ++++-
 server/src/utils/misc.ts                   |  11 +-
 5 files changed, 230 insertions(+), 47 deletions(-)

diff --git a/server/src/providers/validationProvider.ts b/server/src/providers/validationProvider.ts
index 51d645af6..eeecb362f 100644
--- a/server/src/providers/validationProvider.ts
+++ b/server/src/providers/validationProvider.ts
@@ -34,15 +34,14 @@ export async function doValidate(
   } else {
     // full validation with ansible-lint
     diagnosticsByFile = await context.ansibleLint.doValidate(textDocument);
+    if (!diagnosticsByFile.has(textDocument.uri)) {
+      // In case there are no diagnostics for the file that triggered the
+      // validation, set an empty array in order to clear the validation.
+      diagnosticsByFile.set(textDocument.uri, []);
+    }
     validationManager.cacheDiagnostics(textDocument.uri, diagnosticsByFile);
   }
 
-  if (!diagnosticsByFile.has(textDocument.uri)) {
-    // In case there are no diagnostics for the file that triggered the
-    // validation, set an empty array in order to clear the validation.
-    diagnosticsByFile.set(textDocument.uri, []);
-  }
-
   // attach quick validation for the inspected file
   for (const [fileUri, fileDiagnostics] of diagnosticsByFile) {
     if (textDocument.uri === fileUri) {
diff --git a/server/src/services/ansibleConfig.ts b/server/src/services/ansibleConfig.ts
index 9004217ab..1cf6c67f1 100644
--- a/server/src/services/ansibleConfig.ts
+++ b/server/src/services/ansibleConfig.ts
@@ -12,6 +12,7 @@ export class AnsibleConfig {
   private context: WorkspaceFolderContext;
   private _collection_paths: string[] = [];
   private _module_locations: string[] = [];
+  private _ansible_location = '';
 
   constructor(connection: Connection, context: WorkspaceFolderContext) {
     this.connection = connection;
@@ -24,6 +25,7 @@ export class AnsibleConfig {
         this.context.workspaceFolder.uri
       );
 
+      // get Ansible configuration
       const [ansibleConfigCommand, ansibleConfigEnv] = withInterpreter(
         `${settings.ansible.path}-config`,
         'dump',
@@ -44,6 +46,7 @@ export class AnsibleConfig {
       );
       this._collection_paths = parsePythonStringArray(config.COLLECTIONS_PATHS);
 
+      // get Ansible basic information
       const [ansibleCommand, ansibleEnv] = withInterpreter(
         `${settings.ansible.path}`,
         '--version',
@@ -63,6 +66,30 @@ export class AnsibleConfig {
       this._module_locations.push(
         path.resolve(versionInfo['ansible python module location'], 'modules')
       );
+
+      this._ansible_location = versionInfo['ansible python module location'];
+
+      // get Python sys.path
+      const [pythonPathCommand, pythonPathEnv] = withInterpreter(
+        'python',
+        ' -c "import sys; print(sys.path, end=\\"\\")"',
+        settings.python.interpreterPath,
+        settings.python.activationScript
+      );
+
+      const pythonPathResult = child_process.execSync(pythonPathCommand, {
+        encoding: 'utf-8',
+        env: pythonPathEnv,
+      });
+      this._collection_paths.push(...parsePythonStringArray(pythonPathResult));
+
+      /** 
+       * TODO: Implement the 'ansible.builtin' artificial collection
+       *         if collection_name == 'ansible.builtin':
+            # ansible.builtin is a synthetic collection, get its routing config from the Ansible distro
+            ansible_pkg_path = os.path.dirname(import_module('ansible').__file__)
+            metadata_path = os.path.join(ansible_pkg_path, 'config/ansible_builtin_runtime.yml')
+       */
     } catch (error) {
       if (error instanceof Error) {
         this.connection.window.showErrorMessage(error.message);
@@ -81,6 +108,10 @@ export class AnsibleConfig {
   get module_locations(): string[] {
     return this._module_locations;
   }
+
+  public get ansible_location(): string {
+    return this._ansible_location;
+  }
 }
 
 function parsePythonStringArray(array: string) {
diff --git a/server/src/services/docsFinder.ts b/server/src/services/docsFinder.ts
index 0a209cdea..7f54a6b30 100644
--- a/server/src/services/docsFinder.ts
+++ b/server/src/services/docsFinder.ts
@@ -2,11 +2,19 @@ import * as fs from 'fs';
 import * as path from 'path';
 import { parseDocument } from 'yaml';
 import { YAMLError } from 'yaml/util';
-import { IModuleMetadata } from './docsLibrary';
+import {
+  IModuleMetadata,
+  IPluginRoute,
+  IPluginRoutesByName,
+  IPluginRoutesByType,
+  IPluginRoutingByCollection,
+  IPluginTypes,
+} from './docsLibrary';
 import globby = require('globby');
+import { hasOwnProperty, isObject } from '../utils/misc';
 
 export class DocsFinder {
-  public static async searchDirectory(
+  public static async findDocumentation(
     dir: string,
     kind:
       | 'builtin'
@@ -26,43 +34,154 @@ export class DocsFinder {
         ]);
         break;
       case 'collection':
-        files = await globby([`${dir}/**/modules/*.py`, `!${dir}/**/_*.py`]);
+        files = await globby([
+          `${dir}/ansible_collections/*/*/plugins/modules/*.py`,
+          `!${dir}/ansible_collections/*/*/plugins/modules/_*.py`,
+        ]);
         break;
       case 'collection_doc_fragment':
         files = await globby([
-          `${dir}/**/doc_fragments/*.py`,
-          `!${dir}/**/doc_fragments/_*.py`,
+          `${dir}/ansible_collections/*/*/plugins/doc_fragments/*.py`,
+          `!${dir}/ansible_collections/*/*/plugins/doc_fragments/_*.py`,
+        ]);
+        break;
+    }
+    return files.map((file) => {
+      const name = path.basename(file, '.py');
+      let namespace;
+      let collection;
+      switch (kind) {
+        case 'builtin':
+        case 'builtin_doc_fragment':
+          namespace = 'ansible';
+          collection = 'builtin';
+          break;
+        case 'collection':
+        case 'collection_doc_fragment':
+          const pathArray = file.split(path.sep);
+          namespace = pathArray[pathArray.length - 5];
+          collection = pathArray[pathArray.length - 4];
+          break;
+      }
+
+      return new LazyModuleDocumentation(
+        file,
+        `${namespace}.${collection}.${name}`,
+        namespace,
+        collection,
+        name
+      );
+    });
+  }
+
+  public static async findPluginRouting(
+    dir: string,
+    kind: 'builtin' | 'collection'
+  ): Promise {
+    const pluginRouting = new Map();
+    let files;
+    switch (kind) {
+      case 'builtin':
+        files = [`${dir}/config/ansible_builtin_runtime.yml`];
+        break;
+      case 'collection':
+        files = await globby([
+          `${dir}/ansible_collections/*/*/meta/runtime.yml`,
         ]);
         break;
     }
-    return Promise.all(
-      files.map(async (file) => {
-        const name = path.basename(file, '.py');
-        let namespace;
-        let collection;
-        switch (kind) {
-          case 'builtin':
-          case 'builtin_doc_fragment':
-            namespace = 'ansible';
-            collection = 'builtin';
-            break;
-          case 'collection':
-          case 'collection_doc_fragment':
-            const pathArray = file.split(path.sep);
-            namespace = pathArray[pathArray.length - 5];
-            collection = pathArray[pathArray.length - 4];
-            break;
+    for (const file of files) {
+      let collection;
+      switch (kind) {
+        case 'builtin':
+          collection = 'ansible.builtin';
+          break;
+        case 'collection':
+          const pathArray = file.split(path.sep);
+          collection = `${pathArray[pathArray.length - 4]}.${
+            pathArray[pathArray.length - 3]
+          }`;
+          break;
+      }
+      const runtimeContent = await fs.promises.readFile(file, {
+        encoding: 'utf8',
+      });
+      const document = parseDocument(runtimeContent).toJSON();
+    }
+
+    return pluginRouting;
+  }
+
+  private parseRawRouting(rawDoc: unknown) {
+    const routesByType = new Map();
+    if (
+      hasOwnProperty(rawDoc, 'plugin_routing') &&
+      isObject(rawDoc.plugin_routing)
+    ) {
+      for (const [pluginType, rawRoutesByName] of Object.entries(
+        rawDoc.plugin_routing
+      )) {
+        if (pluginType === 'modules' && isObject(rawRoutesByName)) {
+          routesByType.set(
+            pluginType,
+            this.parseRawRoutesByName(rawRoutesByName)
+          );
         }
+      }
+    }
+  }
+
+  private parseRawRoutesByName(
+    rawRoutesByName: Record
+  ): IPluginRoutesByName {
+    const routesByName = new Map();
+    for (const [moduleName, rawRoute] of Object.entries(rawRoutesByName)) {
+      if (isObject(rawRoute))
+        routesByName.set(moduleName, this.parseRawRoute(rawRoute));
+    }
+    return routesByName;
+  }
 
-        return new LazyModuleDocumentation(
-          file,
-          `${namespace}.${collection}.${name}`,
-          namespace,
-          collection,
-          name
-        );
-      })
-    );
+  private parseRawRoute(rawRoute: Record): IPluginRoute {
+    const route: IPluginRoute = {};
+    if (isObject(rawRoute.deprecation)) {
+      route.deprecation = this.parseRawDepracationOrTombstone(
+        rawRoute.deprecation
+      );
+    }
+    if (isObject(rawRoute.tombstone)) {
+      route.tombstone = this.parseRawDepracationOrTombstone(rawRoute.tombstone);
+    }
+    if (typeof rawRoute.redirect === 'string') {
+      route.redirect = rawRoute.redirect;
+    }
+    return route;
+  }
+
+  private parseRawDepracationOrTombstone(
+    rawInfo: Record
+  ): {
+    removalVersion?: string;
+    removalDate?: string;
+    warningText?: string;
+  } {
+    let warningText;
+    let removalDate;
+    let removalVersion;
+    if (typeof rawInfo.warning_text === 'string') {
+      warningText = rawInfo.warning_text;
+    }
+    if (typeof rawInfo.removal_date === 'string') {
+      removalDate = rawInfo.removal_date;
+    }
+    if (typeof rawInfo.removal_version === 'string') {
+      removalVersion = rawInfo.removal_version;
+    }
+    return {
+      warningText: warningText,
+      removalDate: removalDate,
+      removalVersion: removalVersion,
+    };
   }
 }
 
diff --git a/server/src/services/docsLibrary.ts b/server/src/services/docsLibrary.ts
index 5aac20f83..b16e73063 100644
--- a/server/src/services/docsLibrary.ts
+++ b/server/src/services/docsLibrary.ts
@@ -10,6 +10,10 @@ export class DocsLibrary {
   private _moduleFqcns = new Set();
   private docFragments = new Map();
   private context: WorkspaceFolderContext;
+  private pluginRouting: IPluginRoutingByCollection = new Map<
+    string,
+    IPluginRoutesByType
+  >();
 
   constructor(context: WorkspaceFolderContext) {
     this.context = context;
@@ -18,27 +22,27 @@ export class DocsLibrary {
   public async initialize(): Promise {
     const ansibleConfig = await this.context.ansibleConfig;
     for (const modulesPath of ansibleConfig.module_locations) {
-      (await DocsFinder.searchDirectory(modulesPath, 'builtin')).forEach(
+      (await DocsFinder.findDocumentation(modulesPath, 'builtin')).forEach(
         (doc) => {
           this.modules.set(doc.fqcn, doc);
           this.moduleFqcns.add(doc.fqcn);
         }
       );
       (
-        await DocsFinder.searchDirectory(modulesPath, 'builtin_doc_fragment')
+        await DocsFinder.findDocumentation(modulesPath, 'builtin_doc_fragment')
       ).forEach((doc) => {
         this.docFragments.set(doc.fqcn, doc);
       });
     }
     for (const collectionsPath of ansibleConfig.collections_paths) {
-      (await DocsFinder.searchDirectory(collectionsPath, 'collection')).forEach(
-        (doc) => {
-          this.modules.set(doc.fqcn, doc);
-          this.moduleFqcns.add(doc.fqcn);
-        }
-      );
       (
-        await DocsFinder.searchDirectory(
+        await DocsFinder.findDocumentation(collectionsPath, 'collection')
+      ).forEach((doc) => {
+        this.modules.set(doc.fqcn, doc);
+        this.moduleFqcns.add(doc.fqcn);
+      });
+      (
+        await DocsFinder.findDocumentation(
           collectionsPath,
           'collection_doc_fragment'
         )
@@ -252,3 +256,24 @@ export interface IOption {
   versionAdded?: string;
   suboptions?: unknown;
 }
+
+export type IPluginRoutingByCollection = Map;
+
+export type IPluginTypes = 'modules'; // currently only modules are supported
+
+export type IPluginRoutesByType = Map;
+
+export type IPluginRoutesByName = Map;
+export interface IPluginRoute {
+  redirect?: string;
+  deprecation?: {
+    removalVersion?: string;
+    removalDate?: string;
+    warningText?: string;
+  };
+  tombstone?: {
+    removalVersion?: string;
+    removalDate?: string;
+    warningText?: string;
+  };
+}
diff --git a/server/src/utils/misc.ts b/server/src/utils/misc.ts
index f522affce..8191c4842 100644
--- a/server/src/utils/misc.ts
+++ b/server/src/utils/misc.ts
@@ -20,10 +20,19 @@ export function toLspRange(
 export function hasOwnProperty(
   obj: X,
   prop: Y
-): obj is X & Record & Record {
+): obj is X & Record {
   return isObject(obj) && obj.hasOwnProperty(prop);
 }
 
+export function hasStringProperty(
+  obj: X,
+  prop: Y
+): obj is X & Record {
+  return (
+    isObject(obj) && obj.hasOwnProperty(prop) && typeof obj[prop] === 'string'
+  );
+}
+
 /**
  * Checks whether `obj` is a non-null object.
  */

From 2499f19b20cfb76b30b01968c9b8b770ad14ed1c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Fri, 9 Jul 2021 21:41:51 +0200
Subject: [PATCH 059/558] Finished implementation for module routing. Improved
 completions.

---
 server/src/providers/completionProvider.ts    | 209 ++++++++++++------
 server/src/providers/definitionProvider.ts    |   2 +-
 server/src/providers/hoverProvider.ts         |  26 ++-
 server/src/providers/semanticTokenProvider.ts |   2 +-
 server/src/services/docsFinder.ts             |  12 +-
 server/src/services/docsLibrary.ts            | 121 ++++++++--
 server/src/utils/docsFormatter.ts             |  39 +++-
 server/src/utils/misc.ts                      |   9 -
 server/src/utils/yaml.ts                      |   2 +-
 9 files changed, 311 insertions(+), 111 deletions(-)

diff --git a/server/src/providers/completionProvider.ts b/server/src/providers/completionProvider.ts
index 6af903550..a9f233919 100644
--- a/server/src/providers/completionProvider.ts
+++ b/server/src/providers/completionProvider.ts
@@ -2,6 +2,8 @@ import {
   CompletionItem,
   CompletionItemKind,
   MarkupContent,
+  Range,
+  TextEdit,
 } from 'vscode-languageserver';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
@@ -16,7 +18,7 @@ import {
   taskKeywords,
 } from '../utils/ansible';
 import { formatModule, formatOption, getDetails } from '../utils/docsFormatter';
-import { insert } from '../utils/misc';
+import { insert, toLspRange } from '../utils/misc';
 import {
   AncestryBuilder,
   findProvidedModule,
@@ -32,7 +34,12 @@ import {
 const priorityMap = {
   nameKeyword: 1,
   moduleName: 2,
-  keyword: 3,
+  redirectedModuleName: 3,
+  keyword: 4,
+  // options
+  requiredOption: 1,
+  option: 2,
+  aliasOption: 3,
 };
 
 export async function doCompletion(
@@ -104,24 +111,42 @@ export async function doCompletion(
             )
           );
 
+          const inlineCollections = getDeclaredCollections(path);
+          const cursorAtEndOfLine = atEndOfLine(document, position);
+          let textEdit: TextEdit | undefined;
+          const nodeRange = getNodeRange(node, document);
+          if (nodeRange) {
+            textEdit = {
+              range: nodeRange,
+              newText: '', // placeholder
+            };
+          }
+
           // offer modules
           const moduleCompletionItems = [...docsLibrary.moduleFqcns].map(
-            (moduleFqcn) => {
+            (moduleFqcn): CompletionItem => {
+              let priority, kind;
+              if (docsLibrary.getModuleRoute(moduleFqcn)?.redirect) {
+                priority = priorityMap.redirectedModuleName;
+                kind = CompletionItemKind.Reference;
+              } else {
+                priority = priorityMap.moduleName;
+                kind = CompletionItemKind.Class;
+              }
               const [namespace, collection, name] = moduleFqcn.split('.');
               return {
                 label: name,
-                kind: CompletionItemKind.Class,
+                kind: kind,
                 detail: `${namespace}.${collection}`,
-                sortText: `${priorityMap.moduleName}_${name}`,
-                filterText: moduleFqcn,
+                sortText: `${priority}_${name}`,
+                filterText: `${name} ${moduleFqcn}`, // name should have priority
                 data: {
                   documentUri: document.uri, // preserve document URI for completion request
                   moduleFqcn: moduleFqcn,
-                  inlineCollections: getDeclaredCollections(path),
+                  inlineCollections: inlineCollections,
+                  atEndOfLine: cursorAtEndOfLine,
                 },
-                insertText: atEndOfLine(document, position)
-                  ? `${moduleFqcn}:`
-                  : moduleFqcn,
+                textEdit: textEdit,
               };
             }
           );
@@ -148,7 +173,7 @@ export async function doCompletion(
               docsLibrary
             );
           } else {
-            module = await docsLibrary.findModule(
+            [module] = await docsLibrary.findModule(
               parentKeyNode.value,
               parentKeyPath,
               document.uri
@@ -167,6 +192,9 @@ export async function doCompletion(
             const remainingOptions = [...moduleOptions.entries()].filter(
               ([, specs]) => !providedOptions.has(specs.name)
             );
+
+            const nodeRange = getNodeRange(node, document);
+
             return remainingOptions
               .map(([option, specs]) => {
                 return {
@@ -174,33 +202,23 @@ export async function doCompletion(
                   specs: specs,
                 };
               })
-              .sort((a, b) => {
-                // make required options appear on the top
-                if (a.specs.required && !b.specs.required) {
-                  return -1;
-                } else if (!a.specs.required && b.specs.required) {
-                  return 1;
-                } else {
-                  return 0;
-                }
-              })
-              .sort((a, b) => {
-                // push all aliases to the bottom
-                if (isAlias(a) && !isAlias(b)) {
-                  return 1;
-                } else if (!isAlias(a) && isAlias(b)) {
-                  return -1;
-                } else {
-                  return 0;
-                }
-              })
               .map((option, index) => {
                 // translate option documentation to CompletionItem
                 const details = getDetails(option.specs);
-                return {
+                let priority;
+                if (isAlias(option)) {
+                  priority = priorityMap.aliasOption;
+                } else if (option.specs.required) {
+                  priority = priorityMap.requiredOption;
+                } else {
+                  priority = priorityMap.option;
+                }
+                const completionItem: CompletionItem = {
                   label: option.name,
                   detail: details,
-                  sortText: index.toString().padStart(3),
+                  // using index preserves order from the specification
+                  // except when overridden by the priority
+                  sortText: priority.toString() + index.toString().padStart(3),
                   kind: isAlias(option)
                     ? CompletionItemKind.Reference
                     : CompletionItemKind.Property,
@@ -209,6 +227,18 @@ export async function doCompletion(
                     ? `${option.name}:`
                     : undefined,
                 };
+                const insertText = atEndOfLine(document, position)
+                  ? `${option.name}:`
+                  : option.name;
+                if (nodeRange) {
+                  completionItem.textEdit = {
+                    range: nodeRange,
+                    newText: insertText,
+                  };
+                } else {
+                  completionItem.insertText = insertText;
+                }
+                return completionItem;
               });
           }
         }
@@ -233,70 +263,109 @@ function getKeywordCompletion(
   const remainingParams = [...keywords.entries()].filter(
     ([keyword]) => !providedParams.has(keyword)
   );
+  const nodeRange = getNodeRange(path[path.length - 1], document);
   return remainingParams.map(([keyword, description]) => {
     const priority =
       keyword === 'name' ? priorityMap.nameKeyword : priorityMap.keyword;
-    return {
+    const completionItem: CompletionItem = {
       label: keyword,
       kind: CompletionItemKind.Property,
       sortText: `${priority}_${keyword}`,
       documentation: description,
-      insertText: atEndOfLine(document, position) ? `${keyword}:` : undefined,
     };
+    const insertText = atEndOfLine(document, position)
+      ? `${keyword}:`
+      : keyword;
+    if (nodeRange) {
+      completionItem.textEdit = {
+        range: nodeRange,
+        newText: insertText,
+      };
+    } else {
+      completionItem.insertText = insertText;
+    }
+    return completionItem;
   });
 }
 
+/**
+ * Returns an LSP formatted range compensating for the `_:` hack, provided that
+ * the node has range information and is a string scalar.
+ */
+function getNodeRange(node: Node, document: TextDocument): Range | undefined {
+  if (node.range && node instanceof Scalar && typeof node.value === 'string') {
+    const start = node.range[0];
+    let end = node.range[1];
+    // compensate for `_:`
+    if (node.value.includes('_:')) {
+      end -= 2;
+    } else {
+      // colon, being at the end of the line, was excluded from the node
+      end -= 1;
+    }
+    return toLspRange([start, end], document);
+  }
+}
+
 export async function doCompletionResolve(
   completionItem: CompletionItem,
   context: WorkspaceFolderContext
 ): Promise {
-  if (completionItem.kind === CompletionItemKind.Class) {
+  if (completionItem.data?.moduleFqcn && completionItem.data?.documentUri) {
     // resolve completion for a module
 
-    if (completionItem.data?.moduleFqcn && completionItem.data?.documentUri) {
-      const module = await (
-        await context.docsLibrary
-      ).findModule(completionItem.data.moduleFqcn);
+    const docsLibrary = await context.docsLibrary;
+    const [module] = await docsLibrary.findModule(
+      completionItem.data.moduleFqcn
+    );
 
-      if (module && module.documentation) {
-        const [namespace, collection, name] =
-          completionItem.data.moduleFqcn.split('.');
+    if (module && module.documentation) {
+      const [namespace, collection, name] =
+        completionItem.data.moduleFqcn.split('.');
 
-        let useFqcn = (
-          await context.documentSettings.get(completionItem.data.documentUri)
-        ).ansible.useFullyQualifiedCollectionNames;
+      let useFqcn = (
+        await context.documentSettings.get(completionItem.data.documentUri)
+      ).ansible.useFullyQualifiedCollectionNames;
 
-        if (!useFqcn) {
-          // determine if the short name can really be used
+      if (!useFqcn) {
+        // determine if the short name can really be used
 
-          const declaredCollections: Array =
-            completionItem.data?.inlineCollections || [];
-          declaredCollections.push('ansible.builtin');
+        const declaredCollections: Array =
+          completionItem.data?.inlineCollections || [];
+        declaredCollections.push('ansible.builtin');
 
-          const metadata = await context.documentMetadata.get(
-            completionItem.data.documentUri
-          );
-          if (metadata) {
-            declaredCollections.push(...metadata.collections);
-          }
+        const metadata = await context.documentMetadata.get(
+          completionItem.data.documentUri
+        );
+        if (metadata) {
+          declaredCollections.push(...metadata.collections);
+        }
 
-          const canUseShortName = declaredCollections.some(
-            (c) => c === `${namespace}.${collection}`
-          );
-          if (!canUseShortName) {
-            // not an Ansible built-in module, and not part of the declared
-            // collections
-            useFqcn = true;
-          }
+        const canUseShortName = declaredCollections.some(
+          (c) => c === `${namespace}.${collection}`
+        );
+        if (!canUseShortName) {
+          // not an Ansible built-in module, and not part of the declared
+          // collections
+          useFqcn = true;
         }
+      }
 
-        const insertName = useFqcn ? completionItem.data.moduleFqcn : name;
-        completionItem.insertText = completionItem.insertText?.endsWith(':')
-          ? `${insertName}:`
-          : insertName;
+      const insertName = useFqcn ? completionItem.data.moduleFqcn : name;
+      const insertText = completionItem.data.atEndOfLine
+        ? `${insertName}:`
+        : insertName;
 
-        completionItem.documentation = formatModule(module.documentation);
+      if (completionItem.textEdit) {
+        completionItem.textEdit.newText = insertText;
+      } else {
+        completionItem.insertText = insertText;
       }
+
+      completionItem.documentation = formatModule(
+        module.documentation,
+        docsLibrary.getModuleRoute(completionItem.data.moduleFqcn)
+      );
     }
   }
   return completionItem;
diff --git a/server/src/providers/definitionProvider.ts b/server/src/providers/definitionProvider.ts
index e239e18e0..cae248b3f 100644
--- a/server/src/providers/definitionProvider.ts
+++ b/server/src/providers/definitionProvider.ts
@@ -20,7 +20,7 @@ export async function getDefinition(
       new AncestryBuilder(path).parentOfKey().get() // ensure we look at a key, not value of a Pair
     ) {
       if (isTaskParam(path)) {
-        const module = await docsLibrary.findModule(
+        const [module] = await docsLibrary.findModule(
           node.value,
           path,
           document.uri
diff --git a/server/src/providers/hoverProvider.ts b/server/src/providers/hoverProvider.ts
index b3f991dee..71dfec7d1 100644
--- a/server/src/providers/hoverProvider.ts
+++ b/server/src/providers/hoverProvider.ts
@@ -10,7 +10,11 @@ import {
   roleKeywords,
   taskKeywords,
 } from '../utils/ansible';
-import { formatModule, formatOption } from '../utils/docsFormatter';
+import {
+  formatModule,
+  formatOption,
+  formatTombstone,
+} from '../utils/docsFormatter';
 import { toLspRange } from '../utils/misc';
 import {
   AncestryBuilder,
@@ -51,16 +55,30 @@ export async function doHover(
         if (isTaskKeyword(node.value)) {
           return getKeywordHover(document, node, taskKeywords);
         } else {
-          const module = await docsLibrary.findModule(
+          const [module, hitFqcn] = await docsLibrary.findModule(
             node.value,
             path,
             document.uri
           );
           if (module && module.documentation) {
             return {
-              contents: formatModule(module.documentation),
+              contents: formatModule(
+                module.documentation,
+                docsLibrary.getModuleRoute(hitFqcn || node.value)
+              ),
               range: node.range ? toLspRange(node.range, document) : undefined,
             };
+          } else if (hitFqcn) {
+            // check for tombstones
+            const route = docsLibrary.getModuleRoute(hitFqcn);
+            if (route) {
+              return {
+                contents: formatTombstone(route),
+                range: node.range
+                  ? toLspRange(node.range, document)
+                  : undefined,
+              };
+            }
           }
         }
       }
@@ -83,7 +101,7 @@ export async function doHover(
               docsLibrary
             );
           } else {
-            module = await docsLibrary.findModule(
+            [module] = await docsLibrary.findModule(
               parentKeyNode.value,
               parentKeyPath,
               document.uri
diff --git a/server/src/providers/semanticTokenProvider.ts b/server/src/providers/semanticTokenProvider.ts
index 2fcc72531..7d9a5e182 100644
--- a/server/src/providers/semanticTokenProvider.ts
+++ b/server/src/providers/semanticTokenProvider.ts
@@ -91,7 +91,7 @@ async function markSemanticTokens(
               }
             }
           } else {
-            const module = await docsLibrary.findModule(
+            const [module] = await docsLibrary.findModule(
               pair.key.value,
               keyPath,
               document.uri
diff --git a/server/src/services/docsFinder.ts b/server/src/services/docsFinder.ts
index 7f54a6b30..2ef25c62d 100644
--- a/server/src/services/docsFinder.ts
+++ b/server/src/services/docsFinder.ts
@@ -107,12 +107,13 @@ export class DocsFinder {
         encoding: 'utf8',
       });
       const document = parseDocument(runtimeContent).toJSON();
+      pluginRouting.set(collection, this.parseRawRouting(document));
     }
 
     return pluginRouting;
   }
 
-  private parseRawRouting(rawDoc: unknown) {
+  private static parseRawRouting(rawDoc: unknown): IPluginRoutesByType {
     const routesByType = new Map();
     if (
       hasOwnProperty(rawDoc, 'plugin_routing') &&
@@ -129,9 +130,10 @@ export class DocsFinder {
         }
       }
     }
+    return routesByType;
   }
 
-  private parseRawRoutesByName(
+  private static parseRawRoutesByName(
     rawRoutesByName: Record
   ): IPluginRoutesByName {
     const routesByName = new Map();
@@ -142,7 +144,9 @@ export class DocsFinder {
     return routesByName;
   }
 
-  private parseRawRoute(rawRoute: Record): IPluginRoute {
+  private static parseRawRoute(
+    rawRoute: Record
+  ): IPluginRoute {
     const route: IPluginRoute = {};
     if (isObject(rawRoute.deprecation)) {
       route.deprecation = this.parseRawDepracationOrTombstone(
@@ -158,7 +162,7 @@ export class DocsFinder {
     return route;
   }
 
-  private parseRawDepracationOrTombstone(
+  private static parseRawDepracationOrTombstone(
     rawInfo: Record
   ): {
     removalVersion?: string;
diff --git a/server/src/services/docsLibrary.ts b/server/src/services/docsLibrary.ts
index b16e73063..6c571d226 100644
--- a/server/src/services/docsLibrary.ts
+++ b/server/src/services/docsLibrary.ts
@@ -28,12 +28,21 @@ export class DocsLibrary {
           this.moduleFqcns.add(doc.fqcn);
         }
       );
+
       (
         await DocsFinder.findDocumentation(modulesPath, 'builtin_doc_fragment')
       ).forEach((doc) => {
         this.docFragments.set(doc.fqcn, doc);
       });
     }
+
+    (
+      await DocsFinder.findPluginRouting(
+        ansibleConfig.ansible_location,
+        'builtin'
+      )
+    ).forEach((r, collection) => this.pluginRouting.set(collection, r));
+
     for (const collectionsPath of ansibleConfig.collections_paths) {
       (
         await DocsFinder.findDocumentation(collectionsPath, 'collection')
@@ -41,6 +50,7 @@ export class DocsLibrary {
         this.modules.set(doc.fqcn, doc);
         this.moduleFqcns.add(doc.fqcn);
       });
+
       (
         await DocsFinder.findDocumentation(
           collectionsPath,
@@ -49,6 +59,19 @@ export class DocsLibrary {
       ).forEach((doc) => {
         this.docFragments.set(doc.fqcn, doc);
       });
+
+      (
+        await DocsFinder.findPluginRouting(collectionsPath, 'collection')
+      ).forEach((r, collection) => this.pluginRouting.set(collection, r));
+
+      // add all valid redirect routes as possible FQCNs
+      for (const [collection, routesByType] of this.pluginRouting) {
+        for (const [name, route] of routesByType.get('modules') || []) {
+          if (route.redirect && !route.tombstone) {
+            this.moduleFqcns.add(`${collection}.${name}`);
+          }
+        }
+      }
     }
   }
 
@@ -58,32 +81,48 @@ export class DocsLibrary {
    * Parameters `contextPath` and `documentUri` are used to obtain contextual
    * information on declared collections. Hence these are not needed when
    * searching with FQCN.
+   *
+   * Returns the module if found and an FQCN for which either a module or a
+   * route has been found.
    */
   public async findModule(
     searchText: string,
     contextPath?: Node[],
     documentUri?: string
-  ): Promise {
-    const prefixOptions = [
-      '', // try searching as-is (FQCN match)
-      'ansible.builtin.', // try searching built-in
-    ];
-    if (documentUri) {
-      const metadata = await this.context.documentMetadata.get(documentUri);
-      if (metadata) {
-        // try searching declared collections
-        prefixOptions.push(...metadata.collections.map((s) => `${s}.`));
+  ): Promise<[IModuleMetadata | undefined, string | undefined]> {
+    let hitFqcn;
+    const candidateFqcns = await this.getCandidateFqcns(
+      searchText,
+      documentUri,
+      contextPath
+    );
+
+    // check routing
+    let moduleRoute;
+    for (const fqcn of candidateFqcns) {
+      moduleRoute = this.getModuleRoute(fqcn);
+      if (moduleRoute) {
+        hitFqcn = fqcn;
+        break; // find first
       }
     }
-    if (contextPath) {
-      prefixOptions.push(
-        ...getDeclaredCollections(contextPath).map((s) => `${s}.`)
-      );
+
+    // find module
+    let module;
+    if (moduleRoute && moduleRoute.redirect) {
+      module = this.modules.get(moduleRoute.redirect);
+    } else {
+      for (const fqcn of candidateFqcns) {
+        module = this.modules.get(fqcn);
+        if (module) {
+          if (!hitFqcn) {
+            hitFqcn = fqcn;
+          }
+          break; // find first
+        }
+      }
     }
-    const prefix = prefixOptions.find((prefix) =>
-      this.modules.has(prefix + searchText)
-    );
-    const module = this.modules.get(prefix + searchText);
+
     if (module) {
       if (!module.fragments) {
         // collect information from documentation fragments
@@ -96,7 +135,50 @@ export class DocsLibrary {
         );
       }
     }
-    return module;
+    return [module, hitFqcn];
+  }
+
+  private async getCandidateFqcns(
+    searchText: string,
+    documentUri: string | undefined,
+    contextPath: Node[] | undefined
+  ) {
+    const candidateFqcns = [];
+    if (searchText.split('.').length === 3) {
+      candidateFqcns.push(searchText); // try searching as-is (FQCN match)
+    } else {
+      candidateFqcns.push(`ansible.builtin.${searchText}`); // try searching built-in
+
+      if (documentUri) {
+        const metadata = await this.context.documentMetadata.get(documentUri);
+        if (metadata) {
+          // try searching declared collections
+          candidateFqcns.push(
+            ...metadata.collections.map((c) => `${c}.${searchText}`)
+          );
+        }
+      }
+
+      if (contextPath) {
+        candidateFqcns.push(
+          ...getDeclaredCollections(contextPath).map(
+            (c) => `${c}.${searchText}`
+          )
+        );
+      }
+    }
+    return candidateFqcns;
+  }
+
+  public getModuleRoute(fqcn: string): IPluginRoute | undefined {
+    const fqcn_array = fqcn.split('.');
+    if (fqcn_array.length === 3) {
+      const [namespace, collection, name] = fqcn_array;
+      return this.pluginRouting
+        .get(`${namespace}.${collection}`)
+        ?.get('modules')
+        ?.get(name);
+    }
   }
 
   get moduleFqcns(): Set {
@@ -242,6 +324,7 @@ export interface IModuleMetadata {
   documentation?: IModuleDocumentation;
   fragments?: IModuleMetadata[];
   errors: YAMLError[];
+  route?: IPluginRoute;
 }
 
 export interface IOption {
diff --git a/server/src/utils/docsFormatter.ts b/server/src/utils/docsFormatter.ts
index 3241a24c8..a50789717 100644
--- a/server/src/utils/docsFormatter.ts
+++ b/server/src/utils/docsFormatter.ts
@@ -4,12 +4,27 @@ import {
   IDescription,
   IModuleDocumentation,
   IOption,
+  IPluginRoute,
 } from '../services/docsLibrary';
 
-export function formatModule(module: IModuleDocumentation): MarkupContent {
+export function formatModule(
+  module: IModuleDocumentation,
+  route?: IPluginRoute
+): MarkupContent {
   const sections: string[] = [];
-  if (module.deprecated) {
+  if (module.deprecated || route?.deprecation) {
     sections.push('**DEPRECATED**');
+    if (route?.deprecation) {
+      if (route.deprecation.warningText) {
+        sections.push(`${route.deprecation.warningText}`);
+      }
+      sections.push(
+        `Removal date: ${route.deprecation.removalDate}, removal version: ${route.deprecation.removalVersion}`
+      );
+    }
+  }
+  if (route?.redirect) {
+    sections.push(`***Redirected to: ${route.redirect}***`);
   }
   if (module.shortDescription) {
     sections.push(`*${module.shortDescription}*`);
@@ -32,6 +47,26 @@ export function formatModule(module: IModuleDocumentation): MarkupContent {
   };
 }
 
+export function formatTombstone(route: IPluginRoute): MarkupContent {
+  const sections: string[] = [];
+  if (route?.tombstone) {
+    sections.push('**REMOVED**');
+    if (route.tombstone.warningText) {
+      sections.push(`${route.tombstone.warningText}`);
+    }
+    sections.push(
+      `Removal date: ${route.tombstone.removalDate}, removal version: ${route.tombstone.removalVersion}`
+    );
+  }
+  if (route?.redirect) {
+    sections.push(`Use *${route.redirect}* instead.`);
+  }
+  return {
+    kind: MarkupKind.Markdown,
+    value: sections.join('\n\n'),
+  };
+}
+
 export function formatOption(
   option: IOption,
   with_details = false
diff --git a/server/src/utils/misc.ts b/server/src/utils/misc.ts
index 8191c4842..80bebcf58 100644
--- a/server/src/utils/misc.ts
+++ b/server/src/utils/misc.ts
@@ -24,15 +24,6 @@ export function hasOwnProperty(
   return isObject(obj) && obj.hasOwnProperty(prop);
 }
 
-export function hasStringProperty(
-  obj: X,
-  prop: Y
-): obj is X & Record {
-  return (
-    isObject(obj) && obj.hasOwnProperty(prop) && typeof obj[prop] === 'string'
-  );
-}
-
 /**
  * Checks whether `obj` is a non-null object.
  */
diff --git a/server/src/utils/yaml.ts b/server/src/utils/yaml.ts
index 92260e2b6..37710a5c6 100644
--- a/server/src/utils/yaml.ts
+++ b/server/src/utils/yaml.ts
@@ -370,7 +370,7 @@ export async function findProvidedModule(
 
     // find the module if it has been provided
     for (const m of providedModuleNames) {
-      const module = await docsLibrary.findModule(
+      const [module] = await docsLibrary.findModule(
         m,
         taskParamPath,
         document.uri

From e58d9974997f27130261dbf8c842d76579ef74e2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Fri, 9 Jul 2021 22:42:09 +0200
Subject: [PATCH 060/558] Refactoring: extracted interfaces and parsing code.
 DocsFinder turned into a utils library.

---
 server/src/interfaces/module.ts               |  42 +++
 server/src/interfaces/pluginRouting.ts        |  20 ++
 server/src/providers/completionProvider.ts    |   2 +-
 server/src/providers/semanticTokenProvider.ts |   3 +-
 server/src/services/docsFinder.ts             | 245 -----------------
 server/src/services/docsLibrary.ts            | 240 +++--------------
 server/src/utils/docsFinder.ts                | 107 ++++++++
 server/src/utils/docsFormatter.ts             |   4 +-
 server/src/utils/docsParser.ts                | 252 ++++++++++++++++++
 server/src/utils/yaml.ts                      |   3 +-
 10 files changed, 459 insertions(+), 459 deletions(-)
 create mode 100644 server/src/interfaces/module.ts
 create mode 100644 server/src/interfaces/pluginRouting.ts
 delete mode 100644 server/src/services/docsFinder.ts
 create mode 100644 server/src/utils/docsFinder.ts
 create mode 100644 server/src/utils/docsParser.ts

diff --git a/server/src/interfaces/module.ts b/server/src/interfaces/module.ts
new file mode 100644
index 000000000..5416e16e3
--- /dev/null
+++ b/server/src/interfaces/module.ts
@@ -0,0 +1,42 @@
+import { YAMLError } from 'yaml/util';
+
+export type IDescription = string | Array;
+
+export interface IModuleDocumentation {
+  module: string;
+  shortDescription?: IDescription;
+  description?: IDescription;
+  versionAdded?: string;
+  author?: IDescription;
+  deprecated: boolean;
+  options: Map;
+  requirements?: IDescription;
+  seealso?: Record;
+  notes?: IDescription;
+}
+
+export interface IModuleMetadata {
+  source: string;
+  sourceLineRange: [number, number];
+  fqcn: string;
+  namespace: string;
+  collection: string;
+  name: string;
+  rawDocumentation: Record;
+  documentation?: IModuleDocumentation;
+  fragments?: IModuleMetadata[];
+  errors: YAMLError[];
+}
+
+export interface IOption {
+  name: string;
+  description?: IDescription;
+  required: boolean;
+  default?: unknown;
+  choices?: Array;
+  type?: string;
+  elements?: string;
+  aliases?: Array;
+  versionAdded?: string;
+  suboptions?: unknown;
+}
diff --git a/server/src/interfaces/pluginRouting.ts b/server/src/interfaces/pluginRouting.ts
new file mode 100644
index 000000000..2fd9df7f5
--- /dev/null
+++ b/server/src/interfaces/pluginRouting.ts
@@ -0,0 +1,20 @@
+export type IPluginRoutingByCollection = Map;
+
+export type IPluginTypes = 'modules'; // currently only modules are supported
+
+export type IPluginRoutesByType = Map;
+
+export type IPluginRoutesByName = Map;
+export interface IPluginRoute {
+  redirect?: string;
+  deprecation?: {
+    removalVersion?: string;
+    removalDate?: string;
+    warningText?: string;
+  };
+  tombstone?: {
+    removalVersion?: string;
+    removalDate?: string;
+    warningText?: string;
+  };
+}
diff --git a/server/src/providers/completionProvider.ts b/server/src/providers/completionProvider.ts
index a9f233919..15cd01476 100644
--- a/server/src/providers/completionProvider.ts
+++ b/server/src/providers/completionProvider.ts
@@ -8,7 +8,7 @@ import {
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
 import { Node, Pair, Scalar, YAMLMap } from 'yaml/types';
-import { IOption } from '../services/docsLibrary';
+import { IOption } from '../interfaces/module';
 import { WorkspaceFolderContext } from '../services/workspaceManager';
 import {
   blockKeywords,
diff --git a/server/src/providers/semanticTokenProvider.ts b/server/src/providers/semanticTokenProvider.ts
index 7d9a5e182..e97df193a 100644
--- a/server/src/providers/semanticTokenProvider.ts
+++ b/server/src/providers/semanticTokenProvider.ts
@@ -7,7 +7,8 @@ import {
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
 import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
-import { DocsLibrary, IModuleMetadata } from '../services/docsLibrary';
+import { IModuleMetadata } from '../interfaces/module';
+import { DocsLibrary } from '../services/docsLibrary';
 import {
   blockKeywords,
   isTaskKeyword,
diff --git a/server/src/services/docsFinder.ts b/server/src/services/docsFinder.ts
deleted file mode 100644
index 2ef25c62d..000000000
--- a/server/src/services/docsFinder.ts
+++ /dev/null
@@ -1,245 +0,0 @@
-import * as fs from 'fs';
-import * as path from 'path';
-import { parseDocument } from 'yaml';
-import { YAMLError } from 'yaml/util';
-import {
-  IModuleMetadata,
-  IPluginRoute,
-  IPluginRoutesByName,
-  IPluginRoutesByType,
-  IPluginRoutingByCollection,
-  IPluginTypes,
-} from './docsLibrary';
-import globby = require('globby');
-import { hasOwnProperty, isObject } from '../utils/misc';
-
-export class DocsFinder {
-  public static async findDocumentation(
-    dir: string,
-    kind:
-      | 'builtin'
-      | 'collection'
-      | 'builtin_doc_fragment'
-      | 'collection_doc_fragment'
-  ): Promise {
-    let files;
-    switch (kind) {
-      case 'builtin':
-        files = await globby([`${dir}/**/*.py`, '!/**/_*.py']);
-        break;
-      case 'builtin_doc_fragment':
-        files = await globby([
-          `${path.resolve(dir, '../')}/plugins/doc_fragments/*.py`,
-          '!/**/_*.py',
-        ]);
-        break;
-      case 'collection':
-        files = await globby([
-          `${dir}/ansible_collections/*/*/plugins/modules/*.py`,
-          `!${dir}/ansible_collections/*/*/plugins/modules/_*.py`,
-        ]);
-        break;
-      case 'collection_doc_fragment':
-        files = await globby([
-          `${dir}/ansible_collections/*/*/plugins/doc_fragments/*.py`,
-          `!${dir}/ansible_collections/*/*/plugins/doc_fragments/_*.py`,
-        ]);
-        break;
-    }
-    return files.map((file) => {
-      const name = path.basename(file, '.py');
-      let namespace;
-      let collection;
-      switch (kind) {
-        case 'builtin':
-        case 'builtin_doc_fragment':
-          namespace = 'ansible';
-          collection = 'builtin';
-          break;
-        case 'collection':
-        case 'collection_doc_fragment':
-          const pathArray = file.split(path.sep);
-          namespace = pathArray[pathArray.length - 5];
-          collection = pathArray[pathArray.length - 4];
-          break;
-      }
-
-      return new LazyModuleDocumentation(
-        file,
-        `${namespace}.${collection}.${name}`,
-        namespace,
-        collection,
-        name
-      );
-    });
-  }
-
-  public static async findPluginRouting(
-    dir: string,
-    kind: 'builtin' | 'collection'
-  ): Promise {
-    const pluginRouting = new Map();
-    let files;
-    switch (kind) {
-      case 'builtin':
-        files = [`${dir}/config/ansible_builtin_runtime.yml`];
-        break;
-      case 'collection':
-        files = await globby([
-          `${dir}/ansible_collections/*/*/meta/runtime.yml`,
-        ]);
-        break;
-    }
-    for (const file of files) {
-      let collection;
-      switch (kind) {
-        case 'builtin':
-          collection = 'ansible.builtin';
-          break;
-        case 'collection':
-          const pathArray = file.split(path.sep);
-          collection = `${pathArray[pathArray.length - 4]}.${
-            pathArray[pathArray.length - 3]
-          }`;
-          break;
-      }
-      const runtimeContent = await fs.promises.readFile(file, {
-        encoding: 'utf8',
-      });
-      const document = parseDocument(runtimeContent).toJSON();
-      pluginRouting.set(collection, this.parseRawRouting(document));
-    }
-
-    return pluginRouting;
-  }
-
-  private static parseRawRouting(rawDoc: unknown): IPluginRoutesByType {
-    const routesByType = new Map();
-    if (
-      hasOwnProperty(rawDoc, 'plugin_routing') &&
-      isObject(rawDoc.plugin_routing)
-    ) {
-      for (const [pluginType, rawRoutesByName] of Object.entries(
-        rawDoc.plugin_routing
-      )) {
-        if (pluginType === 'modules' && isObject(rawRoutesByName)) {
-          routesByType.set(
-            pluginType,
-            this.parseRawRoutesByName(rawRoutesByName)
-          );
-        }
-      }
-    }
-    return routesByType;
-  }
-
-  private static parseRawRoutesByName(
-    rawRoutesByName: Record
-  ): IPluginRoutesByName {
-    const routesByName = new Map();
-    for (const [moduleName, rawRoute] of Object.entries(rawRoutesByName)) {
-      if (isObject(rawRoute))
-        routesByName.set(moduleName, this.parseRawRoute(rawRoute));
-    }
-    return routesByName;
-  }
-
-  private static parseRawRoute(
-    rawRoute: Record
-  ): IPluginRoute {
-    const route: IPluginRoute = {};
-    if (isObject(rawRoute.deprecation)) {
-      route.deprecation = this.parseRawDepracationOrTombstone(
-        rawRoute.deprecation
-      );
-    }
-    if (isObject(rawRoute.tombstone)) {
-      route.tombstone = this.parseRawDepracationOrTombstone(rawRoute.tombstone);
-    }
-    if (typeof rawRoute.redirect === 'string') {
-      route.redirect = rawRoute.redirect;
-    }
-    return route;
-  }
-
-  private static parseRawDepracationOrTombstone(
-    rawInfo: Record
-  ): {
-    removalVersion?: string;
-    removalDate?: string;
-    warningText?: string;
-  } {
-    let warningText;
-    let removalDate;
-    let removalVersion;
-    if (typeof rawInfo.warning_text === 'string') {
-      warningText = rawInfo.warning_text;
-    }
-    if (typeof rawInfo.removal_date === 'string') {
-      removalDate = rawInfo.removal_date;
-    }
-    if (typeof rawInfo.removal_version === 'string') {
-      removalVersion = rawInfo.removal_version;
-    }
-    return {
-      warningText: warningText,
-      removalDate: removalDate,
-      removalVersion: removalVersion,
-    };
-  }
-}
-
-export class LazyModuleDocumentation implements IModuleMetadata {
-  public static docsRegex =
-    /(?
[ \t]*DOCUMENTATION\s*=\s*r?(?'''|""")(?:\n---)?\n?)(?.*?)\k/s;
-
-  source: string;
-  sourceLineRange: [number, number] = [0, 0];
-  fqcn: string;
-  namespace: string;
-  collection: string;
-  name: string;
-  errors: YAMLError[] = [];
-
-  private _contents: Record | undefined;
-
-  constructor(
-    source: string,
-    fqcn: string,
-    namespace: string,
-    collection: string,
-    name: string
-  ) {
-    this.source = source;
-    this.fqcn = fqcn;
-    this.namespace = namespace;
-    this.collection = collection;
-    this.name = name;
-  }
-
-  public get rawDocumentation(): Record {
-    if (!this._contents) {
-      const contents = fs.readFileSync(this.source, { encoding: 'utf8' });
-      const m = LazyModuleDocumentation.docsRegex.exec(contents);
-      if (m && m.groups && m.groups.doc && m.groups.pre) {
-        // determine documentation start/end lines for definition provider
-        let startLine = contents.substr(0, m.index).match(/\n/g)?.length || 0;
-        startLine += m.groups.pre.match(/\n/g)?.length || 0;
-        const endLine = startLine + (m.groups.doc.match(/\n/g)?.length || 0);
-        this.sourceLineRange = [startLine, endLine];
-
-        const document = parseDocument(m.groups.doc);
-        // There's about 20 modules (out of ~3200) in Ansible 2.9 libs that contain YAML syntax errors
-        // Still, document.toJSON() works on them
-        this._contents = document.toJSON();
-        this.errors = document.errors;
-      }
-      this._contents = this._contents || {};
-    }
-    return this._contents;
-  }
-
-  public set rawDocumentation(value: Record) {
-    this._contents = value;
-  }
-}
diff --git a/server/src/services/docsLibrary.ts b/server/src/services/docsLibrary.ts
index 6c571d226..5b14ebe96 100644
--- a/server/src/services/docsLibrary.ts
+++ b/server/src/services/docsLibrary.ts
@@ -1,10 +1,17 @@
-import * as _ from 'lodash';
 import { Node } from 'yaml/types';
-import { YAMLError } from 'yaml/util';
-import { hasOwnProperty, isObject } from '../utils/misc';
 import { getDeclaredCollections } from '../utils/yaml';
-import { DocsFinder } from './docsFinder';
+import { findDocumentation, findPluginRouting } from '../utils/docsFinder';
 import { WorkspaceFolderContext } from './workspaceManager';
+import {
+  IPluginRoute,
+  IPluginRoutesByType,
+  IPluginRoutingByCollection,
+} from '../interfaces/pluginRouting';
+import {
+  processDocumentationFragments,
+  processRawDocumentation,
+} from '../utils/docsParser';
+import { IModuleMetadata } from '../interfaces/module';
 export class DocsLibrary {
   private modules = new Map();
   private _moduleFqcns = new Set();
@@ -22,47 +29,39 @@ export class DocsLibrary {
   public async initialize(): Promise {
     const ansibleConfig = await this.context.ansibleConfig;
     for (const modulesPath of ansibleConfig.module_locations) {
-      (await DocsFinder.findDocumentation(modulesPath, 'builtin')).forEach(
+      (await findDocumentation(modulesPath, 'builtin')).forEach((doc) => {
+        this.modules.set(doc.fqcn, doc);
+        this.moduleFqcns.add(doc.fqcn);
+      });
+
+      (await findDocumentation(modulesPath, 'builtin_doc_fragment')).forEach(
         (doc) => {
-          this.modules.set(doc.fqcn, doc);
-          this.moduleFqcns.add(doc.fqcn);
+          this.docFragments.set(doc.fqcn, doc);
         }
       );
-
-      (
-        await DocsFinder.findDocumentation(modulesPath, 'builtin_doc_fragment')
-      ).forEach((doc) => {
-        this.docFragments.set(doc.fqcn, doc);
-      });
     }
 
     (
-      await DocsFinder.findPluginRouting(
-        ansibleConfig.ansible_location,
-        'builtin'
-      )
+      await findPluginRouting(ansibleConfig.ansible_location, 'builtin')
     ).forEach((r, collection) => this.pluginRouting.set(collection, r));
 
     for (const collectionsPath of ansibleConfig.collections_paths) {
-      (
-        await DocsFinder.findDocumentation(collectionsPath, 'collection')
-      ).forEach((doc) => {
-        this.modules.set(doc.fqcn, doc);
-        this.moduleFqcns.add(doc.fqcn);
-      });
+      (await findDocumentation(collectionsPath, 'collection')).forEach(
+        (doc) => {
+          this.modules.set(doc.fqcn, doc);
+          this.moduleFqcns.add(doc.fqcn);
+        }
+      );
 
       (
-        await DocsFinder.findDocumentation(
-          collectionsPath,
-          'collection_doc_fragment'
-        )
+        await findDocumentation(collectionsPath, 'collection_doc_fragment')
       ).forEach((doc) => {
         this.docFragments.set(doc.fqcn, doc);
       });
 
-      (
-        await DocsFinder.findPluginRouting(collectionsPath, 'collection')
-      ).forEach((r, collection) => this.pluginRouting.set(collection, r));
+      (await findPluginRouting(collectionsPath, 'collection')).forEach(
+        (r, collection) => this.pluginRouting.set(collection, r)
+      );
 
       // add all valid redirect routes as possible FQCNs
       for (const [collection, routesByType] of this.pluginRouting) {
@@ -126,13 +125,11 @@ export class DocsLibrary {
     if (module) {
       if (!module.fragments) {
         // collect information from documentation fragments
-        this.processDocumentationFragments(module);
+        processDocumentationFragments(module, this.docFragments);
       }
       if (!module.documentation) {
         // translate raw documentation into a typed structure
-        module.documentation = this.processRawDocumentation(
-          module.rawDocumentation
-        );
+        module.documentation = processRawDocumentation(module.rawDocumentation);
       }
     }
     return [module, hitFqcn];
@@ -184,179 +181,4 @@ export class DocsLibrary {
   get moduleFqcns(): Set {
     return this._moduleFqcns;
   }
-
-  private processDocumentationFragments(module: IModuleMetadata) {
-    module.fragments = [];
-    if (
-      hasOwnProperty(
-        module.rawDocumentation,
-        'extends_documentation_fragment'
-      ) &&
-      module.rawDocumentation.extends_documentation_fragment instanceof Array
-    ) {
-      const resultContents = {};
-      for (const docFragmentName of module.rawDocumentation
-        .extends_documentation_fragment) {
-        const docFragment =
-          this.docFragments.get(docFragmentName) ||
-          this.docFragments.get(`ansible.builtin.${docFragmentName}`);
-        if (docFragment) {
-          module.fragments.push(docFragment); // currently used only as indicator
-          _.mergeWith(
-            resultContents,
-            docFragment.rawDocumentation,
-            this.docFragmentMergeCustomizer
-          );
-        }
-      }
-      _.mergeWith(
-        resultContents,
-        module.rawDocumentation,
-        this.docFragmentMergeCustomizer
-      );
-      module.rawDocumentation = resultContents;
-    }
-  }
-
-  private docFragmentMergeCustomizer(
-    objValue: unknown,
-    srcValue: unknown,
-    key: string
-  ): Record[] | undefined {
-    if (
-      ['notes', 'requirements', 'seealso'].includes(key) &&
-      _.isArray(objValue)
-    ) {
-      return objValue.concat(srcValue);
-    }
-  }
-
-  private processRawDocumentation(
-    rawDoc: unknown
-  ): IModuleDocumentation | undefined {
-    if (isObject(rawDoc) && typeof rawDoc.module === 'string') {
-      const moduleDoc: IModuleDocumentation = {
-        module: rawDoc.module,
-        options: this.processRawOptions(rawDoc.options),
-        deprecated: !!rawDoc.deprecated,
-      };
-      if (isIDescription(rawDoc.short_description))
-        moduleDoc.shortDescription = rawDoc.short_description;
-      if (isIDescription(rawDoc.description))
-        moduleDoc.description = rawDoc.description;
-      if (typeof rawDoc.version_added === 'string')
-        moduleDoc.versionAdded = rawDoc.version_added;
-      if (isIDescription(rawDoc.author)) moduleDoc.author = rawDoc.author;
-      if (isIDescription(rawDoc.requirements))
-        moduleDoc.requirements = rawDoc.requirements;
-      if (typeof rawDoc.seealso === 'object')
-        moduleDoc.seealso = rawDoc.seealso as Record;
-      if (isIDescription(rawDoc.notes)) moduleDoc.notes = rawDoc.notes;
-      return moduleDoc;
-    }
-  }
-
-  private processRawOptions(rawOptions: unknown): Map {
-    const options = new Map();
-    if (isObject(rawOptions)) {
-      for (const [optionName, rawOption] of Object.entries(rawOptions)) {
-        if (isObject(rawOption)) {
-          const optionDoc: IOption = {
-            name: optionName,
-            required: !!rawOption.required,
-            default: rawOption.default,
-            suboptions: rawOption.suboptions,
-          };
-          if (isIDescription(rawOption.description))
-            optionDoc.description = rawOption.description;
-          if (rawOption.choices instanceof Array)
-            optionDoc.choices = rawOption.choices;
-          if (typeof rawOption.type === 'string')
-            optionDoc.type = rawOption.type;
-          if (typeof rawOption.elements === 'string')
-            optionDoc.elements = rawOption.elements;
-          if (rawOption.aliases instanceof Array)
-            optionDoc.aliases = rawOption.aliases;
-          if (typeof rawOption.version_added === 'string')
-            optionDoc.versionAdded = rawOption.version_added;
-          options.set(optionName, optionDoc);
-          if (optionDoc.aliases) {
-            for (const alias of optionDoc.aliases) {
-              options.set(alias, optionDoc);
-            }
-          }
-        }
-      }
-    }
-    return options;
-  }
-}
-
-export type IDescription = string | Array;
-
-function isIDescription(obj: unknown): obj is IDescription {
-  return (
-    obj instanceof Array || // won't check that all elements are string
-    typeof obj === 'string'
-  );
-}
-export interface IModuleDocumentation {
-  module: string;
-  shortDescription?: IDescription;
-  description?: IDescription;
-  versionAdded?: string;
-  author?: IDescription;
-  deprecated: boolean;
-  options: Map;
-  requirements?: IDescription;
-  seealso?: Record;
-  notes?: IDescription;
-}
-
-export interface IModuleMetadata {
-  source: string;
-  sourceLineRange: [number, number];
-  fqcn: string;
-  namespace: string;
-  collection: string;
-  name: string;
-  rawDocumentation: Record;
-  documentation?: IModuleDocumentation;
-  fragments?: IModuleMetadata[];
-  errors: YAMLError[];
-  route?: IPluginRoute;
-}
-
-export interface IOption {
-  name: string;
-  description?: IDescription;
-  required: boolean;
-  default?: unknown;
-  choices?: Array;
-  type?: string;
-  elements?: string;
-  aliases?: Array;
-  versionAdded?: string;
-  suboptions?: unknown;
-}
-
-export type IPluginRoutingByCollection = Map;
-
-export type IPluginTypes = 'modules'; // currently only modules are supported
-
-export type IPluginRoutesByType = Map;
-
-export type IPluginRoutesByName = Map;
-export interface IPluginRoute {
-  redirect?: string;
-  deprecation?: {
-    removalVersion?: string;
-    removalDate?: string;
-    warningText?: string;
-  };
-  tombstone?: {
-    removalVersion?: string;
-    removalDate?: string;
-    warningText?: string;
-  };
 }
diff --git a/server/src/utils/docsFinder.ts b/server/src/utils/docsFinder.ts
new file mode 100644
index 000000000..4242565bf
--- /dev/null
+++ b/server/src/utils/docsFinder.ts
@@ -0,0 +1,107 @@
+import * as fs from 'fs';
+import * as path from 'path';
+import { parseDocument } from 'yaml';
+import globby = require('globby');
+import { LazyModuleDocumentation, parseRawRouting } from './docsParser';
+import { IModuleMetadata } from '../interfaces/module';
+import {
+  IPluginRoutesByType,
+  IPluginRoutingByCollection,
+} from '../interfaces/pluginRouting';
+
+export async function findDocumentation(
+  dir: string,
+  kind:
+    | 'builtin'
+    | 'collection'
+    | 'builtin_doc_fragment'
+    | 'collection_doc_fragment'
+): Promise {
+  let files;
+  switch (kind) {
+    case 'builtin':
+      files = await globby([`${dir}/**/*.py`, '!/**/_*.py']);
+      break;
+    case 'builtin_doc_fragment':
+      files = await globby([
+        `${path.resolve(dir, '../')}/plugins/doc_fragments/*.py`,
+        '!/**/_*.py',
+      ]);
+      break;
+    case 'collection':
+      files = await globby([
+        `${dir}/ansible_collections/*/*/plugins/modules/*.py`,
+        `!${dir}/ansible_collections/*/*/plugins/modules/_*.py`,
+      ]);
+      break;
+    case 'collection_doc_fragment':
+      files = await globby([
+        `${dir}/ansible_collections/*/*/plugins/doc_fragments/*.py`,
+        `!${dir}/ansible_collections/*/*/plugins/doc_fragments/_*.py`,
+      ]);
+      break;
+  }
+  return files.map((file) => {
+    const name = path.basename(file, '.py');
+    let namespace;
+    let collection;
+    switch (kind) {
+      case 'builtin':
+      case 'builtin_doc_fragment':
+        namespace = 'ansible';
+        collection = 'builtin';
+        break;
+      case 'collection':
+      case 'collection_doc_fragment':
+        const pathArray = file.split(path.sep);
+        namespace = pathArray[pathArray.length - 5];
+        collection = pathArray[pathArray.length - 4];
+        break;
+    }
+
+    return new LazyModuleDocumentation(
+      file,
+      `${namespace}.${collection}.${name}`,
+      namespace,
+      collection,
+      name
+    );
+  });
+}
+
+export async function findPluginRouting(
+  dir: string,
+  kind: 'builtin' | 'collection'
+): Promise {
+  const pluginRouting = new Map();
+  let files;
+  switch (kind) {
+    case 'builtin':
+      files = [`${dir}/config/ansible_builtin_runtime.yml`];
+      break;
+    case 'collection':
+      files = await globby([`${dir}/ansible_collections/*/*/meta/runtime.yml`]);
+      break;
+  }
+  for (const file of files) {
+    let collection;
+    switch (kind) {
+      case 'builtin':
+        collection = 'ansible.builtin';
+        break;
+      case 'collection':
+        const pathArray = file.split(path.sep);
+        collection = `${pathArray[pathArray.length - 4]}.${
+          pathArray[pathArray.length - 3]
+        }`;
+        break;
+    }
+    const runtimeContent = await fs.promises.readFile(file, {
+      encoding: 'utf8',
+    });
+    const document = parseDocument(runtimeContent).toJSON();
+    pluginRouting.set(collection, parseRawRouting(document));
+  }
+
+  return pluginRouting;
+}
diff --git a/server/src/utils/docsFormatter.ts b/server/src/utils/docsFormatter.ts
index a50789717..892ad58bb 100644
--- a/server/src/utils/docsFormatter.ts
+++ b/server/src/utils/docsFormatter.ts
@@ -4,8 +4,8 @@ import {
   IDescription,
   IModuleDocumentation,
   IOption,
-  IPluginRoute,
-} from '../services/docsLibrary';
+} from '../interfaces/module';
+import { IPluginRoute } from '../interfaces/pluginRouting';
 
 export function formatModule(
   module: IModuleDocumentation,
diff --git a/server/src/utils/docsParser.ts b/server/src/utils/docsParser.ts
new file mode 100644
index 000000000..ad88cf18e
--- /dev/null
+++ b/server/src/utils/docsParser.ts
@@ -0,0 +1,252 @@
+import * as _ from 'lodash';
+import * as fs from 'fs';
+import { parseDocument } from 'yaml';
+import { YAMLError } from 'yaml/util';
+import {
+  IDescription,
+  IModuleDocumentation,
+  IModuleMetadata,
+  IOption,
+} from '../interfaces/module';
+import { hasOwnProperty, isObject } from './misc';
+import {
+  IPluginRoute,
+  IPluginRoutesByName,
+  IPluginRoutesByType,
+  IPluginTypes,
+} from '../interfaces/pluginRouting';
+
+export function processDocumentationFragments(
+  module: IModuleMetadata,
+  docFragments: Map
+): void {
+  module.fragments = [];
+  if (
+    hasOwnProperty(module.rawDocumentation, 'extends_documentation_fragment') &&
+    module.rawDocumentation.extends_documentation_fragment instanceof Array
+  ) {
+    const resultContents = {};
+    for (const docFragmentName of module.rawDocumentation
+      .extends_documentation_fragment) {
+      const docFragment =
+        docFragments.get(docFragmentName) ||
+        docFragments.get(`ansible.builtin.${docFragmentName}`);
+      if (docFragment) {
+        module.fragments.push(docFragment); // currently used only as indicator
+        _.mergeWith(
+          resultContents,
+          docFragment.rawDocumentation,
+          docFragmentMergeCustomizer
+        );
+      }
+    }
+    _.mergeWith(
+      resultContents,
+      module.rawDocumentation,
+      docFragmentMergeCustomizer
+    );
+    module.rawDocumentation = resultContents;
+  }
+}
+
+function docFragmentMergeCustomizer(
+  objValue: unknown,
+  srcValue: unknown,
+  key: string
+): Record[] | undefined {
+  if (
+    ['notes', 'requirements', 'seealso'].includes(key) &&
+    _.isArray(objValue)
+  ) {
+    return objValue.concat(srcValue);
+  }
+}
+
+export function processRawDocumentation(
+  rawDoc: unknown
+): IModuleDocumentation | undefined {
+  if (isObject(rawDoc) && typeof rawDoc.module === 'string') {
+    const moduleDoc: IModuleDocumentation = {
+      module: rawDoc.module,
+      options: processRawOptions(rawDoc.options),
+      deprecated: !!rawDoc.deprecated,
+    };
+    if (isIDescription(rawDoc.short_description))
+      moduleDoc.shortDescription = rawDoc.short_description;
+    if (isIDescription(rawDoc.description))
+      moduleDoc.description = rawDoc.description;
+    if (typeof rawDoc.version_added === 'string')
+      moduleDoc.versionAdded = rawDoc.version_added;
+    if (isIDescription(rawDoc.author)) moduleDoc.author = rawDoc.author;
+    if (isIDescription(rawDoc.requirements))
+      moduleDoc.requirements = rawDoc.requirements;
+    if (typeof rawDoc.seealso === 'object')
+      moduleDoc.seealso = rawDoc.seealso as Record;
+    if (isIDescription(rawDoc.notes)) moduleDoc.notes = rawDoc.notes;
+    return moduleDoc;
+  }
+}
+
+export function processRawOptions(rawOptions: unknown): Map {
+  const options = new Map();
+  if (isObject(rawOptions)) {
+    for (const [optionName, rawOption] of Object.entries(rawOptions)) {
+      if (isObject(rawOption)) {
+        const optionDoc: IOption = {
+          name: optionName,
+          required: !!rawOption.required,
+          default: rawOption.default,
+          suboptions: rawOption.suboptions,
+        };
+        if (isIDescription(rawOption.description))
+          optionDoc.description = rawOption.description;
+        if (rawOption.choices instanceof Array)
+          optionDoc.choices = rawOption.choices;
+        if (typeof rawOption.type === 'string') optionDoc.type = rawOption.type;
+        if (typeof rawOption.elements === 'string')
+          optionDoc.elements = rawOption.elements;
+        if (rawOption.aliases instanceof Array)
+          optionDoc.aliases = rawOption.aliases;
+        if (typeof rawOption.version_added === 'string')
+          optionDoc.versionAdded = rawOption.version_added;
+        options.set(optionName, optionDoc);
+        if (optionDoc.aliases) {
+          for (const alias of optionDoc.aliases) {
+            options.set(alias, optionDoc);
+          }
+        }
+      }
+    }
+  }
+  return options;
+}
+
+function isIDescription(obj: unknown): obj is IDescription {
+  return (
+    obj instanceof Array || // won't check that all elements are string
+    typeof obj === 'string'
+  );
+}
+
+export function parseRawRouting(rawDoc: unknown): IPluginRoutesByType {
+  const routesByType = new Map();
+  if (
+    hasOwnProperty(rawDoc, 'plugin_routing') &&
+    isObject(rawDoc.plugin_routing)
+  ) {
+    for (const [pluginType, rawRoutesByName] of Object.entries(
+      rawDoc.plugin_routing
+    )) {
+      if (pluginType === 'modules' && isObject(rawRoutesByName)) {
+        routesByType.set(pluginType, parseRawRoutesByName(rawRoutesByName));
+      }
+    }
+  }
+  return routesByType;
+}
+
+function parseRawRoutesByName(
+  rawRoutesByName: Record
+): IPluginRoutesByName {
+  const routesByName = new Map();
+  for (const [moduleName, rawRoute] of Object.entries(rawRoutesByName)) {
+    if (isObject(rawRoute))
+      routesByName.set(moduleName, parseRawRoute(rawRoute));
+  }
+  return routesByName;
+}
+
+function parseRawRoute(rawRoute: Record): IPluginRoute {
+  const route: IPluginRoute = {};
+  if (isObject(rawRoute.deprecation)) {
+    route.deprecation = parseRawDepracationOrTombstone(rawRoute.deprecation);
+  }
+  if (isObject(rawRoute.tombstone)) {
+    route.tombstone = parseRawDepracationOrTombstone(rawRoute.tombstone);
+  }
+  if (typeof rawRoute.redirect === 'string') {
+    route.redirect = rawRoute.redirect;
+  }
+  return route;
+}
+
+function parseRawDepracationOrTombstone(
+  rawInfo: Record
+): {
+  removalVersion?: string;
+  removalDate?: string;
+  warningText?: string;
+} {
+  let warningText;
+  let removalDate;
+  let removalVersion;
+  if (typeof rawInfo.warning_text === 'string') {
+    warningText = rawInfo.warning_text;
+  }
+  if (typeof rawInfo.removal_date === 'string') {
+    removalDate = rawInfo.removal_date;
+  }
+  if (typeof rawInfo.removal_version === 'string') {
+    removalVersion = rawInfo.removal_version;
+  }
+  return {
+    warningText: warningText,
+    removalDate: removalDate,
+    removalVersion: removalVersion,
+  };
+}
+
+export class LazyModuleDocumentation implements IModuleMetadata {
+  public static docsRegex =
+    /(?
[ \t]*DOCUMENTATION\s*=\s*r?(?'''|""")(?:\n---)?\n?)(?.*?)\k/s;
+
+  source: string;
+  sourceLineRange: [number, number] = [0, 0];
+  fqcn: string;
+  namespace: string;
+  collection: string;
+  name: string;
+  errors: YAMLError[] = [];
+
+  private _contents: Record | undefined;
+
+  constructor(
+    source: string,
+    fqcn: string,
+    namespace: string,
+    collection: string,
+    name: string
+  ) {
+    this.source = source;
+    this.fqcn = fqcn;
+    this.namespace = namespace;
+    this.collection = collection;
+    this.name = name;
+  }
+
+  public get rawDocumentation(): Record {
+    if (!this._contents) {
+      const contents = fs.readFileSync(this.source, { encoding: 'utf8' });
+      const m = LazyModuleDocumentation.docsRegex.exec(contents);
+      if (m && m.groups && m.groups.doc && m.groups.pre) {
+        // determine documentation start/end lines for definition provider
+        let startLine = contents.substr(0, m.index).match(/\n/g)?.length || 0;
+        startLine += m.groups.pre.match(/\n/g)?.length || 0;
+        const endLine = startLine + (m.groups.doc.match(/\n/g)?.length || 0);
+        this.sourceLineRange = [startLine, endLine];
+
+        const document = parseDocument(m.groups.doc);
+        // There's about 20 modules (out of ~3200) in Ansible 2.9 libs that contain YAML syntax errors
+        // Still, document.toJSON() works on them
+        this._contents = document.toJSON();
+        this.errors = document.errors;
+      }
+      this._contents = this._contents || {};
+    }
+    return this._contents;
+  }
+
+  public set rawDocumentation(value: Record) {
+    this._contents = value;
+  }
+}
diff --git a/server/src/utils/yaml.ts b/server/src/utils/yaml.ts
index 37710a5c6..14dcd0215 100644
--- a/server/src/utils/yaml.ts
+++ b/server/src/utils/yaml.ts
@@ -2,7 +2,8 @@ import * as _ from 'lodash';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { Document } from 'yaml';
 import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
-import { DocsLibrary, IModuleMetadata } from '../services/docsLibrary';
+import { IModuleMetadata } from '../interfaces/module';
+import { DocsLibrary } from '../services/docsLibrary';
 import { isTaskKeyword, playExclusiveKeywords } from './ansible';
 
 /**

From c63a96b56a5e764c7ca0b5186cb0954083b166c0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Fri, 9 Jul 2021 23:19:47 +0200
Subject: [PATCH 061/558] Added LICENSE

---
 LICENSE | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 LICENSE

diff --git a/LICENSE b/LICENSE
new file mode 100644
index 000000000..0d779c04d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Tomasz Maciążek
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

From 9d5a1bda2e3977d96ea06ae36b3789cb8f59843f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Mon, 12 Jul 2021 00:46:32 +0200
Subject: [PATCH 062/558] Composed a README file. Changed use of FQCNs to
 default to false.

---
 README.md                              | 101 ++++++++++++++++++++-----
 icon.png                               | Bin 0 -> 10868 bytes
 images/ansible-lint.gif                | Bin 0 -> 20680 bytes
 images/go-to-definition.gif            | Bin 0 -> 172455 bytes
 images/hover-documentation-module.png  | Bin 0 -> 57468 bytes
 images/jinja-expression.gif            | Bin 0 -> 7483 bytes
 images/smart-completions.gif           | Bin 0 -> 154225 bytes
 images/syntax-highlighting.png         | Bin 0 -> 56054 bytes
 images/yaml-validation.gif             | Bin 0 -> 16289 bytes
 package.json                           |   2 +-
 server/src/services/settingsManager.ts |   2 +-
 11 files changed, 83 insertions(+), 22 deletions(-)
 create mode 100755 icon.png
 create mode 100755 images/ansible-lint.gif
 create mode 100755 images/go-to-definition.gif
 create mode 100755 images/hover-documentation-module.png
 create mode 100755 images/jinja-expression.gif
 create mode 100755 images/smart-completions.gif
 create mode 100755 images/syntax-highlighting.png
 create mode 100755 images/yaml-validation.gif

diff --git a/README.md b/README.md
index 5883edd9e..7095fde2a 100644
--- a/README.md
+++ b/README.md
@@ -1,37 +1,98 @@
-# ansible README
-
-> TODO
+# Ansible for VS Code
+This extension adds language support for Ansible to VS Code.
 
 ## Features
 
-
+Recognizes and distinctly highlights, **Ansible keywords**, **module names** and
+**module options**, as well as standard YAML elements. Supports Jinja
+expressions, also those in Ansible conditionals (`when`, `failed_when`,
+`changed_when`, `check_mode`), which are not placed in double curly braces.
 
+> The screenshots and animations presented in this README have been taken using
+> the One Dark Pro theme. The default VS Code theme will not show the syntax
+> elements as distinctly, unless customized. Virtually any non-default theme
+> will do better.
 
-> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow.
+### Validation
+![YAML validation](images/yaml-validation.gif)
 
-## Requirements
+While you type, the syntax of your Ansible scripts is verified and any feedback is provided instantaneously.
 
-
+#### Integration with ansible-lint
+![Linter support](images/ansible-lint.gif)
 
-## Extension Settings
+On opening and saving a document, `ansible-lint` is executed in the background
+and any findings are presented as errors. You might find it useful that
+rules/tags added to `warn_list`
+(see [Ansible Lint Documentation](https://ansible-lint.readthedocs.io/en/latest/configuring.html))
+are shown as warnings instead.
 
-
+When writing a Jinja expression, you only need to type `"{{ `, and it will be
+mirrored behind the cursor (including the space). You can also select the whole
+expression and press `space` to put spaces on both sides of the expression.
 
-## Known Issues
+### Documentation reference
+![Documentation on hover](images/hover-documentation-module.png)
 
-
+Documentation is available on hover for Ansible keywords, modules and module
+options. The extension works on the same principle as `ansible-doc`, providing
+the documentation straight from the Python implementation of the modules.
 
+#### Jump to module code
+![Go to code on Ctrl+click](images/go-to-definition.gif)
 
-## PLAN
-- copy and fix existing YAML syntax
-- use injection to modify it
-- at some point rewrite the YAML syntax from ground up
+You may also open the implementation of any module using the standard *Go to
+Definition* operation, for instance, by clicking on the module name while
+holding `ctrl`/`cmd`.
+
+## Requirements
+- [Ansible 2.9+](https://docs.ansible.com/ansible/latest/index.html)
+- [Ansible Lint](https://ansible-lint.readthedocs.io/en/latest/) (required,
+  unless you disable linter support; install without `yamllint`)
+
+For Windows users, this extension works perfectly well with extensions such as
+`Remote - WSL` and `Remote - Containers`.
+
+> If you have any other extension providing language support for Ansible, you might need to uninstall it first.
+
+## Configuration
+This extension supports multi-root workspaces, and as such, can be configured on
+any level (User, Remote, Workspace and/or Folder).
+
+- `ansible.ansible.path`: Path to the `ansible` executable.
+- `ansible.ansible.useFullyQualifiedCollectionNames`: Toggles use of
+  fully qualified collection names (FQCN) when inserting a module name.
+  Disabling it will only use FQCNs when necessary, that is when the collection
+  isn't configured for the task.
+- `ansible.ansibleLint.enabled`: Enables/disables use of `ansible-lint`.
+- `ansible.ansibleLint.path`: Path to the `ansible-lint` executable.
+- `ansible.ansibleLint.arguments`: Optional command line arguments to be
+  appended to `ansible-lint` invocation. See `ansible-lint` documentation.
+- `ansible.python.interpreterPath`: Path to the `python`/`python3` executable.
+  This setting may be used to make the extension work with `ansible` and
+  `ansible-lint` installations in a Python virtual environment.
+- `ansible.python.activationScript`: Path to a custom `activate` script, which
+  will be used instead of the setting above to run in a Python virtual
+  environment.
+
+## Known limitations
+- The shorthand syntax for module options (key=value pairs) is not supported.
diff --git a/icon.png b/icon.png
new file mode 100755
index 0000000000000000000000000000000000000000..a4438492f7d4181012d78a9a260d253290a94443
GIT binary patch
literal 10868
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
z%0D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
u_%B%~35x!L(ewR$
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 yaUGBV{Y literal 0 HcmV?d00001 diff --git a/images/smart-completions.gif b/images/smart-completions.gif new file mode 100755 index 0000000000000000000000000000000000000000..4a6bfcf838b531b8c3977a0b2009dadbfd09d6e2 GIT binary patch literal 154225 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

XLbOW=KG>hd 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 Qq@!I({p*NIT?g#H06*oz>i_@% literal 0 HcmV?d00001 diff --git a/images/yaml-validation.gif b/images/yaml-validation.gif new file mode 100755 index 0000000000000000000000000000000000000000..fb4c4bd9d58ced74fbb26c9b89633e3cac94e2e0 GIT binary patch literal 16289 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 NJ@h;kogDyT{{;|I8{Yr` literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 3fc10904c..4d2aec482 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "ansible.ansible.useFullyQualifiedCollectionNames": { "scope": "resource", "type": "boolean", - "default": true, + "default": false, "description": "Always use fully qualified collection names (FQCN) when inserting a module name. Disabling it will only use FQCNs when necessary." }, "ansible.ansibleLint.enabled": { diff --git a/server/src/services/settingsManager.ts b/server/src/services/settingsManager.ts index fd5ecfc29..b51e243e4 100644 --- a/server/src/services/settingsManager.ts +++ b/server/src/services/settingsManager.ts @@ -13,7 +13,7 @@ export class SettingsManager { new Map(); private defaultSettings: ExtensionSettings = { - ansible: { path: 'ansible', useFullyQualifiedCollectionNames: true }, + ansible: { path: 'ansible', useFullyQualifiedCollectionNames: false }, ansibleLint: { enabled: true, path: 'ansible-lint', arguments: '' }, python: { interpreterPath: '', activationScript: '' }, }; From 845f77ea5d612b1f2af8941f1b1629f9d8508cc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Mon, 12 Jul 2021 20:53:40 +0200 Subject: [PATCH 063/558] Fixed routing for Ansible 2.9. Added Ansible icon and added images to .vscodeignore --- .vscodeignore | 2 +- package.json | 1 + server/src/utils/docsFinder.ts | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.vscodeignore b/.vscodeignore index 291b60e44..2a935a47a 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,8 +1,8 @@ .vscode/** .vscode-test/** .gitignore +images/** **/.ignore -vsc-extension-quickstart.md **/node_modules **/out **/src diff --git a/package.json b/package.json index 4d2aec482..f564edecf 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "type": "git", "url": "https://github.com/tomaciazek/vscode-ansible.git" }, + "icon": "icon.png", "engines": { "vscode": "^1.56.0" }, diff --git a/server/src/utils/docsFinder.ts b/server/src/utils/docsFinder.ts index 4242565bf..7c71a4131 100644 --- a/server/src/utils/docsFinder.ts +++ b/server/src/utils/docsFinder.ts @@ -77,7 +77,7 @@ export async function findPluginRouting( let files; switch (kind) { case 'builtin': - files = [`${dir}/config/ansible_builtin_runtime.yml`]; + files = await globby([`${dir}/config/ansible_builtin_runtime.yml`]); break; case 'collection': files = await globby([`${dir}/ansible_collections/*/*/meta/runtime.yml`]); From d3bab4351eae9d1f28ce59ca53b727948f49a2af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Mon, 12 Jul 2021 21:05:34 +0200 Subject: [PATCH 064/558] Rephrased README. --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7095fde2a..ed5530397 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,11 @@ This extension adds language support for Ansible to VS Code. ### Syntax highlighting ![Syntax highlighting](images/syntax-highlighting.png) -Recognizes and distinctly highlights, **Ansible keywords**, **module names** and -**module options**, as well as standard YAML elements. Supports Jinja -expressions, also those in Ansible conditionals (`when`, `failed_when`, -`changed_when`, `check_mode`), which are not placed in double curly braces. +**Ansible keywords**, **module names** and **module options**, as well as +standard YAML elements are recognized and highlighted distinctly. Jinja +expressions are supported too, also those in Ansible conditionals (`when`, +`failed_when`, `changed_when`, `check_mode`), which are not placed in double +curly braces. > The screenshots and animations presented in this README have been taken using > the One Dark Pro theme. The default VS Code theme will not show the syntax @@ -96,3 +97,4 @@ any level (User, Remote, Workspace and/or Folder). ## Known limitations - The shorthand syntax for module options (key=value pairs) is not supported. +- Nested module options are not supported yet. From 981eb77ce476cb85c796beadc1de3efcf252f1b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Mon, 12 Jul 2021 21:18:06 +0200 Subject: [PATCH 065/558] Passed short module description through macro replacer. --- server/src/utils/docsFormatter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/utils/docsFormatter.ts b/server/src/utils/docsFormatter.ts index 892ad58bb..162ef9888 100644 --- a/server/src/utils/docsFormatter.ts +++ b/server/src/utils/docsFormatter.ts @@ -27,7 +27,7 @@ export function formatModule( sections.push(`***Redirected to: ${route.redirect}***`); } if (module.shortDescription) { - sections.push(`*${module.shortDescription}*`); + sections.push(`*${formatDescription(module.shortDescription)}*`); } if (module.description) { sections.push('**Description**'); From 8b3b1ffeddfd57eeff056ed048fd10844a7df4d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Mon, 12 Jul 2021 22:38:46 +0200 Subject: [PATCH 066/558] Added Azure Pipeline --- azure-pipelines.yml | 32 + package-lock.json | 6000 +++++++++++++++++++++++-------------------- package.json | 6 +- 3 files changed, 3263 insertions(+), 2775 deletions(-) create mode 100644 azure-pipelines.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 000000000..fe17252a8 --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,32 @@ +trigger: + branches: + include: + - master + tags: + include: + - refs/tags/v* + +pool: + vmImage: ubuntu-latest + +steps: + - task: NodeTool@0 + inputs: + versionSpec: '12.x' + displayName: 'Install Node.js' + + - bash: | + echo ">>> Compile vscode-ansible" + npm install && npm run compile + echo ">>> Compiled vscode-ansible" + echo ">>> Run unit tests" + npm run test + displayName: Run Tests + + - bash: | + echo ">>> Publish" + npm run deploy + displayName: Publish + condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'), eq(variables['Agent.OS'], 'Linux')) + env: + VSCE_PAT: $(VSCE_PAT) diff --git a/package-lock.json b/package-lock.json index 55a17ab1c..cd9e25a45 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,2819 +1,3273 @@ { - "name": "ansible", - "version": "0.0.2", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "@flatten-js/interval-tree": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz", - "integrity": "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.4", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.4", - "fastq": "^1.6.0" - } - }, - "@types/chai": { - "version": "4.2.18", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.18.tgz", - "integrity": "sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ==", - "dev": true - }, - "@types/eslint": { - "version": "7.2.12", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.12.tgz", - "integrity": "sha512-HjikV/jX6e0Pg4DcB+rtOBKSrG6w5IaxWpmi3efL/eLxMz5lZTK+W1DKERrX5a+mNzL78axfsDNXu7JHFP4uLg==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "@types/mocha": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz", - "integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==", - "dev": true - }, - "@types/node": { - "version": "14.17.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.1.tgz", - "integrity": "sha512-/tpUyFD7meeooTRwl3sYlihx2BrJE7q9XF71EguPFIySj9B7qgnRtHsHTho+0AUm4m1SvWGm6uSncrR94q6Vtw==", - "dev": true - }, - "@types/vscode": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz", - "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.25.0.tgz", - "integrity": "sha512-Qfs3dWkTMKkKwt78xp2O/KZQB8MPS1UQ5D3YW2s6LQWBE1074BE+Rym+b1pXZIX3M3fSvPUDaCvZLKV2ylVYYQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.25.0", - "@typescript-eslint/scope-manager": "4.25.0", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.25.0.tgz", - "integrity": "sha512-f0doRE76vq7NEEU0tw+ajv6CrmPelw5wLoaghEHkA2dNLFb3T/zJQqGPQ0OYt5XlZaS13MtnN+GTPCuUVg338w==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.25.0", - "@typescript-eslint/types": "4.25.0", - "@typescript-eslint/typescript-estree": "4.25.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.25.0.tgz", - "integrity": "sha512-OZFa1SKyEJpAhDx8FcbWyX+vLwh7OEtzoo2iQaeWwxucyfbi0mT4DijbOSsTgPKzGHr6GrF2V5p/CEpUH/VBxg==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.25.0", - "@typescript-eslint/types": "4.25.0", - "@typescript-eslint/typescript-estree": "4.25.0", - "debug": "^4.1.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.25.0.tgz", - "integrity": "sha512-2NElKxMb/0rya+NJG1U71BuNnp1TBd1JgzYsldsdA83h/20Tvnf/HrwhiSlNmuq6Vqa0EzidsvkTArwoq+tH6w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.25.0", - "@typescript-eslint/visitor-keys": "4.25.0" - } - }, - "@typescript-eslint/types": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.25.0.tgz", - "integrity": "sha512-+CNINNvl00OkW6wEsi32wU5MhHti2J25TJsJJqgQmJu3B3dYDBcmOxcE5w9cgoM13TrdE/5ND2HoEnBohasxRQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.25.0.tgz", - "integrity": "sha512-1B8U07TGNAFMxZbSpF6jqiDs1cVGO0izVkf18Q/SPcUAc9LhHxzvSowXDTvkHMWUVuPpagupaW63gB6ahTXVlg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.25.0", - "@typescript-eslint/visitor-keys": "4.25.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.25.0.tgz", - "integrity": "sha512-AmkqV9dDJVKP/TcZrbf6s6i1zYXt5Hl8qOLrRDTFfRNae4+LB8A4N3i+FLZPW85zIxRy39BgeWOfMS3HoH5ngg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.25.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", - "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", - "dev": true - }, - "@webpack-cli/info": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", - "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", - "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", - "dev": true - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "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, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", - "dev": true - }, - "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, + "name": "ansible", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", + "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "@flatten-js/interval-tree": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz", + "integrity": "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@types/chai": { + "version": "4.2.18", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.18.tgz", + "integrity": "sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ==", + "dev": true + }, + "@types/eslint": { + "version": "7.2.12", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.12.tgz", + "integrity": "sha512-HjikV/jX6e0Pg4DcB+rtOBKSrG6w5IaxWpmi3efL/eLxMz5lZTK+W1DKERrX5a+mNzL78axfsDNXu7JHFP4uLg==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "@types/mocha": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz", + "integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==", + "dev": true + }, + "@types/node": { + "version": "14.17.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.1.tgz", + "integrity": "sha512-/tpUyFD7meeooTRwl3sYlihx2BrJE7q9XF71EguPFIySj9B7qgnRtHsHTho+0AUm4m1SvWGm6uSncrR94q6Vtw==", + "dev": true + }, + "@types/vscode": { + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz", + "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.25.0.tgz", + "integrity": "sha512-Qfs3dWkTMKkKwt78xp2O/KZQB8MPS1UQ5D3YW2s6LQWBE1074BE+Rym+b1pXZIX3M3fSvPUDaCvZLKV2ylVYYQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.25.0", + "@typescript-eslint/scope-manager": "4.25.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.15", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.25.0.tgz", + "integrity": "sha512-f0doRE76vq7NEEU0tw+ajv6CrmPelw5wLoaghEHkA2dNLFb3T/zJQqGPQ0OYt5XlZaS13MtnN+GTPCuUVg338w==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.25.0", + "@typescript-eslint/types": "4.25.0", + "@typescript-eslint/typescript-estree": "4.25.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.25.0.tgz", + "integrity": "sha512-OZFa1SKyEJpAhDx8FcbWyX+vLwh7OEtzoo2iQaeWwxucyfbi0mT4DijbOSsTgPKzGHr6GrF2V5p/CEpUH/VBxg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.25.0", + "@typescript-eslint/types": "4.25.0", + "@typescript-eslint/typescript-estree": "4.25.0", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.25.0.tgz", + "integrity": "sha512-2NElKxMb/0rya+NJG1U71BuNnp1TBd1JgzYsldsdA83h/20Tvnf/HrwhiSlNmuq6Vqa0EzidsvkTArwoq+tH6w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.25.0", + "@typescript-eslint/visitor-keys": "4.25.0" + } + }, + "@typescript-eslint/types": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.25.0.tgz", + "integrity": "sha512-+CNINNvl00OkW6wEsi32wU5MhHti2J25TJsJJqgQmJu3B3dYDBcmOxcE5w9cgoM13TrdE/5ND2HoEnBohasxRQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.25.0.tgz", + "integrity": "sha512-1B8U07TGNAFMxZbSpF6jqiDs1cVGO0izVkf18Q/SPcUAc9LhHxzvSowXDTvkHMWUVuPpagupaW63gB6ahTXVlg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.25.0", + "@typescript-eslint/visitor-keys": "4.25.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.25.0.tgz", + "integrity": "sha512-AmkqV9dDJVKP/TcZrbf6s6i1zYXt5Hl8qOLrRDTFfRNae4+LB8A4N3i+FLZPW85zIxRy39BgeWOfMS3HoH5ngg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.25.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", + "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", + "dev": true + }, + "@webpack-cli/info": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", + "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", + "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", + "dev": true + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "azure-devops-node-api": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.0.1.tgz", + "integrity": "sha512-YMdjAw9l5p/6leiyIloxj3k7VIvYThKjvqgiQn88r3nhT93ENwsoDS3A83CyJ4uTWzCZ5f5jCi6c27rTU5Pz+A==", + "dev": true, + "requires": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "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, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "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, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001230", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", + "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "dev": true + }, + "chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "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 + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "electron-to-chromium": { - "version": "1.3.742", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz", - "integrity": "sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q==", - "dev": true - }, - "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 - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", - "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dev": true, + "requires": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + } + } + }, + "cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "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 + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "electron-to-chromium": { + "version": "1.3.742", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz", + "integrity": "sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q==", + "dev": true + }, + "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 + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-module-lexer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", + "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "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 + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "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 - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "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, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "dev": true + } + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "dev": true, + "requires": { + "is-plain-obj": "^2.1.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dev": true, + "requires": { + "mime-db": "1.47.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mocha": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "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, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "dev": true, - "requires": { - "is-plain-obj": "^2.1.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "dev": true - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "dev": true, - "requires": { - "mime-db": "1.47.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } }, "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 - }, - "nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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 + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", + "dev": true, + "requires": { + "semver": "^5.1.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } }, "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } }, "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "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 - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "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 - } - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "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 + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "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 + } + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "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, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true + "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 + } + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "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, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "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 - } - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz", + "integrity": "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==", + "dev": true, + "requires": { + "jest-worker": "^26.6.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.7.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", + "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^2.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + } + }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "typed-rest-client": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", + "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==", + "dev": true, + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "typescript": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", + "dev": true + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "underscore": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-join": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", + "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vsce": { + "version": "1.95.1", + "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.95.1.tgz", + "integrity": "sha512-2v8g3ZtZkaOTscRjjCAtM3Au6YYWJtg9UNt1iyyWko7ZHejbt5raClcNzQ7/WYVLYhYHc+otHQifV0gCBREgNg==", + "dev": true, + "requires": { + "azure-devops-node-api": "^11.0.1", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "commander": "^6.1.0", + "denodeify": "^1.2.1", + "glob": "^7.0.6", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "markdown-it": "^10.0.0", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "osenv": "^0.1.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^5.1.0", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^1.1.0", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "watchpack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webpack": { + "version": "5.38.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", + "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.47", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.2.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.4.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "dependencies": { + "acorn": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", + "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "dev": true }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", - "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } + "enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } }, "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz", - "integrity": "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==", - "dev": true, - "requires": { - "jest-worker": "^26.6.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.7.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", - "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - } - }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "typescript": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", - "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webpack": { - "version": "5.38.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", - "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.4.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "dependencies": { - "acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true - } - } - }, - "webpack-cli": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", - "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.3", - "@webpack-cli/info": "^1.2.4", - "@webpack-cli/serve": "^1.4.0", - "colorette": "^1.2.1", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } - } - }, - "webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", + "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.0.3", + "@webpack-cli/info": "^1.2.4", + "@webpack-cli/serve": "^1.4.0", + "colorette": "^1.2.1", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", + "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } + } } diff --git a/package.json b/package.json index f564edecf..900107ddd 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "description": "Ansible language support", "author": "Tomasz Maciążek", "license": "MIT", - "version": "0.0.3", + "version": "1.0.0", "repository": { "type": "git", "url": "https://github.com/tomaciazek/vscode-ansible.git" @@ -188,7 +188,8 @@ "webpack:watch:server": "webpack --mode none --config ./server/webpack.config.js --watch", "clean": "rimraf client/out && rimraf server/out && rimraf **/tsconfig.tsbuildinfo", "postinstall": "cd client && npm install && cd ../server && npm install && cd ..", - "test-compile": "tsc -p ./" + "test": "mocha --require ts-node/register './server/src/test/**/*.ts'", + "deploy": "vsce publish" }, "devDependencies": { "@types/chai": "^4.2.18", @@ -206,6 +207,7 @@ "ts-loader": "^8.3.0", "ts-node": "^9.1.1", "typescript": "^4.3.2", + "vsce": "^1.95.1", "webpack": "^5.38.1", "webpack-cli": "^4.7.0" }, From 04c1c132ee853f44e39fa2f16303bd1f08322c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Tue, 13 Jul 2021 20:23:29 +0200 Subject: [PATCH 067/558] Rephrased README part on default theme. Removed images from .vscodeignore. It is needed for the README to be correctly displayed in VS Code. --- .vscodeignore | 1 - README.md | 10 +++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.vscodeignore b/.vscodeignore index 2a935a47a..0f6f3904c 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,7 +1,6 @@ .vscode/** .vscode-test/** .gitignore -images/** **/.ignore **/node_modules **/out diff --git a/README.md b/README.md index ed5530397..2e17c6ffb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Ansible for VS Code +# Ansible VS Code Extension This extension adds language support for Ansible to VS Code. ## Features @@ -14,8 +14,8 @@ curly braces. > The screenshots and animations presented in this README have been taken using > the One Dark Pro theme. The default VS Code theme will not show the syntax -> elements as distinctly, unless customized. Virtually any non-default theme -> will do better. +> elements as distinctly, unless customized. Virtually any theme other than +> default will do better. ### Validation ![YAML validation](images/yaml-validation.gif) @@ -98,3 +98,7 @@ any level (User, Remote, Workspace and/or Folder). ## Known limitations - The shorthand syntax for module options (key=value pairs) is not supported. - Nested module options are not supported yet. +- Only Jinja *expressions* inside Ansible YAML files are supported. In order to + have syntax highlighting of Jinja template files, you'll need to install other + extension. +- Jinja *blocks* (inside Ansible YAML files) are not supported yet. From b396627266af17c7e92e350aa3edea66b3fbb3e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Tue, 13 Jul 2021 20:29:57 +0200 Subject: [PATCH 068/558] Prepared changelog for release. --- CHANGELOG.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b193def85..758f1197b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,9 @@ # Change Log -All notable changes to the "ansible" extension will be documented in this file. +All notable changes to the Ansible VS Code extension will be documented in this file. -Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] - -- Initial release \ No newline at end of file +## [1.0.0] - 2021-07-14 +- Initial release From d8ba6f8647f1d6f98576f8f875f7d5b5a8fbb1d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Tue, 13 Jul 2021 22:16:49 +0200 Subject: [PATCH 069/558] Added bug report and feature request templates. --- .github/ISSUE_TEMPLATE/bug_report.yml | 92 ++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 1 + .github/ISSUE_TEMPLATE/feature_request.yml | 55 +++++++++++++ 3 files changed, 148 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..b88cf09c8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,92 @@ +--- +name: 🐛 Bug report +description: Create a report to help us improve +labels: bug + +body: + - type: markdown + attributes: + value: > + **Thanks for taking the time to fill out this bug report!** + + ⚠ + Please, verify first that your issue is not [already reported][issues]. + + 🛈 + **Tip:** If you are seeking community support, or want to ask a question, + please consider [starting a discussion][discussions]. + + [issues]: ../search?q=is%3Aissue&type=issues + [discussions]: ../discussions + + - type: textarea + id: summary + attributes: + label: Summary + description: A clear and concise description of what the bug is. + placeholder: >- + TLDR: When I do X, VS Code does/shows Y instead of Z. + + To elaborate [...] + + 🛈 + **Tip:** You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: true + + - type: input + id: extension-version + attributes: + label: Extension version + validations: + required: true + + - type: input + id: vscode-version + attributes: + label: VS Code version + validations: + required: true + + - type: textarea + id: ansible-version + attributes: + label: Ansible Version + description: >- + Paste verbatim output from `ansible --version` below. **This will be + automatically formatted into code, so no need for backticks.** + render: shell + placeholder: | + $ ansible --version + ansible [core 2.11.1] + config file = ~/.ansible.cfg + configured module search path = ['~/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] + ansible python module location = ~/venv/ansible4/lib/python3.6/site-packages/ansible + ansible collection location = ~/.ansible/collections:/usr/share/ansible/collections + executable location = ~/venv/ansible4/bin/ansible + python version = 3.6.9 (default, Jul 17 2020, 12:50:27) [GCC 8.4.0] + jinja version = 3.0.1 + libyaml = True + validations: + required: true + + - type: textarea + id: environment + attributes: + label: OS / Environment + description: >- + Provide all relevant information, including OS, remote extension used (underlying OS too), + `ansible-lint` version etc. + placeholder: Windows 10, WSL (Ubuntu 18.04), ansible-lint 5.0.12 + validations: + required: true + + - type: textarea + id: logs + attributes: + label: Relevant log output + description: >- + Please copy and paste any relevant log output (from `Output > Ansible + Server`). **This will be automatically formatted into code, so no need + for backticks.** + render: shell diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..3ba13e0ce --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 000000000..b5b0a32c3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,55 @@ +--- +name: 💡 Feature request +description: Suggest an idea for this project +labels: feature + +body: + - type: markdown + attributes: + value: > + **Thanks for taking the time to fill out this feature request!** + + ⚠ + Please, verify first that the feature you want is not [already requested][issues]. + + 🛈 + **Tip:** If you are seeking community support, or want to ask a question, + please consider [starting a discussion][discussions]. + + [issues]: ../search?q=is%3Aissue&type=issues + [discussions]: ../discussions + + - type: textarea + id: problem + attributes: + label: Problem + description: Is your feature request related to a problem? Please describe. + placeholder: >- + A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + + 🛈 + **Tip:** You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: true + + - type: textarea + id: solution + attributes: + label: Solution + description: Describe the solution you'd like. + placeholder: A clear and concise description of what you want to happen. + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives + description: Describe alternatives you've considered. + placeholder: A clear and concise description of any alternative solutions or features you've considered. + + - type: textarea + id: context + attributes: + label: Additional context + description: Add any other context or screenshots about the feature request here. From a91bc8eaac4d64a3d7b07397c8777e95c2c23b72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Tue, 13 Jul 2021 22:47:32 +0200 Subject: [PATCH 070/558] Updated dependencies --- package-lock.json | 645 ++++++++++++++++++++------------------- package.json | 22 +- server/package-lock.json | 98 +++--- server/package.json | 8 +- 4 files changed, 398 insertions(+), 375 deletions(-) diff --git a/package-lock.json b/package-lock.json index cd9e25a45..df1122408 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,18 +14,18 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", "dev": true }, "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -56,15 +56,15 @@ "dev": true }, "@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", @@ -72,15 +72,6 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -89,47 +80,59 @@ } } }, - "@flatten-js/interval-tree": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz", - "integrity": "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg==" + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true }, "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@types/chai": { - "version": "4.2.18", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.18.tgz", - "integrity": "sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ==", + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz", + "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==", "dev": true }, "@types/eslint": { - "version": "7.2.12", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.12.tgz", - "integrity": "sha512-HjikV/jX6e0Pg4DcB+rtOBKSrG6w5IaxWpmi3efL/eLxMz5lZTK+W1DKERrX5a+mNzL78axfsDNXu7JHFP4uLg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", + "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", "dev": true, "requires": { "@types/estree": "*", @@ -137,9 +140,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", "dev": true, "requires": { "@types/eslint": "*", @@ -147,27 +150,27 @@ } }, "@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", + "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==", "dev": true }, "@types/mocha": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz", - "integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", "dev": true }, "@types/node": { - "version": "14.17.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.1.tgz", - "integrity": "sha512-/tpUyFD7meeooTRwl3sYlihx2BrJE7q9XF71EguPFIySj9B7qgnRtHsHTho+0AUm4m1SvWGm6uSncrR94q6Vtw==", + "version": "14.17.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", + "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==", "dev": true }, "@types/vscode": { @@ -177,85 +180,84 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.25.0.tgz", - "integrity": "sha512-Qfs3dWkTMKkKwt78xp2O/KZQB8MPS1UQ5D3YW2s6LQWBE1074BE+Rym+b1pXZIX3M3fSvPUDaCvZLKV2ylVYYQ==", + "version": "4.28.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.3.tgz", + "integrity": "sha512-jW8sEFu1ZeaV8xzwsfi6Vgtty2jf7/lJmQmDkDruBjYAbx5DA8JtbcMnP0rNPUG+oH5GoQBTSp+9613BzuIpYg==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.25.0", - "@typescript-eslint/scope-manager": "4.25.0", - "debug": "^4.1.1", + "@typescript-eslint/experimental-utils": "4.28.3", + "@typescript-eslint/scope-manager": "4.28.3", + "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/experimental-utils": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.25.0.tgz", - "integrity": "sha512-f0doRE76vq7NEEU0tw+ajv6CrmPelw5wLoaghEHkA2dNLFb3T/zJQqGPQ0OYt5XlZaS13MtnN+GTPCuUVg338w==", + "version": "4.28.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.3.tgz", + "integrity": "sha512-zZYl9TnrxwEPi3FbyeX0ZnE8Hp7j3OCR+ELoUfbwGHGxWnHg9+OqSmkw2MoCVpZksPCZYpQzC559Ee9pJNHTQw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.25.0", - "@typescript-eslint/types": "4.25.0", - "@typescript-eslint/typescript-estree": "4.25.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.28.3", + "@typescript-eslint/types": "4.28.3", + "@typescript-eslint/typescript-estree": "4.28.3", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.25.0.tgz", - "integrity": "sha512-OZFa1SKyEJpAhDx8FcbWyX+vLwh7OEtzoo2iQaeWwxucyfbi0mT4DijbOSsTgPKzGHr6GrF2V5p/CEpUH/VBxg==", + "version": "4.28.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.3.tgz", + "integrity": "sha512-ZyWEn34bJexn/JNYvLQab0Mo5e+qqQNhknxmc8azgNd4XqspVYR5oHq9O11fLwdZMRcj4by15ghSlIEq+H5ltQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.25.0", - "@typescript-eslint/types": "4.25.0", - "@typescript-eslint/typescript-estree": "4.25.0", - "debug": "^4.1.1" + "@typescript-eslint/scope-manager": "4.28.3", + "@typescript-eslint/types": "4.28.3", + "@typescript-eslint/typescript-estree": "4.28.3", + "debug": "^4.3.1" } }, "@typescript-eslint/scope-manager": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.25.0.tgz", - "integrity": "sha512-2NElKxMb/0rya+NJG1U71BuNnp1TBd1JgzYsldsdA83h/20Tvnf/HrwhiSlNmuq6Vqa0EzidsvkTArwoq+tH6w==", + "version": "4.28.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.3.tgz", + "integrity": "sha512-/8lMisZ5NGIzGtJB+QizQ5eX4Xd8uxedFfMBXOKuJGP0oaBBVEMbJVddQKDXyyB0bPlmt8i6bHV89KbwOelJiQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.25.0", - "@typescript-eslint/visitor-keys": "4.25.0" + "@typescript-eslint/types": "4.28.3", + "@typescript-eslint/visitor-keys": "4.28.3" } }, "@typescript-eslint/types": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.25.0.tgz", - "integrity": "sha512-+CNINNvl00OkW6wEsi32wU5MhHti2J25TJsJJqgQmJu3B3dYDBcmOxcE5w9cgoM13TrdE/5ND2HoEnBohasxRQ==", + "version": "4.28.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.3.tgz", + "integrity": "sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.25.0.tgz", - "integrity": "sha512-1B8U07TGNAFMxZbSpF6jqiDs1cVGO0izVkf18Q/SPcUAc9LhHxzvSowXDTvkHMWUVuPpagupaW63gB6ahTXVlg==", + "version": "4.28.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz", + "integrity": "sha512-YAb1JED41kJsqCQt1NcnX5ZdTA93vKFCMP4lQYG6CFxd0VzDJcKttRlMrlG+1qiWAw8+zowmHU1H0OzjWJzR2w==", "dev": true, "requires": { - "@typescript-eslint/types": "4.25.0", - "@typescript-eslint/visitor-keys": "4.25.0", - "debug": "^4.1.1", - "globby": "^11.0.1", + "@typescript-eslint/types": "4.28.3", + "@typescript-eslint/visitor-keys": "4.28.3", + "debug": "^4.3.1", + "globby": "^11.0.3", "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.25.0.tgz", - "integrity": "sha512-AmkqV9dDJVKP/TcZrbf6s6i1zYXt5Hl8qOLrRDTFfRNae4+LB8A4N3i+FLZPW85zIxRy39BgeWOfMS3HoH5ngg==", + "version": "4.28.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz", + "integrity": "sha512-ri1OzcLnk1HH4gORmr1dllxDzzrN6goUIz/P4MHFV0YZJDCADPR3RvYNp0PW2SetKTThar6wlbFTL00hV2Q+fg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.25.0", + "@typescript-eslint/types": "4.28.3", "eslint-visitor-keys": "^2.0.0" } }, @@ -266,170 +268,170 @@ "dev": true }, "@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webpack-cli/configtest": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", - "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz", + "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==", "dev": true }, "@webpack-cli/info": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", - "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.3.0.tgz", + "integrity": "sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==", "dev": true, "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", - "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.1.tgz", + "integrity": "sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw==", "dev": true }, "@xtuc/ieee754": { @@ -451,9 +453,9 @@ "dev": true }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, "ajv": { @@ -645,9 +647,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "version": "1.0.30001244", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001244.tgz", + "integrity": "sha512-Wb4UFZPkPoJoKKVfELPWytRzpemjP/s0pe22NriANru1NoI+5bGNxzKtk7edYL8rmCWTfQO8eRiF0pn1Dqzx7Q==", "dev": true }, "chai": { @@ -974,9 +976,9 @@ } }, "electron-to-chromium": { - "version": "1.3.742", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz", - "integrity": "sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q==", + "version": "1.3.774", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.774.tgz", + "integrity": "sha512-Fggh17Q1yyv1uMzq8Qn1Ci58P50qcRXMXd2MBcB9sxo6rJxjUutWcNw8uCm3gFWMdcblBO6mDT5HzX/RVRRECA==", "dev": true }, "emoji-regex": { @@ -1033,9 +1035,9 @@ } }, "es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", + "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", "dev": true }, "escalade": { @@ -1051,13 +1053,14 @@ "dev": true }, "eslint": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", - "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", + "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", + "@eslint/eslintrc": "^0.4.2", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -1074,7 +1077,7 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", @@ -1097,6 +1100,23 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -1122,20 +1142,12 @@ } }, "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "eslint-visitor-keys": "^2.0.0" } }, "eslint-visitor-keys": { @@ -1222,9 +1234,9 @@ "dev": true }, "execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", @@ -1245,17 +1257,16 @@ "dev": true }, "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, "fast-json-stable-stringify": { @@ -1277,9 +1288,9 @@ "dev": true }, "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -1339,9 +1350,9 @@ } }, "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", "dev": true }, "fs.realpath": { @@ -1428,26 +1439,18 @@ "dev": true }, "globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "requires": { "type-fest": "^0.20.2" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } } }, "globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -1579,9 +1582,9 @@ } }, "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", + "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", "dev": true, "requires": { "has": "^1.0.3" @@ -1654,14 +1657,14 @@ "dev": true }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", + "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" }, "dependencies": { "has-flag": { @@ -1671,9 +1674,9 @@ "dev": true }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -1904,18 +1907,18 @@ "dev": true }, "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", "dev": true }, "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "dev": true, "requires": { - "mime-db": "1.47.0" + "mime-db": "1.48.0" } }, "mimic-fn": { @@ -2047,9 +2050,9 @@ "dev": true }, "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true }, "normalize-path": { @@ -2402,9 +2405,9 @@ } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "require-directory": { @@ -2483,12 +2486,12 @@ "dev": true }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -2696,9 +2699,9 @@ }, "dependencies": { "ajv": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", - "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", + "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -2722,9 +2725,9 @@ "dev": true }, "terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", "dev": true, "requires": { "commander": "^2.20.0", @@ -2741,17 +2744,28 @@ } }, "terser-webpack-plugin": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz", - "integrity": "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dev": true, "requires": { - "jest-worker": "^26.6.2", + "jest-worker": "^27.0.2", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", "terser": "^5.7.0" + }, + "dependencies": { + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + } } }, "text-table": { @@ -2842,9 +2856,9 @@ "dev": true }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "typed-rest-client": { @@ -2859,9 +2873,9 @@ } }, "typescript": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", - "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", "dev": true }, "uc.micro": { @@ -2973,21 +2987,21 @@ } }, "webpack": { - "version": "5.38.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", - "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.44.0.tgz", + "integrity": "sha512-I1S1w4QLoKmH19pX6YhYN0NiSXaWY8Ou00oA+aMcr9IUGeF5azns+IKBkfoAAG9Bu5zOIzZt/mN35OffBya8AQ==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.4.0", + "es-module-lexer": "^0.7.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -2998,15 +3012,15 @@ "neo-async": "^2.6.2", "schema-utils": "^3.0.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", + "terser-webpack-plugin": "^5.1.3", "watchpack": "^2.2.0", "webpack-sources": "^2.3.0" }, "dependencies": { "acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", "dev": true }, "enhanced-resolve": { @@ -3028,15 +3042,15 @@ } }, "webpack-cli": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", - "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.2.tgz", + "integrity": "sha512-mEoLmnmOIZQNiRl0ebnjzQ74Hk0iKS5SiEEnpq3dRezoyR3yPaeQZCMCe+db4524pj1Pd5ghZXjT41KLzIhSLw==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.3", - "@webpack-cli/info": "^1.2.4", - "@webpack-cli/serve": "^1.4.0", + "@webpack-cli/configtest": "^1.0.4", + "@webpack-cli/info": "^1.3.0", + "@webpack-cli/serve": "^1.5.1", "colorette": "^1.2.1", "commander": "^7.0.0", "execa": "^5.0.0", @@ -3057,9 +3071,9 @@ } }, "webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "requires": { "clone-deep": "^4.0.1", @@ -3200,11 +3214,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/package.json b/package.json index 900107ddd..83b03c908 100644 --- a/package.json +++ b/package.json @@ -192,27 +192,23 @@ "deploy": "vsce publish" }, "devDependencies": { - "@types/chai": "^4.2.18", - "@types/mocha": "^8.2.2", - "@types/node": "^14.17.1", + "@types/chai": "^4.2.21", + "@types/mocha": "^8.2.3", + "@types/node": "^14.17.5", "@types/vscode": "^1.56.0", - "@typescript-eslint/eslint-plugin": "^4.25.0", - "@typescript-eslint/parser": "^4.25.0", + "@typescript-eslint/eslint-plugin": "^4.28.3", + "@typescript-eslint/parser": "^4.28.3", "chai": "^4.3.4", - "eslint": "^7.27.0", + "eslint": "^7.30.0", "eslint-config-prettier": "^8.3.0", "merge-options": "^3.0.4", "mocha": "^8.4.0", "rimraf": "^3.0.2", "ts-loader": "^8.3.0", "ts-node": "^9.1.1", - "typescript": "^4.3.2", + "typescript": "^4.3.5", "vsce": "^1.95.1", - "webpack": "^5.38.1", - "webpack-cli": "^4.7.0" - }, - "dependencies": { - "@flatten-js/interval-tree": "^1.0.14", - "yaml": "^1.10.2" + "webpack": "^5.44.0", + "webpack-cli": "^4.7.2" } } diff --git a/server/package-lock.json b/server/package-lock.json index f187f7e9d..d9d39fd7d 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -10,32 +10,32 @@ "integrity": "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg==" }, "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "requires": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "requires": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@types/chai": { - "version": "4.2.18", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.18.tgz", - "integrity": "sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ==", + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz", + "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==", "dev": true }, "@types/ini": { @@ -45,15 +45,15 @@ "dev": true }, "@types/lodash": { - "version": "4.14.170", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.170.tgz", - "integrity": "sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==", + "version": "4.14.171", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz", + "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==", "dev": true }, "@types/mocha": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz", - "integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", "dev": true }, "@ungap/promise-all-settled": { @@ -358,22 +358,31 @@ "dev": true }, "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", "requires": { "reusify": "^1.0.4" } @@ -442,17 +451,18 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } }, "globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -595,12 +605,19 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + } } }, "minimatch": { @@ -716,7 +733,8 @@ "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true }, "queue-microtask": { "version": "1.2.3", diff --git a/server/package.json b/server/package.json index 7c3db49c6..6bbb5fa42 100644 --- a/server/package.json +++ b/server/package.json @@ -17,17 +17,17 @@ "test": "mocha -r ts-node/register 'src/test/**/*.ts'" }, "devDependencies": { - "@types/chai": "^4.2.18", + "@types/chai": "^4.2.21", "@types/ini": "^1.3.30", - "@types/lodash": "^4.14.170", - "@types/mocha": "^8.2.2", + "@types/lodash": "^4.14.171", + "@types/mocha": "^8.2.3", "chai": "^4.3.4", "mocha": "^8.4.0", "ts-node": "^9.1.1" }, "dependencies": { "@flatten-js/interval-tree": "^1.0.14", - "globby": "^11.0.3", + "globby": "^11.0.4", "ini": "^1.3.8", "lodash": "^4.17.21", "vscode-languageserver": "^7.0.0", From 69a0becbab777ad6f13c9a94f1e6825b59de5eb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Tue, 13 Jul 2021 23:09:45 +0200 Subject: [PATCH 071/558] Changed feature request label to 'enhancement' --- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index b5b0a32c3..d5461f723 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,7 +1,7 @@ --- name: 💡 Feature request description: Suggest an idea for this project -labels: feature +labels: enhancement body: - type: markdown From 18a2a7ffc0a0b48eb47d1991272fa8ade1307c1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Thu, 15 Jul 2021 19:10:17 +0200 Subject: [PATCH 072/558] Fix documentation fragment processing (#4) Implementation expected an array for `extends_documentation_fragment`. Now it also accepts a singular element in YAML flow style. --- CHANGELOG.md | 5 +++++ package.json | 2 +- server/src/utils/docsParser.ts | 10 ++++++---- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 758f1197b..d60bc2da1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,5 +5,10 @@ All notable changes to the Ansible VS Code extension will be documented in this The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.0.1] - 2021-07-15 +### Fixed +- Documentation fragments are now also correctly processed in case only one is + provided, using YAML flow style. The `file` module is a prominent example. + ## [1.0.0] - 2021-07-14 - Initial release diff --git a/package.json b/package.json index 83b03c908..fe6e4d924 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "description": "Ansible language support", "author": "Tomasz Maciążek", "license": "MIT", - "version": "1.0.0", + "version": "1.0.1", "repository": { "type": "git", "url": "https://github.com/tomaciazek/vscode-ansible.git" diff --git a/server/src/utils/docsParser.ts b/server/src/utils/docsParser.ts index ad88cf18e..21acd8ee3 100644 --- a/server/src/utils/docsParser.ts +++ b/server/src/utils/docsParser.ts @@ -22,12 +22,14 @@ export function processDocumentationFragments( ): void { module.fragments = []; if ( - hasOwnProperty(module.rawDocumentation, 'extends_documentation_fragment') && - module.rawDocumentation.extends_documentation_fragment instanceof Array + hasOwnProperty(module.rawDocumentation, 'extends_documentation_fragment') ) { + const docFragmentNames = + module.rawDocumentation.extends_documentation_fragment instanceof Array + ? module.rawDocumentation.extends_documentation_fragment + : [module.rawDocumentation.extends_documentation_fragment]; const resultContents = {}; - for (const docFragmentName of module.rawDocumentation - .extends_documentation_fragment) { + for (const docFragmentName of docFragmentNames) { const docFragment = docFragments.get(docFragmentName) || docFragments.get(`ansible.builtin.${docFragmentName}`); From 0976ed66916979b7d4ad98572b3b89773b172004 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Sat, 17 Jul 2021 13:13:23 +0200 Subject: [PATCH 073/558] Fix and reformat GitHub issue templates (#5) --- .github/ISSUE_TEMPLATE/bug_report.yml | 41 +++++++++++++--------- .github/ISSUE_TEMPLATE/feature_request.yml | 33 ++++++++++------- 2 files changed, 44 insertions(+), 30 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index b88cf09c8..68257f7dd 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -6,31 +6,34 @@ labels: bug body: - type: markdown attributes: - value: > + value: >- **Thanks for taking the time to fill out this bug report!** - ⚠ - Please, verify first that your issue is not [already reported][issues]. - 🛈 - **Tip:** If you are seeking community support, or want to ask a question, - please consider [starting a discussion][discussions]. + ⚠ Please, verify first that your issue is not [already reported][issues]. + + + 🛈 **Tip:** If you are seeking community support, or want to ask a + question, please consider [starting a discussion][discussions]. + [issues]: ../search?q=is%3Aissue&type=issues + [discussions]: ../discussions - type: textarea id: summary attributes: label: Summary - description: A clear and concise description of what the bug is. - placeholder: >- + description: >- + A clear and concise description of what the bug is. + + 🛈 **Tip:** You can attach images or log files by clicking this area to + highlight it and then dragging files in. + placeholder: | TLDR: When I do X, VS Code does/shows Y instead of Z. To elaborate [...] - - 🛈 - **Tip:** You can attach images or log files by clicking this area to highlight it and then dragging files in. validations: required: true @@ -53,8 +56,10 @@ body: attributes: label: Ansible Version description: >- - Paste verbatim output from `ansible --version` below. **This will be - automatically formatted into code, so no need for backticks.** + Paste verbatim output from `ansible --version` below. + + **This will be automatically formatted into code, so no need for + backticks.** render: shell placeholder: | $ ansible --version @@ -75,8 +80,8 @@ body: attributes: label: OS / Environment description: >- - Provide all relevant information, including OS, remote extension used (underlying OS too), - `ansible-lint` version etc. + Provide all relevant information, including OS, remote extension used + (underlying OS too), `ansible-lint` version etc. placeholder: Windows 10, WSL (Ubuntu 18.04), ansible-lint 5.0.12 validations: required: true @@ -87,6 +92,8 @@ body: label: Relevant log output description: >- Please copy and paste any relevant log output (from `Output > Ansible - Server`). **This will be automatically formatted into code, so no need - for backticks.** + Server`). + + **This will be automatically formatted into code, so no need for + backticks.** render: shell diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index d5461f723..728f1d5b5 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -6,29 +6,34 @@ labels: enhancement body: - type: markdown attributes: - value: > + value: >- **Thanks for taking the time to fill out this feature request!** - ⚠ - Please, verify first that the feature you want is not [already requested][issues]. - 🛈 - **Tip:** If you are seeking community support, or want to ask a question, - please consider [starting a discussion][discussions]. + ⚠ Please, verify first that the feature you want is not [already requested][issues]. + + + 🛈 **Tip:** If you are seeking community support, or want to ask a + question, please consider [starting a discussion][discussions]. + [issues]: ../search?q=is%3Aissue&type=issues + [discussions]: ../discussions - type: textarea id: problem attributes: label: Problem - description: Is your feature request related to a problem? Please describe. - placeholder: >- - A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + description: >- + Is your feature request related to a problem? Please describe. + + 🛈 **Tip:** You can attach images or log files by clicking this area to + highlight it and then dragging files in. + placeholder: | + A clear and concise description of what the problem is. + Example: I'm always frustrated when [...] - 🛈 - **Tip:** You can attach images or log files by clicking this area to highlight it and then dragging files in. validations: required: true @@ -46,10 +51,12 @@ body: attributes: label: Alternatives description: Describe alternatives you've considered. - placeholder: A clear and concise description of any alternative solutions or features you've considered. + placeholder: >- + A clear and concise description of any alternative solutions or features + you've considered. - type: textarea id: context attributes: label: Additional context - description: Add any other context or screenshots about the feature request here. + description: Add any other context or screenshots about the feature request. From fe55b5c0fb86d3b5f06a14b101470627a3f87a1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Mon, 19 Jul 2021 19:15:40 +0200 Subject: [PATCH 074/558] Correct python version used for path discovery (#7) --- CHANGELOG.md | 6 ++++++ package.json | 2 +- server/src/services/ansibleConfig.ts | 11 ++--------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d60bc2da1..563d46ced 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to the Ansible VS Code extension will be documented in this The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.0.2] - 2021-07-19 +### Fixed +- Modules from pre-installed Ansible collections will now be resolved when using + the extension in an environment that also has Python 2 installed. +- The cause of the `invalid syntax` error shown on startup has been removed. + ## [1.0.1] - 2021-07-15 ### Fixed - Documentation fragments are now also correctly processed in case only one is diff --git a/package.json b/package.json index fe6e4d924..062cb8362 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "description": "Ansible language support", "author": "Tomasz Maciążek", "license": "MIT", - "version": "1.0.1", + "version": "1.0.2", "repository": { "type": "git", "url": "https://github.com/tomaciazek/vscode-ansible.git" diff --git a/server/src/services/ansibleConfig.ts b/server/src/services/ansibleConfig.ts index 1cf6c67f1..495c4f4fe 100644 --- a/server/src/services/ansibleConfig.ts +++ b/server/src/services/ansibleConfig.ts @@ -70,8 +70,9 @@ export class AnsibleConfig { this._ansible_location = versionInfo['ansible python module location']; // get Python sys.path + // this is needed to get the pre-installed collections to work const [pythonPathCommand, pythonPathEnv] = withInterpreter( - 'python', + 'python3', ' -c "import sys; print(sys.path, end=\\"\\")"', settings.python.interpreterPath, settings.python.activationScript @@ -82,14 +83,6 @@ export class AnsibleConfig { env: pythonPathEnv, }); this._collection_paths.push(...parsePythonStringArray(pythonPathResult)); - - /** - * TODO: Implement the 'ansible.builtin' artificial collection - * if collection_name == 'ansible.builtin': - # ansible.builtin is a synthetic collection, get its routing config from the Ansible distro - ansible_pkg_path = os.path.dirname(import_module('ansible').__file__) - metadata_path = os.path.join(ansible_pkg_path, 'config/ansible_builtin_runtime.yml') - */ } catch (error) { if (error instanceof Error) { this.connection.window.showErrorMessage(error.message); From d79cf7fa1aaffdeba6911229831e4056b4225f53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Tue, 27 Jul 2021 21:35:09 +0200 Subject: [PATCH 075/558] Improve error handling when parsing ansible-lint output (#11) --- CHANGELOG.md | 5 + package.json | 2 +- server/src/services/ansibleLint.ts | 149 ++++++++++++++++------------- 3 files changed, 91 insertions(+), 65 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 563d46ced..177a868ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to the Ansible VS Code extension will be documented in this The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.0.3] - 2021-07-27 +### Changed +- Error handling in case output from Ansible Lint can't be parsed is now more + informative. Contextual information is now logged in `Ansible Server` output. + ## [1.0.2] - 2021-07-19 ### Fixed - Modules from pre-installed Ansible collections will now be resolved when using diff --git a/package.json b/package.json index 062cb8362..1b192b2bd 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "description": "Ansible language support", "author": "Tomasz Maciążek", "license": "MIT", - "version": "1.0.2", + "version": "1.0.3", "repository": { "type": "git", "url": "https://github.com/tomaciazek/vscode-ansible.git" diff --git a/server/src/services/ansibleLint.ts b/server/src/services/ansibleLint.ts index 4709ed304..af489c6f7 100644 --- a/server/src/services/ansibleLint.ts +++ b/server/src/services/ansibleLint.ts @@ -1,7 +1,6 @@ import * as child_process from 'child_process'; import { ExecException } from 'child_process'; import { promises as fs } from 'fs'; -import * as path from 'path'; import { URL } from 'url'; import { promisify } from 'util'; import { @@ -108,15 +107,11 @@ export class AnsibleLint { stderr: string; }; if (execError.code === 2) { - try { - diagnostics = this.processReport( - execError.stdout, - await ansibleLintConfigPromise, - workingDirectory - ); - } catch (error) { - this.connection.window.showErrorMessage(execError.message); - } + diagnostics = this.processReport( + execError.stdout, + await ansibleLintConfigPromise, + workingDirectory + ); } else { this.connection.window.showErrorMessage(execError.message); } @@ -143,70 +138,96 @@ export class AnsibleLint { workingDirectory: string ): Map { const diagnostics: Map = new Map(); - const report = JSON.parse(result); - if (report instanceof Array) { - for (const item of report) { - if ( - typeof item.check_name === 'string' && - item.location && - typeof item.location.path === 'string' && - item.location.lines && - (item.location.lines.begin || - typeof item.location.lines.begin === 'number') - ) { - const begin_line = - item.location.lines.begin.line || item.location.lines.begin || 1; - const begin_column = item.location.lines.begin.column || 1; - const start: Position = { - line: begin_line - 1, - character: begin_column - 1, - }; - const end: Position = { - line: begin_line - 1, - character: Number.MAX_SAFE_INTEGER, - }; - const range: Range = { - start: start, - end: end, - }; - - let severity: DiagnosticSeverity = DiagnosticSeverity.Error; - if (ansibleLintConfig) { - const lintRuleName = (item.check_name as string).match( - /\[(?[a-z\-]+)\].*/ - )?.groups?.name; + if (!result) { + this.connection.console.warn( + 'Standard output from ansible-lint is suspiciously empty.' + ); + return diagnostics; + } + try { + const report = JSON.parse(result); + if (report instanceof Array) { + for (const item of report) { + if ( + typeof item.check_name === 'string' && + item.location && + typeof item.location.path === 'string' && + item.location.lines && + (item.location.lines.begin || + typeof item.location.lines.begin === 'number') + ) { + const begin_line = + item.location.lines.begin.line || item.location.lines.begin || 1; + const begin_column = item.location.lines.begin.column || 1; + const start: Position = { + line: begin_line - 1, + character: begin_column - 1, + }; + const end: Position = { + line: begin_line - 1, + character: Number.MAX_SAFE_INTEGER, + }; + const range: Range = { + start: start, + end: end, + }; - if (lintRuleName && ansibleLintConfig.warnList.has(lintRuleName)) { - severity = DiagnosticSeverity.Warning; - } + let severity: DiagnosticSeverity = DiagnosticSeverity.Error; + if (ansibleLintConfig) { + const lintRuleName = (item.check_name as string).match( + /\[(?[a-z\-]+)\].*/ + )?.groups?.name; - const categories = item.categories; - if (categories instanceof Array) { - if (categories.some((c) => ansibleLintConfig.warnList.has(c))) { + if ( + lintRuleName && + ansibleLintConfig.warnList.has(lintRuleName) + ) { severity = DiagnosticSeverity.Warning; } + + const categories = item.categories; + if (categories instanceof Array) { + if (categories.some((c) => ansibleLintConfig.warnList.has(c))) { + severity = DiagnosticSeverity.Warning; + } + } } - } - const locationUri = `file://${workingDirectory}/${item.location.path}`; + const locationUri = `file://${workingDirectory}/${item.location.path}`; - let fileDiagnostics = diagnostics.get(locationUri); - if (!fileDiagnostics) { - fileDiagnostics = []; - diagnostics.set(locationUri, fileDiagnostics); - } - let message: string = item.check_name; - if (item.description) { - message += `\nDescription: ${item.description}`; + let fileDiagnostics = diagnostics.get(locationUri); + if (!fileDiagnostics) { + fileDiagnostics = []; + diagnostics.set(locationUri, fileDiagnostics); + } + let message: string = item.check_name; + if (item.description) { + message += `\nDescription: ${item.description}`; + } + fileDiagnostics.push({ + message: message, + range: range || Range.create(0, 0, 0, 0), + severity: severity, + source: 'Ansible', + }); } - fileDiagnostics.push({ - message: message, - range: range || Range.create(0, 0, 0, 0), - severity: severity, - source: 'Ansible', - }); } } + } catch (error) { + this.connection.window.showErrorMessage( + 'Could not parse ansible-lint output. Please check your ansible-lint installation & configuration.' + + ' More info in `Ansible Server` output.' + ); + let message: string; + if (error instanceof Error) { + message = error.message; + } else { + message = JSON.stringify(error); + } + this.connection.console.error( + `Exception while parsing ansible-lint output: ${message}` + + `\nTried to parse the following:\n${result}` + ); } return diagnostics; } From ffadea0802292a267ebf70b931c746d0f0eef977 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Wed, 28 Jul 2021 16:03:39 +0530 Subject: [PATCH 076/558] Refactor repository to contain server code (#1) * Refactor repository to contain server code * Update directory to contain server code only * Remove client code * Update depedencies * Update build steps * add credits in readme --- .vscode/launch.json | 31 +- .vscode/tasks.json | 18 +- CHANGELOG.md | 20 +- LICENSE | 1 + README.md | 24 + client/package-lock.json | 406 -- client/package.json | 23 - client/src/extension.ts | 51 - client/tsconfig.json | 15 - client/webpack.config.js | 18 - package-lock.json | 3282 ----------------- package.json | 230 +- scripts/.eslintrc.js | 28 + scripts/check-dependencies.js | 21 + scripts/tsconfig.esm.json | 15 + scripts/tsconfig.json | 14 + scripts/tsconfig.umd.json | 14 + server/package-lock.json | 1085 ------ server/package.json | 37 - server/tsconfig.json | 15 - server/webpack.config.js | 18 - {server/src => src}/ansibleLanguageService.ts | 0 .../interfaces/ansibleLintConfig.ts | 0 .../src => src}/interfaces/documentMeta.ts | 0 .../interfaces/extensionSettings.ts | 0 {server/src => src}/interfaces/module.ts | 0 .../src => src}/interfaces/pluginRouting.ts | 0 .../providers/completionProvider.ts | 0 .../providers/definitionProvider.ts | 0 .../src => src}/providers/hoverProvider.ts | 0 .../providers/semanticTokenProvider.ts | 0 .../providers/validationProvider.ts | 0 {server/src => src}/server.ts | 0 {server/src => src}/services/ansibleConfig.ts | 0 {server/src => src}/services/ansibleLint.ts | 0 {server/src => src}/services/docsLibrary.ts | 0 .../src => src}/services/metadataLibrary.ts | 0 .../src => src}/services/settingsManager.ts | 0 .../src => src}/services/validationManager.ts | 0 .../src => src}/services/workspaceManager.ts | 0 {server/src => src}/utils/ansible.ts | 0 {server/src => src}/utils/docsFinder.ts | 0 {server/src => src}/utils/docsFormatter.ts | 0 {server/src => src}/utils/docsParser.ts | 0 {server/src => src}/utils/misc.ts | 0 {server/src => src}/utils/yaml.ts | 0 .../data/utils/yaml/ancestryBuilder.yml | 0 .../utils/yaml/getDeclaredCollections.yml | 0 .../data/utils/yaml/isBlockParam.yml | 0 .../data/utils/yaml/isPlayParam.yml | 0 .../data/utils/yaml/isRoleParam.yml | 0 .../data/utils/yaml/isTaskParam.yml | 0 .../test => test}/data/utils/yaml/test.json | 0 {server/src/test => test}/utils/yaml.test.ts | 2 +- tsconfig.json | 27 +- webpack.config.js | 56 - 56 files changed, 193 insertions(+), 5258 deletions(-) delete mode 100644 client/package-lock.json delete mode 100644 client/package.json delete mode 100644 client/src/extension.ts delete mode 100644 client/tsconfig.json delete mode 100644 client/webpack.config.js delete mode 100644 package-lock.json create mode 100644 scripts/.eslintrc.js create mode 100644 scripts/check-dependencies.js create mode 100644 scripts/tsconfig.esm.json create mode 100755 scripts/tsconfig.json create mode 100644 scripts/tsconfig.umd.json delete mode 100644 server/package-lock.json delete mode 100644 server/package.json delete mode 100644 server/tsconfig.json delete mode 100644 server/webpack.config.js rename {server/src => src}/ansibleLanguageService.ts (100%) rename {server/src => src}/interfaces/ansibleLintConfig.ts (100%) rename {server/src => src}/interfaces/documentMeta.ts (100%) rename {server/src => src}/interfaces/extensionSettings.ts (100%) rename {server/src => src}/interfaces/module.ts (100%) rename {server/src => src}/interfaces/pluginRouting.ts (100%) rename {server/src => src}/providers/completionProvider.ts (100%) rename {server/src => src}/providers/definitionProvider.ts (100%) rename {server/src => src}/providers/hoverProvider.ts (100%) rename {server/src => src}/providers/semanticTokenProvider.ts (100%) rename {server/src => src}/providers/validationProvider.ts (100%) rename {server/src => src}/server.ts (100%) rename {server/src => src}/services/ansibleConfig.ts (100%) rename {server/src => src}/services/ansibleLint.ts (100%) rename {server/src => src}/services/docsLibrary.ts (100%) rename {server/src => src}/services/metadataLibrary.ts (100%) rename {server/src => src}/services/settingsManager.ts (100%) rename {server/src => src}/services/validationManager.ts (100%) rename {server/src => src}/services/workspaceManager.ts (100%) rename {server/src => src}/utils/ansible.ts (100%) rename {server/src => src}/utils/docsFinder.ts (100%) rename {server/src => src}/utils/docsFormatter.ts (100%) rename {server/src => src}/utils/docsParser.ts (100%) rename {server/src => src}/utils/misc.ts (100%) rename {server/src => src}/utils/yaml.ts (100%) rename {server/src/test => test}/data/utils/yaml/ancestryBuilder.yml (100%) rename {server/src/test => test}/data/utils/yaml/getDeclaredCollections.yml (100%) rename {server/src/test => test}/data/utils/yaml/isBlockParam.yml (100%) rename {server/src/test => test}/data/utils/yaml/isPlayParam.yml (100%) rename {server/src/test => test}/data/utils/yaml/isRoleParam.yml (100%) rename {server/src/test => test}/data/utils/yaml/isTaskParam.yml (100%) rename {server/src/test => test}/data/utils/yaml/test.json (100%) rename {server/src/test => test}/utils/yaml.test.ts (99%) delete mode 100644 webpack.config.js diff --git a/.vscode/launch.json b/.vscode/launch.json index 7b3cf3648..6419d5e6e 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,24 +5,7 @@ { "version": "0.2.0", "configurations": [ - { - "name": "Launch Extension (quick)", // does not use webpack - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": ["--extensionDevelopmentPath=${workspaceFolder}"], - "outFiles": ["${workspaceFolder}/client/out/**/*.js"], - "preLaunchTask": "npm: watch" - }, - { - "name": "Launch Extension", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": ["--extensionDevelopmentPath=${workspaceFolder}"], - "outFiles": ["${workspaceFolder}/client/out/**/*.js"], - "preLaunchTask": "Webpack Watch" - }, + // An attach configuration that attaches the debugger to a running server { "name": "Attach to Server", "type": "node", @@ -30,7 +13,10 @@ "timeout": 30000, "port": 6009, "restart": true, - "outFiles": ["${workspaceRoot}/server/out/**/*.js"] + "sourceMaps": true, + "outFiles": ["${workspaceRoot}/out/**/*.js"], + "protocol": "inspector", + "trace": true } // { // "name": "Language Server E2E Test", @@ -45,11 +31,4 @@ // "outFiles": ["${workspaceRoot}/client/out/test/**/*.js"] // } ], - "compounds": [ - { - "name": "Client + Server", - "stopAll": true, - "configurations": ["Launch Extension (quick)", "Attach to Server"] - } - ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index a24749981..ea34692fa 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -56,27 +56,11 @@ }, "problemMatcher": "$ts-webpack-watch" }, - { - "label": "Client Watch", - "type": "npm", - "script": "webpack:watch:client", - "isBackground": true, - "group": { - "kind": "build", - "isDefault": true - }, - "presentation": { - "panel": "dedicated", - "reveal": "never", - "group": "Build" - }, - "problemMatcher": "$ts-webpack-watch" - }, { // this requires manually closing terminal windows with watch processes // running, before the task can be launched again "label": "Webpack Watch", - "dependsOn": ["Client Watch", "Server Watch"] + "dependsOn": ["Server Watch"] }, { "label": "Clean & Webpack Watch", diff --git a/CHANGELOG.md b/CHANGELOG.md index 177a868ad..370e5ecb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,21 +5,5 @@ All notable changes to the Ansible VS Code extension will be documented in this The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [1.0.3] - 2021-07-27 -### Changed -- Error handling in case output from Ansible Lint can't be parsed is now more - informative. Contextual information is now logged in `Ansible Server` output. - -## [1.0.2] - 2021-07-19 -### Fixed -- Modules from pre-installed Ansible collections will now be resolved when using - the extension in an environment that also has Python 2 installed. -- The cause of the `invalid syntax` error shown on startup has been removed. - -## [1.0.1] - 2021-07-15 -### Fixed -- Documentation fragments are now also correctly processed in case only one is - provided, using YAML flow style. The `file` module is a prominent example. - -## [1.0.0] - 2021-07-14 -- Initial release +## [0.1.0] - 2021-07-28 +- Initial ansible language server release. Based on the vscode-ansible plugin developed by [Tomasz Maciążek](https://github.com/tomaciazek) diff --git a/LICENSE b/LICENSE index 0d779c04d..c74627515 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ MIT License Copyright (c) 2021 Tomasz Maciążek +Copyright (c) 2021 Red Hat Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 2e17c6ffb..7494f3ab9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,26 @@ # Ansible VS Code Extension This extension adds language support for Ansible to VS Code. +### Getting started + +1. Install prerequisites: + - latest [Visual Studio Code](https://code.visualstudio.com/) + - [Node.js](https://nodejs.org/) v12.0.0 or higher +2. Fork and clone this repository +3. Install the dependencies + ```bash + cd ansible-language-server + $ yarn install + ``` +4. Build the language server + ```bash + $ yarn run build + ``` +5. The new built server is now located in ./out/server/src/server.js. + ```bash + node (Ansible Language Server Location)/out/server/src/server.js [--stdio] + ``` + ## Features ### Syntax highlighting @@ -102,3 +122,7 @@ any level (User, Remote, Workspace and/or Folder). have syntax highlighting of Jinja template files, you'll need to install other extension. - Jinja *blocks* (inside Ansible YAML files) are not supported yet. + +## Credit + +Based on the good work done by [Tomasz Maciążek](https://github.com/tomaciazek/vscode-ansible) \ No newline at end of file diff --git a/client/package-lock.json b/client/package-lock.json deleted file mode 100644 index 2ef984af9..000000000 --- a/client/package-lock.json +++ /dev/null @@ -1,406 +0,0 @@ -{ - "name": "ansible-client", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@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 - }, - "@types/vscode": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz", - "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==", - "dev": true - }, - "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, - "requires": { - "debug": "4" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", - "dev": true - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true - }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "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, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "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 - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "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 - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "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" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "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 - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "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, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true - }, - "unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "requires": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" - }, - "vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "requires": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - } - }, - "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - }, - "vscode-test": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.2.tgz", - "integrity": "sha512-x9PVfKxF6EInH9iSFGQi0V8H5zIW1fC7RAer6yNQR6sy3WyOwlWkuT3I+wf75xW/cO53hxMi1aj/EvqQfDFOAg==", - "dev": true, - "requires": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/client/package.json b/client/package.json deleted file mode 100644 index a159c6f9e..000000000 --- a/client/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "ansible-client", - "publisher": "tomaciazek", - "description": "VSCode part of a language server", - "author": "Tomasz Maciążek", - "private": true, - "license": "MIT", - "version": "0.0.1", - "repository": { - "type": "git", - "url": "https://github.com/tomaciazek/vscode-ansible.git" - }, - "engines": { - "vscode": "^1.56.0" - }, - "dependencies": { - "vscode-languageclient": "^7.0.0" - }, - "devDependencies": { - "@types/vscode": "^1.56.0", - "vscode-test": "^1.5.2" - } -} diff --git a/client/src/extension.ts b/client/src/extension.ts deleted file mode 100644 index 187b66114..000000000 --- a/client/src/extension.ts +++ /dev/null @@ -1,51 +0,0 @@ -import * as path from 'path'; -import { ExtensionContext } from 'vscode'; - -import { - LanguageClient, - LanguageClientOptions, - ServerOptions, - TransportKind, -} from 'vscode-languageclient/node'; - -let client: LanguageClient; - -export function activate(context: ExtensionContext): void { - const serverModule = context.asAbsolutePath( - path.join('server', 'out', 'server.js') - ); - - // server is run at port 6009 for debugging - const debugOptions = { execArgv: ['--nolazy', '--inspect=6009'] }; - - const serverOptions: ServerOptions = { - run: { module: serverModule, transport: TransportKind.ipc }, - debug: { - module: serverModule, - transport: TransportKind.ipc, - options: debugOptions, - }, - }; - - const clientOptions: LanguageClientOptions = { - // register the server for Ansible documents - documentSelector: [{ scheme: 'file', language: 'ansible' }], - }; - - client = new LanguageClient( - 'ansibleServer', - 'Ansible Server', - serverOptions, - clientOptions - ); - - // start the client and the server - client.start(); -} - -export function deactivate(): Thenable | undefined { - if (!client) { - return undefined; - } - return client.stop(); -} diff --git a/client/tsconfig.json b/client/tsconfig.json deleted file mode 100644 index 188bb144a..000000000 --- a/client/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "target": "ES2019", - "lib": ["ES2019"], - "module": "CommonJS", - "moduleResolution": "Node", - "outDir": "out", - "rootDir": "src", - "sourceMap": true, - "strict": true - }, - "include": ["src"], - "exclude": ["node_modules", ".vscode-test"] -} diff --git a/client/webpack.config.js b/client/webpack.config.js deleted file mode 100644 index dada3bc72..000000000 --- a/client/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -//@ts-check - -'use strict'; - -/* eslint @typescript-eslint/no-var-requires: "off" */ -const withDefaults = require('../webpack.config'); -const path = require('path'); - -module.exports = withDefaults({ - context: path.resolve(__dirname), - entry: { - extension: './src/extension.ts', - }, - output: { - filename: 'extension.js', - path: path.resolve(__dirname, 'out'), - }, -}); diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index df1122408..000000000 --- a/package-lock.json +++ /dev/null @@ -1,3282 +0,0 @@ -{ - "name": "ansible", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/chai": { - "version": "4.2.21", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz", - "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==", - "dev": true - }, - "@types/eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", - "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==", - "dev": true - }, - "@types/mocha": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", - "dev": true - }, - "@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==", - "dev": true - }, - "@types/vscode": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz", - "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.3.tgz", - "integrity": "sha512-jW8sEFu1ZeaV8xzwsfi6Vgtty2jf7/lJmQmDkDruBjYAbx5DA8JtbcMnP0rNPUG+oH5GoQBTSp+9613BzuIpYg==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.28.3", - "@typescript-eslint/scope-manager": "4.28.3", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.3.tgz", - "integrity": "sha512-zZYl9TnrxwEPi3FbyeX0ZnE8Hp7j3OCR+ELoUfbwGHGxWnHg9+OqSmkw2MoCVpZksPCZYpQzC559Ee9pJNHTQw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.3", - "@typescript-eslint/types": "4.28.3", - "@typescript-eslint/typescript-estree": "4.28.3", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.3.tgz", - "integrity": "sha512-ZyWEn34bJexn/JNYvLQab0Mo5e+qqQNhknxmc8azgNd4XqspVYR5oHq9O11fLwdZMRcj4by15ghSlIEq+H5ltQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.28.3", - "@typescript-eslint/types": "4.28.3", - "@typescript-eslint/typescript-estree": "4.28.3", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.3.tgz", - "integrity": "sha512-/8lMisZ5NGIzGtJB+QizQ5eX4Xd8uxedFfMBXOKuJGP0oaBBVEMbJVddQKDXyyB0bPlmt8i6bHV89KbwOelJiQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.3", - "@typescript-eslint/visitor-keys": "4.28.3" - } - }, - "@typescript-eslint/types": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.3.tgz", - "integrity": "sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz", - "integrity": "sha512-YAb1JED41kJsqCQt1NcnX5ZdTA93vKFCMP4lQYG6CFxd0VzDJcKttRlMrlG+1qiWAw8+zowmHU1H0OzjWJzR2w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.3", - "@typescript-eslint/visitor-keys": "4.28.3", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz", - "integrity": "sha512-ri1OzcLnk1HH4gORmr1dllxDzzrN6goUIz/P4MHFV0YZJDCADPR3RvYNp0PW2SetKTThar6wlbFTL00hV2Q+fg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.3", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz", - "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==", - "dev": true - }, - "@webpack-cli/info": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.3.0.tgz", - "integrity": "sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.1.tgz", - "integrity": "sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw==", - "dev": true - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "azure-devops-node-api": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.0.1.tgz", - "integrity": "sha512-YMdjAw9l5p/6leiyIloxj3k7VIvYThKjvqgiQn88r3nhT93ENwsoDS3A83CyJ4uTWzCZ5f5jCi6c27rTU5Pz+A==", - "dev": true, - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "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, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "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, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001244", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001244.tgz", - "integrity": "sha512-Wb4UFZPkPoJoKKVfELPWytRzpemjP/s0pe22NriANru1NoI+5bGNxzKtk7edYL8rmCWTfQO8eRiF0pn1Dqzx7Q==", - "dev": true - }, - "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "requires": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - }, - "dependencies": { - "tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", - "dev": true - } - } - }, - "cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - } - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "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 - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - } - }, - "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "electron-to-chromium": { - "version": "1.3.774", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.774.tgz", - "integrity": "sha512-Fggh17Q1yyv1uMzq8Qn1Ci58P50qcRXMXd2MBcB9sxo6rJxjUutWcNw8uCm3gFWMdcblBO6mDT5HzX/RVRRECA==", - "dev": true - }, - "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 - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-module-lexer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", - "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "fastq": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", - "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", - "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", - "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "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 - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jest-worker": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", - "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "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, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - } - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "dev": true, - "requires": { - "is-plain-obj": "^2.1.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", - "dev": true, - "requires": { - "mime-db": "1.48.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "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 - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", - "dev": true, - "requires": { - "semver": "^5.1.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "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 - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "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 - } - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "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, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "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 - } - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", - "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "terser": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", - "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", - "dev": true, - "requires": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "dependencies": { - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", - "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - } - }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typed-rest-client": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", - "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==", - "dev": true, - "requires": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", - "dev": true - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url-join": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "vsce": { - "version": "1.95.1", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.95.1.tgz", - "integrity": "sha512-2v8g3ZtZkaOTscRjjCAtM3Au6YYWJtg9UNt1iyyWko7ZHejbt5raClcNzQ7/WYVLYhYHc+otHQifV0gCBREgNg==", - "dev": true, - "requires": { - "azure-devops-node-api": "^11.0.1", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "commander": "^6.1.0", - "denodeify": "^1.2.1", - "glob": "^7.0.6", - "leven": "^3.1.0", - "lodash": "^4.17.15", - "markdown-it": "^10.0.0", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "osenv": "^0.1.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^5.1.0", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^1.1.0", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webpack": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.44.0.tgz", - "integrity": "sha512-I1S1w4QLoKmH19pX6YhYN0NiSXaWY8Ou00oA+aMcr9IUGeF5azns+IKBkfoAAG9Bu5zOIzZt/mN35OffBya8AQ==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.7.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" - }, - "dependencies": { - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true - } - } - }, - "webpack-cli": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.2.tgz", - "integrity": "sha512-mEoLmnmOIZQNiRl0ebnjzQ74Hk0iKS5SiEEnpq3dRezoyR3yPaeQZCMCe+db4524pj1Pd5ghZXjT41KLzIhSLw==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.4", - "@webpack-cli/info": "^1.3.0", - "@webpack-cli/serve": "^1.5.1", - "colorette": "^1.2.1", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/package.json b/package.json index 1b192b2bd..1b621f08e 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,35 @@ { - "name": "ansible", - "publisher": "tomaciazek", + "name": "ansible-language-server", + "publisher": "RedHat Inc.", "displayName": "Ansible", - "description": "Ansible language support", - "author": "Tomasz Maciążek", + "description": "Ansible language server", "license": "MIT", - "version": "1.0.3", + "version": "0.1.0", + "contributors": [ + { + "name": "Tomasz Maciążek", + "email": "tomaciazek@gmail.com" + }, + { + "name": "RedHat Inc." + }, + { + "name": "Ganesh B. Nalawade", + "email": "gnalawad@redhat.com" + } + ], "repository": { "type": "git", - "url": "https://github.com/tomaciazek/vscode-ansible.git" + "url": "https://github.com/ansible/ansible-language-server.git" }, "icon": "icon.png", "engines": { - "vscode": "^1.56.0" + "node": "*", + "npm": "\n\nERROR: Please use yarn, npm is not supported in this repository!!!\n\n", + "yarn": "^1.22.5" + }, + "bin": { + "ansible-language-server": "./bin/ansible-language-server" }, "categories": [ "Programming Languages" @@ -20,179 +37,40 @@ "activationEvents": [ "onLanguage:ansible" ], - "main": "./client/out/extension", - "contributes": { - "configuration": { - "type": "object", - "title": "Ansible", - "properties": { - "ansible.ansible.path": { - "scope": "resource", - "type": "string", - "default": "ansible", - "description": "Path to the ansible executable." - }, - "ansible.ansible.useFullyQualifiedCollectionNames": { - "scope": "resource", - "type": "boolean", - "default": false, - "description": "Always use fully qualified collection names (FQCN) when inserting a module name. Disabling it will only use FQCNs when necessary." - }, - "ansible.ansibleLint.enabled": { - "scope": "resource", - "type": "boolean", - "default": true, - "description": "Enable linting with ansible-lint on document open/save." - }, - "ansible.ansibleLint.path": { - "scope": "resource", - "type": "string", - "default": "ansible-lint", - "description": "Path to the ansible-lint executable." - }, - "ansible.ansibleLint.arguments": { - "scope": "resource", - "type": "string", - "default": "", - "description": "Command line arguments to be passed to ansible-lint." - }, - "ansible.python.interpreterPath": { - "scope": "resource", - "type": "string", - "default": "", - "description": "Path to the Python interpreter executable. Particularly important if you are using a Python virtual environment. Leave blank to use Python from PATH." - }, - "ansible.python.activationScript": { - "scope": "resource", - "type": "string", - "default": "", - "description": "Path to the virtual environment activation script. Use only if you have a custom activation script. It will be sourced using bash before executing Ansible commands. If set, the Interpreter Path setting is ignored." - } - } - }, - "languages": [ - { - "id": "ansible", - "aliases": [ - "Ansible", - "ansible" - ], - "extensions": [ - ".yml", - ".yaml" - ], - "configuration": "./ansible-language-configuration.json" - }, - { - "comments": "unfortunately this dummy entry is necessary for embedding to work", - "id": "ansible-jinja", - "configuration": "./jinja-language-configuration.json" - } - ], - "grammars": [ - { - "comments": [ - "YAML syntax as base for Ansible", - "scopeName changed so that we can use it as base for injections" - ], - "language": "ansible", - "scopeName": "source.ansible", - "path": "./syntaxes/external/YAML.tmLanguage" - }, - { - "comments": [ - "Jinja syntax as injection into Ansible YAML", - "This is so that we do not need to rely on the Jinja extension being installed" - ], - "language": "ansible-jinja", - "scopeName": "source.ansible-jinja", - "path": "./syntaxes/external/jinja.tmLanguage.json" - }, - { - "comments": [ - "Highlighting of Ansible keywords" - ], - "path": "./syntaxes/ansible/generated/keywords.tmLanguage", - "scopeName": "injection.ansible.keywords", - "injectTo": [ - "source.ansible" - ] - }, - { - "comments": [ - "Additional Jinja grammars" - ], - "path": "./syntaxes/ansible/generated/jinja-extras.tmLanguage", - "scopeName": "injection.ansible.jinja-extras", - "injectTo": [ - "source.ansible" - ] - }, - { - "comments": [ - "Support for Jinja in double curly braces" - ], - "path": "./syntaxes/ansible/generated/jinja-braces.tmLanguage", - "scopeName": "injection.ansible.jinja-braces", - "embeddedLanguages": { - "meta.embedded.inline.jinja": "ansible-jinja" - }, - "injectTo": [ - "source.ansible" - ] - }, - { - "comments": [ - "Support for Jinja in conditionals" - ], - "path": "./syntaxes/ansible/generated/jinja-conditionals.tmLanguage", - "scopeName": "injection.ansible.jinja-conditionals", - "embeddedLanguages": { - "meta.embedded.inline.jinja": "ansible-jinja" - }, - "injectTo": [ - "source.ansible" - ] - }, - { - "comments": [ - "The quote escapes implemented in the conditionals injection do not work inside brackets etc.", - "Support for single quote escapes in Jinja" - ], - "path": "./syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage", - "scopeName": "injection.ansible.jinja-single-quote-escape", - "injectTo": [ - "source.ansible" - ] - }, - { - "comments": [ - "The quote escapes implemented in the conditionals injection do not work inside brackets etc.", - "Support for double quote escapes in Jinja" - ], - "path": "./syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage", - "scopeName": "injection.ansible.jinja-double-quote-escape", - "injectTo": [ - "source.ansible" - ] - } - ] - }, + "keywords": [ + "ansible", + "LSP" + ], "scripts": { - "vscode:prepublish": "npm run webpack", - "webpack": "npm run clean && webpack --mode production --config ./client/webpack.config.js && webpack --mode production --config ./server/webpack.config.js", - "webpack:dev": "npm run clean && webpack --mode development --config ./client/webpack.config.js && webpack --mode development --config ./server/webpack.config.js", - "compile": "tsc -b", - "watch": "tsc -b -w", - "webpack:watch:client": "webpack --mode none --config ./client/webpack.config.js --watch", - "webpack:watch:server": "webpack --mode none --config ./server/webpack.config.js --watch", - "clean": "rimraf client/out && rimraf server/out && rimraf **/tsconfig.tsbuildinfo", - "postinstall": "cd client && npm install && cd ../server && npm install && cd ..", - "test": "mocha --require ts-node/register './server/src/test/**/*.ts'", - "deploy": "vsce publish" + "clean": "rimraf out/server && rimraf lib", + "compile": "tsc -p .", + "watch": "tsc --watch -p .", + "test": "mocha --require ts-node/register './test/**/*.ts'", + "build": "yarn clean && yarn compile", + "check-dependencies": "node ./scripts/check-dependencies.js" + }, + "exclude": [ + "**/*.d.ts", + "test/", + "out", + "lib", + "coverage/", + ".eslintrc.js" + ], + "all": true, + "dependencies": { + "@flatten-js/interval-tree": "^1.0.14", + "globby": "^11.0.4", + "ini": "^1.3.8", + "lodash": "^4.17.21", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "yaml": "^1.10.2" }, "devDependencies": { "@types/chai": "^4.2.21", + "@types/ini": "^1.3.30", + "@types/lodash": "^4.14.171", "@types/mocha": "^8.2.3", "@types/node": "^14.17.5", "@types/vscode": "^1.56.0", diff --git a/scripts/.eslintrc.js b/scripts/.eslintrc.js new file mode 100644 index 000000000..da6258dd6 --- /dev/null +++ b/scripts/.eslintrc.js @@ -0,0 +1,28 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + env: { + node: true, + es6: true, + }, + parserOptions: { + sourceType: 'module', + }, + plugins: ['@typescript-eslint', 'prettier'], + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/eslint-recommended', + 'plugin:@typescript-eslint/recommended', + 'prettier', + ], + rules: { + 'prettier/prettier': 'error', + '@typescript-eslint/no-use-before-define': ['error', { functions: false, classes: false }], + '@typescript-eslint/no-unused-vars': ['warn'], + '@typescript-eslint/explicit-function-return-type': [1, { allowExpressions: true }], + 'eol-last': ['error'], + 'space-infix-ops': ['error', { int32Hint: false }], + 'no-multi-spaces': ['error', { ignoreEOLComments: true }], + 'keyword-spacing': ['error'], + }, +}; diff --git a/scripts/check-dependencies.js b/scripts/check-dependencies.js new file mode 100644 index 000000000..f3e90756d --- /dev/null +++ b/scripts/check-dependencies.js @@ -0,0 +1,21 @@ +/* -------------------------------------------------------------------------------------------- + * Copyright (c) Red Hat, Inc. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + * ------------------------------------------------------------------------------------------ */ + +//check package.json do not have dependency with 'next' version + +/* eslint-disable @typescript-eslint/no-var-requires */ + +const exit = require('process').exit; +const dependencies = require('../package.json').dependencies; + +for (const dep in dependencies) { + if (Object.prototype.hasOwnProperty.call(dependencies, dep)) { + const version = dependencies[dep]; + if (version === 'next') { + console.error(`Dependency ${dep} has "${version}" version, please change it to fixed version`); + exit(1); + } + } +} diff --git a/scripts/tsconfig.esm.json b/scripts/tsconfig.esm.json new file mode 100644 index 000000000..a352c2862 --- /dev/null +++ b/scripts/tsconfig.esm.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "downlevelIteration": true, + "lib": ["dom"], + "module": "esnext", + "outDir": "./lib/esm", + }, + "exclude": [ + "node_modules", + "out", + "lib", + "test" + ] +} diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json new file mode 100755 index 000000000..9bd3522aa --- /dev/null +++ b/scripts/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "alwaysStrict": true, + "declaration": true, + "forceConsistentCasingInFileNames": true, + "lib": ["es2016"], + "module": "commonjs", + "moduleResolution": "node", + "outDir": "./out/server", + "sourceMap": true, + "target": "es6", + }, + "exclude": ["node_modules", "out"] +} diff --git a/scripts/tsconfig.umd.json b/scripts/tsconfig.umd.json new file mode 100644 index 000000000..09cf5fcda --- /dev/null +++ b/scripts/tsconfig.umd.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["dom"], + "module": "umd", + "outDir": "./lib/umd", + }, + "exclude": [ + "node_modules", + "out", + "lib", + "test" + ] +} diff --git a/server/package-lock.json b/server/package-lock.json deleted file mode 100644 index d9d39fd7d..000000000 --- a/server/package-lock.json +++ /dev/null @@ -1,1085 +0,0 @@ -{ - "name": "ansible-language-server", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@flatten-js/interval-tree": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz", - "integrity": "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/chai": { - "version": "4.2.21", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz", - "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==", - "dev": true - }, - "@types/ini": { - "version": "1.3.30", - "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz", - "integrity": "sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.171", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz", - "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==", - "dev": true - }, - "@types/mocha": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", - "dev": true - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "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 - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "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, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "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 - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "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 - } - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "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 - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fastq": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", - "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "dependencies": { - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - } - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" - }, - "vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "requires": { - "vscode-languageserver-protocol": "3.16.0" - } - }, - "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "vscode-languageserver-textdocument": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", - "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" - }, - "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "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 - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "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 - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/server/package.json b/server/package.json deleted file mode 100644 index 6bbb5fa42..000000000 --- a/server/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "ansible-language-server", - "publisher": "tomaciazek", - "description": "Ansible language server.", - "author": "Tomasz Maciążek", - "private": true, - "license": "MIT", - "version": "0.0.1", - "repository": { - "type": "git", - "url": "https://github.com/tomaciazek/vscode-ansible.git" - }, - "engines": { - "node": "*" - }, - "scripts": { - "test": "mocha -r ts-node/register 'src/test/**/*.ts'" - }, - "devDependencies": { - "@types/chai": "^4.2.21", - "@types/ini": "^1.3.30", - "@types/lodash": "^4.14.171", - "@types/mocha": "^8.2.3", - "chai": "^4.3.4", - "mocha": "^8.4.0", - "ts-node": "^9.1.1" - }, - "dependencies": { - "@flatten-js/interval-tree": "^1.0.14", - "globby": "^11.0.4", - "ini": "^1.3.8", - "lodash": "^4.17.21", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "yaml": "^1.10.2" - } -} diff --git a/server/tsconfig.json b/server/tsconfig.json deleted file mode 100644 index 188bb144a..000000000 --- a/server/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "target": "ES2019", - "lib": ["ES2019"], - "module": "CommonJS", - "moduleResolution": "Node", - "outDir": "out", - "rootDir": "src", - "sourceMap": true, - "strict": true - }, - "include": ["src"], - "exclude": ["node_modules", ".vscode-test"] -} diff --git a/server/webpack.config.js b/server/webpack.config.js deleted file mode 100644 index ac5aaff6d..000000000 --- a/server/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -//@ts-check - -'use strict'; - -/* eslint @typescript-eslint/no-var-requires: "off" */ -const withDefaults = require('../webpack.config'); -const path = require('path'); - -module.exports = withDefaults({ - context: path.resolve(__dirname), - entry: { - extension: './src/server.ts', - }, - output: { - filename: 'server.js', - path: path.resolve(__dirname, 'out'), - }, -}); diff --git a/server/src/ansibleLanguageService.ts b/src/ansibleLanguageService.ts similarity index 100% rename from server/src/ansibleLanguageService.ts rename to src/ansibleLanguageService.ts diff --git a/server/src/interfaces/ansibleLintConfig.ts b/src/interfaces/ansibleLintConfig.ts similarity index 100% rename from server/src/interfaces/ansibleLintConfig.ts rename to src/interfaces/ansibleLintConfig.ts diff --git a/server/src/interfaces/documentMeta.ts b/src/interfaces/documentMeta.ts similarity index 100% rename from server/src/interfaces/documentMeta.ts rename to src/interfaces/documentMeta.ts diff --git a/server/src/interfaces/extensionSettings.ts b/src/interfaces/extensionSettings.ts similarity index 100% rename from server/src/interfaces/extensionSettings.ts rename to src/interfaces/extensionSettings.ts diff --git a/server/src/interfaces/module.ts b/src/interfaces/module.ts similarity index 100% rename from server/src/interfaces/module.ts rename to src/interfaces/module.ts diff --git a/server/src/interfaces/pluginRouting.ts b/src/interfaces/pluginRouting.ts similarity index 100% rename from server/src/interfaces/pluginRouting.ts rename to src/interfaces/pluginRouting.ts diff --git a/server/src/providers/completionProvider.ts b/src/providers/completionProvider.ts similarity index 100% rename from server/src/providers/completionProvider.ts rename to src/providers/completionProvider.ts diff --git a/server/src/providers/definitionProvider.ts b/src/providers/definitionProvider.ts similarity index 100% rename from server/src/providers/definitionProvider.ts rename to src/providers/definitionProvider.ts diff --git a/server/src/providers/hoverProvider.ts b/src/providers/hoverProvider.ts similarity index 100% rename from server/src/providers/hoverProvider.ts rename to src/providers/hoverProvider.ts diff --git a/server/src/providers/semanticTokenProvider.ts b/src/providers/semanticTokenProvider.ts similarity index 100% rename from server/src/providers/semanticTokenProvider.ts rename to src/providers/semanticTokenProvider.ts diff --git a/server/src/providers/validationProvider.ts b/src/providers/validationProvider.ts similarity index 100% rename from server/src/providers/validationProvider.ts rename to src/providers/validationProvider.ts diff --git a/server/src/server.ts b/src/server.ts similarity index 100% rename from server/src/server.ts rename to src/server.ts diff --git a/server/src/services/ansibleConfig.ts b/src/services/ansibleConfig.ts similarity index 100% rename from server/src/services/ansibleConfig.ts rename to src/services/ansibleConfig.ts diff --git a/server/src/services/ansibleLint.ts b/src/services/ansibleLint.ts similarity index 100% rename from server/src/services/ansibleLint.ts rename to src/services/ansibleLint.ts diff --git a/server/src/services/docsLibrary.ts b/src/services/docsLibrary.ts similarity index 100% rename from server/src/services/docsLibrary.ts rename to src/services/docsLibrary.ts diff --git a/server/src/services/metadataLibrary.ts b/src/services/metadataLibrary.ts similarity index 100% rename from server/src/services/metadataLibrary.ts rename to src/services/metadataLibrary.ts diff --git a/server/src/services/settingsManager.ts b/src/services/settingsManager.ts similarity index 100% rename from server/src/services/settingsManager.ts rename to src/services/settingsManager.ts diff --git a/server/src/services/validationManager.ts b/src/services/validationManager.ts similarity index 100% rename from server/src/services/validationManager.ts rename to src/services/validationManager.ts diff --git a/server/src/services/workspaceManager.ts b/src/services/workspaceManager.ts similarity index 100% rename from server/src/services/workspaceManager.ts rename to src/services/workspaceManager.ts diff --git a/server/src/utils/ansible.ts b/src/utils/ansible.ts similarity index 100% rename from server/src/utils/ansible.ts rename to src/utils/ansible.ts diff --git a/server/src/utils/docsFinder.ts b/src/utils/docsFinder.ts similarity index 100% rename from server/src/utils/docsFinder.ts rename to src/utils/docsFinder.ts diff --git a/server/src/utils/docsFormatter.ts b/src/utils/docsFormatter.ts similarity index 100% rename from server/src/utils/docsFormatter.ts rename to src/utils/docsFormatter.ts diff --git a/server/src/utils/docsParser.ts b/src/utils/docsParser.ts similarity index 100% rename from server/src/utils/docsParser.ts rename to src/utils/docsParser.ts diff --git a/server/src/utils/misc.ts b/src/utils/misc.ts similarity index 100% rename from server/src/utils/misc.ts rename to src/utils/misc.ts diff --git a/server/src/utils/yaml.ts b/src/utils/yaml.ts similarity index 100% rename from server/src/utils/yaml.ts rename to src/utils/yaml.ts diff --git a/server/src/test/data/utils/yaml/ancestryBuilder.yml b/test/data/utils/yaml/ancestryBuilder.yml similarity index 100% rename from server/src/test/data/utils/yaml/ancestryBuilder.yml rename to test/data/utils/yaml/ancestryBuilder.yml diff --git a/server/src/test/data/utils/yaml/getDeclaredCollections.yml b/test/data/utils/yaml/getDeclaredCollections.yml similarity index 100% rename from server/src/test/data/utils/yaml/getDeclaredCollections.yml rename to test/data/utils/yaml/getDeclaredCollections.yml diff --git a/server/src/test/data/utils/yaml/isBlockParam.yml b/test/data/utils/yaml/isBlockParam.yml similarity index 100% rename from server/src/test/data/utils/yaml/isBlockParam.yml rename to test/data/utils/yaml/isBlockParam.yml diff --git a/server/src/test/data/utils/yaml/isPlayParam.yml b/test/data/utils/yaml/isPlayParam.yml similarity index 100% rename from server/src/test/data/utils/yaml/isPlayParam.yml rename to test/data/utils/yaml/isPlayParam.yml diff --git a/server/src/test/data/utils/yaml/isRoleParam.yml b/test/data/utils/yaml/isRoleParam.yml similarity index 100% rename from server/src/test/data/utils/yaml/isRoleParam.yml rename to test/data/utils/yaml/isRoleParam.yml diff --git a/server/src/test/data/utils/yaml/isTaskParam.yml b/test/data/utils/yaml/isTaskParam.yml similarity index 100% rename from server/src/test/data/utils/yaml/isTaskParam.yml rename to test/data/utils/yaml/isTaskParam.yml diff --git a/server/src/test/data/utils/yaml/test.json b/test/data/utils/yaml/test.json similarity index 100% rename from server/src/test/data/utils/yaml/test.json rename to test/data/utils/yaml/test.json diff --git a/server/src/test/utils/yaml.test.ts b/test/utils/yaml.test.ts similarity index 99% rename from server/src/test/utils/yaml.test.ts rename to test/utils/yaml.test.ts index 3938a16e8..b9dbac246 100644 --- a/server/src/test/utils/yaml.test.ts +++ b/test/utils/yaml.test.ts @@ -12,7 +12,7 @@ import { isPlayParam, isRoleParam, isTaskParam, -} from '../../utils/yaml'; +} from '../../src/utils/yaml'; async function getYamlDoc(yamlFile: string) { const yaml = await fs.readFile( diff --git a/tsconfig.json b/tsconfig.json index fc94fc522..0401f1b98 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,15 +1,14 @@ { - "compilerOptions": { - "target": "ES2019", - "lib": ["ES2019"], - "module": "CommonJS", - "moduleResolution": "Node", - "outDir": "out", - "rootDir": "src", - "sourceMap": true, - "strict": true - }, - "include": ["src"], - "exclude": ["node_modules", ".vscode-test"], - "references": [{ "path": "./client" }, { "path": "./server" }] -} + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "lib" : [ "es2016" ], + "outDir": "./out/server" + }, + "exclude": [ + "node_modules", + "out" + ] +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 7721d5045..000000000 --- a/webpack.config.js +++ /dev/null @@ -1,56 +0,0 @@ -//@ts-check -/** @typedef {import('webpack').Configuration} WebpackConfig **/ - -'use strict'; -/* eslint @typescript-eslint/no-var-requires: "off" */ -const path = require('path'); -const merge = require('merge-options'); - -module.exports = function withDefaults(/**@type WebpackConfig*/ extConfig) { - /** @type WebpackConfig */ - let defaultConfig = { - mode: 'none', - target: 'node', // vscode extensions run in a Node.js-context - node: { - __dirname: false, // leave the __dirname-behaviour intact - }, - entry: './client/src/extension.ts', - output: { - filename: '[name].js', - path: path.resolve(extConfig.context, 'out'), - libraryTarget: 'commonjs2', - devtoolModuleFilenameTemplate: '../[resource-path]', - }, - // stats: 'verbose', // doesn't help with watcher - devtool: 'source-map', - externals: { - vscode: 'commonjs vscode', // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed - }, - resolve: { - // support reading TypeScript and JavaScript files - extensions: ['.ts', '.js'], - }, - module: { - rules: [ - { - test: /\.ts$/, - exclude: /node_modules/, - use: [ - { - // configure TypeScript loader: - // * enable sources maps for end-to-end source maps - loader: 'ts-loader', - options: { - compilerOptions: { - sourceMap: true, - }, - }, - }, - ], - }, - ], - }, - }; - - return merge(defaultConfig, extConfig); -}; From 7d27c3e465aa5f7357f19f6279581db8ea948754 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Wed, 28 Jul 2021 16:33:25 +0530 Subject: [PATCH 077/558] update readme (#2) --- README.md | 12 ++++++++---- package.json | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7494f3ab9..6418ba3fc 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,28 @@ -# Ansible VS Code Extension -This extension adds language support for Ansible to VS Code. +# Ansible Language Server +This langauge server adds support for Ansible. ### Getting started 1. Install prerequisites: - latest [Visual Studio Code](https://code.visualstudio.com/) - [Node.js](https://nodejs.org/) v12.0.0 or higher + 2. Fork and clone this repository + 3. Install the dependencies ```bash cd ansible-language-server $ yarn install ``` + 4. Build the language server ```bash $ yarn run build ``` + 5. The new built server is now located in ./out/server/src/server.js. ```bash - node (Ansible Language Server Location)/out/server/src/server.js [--stdio] + node /out/server/src/server.js --stdio ``` ## Features @@ -125,4 +129,4 @@ any level (User, Remote, Workspace and/or Folder). ## Credit -Based on the good work done by [Tomasz Maciążek](https://github.com/tomaciazek/vscode-ansible) \ No newline at end of file +Based on the good work done by [Tomasz Maciążek](https://github.com/tomaciazek/vscode-ansible) diff --git a/package.json b/package.json index 1b621f08e..05d762b8f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.1.0", + "version": "0.1.1", "contributors": [ { "name": "Tomasz Maciążek", From f2100531fc789cc07074c59d4b8c7f65cc55f115 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Thu, 29 Jul 2021 00:09:02 +0530 Subject: [PATCH 078/558] Update pacakge.json exclude section (#3) * v0.1.0-2 * Update pacakge.json exclude section --- .gitignore | 2 +- .npmignore | 12 + .vscode/extensions.json | 4 +- .vscode/launch.json | 2 +- .vscode/tasks.json | 63 +- .vscodeignore | 4 +- CHANGELOG.md | 3 + azure-pipelines.yml | 32 - bin/ansible-language-server | 3 + out/.gitignore | 0 package.json | 41 +- tsconfig.json | 22 +- yarn.lock | 1530 +++++++++++++++++++++++++++++++++++ 13 files changed, 1588 insertions(+), 130 deletions(-) create mode 100644 .npmignore delete mode 100644 azure-pipelines.yml create mode 100755 bin/ansible-language-server create mode 100644 out/.gitignore create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index 1e2fb964c..4fa903cac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ .ignore/ node_modules *.vsix -out +out/server tsconfig.tsbuildinfo diff --git a/.npmignore b/.npmignore new file mode 100644 index 000000000..ad888e542 --- /dev/null +++ b/.npmignore @@ -0,0 +1,12 @@ +/src +/test +.editorconfig +Jenkinsfile +tsconfig.json +.nyc_output/ +coverage/ +.vscode/ +.github/ +.eslintrc.js +.prettierrc.json +.travis.yml diff --git a/.vscode/extensions.json b/.vscode/extensions.json index c72796511..c0a2258b0 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,5 @@ { - "recommendations": ["eamodio.tsl-problem-matcher"] + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": ["dbaeumer.vscode-eslint"] } diff --git a/.vscode/launch.json b/.vscode/launch.json index 6419d5e6e..9177ee633 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -14,7 +14,7 @@ "port": 6009, "restart": true, "sourceMaps": true, - "outFiles": ["${workspaceRoot}/out/**/*.js"], + "outFiles": ["${workspaceRoot}/out/server/**/*.ts"], "protocol": "inspector", "trace": true } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index ea34692fa..53c175220 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,71 +1,28 @@ -// See https://go.microsoft.com/fwlink/?LinkId=733558 -// for the documentation about the tasks.json format { + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { - "type": "npm", - "script": "compile", - "group": "build", + "label": "watch typescript", + "type": "shell", + "command": "yarn run watch", "presentation": { - "panel": "dedicated", "reveal": "never" }, - "problemMatcher": ["$tsc"] - }, - { - "type": "npm", - "script": "watch", "isBackground": true, + "problemMatcher": "$tsc-watch", "group": { "kind": "build", "isDefault": true - }, - "presentation": { - "panel": "dedicated", - "reveal": "never" - }, - "problemMatcher": ["$tsc-watch"] - }, - { - "label": "Clean", - "type": "npm", - "script": "clean", - "group": { - "kind": "build", - "isDefault": true - }, - "presentation": { - "panel": "dedicated", - "reveal": "never" } }, { - "label": "Server Watch", "type": "npm", - "script": "webpack:watch:server", - "isBackground": true, - "group": { - "kind": "build", - "isDefault": true - }, - "presentation": { - "panel": "dedicated", - "reveal": "never", - "group": "Build" - }, - "problemMatcher": "$ts-webpack-watch" - }, - { - // this requires manually closing terminal windows with watch processes - // running, before the task can be launched again - "label": "Webpack Watch", - "dependsOn": ["Server Watch"] - }, - { - "label": "Clean & Webpack Watch", - "dependsOrder": "sequence", - "dependsOn": ["Clean", "watch"] + "script": "lint", + "problemMatcher": ["$eslint-stylish"], + "label": "npm: lint", + "detail": "eslint -c .eslintrc.js --ext .ts src" } ] } diff --git a/.vscodeignore b/.vscodeignore index 0f6f3904c..8075cc62e 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -10,7 +10,5 @@ **/tsconfig.json **/webpack.config.js -client/** -!client/out/extension.js server/** -!server/out/server.js +!out/server/src/server.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 370e5ecb8..b56200b1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,5 +5,8 @@ All notable changes to the Ansible VS Code extension will be documented in this The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.0-1] - 2021-07-28 +- Update npm package to include out folder +- ## [0.1.0] - 2021-07-28 - Initial ansible language server release. Based on the vscode-ansible plugin developed by [Tomasz Maciążek](https://github.com/tomaciazek) diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index fe17252a8..000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,32 +0,0 @@ -trigger: - branches: - include: - - master - tags: - include: - - refs/tags/v* - -pool: - vmImage: ubuntu-latest - -steps: - - task: NodeTool@0 - inputs: - versionSpec: '12.x' - displayName: 'Install Node.js' - - - bash: | - echo ">>> Compile vscode-ansible" - npm install && npm run compile - echo ">>> Compiled vscode-ansible" - echo ">>> Run unit tests" - npm run test - displayName: Run Tests - - - bash: | - echo ">>> Publish" - npm run deploy - displayName: Publish - condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'), eq(variables['Agent.OS'], 'Linux')) - env: - VSCE_PAT: $(VSCE_PAT) diff --git a/bin/ansible-language-server b/bin/ansible-language-server new file mode 100755 index 000000000..d1dbeeeea --- /dev/null +++ b/bin/ansible-language-server @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +require('../out/server/src/server.js'); diff --git a/out/.gitignore b/out/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/package.json b/package.json index 05d762b8f..ebcd063a6 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.1.1", + "version": "0.1.0-1", "contributors": [ { "name": "Tomasz Maciążek", @@ -24,9 +24,7 @@ }, "icon": "icon.png", "engines": { - "node": "*", - "npm": "\n\nERROR: Please use yarn, npm is not supported in this repository!!!\n\n", - "yarn": "^1.22.5" + "node": "*" }, "bin": { "ansible-language-server": "./bin/ansible-language-server" @@ -41,23 +39,6 @@ "ansible", "LSP" ], - "scripts": { - "clean": "rimraf out/server && rimraf lib", - "compile": "tsc -p .", - "watch": "tsc --watch -p .", - "test": "mocha --require ts-node/register './test/**/*.ts'", - "build": "yarn clean && yarn compile", - "check-dependencies": "node ./scripts/check-dependencies.js" - }, - "exclude": [ - "**/*.d.ts", - "test/", - "out", - "lib", - "coverage/", - ".eslintrc.js" - ], - "all": true, "dependencies": { "@flatten-js/interval-tree": "^1.0.14", "globby": "^11.0.4", @@ -79,14 +60,18 @@ "chai": "^4.3.4", "eslint": "^7.30.0", "eslint-config-prettier": "^8.3.0", - "merge-options": "^3.0.4", "mocha": "^8.4.0", "rimraf": "^3.0.2", - "ts-loader": "^8.3.0", "ts-node": "^9.1.1", - "typescript": "^4.3.5", - "vsce": "^1.95.1", - "webpack": "^5.44.0", - "webpack-cli": "^4.7.2" - } + "typescript": "^4.3.5" + }, + "scripts": { + "clean": "rimraf out/server && rimraf lib", + "compile": "tsc -p .", + "watch": "tsc --watch -p .", + "test": "mocha --require ts-node/register './test/**/*.ts'", + "build": "yarn clean && yarn compile", + "check-dependencies": "node ./scripts/check-dependencies.js" + }, + "all": true } diff --git a/tsconfig.json b/tsconfig.json index 0401f1b98..e05128a8c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,14 @@ { "compilerOptions": { - "target": "es6", - "module": "commonjs", - "moduleResolution": "node", - "sourceMap": true, - "lib" : [ "es2016" ], - "outDir": "./out/server" + "alwaysStrict": true, + "declaration": true, + "forceConsistentCasingInFileNames": true, + "lib": ["es2016"], + "module": "commonjs", + "moduleResolution": "node", + "outDir": "./out/server", + "sourceMap": true, + "target": "es6", }, - "exclude": [ - "node_modules", - "out" - ] -} \ No newline at end of file + "exclude": ["node_modules", "out"] + } diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..e5122edd8 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1530 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/helper-validator-identifier@^7.14.5": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz#32be33a756f29e278a0d644fa08a2c9e0f88a34c" + integrity sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow== + +"@babel/highlight@^7.10.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@flatten-js/interval-tree@^1.0.14": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz#500466b41220fbc0229066ea9f29f6bb8e79b146" + integrity sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg== + +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@types/chai@^4.2.21": + version "4.2.21" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.21.tgz#9f35a5643129df132cf3b5c1ec64046ea1af0650" + integrity sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg== + +"@types/ini@^1.3.30": + version "1.3.30" + resolved "https://registry.yarnpkg.com/@types/ini/-/ini-1.3.30.tgz#d1485459c9fad84e937414b832a2adb649eab379" + integrity sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ== + +"@types/json-schema@^7.0.7": + version "7.0.8" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" + integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== + +"@types/lodash@^4.14.171": + version "4.14.171" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.171.tgz#f01b3a5fe3499e34b622c362a46a609fdb23573b" + integrity sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg== + +"@types/mocha@^8.2.3": + version "8.2.3" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.3.tgz#bbeb55fbc73f28ea6de601fbfa4613f58d785323" + integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== + +"@types/node@^14.17.5": + version "14.17.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.6.tgz#cc61c8361c89e70c468cda464d1fa3dd7e5ebd62" + integrity sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ== + +"@types/vscode@^1.56.0": + version "1.58.1" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.58.1.tgz#7deae08792adc73fa57383244a0c79d3530df4f7" + integrity sha512-sa76rDXiSif09he8KoaWWUQxsuBr2+uND0xn1GUbEODkuEjp2p7Rqd3t5qlvklfmAedLFdL7MdnsPa57uzwcOw== + +"@typescript-eslint/eslint-plugin@^4.28.3": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz#8197f1473e7da8218c6a37ff308d695707835684" + integrity sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q== + dependencies: + "@typescript-eslint/experimental-utils" "4.28.5" + "@typescript-eslint/scope-manager" "4.28.5" + debug "^4.3.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz#66c28bef115b417cf9d80812a713e0e46bb42a64" + integrity sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.28.5" + "@typescript-eslint/types" "4.28.5" + "@typescript-eslint/typescript-estree" "4.28.5" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/parser@^4.28.3": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.5.tgz#9c971668f86d1b5c552266c47788a87488a47d1c" + integrity sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw== + dependencies: + "@typescript-eslint/scope-manager" "4.28.5" + "@typescript-eslint/types" "4.28.5" + "@typescript-eslint/typescript-estree" "4.28.5" + debug "^4.3.1" + +"@typescript-eslint/scope-manager@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz#3a1b70c50c1535ac33322786ea99ebe403d3b923" + integrity sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ== + dependencies: + "@typescript-eslint/types" "4.28.5" + "@typescript-eslint/visitor-keys" "4.28.5" + +"@typescript-eslint/types@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.5.tgz#d33edf8e429f0c0930a7c3d44e9b010354c422e9" + integrity sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA== + +"@typescript-eslint/typescript-estree@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz#4906d343de693cf3d8dcc301383ed638e0441cd1" + integrity sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw== + dependencies: + "@typescript-eslint/types" "4.28.5" + "@typescript-eslint/visitor-keys" "4.28.5" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz#ffee2c602762ed6893405ee7c1144d9cc0a29675" + integrity sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg== + dependencies: + "@typescript-eslint/types" "4.28.5" + eslint-visitor-keys "^2.0.0" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.6.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" + integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@4.1.1, ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +chai@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" + integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + +chokidar@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^7.30.0: + version "7.31.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.31.0.tgz#f972b539424bf2604907a970860732c5d99d3aca" + integrity sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.1.1: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" + integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.1.tgz#bbef080d95fca6709362c73044a1634f7c6e7d05" + integrity sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + +glob-parent@^5.1.2, glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.6.0, globals@^13.9.0: + version "13.10.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" + integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.3, globby@^11.0.4: + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +mocha@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.4.0.tgz#677be88bf15980a3cae03a73e10a0fc3997f0cff" + integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.6" + growl "1.10.5" + he "1.2.0" + js-yaml "4.0.0" + log-symbols "4.0.0" + minimatch "3.0.4" + ms "2.1.3" + nanoid "3.1.20" + serialize-javascript "5.0.1" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + wide-align "1.1.3" + workerpool "6.1.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@3.1.20: + version "3.1.20" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +semver@^7.2.1, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +source-map-support@^0.5.17: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +table@^6.0.9: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-node@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" + integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== + dependencies: + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typescript@^4.3.5: + version "4.3.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" + integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +vscode-jsonrpc@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" + integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== + +vscode-languageserver-protocol@3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821" + integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== + dependencies: + vscode-jsonrpc "6.0.0" + vscode-languageserver-types "3.16.0" + +vscode-languageserver-textdocument@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz#178168e87efad6171b372add1dea34f53e5d330f" + integrity sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA== + +vscode-languageserver-types@3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" + integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== + +vscode-languageserver@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz#49b068c87cfcca93a356969d20f5d9bdd501c6b0" + integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw== + dependencies: + vscode-languageserver-protocol "3.16.0" + +which@2.0.2, which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +workerpool@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" + integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From c164f2056466d8d1521a0822f11393db7f0a16d2 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Thu, 29 Jul 2021 00:56:59 +0530 Subject: [PATCH 079/558] update readme type (#4) --- README.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6418ba3fc..ba5e7b56f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Ansible Language Server -This langauge server adds support for Ansible. +This language server adds support for Ansible. ### Getting started diff --git a/package.json b/package.json index ebcd063a6..91172cca7 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.1.0-1", + "version": "0.1.1-0", "contributors": [ { "name": "Tomasz Maciążek", From 707d53c64a29571922a7924cf4e5ff9b6ad4b68e Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Mon, 23 Aug 2021 16:14:10 +0530 Subject: [PATCH 080/558] Update lock file (#6) --- package-lock.json | 4428 +++++++++++++++++++++++++++++++++++++++++++++ yarn.lock | 2837 +++++++++++++++-------------- 2 files changed, 5843 insertions(+), 1422 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..3f0beedeb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4428 @@ +{ + "name": "ansible-language-server", + "version": "0.1.1-0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "0.1.1-0", + "license": "MIT", + "dependencies": { + "@flatten-js/interval-tree": "^1.0.14", + "globby": "^11.0.4", + "ini": "^1.3.8", + "lodash": "^4.17.21", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "yaml": "^1.10.2" + }, + "bin": { + "ansible-language-server": "bin/ansible-language-server" + }, + "devDependencies": { + "@types/chai": "^4.2.21", + "@types/ini": "^1.3.30", + "@types/lodash": "^4.14.171", + "@types/mocha": "^8.2.3", + "@types/node": "^14.17.5", + "@types/vscode": "^1.56.0", + "@typescript-eslint/eslint-plugin": "^4.28.3", + "@typescript-eslint/parser": "^4.28.3", + "chai": "^4.3.4", + "eslint": "^7.30.0", + "eslint-config-prettier": "^8.3.0", + "mocha": "^8.4.0", + "rimraf": "^3.0.2", + "ts-node": "^9.1.1", + "typescript": "^4.3.5" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@flatten-js/interval-tree": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz", + "integrity": "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg==" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/chai": { + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz", + "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==", + "dev": true + }, + "node_modules/@types/ini": { + "version": "1.3.30", + "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz", + "integrity": "sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", + "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.171", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz", + "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.17.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.6.tgz", + "integrity": "sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ==", + "dev": true + }, + "node_modules/@types/vscode": { + "version": "1.58.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.58.1.tgz", + "integrity": "sha512-sa76rDXiSif09he8KoaWWUQxsuBr2+uND0xn1GUbEODkuEjp2p7Rqd3t5qlvklfmAedLFdL7MdnsPa57uzwcOw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz", + "integrity": "sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "4.28.5", + "@typescript-eslint/scope-manager": "4.28.5", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz", + "integrity": "sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.28.5", + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/typescript-estree": "4.28.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.5.tgz", + "integrity": "sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "4.28.5", + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/typescript-estree": "4.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz", + "integrity": "sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/visitor-keys": "4.28.5" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.5.tgz", + "integrity": "sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz", + "integrity": "sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/visitor-keys": "4.28.5", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz", + "integrity": "sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.28.5", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.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/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "7.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz", + "integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "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-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 10.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/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/mocha/node_modules/js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "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/nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "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/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "engines": { + "node": ">=8.0.0 || >=10.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "dependencies": { + "vscode-languageserver-protocol": "3.16.0" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "dependencies": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", + "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + }, + "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.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", + "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, + "@flatten-js/interval-tree": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz", + "integrity": "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg==" + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@types/chai": { + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz", + "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==", + "dev": true + }, + "@types/ini": { + "version": "1.3.30", + "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz", + "integrity": "sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", + "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.171", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz", + "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==", + "dev": true + }, + "@types/mocha": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", + "dev": true + }, + "@types/node": { + "version": "14.17.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.6.tgz", + "integrity": "sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ==", + "dev": true + }, + "@types/vscode": { + "version": "1.58.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.58.1.tgz", + "integrity": "sha512-sa76rDXiSif09he8KoaWWUQxsuBr2+uND0xn1GUbEODkuEjp2p7Rqd3t5qlvklfmAedLFdL7MdnsPa57uzwcOw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz", + "integrity": "sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.28.5", + "@typescript-eslint/scope-manager": "4.28.5", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz", + "integrity": "sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.28.5", + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/typescript-estree": "4.28.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.5.tgz", + "integrity": "sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.28.5", + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/typescript-estree": "4.28.5", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz", + "integrity": "sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/visitor-keys": "4.28.5" + } + }, + "@typescript-eslint/types": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.5.tgz", + "integrity": "sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz", + "integrity": "sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.28.5", + "@typescript-eslint/visitor-keys": "4.28.5", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz", + "integrity": "sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.28.5", + "eslint-visitor-keys": "^2.0.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "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 + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "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, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "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 + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "7.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz", + "integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + } + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + } + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "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 + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "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, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mocha": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "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 + } + } + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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 + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + }, + "vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "requires": { + "vscode-languageserver-protocol": "3.16.0" + } + }, + "vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "requires": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "vscode-languageserver-textdocument": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", + "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" + }, + "vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/yarn.lock b/yarn.lock index e5122edd8..0ecbb5fd1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,1528 +3,1521 @@ "@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + "integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" + "version" "7.12.11" dependencies: "@babel/highlight" "^7.10.4" "@babel/helper-validator-identifier@^7.14.5": - version "7.14.8" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz#32be33a756f29e278a0d644fa08a2c9e0f88a34c" - integrity sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow== + "integrity" "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz" + "version" "7.14.8" "@babel/highlight@^7.10.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + "integrity" "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" "@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" + "integrity" "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" + "version" "0.4.3" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.1.1" + "espree" "^7.3.0" + "globals" "^13.9.0" + "ignore" "^4.0.6" + "import-fresh" "^3.2.1" + "js-yaml" "^3.13.1" + "minimatch" "^3.0.4" + "strip-json-comments" "^3.1.1" "@flatten-js/interval-tree@^1.0.14": - version "1.0.14" - resolved "https://registry.yarnpkg.com/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz#500466b41220fbc0229066ea9f29f6bb8e79b146" - integrity sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg== + "integrity" "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg==" + "resolved" "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz" + "version" "1.0.14" "@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + "integrity" "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" + "version" "0.5.0" dependencies: "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" + "debug" "^4.1.1" + "minimatch" "^3.0.4" "@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + "integrity" "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz" + "version" "1.2.0" "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" + "run-parallel" "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" + "fastq" "^1.6.0" "@types/chai@^4.2.21": - version "4.2.21" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.21.tgz#9f35a5643129df132cf3b5c1ec64046ea1af0650" - integrity sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg== + "integrity" "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==" + "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz" + "version" "4.2.21" "@types/ini@^1.3.30": - version "1.3.30" - resolved "https://registry.yarnpkg.com/@types/ini/-/ini-1.3.30.tgz#d1485459c9fad84e937414b832a2adb649eab379" - integrity sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ== + "integrity" "sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ==" + "resolved" "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz" + "version" "1.3.30" "@types/json-schema@^7.0.7": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" - integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== + "integrity" "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz" + "version" "7.0.8" "@types/lodash@^4.14.171": - version "4.14.171" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.171.tgz#f01b3a5fe3499e34b622c362a46a609fdb23573b" - integrity sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg== + "integrity" "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==" + "resolved" "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz" + "version" "4.14.171" "@types/mocha@^8.2.3": - version "8.2.3" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.3.tgz#bbeb55fbc73f28ea6de601fbfa4613f58d785323" - integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== + "integrity" "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==" + "resolved" "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz" + "version" "8.2.3" "@types/node@^14.17.5": - version "14.17.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.6.tgz#cc61c8361c89e70c468cda464d1fa3dd7e5ebd62" - integrity sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ== + "integrity" "sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-14.17.6.tgz" + "version" "14.17.6" "@types/vscode@^1.56.0": - version "1.58.1" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.58.1.tgz#7deae08792adc73fa57383244a0c79d3530df4f7" - integrity sha512-sa76rDXiSif09he8KoaWWUQxsuBr2+uND0xn1GUbEODkuEjp2p7Rqd3t5qlvklfmAedLFdL7MdnsPa57uzwcOw== + "integrity" "sha512-sa76rDXiSif09he8KoaWWUQxsuBr2+uND0xn1GUbEODkuEjp2p7Rqd3t5qlvklfmAedLFdL7MdnsPa57uzwcOw==" + "resolved" "https://registry.npmjs.org/@types/vscode/-/vscode-1.58.1.tgz" + "version" "1.58.1" "@typescript-eslint/eslint-plugin@^4.28.3": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz#8197f1473e7da8218c6a37ff308d695707835684" - integrity sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q== + "integrity" "sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz" + "version" "4.28.5" dependencies: "@typescript-eslint/experimental-utils" "4.28.5" "@typescript-eslint/scope-manager" "4.28.5" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - regexpp "^3.1.0" - semver "^7.3.5" - tsutils "^3.21.0" + "debug" "^4.3.1" + "functional-red-black-tree" "^1.0.1" + "regexpp" "^3.1.0" + "semver" "^7.3.5" + "tsutils" "^3.21.0" "@typescript-eslint/experimental-utils@4.28.5": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz#66c28bef115b417cf9d80812a713e0e46bb42a64" - integrity sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA== + "integrity" "sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz" + "version" "4.28.5" dependencies: "@types/json-schema" "^7.0.7" "@typescript-eslint/scope-manager" "4.28.5" "@typescript-eslint/types" "4.28.5" "@typescript-eslint/typescript-estree" "4.28.5" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + "eslint-scope" "^5.1.1" + "eslint-utils" "^3.0.0" -"@typescript-eslint/parser@^4.28.3": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.5.tgz#9c971668f86d1b5c552266c47788a87488a47d1c" - integrity sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw== +"@typescript-eslint/parser@^4.0.0", "@typescript-eslint/parser@^4.28.3": + "integrity" "sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.5.tgz" + "version" "4.28.5" dependencies: "@typescript-eslint/scope-manager" "4.28.5" "@typescript-eslint/types" "4.28.5" "@typescript-eslint/typescript-estree" "4.28.5" - debug "^4.3.1" + "debug" "^4.3.1" "@typescript-eslint/scope-manager@4.28.5": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz#3a1b70c50c1535ac33322786ea99ebe403d3b923" - integrity sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ== + "integrity" "sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz" + "version" "4.28.5" dependencies: "@typescript-eslint/types" "4.28.5" "@typescript-eslint/visitor-keys" "4.28.5" "@typescript-eslint/types@4.28.5": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.5.tgz#d33edf8e429f0c0930a7c3d44e9b010354c422e9" - integrity sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA== + "integrity" "sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.5.tgz" + "version" "4.28.5" "@typescript-eslint/typescript-estree@4.28.5": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz#4906d343de693cf3d8dcc301383ed638e0441cd1" - integrity sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw== + "integrity" "sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz" + "version" "4.28.5" dependencies: "@typescript-eslint/types" "4.28.5" "@typescript-eslint/visitor-keys" "4.28.5" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" + "debug" "^4.3.1" + "globby" "^11.0.3" + "is-glob" "^4.0.1" + "semver" "^7.3.5" + "tsutils" "^3.21.0" "@typescript-eslint/visitor-keys@4.28.5": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz#ffee2c602762ed6893405ee7c1144d9cc0a29675" - integrity sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg== + "integrity" "sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz" + "version" "4.28.5" dependencies: "@typescript-eslint/types" "4.28.5" - eslint-visitor-keys "^2.0.0" + "eslint-visitor-keys" "^2.0.0" "@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - -acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.6.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" - integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@4.1.1, ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== - -chai@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" - integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - pathval "^1.1.1" - type-detect "^4.0.5" - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= - -chokidar@3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" + "integrity" "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + "resolved" "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" + "version" "1.1.2" + +"acorn-jsx@^5.3.1": + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + "version" "5.3.2" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.4.0": + "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + "version" "7.4.1" + +"ajv@^6.10.0", "ajv@^6.12.4": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ajv@^8.0.1": + "integrity" "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" + "version" "8.6.2" + dependencies: + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" + +"ansi-colors@^4.1.1", "ansi-colors@4.1.1": + "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + "version" "4.1.1" + +"ansi-regex@^3.0.0": + "integrity" "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" + "version" "3.0.0" + +"ansi-regex@^5.0.0": + "integrity" "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" + "version" "5.0.0" + +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"anymatch@~3.1.1": + "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"arg@^4.1.0": + "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + "version" "4.1.3" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + +"assertion-error@^1.1.0": + "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + "version" "1.1.0" + +"astral-regex@^2.0.0": + "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + "version" "2.0.0" + +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" + +"binary-extensions@^2.0.0": + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + "version" "2.2.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"braces@^3.0.1", "braces@~3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"browser-stdout@1.3.1": + "integrity" "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + "version" "1.3.1" + +"buffer-from@^1.0.0": + "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" + "version" "1.1.1" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"camelcase@^6.0.0": + "integrity" "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz" + "version" "6.2.0" + +"chai@^4.3.4": + "integrity" "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==" + "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "assertion-error" "^1.1.0" + "check-error" "^1.0.2" + "deep-eql" "^3.0.1" + "get-func-name" "^2.0.0" + "pathval" "^1.1.1" + "type-detect" "^4.0.5" + +"chalk@^2.0.0": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^4.0.0": + "integrity" "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"check-error@^1.0.2": + "integrity" "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + "resolved" "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" + "version" "1.0.2" + +"chokidar@3.5.1": + "integrity" "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" + "version" "3.5.1" + dependencies: + "anymatch" "~3.1.1" + "braces" "~3.0.2" + "glob-parent" "~5.1.0" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.5.0" optionalDependencies: - fsevents "~2.3.1" + "fsevents" "~2.3.1" -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +"cliui@^7.0.2": + "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + "version" "7.0.4" dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^7.0.0" -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - -deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-config-prettier@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" + "color-name" "~1.1.4" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"concat-map@0.0.1": + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"create-require@^1.1.0": + "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + "version" "1.1.1" + +"cross-spawn@^7.0.2": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"debug@^4.0.1", "debug@^4.1.1", "debug@^4.3.1": + "integrity" "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "ms" "2.1.2" + +"debug@4.3.1": + "integrity" "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" + "version" "4.3.1" + dependencies: + "ms" "2.1.2" + +"decamelize@^4.0.0": + "integrity" "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" + "version" "4.0.0" + +"deep-eql@^3.0.1": + "integrity" "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==" + "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "type-detect" "^4.0.0" + +"deep-is@^0.1.3": + "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + "version" "0.1.3" + +"diff@^4.0.1": + "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + "version" "4.0.2" + +"diff@5.0.0": + "integrity" "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + "resolved" "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" + "version" "5.0.0" + +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"enquirer@^2.3.5": + "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" + "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + "version" "2.3.6" + dependencies: + "ansi-colors" "^4.1.1" + +"escalade@^3.1.1": + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + "version" "3.1.1" + +"escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^4.0.0", "escape-string-regexp@4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"eslint-config-prettier@^8.3.0": + "integrity" "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==" + "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz" + "version" "8.3.0" + +"eslint-scope@^5.1.1": + "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^4.1.1" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +"eslint-utils@^2.1.0": + "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" + "version" "2.1.0" dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + "eslint-visitor-keys" "^1.1.0" + +"eslint-utils@^3.0.0": + "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + "version" "3.0.0" dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + "eslint-visitor-keys" "^2.0.0" + +"eslint-visitor-keys@^1.1.0": + "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + "version" "1.3.0" + +"eslint-visitor-keys@^1.3.0": + "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + "version" "1.3.0" -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== +"eslint-visitor-keys@^2.0.0": + "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + "version" "2.1.0" -eslint@^7.30.0: - version "7.31.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.31.0.tgz#f972b539424bf2604907a970860732c5d99d3aca" - integrity sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA== +"eslint@*", "eslint@^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@^7.30.0", "eslint@>=5", "eslint@>=7.0.0": + "integrity" "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz" + "version" "7.31.0" dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.3" "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.1.1: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + "ajv" "^6.10.0" + "chalk" "^4.0.0" + "cross-spawn" "^7.0.2" + "debug" "^4.0.1" + "doctrine" "^3.0.0" + "enquirer" "^2.3.5" + "escape-string-regexp" "^4.0.0" + "eslint-scope" "^5.1.1" + "eslint-utils" "^2.1.0" + "eslint-visitor-keys" "^2.0.0" + "espree" "^7.3.1" + "esquery" "^1.4.0" + "esutils" "^2.0.2" + "fast-deep-equal" "^3.1.3" + "file-entry-cache" "^6.0.1" + "functional-red-black-tree" "^1.0.1" + "glob-parent" "^5.1.2" + "globals" "^13.6.0" + "ignore" "^4.0.6" + "import-fresh" "^3.0.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "js-yaml" "^3.13.1" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.4.1" + "lodash.merge" "^4.6.2" + "minimatch" "^3.0.4" + "natural-compare" "^1.4.0" + "optionator" "^0.9.1" + "progress" "^2.0.0" + "regexpp" "^3.1.0" + "semver" "^7.2.1" + "strip-ansi" "^6.0.0" + "strip-json-comments" "^3.1.0" + "table" "^6.0.9" + "text-table" "^0.2.0" + "v8-compile-cache" "^2.0.3" + +"espree@^7.3.0", "espree@^7.3.1": + "integrity" "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==" + "resolved" "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" + "version" "7.3.1" + dependencies: + "acorn" "^7.4.0" + "acorn-jsx" "^5.3.1" + "eslint-visitor-keys" "^1.3.0" + +"esprima@^4.0.0": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"esquery@^1.4.0": + "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^4.1.1": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" + +"estraverse@^5.1.0": + "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + "version" "5.2.0" + +"estraverse@^5.2.0": + "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + "version" "5.2.0" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-glob@^3.1.1": + "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" + "version" "3.2.7" dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" - integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== - dependencies: - reusify "^1.0.4" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.1.tgz#bbef080d95fca6709362c73044a1634f7c6e7d05" - integrity sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= - -glob-parent@^5.1.2, glob-parent@~5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^13.6.0, globals@^13.9.0: - version "13.10.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" - integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.3, globby@^11.0.4: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" - integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" - integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== - dependencies: - chalk "^4.0.0" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -minimatch@3.0.4, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fast-json-stable-stringify@^2.0.0": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-levenshtein@^2.0.6": + "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"fastq@^1.6.0": + "integrity" "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "reusify" "^1.0.4" + +"file-entry-cache@^6.0.1": + "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "flat-cache" "^3.0.4" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"find-up@5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"flat-cache@^3.0.4": + "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "flatted" "^3.1.0" + "rimraf" "^3.0.2" + +"flat@^5.0.2": + "integrity" "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + "resolved" "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + "version" "5.0.2" + +"flatted@^3.1.0": + "integrity" "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz" + "version" "3.2.1" + +"fs.realpath@^1.0.0": + "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"fsevents@~2.3.1": + "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + "version" "2.3.2" + +"functional-red-black-tree@^1.0.1": + "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + "version" "1.0.1" + +"get-caller-file@^2.0.5": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" + +"get-func-name@^2.0.0": + "integrity" "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + "resolved" "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" + "version" "2.0.0" + +"glob-parent@^5.1.2", "glob-parent@~5.1.0": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob@^7.1.3", "glob@7.1.6": + "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + "version" "7.1.6" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"globals@^13.6.0", "globals@^13.9.0": + "integrity" "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz" + "version" "13.10.0" + dependencies: + "type-fest" "^0.20.2" + +"globby@^11.0.3", "globby@^11.0.4": + "integrity" "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" + "version" "11.0.4" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.1.1" + "ignore" "^5.1.4" + "merge2" "^1.3.0" + "slash" "^3.0.0" + +"growl@1.10.5": + "integrity" "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" + "version" "1.10.5" + +"has-flag@^3.0.0": + "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"he@1.2.0": + "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + "version" "1.2.0" + +"ignore@^4.0.6": + "integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" + "version" "4.0.6" + +"ignore@^5.1.4": + "integrity" "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" + "version" "5.1.8" + +"import-fresh@^3.0.0", "import-fresh@^3.2.1": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"inflight@^1.0.4": + "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@2": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"ini@^1.3.8": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" + +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "binary-extensions" "^2.0.0" + +"is-extglob@^2.1.1": + "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fullwidth-code-point@^2.0.0": + "integrity" "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + "version" "2.0.0" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@~4.0.1": + "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-extglob" "^2.1.1" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-plain-obj@^2.1.0": + "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + "version" "2.1.0" + +"isexe@^2.0.0": + "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@4.0.0": + "integrity" "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "argparse" "^2.0.1" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema-traverse@^1.0.0": + "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + "version" "1.0.0" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"levn@^0.4.1": + "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "prelude-ls" "^1.2.1" + "type-check" "~0.4.0" + +"locate-path@^6.0.0": + "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "p-locate" "^5.0.0" + +"lodash.clonedeep@^4.5.0": + "integrity" "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + "resolved" "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" + "version" "4.5.0" + +"lodash.merge@^4.6.2": + "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + "version" "4.6.2" + +"lodash.truncate@^4.4.2": + "integrity" "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + "resolved" "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" + "version" "4.4.2" + +"lodash@^4.17.21": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"log-symbols@4.0.0": + "integrity" "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "chalk" "^4.0.0" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"make-error@^1.1.1": + "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + "version" "1.3.6" + +"merge2@^1.3.0": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"micromatch@^4.0.4": + "integrity" "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "braces" "^3.0.1" + "picomatch" "^2.2.3" + +"minimatch@^3.0.4", "minimatch@3.0.4": + "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "brace-expansion" "^1.1.7" -mocha@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.4.0.tgz#677be88bf15980a3cae03a73e10a0fc3997f0cff" - integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ== +"mocha@^8.4.0": + "integrity" "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==" + "resolved" "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz" + "version" "8.4.0" dependencies: "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.1" - debug "4.3.1" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.1.6" - growl "1.10.5" - he "1.2.0" - js-yaml "4.0.0" - log-symbols "4.0.0" - minimatch "3.0.4" - ms "2.1.3" - nanoid "3.1.20" - serialize-javascript "5.0.1" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - wide-align "1.1.3" - workerpool "6.1.0" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nanoid@3.1.20: - version "3.1.20" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" - integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -semver@^7.2.1, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== - dependencies: - randombytes "^2.1.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + "ansi-colors" "4.1.1" + "browser-stdout" "1.3.1" + "chokidar" "3.5.1" + "debug" "4.3.1" + "diff" "5.0.0" + "escape-string-regexp" "4.0.0" + "find-up" "5.0.0" + "glob" "7.1.6" + "growl" "1.10.5" + "he" "1.2.0" + "js-yaml" "4.0.0" + "log-symbols" "4.0.0" + "minimatch" "3.0.4" + "ms" "2.1.3" + "nanoid" "3.1.20" + "serialize-javascript" "5.0.1" + "strip-json-comments" "3.1.1" + "supports-color" "8.1.1" + "which" "2.0.2" + "wide-align" "1.1.3" + "workerpool" "6.1.0" + "yargs" "16.2.0" + "yargs-parser" "20.2.4" + "yargs-unparser" "2.0.0" + +"ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"ms@2.1.3": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + +"nanoid@3.1.20": + "integrity" "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" + "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz" + "version" "3.1.20" + +"natural-compare@^1.4.0": + "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"once@^1.3.0": + "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"optionator@^0.9.1": + "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + "version" "0.9.1" + dependencies: + "deep-is" "^0.1.3" + "fast-levenshtein" "^2.0.6" + "levn" "^0.4.1" + "prelude-ls" "^1.2.1" + "type-check" "^0.4.0" + "word-wrap" "^1.2.3" + +"p-limit@^3.0.2": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "yocto-queue" "^0.1.0" + +"p-locate@^5.0.0": + "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-limit" "^3.0.2" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"pathval@^1.1.1": + "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" + "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" + "version" "1.1.1" + +"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3": + "integrity" "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" + "version" "2.3.0" + +"prelude-ls@^1.2.1": + "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + "version" "1.2.1" + +"progress@^2.0.0": + "integrity" "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + "resolved" "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + "version" "2.0.3" + +"punycode@^2.1.0": + "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + "version" "2.1.1" + +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"randombytes@^2.1.0": + "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" + "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "safe-buffer" "^5.1.0" + +"readdirp@~3.5.0": + "integrity" "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" + "version" "3.5.0" + dependencies: + "picomatch" "^2.2.1" + +"regexpp@^3.1.0": + "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + "version" "3.2.0" + +"require-directory@^2.1.1": + "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"require-from-string@^2.0.2": + "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + "version" "2.0.2" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"safe-buffer@^5.1.0": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"semver@^7.2.1", "semver@^7.3.5": + "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + "version" "7.3.5" + dependencies: + "lru-cache" "^6.0.0" + +"serialize-javascript@5.0.1": + "integrity" "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "randombytes" "^2.1.0" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"slice-ansi@^4.0.0": + "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + "version" "4.0.0" dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" -source-map-support@^0.5.17: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== +"source-map-support@^0.5.17": + "integrity" "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" + "version" "0.5.19" dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +"source-map@^0.6.0": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +"sprintf-js@~1.0.2": + "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" "string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -table@^6.0.9: - version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -ts-node@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" - integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== - dependencies: - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -typescript@^4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -vscode-jsonrpc@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" - integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== - -vscode-languageserver-protocol@3.16.0: - version "3.16.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821" - integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== - dependencies: - vscode-jsonrpc "6.0.0" - vscode-languageserver-types "3.16.0" - -vscode-languageserver-textdocument@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz#178168e87efad6171b372add1dea34f53e5d330f" - integrity sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA== - -vscode-languageserver-types@3.16.0: - version "3.16.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" - integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== - -vscode-languageserver@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz#49b068c87cfcca93a356969d20f5d9bdd501c6b0" - integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw== - dependencies: - vscode-languageserver-protocol "3.16.0" - -which@2.0.2, which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -workerpool@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" - integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^4.0.0" + +"string-width@^4.1.0", "string-width@^4.2.0": + "integrity" "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" + "version" "4.2.2" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.0" + +"strip-ansi@^4.0.0": + "integrity" "sha1-qEeQIusaw2iocTibY1JixQXuNo8=" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-regex" "^3.0.0" + +"strip-ansi@^6.0.0": + "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "ansi-regex" "^5.0.0" + +"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1", "strip-json-comments@3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" + +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@8.1.1": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"table@^6.0.9": + "integrity" "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==" + "resolved" "https://registry.npmjs.org/table/-/table-6.7.1.tgz" + "version" "6.7.1" + dependencies: + "ajv" "^8.0.1" + "lodash.clonedeep" "^4.5.0" + "lodash.truncate" "^4.4.2" + "slice-ansi" "^4.0.0" + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + +"text-table@^0.2.0": + "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"ts-node@^9.1.1": + "integrity" "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==" + "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz" + "version" "9.1.1" + dependencies: + "arg" "^4.1.0" + "create-require" "^1.1.0" + "diff" "^4.0.1" + "make-error" "^1.1.1" + "source-map-support" "^0.5.17" + "yn" "3.1.1" + +"tslib@^1.8.1": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"tsutils@^3.21.0": + "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + "version" "3.21.0" + dependencies: + "tslib" "^1.8.1" + +"type-check@^0.4.0", "type-check@~0.4.0": + "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-detect@^4.0.0", "type-detect@^4.0.5": + "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + "version" "4.0.8" + +"type-fest@^0.20.2": + "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + "version" "0.20.2" + +"typescript@^4.3.5", "typescript@>=2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": + "integrity" "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz" + "version" "4.3.5" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"v8-compile-cache@^2.0.3": + "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" + "version" "2.3.0" + +"vscode-jsonrpc@6.0.0": + "integrity" "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + "resolved" "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz" + "version" "6.0.0" + +"vscode-languageserver-protocol@3.16.0": + "integrity" "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==" + "resolved" "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz" + "version" "3.16.0" + dependencies: + "vscode-jsonrpc" "6.0.0" + "vscode-languageserver-types" "3.16.0" + +"vscode-languageserver-textdocument@^1.0.1": + "integrity" "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" + "resolved" "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz" + "version" "1.0.1" + +"vscode-languageserver-types@3.16.0": + "integrity" "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + "resolved" "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz" + "version" "3.16.0" + +"vscode-languageserver@^7.0.0": + "integrity" "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==" + "resolved" "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "vscode-languageserver-protocol" "3.16.0" + +"which@^2.0.1", "which@2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"wide-align@1.1.3": + "integrity" "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "string-width" "^1.0.2 || 2" + +"word-wrap@^1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" + +"workerpool@6.1.0": + "integrity" "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" + "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz" + "version" "6.1.0" + +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrappy@1": + "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"y18n@^5.0.5": + "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + "version" "5.0.8" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yaml@^1.10.2": + "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + "version" "1.10.2" + +"yargs-parser@^20.2.2", "yargs-parser@20.2.4": + "integrity" "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" + "version" "20.2.4" + +"yargs-unparser@2.0.0": + "integrity" "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==" + "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "camelcase" "^6.0.0" + "decamelize" "^4.0.0" + "flat" "^5.0.2" + "is-plain-obj" "^2.1.0" + +"yargs@16.2.0": + "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + "version" "16.2.0" + dependencies: + "cliui" "^7.0.2" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.0" + "y18n" "^5.0.5" + "yargs-parser" "^20.2.2" + +"yn@3.1.1": + "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + "version" "3.1.1" + +"yocto-queue@^0.1.0": + "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + "version" "0.1.0" From c00347f1ed4fa7eb480c5d95015cb8da68834818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Wed, 25 Aug 2021 07:00:08 +0200 Subject: [PATCH 081/558] Sync with upstream (#7) * Fix special characters in workspace and file paths (#15) * Advise yamllint installation and use (#16) * Fix handling of files with CRLF line endings (#20) * Mimic linter's config file search algorithm (#22) Since ansible-lint is executed from the root directory of the workspace the algorithm that it uses to find configuration for a particular file is not involved. To compensate, the extension now mimics that behavior, searching the directory structure, going up from the investigated file. At the same time, it is still possible to force a particular config file through arguments provided in the extension settings. The configuration file that is actually used is now correctly identified for the purpose of marking configured finding groups as warnings. --- README.md | 7 +- src/providers/completionProvider.ts | 10 ++- src/providers/definitionProvider.ts | 14 ++- src/providers/hoverProvider.ts | 13 +-- src/providers/semanticTokenProvider.ts | 10 ++- src/providers/validationProvider.ts | 12 ++- src/services/ansibleConfig.ts | 2 +- src/services/ansibleLint.ts | 120 +++++++++++++++---------- src/utils/yaml.ts | 45 ++++++++-- 9 files changed, 155 insertions(+), 78 deletions(-) diff --git a/README.md b/README.md index ba5e7b56f..c0b163f55 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,10 @@ rules/tags added to `warn_list` (see [Ansible Lint Documentation](https://ansible-lint.readthedocs.io/en/latest/configuring.html)) are shown as warnings instead. +> If you also install `yamllint`, `ansible-lint` will detect it and incorporate +> into the linting process. Any findings reported by `yamllint` will be exposed +> in VSCode as errors/warnings. + ### Smart autocompletion ![Autocompletion](images/smart-completions.gif) @@ -92,7 +96,8 @@ holding `ctrl`/`cmd`. ## Requirements - [Ansible 2.9+](https://docs.ansible.com/ansible/latest/index.html) - [Ansible Lint](https://ansible-lint.readthedocs.io/en/latest/) (required, - unless you disable linter support; install without `yamllint`) + unless you disable linter support) +- [yamllint](https://yamllint.readthedocs.io/en/stable/) (optional) For Windows users, this extension works perfectly well with extensions such as `Remote - WSL` and `Remote - Containers`. diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index 15cd01476..9cf0bef71 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -6,7 +6,6 @@ import { TextEdit, } from 'vscode-languageserver'; import { Position, TextDocument } from 'vscode-languageserver-textdocument'; -import { parseAllDocuments } from 'yaml'; import { Node, Pair, Scalar, YAMLMap } from 'yaml/types'; import { IOption } from '../interfaces/module'; import { WorkspaceFolderContext } from '../services/workspaceManager'; @@ -24,11 +23,13 @@ import { findProvidedModule, getDeclaredCollections, getPathAt, + getOrigRange, getYamlMapKeys, isBlockParam, isPlayParam, isRoleParam, isTaskParam, + parseAllDocuments, } from '../utils/yaml'; const priorityMap = { @@ -293,9 +294,10 @@ function getKeywordCompletion( * the node has range information and is a string scalar. */ function getNodeRange(node: Node, document: TextDocument): Range | undefined { - if (node.range && node instanceof Scalar && typeof node.value === 'string') { - const start = node.range[0]; - let end = node.range[1]; + const range = getOrigRange(node); + if (range && node instanceof Scalar && typeof node.value === 'string') { + const start = range[0]; + let end = range[1]; // compensate for `_:` if (node.value.includes('_:')) { end -= 2; diff --git a/src/providers/definitionProvider.ts b/src/providers/definitionProvider.ts index cae248b3f..3161fcc6f 100644 --- a/src/providers/definitionProvider.ts +++ b/src/providers/definitionProvider.ts @@ -1,10 +1,15 @@ import { DefinitionLink, Range } from 'vscode-languageserver'; import { Position, TextDocument } from 'vscode-languageserver-textdocument'; -import { parseAllDocuments } from 'yaml'; import { Scalar } from 'yaml/types'; import { DocsLibrary } from '../services/docsLibrary'; import { toLspRange } from '../utils/misc'; -import { AncestryBuilder, getPathAt, isTaskParam } from '../utils/yaml'; +import { + AncestryBuilder, + getOrigRange, + getPathAt, + isTaskParam, + parseAllDocuments, +} from '../utils/yaml'; export async function getDefinition( document: TextDocument, @@ -26,11 +31,12 @@ export async function getDefinition( document.uri ); if (module) { + const range = getOrigRange(node); return [ { targetUri: module.source, - originSelectionRange: node.range - ? toLspRange(node.range, document) + originSelectionRange: range + ? toLspRange(range, document) : undefined, targetRange: Range.create( module.sourceLineRange[0], diff --git a/src/providers/hoverProvider.ts b/src/providers/hoverProvider.ts index 71dfec7d1..f5914c64e 100644 --- a/src/providers/hoverProvider.ts +++ b/src/providers/hoverProvider.ts @@ -1,6 +1,5 @@ import { Hover, MarkupContent, MarkupKind } from 'vscode-languageserver'; import { Position, TextDocument } from 'vscode-languageserver-textdocument'; -import { parseAllDocuments } from 'yaml'; import { Scalar, YAMLMap } from 'yaml/types'; import { DocsLibrary } from '../services/docsLibrary'; import { @@ -19,11 +18,13 @@ import { toLspRange } from '../utils/misc'; import { AncestryBuilder, findProvidedModule, + getOrigRange, getPathAt, isBlockParam, isPlayParam, isRoleParam, isTaskParam, + parseAllDocuments, } from '../utils/yaml'; export async function doHover( @@ -60,13 +61,14 @@ export async function doHover( path, document.uri ); + const range = getOrigRange(node); if (module && module.documentation) { return { contents: formatModule( module.documentation, docsLibrary.getModuleRoute(hitFqcn || node.value) ), - range: node.range ? toLspRange(node.range, document) : undefined, + range: range ? toLspRange(range, document) : undefined, }; } else if (hitFqcn) { // check for tombstones @@ -74,9 +76,7 @@ export async function doHover( if (route) { return { contents: formatTombstone(route), - range: node.range - ? toLspRange(node.range, document) - : undefined, + range: range ? toLspRange(range, document) : undefined, }; } } @@ -136,9 +136,10 @@ function getKeywordHover( } : keywordDocumentation; if (markupDoc) { + const range = getOrigRange(node); return { contents: markupDoc, - range: node.range ? toLspRange(node.range, document) : undefined, + range: range ? toLspRange(range, document) : undefined, }; } else return null; } diff --git a/src/providers/semanticTokenProvider.ts b/src/providers/semanticTokenProvider.ts index e97df193a..566899453 100644 --- a/src/providers/semanticTokenProvider.ts +++ b/src/providers/semanticTokenProvider.ts @@ -5,7 +5,6 @@ import { SemanticTokenTypes, } from 'vscode-languageserver'; import { TextDocument } from 'vscode-languageserver-textdocument'; -import { parseAllDocuments } from 'yaml'; import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; import { IModuleMetadata } from '../interfaces/module'; import { DocsLibrary } from '../services/docsLibrary'; @@ -17,10 +16,12 @@ import { } from '../utils/ansible'; import { findProvidedModule, + getOrigRange, isBlockParam, isPlayParam, isRoleParam, isTaskParam, + parseAllDocuments, } from '../utils/yaml'; export const tokenTypes = [ @@ -233,9 +234,10 @@ function markNode( builder: SemanticTokensBuilder, document: TextDocument ) { - if (node.range) { - const startPosition = document.positionAt(node.range[0]); - const length = node.range[1] - node.range[0]; + const range = getOrigRange(node); + if (range) { + const startPosition = document.positionAt(range[0]); + const length = range[1] - range[0]; builder.push( startPosition.line, startPosition.character, diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts index eeecb362f..2f44a2f13 100644 --- a/src/providers/validationProvider.ts +++ b/src/providers/validationProvider.ts @@ -8,9 +8,9 @@ import { Range, } from 'vscode-languageserver'; import { TextDocument } from 'vscode-languageserver-textdocument'; -import { parseAllDocuments } from 'yaml'; import { ValidationManager } from '../services/validationManager'; import { WorkspaceFolderContext } from '../services/workspaceManager'; +import { parseAllDocuments } from '../utils/yaml'; /** * Validates the given document. @@ -63,8 +63,14 @@ function getYamlValidation(textDocument: TextDocument): Diagnostic[] { const errorRange = error.range || error.source?.range; let range; if (errorRange) { - const start = textDocument.positionAt(errorRange.start); - const end = textDocument.positionAt(errorRange.end); + const start = textDocument.positionAt( + errorRange.origStart !== undefined + ? errorRange.origStart + : errorRange.start + ); + const end = textDocument.positionAt( + errorRange.origEnd !== undefined ? errorRange.origEnd : errorRange.end + ); range = Range.create(start, end); let severity; diff --git a/src/services/ansibleConfig.ts b/src/services/ansibleConfig.ts index 495c4f4fe..b188bee2c 100644 --- a/src/services/ansibleConfig.ts +++ b/src/services/ansibleConfig.ts @@ -35,7 +35,7 @@ export class AnsibleConfig { const ansibleConfigResult = child_process.execSync(ansibleConfigCommand, { encoding: 'utf-8', - cwd: new URL(this.context.workspaceFolder.uri).pathname, + cwd: decodeURI(new URL(this.context.workspaceFolder.uri).pathname), env: ansibleConfigEnv, }); diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts index af489c6f7..0f7308c94 100644 --- a/src/services/ansibleLint.ts +++ b/src/services/ansibleLint.ts @@ -1,6 +1,7 @@ import * as child_process from 'child_process'; import { ExecException } from 'child_process'; import { promises as fs } from 'fs'; +import * as path from 'path'; import { URL } from 'url'; import { promisify } from 'util'; import { @@ -50,25 +51,47 @@ export class AnsibleLint { public async doValidate( textDocument: TextDocument ): Promise> { - const docPath = new URL(textDocument.uri).pathname; let diagnostics: Map = new Map(); - let progressTracker; - if (this.useProgressTracker) { - progressTracker = await this.connection.window.createWorkDoneProgress(); - } - const ansibleLintConfigPromise = this.getAnsibleLintConfig( - textDocument.uri + const workingDirectory = decodeURI( + new URL(this.context.workspaceFolder.uri).pathname ); - const workingDirectory = new URL(this.context.workspaceFolder.uri).pathname; + const settings = await this.context.documentSettings.get(textDocument.uri); - try { - const settings = await this.context.documentSettings.get( - textDocument.uri + if (settings.ansibleLint.enabled) { + let linterArguments = settings.ansibleLint.arguments; + + // Determine linter config file + let ansibleLintConfigPath = linterArguments.match( + /(?:^|\s)-c\s*(?[\s'"])(?.+?)(?:\k|$)/ + )?.groups?.conf; + if (!ansibleLintConfigPath) { + // Config file not provided in arguments -> search for one mimicking the + // way ansible-lint looks for it, going up the directory structure + const ansibleLintConfigFile = await this.findAnsibleLintConfigFile( + textDocument.uri + ); + if (ansibleLintConfigFile) { + ansibleLintConfigPath = decodeURI( + new URL(ansibleLintConfigFile).pathname + ); + linterArguments = `${linterArguments} -c "${ansibleLintConfigPath}"`; + } + } + linterArguments = `${linterArguments} --offline --nocolor -f codeclimate`; + + const docPath = decodeURI(new URL(textDocument.uri).pathname); + let progressTracker; + if (this.useProgressTracker) { + progressTracker = await this.connection.window.createWorkDoneProgress(); + } + const ansibleLintConfigPromise = this.getAnsibleLintConfig( + workingDirectory, + ansibleLintConfigPath ); - if (settings.ansibleLint.enabled) { + try { if (progressTracker) { progressTracker.begin( 'ansible-lint', @@ -79,7 +102,7 @@ export class AnsibleLint { const [command, env] = withInterpreter( settings.ansibleLint.path, - `${settings.ansibleLint.arguments} --offline --nocolor -f codeclimate ${docPath}`, + `${linterArguments} --offline --nocolor -f codeclimate "${docPath}"`, settings.python.interpreterPath, settings.python.activationScript ); @@ -98,36 +121,36 @@ export class AnsibleLint { if (result.stderr) { this.connection.console.info(`[ansible-lint] ${result.stderr}`); } - } - } catch (error) { - if (error instanceof Error) { - const execError = error as ExecException & { - // according to the docs, these are always available - stdout: string; - stderr: string; - }; - if (execError.code === 2) { - diagnostics = this.processReport( - execError.stdout, - await ansibleLintConfigPromise, - workingDirectory - ); - } else { - this.connection.window.showErrorMessage(execError.message); - } + } catch (error) { + if (error instanceof Error) { + const execError = error as ExecException & { + // according to the docs, these are always available + stdout: string; + stderr: string; + }; + if (execError.code === 2) { + diagnostics = this.processReport( + execError.stdout, + await ansibleLintConfigPromise, + workingDirectory + ); + } else { + this.connection.window.showErrorMessage(execError.message); + } - if (execError.stderr) { - this.connection.console.info(`[ansible-lint] ${execError.stderr}`); + if (execError.stderr) { + this.connection.console.info(`[ansible-lint] ${execError.stderr}`); + } + } else { + this.connection.console.error( + `Exception in AnsibleLint service: ${JSON.stringify(error)}` + ); } - } else { - this.connection.console.error( - `Exception in AnsibleLint service: ${JSON.stringify(error)}` - ); } - } - if (progressTracker) { - progressTracker.done(); + if (progressTracker) { + progressTracker.done(); + } } return diagnostics; } @@ -192,8 +215,8 @@ export class AnsibleLint { } } } - - const locationUri = `file://${workingDirectory}/${item.location.path}`; + const path = `${workingDirectory}/${item.location.path}`; + const locationUri = `file://${encodeURI(path)}`; let fileDiagnostics = diagnostics.get(locationUri); if (!fileDiagnostics) { @@ -242,14 +265,15 @@ export class AnsibleLint { } private async getAnsibleLintConfig( - uri: string + workingDirectory: string, + configPath: string | undefined ): Promise { - const configPath = await this.getAnsibleLintConfigPath(uri); if (configPath) { - let config = this.configCache.get(configPath); + const absConfigPath = path.resolve(workingDirectory, configPath); + let config = this.configCache.get(absConfigPath); if (!config) { - config = await this.readAnsibleLintConfig(configPath); - this.configCache.set(configPath, config); + config = await this.readAnsibleLintConfig(absConfigPath); + this.configCache.set(absConfigPath, config); } return config; } @@ -262,7 +286,7 @@ export class AnsibleLint { warnList: new Set(), }; try { - const configContents = await fs.readFile(new URL(configPath), { + const configContents = await fs.readFile(configPath, { encoding: 'utf8', }); parseAllDocuments(configContents).forEach((configDoc) => { @@ -284,7 +308,7 @@ export class AnsibleLint { return config; } - private async getAnsibleLintConfigPath( + private async findAnsibleLintConfigFile( uri: string ): Promise { // find configuration path diff --git a/src/utils/yaml.ts b/src/utils/yaml.ts index 14dcd0215..a68c7662e 100644 --- a/src/utils/yaml.ts +++ b/src/utils/yaml.ts @@ -1,6 +1,6 @@ import * as _ from 'lodash'; import { Position, TextDocument } from 'vscode-languageserver-textdocument'; -import { Document } from 'yaml'; +import { Document, Options, parseCST } from 'yaml'; import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; import { IModuleMetadata } from '../interfaces/module'; import { DocsLibrary } from '../services/docsLibrary'; @@ -131,7 +131,7 @@ export class AncestryBuilder { export function getPathAt( document: TextDocument, position: Position, - docs: Document.Parsed[], + docs: Document[], inclusive = false ): Node[] | null { const offset = document.offsetAt(position); @@ -147,10 +147,11 @@ export function contains( offset: number, inclusive: boolean ): boolean { + const range = getOrigRange(node); return !!( - node?.range && - node.range[0] <= offset && - (node.range[1] > offset || (inclusive && node.range[1] >= offset)) + range && + range[0] <= offset && + (range[1] > offset || (inclusive && range[1] >= offset)) ); } @@ -180,8 +181,8 @@ export function getPathAtOffset( } pair = _.find(currentNode.items, (p) => { const inBetweenNode = new Node(); - const start = (p.key as Node)?.range?.[1]; - const end = (p.value as Node)?.range?.[0]; + const start = getOrigRange(p.key as Node)?.[1]; + const end = getOrigRange(p.value as Node)?.[0]; if (start && end) { inBetweenNode.range = [start, end - 1]; return contains(inBetweenNode, offset, inclusive); @@ -390,3 +391,33 @@ export function getYamlMapKeys(mapNode: YAMLMap): Array { } }); } + +export function getOrigRange( + node: Node | null | undefined +): [number, number] | null | undefined { + if (node?.cstNode?.range) { + const range = node.cstNode.range; + return [ + range.origStart !== undefined ? range.origStart : range.start, + range.origEnd !== undefined ? range.origEnd : range.end, + ]; + } else { + return node?.range; + } +} + +/** Parsing with the YAML library tailored to the needs of this extension */ +export function parseAllDocuments(str: string, options?: Options): Document[] { + const cst = parseCST(str); + cst.setOrigRanges(); + + const parsedDocuments: Document[] = []; + for (const cstDoc of cst) { + const parsedDocument = new Document( + Object.assign({ keepCstNodes: true }, options) + ); + parsedDocument.parse(cstDoc); + parsedDocuments.push(parsedDocument); + } + return parsedDocuments; +} From cdc25dd949358a80ce299887c6cd750849232e81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Tue, 7 Sep 2021 06:23:49 +0200 Subject: [PATCH 082/558] Replace decode/encodeURI with native VSCode mechanism. (#8) Also, removed repetition of linter arguments. --- package.json | 1 + src/services/ansibleConfig.ts | 4 +- src/services/ansibleLint.ts | 16 +- yarn.lock | 2825 ++++++++++++++++----------------- 4 files changed, 1419 insertions(+), 1427 deletions(-) diff --git a/package.json b/package.json index 91172cca7..4fc853bff 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "lodash": "^4.17.21", "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.1", + "vscode-uri": "^3.0.2", "yaml": "^1.10.2" }, "devDependencies": { diff --git a/src/services/ansibleConfig.ts b/src/services/ansibleConfig.ts index b188bee2c..408481070 100644 --- a/src/services/ansibleConfig.ts +++ b/src/services/ansibleConfig.ts @@ -2,7 +2,7 @@ import * as child_process from 'child_process'; import * as ini from 'ini'; import * as _ from 'lodash'; import * as path from 'path'; -import { URL } from 'url'; +import { URI } from 'vscode-uri'; import { Connection } from 'vscode-languageserver'; import { withInterpreter } from '../utils/misc'; import { WorkspaceFolderContext } from './workspaceManager'; @@ -35,7 +35,7 @@ export class AnsibleConfig { const ansibleConfigResult = child_process.execSync(ansibleConfigCommand, { encoding: 'utf-8', - cwd: decodeURI(new URL(this.context.workspaceFolder.uri).pathname), + cwd: URI.parse(this.context.workspaceFolder.uri).path, env: ansibleConfigEnv, }); diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts index 0f7308c94..ea607fc39 100644 --- a/src/services/ansibleLint.ts +++ b/src/services/ansibleLint.ts @@ -2,7 +2,7 @@ import * as child_process from 'child_process'; import { ExecException } from 'child_process'; import { promises as fs } from 'fs'; import * as path from 'path'; -import { URL } from 'url'; +import { URI } from 'vscode-uri'; import { promisify } from 'util'; import { Connection, @@ -53,9 +53,7 @@ export class AnsibleLint { ): Promise> { let diagnostics: Map = new Map(); - const workingDirectory = decodeURI( - new URL(this.context.workspaceFolder.uri).pathname - ); + const workingDirectory = URI.parse(this.context.workspaceFolder.uri).path; const settings = await this.context.documentSettings.get(textDocument.uri); @@ -73,15 +71,13 @@ export class AnsibleLint { textDocument.uri ); if (ansibleLintConfigFile) { - ansibleLintConfigPath = decodeURI( - new URL(ansibleLintConfigFile).pathname - ); + ansibleLintConfigPath = URI.parse(ansibleLintConfigFile).path; linterArguments = `${linterArguments} -c "${ansibleLintConfigPath}"`; } } linterArguments = `${linterArguments} --offline --nocolor -f codeclimate`; - const docPath = decodeURI(new URL(textDocument.uri).pathname); + const docPath = URI.parse(textDocument.uri).path; let progressTracker; if (this.useProgressTracker) { progressTracker = await this.connection.window.createWorkDoneProgress(); @@ -102,7 +98,7 @@ export class AnsibleLint { const [command, env] = withInterpreter( settings.ansibleLint.path, - `${linterArguments} --offline --nocolor -f codeclimate "${docPath}"`, + `${linterArguments} "${docPath}"`, settings.python.interpreterPath, settings.python.activationScript ); @@ -216,7 +212,7 @@ export class AnsibleLint { } } const path = `${workingDirectory}/${item.location.path}`; - const locationUri = `file://${encodeURI(path)}`; + const locationUri = URI.file(path).toString(); let fileDiagnostics = diagnostics.get(locationUri); if (!fileDiagnostics) { diff --git a/yarn.lock b/yarn.lock index 0ecbb5fd1..22a9e87d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,1521 +3,1516 @@ "@babel/code-frame@7.12.11": - "integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" - "version" "7.12.11" + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" "@babel/helper-validator-identifier@^7.14.5": - "integrity" "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz" - "version" "7.14.8" + version "7.14.8" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz" + integrity sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow== "@babel/highlight@^7.10.4": - "integrity" "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==" - "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" - "version" "7.14.5" + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== dependencies: "@babel/helper-validator-identifier" "^7.14.5" - "chalk" "^2.0.0" - "js-tokens" "^4.0.0" + chalk "^2.0.0" + js-tokens "^4.0.0" "@eslint/eslintrc@^0.4.3": - "integrity" "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==" - "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" - "version" "0.4.3" - dependencies: - "ajv" "^6.12.4" - "debug" "^4.1.1" - "espree" "^7.3.0" - "globals" "^13.9.0" - "ignore" "^4.0.6" - "import-fresh" "^3.2.1" - "js-yaml" "^3.13.1" - "minimatch" "^3.0.4" - "strip-json-comments" "^3.1.1" + version "0.4.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" "@flatten-js/interval-tree@^1.0.14": - "integrity" "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg==" - "resolved" "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz" - "version" "1.0.14" + version "1.0.14" + resolved "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz" + integrity sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg== "@humanwhocodes/config-array@^0.5.0": - "integrity" "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" - "version" "0.5.0" + version "0.5.0" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== dependencies: "@humanwhocodes/object-schema" "^1.2.0" - "debug" "^4.1.1" - "minimatch" "^3.0.4" + debug "^4.1.1" + minimatch "^3.0.4" "@humanwhocodes/object-schema@^1.2.0": - "integrity" "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz" - "version" "1.2.0" + version "1.2.0" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz" + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== "@nodelib/fs.scandir@2.1.5": - "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - "version" "2.1.5" + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" - "run-parallel" "^1.1.9" + run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - "version" "2.0.5" +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": - "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - "version" "1.2.8" + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" - "fastq" "^1.6.0" + fastq "^1.6.0" "@types/chai@^4.2.21": - "integrity" "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==" - "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz" - "version" "4.2.21" + version "4.2.21" + resolved "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz" + integrity sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg== "@types/ini@^1.3.30": - "integrity" "sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ==" - "resolved" "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz" - "version" "1.3.30" + version "1.3.30" + resolved "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz" + integrity sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ== "@types/json-schema@^7.0.7": - "integrity" "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==" - "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz" - "version" "7.0.8" + version "7.0.8" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz" + integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== "@types/lodash@^4.14.171": - "integrity" "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==" - "resolved" "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz" - "version" "4.14.171" + version "4.14.171" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz" + integrity sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg== "@types/mocha@^8.2.3": - "integrity" "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==" - "resolved" "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz" - "version" "8.2.3" + version "8.2.3" + resolved "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz" + integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== "@types/node@^14.17.5": - "integrity" "sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-14.17.6.tgz" - "version" "14.17.6" + version "14.17.6" + resolved "https://registry.npmjs.org/@types/node/-/node-14.17.6.tgz" + integrity sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ== "@types/vscode@^1.56.0": - "integrity" "sha512-sa76rDXiSif09he8KoaWWUQxsuBr2+uND0xn1GUbEODkuEjp2p7Rqd3t5qlvklfmAedLFdL7MdnsPa57uzwcOw==" - "resolved" "https://registry.npmjs.org/@types/vscode/-/vscode-1.58.1.tgz" - "version" "1.58.1" + version "1.58.1" + resolved "https://registry.npmjs.org/@types/vscode/-/vscode-1.58.1.tgz" + integrity sha512-sa76rDXiSif09he8KoaWWUQxsuBr2+uND0xn1GUbEODkuEjp2p7Rqd3t5qlvklfmAedLFdL7MdnsPa57uzwcOw== "@typescript-eslint/eslint-plugin@^4.28.3": - "integrity" "sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz" - "version" "4.28.5" + version "4.28.5" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz" + integrity sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q== dependencies: "@typescript-eslint/experimental-utils" "4.28.5" "@typescript-eslint/scope-manager" "4.28.5" - "debug" "^4.3.1" - "functional-red-black-tree" "^1.0.1" - "regexpp" "^3.1.0" - "semver" "^7.3.5" - "tsutils" "^3.21.0" + debug "^4.3.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" "@typescript-eslint/experimental-utils@4.28.5": - "integrity" "sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz" - "version" "4.28.5" + version "4.28.5" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz" + integrity sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA== dependencies: "@types/json-schema" "^7.0.7" "@typescript-eslint/scope-manager" "4.28.5" "@typescript-eslint/types" "4.28.5" "@typescript-eslint/typescript-estree" "4.28.5" - "eslint-scope" "^5.1.1" - "eslint-utils" "^3.0.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" -"@typescript-eslint/parser@^4.0.0", "@typescript-eslint/parser@^4.28.3": - "integrity" "sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.5.tgz" - "version" "4.28.5" +"@typescript-eslint/parser@^4.28.3": + version "4.28.5" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.5.tgz" + integrity sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw== dependencies: "@typescript-eslint/scope-manager" "4.28.5" "@typescript-eslint/types" "4.28.5" "@typescript-eslint/typescript-estree" "4.28.5" - "debug" "^4.3.1" + debug "^4.3.1" "@typescript-eslint/scope-manager@4.28.5": - "integrity" "sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz" - "version" "4.28.5" + version "4.28.5" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz" + integrity sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ== dependencies: "@typescript-eslint/types" "4.28.5" "@typescript-eslint/visitor-keys" "4.28.5" "@typescript-eslint/types@4.28.5": - "integrity" "sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.5.tgz" - "version" "4.28.5" + version "4.28.5" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.5.tgz" + integrity sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA== "@typescript-eslint/typescript-estree@4.28.5": - "integrity" "sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz" - "version" "4.28.5" + version "4.28.5" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz" + integrity sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw== dependencies: "@typescript-eslint/types" "4.28.5" "@typescript-eslint/visitor-keys" "4.28.5" - "debug" "^4.3.1" - "globby" "^11.0.3" - "is-glob" "^4.0.1" - "semver" "^7.3.5" - "tsutils" "^3.21.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" "@typescript-eslint/visitor-keys@4.28.5": - "integrity" "sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz" - "version" "4.28.5" + version "4.28.5" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz" + integrity sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg== dependencies: "@typescript-eslint/types" "4.28.5" - "eslint-visitor-keys" "^2.0.0" + eslint-visitor-keys "^2.0.0" "@ungap/promise-all-settled@1.1.2": - "integrity" "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" - "resolved" "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" - "version" "1.1.2" - -"acorn-jsx@^5.3.1": - "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" - "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - "version" "5.3.2" - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.4.0": - "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - "version" "7.4.1" - -"ajv@^6.10.0", "ajv@^6.12.4": - "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - "version" "6.12.6" - dependencies: - "fast-deep-equal" "^3.1.1" - "fast-json-stable-stringify" "^2.0.0" - "json-schema-traverse" "^0.4.1" - "uri-js" "^4.2.2" - -"ajv@^8.0.1": - "integrity" "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" - "version" "8.6.2" - dependencies: - "fast-deep-equal" "^3.1.1" - "json-schema-traverse" "^1.0.0" - "require-from-string" "^2.0.2" - "uri-js" "^4.2.2" - -"ansi-colors@^4.1.1", "ansi-colors@4.1.1": - "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - "version" "4.1.1" - -"ansi-regex@^3.0.0": - "integrity" "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" - "version" "3.0.0" - -"ansi-regex@^5.0.0": - "integrity" "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" - "version" "5.0.0" - -"ansi-styles@^3.2.1": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.0" - -"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": - "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "color-convert" "^2.0.1" - -"anymatch@~3.1.1": - "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" - "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "normalize-path" "^3.0.0" - "picomatch" "^2.0.4" - -"arg@^4.1.0": - "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - "version" "4.1.3" - -"argparse@^1.0.7": - "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "sprintf-js" "~1.0.2" - -"argparse@^2.0.1": - "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - "version" "2.0.1" - -"array-union@^2.1.0": - "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - "version" "2.1.0" - -"assertion-error@^1.1.0": - "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" - "version" "1.1.0" - -"astral-regex@^2.0.0": - "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - "version" "2.0.0" - -"balanced-match@^1.0.0": - "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - "version" "1.0.2" - -"binary-extensions@^2.0.0": - "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - "version" "2.2.0" - -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" - dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" - -"braces@^3.0.1", "braces@~3.0.2": - "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" - "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "fill-range" "^7.0.1" - -"browser-stdout@1.3.1": - "integrity" "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" - "version" "1.3.1" - -"buffer-from@^1.0.0": - "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" - "version" "1.1.1" - -"callsites@^3.0.0": - "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - "version" "3.1.0" - -"camelcase@^6.0.0": - "integrity" "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz" - "version" "6.2.0" - -"chai@^4.3.4": - "integrity" "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==" - "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz" - "version" "4.3.4" - dependencies: - "assertion-error" "^1.1.0" - "check-error" "^1.0.2" - "deep-eql" "^3.0.1" - "get-func-name" "^2.0.0" - "pathval" "^1.1.1" - "type-detect" "^4.0.5" - -"chalk@^2.0.0": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^4.0.0": - "integrity" "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"check-error@^1.0.2": - "integrity" "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" - "resolved" "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" - "version" "1.0.2" - -"chokidar@3.5.1": - "integrity" "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" - "version" "3.5.1" - dependencies: - "anymatch" "~3.1.1" - "braces" "~3.0.2" - "glob-parent" "~5.1.0" - "is-binary-path" "~2.1.0" - "is-glob" "~4.0.1" - "normalize-path" "~3.0.0" - "readdirp" "~3.5.0" + version "1.1.2" + resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.6.2" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" + integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@4.1.1, ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +chai@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz" + integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + +chokidar@3.5.1: + version "3.5.1" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" optionalDependencies: - "fsevents" "~2.3.1" + fsevents "~2.3.1" -"cliui@^7.0.2": - "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - "version" "7.0.4" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: - "string-width" "^4.2.0" - "strip-ansi" "^6.0.0" - "wrap-ansi" "^7.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" -"color-convert@^1.9.0": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" - -"color-convert@^2.0.1": - "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - "version" "2.0.1" +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: - "color-name" "~1.1.4" - -"color-name@~1.1.4": - "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - "version" "1.1.4" - -"color-name@1.1.3": - "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - "version" "1.1.3" - -"concat-map@0.0.1": - "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" - -"create-require@^1.1.0": - "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - "version" "1.1.1" - -"cross-spawn@^7.0.2": - "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - "version" "7.0.3" - dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" - -"debug@^4.0.1", "debug@^4.1.1", "debug@^4.3.1": - "integrity" "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" - "version" "4.3.2" - dependencies: - "ms" "2.1.2" - -"debug@4.3.1": - "integrity" "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" - "version" "4.3.1" - dependencies: - "ms" "2.1.2" - -"decamelize@^4.0.0": - "integrity" "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" - "version" "4.0.0" - -"deep-eql@^3.0.1": - "integrity" "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==" - "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "type-detect" "^4.0.0" - -"deep-is@^0.1.3": - "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - "version" "0.1.3" - -"diff@^4.0.1": - "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - "version" "4.0.2" - -"diff@5.0.0": - "integrity" "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" - "resolved" "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" - "version" "5.0.0" - -"dir-glob@^3.0.1": - "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" - "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "path-type" "^4.0.0" - -"doctrine@^3.0.0": - "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "esutils" "^2.0.2" - -"emoji-regex@^8.0.0": - "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - "version" "8.0.0" - -"enquirer@^2.3.5": - "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" - "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - "version" "2.3.6" - dependencies: - "ansi-colors" "^4.1.1" - -"escalade@^3.1.1": - "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - "version" "3.1.1" - -"escape-string-regexp@^1.0.5": - "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"escape-string-regexp@^4.0.0", "escape-string-regexp@4.0.0": - "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - "version" "4.0.0" - -"eslint-config-prettier@^8.3.0": - "integrity" "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==" - "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz" - "version" "8.3.0" - -"eslint-scope@^5.1.1": - "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^4.1.1" + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@4.3.1: + version "4.3.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: + version "4.3.2" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" -"eslint-utils@^2.1.0": - "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==" - "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" - "version" "2.1.0" +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: - "eslint-visitor-keys" "^1.1.0" - -"eslint-utils@^3.0.0": - "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" - "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - "version" "3.0.0" + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: - "eslint-visitor-keys" "^2.0.0" - -"eslint-visitor-keys@^1.1.0": - "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - "version" "1.3.0" - -"eslint-visitor-keys@^1.3.0": - "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - "version" "1.3.0" + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -"eslint-visitor-keys@^2.0.0": - "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - "version" "2.1.0" +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -"eslint@*", "eslint@^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@^7.30.0", "eslint@>=5", "eslint@>=7.0.0": - "integrity" "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz" - "version" "7.31.0" +eslint@^7.30.0: + version "7.31.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz" + integrity sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA== dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.3" "@humanwhocodes/config-array" "^0.5.0" - "ajv" "^6.10.0" - "chalk" "^4.0.0" - "cross-spawn" "^7.0.2" - "debug" "^4.0.1" - "doctrine" "^3.0.0" - "enquirer" "^2.3.5" - "escape-string-regexp" "^4.0.0" - "eslint-scope" "^5.1.1" - "eslint-utils" "^2.1.0" - "eslint-visitor-keys" "^2.0.0" - "espree" "^7.3.1" - "esquery" "^1.4.0" - "esutils" "^2.0.2" - "fast-deep-equal" "^3.1.3" - "file-entry-cache" "^6.0.1" - "functional-red-black-tree" "^1.0.1" - "glob-parent" "^5.1.2" - "globals" "^13.6.0" - "ignore" "^4.0.6" - "import-fresh" "^3.0.0" - "imurmurhash" "^0.1.4" - "is-glob" "^4.0.0" - "js-yaml" "^3.13.1" - "json-stable-stringify-without-jsonify" "^1.0.1" - "levn" "^0.4.1" - "lodash.merge" "^4.6.2" - "minimatch" "^3.0.4" - "natural-compare" "^1.4.0" - "optionator" "^0.9.1" - "progress" "^2.0.0" - "regexpp" "^3.1.0" - "semver" "^7.2.1" - "strip-ansi" "^6.0.0" - "strip-json-comments" "^3.1.0" - "table" "^6.0.9" - "text-table" "^0.2.0" - "v8-compile-cache" "^2.0.3" - -"espree@^7.3.0", "espree@^7.3.1": - "integrity" "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==" - "resolved" "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" - "version" "7.3.1" - dependencies: - "acorn" "^7.4.0" - "acorn-jsx" "^5.3.1" - "eslint-visitor-keys" "^1.3.0" - -"esprima@^4.0.0": - "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - "version" "4.0.1" - -"esquery@^1.4.0": - "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" - "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "estraverse" "^5.1.0" - -"esrecurse@^4.3.0": - "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" - "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "estraverse" "^5.2.0" - -"estraverse@^4.1.1": - "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - "version" "4.3.0" - -"estraverse@^5.1.0": - "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - "version" "5.2.0" - -"estraverse@^5.2.0": - "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - "version" "5.2.0" - -"esutils@^2.0.2": - "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - "version" "2.0.3" - -"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": - "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - "version" "3.1.3" - -"fast-glob@^3.1.1": - "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" - "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" - "version" "3.2.7" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.1.1: + version "3.2.7" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - "glob-parent" "^5.1.2" - "merge2" "^1.3.0" - "micromatch" "^4.0.4" - -"fast-json-stable-stringify@^2.0.0": - "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - "version" "2.1.0" - -"fast-levenshtein@^2.0.6": - "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - "version" "2.0.6" - -"fastq@^1.6.0": - "integrity" "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==" - "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz" - "version" "1.11.1" - dependencies: - "reusify" "^1.0.4" - -"file-entry-cache@^6.0.1": - "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" - "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "flat-cache" "^3.0.4" - -"fill-range@^7.0.1": - "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "to-regex-range" "^5.0.1" - -"find-up@5.0.0": - "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "locate-path" "^6.0.0" - "path-exists" "^4.0.0" - -"flat-cache@^3.0.4": - "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" - "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "flatted" "^3.1.0" - "rimraf" "^3.0.2" - -"flat@^5.0.2": - "integrity" "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" - "resolved" "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" - "version" "5.0.2" - -"flatted@^3.1.0": - "integrity" "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==" - "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz" - "version" "3.2.1" - -"fs.realpath@^1.0.0": - "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" - -"fsevents@~2.3.1": - "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" - "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - "version" "2.3.2" - -"functional-red-black-tree@^1.0.1": - "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - "version" "1.0.1" - -"get-caller-file@^2.0.5": - "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - "version" "2.0.5" - -"get-func-name@^2.0.0": - "integrity" "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" - "resolved" "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" - "version" "2.0.0" - -"glob-parent@^5.1.2", "glob-parent@~5.1.0": - "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "is-glob" "^4.0.1" - -"glob@^7.1.3", "glob@7.1.6": - "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - "version" "7.1.6" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"globals@^13.6.0", "globals@^13.9.0": - "integrity" "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz" - "version" "13.10.0" - dependencies: - "type-fest" "^0.20.2" - -"globby@^11.0.3", "globby@^11.0.4": - "integrity" "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==" - "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" - "version" "11.0.4" - dependencies: - "array-union" "^2.1.0" - "dir-glob" "^3.0.1" - "fast-glob" "^3.1.1" - "ignore" "^5.1.4" - "merge2" "^1.3.0" - "slash" "^3.0.0" - -"growl@1.10.5": - "integrity" "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" - "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" - "version" "1.10.5" - -"has-flag@^3.0.0": - "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - "version" "3.0.0" - -"has-flag@^4.0.0": - "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - "version" "4.0.0" - -"he@1.2.0": - "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" - "version" "1.2.0" - -"ignore@^4.0.6": - "integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" - "version" "4.0.6" - -"ignore@^5.1.4": - "integrity" "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" - "version" "5.1.8" - -"import-fresh@^3.0.0", "import-fresh@^3.2.1": - "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" - "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "parent-module" "^1.0.0" - "resolve-from" "^4.0.0" - -"imurmurhash@^0.1.4": - "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - "version" "0.1.4" - -"inflight@^1.0.4": - "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "once" "^1.3.0" - "wrappy" "1" - -"inherits@2": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" - -"ini@^1.3.8": - "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - "version" "1.3.8" - -"is-binary-path@~2.1.0": - "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" - "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "binary-extensions" "^2.0.0" - -"is-extglob@^2.1.1": - "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - "version" "2.1.1" - -"is-fullwidth-code-point@^2.0.0": - "integrity" "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - "version" "2.0.0" - -"is-fullwidth-code-point@^3.0.0": - "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - "version" "3.0.0" - -"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@~4.0.1": - "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "is-extglob" "^2.1.1" - -"is-number@^7.0.0": - "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - "version" "7.0.0" - -"is-plain-obj@^2.1.0": - "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" - "version" "2.1.0" - -"isexe@^2.0.0": - "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" - -"js-tokens@^4.0.0": - "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - "version" "4.0.0" - -"js-yaml@^3.13.1": - "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - "version" "3.14.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"js-yaml@4.0.0": - "integrity" "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "argparse" "^2.0.1" - -"json-schema-traverse@^0.4.1": - "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - "version" "0.4.1" - -"json-schema-traverse@^1.0.0": - "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - "version" "1.0.0" - -"json-stable-stringify-without-jsonify@^1.0.1": - "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - "version" "1.0.1" - -"levn@^0.4.1": - "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "prelude-ls" "^1.2.1" - "type-check" "~0.4.0" - -"locate-path@^6.0.0": - "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "p-locate" "^5.0.0" - -"lodash.clonedeep@^4.5.0": - "integrity" "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - "resolved" "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" - "version" "4.5.0" - -"lodash.merge@^4.6.2": - "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - "version" "4.6.2" - -"lodash.truncate@^4.4.2": - "integrity" "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" - "resolved" "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" - "version" "4.4.2" - -"lodash@^4.17.21": - "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - "version" "4.17.21" - -"log-symbols@4.0.0": - "integrity" "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==" - "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "chalk" "^4.0.0" - -"lru-cache@^6.0.0": - "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "yallist" "^4.0.0" - -"make-error@^1.1.1": - "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - "version" "1.3.6" - -"merge2@^1.3.0": - "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - "version" "1.4.1" - -"micromatch@^4.0.4": - "integrity" "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "braces" "^3.0.1" - "picomatch" "^2.2.3" - -"minimatch@^3.0.4", "minimatch@3.0.4": - "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "brace-expansion" "^1.1.7" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.11.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz" + integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.1.0: + version "3.2.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz" + integrity sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + +glob-parent@^5.1.2, glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.6, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.6.0, globals@^13.9.0: + version "13.10.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz" + integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.3, globby@^11.0.4: + version "11.0.4" + resolved "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +he@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.8: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + 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== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" -"mocha@^8.4.0": - "integrity" "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==" - "resolved" "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz" - "version" "8.4.0" +mocha@^8.4.0: + version "8.4.0" + resolved "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz" + integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ== dependencies: "@ungap/promise-all-settled" "1.1.2" - "ansi-colors" "4.1.1" - "browser-stdout" "1.3.1" - "chokidar" "3.5.1" - "debug" "4.3.1" - "diff" "5.0.0" - "escape-string-regexp" "4.0.0" - "find-up" "5.0.0" - "glob" "7.1.6" - "growl" "1.10.5" - "he" "1.2.0" - "js-yaml" "4.0.0" - "log-symbols" "4.0.0" - "minimatch" "3.0.4" - "ms" "2.1.3" - "nanoid" "3.1.20" - "serialize-javascript" "5.0.1" - "strip-json-comments" "3.1.1" - "supports-color" "8.1.1" - "which" "2.0.2" - "wide-align" "1.1.3" - "workerpool" "6.1.0" - "yargs" "16.2.0" - "yargs-parser" "20.2.4" - "yargs-unparser" "2.0.0" - -"ms@2.1.2": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" - -"ms@2.1.3": - "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - "version" "2.1.3" - -"nanoid@3.1.20": - "integrity" "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" - "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz" - "version" "3.1.20" - -"natural-compare@^1.4.0": - "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - "version" "1.4.0" - -"normalize-path@^3.0.0", "normalize-path@~3.0.0": - "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - "version" "3.0.0" - -"once@^1.3.0": - "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "wrappy" "1" - -"optionator@^0.9.1": - "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - "version" "0.9.1" - dependencies: - "deep-is" "^0.1.3" - "fast-levenshtein" "^2.0.6" - "levn" "^0.4.1" - "prelude-ls" "^1.2.1" - "type-check" "^0.4.0" - "word-wrap" "^1.2.3" - -"p-limit@^3.0.2": - "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "yocto-queue" "^0.1.0" - -"p-locate@^5.0.0": - "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "p-limit" "^3.0.2" - -"parent-module@^1.0.0": - "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" - "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "callsites" "^3.0.0" - -"path-exists@^4.0.0": - "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - "version" "4.0.0" - -"path-is-absolute@^1.0.0": - "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" - -"path-key@^3.1.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-type@^4.0.0": - "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - "version" "4.0.0" - -"pathval@^1.1.1": - "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" - "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" - "version" "1.1.1" - -"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3": - "integrity" "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" - "version" "2.3.0" - -"prelude-ls@^1.2.1": - "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - "version" "1.2.1" - -"progress@^2.0.0": - "integrity" "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - "resolved" "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - "version" "2.0.3" - -"punycode@^2.1.0": - "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - "version" "2.1.1" - -"queue-microtask@^1.2.2": - "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - "version" "1.2.3" - -"randombytes@^2.1.0": - "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" - "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "safe-buffer" "^5.1.0" - -"readdirp@~3.5.0": - "integrity" "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" - "version" "3.5.0" - dependencies: - "picomatch" "^2.2.1" - -"regexpp@^3.1.0": - "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - "version" "3.2.0" - -"require-directory@^2.1.1": - "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - "version" "2.1.1" - -"require-from-string@^2.0.2": - "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - "version" "2.0.2" - -"resolve-from@^4.0.0": - "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - "version" "4.0.0" - -"reusify@^1.0.4": - "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - "version" "1.0.4" - -"rimraf@^3.0.2": - "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "glob" "^7.1.3" - -"run-parallel@^1.1.9": - "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" - "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "queue-microtask" "^1.2.2" - -"safe-buffer@^5.1.0": - "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - "version" "5.2.1" - -"semver@^7.2.1", "semver@^7.3.5": - "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - "version" "7.3.5" - dependencies: - "lru-cache" "^6.0.0" - -"serialize-javascript@5.0.1": - "integrity" "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==" - "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "randombytes" "^2.1.0" - -"shebang-command@^2.0.0": - "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "shebang-regex" "^3.0.0" - -"shebang-regex@^3.0.0": - "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - "version" "3.0.0" - -"slash@^3.0.0": - "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - "version" "3.0.0" - -"slice-ansi@^4.0.0": - "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - "version" "4.0.0" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.6" + growl "1.10.5" + he "1.2.0" + js-yaml "4.0.0" + log-symbols "4.0.0" + minimatch "3.0.4" + ms "2.1.3" + nanoid "3.1.20" + serialize-javascript "5.0.1" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + wide-align "1.1.3" + workerpool "6.1.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@3.1.20: + version "3.1.20" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +semver@^7.2.1, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" -"source-map-support@^0.5.17": - "integrity" "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==" - "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" - "version" "0.5.19" +source-map-support@^0.5.17: + version "0.5.19" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: - "buffer-from" "^1.0.0" - "source-map" "^0.6.0" + buffer-from "^1.0.0" + source-map "^0.6.0" -"source-map@^0.6.0": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -"sprintf-js@~1.0.2": - "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - "version" "1.0.3" +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= "string-width@^1.0.2 || 2": - "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^4.0.0" - -"string-width@^4.1.0", "string-width@^4.2.0": - "integrity" "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" - "version" "4.2.2" - dependencies: - "emoji-regex" "^8.0.0" - "is-fullwidth-code-point" "^3.0.0" - "strip-ansi" "^6.0.0" - -"strip-ansi@^4.0.0": - "integrity" "sha1-qEeQIusaw2iocTibY1JixQXuNo8=" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-regex" "^3.0.0" - -"strip-ansi@^6.0.0": - "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "ansi-regex" "^5.0.0" - -"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1", "strip-json-comments@3.1.1": - "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - "version" "3.1.1" - -"supports-color@^5.3.0": - "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - "version" "5.5.0" - dependencies: - "has-flag" "^3.0.0" - -"supports-color@^7.1.0": - "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "has-flag" "^4.0.0" - -"supports-color@8.1.1": - "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - "version" "8.1.1" - dependencies: - "has-flag" "^4.0.0" - -"table@^6.0.9": - "integrity" "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==" - "resolved" "https://registry.npmjs.org/table/-/table-6.7.1.tgz" - "version" "6.7.1" - dependencies: - "ajv" "^8.0.1" - "lodash.clonedeep" "^4.5.0" - "lodash.truncate" "^4.4.2" - "slice-ansi" "^4.0.0" - "string-width" "^4.2.0" - "strip-ansi" "^6.0.0" - -"text-table@^0.2.0": - "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - "version" "0.2.0" - -"to-regex-range@^5.0.1": - "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "is-number" "^7.0.0" - -"ts-node@^9.1.1": - "integrity" "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==" - "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz" - "version" "9.1.1" - dependencies: - "arg" "^4.1.0" - "create-require" "^1.1.0" - "diff" "^4.0.1" - "make-error" "^1.1.1" - "source-map-support" "^0.5.17" - "yn" "3.1.1" - -"tslib@^1.8.1": - "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - "version" "1.14.1" - -"tsutils@^3.21.0": - "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" - "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - "version" "3.21.0" - dependencies: - "tslib" "^1.8.1" - -"type-check@^0.4.0", "type-check@~0.4.0": - "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - "version" "0.4.0" - dependencies: - "prelude-ls" "^1.2.1" - -"type-detect@^4.0.0", "type-detect@^4.0.5": - "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - "version" "4.0.8" - -"type-fest@^0.20.2": - "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - "version" "0.20.2" - -"typescript@^4.3.5", "typescript@>=2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": - "integrity" "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==" - "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz" - "version" "4.3.5" - -"uri-js@^4.2.2": - "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" - "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - "version" "4.4.1" - dependencies: - "punycode" "^2.1.0" - -"v8-compile-cache@^2.0.3": - "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - "version" "2.3.0" - -"vscode-jsonrpc@6.0.0": - "integrity" "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" - "resolved" "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz" - "version" "6.0.0" - -"vscode-languageserver-protocol@3.16.0": - "integrity" "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==" - "resolved" "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz" - "version" "3.16.0" - dependencies: - "vscode-jsonrpc" "6.0.0" - "vscode-languageserver-types" "3.16.0" - -"vscode-languageserver-textdocument@^1.0.1": - "integrity" "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" - "resolved" "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz" - "version" "1.0.1" - -"vscode-languageserver-types@3.16.0": - "integrity" "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - "resolved" "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz" - "version" "3.16.0" - -"vscode-languageserver@^7.0.0": - "integrity" "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==" - "resolved" "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "vscode-languageserver-protocol" "3.16.0" - -"which@^2.0.1", "which@2.0.2": - "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "isexe" "^2.0.0" - -"wide-align@1.1.3": - "integrity" "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==" - "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "string-width" "^1.0.2 || 2" - -"word-wrap@^1.2.3": - "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - "version" "1.2.3" - -"workerpool@6.1.0": - "integrity" "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" - "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz" - "version" "6.1.0" - -"wrap-ansi@^7.0.0": - "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - -"wrappy@1": - "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" - -"y18n@^5.0.5": - "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - "version" "5.0.8" - -"yallist@^4.0.0": - "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - "version" "4.0.0" - -"yaml@^1.10.2": - "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - "version" "1.10.2" - -"yargs-parser@^20.2.2", "yargs-parser@20.2.4": - "integrity" "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" - "version" "20.2.4" - -"yargs-unparser@2.0.0": - "integrity" "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==" - "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "camelcase" "^6.0.0" - "decamelize" "^4.0.0" - "flat" "^5.0.2" - "is-plain-obj" "^2.1.0" - -"yargs@16.2.0": - "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - "version" "16.2.0" - dependencies: - "cliui" "^7.0.2" - "escalade" "^3.1.1" - "get-caller-file" "^2.0.5" - "require-directory" "^2.1.1" - "string-width" "^4.2.0" - "y18n" "^5.0.5" - "yargs-parser" "^20.2.2" - -"yn@3.1.1": - "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" - "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - "version" "3.1.1" - -"yocto-queue@^0.1.0": - "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - "version" "0.1.0" + version "2.1.1" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +table@^6.0.9: + version "6.7.1" + resolved "https://registry.npmjs.org/table/-/table-6.7.1.tgz" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-node@^9.1.1: + version "9.1.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz" + integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== + dependencies: + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typescript@^4.3.5: + version "4.3.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz" + integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +vscode-jsonrpc@6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz" + integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== + +vscode-languageserver-protocol@3.16.0: + version "3.16.0" + resolved "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz" + integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== + dependencies: + vscode-jsonrpc "6.0.0" + vscode-languageserver-types "3.16.0" + +vscode-languageserver-textdocument@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz" + integrity sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA== + +vscode-languageserver-types@3.16.0: + version "3.16.0" + resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz" + integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== + +vscode-languageserver@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz" + integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw== + dependencies: + vscode-languageserver-protocol "3.16.0" + +vscode-uri@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.2.tgz#ecfd1d066cb8ef4c3a208decdbab9a8c23d055d0" + integrity sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA== + +which@2.0.2, which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +workerpool@6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz" + integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@20.2.4, yargs-parser@^20.2.2: + version "20.2.4" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 0cfa353349e4b0d01fd306bd277d29c71ddd39fc Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Fri, 10 Sep 2021 20:31:47 +0200 Subject: [PATCH 083/558] Improve how Git treats changelog and locks in diffs (#12) --- .gitattributes | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 13bc9c2ee..2defd70bf 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,9 @@ # Set default behavior to automatically normalize line endings. -* text=auto +* text=auto +CHANGELOG.md merge=union + +*.lock text -diff +package.json text eol=lf +package-lock.json text -diff +yarn.lock text -diff From 5fe20f908631477ba85abc12e25030be57fbd34f Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Mon, 13 Sep 2021 15:49:09 +0200 Subject: [PATCH 084/558] Move the package under the `@ansible` scope (#10) The new package name is `@ansible/ansible-language-server`. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4fc853bff..bbdc1c7a8 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "ansible-language-server", + "name": "@ansible/ansible-language-server", "publisher": "RedHat Inc.", "displayName": "Ansible", "description": "Ansible language server", From 5b19a73987e8b9d397458cf8c605add0dc61791d Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 16 Sep 2021 04:56:17 +0200 Subject: [PATCH 085/558] Fix path to the YAML fixtures in tests (#19) --- test/utils/yaml.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/utils/yaml.test.ts b/test/utils/yaml.test.ts index b9dbac246..99d2c3bf1 100644 --- a/test/utils/yaml.test.ts +++ b/test/utils/yaml.test.ts @@ -16,7 +16,7 @@ import { async function getYamlDoc(yamlFile: string) { const yaml = await fs.readFile( - path.resolve('server', 'src', 'test', 'data', 'utils', 'yaml', yamlFile), + path.resolve('test', 'data', 'utils', 'yaml', yamlFile), { encoding: 'utf8', } From cdd882fc63b7d77e8a3c1d31c127a06c3b5fa82a Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 16 Sep 2021 10:16:00 +0100 Subject: [PATCH 086/558] chore: remove yarn (#22) --- .gitattributes | 1 - README.md | 4 +- package.json | 1 - yarn.lock | 1518 ------------------------------------------------ 4 files changed, 2 insertions(+), 1522 deletions(-) delete mode 100644 yarn.lock diff --git a/.gitattributes b/.gitattributes index 2defd70bf..212588163 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,4 +6,3 @@ CHANGELOG.md merge=union *.lock text -diff package.json text eol=lf package-lock.json text -diff -yarn.lock text -diff diff --git a/README.md b/README.md index c0b163f55..12e700fd3 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,12 @@ This language server adds support for Ansible. 3. Install the dependencies ```bash cd ansible-language-server - $ yarn install + $ npm ci ``` 4. Build the language server ```bash - $ yarn run build + $ npm run compile ``` 5. The new built server is now located in ./out/server/src/server.js. diff --git a/package.json b/package.json index bbdc1c7a8..cc42dc81f 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,6 @@ "compile": "tsc -p .", "watch": "tsc --watch -p .", "test": "mocha --require ts-node/register './test/**/*.ts'", - "build": "yarn clean && yarn compile", "check-dependencies": "node ./scripts/check-dependencies.js" }, "all": true diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 22a9e87d8..000000000 --- a/yarn.lock +++ /dev/null @@ -1,1518 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.8" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz" - integrity sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow== - -"@babel/highlight@^7.10.4": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@flatten-js/interval-tree@^1.0.14": - version "1.0.14" - resolved "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz" - integrity sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg== - -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@types/chai@^4.2.21": - version "4.2.21" - resolved "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz" - integrity sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg== - -"@types/ini@^1.3.30": - version "1.3.30" - resolved "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz" - integrity sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ== - -"@types/json-schema@^7.0.7": - version "7.0.8" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz" - integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== - -"@types/lodash@^4.14.171": - version "4.14.171" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz" - integrity sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg== - -"@types/mocha@^8.2.3": - version "8.2.3" - resolved "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz" - integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== - -"@types/node@^14.17.5": - version "14.17.6" - resolved "https://registry.npmjs.org/@types/node/-/node-14.17.6.tgz" - integrity sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ== - -"@types/vscode@^1.56.0": - version "1.58.1" - resolved "https://registry.npmjs.org/@types/vscode/-/vscode-1.58.1.tgz" - integrity sha512-sa76rDXiSif09he8KoaWWUQxsuBr2+uND0xn1GUbEODkuEjp2p7Rqd3t5qlvklfmAedLFdL7MdnsPa57uzwcOw== - -"@typescript-eslint/eslint-plugin@^4.28.3": - version "4.28.5" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz" - integrity sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q== - dependencies: - "@typescript-eslint/experimental-utils" "4.28.5" - "@typescript-eslint/scope-manager" "4.28.5" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - regexpp "^3.1.0" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/experimental-utils@4.28.5": - version "4.28.5" - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz" - integrity sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.28.5" - "@typescript-eslint/types" "4.28.5" - "@typescript-eslint/typescript-estree" "4.28.5" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/parser@^4.28.3": - version "4.28.5" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.5.tgz" - integrity sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw== - dependencies: - "@typescript-eslint/scope-manager" "4.28.5" - "@typescript-eslint/types" "4.28.5" - "@typescript-eslint/typescript-estree" "4.28.5" - debug "^4.3.1" - -"@typescript-eslint/scope-manager@4.28.5": - version "4.28.5" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz" - integrity sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ== - dependencies: - "@typescript-eslint/types" "4.28.5" - "@typescript-eslint/visitor-keys" "4.28.5" - -"@typescript-eslint/types@4.28.5": - version "4.28.5" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.5.tgz" - integrity sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA== - -"@typescript-eslint/typescript-estree@4.28.5": - version "4.28.5" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz" - integrity sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw== - dependencies: - "@typescript-eslint/types" "4.28.5" - "@typescript-eslint/visitor-keys" "4.28.5" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/visitor-keys@4.28.5": - version "4.28.5" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz" - integrity sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg== - dependencies: - "@typescript-eslint/types" "4.28.5" - eslint-visitor-keys "^2.0.0" - -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - -acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.6.2" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" - integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@4.1.1, ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^6.0.0: - version "6.2.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== - -chai@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz" - integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - pathval "^1.1.1" - type-detect "^4.0.5" - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" - integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= - -chokidar@3.5.1: - version "3.5.1" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.3.1" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@4.3.1: - version "4.3.1" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: - version "4.3.2" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - -deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-config-prettier@^8.3.0: - version "8.3.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint@^7.30.0: - version "7.31.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz" - integrity sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.1.1: - version "3.2.7" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.11.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz" - integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== - dependencies: - reusify "^1.0.4" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.1.0: - version "3.2.1" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz" - integrity sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.1: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" - integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= - -glob-parent@^5.1.2, glob-parent@~5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.1.6, glob@^7.1.3: - version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^13.6.0, globals@^13.9.0: - version "13.10.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz" - integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.3, globby@^11.0.4: - version "11.0.4" - resolved "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -he@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.8: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - 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== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz" - integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz" - integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== - dependencies: - chalk "^4.0.0" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -minimatch@3.0.4, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -mocha@^8.4.0: - version "8.4.0" - resolved "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz" - integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.1" - debug "4.3.1" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.1.6" - growl "1.10.5" - he "1.2.0" - js-yaml "4.0.0" - log-symbols "4.0.0" - minimatch "3.0.4" - ms "2.1.3" - nanoid "3.1.20" - serialize-javascript "5.0.1" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - wide-align "1.1.3" - workerpool "6.1.0" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nanoid@3.1.20: - version "3.1.20" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz" - integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -semver@^7.2.1, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== - dependencies: - randombytes "^2.1.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -source-map-support@^0.5.17: - version "0.5.19" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -table@^6.0.9: - version "6.7.1" - resolved "https://registry.npmjs.org/table/-/table-6.7.1.tgz" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -ts-node@^9.1.1: - version "9.1.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz" - integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== - dependencies: - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -typescript@^4.3.5: - version "4.3.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -vscode-jsonrpc@6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz" - integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== - -vscode-languageserver-protocol@3.16.0: - version "3.16.0" - resolved "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz" - integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== - dependencies: - vscode-jsonrpc "6.0.0" - vscode-languageserver-types "3.16.0" - -vscode-languageserver-textdocument@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz" - integrity sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA== - -vscode-languageserver-types@3.16.0: - version "3.16.0" - resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz" - integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== - -vscode-languageserver@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz" - integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw== - dependencies: - vscode-languageserver-protocol "3.16.0" - -vscode-uri@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.2.tgz#ecfd1d066cb8ef4c3a208decdbab9a8c23d055d0" - integrity sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA== - -which@2.0.2, which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -workerpool@6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz" - integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@20.2.4, yargs-parser@^20.2.2: - version "20.2.4" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From ea8bffefe346b1105144643ca2a68f94fb8f14f6 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 16 Sep 2021 11:51:54 +0100 Subject: [PATCH 087/558] doc: mention users of this project (#24) --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 12e700fd3..d2408dda8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # Ansible Language Server -This language server adds support for Ansible. +This language server adds support for Ansible and is currently used by the +following projects: + +* [Ansible extension for vscode/codium](https://github.com/ansible/vscode-ansible) +* [Ansible extension for coc.nvim](https://github.com/yaegassy/coc-ansible) ### Getting started From 1514f0fee1ba454c0cdc70473ae419dfe86a4fa5 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 16 Sep 2021 14:37:52 +0100 Subject: [PATCH 088/558] chore: enforce npm and node requirements (#23) --- .npmrc | 3 +++ package.json | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..120c13be5 --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +engine-strict=true +fund=false +package-lock=true diff --git a/package.json b/package.json index cc42dc81f..bf34d75a1 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ }, "icon": "icon.png", "engines": { - "node": "*" + "node": ">=12.0", + "npm": ">=7.11.2" }, "bin": { "ansible-language-server": "./bin/ansible-language-server" From 43b390f231be6f7034d5c4aff4b7487f845bda3e Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 16 Sep 2021 16:20:30 +0100 Subject: [PATCH 089/558] fix: correct package-lock.json (#25) --- package-lock.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 3f0beedeb..3cbd29278 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,10 +1,11 @@ { - "name": "ansible-language-server", + "name": "@ansible/ansible-language-server", "version": "0.1.1-0", "lockfileVersion": 2, "requires": true, "packages": { "": { + "name": "@ansible/ansible-language-server", "version": "0.1.1-0", "license": "MIT", "dependencies": { @@ -14,6 +15,7 @@ "lodash": "^4.17.21", "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.1", + "vscode-uri": "^3.0.2", "yaml": "^1.10.2" }, "bin": { @@ -2386,6 +2388,11 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, + "node_modules/vscode-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.2.tgz", + "integrity": "sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4282,6 +4289,11 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, + "vscode-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.2.tgz", + "integrity": "sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==" + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", From 2b306eb08391314b5640ff4e9a854a2221496690 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 16 Sep 2021 19:38:49 +0200 Subject: [PATCH 090/558] Add initial GHA setup This patch brings simple initial pipelines in the realm of GitHub Actions CI/CD workflows. It is not perfect but better than nothing. Currently, a part of the tests is failing under Windows but all of them pass under GNU/Linux (Ubuntu) and macOS. Among other caveats: the deps are installed with `npm i` because the lockfile is out-of-sync. This needs to be addressed separately and replaced by an invocation of `npm ci`. And also, another imperfection is that the testing is performed against a non-packaged source. It is best to run tests against an installed copy of the software to make sure that it is packaged properly and contains all the necessary files (some may be excluded from the tarball), ensuring that the users will get what's tested. Things to explore in the future: * https://stackoverflow.com/a/50222427/595220 * https://medium.com/pnpm/never-ever-forget-to-install-a-dependency-1c39dd3bbb37 * https://github.com/zkochan/package-preview * Combining the use of manual unpacking of the tarball, copying tests into place and producing `npm shrinkwrap` I've spent countless hours trying to making this work but had to stop now. I hope that one day, it'll be possible to make this work properly. PR #18 --- .github/workflows/ci.yml | 138 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..6cf5d189d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,138 @@ +--- +name: CI + +on: + pull_request: + push: + +jobs: + build: + name: Build + + runs-on: Ubuntu-latest + + steps: + - name: Fetch the src + uses: actions/checkout@v2 + - name: >- + Set up NodeJS ${{ matrix.node-version }} + with the global NPM registry + uses: actions/setup-node@v2 + + - name: Build a package tarball artifact + run: npm pack + + - name: Save the package tarball as a GHA artifact + uses: actions/upload-artifact@v2 + with: + name: npm-package-tarball + path: >- + ansible-ansible-language-server-*.tgz + + test: + needs: + - build + + runs-on: ${{ matrix.os }}-latest + + strategy: + matrix: + experimental: + - false + node-version: + - 16.x + - 14.x + - 12.x + os: + - Ubuntu + - macOS + include: + - experimental: true + node-version: 16 + os: Windows + - experimental: true + node-version: 12 + os: Windows + + continue-on-error: ${{ matrix.experimental }} + + steps: + - name: Fetch the GHA artifact with the package tarball + uses: actions/download-artifact@v2 + with: + name: npm-package-tarball + - name: >- + Set up NodeJS ${{ matrix.node-version }} + with the global NPM registry + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + registry-url: https://registry.npmjs.org + - name: Install the package + run: npm install -g ansible-ansible-language-server-*.tgz + shell: bash + - name: Uninstall the package + run: npm uninstall -g @ansible/ansible-language-server + shell: bash + + - name: Clean up the checkout + run: rm -rfv * + shell: bash + + - name: Fetch the src snapshot + uses: actions/checkout@v2 + with: + fetch-depth: 1 + + - name: Populate the test dependencies + run: npm ci + - name: Run testing against the Git checkout + run: npm test + + publish: + environment: release + needs: + - test + + runs-on: Ubuntu-latest + + strategy: + matrix: + node-version: + - 16.x + + steps: + - name: Fetch the GHA artifact with the package tarball + uses: actions/upload-artifact@v2 + with: + name: npm-package-tarball + path: . + + - name: >- + Set up NodeJS ${{ matrix.node-version }} + with the global NPM registry + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + registry-url: https://registry.npmjs.org + - name: >- + Publish the prebuilt and tested package + to public NPM Registry + run: npm publish ansible-ansible-language-server-*.tgz + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: >- + Set up NodeJS ${{ matrix.node-version }} + with the GitHub Packages NPM registry + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + registry-url: https://npm.pkg.github.com + - name: >- + Publish the prebuilt and tested package + to GitHub Packages NPM Registry + run: npm publish ansible-ansible-language-server-*.tgz + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} +... From 2fcff0711545480f4b06f7699bd59227603e660f Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 17 Sep 2021 10:54:42 +0100 Subject: [PATCH 091/558] chore: add minimal linting (#33) - adds pre-commit config with a basic set of checks - fixes reported whitespace issues - adds ci job to prevent regression - follows the setup used by our other projects - some checks were omitted to limit change size small but we will add them in follow-ups. - once merged we will be able to enable `pre-commit.ci` check which can auto-fix incoming PRs if they have auto-fixable problems (for example the ones made here do fit this category) --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/workflows/ci.yml | 15 +++++++++ .pre-commit-config.yaml | 41 ++++++++++++++++++++++++ CHANGELOG.md | 2 +- README.md | 2 +- jinja-language-configuration.json | 2 +- package.json | 1 + test/data/utils/yaml/ancestryBuilder.yml | 7 ++-- 8 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 .pre-commit-config.yaml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 68257f7dd..251f5a540 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -63,7 +63,7 @@ body: render: shell placeholder: | $ ansible --version - ansible [core 2.11.1] + ansible [core 2.11.1] config file = ~/.ansible.cfg configured module search path = ['~/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = ~/venv/ansible4/lib/python3.6/site-packages/ansible diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6cf5d189d..bd18644d6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,21 @@ on: push: jobs: + + lint: + runs-on: Ubuntu-latest + steps: + - name: Fetch the src + uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v2 + - name: Install dependencies + run: | + pipx install pre-commit + npm ci + - name: npm run lint + run: npm run lint + build: name: Build diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..f5ca2f9e1 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,41 @@ +--- +ci: + # format compatible with commitlint + autoupdate_commit_msg: "chore: pre-commit autoupdate" + autoupdate_schedule: monthly + autofix_commit_msg: | + chore: auto fixes from pre-commit.com hooks + + for more information, see https://pre-commit.ci +repos: + - repo: local + hooks: + - id: npm-ci + name: Run 'npm ci' to ensure deps and versions are correct + entry: >- + bash -c 'npm ci --ignore-scripts && + npm version --allow-same-version --no-commit-hooks + --no-git-tag-version $(npm pkg get version | sed "s/\"//g")' + language: node + files: "(package|package-lock).json$" + pass_filenames: false + - id: git-dirty + name: Check if git reports dirty + entry: git diff --exit-code + language: system + pass_filenames: false + always_run: true + - repo: https://github.com/pre-commit/pre-commit-hooks.git + rev: v4.0.1 + hooks: + - id: end-of-file-fixer + exclude: > + (?x)^( + syntaxes/.* + )$ + - id: trailing-whitespace + - id: mixed-line-ending + - id: check-byte-order-marker + - id: check-merge-conflict + - id: debug-statements + language_version: python3 diff --git a/CHANGELOG.md b/CHANGELOG.md index b56200b1d..8d291bd0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.1.0-1] - 2021-07-28 - Update npm package to include out folder -- +- ## [0.1.0] - 2021-07-28 - Initial ansible language server release. Based on the vscode-ansible plugin developed by [Tomasz Maciążek](https://github.com/tomaciazek) diff --git a/README.md b/README.md index d2408dda8..b02fd1a21 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ following projects: 1. Install prerequisites: - latest [Visual Studio Code](https://code.visualstudio.com/) - [Node.js](https://nodejs.org/) v12.0.0 or higher - + 2. Fork and clone this repository 3. Install the dependencies diff --git a/jinja-language-configuration.json b/jinja-language-configuration.json index 027840618..a30c9802c 100644 --- a/jinja-language-configuration.json +++ b/jinja-language-configuration.json @@ -29,4 +29,4 @@ ["\"", "\""], ["'", "'"] ] -} \ No newline at end of file +} diff --git a/package.json b/package.json index bf34d75a1..55722d11d 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "scripts": { "clean": "rimraf out/server && rimraf lib", "compile": "tsc -p .", + "lint": "npm ci && pre-commit run -a", "watch": "tsc --watch -p .", "test": "mocha --require ts-node/register './test/**/*.ts'", "check-dependencies": "node ./scripts/check-dependencies.js" diff --git a/test/data/utils/yaml/ancestryBuilder.yml b/test/data/utils/yaml/ancestryBuilder.yml index 9254f9eb3..b160c580c 100644 --- a/test/data/utils/yaml/ancestryBuilder.yml +++ b/test/data/utils/yaml/ancestryBuilder.yml @@ -4,12 +4,11 @@ - name: Task name lineinfile: path: some/path - + line: line contents - + - name: Task2 name lineinfile: path: some_other/path - + line: line2 contents - \ No newline at end of file From 5eb28a3008c96e173552990ad37226fc032e2c7f Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 17 Sep 2021 13:22:59 +0100 Subject: [PATCH 092/558] Add lint checks for exec bit and json validity (#34) --- .pre-commit-config.yaml | 14 ++++++++++++++ scripts/tsconfig.json | 0 2 files changed, 14 insertions(+) mode change 100755 => 100644 scripts/tsconfig.json diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f5ca2f9e1..52e3516a6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -36,6 +36,20 @@ repos: - id: trailing-whitespace - id: mixed-line-ending - id: check-byte-order-marker + - id: check-executables-have-shebangs - id: check-merge-conflict + - id: check-json + # https://github.com/pre-commit/pre-commit-hooks/issues/395 + exclude: > + (?x)^( + .vscode/.*| + ansible-language-configuration.json| + jinja-language-configuration.json| + scripts/tsconfig.json| + scripts/tsconfig.esm.json| + scripts/tsconfig.umd.json| + tsconfig.json + )$ + - id: debug-statements language_version: python3 diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json old mode 100755 new mode 100644 From 71d759ddc976b45fbd9f47ed9eff3065a47bdf20 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 17 Sep 2021 13:57:22 +0100 Subject: [PATCH 093/558] chore: check syntaxes (#35) Ensure that the generated plist files are in sync with their sources, avoiding accidental changes. --- .github/workflows/ci.yml | 4 ++-- package.json | 2 +- scripts/build-syntaxes | 9 +++++++++ test-requirements.txt | 2 ++ 4 files changed, 14 insertions(+), 3 deletions(-) create mode 100755 scripts/build-syntaxes create mode 100644 test-requirements.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bd18644d6..283b6ebc1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,8 +16,8 @@ jobs: uses: actions/setup-node@v2 - name: Install dependencies run: | - pipx install pre-commit - npm ci + pip3 install -r test-requirements.txt + npm ci - name: npm run lint run: npm run lint diff --git a/package.json b/package.json index 55722d11d..7995730e4 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "scripts": { "clean": "rimraf out/server && rimraf lib", "compile": "tsc -p .", - "lint": "npm ci && pre-commit run -a", + "lint": "npm ci && ./scripts/build-syntaxes && pre-commit run -a", "watch": "tsc --watch -p .", "test": "mocha --require ts-node/register './test/**/*.ts'", "check-dependencies": "node ./scripts/check-dependencies.js" diff --git a/scripts/build-syntaxes b/scripts/build-syntaxes new file mode 100755 index 000000000..1ae9f5449 --- /dev/null +++ b/scripts/build-syntaxes @@ -0,0 +1,9 @@ +#!/bin/bash +set -euo pipefail + +for SRC in syntaxes/ansible/*.plist; do + + DST=$(basename "$(basename "$SRC" .plist)") + python3 syntaxes/plist2xml.py "$SRC" "syntaxes/ansible/generated/$DST" + +done diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 000000000..e7905bedf --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,2 @@ +lxml +pre-commit From 18b2ddc16257d263b77faa3fafa981b01e138d51 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sun, 26 Sep 2021 08:36:35 +0100 Subject: [PATCH 094/558] add eslint execution to linting (#36) While we had eslint configured inside the repository, there was no CI job running it. This change adds eslint as part of our existing lint job (pre-commit). Only two files were automatically reformatted by this change. --- .pre-commit-config.yaml | 19 +++++++++++++++++++ scripts/.eslintrc.js | 10 ++++++++-- scripts/check-dependencies.js | 4 +++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 52e3516a6..a9aac40a7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -53,3 +53,22 @@ repos: - id: debug-statements language_version: python3 + - repo: https://github.com/pre-commit/mirrors-eslint + rev: v7.30.0 + hooks: + - id: eslint + args: + - --fix + - --max-warnings + - "0" + additional_dependencies: + - "@typescript-eslint/eslint-plugin" + - "@typescript-eslint/parser" + - eslint + - eslint-plugin-prettier + - eslint-config-prettier + - prettier + - typescript + - typescript-eslint + files: \.[jt]sx?$ # *.js, *.jsx, *.ts and *.tsx + types: [file] diff --git a/scripts/.eslintrc.js b/scripts/.eslintrc.js index da6258dd6..ba2024c29 100644 --- a/scripts/.eslintrc.js +++ b/scripts/.eslintrc.js @@ -17,9 +17,15 @@ module.exports = { ], rules: { 'prettier/prettier': 'error', - '@typescript-eslint/no-use-before-define': ['error', { functions: false, classes: false }], + '@typescript-eslint/no-use-before-define': [ + 'error', + { functions: false, classes: false }, + ], '@typescript-eslint/no-unused-vars': ['warn'], - '@typescript-eslint/explicit-function-return-type': [1, { allowExpressions: true }], + '@typescript-eslint/explicit-function-return-type': [ + 1, + { allowExpressions: true }, + ], 'eol-last': ['error'], 'space-infix-ops': ['error', { int32Hint: false }], 'no-multi-spaces': ['error', { ignoreEOLComments: true }], diff --git a/scripts/check-dependencies.js b/scripts/check-dependencies.js index f3e90756d..522b3ee3e 100644 --- a/scripts/check-dependencies.js +++ b/scripts/check-dependencies.js @@ -14,7 +14,9 @@ for (const dep in dependencies) { if (Object.prototype.hasOwnProperty.call(dependencies, dep)) { const version = dependencies[dep]; if (version === 'next') { - console.error(`Dependency ${dep} has "${version}" version, please change it to fixed version`); + console.error( + `Dependency ${dep} has "${version}" version, please change it to fixed version` + ); exit(1); } } From d97924fcaca8deffb0eab512de3be6006745fdc4 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 27 Sep 2021 14:53:16 +0100 Subject: [PATCH 095/558] Fix pre-commit.ci job (#41) --- .pre-commit-config.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a9aac40a7..fa206d811 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,6 +7,9 @@ ci: chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci + skip: + # https://github.com/pre-commit-ci/issues/issues/55 + - npm-ci repos: - repo: local hooks: From 278b694d22c23986a1909c24ed4fbca5f16b7832 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Mon, 27 Sep 2021 19:37:13 +0530 Subject: [PATCH 096/558] Update the default settings value for using FQCN (#37) Co-authored-by: Sorin Sbarnea --- src/services/settingsManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index b51e243e4..fd5ecfc29 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -13,7 +13,7 @@ export class SettingsManager { new Map(); private defaultSettings: ExtensionSettings = { - ansible: { path: 'ansible', useFullyQualifiedCollectionNames: false }, + ansible: { path: 'ansible', useFullyQualifiedCollectionNames: true }, ansibleLint: { enabled: true, path: 'ansible-lint', arguments: '' }, python: { interpreterPath: '', activationScript: '' }, }; From 1c7e58c27934d1ddadb3271b007cf811fb16cbd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Tue, 28 Sep 2021 07:23:48 +0200 Subject: [PATCH 097/558] Fix documentation fragment discovery (#40) --- src/interfaces/module.ts | 2 +- src/services/docsLibrary.ts | 4 +- src/utils/docsParser.ts | 88 ++++++++++++++++++++++++------------- 3 files changed, 61 insertions(+), 33 deletions(-) diff --git a/src/interfaces/module.ts b/src/interfaces/module.ts index 5416e16e3..1f0801674 100644 --- a/src/interfaces/module.ts +++ b/src/interfaces/module.ts @@ -22,7 +22,7 @@ export interface IModuleMetadata { namespace: string; collection: string; name: string; - rawDocumentation: Record; + rawDocumentationFragments: Map>; documentation?: IModuleDocumentation; fragments?: IModuleMetadata[]; errors: YAMLError[]; diff --git a/src/services/docsLibrary.ts b/src/services/docsLibrary.ts index 5b14ebe96..6e5ced0b1 100644 --- a/src/services/docsLibrary.ts +++ b/src/services/docsLibrary.ts @@ -129,7 +129,9 @@ export class DocsLibrary { } if (!module.documentation) { // translate raw documentation into a typed structure - module.documentation = processRawDocumentation(module.rawDocumentation); + module.documentation = processRawDocumentation( + module.rawDocumentationFragments + ); } } return [module, hitFqcn]; diff --git a/src/utils/docsParser.ts b/src/utils/docsParser.ts index 21acd8ee3..292569c7e 100644 --- a/src/utils/docsParser.ts +++ b/src/utils/docsParser.ts @@ -16,38 +16,54 @@ import { IPluginTypes, } from '../interfaces/pluginRouting'; +const DOCUMENTATION = 'DOCUMENTATION'; + export function processDocumentationFragments( module: IModuleMetadata, docFragments: Map ): void { module.fragments = []; + const mainDocumentationFragment = + module.rawDocumentationFragments.get(DOCUMENTATION); if ( - hasOwnProperty(module.rawDocumentation, 'extends_documentation_fragment') + mainDocumentationFragment && + hasOwnProperty(mainDocumentationFragment, 'extends_documentation_fragment') ) { - const docFragmentNames = - module.rawDocumentation.extends_documentation_fragment instanceof Array - ? module.rawDocumentation.extends_documentation_fragment - : [module.rawDocumentation.extends_documentation_fragment]; + const docFragmentNames: string[] = + mainDocumentationFragment.extends_documentation_fragment instanceof Array + ? mainDocumentationFragment.extends_documentation_fragment + : [mainDocumentationFragment.extends_documentation_fragment]; const resultContents = {}; for (const docFragmentName of docFragmentNames) { + const fragmentNameArray = docFragmentName.split('.'); + let fragmentPartName: string; + if (fragmentNameArray.length === 2 || fragmentNameArray.length === 4) { + fragmentPartName = fragmentNameArray.pop()?.toUpperCase() as string; + } else { + fragmentPartName = DOCUMENTATION; + } + const docFragmentCatalogueName = fragmentNameArray.join('.'); const docFragment = - docFragments.get(docFragmentName) || - docFragments.get(`ansible.builtin.${docFragmentName}`); - if (docFragment) { + docFragments.get(docFragmentCatalogueName) || + docFragments.get(`ansible.builtin.${docFragmentCatalogueName}`); + if ( + docFragment && + docFragment.rawDocumentationFragments.has(fragmentPartName) + ) { module.fragments.push(docFragment); // currently used only as indicator _.mergeWith( resultContents, - docFragment.rawDocumentation, + docFragment.rawDocumentationFragments.get(fragmentPartName), docFragmentMergeCustomizer ); } } _.mergeWith( resultContents, - module.rawDocumentation, + mainDocumentationFragment, docFragmentMergeCustomizer ); - module.rawDocumentation = resultContents; + module.rawDocumentationFragments.set(DOCUMENTATION, resultContents); } } @@ -65,9 +81,11 @@ function docFragmentMergeCustomizer( } export function processRawDocumentation( - rawDoc: unknown + moduleDocParts: Map> ): IModuleDocumentation | undefined { - if (isObject(rawDoc) && typeof rawDoc.module === 'string') { + // currently processing only the main documentation + const rawDoc = moduleDocParts.get(DOCUMENTATION); + if (rawDoc && typeof rawDoc.module === 'string') { const moduleDoc: IModuleDocumentation = { module: rawDoc.module, options: processRawOptions(rawDoc.options), @@ -200,7 +218,7 @@ function parseRawDepracationOrTombstone( export class LazyModuleDocumentation implements IModuleMetadata { public static docsRegex = - /(?

[ \t]*DOCUMENTATION\s*=\s*r?(?'''|""")(?:\n---)?\n?)(?.*?)\k/s;
+    /(?
[ \t]*(?[A-Z0-9_]+)\s*=\s*r?(?'''|""")(?:\n---)?\n?)(?.*?)\k/gs;
 
   source: string;
   sourceLineRange: [number, number] = [0, 0];
@@ -210,7 +228,7 @@ export class LazyModuleDocumentation implements IModuleMetadata {
   name: string;
   errors: YAMLError[] = [];
 
-  private _contents: Record | undefined;
+  private _contents: Map> | undefined;
 
   constructor(
     source: string,
@@ -226,29 +244,37 @@ export class LazyModuleDocumentation implements IModuleMetadata {
     this.name = name;
   }
 
-  public get rawDocumentation(): Record {
+  public get rawDocumentationFragments(): Map> {
     if (!this._contents) {
+      this._contents = new Map>();
       const contents = fs.readFileSync(this.source, { encoding: 'utf8' });
-      const m = LazyModuleDocumentation.docsRegex.exec(contents);
-      if (m && m.groups && m.groups.doc && m.groups.pre) {
-        // determine documentation start/end lines for definition provider
-        let startLine = contents.substr(0, m.index).match(/\n/g)?.length || 0;
-        startLine += m.groups.pre.match(/\n/g)?.length || 0;
-        const endLine = startLine + (m.groups.doc.match(/\n/g)?.length || 0);
-        this.sourceLineRange = [startLine, endLine];
-
-        const document = parseDocument(m.groups.doc);
-        // There's about 20 modules (out of ~3200) in Ansible 2.9 libs that contain YAML syntax errors
-        // Still, document.toJSON() works on them
-        this._contents = document.toJSON();
-        this.errors = document.errors;
+      let m;
+      while ((m = LazyModuleDocumentation.docsRegex.exec(contents)) !== null) {
+        if (m && m.groups && m.groups.name && m.groups.doc && m.groups.pre) {
+          if (m.groups.name === DOCUMENTATION) {
+            // determine documentation start/end lines for definition provider
+            let startLine =
+              contents.substr(0, m.index).match(/\n/g)?.length || 0;
+            startLine += m.groups.pre.match(/\n/g)?.length || 0;
+            const endLine =
+              startLine + (m.groups.doc.match(/\n/g)?.length || 0);
+            this.sourceLineRange = [startLine, endLine];
+          }
+
+          const document = parseDocument(m.groups.doc);
+          // There's about 20 modules (out of ~3200) in Ansible 2.9 libs that contain YAML syntax errors
+          // Still, document.toJSON() works on them
+          this._contents.set(m.groups.name, document.toJSON());
+          this.errors = document.errors;
+        }
       }
-      this._contents = this._contents || {};
     }
     return this._contents;
   }
 
-  public set rawDocumentation(value: Record) {
+  public set rawDocumentationFragments(
+    value: Map>
+  ) {
     this._contents = value;
   }
 }

From 45a24624e2d4ef3d191ba75f07ae4f04216e3ae0 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Wed, 29 Sep 2021 09:05:17 +0100
Subject: [PATCH 098/558] chore: avoid changing quotes on yaml files (#46)

---
 .prettierrc      |  6 ------
 .prettierrc.yaml | 10 ++++++++++
 2 files changed, 10 insertions(+), 6 deletions(-)
 delete mode 100644 .prettierrc
 create mode 100644 .prettierrc.yaml

diff --git a/.prettierrc b/.prettierrc
deleted file mode 100644
index e1829b555..000000000
--- a/.prettierrc
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "tabWidth": 2,
-  "useTabs": false,
-  "semi": true,
-  "singleQuote": true
-}
diff --git a/.prettierrc.yaml b/.prettierrc.yaml
new file mode 100644
index 000000000..fe34a0096
--- /dev/null
+++ b/.prettierrc.yaml
@@ -0,0 +1,10 @@
+tabWidth: 2
+useTabs: false
+overrides:
+  - files:
+      - '*.yaml'
+      - '*.yml'
+    options:
+      singleQuote: false
+semi: true
+singleQuote: true

From dc1680fcb6eaf9d161a325125565e12c1e1e9c8e Mon Sep 17 00:00:00 2001
From: kimbernator 
Date: Wed, 29 Sep 2021 05:30:22 -0500
Subject: [PATCH 099/558] Check that module paths are directories before
 globbing them (#38)

Co-authored-by: Jeremy Kimber 
Co-authored-by: Ganesh Nalawade 
Co-authored-by: Sorin Sbarnea 
---
 src/utils/docsFinder.ts | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/utils/docsFinder.ts b/src/utils/docsFinder.ts
index 7c71a4131..5ffe9a8f0 100644
--- a/src/utils/docsFinder.ts
+++ b/src/utils/docsFinder.ts
@@ -17,6 +17,9 @@ export async function findDocumentation(
     | 'builtin_doc_fragment'
     | 'collection_doc_fragment'
 ): Promise {
+  if (!fs.existsSync(dir) || fs.lstatSync(dir).isFile()) {
+    return [];
+  }
   let files;
   switch (kind) {
     case 'builtin':
@@ -74,6 +77,9 @@ export async function findPluginRouting(
   kind: 'builtin' | 'collection'
 ): Promise {
   const pluginRouting = new Map();
+  if (!fs.existsSync(dir) || fs.lstatSync(dir).isFile()) {
+    return pluginRouting;
+  }
   let files;
   switch (kind) {
     case 'builtin':

From 7f99feea32480f6b7c5874f16e6cdeeed52142d2 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Wed, 29 Sep 2021 18:50:14 +0100
Subject: [PATCH 100/558] fix: bump ansi-regex dependency to 5.0.1 (#47)

---
 package-lock.json | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 3cbd29278..04083292b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -39,7 +39,8 @@
         "typescript": "^4.3.5"
       },
       "engines": {
-        "node": "*"
+        "node": ">=12.0",
+        "npm": ">=7.11.2"
       }
     },
     "node_modules/@babel/code-frame": {
@@ -473,9 +474,9 @@
       }
     },
     "node_modules/ansi-regex": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-      "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+      "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"
@@ -2894,9 +2895,9 @@
       "dev": true
     },
     "ansi-regex": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-      "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
       "dev": true
     },
     "ansi-styles": {

From 8183fd2abc16810cf0d943c70ed4a64fc0ccd7b5 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Thu, 30 Sep 2021 17:10:39 +0100
Subject: [PATCH 101/558] Rewrite the `build-syntaxes` script in pure Python
 (#45)

---
 .pre-commit-config.yaml | 10 ++++++++++
 package.json            |  2 +-
 scripts/build-syntaxes  | 21 +++++++++++++--------
 test-requirements.txt   |  2 ++
 4 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index fa206d811..2f4b3a853 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -13,6 +13,16 @@ ci:
 repos:
   - repo: local
     hooks:
+      - id: build-syntaxes
+        name: Check the syntax files are in sync
+        entry: python scripts/build-syntaxes
+        language: python
+        pass_filenames: false
+        always_run: true
+        additional_dependencies:
+          - click
+          - lxml
+          - pyparsing
       - id: npm-ci
         name: Run 'npm ci' to ensure deps and versions are correct
         entry: >-
diff --git a/package.json b/package.json
index 7995730e4..55722d11d 100644
--- a/package.json
+++ b/package.json
@@ -70,7 +70,7 @@
   "scripts": {
     "clean": "rimraf out/server && rimraf lib",
     "compile": "tsc -p .",
-    "lint": "npm ci && ./scripts/build-syntaxes && pre-commit run -a",
+    "lint": "npm ci && pre-commit run -a",
     "watch": "tsc --watch -p .",
     "test": "mocha --require ts-node/register './test/**/*.ts'",
     "check-dependencies": "node ./scripts/check-dependencies.js"
diff --git a/scripts/build-syntaxes b/scripts/build-syntaxes
index 1ae9f5449..97304dd21 100755
--- a/scripts/build-syntaxes
+++ b/scripts/build-syntaxes
@@ -1,9 +1,14 @@
-#!/bin/bash
-set -euo pipefail
+#!/usr/bin/env python
+import glob
+import os
+import sys
+import subprocess
 
-for SRC in syntaxes/ansible/*.plist; do
-
-    DST=$(basename "$(basename "$SRC" .plist)")
-    python3 syntaxes/plist2xml.py "$SRC" "syntaxes/ansible/generated/$DST"
-
-done
+for src in glob.glob("syntaxes/ansible/*.plist"):
+    dst = os.path.splitext(os.path.basename(src))[0]
+    cmd = [sys.executable, "syntaxes/plist2xml.py", src, f"syntaxes/ansible/generated/{dst}"]
+    print(f"Running: {' '.join(cmd)}")
+    subprocess.run(
+        cmd,
+        check=True
+        )
diff --git a/test-requirements.txt b/test-requirements.txt
index e7905bedf..3c3e75ed6 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,2 +1,4 @@
+click
 lxml
 pre-commit
+pyparsing

From cefd599043311fcba5803e780edce16c09cc9c64 Mon Sep 17 00:00:00 2001
From: Ganesh Nalawade 
Date: Tue, 5 Oct 2021 07:31:33 +0530
Subject: [PATCH 102/558] feat: add execution environment auto completion (#42)

* feat: add execution environment auto completion

*  Add support for execution environment (EE) configuration
   options received from client.
   Example client `settings.json` for EE options (default)
   ```
   {
    "ansible.executionEnvironment.enabled": false,
    "ansible.executionEnvironment.image": "quay.io/ansible/ansible-navigator-demo-ee:0.6.0",
    "ansible.executionEnvironment.containerEngine": "auto",
    "ansible.executionEnvironment.pullPolicy: "missing"
   }
   ```

*  Add executionEnvironment service to handle initilization of EE
   and pulling plugins from within EE into cache path on local system

*  In case EE is enabled update docsLibrary service to read plugin
   docs from local cache path after executionEnvironment service
   is initialized

*  Add commandRunner utility to run command on local host or within
   EE based on settings passed from client

*  Update ansibleConfig service to use commandRunner utility
   to run ansible-config and related commands

* remove stale logs and unused imports

* update package.json node type version

* updates to package-lock.json file

* remove debug lods

* chore: remove unused inputs

* chore: readd unrelated removed file

* chore: fix review comments

*  Add semicolon and fix indetation using Prettier extesnion
*  Use vscode-uri package to get document path in commandRunner utility
*  Add progess status for downloaing EE
*  Change user message to log messeage at all applicable places
*  Add comments on code for better readability
*  Simplify logic to add `plugins` folder in `site-packages` path
*  Fix type on executionEnvironment service
*  Remove `--interactive` flag from container run command

* chore: Update log messages

* chore: Move container engine assignment out of try/catch based on review comment

* chore: add progress tracker to fetch plugin docs
---
 package-lock.json                    | 418 +++++++++++++++------------
 package.json                         |   3 +
 src/interfaces/extensionSettings.ts  |  12 +
 src/services/ansibleConfig.ts        |  64 ++--
 src/services/docsLibrary.ts          |  90 +++---
 src/services/executionEnvironment.ts | 325 +++++++++++++++++++++
 src/services/settingsManager.ts      |   6 +
 src/services/workspaceManager.ts     |  19 +-
 src/utils/commandRunner.ts           |  72 +++++
 src/utils/imagePuller.ts             | 110 +++++++
 src/utils/misc.ts                    |   4 +
 11 files changed, 865 insertions(+), 258 deletions(-)
 create mode 100644 src/services/executionEnvironment.ts
 create mode 100644 src/utils/commandRunner.ts
 create mode 100644 src/utils/imagePuller.ts

diff --git a/package-lock.json b/package-lock.json
index 04083292b..fdaf501c2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,6 +13,7 @@
         "globby": "^11.0.4",
         "ini": "^1.3.8",
         "lodash": "^4.17.21",
+        "uuid": "^8.3.2",
         "vscode-languageserver": "^7.0.0",
         "vscode-languageserver-textdocument": "^1.0.1",
         "vscode-uri": "^3.0.2",
@@ -27,6 +28,7 @@
         "@types/lodash": "^4.14.171",
         "@types/mocha": "^8.2.3",
         "@types/node": "^14.17.5",
+        "@types/uuid": "^8.3.1",
         "@types/vscode": "^1.56.0",
         "@typescript-eslint/eslint-plugin": "^4.28.3",
         "@typescript-eslint/parser": "^4.28.3",
@@ -34,6 +36,7 @@
         "eslint": "^7.30.0",
         "eslint-config-prettier": "^8.3.0",
         "mocha": "^8.4.0",
+        "prettier": "^2.4.1",
         "rimraf": "^3.0.2",
         "ts-node": "^9.1.1",
         "typescript": "^4.3.5"
@@ -53,9 +56,9 @@
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.14.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz",
-      "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==",
+      "version": "7.15.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
+      "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
@@ -224,9 +227,9 @@
       }
     },
     "node_modules/@types/chai": {
-      "version": "4.2.21",
-      "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz",
-      "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==",
+      "version": "4.2.22",
+      "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz",
+      "integrity": "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==",
       "dev": true
     },
     "node_modules/@types/ini": {
@@ -236,15 +239,15 @@
       "dev": true
     },
     "node_modules/@types/json-schema": {
-      "version": "7.0.8",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz",
-      "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==",
+      "version": "7.0.9",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
+      "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
       "dev": true
     },
     "node_modules/@types/lodash": {
-      "version": "4.14.171",
-      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz",
-      "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==",
+      "version": "4.14.174",
+      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.174.tgz",
+      "integrity": "sha512-KMBLT6+g9qrGXpDt7ohjWPUD34WA/jasrtjTEHStF0NPdEwJ1N9SZ+4GaMVDeuk/y0+X5j9xFm6mNiXS7UoaLQ==",
       "dev": true
     },
     "node_modules/@types/mocha": {
@@ -254,25 +257,31 @@
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "14.17.6",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.6.tgz",
-      "integrity": "sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ==",
+      "version": "14.17.19",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.19.tgz",
+      "integrity": "sha512-jjYI6NkyfXykucU6ELEoT64QyKOdvaA6enOqKtP4xUsGY0X0ZUZz29fUmrTRo+7v7c6TgDu82q3GHHaCEkqZwA==",
+      "dev": true
+    },
+    "node_modules/@types/uuid": {
+      "version": "8.3.1",
+      "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz",
+      "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==",
       "dev": true
     },
     "node_modules/@types/vscode": {
-      "version": "1.58.1",
-      "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.58.1.tgz",
-      "integrity": "sha512-sa76rDXiSif09he8KoaWWUQxsuBr2+uND0xn1GUbEODkuEjp2p7Rqd3t5qlvklfmAedLFdL7MdnsPa57uzwcOw==",
+      "version": "1.60.0",
+      "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.60.0.tgz",
+      "integrity": "sha512-wZt3VTmzYrgZ0l/3QmEbCq4KAJ71K3/hmMQ/nfpv84oH8e81KKwPEoQ5v8dNCxfHFVJ1JabHKmCvqdYOoVm1Ow==",
       "dev": true
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz",
-      "integrity": "sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz",
+      "integrity": "sha512-w63SCQ4bIwWN/+3FxzpnWrDjQRXVEGiTt9tJTRptRXeFvdZc/wLiz3FQUwNQ2CVoRGI6KUWMNUj/pk63noUfcA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/experimental-utils": "4.28.5",
-        "@typescript-eslint/scope-manager": "4.28.5",
+        "@typescript-eslint/experimental-utils": "4.31.2",
+        "@typescript-eslint/scope-manager": "4.31.2",
         "debug": "^4.3.1",
         "functional-red-black-tree": "^1.0.1",
         "regexpp": "^3.1.0",
@@ -297,15 +306,15 @@
       }
     },
     "node_modules/@typescript-eslint/experimental-utils": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz",
-      "integrity": "sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.2.tgz",
+      "integrity": "sha512-3tm2T4nyA970yQ6R3JZV9l0yilE2FedYg8dcXrTar34zC9r6JB7WyBQbpIVongKPlhEMjhQ01qkwrzWy38Bk1Q==",
       "dev": true,
       "dependencies": {
         "@types/json-schema": "^7.0.7",
-        "@typescript-eslint/scope-manager": "4.28.5",
-        "@typescript-eslint/types": "4.28.5",
-        "@typescript-eslint/typescript-estree": "4.28.5",
+        "@typescript-eslint/scope-manager": "4.31.2",
+        "@typescript-eslint/types": "4.31.2",
+        "@typescript-eslint/typescript-estree": "4.31.2",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^3.0.0"
       },
@@ -321,14 +330,14 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.5.tgz",
-      "integrity": "sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.2.tgz",
+      "integrity": "sha512-EcdO0E7M/sv23S/rLvenHkb58l3XhuSZzKf6DBvLgHqOYdL6YFMYVtreGFWirxaU2mS1GYDby3Lyxco7X5+Vjw==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "4.28.5",
-        "@typescript-eslint/types": "4.28.5",
-        "@typescript-eslint/typescript-estree": "4.28.5",
+        "@typescript-eslint/scope-manager": "4.31.2",
+        "@typescript-eslint/types": "4.31.2",
+        "@typescript-eslint/typescript-estree": "4.31.2",
         "debug": "^4.3.1"
       },
       "engines": {
@@ -348,13 +357,13 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz",
-      "integrity": "sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.2.tgz",
+      "integrity": "sha512-2JGwudpFoR/3Czq6mPpE8zBPYdHWFGL6lUNIGolbKQeSNv4EAiHaR5GVDQaLA0FwgcdcMtRk+SBJbFGL7+La5w==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "4.28.5",
-        "@typescript-eslint/visitor-keys": "4.28.5"
+        "@typescript-eslint/types": "4.31.2",
+        "@typescript-eslint/visitor-keys": "4.31.2"
       },
       "engines": {
         "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
@@ -365,9 +374,9 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.5.tgz",
-      "integrity": "sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.2.tgz",
+      "integrity": "sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w==",
       "dev": true,
       "engines": {
         "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
@@ -378,13 +387,13 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz",
-      "integrity": "sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.2.tgz",
+      "integrity": "sha512-ieBq8U9at6PvaC7/Z6oe8D3czeW5d//Fo1xkF/s9394VR0bg/UaMYPdARiWyKX+lLEjY3w/FNZJxitMsiWv+wA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "4.28.5",
-        "@typescript-eslint/visitor-keys": "4.28.5",
+        "@typescript-eslint/types": "4.31.2",
+        "@typescript-eslint/visitor-keys": "4.31.2",
         "debug": "^4.3.1",
         "globby": "^11.0.3",
         "is-glob": "^4.0.1",
@@ -405,12 +414,12 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz",
-      "integrity": "sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.2.tgz",
+      "integrity": "sha512-PrBId7EQq2Nibns7dd/ch6S6/M4/iwLM9McbgeEbCXfxdwRUNxJ4UNreJ6Gh3fI2GNKNrWnQxKL7oCPmngKBug==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "4.28.5",
+        "@typescript-eslint/types": "4.31.2",
         "eslint-visitor-keys": "^2.0.0"
       },
       "engines": {
@@ -594,9 +603,9 @@
       "dev": true
     },
     "node_modules/buffer-from": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
       "dev": true
     },
     "node_modules/callsites": {
@@ -638,9 +647,9 @@
       }
     },
     "node_modules/chalk": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-      "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "dependencies": {
         "ansi-styles": "^4.1.0",
@@ -780,9 +789,9 @@
       }
     },
     "node_modules/deep-is": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+      "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/diff": {
@@ -857,9 +866,9 @@
       }
     },
     "node_modules/eslint": {
-      "version": "7.31.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz",
-      "integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==",
+      "version": "7.32.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
+      "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
       "dev": true,
       "dependencies": {
         "@babel/code-frame": "7.12.11",
@@ -1119,9 +1128,9 @@
       "dev": true
     },
     "node_modules/fastq": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz",
-      "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==",
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+      "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
       "dependencies": {
         "reusify": "^1.0.4"
       }
@@ -1188,9 +1197,9 @@
       }
     },
     "node_modules/flatted": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz",
-      "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==",
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
+      "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
       "dev": true
     },
     "node_modules/fs.realpath": {
@@ -1269,9 +1278,9 @@
       }
     },
     "node_modules/globals": {
-      "version": "13.10.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
-      "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
+      "version": "13.11.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
+      "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -1422,9 +1431,9 @@
       }
     },
     "node_modules/is-glob": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
-      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.2.tgz",
+      "integrity": "sha512-ZZTOjRcDjuAAAv2cTBQP/lL59ZTArx77+7UzHdWW/XB1mrfp7DEaVpKmZ0XIzx+M7AxfhKcqV+nMetUQmFifwg==",
       "dependencies": {
         "is-extglob": "^2.1.1"
       },
@@ -1870,6 +1879,18 @@
         "node": ">= 0.8.0"
       }
     },
+    "node_modules/prettier": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz",
+      "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==",
+      "dev": true,
+      "bin": {
+        "prettier": "bin-prettier.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
     "node_modules/progress": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -2113,9 +2134,9 @@
       }
     },
     "node_modules/source-map-support": {
-      "version": "0.5.19",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
-      "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+      "version": "0.5.20",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
+      "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
       "dev": true,
       "dependencies": {
         "buffer-from": "^1.0.0",
@@ -2129,26 +2150,26 @@
       "dev": true
     },
     "node_modules/string-width": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
-      "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+      "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.0"
+        "strip-ansi": "^6.0.1"
       },
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/strip-ansi": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-      "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+      "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.0"
+        "ansi-regex": "^5.0.1"
       },
       "engines": {
         "node": ">=8"
@@ -2196,9 +2217,9 @@
       }
     },
     "node_modules/table/node_modules/ajv": {
-      "version": "8.6.2",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz",
-      "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==",
+      "version": "8.6.3",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
+      "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==",
       "dev": true,
       "dependencies": {
         "fast-deep-equal": "^3.1.1",
@@ -2324,9 +2345,9 @@
       }
     },
     "node_modules/typescript": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz",
-      "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==",
+      "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz",
+      "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==",
       "dev": true,
       "bin": {
         "tsc": "bin/tsc",
@@ -2345,6 +2366,14 @@
         "punycode": "^2.1.0"
       }
     },
+    "node_modules/uuid": {
+      "version": "8.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+      "bin": {
+        "uuid": "dist/bin/uuid"
+      }
+    },
     "node_modules/v8-compile-cache": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@@ -2597,9 +2626,9 @@
       }
     },
     "@babel/helper-validator-identifier": {
-      "version": "7.14.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz",
-      "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==",
+      "version": "7.15.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
+      "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
       "dev": true
     },
     "@babel/highlight": {
@@ -2734,9 +2763,9 @@
       }
     },
     "@types/chai": {
-      "version": "4.2.21",
-      "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz",
-      "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==",
+      "version": "4.2.22",
+      "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz",
+      "integrity": "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==",
       "dev": true
     },
     "@types/ini": {
@@ -2746,15 +2775,15 @@
       "dev": true
     },
     "@types/json-schema": {
-      "version": "7.0.8",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz",
-      "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==",
+      "version": "7.0.9",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
+      "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
       "dev": true
     },
     "@types/lodash": {
-      "version": "4.14.171",
-      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz",
-      "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==",
+      "version": "4.14.174",
+      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.174.tgz",
+      "integrity": "sha512-KMBLT6+g9qrGXpDt7ohjWPUD34WA/jasrtjTEHStF0NPdEwJ1N9SZ+4GaMVDeuk/y0+X5j9xFm6mNiXS7UoaLQ==",
       "dev": true
     },
     "@types/mocha": {
@@ -2764,25 +2793,31 @@
       "dev": true
     },
     "@types/node": {
-      "version": "14.17.6",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.6.tgz",
-      "integrity": "sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ==",
+      "version": "14.17.19",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.19.tgz",
+      "integrity": "sha512-jjYI6NkyfXykucU6ELEoT64QyKOdvaA6enOqKtP4xUsGY0X0ZUZz29fUmrTRo+7v7c6TgDu82q3GHHaCEkqZwA==",
+      "dev": true
+    },
+    "@types/uuid": {
+      "version": "8.3.1",
+      "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz",
+      "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==",
       "dev": true
     },
     "@types/vscode": {
-      "version": "1.58.1",
-      "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.58.1.tgz",
-      "integrity": "sha512-sa76rDXiSif09he8KoaWWUQxsuBr2+uND0xn1GUbEODkuEjp2p7Rqd3t5qlvklfmAedLFdL7MdnsPa57uzwcOw==",
+      "version": "1.60.0",
+      "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.60.0.tgz",
+      "integrity": "sha512-wZt3VTmzYrgZ0l/3QmEbCq4KAJ71K3/hmMQ/nfpv84oH8e81KKwPEoQ5v8dNCxfHFVJ1JabHKmCvqdYOoVm1Ow==",
       "dev": true
     },
     "@typescript-eslint/eslint-plugin": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz",
-      "integrity": "sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz",
+      "integrity": "sha512-w63SCQ4bIwWN/+3FxzpnWrDjQRXVEGiTt9tJTRptRXeFvdZc/wLiz3FQUwNQ2CVoRGI6KUWMNUj/pk63noUfcA==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/experimental-utils": "4.28.5",
-        "@typescript-eslint/scope-manager": "4.28.5",
+        "@typescript-eslint/experimental-utils": "4.31.2",
+        "@typescript-eslint/scope-manager": "4.31.2",
         "debug": "^4.3.1",
         "functional-red-black-tree": "^1.0.1",
         "regexpp": "^3.1.0",
@@ -2791,55 +2826,55 @@
       }
     },
     "@typescript-eslint/experimental-utils": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz",
-      "integrity": "sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.2.tgz",
+      "integrity": "sha512-3tm2T4nyA970yQ6R3JZV9l0yilE2FedYg8dcXrTar34zC9r6JB7WyBQbpIVongKPlhEMjhQ01qkwrzWy38Bk1Q==",
       "dev": true,
       "requires": {
         "@types/json-schema": "^7.0.7",
-        "@typescript-eslint/scope-manager": "4.28.5",
-        "@typescript-eslint/types": "4.28.5",
-        "@typescript-eslint/typescript-estree": "4.28.5",
+        "@typescript-eslint/scope-manager": "4.31.2",
+        "@typescript-eslint/types": "4.31.2",
+        "@typescript-eslint/typescript-estree": "4.31.2",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^3.0.0"
       }
     },
     "@typescript-eslint/parser": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.5.tgz",
-      "integrity": "sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.2.tgz",
+      "integrity": "sha512-EcdO0E7M/sv23S/rLvenHkb58l3XhuSZzKf6DBvLgHqOYdL6YFMYVtreGFWirxaU2mS1GYDby3Lyxco7X5+Vjw==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/scope-manager": "4.28.5",
-        "@typescript-eslint/types": "4.28.5",
-        "@typescript-eslint/typescript-estree": "4.28.5",
+        "@typescript-eslint/scope-manager": "4.31.2",
+        "@typescript-eslint/types": "4.31.2",
+        "@typescript-eslint/typescript-estree": "4.31.2",
         "debug": "^4.3.1"
       }
     },
     "@typescript-eslint/scope-manager": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz",
-      "integrity": "sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.2.tgz",
+      "integrity": "sha512-2JGwudpFoR/3Czq6mPpE8zBPYdHWFGL6lUNIGolbKQeSNv4EAiHaR5GVDQaLA0FwgcdcMtRk+SBJbFGL7+La5w==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "4.28.5",
-        "@typescript-eslint/visitor-keys": "4.28.5"
+        "@typescript-eslint/types": "4.31.2",
+        "@typescript-eslint/visitor-keys": "4.31.2"
       }
     },
     "@typescript-eslint/types": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.5.tgz",
-      "integrity": "sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.2.tgz",
+      "integrity": "sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w==",
       "dev": true
     },
     "@typescript-eslint/typescript-estree": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz",
-      "integrity": "sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.2.tgz",
+      "integrity": "sha512-ieBq8U9at6PvaC7/Z6oe8D3czeW5d//Fo1xkF/s9394VR0bg/UaMYPdARiWyKX+lLEjY3w/FNZJxitMsiWv+wA==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "4.28.5",
-        "@typescript-eslint/visitor-keys": "4.28.5",
+        "@typescript-eslint/types": "4.31.2",
+        "@typescript-eslint/visitor-keys": "4.31.2",
         "debug": "^4.3.1",
         "globby": "^11.0.3",
         "is-glob": "^4.0.1",
@@ -2848,12 +2883,12 @@
       }
     },
     "@typescript-eslint/visitor-keys": {
-      "version": "4.28.5",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz",
-      "integrity": "sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg==",
+      "version": "4.31.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.2.tgz",
+      "integrity": "sha512-PrBId7EQq2Nibns7dd/ch6S6/M4/iwLM9McbgeEbCXfxdwRUNxJ4UNreJ6Gh3fI2GNKNrWnQxKL7oCPmngKBug==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "4.28.5",
+        "@typescript-eslint/types": "4.31.2",
         "eslint-visitor-keys": "^2.0.0"
       }
     },
@@ -2988,9 +3023,9 @@
       "dev": true
     },
     "buffer-from": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
       "dev": true
     },
     "callsites": {
@@ -3020,9 +3055,9 @@
       }
     },
     "chalk": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-      "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "requires": {
         "ansi-styles": "^4.1.0",
@@ -3125,9 +3160,9 @@
       }
     },
     "deep-is": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+      "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
     },
     "diff": {
@@ -3181,9 +3216,9 @@
       "dev": true
     },
     "eslint": {
-      "version": "7.31.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz",
-      "integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==",
+      "version": "7.32.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
+      "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "7.12.11",
@@ -3381,9 +3416,9 @@
       "dev": true
     },
     "fastq": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz",
-      "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==",
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+      "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
       "requires": {
         "reusify": "^1.0.4"
       }
@@ -3432,9 +3467,9 @@
       }
     },
     "flatted": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz",
-      "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==",
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
+      "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
       "dev": true
     },
     "fs.realpath": {
@@ -3491,9 +3526,9 @@
       }
     },
     "globals": {
-      "version": "13.10.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
-      "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
+      "version": "13.11.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
+      "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
       "dev": true,
       "requires": {
         "type-fest": "^0.20.2"
@@ -3601,9 +3636,9 @@
       "dev": true
     },
     "is-glob": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
-      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.2.tgz",
+      "integrity": "sha512-ZZTOjRcDjuAAAv2cTBQP/lL59ZTArx77+7UzHdWW/XB1mrfp7DEaVpKmZ0XIzx+M7AxfhKcqV+nMetUQmFifwg==",
       "requires": {
         "is-extglob": "^2.1.1"
       }
@@ -3938,6 +3973,12 @@
       "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
       "dev": true
     },
+    "prettier": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz",
+      "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==",
+      "dev": true
+    },
     "progress": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -4081,9 +4122,9 @@
       "dev": true
     },
     "source-map-support": {
-      "version": "0.5.19",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
-      "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+      "version": "0.5.20",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
+      "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
       "dev": true,
       "requires": {
         "buffer-from": "^1.0.0",
@@ -4097,23 +4138,23 @@
       "dev": true
     },
     "string-width": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
-      "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+      "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,
       "requires": {
         "emoji-regex": "^8.0.0",
         "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.0"
+        "strip-ansi": "^6.0.1"
       }
     },
     "strip-ansi": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-      "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
       "dev": true,
       "requires": {
-        "ansi-regex": "^5.0.0"
+        "ansi-regex": "^5.0.1"
       }
     },
     "strip-json-comments": {
@@ -4146,9 +4187,9 @@
       },
       "dependencies": {
         "ajv": {
-          "version": "8.6.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz",
-          "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==",
+          "version": "8.6.3",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
+          "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==",
           "dev": true,
           "requires": {
             "fast-deep-equal": "^3.1.1",
@@ -4238,9 +4279,9 @@
       "dev": true
     },
     "typescript": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz",
-      "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==",
+      "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz",
+      "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==",
       "dev": true
     },
     "uri-js": {
@@ -4252,6 +4293,11 @@
         "punycode": "^2.1.0"
       }
     },
+    "uuid": {
+      "version": "8.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+    },
     "v8-compile-cache": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
diff --git a/package.json b/package.json
index 55722d11d..e39dfd8f9 100644
--- a/package.json
+++ b/package.json
@@ -45,6 +45,7 @@
     "globby": "^11.0.4",
     "ini": "^1.3.8",
     "lodash": "^4.17.21",
+    "uuid": "^8.3.2",
     "vscode-languageserver": "^7.0.0",
     "vscode-languageserver-textdocument": "^1.0.1",
     "vscode-uri": "^3.0.2",
@@ -56,6 +57,7 @@
     "@types/lodash": "^4.14.171",
     "@types/mocha": "^8.2.3",
     "@types/node": "^14.17.5",
+    "@types/uuid": "^8.3.1",
     "@types/vscode": "^1.56.0",
     "@typescript-eslint/eslint-plugin": "^4.28.3",
     "@typescript-eslint/parser": "^4.28.3",
@@ -63,6 +65,7 @@
     "eslint": "^7.30.0",
     "eslint-config-prettier": "^8.3.0",
     "mocha": "^8.4.0",
+    "prettier": "^2.4.1",
     "rimraf": "^3.0.2",
     "ts-node": "^9.1.1",
     "typescript": "^4.3.5"
diff --git a/src/interfaces/extensionSettings.ts b/src/interfaces/extensionSettings.ts
index c9e6d3b8e..9ddcdff42 100644
--- a/src/interfaces/extensionSettings.ts
+++ b/src/interfaces/extensionSettings.ts
@@ -1,5 +1,17 @@
+export type IContainerEngine = 'auto' | 'podman' | 'docker';
+
+export type IPullPolicy = 'always' | 'missing' | 'never' | 'tag';
+
 export interface ExtensionSettings {
   ansible: { path: string; useFullyQualifiedCollectionNames: boolean };
   ansibleLint: { enabled: boolean; path: string; arguments: string };
+  executionEnvironment: ExecutionEnvironmentSettings;
   python: { interpreterPath: string; activationScript: string };
 }
+
+interface ExecutionEnvironmentSettings {
+  containerEngine: IContainerEngine;
+  enabled: boolean;
+  image: string;
+  pullPolicy: IPullPolicy;
+}
diff --git a/src/services/ansibleConfig.ts b/src/services/ansibleConfig.ts
index 408481070..e64a555c9 100644
--- a/src/services/ansibleConfig.ts
+++ b/src/services/ansibleConfig.ts
@@ -1,11 +1,9 @@
-import * as child_process from 'child_process';
 import * as ini from 'ini';
 import * as _ from 'lodash';
 import * as path from 'path';
-import { URI } from 'vscode-uri';
 import { Connection } from 'vscode-languageserver';
-import { withInterpreter } from '../utils/misc';
 import { WorkspaceFolderContext } from './workspaceManager';
+import { CommandRunner } from '../utils/commandRunner';
 
 export class AnsibleConfig {
   private connection: Connection;
@@ -25,21 +23,19 @@ export class AnsibleConfig {
         this.context.workspaceFolder.uri
       );
 
-      // get Ansible configuration
-      const [ansibleConfigCommand, ansibleConfigEnv] = withInterpreter(
-        `${settings.ansible.path}-config`,
-        'dump',
-        settings.python.interpreterPath,
-        settings.python.activationScript
+      const commandRunner = new CommandRunner(
+        this.connection,
+        this.context,
+        settings
       );
 
-      const ansibleConfigResult = child_process.execSync(ansibleConfigCommand, {
-        encoding: 'utf-8',
-        cwd: URI.parse(this.context.workspaceFolder.uri).path,
-        env: ansibleConfigEnv,
-      });
+      // get Ansible configuration
+      const ansibleConfigResult = await commandRunner.runCommand(
+        'ansible-config',
+        'dump'
+      );
 
-      let config = ini.parse(ansibleConfigResult);
+      let config = ini.parse(ansibleConfigResult.stdout);
       config = _.mapKeys(
         config,
         (_, key) => key.substring(0, key.indexOf('(')) // remove config source in parenthesis
@@ -47,19 +43,12 @@ export class AnsibleConfig {
       this._collection_paths = parsePythonStringArray(config.COLLECTIONS_PATHS);
 
       // get Ansible basic information
-      const [ansibleCommand, ansibleEnv] = withInterpreter(
-        `${settings.ansible.path}`,
-        '--version',
-        settings.python.interpreterPath,
-        settings.python.activationScript
+      const ansibleVersionResult = await commandRunner.runCommand(
+        'ansible',
+        '--version'
       );
 
-      const ansibleVersionResult = child_process.execSync(ansibleCommand, {
-        encoding: 'utf-8',
-        env: ansibleEnv,
-      });
-
-      const versionInfo = ini.parse(ansibleVersionResult);
+      const versionInfo = ini.parse(ansibleVersionResult.stdout);
       this._module_locations = parsePythonStringArray(
         versionInfo['configured module search path']
       );
@@ -71,18 +60,13 @@ export class AnsibleConfig {
 
       // get Python sys.path
       // this is needed to get the pre-installed collections to work
-      const [pythonPathCommand, pythonPathEnv] = withInterpreter(
+      const pythonPathResult = await commandRunner.runCommand(
         'python3',
-        ' -c "import sys; print(sys.path, end=\\"\\")"',
-        settings.python.interpreterPath,
-        settings.python.activationScript
+        ' -c "import sys; print(sys.path, end=\\"\\")"'
+      );
+      this._collection_paths.push(
+        ...parsePythonStringArray(pythonPathResult.stdout)
       );
-
-      const pythonPathResult = child_process.execSync(pythonPathCommand, {
-        encoding: 'utf-8',
-        env: pythonPathEnv,
-      });
-      this._collection_paths.push(...parsePythonStringArray(pythonPathResult));
     } catch (error) {
       if (error instanceof Error) {
         this.connection.window.showErrorMessage(error.message);
@@ -94,10 +78,18 @@ export class AnsibleConfig {
     }
   }
 
+  set collections_paths(updatedCollectionPath: string[]) {
+    this._collection_paths = updatedCollectionPath;
+  }
+
   get collections_paths(): string[] {
     return this._collection_paths;
   }
 
+  set module_locations(updatedModulesPath: string[]) {
+    this._module_locations = updatedModulesPath;
+  }
+
   get module_locations(): string[] {
     return this._module_locations;
   }
diff --git a/src/services/docsLibrary.ts b/src/services/docsLibrary.ts
index 6e5ced0b1..aab32ac95 100644
--- a/src/services/docsLibrary.ts
+++ b/src/services/docsLibrary.ts
@@ -1,3 +1,4 @@
+import { Connection } from 'vscode-languageserver';
 import { Node } from 'yaml/types';
 import { getDeclaredCollections } from '../utils/yaml';
 import { findDocumentation, findPluginRouting } from '../utils/docsFinder';
@@ -13,6 +14,7 @@ import {
 } from '../utils/docsParser';
 import { IModuleMetadata } from '../interfaces/module';
 export class DocsLibrary {
+  private connection: Connection;
   private modules = new Map();
   private _moduleFqcns = new Set();
   private docFragments = new Map();
@@ -22,55 +24,73 @@ export class DocsLibrary {
     IPluginRoutesByType
   >();
 
-  constructor(context: WorkspaceFolderContext) {
+  constructor(connection: Connection, context: WorkspaceFolderContext) {
+    this.connection = connection;
     this.context = context;
   }
 
   public async initialize(): Promise {
-    const ansibleConfig = await this.context.ansibleConfig;
-    for (const modulesPath of ansibleConfig.module_locations) {
-      (await findDocumentation(modulesPath, 'builtin')).forEach((doc) => {
-        this.modules.set(doc.fqcn, doc);
-        this.moduleFqcns.add(doc.fqcn);
-      });
-
-      (await findDocumentation(modulesPath, 'builtin_doc_fragment')).forEach(
-        (doc) => {
-          this.docFragments.set(doc.fqcn, doc);
-        }
+    try {
+      const settings = await this.context.documentSettings.get(
+        this.context.workspaceFolder.uri
       );
-    }
-
-    (
-      await findPluginRouting(ansibleConfig.ansible_location, 'builtin')
-    ).forEach((r, collection) => this.pluginRouting.set(collection, r));
-
-    for (const collectionsPath of ansibleConfig.collections_paths) {
-      (await findDocumentation(collectionsPath, 'collection')).forEach(
-        (doc) => {
+      const ansibleConfig = await this.context.ansibleConfig;
+      if (settings.executionEnvironment.enabled) {
+        // ensure plugin/module cache is established
+        await this.context.executionEnvironment;
+      }
+      for (const modulesPath of ansibleConfig.module_locations) {
+        (await findDocumentation(modulesPath, 'builtin')).forEach((doc) => {
           this.modules.set(doc.fqcn, doc);
           this.moduleFqcns.add(doc.fqcn);
-        }
-      );
+        });
+
+        (await findDocumentation(modulesPath, 'builtin_doc_fragment')).forEach(
+          (doc) => {
+            this.docFragments.set(doc.fqcn, doc);
+          }
+        );
+      }
 
       (
-        await findDocumentation(collectionsPath, 'collection_doc_fragment')
-      ).forEach((doc) => {
-        this.docFragments.set(doc.fqcn, doc);
-      });
+        await findPluginRouting(ansibleConfig.ansible_location, 'builtin')
+      ).forEach((r, collection) => this.pluginRouting.set(collection, r));
+
+      for (const collectionsPath of ansibleConfig.collections_paths) {
+        (await findDocumentation(collectionsPath, 'collection')).forEach(
+          (doc) => {
+            this.modules.set(doc.fqcn, doc);
+            this.moduleFqcns.add(doc.fqcn);
+          }
+        );
 
-      (await findPluginRouting(collectionsPath, 'collection')).forEach(
-        (r, collection) => this.pluginRouting.set(collection, r)
-      );
+        (
+          await findDocumentation(collectionsPath, 'collection_doc_fragment')
+        ).forEach((doc) => {
+          this.docFragments.set(doc.fqcn, doc);
+        });
+
+        (await findPluginRouting(collectionsPath, 'collection')).forEach(
+          (r, collection) => this.pluginRouting.set(collection, r)
+        );
 
-      // add all valid redirect routes as possible FQCNs
-      for (const [collection, routesByType] of this.pluginRouting) {
-        for (const [name, route] of routesByType.get('modules') || []) {
-          if (route.redirect && !route.tombstone) {
-            this.moduleFqcns.add(`${collection}.${name}`);
+        // add all valid redirect routes as possible FQCNs
+        for (const [collection, routesByType] of this.pluginRouting) {
+          for (const [name, route] of routesByType.get('modules') || []) {
+            if (route.redirect && !route.tombstone) {
+              this.moduleFqcns.add(`${collection}.${name}`);
+            }
           }
         }
       }
+    } catch (error) {
+      if (error instanceof Error) {
+        this.connection.window.showErrorMessage(error.message);
+      } else {
+        this.connection.console.error(
+          `Exception in DocsLibrary service: ${JSON.stringify(error)}`
+        );
+      }
     }
   }
 
diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts
new file mode 100644
index 000000000..1a0230c03
--- /dev/null
+++ b/src/services/executionEnvironment.ts
@@ -0,0 +1,325 @@
+import * as child_process from 'child_process';
+import * as fs from 'fs';
+import * as path from 'path';
+import { URI } from 'vscode-uri';
+import { Connection } from 'vscode-languageserver';
+import { v4 as uuidv4 } from 'uuid';
+import { ImagePuller } from '../utils/imagePuller';
+import { asyncExec } from '../utils/misc';
+import { WorkspaceFolderContext } from './workspaceManager';
+import { IContainerEngine } from '../interfaces/extensionSettings';
+
+export class ExecutionEnvironment {
+  private connection: Connection;
+  private context: WorkspaceFolderContext;
+  private useProgressTracker = false;
+  private _container_engine: IContainerEngine;
+  private _container_image: string;
+  private _container_image_id: string;
+
+  constructor(connection: Connection, context: WorkspaceFolderContext) {
+    this.connection = connection;
+    this.context = context;
+    this.useProgressTracker =
+      !!context.clientCapabilities.window?.workDoneProgress;
+  }
+
+  public async initialize(): Promise {
+    try {
+      const settings = await this.context.documentSettings.get(
+        this.context.workspaceFolder.uri
+      );
+      this._container_image = settings.executionEnvironment.image;
+      this._container_engine = settings.executionEnvironment.containerEngine;
+      if (this._container_engine === 'auto') {
+        for (const ce of ['podman', 'docker']) {
+          try {
+            child_process.execSync(`which ${ce}`, {
+              encoding: 'utf-8',
+            });
+          } catch (error) {
+            this.connection.console.info(`Container engine '${ce}' not found`);
+            continue;
+          }
+          this._container_engine = ce;
+          this.connection.console.log(`Container engine set to: '${ce}'`);
+          break;
+        }
+      } else {
+        try {
+          child_process.execSync(`which ${this._container_engine}`, {
+            encoding: 'utf-8',
+          });
+        } catch (error) {
+          this.connection.window.showErrorMessage(
+            `Container engine '${this._container_engine}' not found. Failed with error '${error}'`
+          );
+          return;
+        }
+      }
+      if (!['podman', 'docker'].includes(this._container_engine)) {
+        this.connection.window.showInformationMessage(
+          'No valid container engine found.'
+        );
+        return;
+      }
+      const imagePuller = new ImagePuller(
+        this.connection,
+        this.context,
+        this._container_engine,
+        this._container_image,
+        settings.executionEnvironment.pullPolicy
+      );
+      const setupDone = await imagePuller.setupImage();
+      if (!setupDone) {
+        this.connection.window.showErrorMessage(
+          `Execution environment image '${this._container_image}' setup failed.
+           For more details check output console logs for ansible-language-server`
+        );
+        return;
+      }
+      this.fetchPluginDocs();
+    } catch (error) {
+      if (error instanceof Error) {
+        this.connection.window.showErrorMessage(error.message);
+      } else {
+        this.connection.console.error(
+          `Exception in ExecutionEnvironment service: ${JSON.stringify(error)}`
+        );
+      }
+    }
+  }
+
+  async fetchPluginDocs(): Promise {
+    const ansibleConfig = await this.context.ansibleConfig;
+    const containerName = `${this._container_image.replace(
+      /[^a-z0-9]/gi,
+      '_'
+    )}`;
+    let progressTracker;
+
+    try {
+      const containerImageIdCommand = `${this._container_engine} images ${this._container_image} --format="{{.ID}}" | head -n 1`;
+      this.connection.console.log(containerImageIdCommand);
+      this._container_image_id = child_process
+        .execSync(containerImageIdCommand, {
+          encoding: 'utf-8',
+        })
+        .trim();
+      const hostCacheBasePath = path.resolve(
+        `${process.env.HOME}/.cache/ansible-language-server/${containerName}/${this._container_image_id}`
+      );
+
+      const isContainerRunning = this.runContainer(containerName);
+      if (!isContainerRunning) {
+        return;
+      }
+
+      if (fs.existsSync(hostCacheBasePath)) {
+        ansibleConfig.collections_paths = this.updateCachePaths(
+          ansibleConfig.collections_paths,
+          hostCacheBasePath
+        );
+        ansibleConfig.module_locations = this.updateCachePaths(
+          ansibleConfig.module_locations,
+          hostCacheBasePath
+        );
+      } else {
+        if (this.useProgressTracker) {
+          progressTracker = await this.connection.window.createWorkDoneProgress();
+        }
+        if (progressTracker) {
+          progressTracker.begin(
+            'execution-environment',
+            undefined,
+            `Copy plugin docs from '${this._container_image} to host cache path`,
+            true
+          );
+        }
+        ansibleConfig.collections_paths = await this.copyPluginDocFiles(
+          hostCacheBasePath,
+          containerName,
+          ansibleConfig.collections_paths,
+          '**/ansible_collections'
+        );
+
+        const builtin_plugin_locations: string[] = [];
+        ansibleConfig.module_locations.forEach((modulePath) => {
+          const pluginsPathParts = modulePath.split(path.sep).slice(0, -1);
+          if (pluginsPathParts.includes('site-packages')) {
+            // ansible-config returns default builtin configured module path
+            // as ``/site-packages/ansible/modules`` to copy other plugins
+            // to local cache strip the ``modules`` part from the path and append
+            // ``plugins`` folder.
+            pluginsPathParts.push('plugins');
+          }
+          builtin_plugin_locations.push(pluginsPathParts.join(path.sep));
+        });
+        // Copy builtin plugins
+        await this.copyPluginDocFiles(
+          hostCacheBasePath,
+          containerName,
+          builtin_plugin_locations,
+          '*'
+        );
+
+        // Copy builtin modules
+        ansibleConfig.module_locations = await this.copyPluginDocFiles(
+          hostCacheBasePath,
+          containerName,
+          ansibleConfig.module_locations,
+          '**/modules'
+        );
+      }
+    } catch (error) {
+      this.connection.window.showErrorMessage(
+        `Exception in ExecutionEnvironment service while fetching docs: ${JSON.stringify(
+          error
+        )}`
+      );
+    } finally {
+      if (progressTracker) {
+        progressTracker.done();
+      }
+      this.cleanUpContainer(containerName);
+    }
+  }
+
+  public wrapContainerArgs(command: string): string {
+    const workspaceFolderPath = URI.parse(
+      this.context.workspaceFolder.uri
+    ).path;
+    const containerCommand: Array = [this._container_engine];
+    containerCommand.push(...['run', '--rm']);
+    containerCommand.push(...['--workdir', workspaceFolderPath]);
+
+    containerCommand.push(
+      ...['-v', `${workspaceFolderPath}:${workspaceFolderPath}`]
+    );
+    if (this._container_engine === 'podman') {
+      // container namespace stuff
+      containerCommand.push('--group-add=root');
+      containerCommand.push('--ipc=host');
+
+      // docker does not support this option
+      containerCommand.push('--quiet');
+    } else {
+      containerCommand.push(`--user=${process.getuid()}`);
+    }
+    containerCommand.push(`--name ansible_language_server_${uuidv4()}`);
+    containerCommand.push(this._container_image);
+    containerCommand.push(command);
+    const generatedCommand = containerCommand.join(' ');
+    this.connection.console.log(
+      `container engine invocation: ${generatedCommand}`
+    );
+    return generatedCommand;
+  }
+
+  public cleanUpContainer(containerName: string): void {
+    [
+      `${this._container_engine} stop ${containerName}`,
+      `${this._container_engine} rm ${containerName}`,
+    ].forEach((command) => {
+      try {
+        child_process.execSync(command, {
+          cwd: URI.parse(this.context.workspaceFolder.uri).path,
+        });
+      } catch (error) {
+        // container already stopped and/or removed
+      }
+    });
+  }
+
+  private isPluginInPath(
+    containerName: string,
+    searchPath: string,
+    pluginFolderPath: string
+  ): boolean {
+    const command = `${this._container_engine} exec ${containerName} find ${searchPath} -path '${pluginFolderPath}'`;
+    try {
+      this.connection.console.info(`Executing command ${command}`);
+      const result = child_process
+        .execSync(command, {
+          encoding: 'utf-8',
+        })
+        .trim();
+      return result !== '';
+    } catch (error) {
+      this.connection.console.error(error);
+      return false;
+    }
+  }
+
+  private runContainer(containerName: string): boolean {
+    // ensure container is not running
+    this.cleanUpContainer(containerName);
+    try {
+      const command = `${this._container_engine} run --rm -it -d --name ${containerName} ${this._container_image} bash`;
+      this.connection.console.log(`run container with command '${command}'`);
+      child_process.execSync(command, {
+        encoding: 'utf-8',
+      });
+    } catch (error) {
+      this.connection.window.showErrorMessage(
+        `Failed to initialize execution environment '${this._container_image}': ${error}`
+      );
+      return false;
+    }
+    return true;
+  }
+
+  private async copyPluginDocFiles(
+    hostPluginDocCacheBasePath: string,
+    containerName: string,
+    containerPluginPaths: string[],
+    searchKind: string
+  ): Promise {
+    const updatedHostDocPath: string[] = [];
+    if (fs.existsSync(hostPluginDocCacheBasePath)) {
+      containerPluginPaths.forEach((srcPath) => {
+        updatedHostDocPath.push(path.join(hostPluginDocCacheBasePath, srcPath));
+      });
+    } else {
+      containerPluginPaths.forEach((srcPath) => {
+        if (
+          srcPath === '' ||
+          !this.isPluginInPath(containerName, srcPath, searchKind)
+        ) {
+          return;
+        }
+        const destPath = path.join(hostPluginDocCacheBasePath, srcPath);
+        const destPathFolder = destPath
+          .split(path.sep)
+          .slice(0, -1)
+          .join(path.sep);
+        fs.mkdirSync(destPath, { recursive: true });
+        const copyCommand = `docker cp ${containerName}:${srcPath} ${destPathFolder}`;
+        this.connection.console.log(
+          `Copying plugins from container to local cache path ${copyCommand}`
+        );
+        asyncExec(copyCommand, {
+          encoding: 'utf-8',
+        });
+
+        updatedHostDocPath.push(destPath);
+      });
+    }
+
+    return updatedHostDocPath;
+  }
+
+  private updateCachePaths(
+    pluginPaths: string[],
+    cacheBasePath: string
+  ): string[] {
+    const localCachePaths: string[] = [];
+    pluginPaths.forEach((srcPath) => {
+      const destPath = path.join(cacheBasePath, srcPath);
+      if (fs.existsSync(destPath)) {
+        localCachePaths.push(destPath);
+      }
+    });
+    return localCachePaths;
+  }
+}
diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts
index fd5ecfc29..1606906e9 100644
--- a/src/services/settingsManager.ts
+++ b/src/services/settingsManager.ts
@@ -16,6 +16,12 @@ export class SettingsManager {
     ansible: { path: 'ansible', useFullyQualifiedCollectionNames: true },
     ansibleLint: { enabled: true, path: 'ansible-lint', arguments: '' },
     python: { interpreterPath: '', activationScript: '' },
+    executionEnvironment: {
+      containerEngine: 'auto',
+      enabled: false,
+      image: 'quay.io/ansible/ansible-navigator-demo-ee:0.6.0',
+      pullPolicy: 'missing'
+    }
   };
   private globalSettings: ExtensionSettings = this.defaultSettings;
 
diff --git a/src/services/workspaceManager.ts b/src/services/workspaceManager.ts
index 495e5c7a4..272b281eb 100644
--- a/src/services/workspaceManager.ts
+++ b/src/services/workspaceManager.ts
@@ -9,6 +9,7 @@ import {
 import { AnsibleConfig } from './ansibleConfig';
 import { AnsibleLint } from './ansibleLint';
 import { DocsLibrary } from './docsLibrary';
+import { ExecutionEnvironment } from './executionEnvironment';
 import { MetadataLibrary } from './metadataLibrary';
 import { SettingsManager } from './settingsManager';
 
@@ -108,6 +109,7 @@ export class WorkspaceFolderContext {
   public documentSettings: SettingsManager;
 
   // Lazy-loading anything that needs this context itself
+  private _executionEnvironment: Thenable | undefined;
   private _docsLibrary: Thenable | undefined;
   private _ansibleConfig: Thenable | undefined;
   private _ansibleLint: AnsibleLint | undefined;
@@ -130,6 +132,7 @@ export class WorkspaceFolderContext {
       () => {
         // in case the configuration changes for this folder, we should
         // invalidate the services that rely on it in initialization
+        this._executionEnvironment = undefined;
         this._ansibleConfig = undefined;
         this._docsLibrary = undefined;
       }
@@ -145,6 +148,7 @@ export class WorkspaceFolderContext {
       if (fileEvent.uri.startsWith(this.workspaceFolder.uri)) {
         // in case the configuration changes for this folder, we should
         // invalidate the services that rely on it in initialization
+        this._executionEnvironment = undefined;
         this._ansibleConfig = undefined;
         this._docsLibrary = undefined;
       }
@@ -153,7 +157,7 @@ export class WorkspaceFolderContext {
 
   public get docsLibrary(): Thenable {
     if (!this._docsLibrary) {
-      const docsLibrary = new DocsLibrary(this);
+      const docsLibrary = new DocsLibrary(this.connection, this);
       this._docsLibrary = docsLibrary.initialize().then(() => docsLibrary);
     }
     return this._docsLibrary;
@@ -175,4 +179,17 @@ export class WorkspaceFolderContext {
     }
     return this._ansibleLint;
   }
+
+  public get executionEnvironment(): Thenable {
+    if (!this._executionEnvironment) {
+      const executionEnvironment = new ExecutionEnvironment(
+        this.connection,
+        this
+      );
+      this._executionEnvironment = executionEnvironment
+        .initialize()
+        .then(() => executionEnvironment);
+    }
+    return this._executionEnvironment;
+  }
 }
diff --git a/src/utils/commandRunner.ts b/src/utils/commandRunner.ts
new file mode 100644
index 000000000..512b7d102
--- /dev/null
+++ b/src/utils/commandRunner.ts
@@ -0,0 +1,72 @@
+import * as path from 'path';
+import { URI } from 'vscode-uri';
+import { Connection } from 'vscode-languageserver';
+import { withInterpreter, asyncExec } from './misc';
+import { WorkspaceFolderContext } from '../services/workspaceManager';
+import { ExtensionSettings } from '../interfaces/extensionSettings';
+
+export class CommandRunner {
+  private connection: Connection;
+  private context: WorkspaceFolderContext;
+  private settings: ExtensionSettings;
+
+  constructor(
+    connection: Connection,
+    context: WorkspaceFolderContext,
+    settings: ExtensionSettings
+  ) {
+    this.connection = connection;
+    this.context = context;
+    this.settings = settings;
+  }
+
+  public async runCommand(
+    executable: string,
+    args: string,
+    workingDirectory?: string
+  ): Promise<{
+    stdout: string;
+    stderr: string;
+  }> {
+    let executablePath: string;
+    let command: string;
+    let runEnv: NodeJS.ProcessEnv | undefined;
+    const executionEnvironment = await this.context.executionEnvironment;
+    const isEEEnabled = this.settings.executionEnvironment.enabled;
+    const interpreterPath = isEEEnabled
+      ? 'python3'
+      : this.settings.python.interpreterPath;
+    if (executable.startsWith('ansible')) {
+      executablePath = isEEEnabled
+        ? executable
+        : path.join(path.dirname(this.settings.ansible.path), executable);
+    } else {
+      executablePath = executable;
+    }
+
+    // prepare command and env for local run
+    if (!isEEEnabled) {
+      [command, runEnv] = withInterpreter(
+        executablePath,
+        args,
+        interpreterPath,
+        this.settings.python.activationScript
+      );
+    } // prepare command executin env run
+    else {
+      command = executionEnvironment.wrapContainerArgs(`${executable} ${args}`);
+      runEnv = undefined;
+    }
+
+    const currentWorkingDirectory = workingDirectory
+      ? workingDirectory
+      : URI.parse(this.context.workspaceFolder.uri).path;
+    const result = await asyncExec(command, {
+      encoding: 'utf-8',
+      cwd: currentWorkingDirectory,
+      env: runEnv,
+    });
+
+    return result;
+  }
+}
diff --git a/src/utils/imagePuller.ts b/src/utils/imagePuller.ts
new file mode 100644
index 000000000..f7aea57fa
--- /dev/null
+++ b/src/utils/imagePuller.ts
@@ -0,0 +1,110 @@
+import * as child_process from 'child_process';
+import { Connection } from 'vscode-languageserver';
+import { WorkspaceFolderContext } from '../services/workspaceManager';
+
+export class ImagePuller {
+  private connection: Connection;
+  private context: WorkspaceFolderContext;
+  private useProgressTracker = false;
+  private _containerEngine: string;
+  private _containerImage: string;
+  private _pullPolicy: string;
+
+  constructor(
+    connection: Connection,
+    context: WorkspaceFolderContext,
+    containerEngine: string,
+    containerImage: string,
+    pullPolicy: string
+  ) {
+    this.connection = connection;
+    this.context = context;
+    this._containerEngine = containerEngine;
+    this._containerImage = containerImage;
+    this._pullPolicy = pullPolicy;
+    this.useProgressTracker =
+      !!context.clientCapabilities.window?.workDoneProgress;
+  }
+
+  public async setupImage(): Promise {
+    let setupComplete = false;
+    const imageTag = this._containerImage.split(':', 2)[1] || 'latest';
+    const imagePresent = this.checkForImage();
+    const pullRequired = this.determinePull(imagePresent, imageTag);
+
+    let progressTracker;
+    if (this.useProgressTracker) {
+      progressTracker = await this.connection.window.createWorkDoneProgress();
+    }
+    if (pullRequired) {
+      this.connection.console.log(
+        `Pulling image '${this._containerImage}' with pull-policy '${this._pullPolicy}' and image-tag '${imageTag}'`
+      );
+
+      try {
+        const pullCommand = `${this._containerEngine} pull ${this._containerImage}`;
+        if (progressTracker) {
+          progressTracker.begin(
+            'image-puller',
+            undefined,
+            `Pulling image '${this._containerImage}'`
+          );
+        }
+        child_process.execSync(pullCommand, {
+          encoding: 'utf-8',
+        });
+        this.connection.console.info(
+          `Container image '${this._containerImage}' pull successful`
+        );
+        setupComplete = true;
+      } catch (error) {
+        let errorMsg = `Failed to pull container image ${this._containerEngine} with error '${error}'`;
+        errorMsg +=
+          'Check the execution environment image name, connectivity to and permissions for the registry, and try again';
+        this.connection.console.error(errorMsg);
+        setupComplete = false;
+      }
+    } else {
+      setupComplete = true;
+    }
+
+    if (progressTracker) {
+      progressTracker.done();
+    }
+    return setupComplete;
+  }
+
+  private determinePull(imagePresent: boolean, imageTag: string): boolean {
+    let pull: boolean;
+    if (this._pullPolicy === 'missing' && !imagePresent) {
+      pull = true;
+    } else if (this._pullPolicy === 'always') {
+      pull = true;
+    } else if (this._pullPolicy === 'tag' && imageTag === 'latest') {
+      pull = true;
+    } else if (this._pullPolicy === 'tag' && !imagePresent) {
+      pull = true;
+    } else {
+      pull = false;
+    }
+    return pull;
+  }
+
+  private checkForImage(): boolean {
+    try {
+      const command = `${this._containerEngine} image inspect ${this._containerImage}`;
+      this.connection.console.log(
+        `check for container image with command: '${command}'`
+      );
+      child_process.execSync(command, {
+        encoding: 'utf-8',
+      });
+      return true;
+    } catch (error) {
+      this.connection.console.log(
+        `'${this._containerImage}' image inspection failed, image assumed to be corrupted or missing`
+      );
+      return false;
+    }
+  }
+}
diff --git a/src/utils/misc.ts b/src/utils/misc.ts
index 80bebcf58..1337002c7 100644
--- a/src/utils/misc.ts
+++ b/src/utils/misc.ts
@@ -1,5 +1,7 @@
+import * as child_process from 'child_process';
 import { promises as fs } from 'fs';
 import { URL } from 'url';
+import { promisify } from 'util';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { Range } from 'vscode-languageserver-types';
 import * as path from 'path';
@@ -8,6 +10,8 @@ export async function fileExists(fileUri: string): Promise {
   return !!(await fs.stat(new URL(fileUri)).catch(() => false));
 }
 
+export const asyncExec = promisify(child_process.exec);
+
 export function toLspRange(
   range: [number, number],
   textDocument: TextDocument

From 704975dd8b30f7441ac9a7e9fc2ba9e1ab0772c5 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Tue, 5 Oct 2021 11:26:15 +0100
Subject: [PATCH 103/558] Create CODEOWNERS (#50)

---
 .github/CODEOWNERS | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 .github/CODEOWNERS

diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 000000000..ed325fcd2
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+# Global Owners
+* @ansible/devtools @tomaciazek

From 9944c3bf2633bfe2b39bd21725b9ce2d49d63603 Mon Sep 17 00:00:00 2001
From: Ganesh Nalawade 
Date: Thu, 7 Oct 2021 16:17:04 +0530
Subject: [PATCH 104/558] fix: initialise executionEnvironment service only
 when enabled (#55)

---
 src/services/executionEnvironment.ts | 3 +++
 src/utils/commandRunner.ts           | 6 +++---
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts
index 1a0230c03..3c4a461df 100644
--- a/src/services/executionEnvironment.ts
+++ b/src/services/executionEnvironment.ts
@@ -29,6 +29,9 @@ export class ExecutionEnvironment {
       const settings = await this.context.documentSettings.get(
         this.context.workspaceFolder.uri
       );
+      if (!settings.executionEnvironment.enabled) {
+        return;
+      }
       this._container_image = settings.executionEnvironment.image;
       this._container_engine = settings.executionEnvironment.containerEngine;
       if (this._container_engine === 'auto') {
diff --git a/src/utils/commandRunner.ts b/src/utils/commandRunner.ts
index 512b7d102..c0f72409c 100644
--- a/src/utils/commandRunner.ts
+++ b/src/utils/commandRunner.ts
@@ -31,7 +31,6 @@ export class CommandRunner {
     let executablePath: string;
     let command: string;
     let runEnv: NodeJS.ProcessEnv | undefined;
-    const executionEnvironment = await this.context.executionEnvironment;
     const isEEEnabled = this.settings.executionEnvironment.enabled;
     const interpreterPath = isEEEnabled
       ? 'python3'
@@ -52,8 +51,9 @@ export class CommandRunner {
         interpreterPath,
         this.settings.python.activationScript
       );
-    } // prepare command executin env run
-    else {
+    } else {
+      // prepare command executing env run
+      const executionEnvironment = await this.context.executionEnvironment;
       command = executionEnvironment.wrapContainerArgs(`${executable} ${args}`);
       runEnv = undefined;
     }

From 3298703c45c956fbcf24034f750b033b6bc85787 Mon Sep 17 00:00:00 2001
From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com>
Date: Fri, 8 Oct 2021 13:59:16 +0530
Subject: [PATCH 105/558] Fallback to syntax-check if ansible-lint is not
 installed or disabled (#5)

Co-authored-by: Sviatoslav Sydorenko 
Co-authored-by: Sviatoslav Sydorenko 
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Sorin Sbarnea 
---
 src/ansibleLanguageService.ts       |  19 +++-
 src/providers/validationProvider.ts |  35 +++++-
 src/services/ansibleLint.ts         |  10 +-
 src/services/ansiblePlaybook.ts     | 160 ++++++++++++++++++++++++++++
 src/services/workspaceManager.ts    |   9 ++
 src/utils/misc.ts                   |  20 ++++
 6 files changed, 245 insertions(+), 8 deletions(-)
 create mode 100644 src/services/ansiblePlaybook.ts

diff --git a/src/ansibleLanguageService.ts b/src/ansibleLanguageService.ts
index abd22d6c6..c3d2fbab8 100644
--- a/src/ansibleLanguageService.ts
+++ b/src/ansibleLanguageService.ts
@@ -143,7 +143,13 @@ export class AnsibleLanguageService {
         const context = this.workspaceManager.getContext(e.document.uri);
         if (context) {
           // perform full validation
-          await doValidate(e.document, this.validationManager, false, context);
+          await doValidate(
+            e.document,
+            this.validationManager,
+            false,
+            context,
+            this.connection
+          );
         }
       } catch (error) {
         this.handleError(error, 'onDidOpen');
@@ -177,7 +183,13 @@ export class AnsibleLanguageService {
         const context = this.workspaceManager.getContext(e.document.uri);
         if (context) {
           // perform full validation
-          await doValidate(e.document, this.validationManager, false, context);
+          await doValidate(
+            e.document,
+            this.validationManager,
+            false,
+            context,
+            this.connection
+          );
         }
       } catch (error) {
         this.handleError(error, 'onDidSave');
@@ -201,7 +213,8 @@ export class AnsibleLanguageService {
           e.document,
           this.validationManager,
           true,
-          this.workspaceManager.getContext(e.document.uri)
+          this.workspaceManager.getContext(e.document.uri),
+          this.connection
         );
       } catch (error) {
         this.handleError(error, 'onDidChangeContent');
diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts
index 2f44a2f13..60fac96e5 100644
--- a/src/providers/validationProvider.ts
+++ b/src/providers/validationProvider.ts
@@ -1,6 +1,7 @@
 import IntervalTree from '@flatten-js/interval-tree';
 import * as _ from 'lodash';
 import {
+  Connection,
   Diagnostic,
   DiagnosticRelatedInformation,
   DiagnosticSeverity,
@@ -11,6 +12,7 @@ import { TextDocument } from 'vscode-languageserver-textdocument';
 import { ValidationManager } from '../services/validationManager';
 import { WorkspaceFolderContext } from '../services/workspaceManager';
 import { parseAllDocuments } from '../utils/yaml';
+import { getExecutablePath } from '../utils/misc';
 
 /**
  * Validates the given document.
@@ -23,7 +25,8 @@ export async function doValidate(
   textDocument: TextDocument,
   validationManager: ValidationManager,
   quick = true,
-  context?: WorkspaceFolderContext
+  context?: WorkspaceFolderContext,
+  connection?: Connection
 ): Promise> {
   let diagnosticsByFile;
   if (quick || !context) {
@@ -32,8 +35,34 @@ export async function doValidate(
       validationManager.getValidationFromCache(textDocument.uri) ||
       new Map();
   } else {
-    // full validation with ansible-lint
-    diagnosticsByFile = await context.ansibleLint.doValidate(textDocument);
+    // full validation with ansible-lint or ansible syntax-check (if ansible-lint is not installed or disabled)
+
+    const settings = await context.documentSettings.get(textDocument.uri);
+
+    const lintAvailability = await getExecutablePath(settings.ansibleLint.path);
+    console.debug('Path for lint: ', lintAvailability);
+
+    if (lintAvailability) {
+      console.debug('Validating using ansible-lint');
+      diagnosticsByFile = await context.ansibleLint.doValidate(textDocument);
+    }
+
+    if (!diagnosticsByFile || !lintAvailability || diagnosticsByFile === -1) {
+      // Notifying the user about the failed ansible-lint command and falling back to ansible syntax-check in this scenario
+      if (diagnosticsByFile === -1) {
+        console.debug(
+          'Ansible-lint command execution failed. Falling back to ansible syntax-check'
+        );
+        connection.window.showInformationMessage(
+          'Falling back to ansible syntax-check.'
+        );
+      }
+      console.debug('Validating using ansible syntax-check');
+      diagnosticsByFile = await context.ansiblePlaybook.doValidate(
+        textDocument
+      );
+    }
+
     if (!diagnosticsByFile.has(textDocument.uri)) {
       // In case there are no diagnostics for the file that triggered the
       // validation, set an empty array in order to clear the validation.
diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts
index ea607fc39..eedc81c1c 100644
--- a/src/services/ansibleLint.ts
+++ b/src/services/ansibleLint.ts
@@ -50,14 +50,19 @@ export class AnsibleLint {
    */
   public async doValidate(
     textDocument: TextDocument
-  ): Promise> {
+  ): Promise | -1> {
     let diagnostics: Map = new Map();
 
     const workingDirectory = URI.parse(this.context.workspaceFolder.uri).path;
 
     const settings = await this.context.documentSettings.get(textDocument.uri);
 
-    if (settings.ansibleLint.enabled) {
+    if (!settings.ansibleLint.enabled) {
+      console.debug(
+        'Ansible-lint is disabled. Falling back to ansible syntax-check'
+      );
+      return;
+    } else {
       let linterArguments = settings.ansibleLint.arguments;
 
       // Determine linter config file
@@ -132,6 +137,7 @@ export class AnsibleLint {
             );
           } else {
             this.connection.window.showErrorMessage(execError.message);
+            return -1;
           }
 
           if (execError.stderr) {
diff --git a/src/services/ansiblePlaybook.ts b/src/services/ansiblePlaybook.ts
new file mode 100644
index 000000000..d74a9e63f
--- /dev/null
+++ b/src/services/ansiblePlaybook.ts
@@ -0,0 +1,160 @@
+import * as child_process from 'child_process';
+import { URI } from 'vscode-uri';
+import { promisify } from 'util';
+import {
+  Connection,
+  Diagnostic,
+  DiagnosticSeverity,
+  Position,
+  Range,
+} from 'vscode-languageserver';
+import { TextDocument } from 'vscode-languageserver-textdocument';
+import { withInterpreter } from '../utils/misc';
+import { WorkspaceFolderContext } from './workspaceManager';
+
+const exec = promisify(child_process.exec);
+
+/**
+ * Acts as an interface to ansible-playbook command.
+ */
+export class AnsiblePlaybook {
+  private useProgressTracker = false;
+
+  /**
+   *
+   * @param connection establishes connection with the client
+   * @param context provides workspace context of the client
+   */
+
+  constructor(
+    private connection: Connection,
+    private context: WorkspaceFolderContext
+  ) {
+    this.useProgressTracker =
+      !!context.clientCapabilities.window?.workDoneProgress;
+  }
+
+  /**
+   * Acts as an interface to ansible-playbook  --syntax-check command and a cache of its output.
+   * ansible syntax-check may provide diagnostics for more than just the file for which
+   * it was triggered, and this is reflected in the implementation.
+   *
+   * Perform ansible syntax-check for the given document.
+   */
+  public async doValidate(
+    textDocument: TextDocument
+  ): Promise> {
+    const docPath = URI.parse(textDocument.uri).path;
+    let diagnostics: Map = new Map();
+    const progressTracker = this.useProgressTracker
+      ? await this.connection.window.createWorkDoneProgress()
+      : {
+          begin: () => {}, // eslint-disable-line @typescript-eslint/no-empty-function
+          done: () => {}, // eslint-disable-line @typescript-eslint/no-empty-function
+        };
+
+    const workingDirectory = URI.parse(this.context.workspaceFolder.uri).path;
+
+    const settings = await this.context.documentSettings.get(textDocument.uri);
+
+    progressTracker.begin(
+      'ansible syntax-check',
+      undefined,
+      'Processing files...'
+    );
+
+    const [command, env] = withInterpreter(
+      `${settings.ansible.path}-playbook`,
+      `${docPath} --syntax-check`,
+      settings.python.interpreterPath,
+      settings.python.activationScript
+    );
+
+    try {
+      await exec(command, {
+        encoding: 'utf-8',
+        cwd: workingDirectory,
+        env: env,
+      });
+    } catch (error) {
+      if (error instanceof Error) {
+        const execError = error as child_process.ExecException & {
+          // according to the docs, these are always available
+          stdout: string;
+          stderr: string;
+        };
+
+        // This is the regex to extract the filename, line and column number from the strerr produced by syntax-check command
+        const ansibleSyntaxCheckRegex =
+          /The error appears to be in '(?.*)': line (?\d+), column (?\d+)/;
+
+        const filteredErrorMessage = ansibleSyntaxCheckRegex.exec(execError.stderr);
+
+        diagnostics = filteredErrorMessage
+          ? this.processReport(
+              execError.message,
+              filteredErrorMessage.groups.filename,
+              parseInt(filteredErrorMessage.groups.line),
+              parseInt(filteredErrorMessage.groups.column)
+            )
+          : this.processReport(execError.message, docPath, 1, 1);
+
+        if (execError.stderr) {
+          this.connection.console.info(
+            `[ansible syntax-check] ${execError.stderr}`
+          );
+        }
+      } else {
+        this.connection.console.error(
+          `Exception in AnsibleSyntaxCheck service: ${JSON.stringify(error)}`
+        );
+      }
+    }
+
+    progressTracker.done();
+    return diagnostics;
+  }
+
+  private processReport(
+    result: string,
+    fileName: string,
+    line: number,
+    column: number
+  ): Map {
+    const diagnostics: Map = new Map();
+    if (!result) {
+      this.connection.console.warn(
+        'Standard output from ansible syntax-check is suspiciously empty.'
+      );
+      return diagnostics;
+    }
+    const start: Position = {
+      line: line - 1,
+      character: column - 1,
+    };
+    const end: Position = {
+      line: line - 1,
+      character: Number.MAX_SAFE_INTEGER,
+    };
+    const range: Range = {
+      start,
+      end,
+    };
+
+    const severity: DiagnosticSeverity = DiagnosticSeverity.Error;
+
+    const locationUri = `file://${fileName}`;
+
+    const fileDiagnostics = diagnostics.get(locationUri) || [];
+
+    fileDiagnostics.push({
+      message: result,
+      range,
+      severity,
+      source: 'Ansible',
+    });
+
+    diagnostics.set(locationUri, fileDiagnostics);
+    return diagnostics;
+  }
+}
diff --git a/src/services/workspaceManager.ts b/src/services/workspaceManager.ts
index 272b281eb..4b4909952 100644
--- a/src/services/workspaceManager.ts
+++ b/src/services/workspaceManager.ts
@@ -8,6 +8,7 @@ import {
 } from 'vscode-languageserver';
 import { AnsibleConfig } from './ansibleConfig';
 import { AnsibleLint } from './ansibleLint';
+import { AnsiblePlaybook } from './ansiblePlaybook';
 import { DocsLibrary } from './docsLibrary';
 import { ExecutionEnvironment } from './executionEnvironment';
 import { MetadataLibrary } from './metadataLibrary';
@@ -113,6 +114,7 @@ export class WorkspaceFolderContext {
   private _docsLibrary: Thenable | undefined;
   private _ansibleConfig: Thenable | undefined;
   private _ansibleLint: AnsibleLint | undefined;
+  private _ansiblePlaybook: AnsiblePlaybook | undefined;
 
   constructor(
     connection: Connection,
@@ -180,6 +182,13 @@ export class WorkspaceFolderContext {
     return this._ansibleLint;
   }
 
+  public get ansiblePlaybook(): AnsiblePlaybook {
+    if (!this._ansiblePlaybook) {
+      this._ansiblePlaybook = new AnsiblePlaybook(this.connection, this);
+    }
+    return this._ansiblePlaybook;
+  }
+
   public get executionEnvironment(): Thenable {
     if (!this._executionEnvironment) {
       const executionEnvironment = new ExecutionEnvironment(
diff --git a/src/utils/misc.ts b/src/utils/misc.ts
index 1337002c7..01cfec58a 100644
--- a/src/utils/misc.ts
+++ b/src/utils/misc.ts
@@ -81,3 +81,23 @@ export function withInterpreter(
     return [command, undefined];
   }
 }
+
+/**
+ * A method to return the path to the provided executable
+ * @param executable String representing the name of the executable
+ * @returns Complete path of the executable (string) or undefined depending updon the presence of the executable
+ */
+export async function getExecutablePath(
+  executable: string
+): Promise | undefined {
+  const exec = promisify(child_process.exec);
+
+  try {
+    const executablePath = await exec(`which ${executable}`, {
+      encoding: 'utf-8',
+    });
+    return executablePath.stdout;
+  } catch (error) {
+    return;
+  }
+}

From 15567404bf706c24fb217e99cedaa3109c61342f Mon Sep 17 00:00:00 2001
From: Ganesh Nalawade 
Date: Mon, 11 Oct 2021 16:41:35 +0530
Subject: [PATCH 106/558] chore: reduce length of notification while pulling
 images (#54)

* chore: reduce length of notification while pulling images

*  Based on feedback from ansible devtools team members
   the PR removes the name of container image from
   progress tracker notification message to reduce
   the length of message thus making it less distracting :)

* fix review comment
---
 src/utils/imagePuller.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/utils/imagePuller.ts b/src/utils/imagePuller.ts
index f7aea57fa..2243a4e22 100644
--- a/src/utils/imagePuller.ts
+++ b/src/utils/imagePuller.ts
@@ -45,9 +45,9 @@ export class ImagePuller {
         const pullCommand = `${this._containerEngine} pull ${this._containerImage}`;
         if (progressTracker) {
           progressTracker.begin(
-            'image-puller',
+            'execution-environment',
             undefined,
-            `Pulling image '${this._containerImage}'`
+            'Pulling Ansible execution environment image...'
           );
         }
         child_process.execSync(pullCommand, {

From 117d0e7a03468554aa00297d5e854664eb37cf57 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Mon, 11 Oct 2021 16:16:39 +0100
Subject: [PATCH 107/558] chore: use same version of eslint on pre-commit (#59)

---
 .pre-commit-config.yaml | 4 ++--
 package-lock.json       | 2 +-
 package.json            | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 2f4b3a853..5a6afecb9 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -67,7 +67,7 @@ repos:
       - id: debug-statements
         language_version: python3
   - repo: https://github.com/pre-commit/mirrors-eslint
-    rev: v7.30.0
+    rev: v7.32.0
     hooks:
       - id: eslint
         args:
@@ -77,7 +77,7 @@ repos:
         additional_dependencies:
           - "@typescript-eslint/eslint-plugin"
           - "@typescript-eslint/parser"
-          - eslint
+          - eslint@v7.32.0
           - eslint-plugin-prettier
           - eslint-config-prettier
           - prettier
diff --git a/package-lock.json b/package-lock.json
index fdaf501c2..a2f83c1a8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -33,7 +33,7 @@
         "@typescript-eslint/eslint-plugin": "^4.28.3",
         "@typescript-eslint/parser": "^4.28.3",
         "chai": "^4.3.4",
-        "eslint": "^7.30.0",
+        "eslint": "^7.32.0",
         "eslint-config-prettier": "^8.3.0",
         "mocha": "^8.4.0",
         "prettier": "^2.4.1",
diff --git a/package.json b/package.json
index e39dfd8f9..34c108c20 100644
--- a/package.json
+++ b/package.json
@@ -62,7 +62,7 @@
     "@typescript-eslint/eslint-plugin": "^4.28.3",
     "@typescript-eslint/parser": "^4.28.3",
     "chai": "^4.3.4",
-    "eslint": "^7.30.0",
+    "eslint": "^7.32.0",
     "eslint-config-prettier": "^8.3.0",
     "mocha": "^8.4.0",
     "prettier": "^2.4.1",

From 264776cf3a0f0090f48e0afd57724fecfbc6ab1a Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Tue, 12 Oct 2021 14:04:59 +0100
Subject: [PATCH 108/558] chore: mark broken Windows tests as pending (#60)

---
 test/utils/yaml.test.ts | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/test/utils/yaml.test.ts b/test/utils/yaml.test.ts
index 99d2c3bf1..b28f238c8 100644
--- a/test/utils/yaml.test.ts
+++ b/test/utils/yaml.test.ts
@@ -38,7 +38,39 @@ async function getPathInFile(
   );
 }
 
+function isWindows() {
+  // win32 applies to x64 arch too, is the platform name
+  return process.platform === 'win32';
+}
+
 describe('yaml', () => {
+
+  beforeEach(function () {
+    const brokenTests = new Map([
+      ['canGetCollections', 'https://github.com/ansible/ansible-language-server/issues/26'],
+      ['canGetCollectionsFromPreTasks', 'https://github.com/ansible/ansible-language-server/issues/26'],
+      ['canGetCollectionsFromRescue', 'https://github.com/ansible/ansible-language-server/issues/26'],
+      ['canGetCollectionsFromAlways', 'https://github.com/ansible/ansible-language-server/issues/26'],
+      ['canCorrectlyNegateTaskParamForValue', 'https://github.com/ansible/ansible-language-server/issues/26'],
+      ['canCorrectlyConfirmTaskParamInPreTasks', 'https://github.com/ansible/ansible-language-server/issues/26'],
+      ['canCorrectlyConfirmTaskParamInTasks', 'https://github.com/ansible/ansible-language-server/issues/26'],
+      ['canCorrectlyConfirmTaskParamInBlock', 'https://github.com/ansible/ansible-language-server/issues/26'],
+      ['isUndecisiveWithoutPlayKeywords', 'https://github.com/ansible/ansible-language-server/issues/26'],
+      ['isUndecisiveWithoutPlayKeywordsWithoutPath', 'https://github.com/ansible/ansible-language-server/issues/26'],
+      ['canCorrectlyConfirmRoleParam', 'https://github.com/ansible/ansible-language-server/issues/26'],
+    ])
+    const reason = brokenTests.get(this.currentTest.title);
+    if (isWindows() && reason) {
+      const msg = `Marked ${this.currentTest.title} as pending due to ${reason}`;
+      if (process.env.GITHUB_ACTIONS) {
+        console.log(`::warning file=${this.currentTest.file}:: ${msg}`);
+      } else {
+        console.log(`🚩 ${msg}`);
+      }
+      this.currentTest.pending = true;
+    }
+  });
+
   describe('ancestryBuilder', () => {
     it('canGetParent', async () => {
       const path = await getPathInFile('ancestryBuilder.yml', 4, 7);

From 4dd3c9a4f94d11101d68dd74fff9f36e5bee10d8 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Tue, 12 Oct 2021 15:42:28 +0100
Subject: [PATCH 109/558] chore: add gha release configuration (#56)

---
 .github/release.yml | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 .github/release.yml

diff --git a/.github/release.yml b/.github/release.yml
new file mode 100644
index 000000000..17bccb707
--- /dev/null
+++ b/.github/release.yml
@@ -0,0 +1,21 @@
+# https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes
+
+changelog:
+  exclude:
+    labels:
+      - skip-changelog
+    authors:
+      - dependabot
+  categories:
+    - title: Breaking Changes
+      labels:
+        - major
+    - title: Features
+      labels:
+        - enhancement
+    - title: Fixes
+      labels:
+        - bug
+    - title: Other Changes  # catch-all
+      labels:
+        - "*"

From 18c0b2a4adb5d6f286fd67c04db3277a7cc5ae00 Mon Sep 17 00:00:00 2001
From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com>
Date: Wed, 13 Oct 2021 14:38:13 +0530
Subject: [PATCH 110/558] Update module completion return statement to support
 FQCN (#57)

* update module completion return statement to support fqcn returns whenever necessary

* fix order of priority in filtering of text when FQCN is used

Co-authored-by: Sorin Sbarnea 
---
 src/providers/completionProvider.ts | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts
index 9cf0bef71..97c6e6e54 100644
--- a/src/providers/completionProvider.ts
+++ b/src/providers/completionProvider.ts
@@ -57,6 +57,9 @@ export async function doCompletion(
   preparedText = insert(preparedText, offset, '_:');
   const yamlDocs = parseAllDocuments(preparedText);
 
+  const useFqcn = (await context.documentSettings.get(document.uri)).ansible
+    .useFullyQualifiedCollectionNames;
+
   // We need inclusive matching, since cursor position is the position of the character right after it
   // NOTE: Might no longer be required due to the hack above
   const path = getPathAt(document, position, yamlDocs, true);
@@ -136,11 +139,15 @@ export async function doCompletion(
               }
               const [namespace, collection, name] = moduleFqcn.split('.');
               return {
-                label: name,
+                label: useFqcn ? moduleFqcn : name,
                 kind: kind,
                 detail: `${namespace}.${collection}`,
-                sortText: `${priority}_${name}`,
-                filterText: `${name} ${moduleFqcn}`, // name should have priority
+                sortText: useFqcn
+                  ? `${priority}_${moduleFqcn}`
+                  : `${priority}_${name}`,
+                filterText: useFqcn
+                  ? `${name} ${moduleFqcn} ${collection} ${namespace}` // name should have highest priority (in case of FQCN)
+                  : `${name} ${moduleFqcn}`, // name should have priority (in case of no FQCN)
                 data: {
                   documentUri: document.uri, // preserve document URI for completion request
                   moduleFqcn: moduleFqcn,

From 64966fb3a04beaecb34cbde785eded98cc5afe78 Mon Sep 17 00:00:00 2001
From: Ganesh Nalawade 
Date: Wed, 13 Oct 2021 20:15:20 +0530
Subject: [PATCH 111/558] feat: Add support to provide diagnostics with EE
 (#53)

* feat: Add support to provide diagnostics with EE

Fixes https://github.com/ansible/vscode-ansible/issues/148

*  Refactor ansibleLint service to use CommandRunner class
   which encapsulates logic to run command either on local system or
   within EE
*  Update runCommand API to accept mountPath parameter which is
   passed to `wrapContainerArgs` method that handles creating
   a command to run container with appropriate volumne mounts

* refactor ansiblePlaybook service to use CommandRunner class

* fix review comment on ansible-lint executable path

* remove ununsed import

* fix review comments

* use ternary operation within getAnsibleCommandExecPath function

* Update logic to check ansible-lint installed or not

*  Move `getExecutablePath` function from `utils/misc.ts` to
   `CommandRunner` class which handles fetching the executable path
   on local system as well as within execution-environment (if enabled)
*  Update `validationProvider` to reflect the lint availiability changes

* Fix review comments

* Fix return string for
---
 src/providers/validationProvider.ts  | 11 +++++---
 src/services/ansibleLint.ts          | 30 ++++++++++++----------
 src/services/ansiblePlaybook.ts      | 36 +++++++++++++-------------
 src/services/executionEnvironment.ts | 14 ++++++++--
 src/utils/commandRunner.ts           | 38 ++++++++++++++++++++++++----
 src/utils/execPath.ts                | 18 +++++++++++++
 src/utils/misc.ts                    | 20 ---------------
 7 files changed, 105 insertions(+), 62 deletions(-)
 create mode 100644 src/utils/execPath.ts

diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts
index 60fac96e5..371a91191 100644
--- a/src/providers/validationProvider.ts
+++ b/src/providers/validationProvider.ts
@@ -12,7 +12,7 @@ import { TextDocument } from 'vscode-languageserver-textdocument';
 import { ValidationManager } from '../services/validationManager';
 import { WorkspaceFolderContext } from '../services/workspaceManager';
 import { parseAllDocuments } from '../utils/yaml';
-import { getExecutablePath } from '../utils/misc';
+import { CommandRunner } from '../utils/commandRunner';
 
 /**
  * Validates the given document.
@@ -38,8 +38,13 @@ export async function doValidate(
     // full validation with ansible-lint or ansible syntax-check (if ansible-lint is not installed or disabled)
 
     const settings = await context.documentSettings.get(textDocument.uri);
-
-    const lintAvailability = await getExecutablePath(settings.ansibleLint.path);
+    const commandRunner = new CommandRunner(connection, context, settings);
+    const lintExecutable = settings.executionEnvironment.enabled
+      ? 'ansible-lint'
+      : settings.ansibleLint.path;
+    const lintAvailability = await commandRunner.getExecutablePath(
+      lintExecutable
+    );
     console.debug('Path for lint: ', lintAvailability);
 
     if (lintAvailability) {
diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts
index eedc81c1c..896a2a0c9 100644
--- a/src/services/ansibleLint.ts
+++ b/src/services/ansibleLint.ts
@@ -1,9 +1,7 @@
-import * as child_process from 'child_process';
 import { ExecException } from 'child_process';
 import { promises as fs } from 'fs';
 import * as path from 'path';
 import { URI } from 'vscode-uri';
-import { promisify } from 'util';
 import {
   Connection,
   Diagnostic,
@@ -15,9 +13,9 @@ import {
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { parseAllDocuments } from 'yaml';
 import { IAnsibleLintConfig } from '../interfaces/ansibleLintConfig';
-import { fileExists, hasOwnProperty, withInterpreter } from '../utils/misc';
+import { fileExists, hasOwnProperty } from '../utils/misc';
 import { WorkspaceFolderContext } from './workspaceManager';
-const exec = promisify(child_process.exec);
+import { CommandRunner } from '../utils/commandRunner';
 
 /**
  * Acts as and interface to ansible-lint and a cache of its output.
@@ -54,7 +52,7 @@ export class AnsibleLint {
     let diagnostics: Map = new Map();
 
     const workingDirectory = URI.parse(this.context.workspaceFolder.uri).path;
-
+    const mountPaths = new Set([workingDirectory]);
     const settings = await this.context.documentSettings.get(textDocument.uri);
 
     if (!settings.ansibleLint.enabled) {
@@ -78,11 +76,13 @@ export class AnsibleLint {
         if (ansibleLintConfigFile) {
           ansibleLintConfigPath = URI.parse(ansibleLintConfigFile).path;
           linterArguments = `${linterArguments} -c "${ansibleLintConfigPath}"`;
+          mountPaths.add(path.dirname(ansibleLintConfigPath));
         }
       }
       linterArguments = `${linterArguments} --offline --nocolor -f codeclimate`;
 
       const docPath = URI.parse(textDocument.uri).path;
+      mountPaths.add(path.dirname(docPath));
       let progressTracker;
       if (this.useProgressTracker) {
         progressTracker = await this.connection.window.createWorkDoneProgress();
@@ -92,6 +92,12 @@ export class AnsibleLint {
         ansibleLintConfigPath
       );
 
+      const commandRunner = new CommandRunner(
+        this.connection,
+        this.context,
+        settings
+      );
+
       try {
         if (progressTracker) {
           progressTracker.begin(
@@ -101,18 +107,14 @@ export class AnsibleLint {
           );
         }
 
-        const [command, env] = withInterpreter(
-          settings.ansibleLint.path,
+        // get Ansible configuration
+        const result = await commandRunner.runCommand(
+          'ansible-lint',
           `${linterArguments} "${docPath}"`,
-          settings.python.interpreterPath,
-          settings.python.activationScript
+          workingDirectory,
+          mountPaths
         );
 
-        const result = await exec(command, {
-          encoding: 'utf-8',
-          cwd: workingDirectory,
-          env: env,
-        });
         diagnostics = this.processReport(
           result.stdout,
           await ansibleLintConfigPromise,
diff --git a/src/services/ansiblePlaybook.ts b/src/services/ansiblePlaybook.ts
index d74a9e63f..544f1e9a6 100644
--- a/src/services/ansiblePlaybook.ts
+++ b/src/services/ansiblePlaybook.ts
@@ -1,6 +1,6 @@
 import * as child_process from 'child_process';
+import * as path from 'path';
 import { URI } from 'vscode-uri';
-import { promisify } from 'util';
 import {
   Connection,
   Diagnostic,
@@ -9,10 +9,8 @@ import {
   Range,
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
-import { withInterpreter } from '../utils/misc';
 import { WorkspaceFolderContext } from './workspaceManager';
-
-const exec = promisify(child_process.exec);
+import { CommandRunner } from '../utils/commandRunner';
 
 /**
  * Acts as an interface to ansible-playbook command.
@@ -54,7 +52,7 @@ export class AnsiblePlaybook {
         };
 
     const workingDirectory = URI.parse(this.context.workspaceFolder.uri).path;
-
+    const mountPaths = new Set([workingDirectory, path.dirname(docPath)]);
     const settings = await this.context.documentSettings.get(textDocument.uri);
 
     progressTracker.begin(
@@ -63,19 +61,19 @@ export class AnsiblePlaybook {
       'Processing files...'
     );
 
-    const [command, env] = withInterpreter(
-      `${settings.ansible.path}-playbook`,
-      `${docPath} --syntax-check`,
-      settings.python.interpreterPath,
-      settings.python.activationScript
+    const commandRunner = new CommandRunner(
+      this.connection,
+      this.context,
+      settings
     );
-
     try {
-      await exec(command, {
-        encoding: 'utf-8',
-        cwd: workingDirectory,
-        env: env,
-      });
+      // run ansible playbook syntax-check
+      await commandRunner.runCommand(
+        'ansible-playbook',
+        `${docPath} --syntax-check`,
+        workingDirectory,
+        mountPaths
+      );
     } catch (error) {
       if (error instanceof Error) {
         const execError = error as child_process.ExecException & {
@@ -84,11 +82,13 @@ export class AnsiblePlaybook {
           stderr: string;
         };
 
-        // This is the regex to extract the filename, line and column number from the strerr produced by syntax-check command
+        // This is the regex to extract the filename, line and column number from the stderr produced by syntax-check command
         const ansibleSyntaxCheckRegex =
           /The error appears to be in '(?.*)': line (?\d+), column (?\d+)/;
 
-        const filteredErrorMessage = ansibleSyntaxCheckRegex.exec(execError.stderr);
+        const filteredErrorMessage = ansibleSyntaxCheckRegex.exec(
+          execError.stderr
+        );
 
         diagnostics = filteredErrorMessage
           ? this.processReport(
diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts
index 3c4a461df..790159247 100644
--- a/src/services/executionEnvironment.ts
+++ b/src/services/executionEnvironment.ts
@@ -129,7 +129,8 @@ export class ExecutionEnvironment {
         );
       } else {
         if (this.useProgressTracker) {
-          progressTracker = await this.connection.window.createWorkDoneProgress();
+          progressTracker =
+            await this.connection.window.createWorkDoneProgress();
         }
         if (progressTracker) {
           progressTracker.begin(
@@ -188,7 +189,7 @@ export class ExecutionEnvironment {
     }
   }
 
-  public wrapContainerArgs(command: string): string {
+  public wrapContainerArgs(command: string, mountPaths?: Set): string {
     const workspaceFolderPath = URI.parse(
       this.context.workspaceFolder.uri
     ).path;
@@ -199,6 +200,15 @@ export class ExecutionEnvironment {
     containerCommand.push(
       ...['-v', `${workspaceFolderPath}:${workspaceFolderPath}`]
     );
+
+    for (const mountPath of mountPaths || []) {
+      const volumeMountPath = `${mountPath}:${mountPath}`;
+      if (containerCommand.includes(volumeMountPath)) {
+        continue;
+      }
+      containerCommand.push('-v', volumeMountPath);
+    }
+
     if (this._container_engine === 'podman') {
       // container namespace stuff
       containerCommand.push('--group-add=root');
diff --git a/src/utils/commandRunner.ts b/src/utils/commandRunner.ts
index c0f72409c..285e38e1f 100644
--- a/src/utils/commandRunner.ts
+++ b/src/utils/commandRunner.ts
@@ -1,7 +1,7 @@
-import * as path from 'path';
 import { URI } from 'vscode-uri';
 import { Connection } from 'vscode-languageserver';
 import { withInterpreter, asyncExec } from './misc';
+import { getAnsibleCommandExecPath } from './execPath';
 import { WorkspaceFolderContext } from '../services/workspaceManager';
 import { ExtensionSettings } from '../interfaces/extensionSettings';
 
@@ -23,7 +23,8 @@ export class CommandRunner {
   public async runCommand(
     executable: string,
     args: string,
-    workingDirectory?: string
+    workingDirectory?: string,
+    mountPaths?: Set
   ): Promise<{
     stdout: string;
     stderr: string;
@@ -38,7 +39,7 @@ export class CommandRunner {
     if (executable.startsWith('ansible')) {
       executablePath = isEEEnabled
         ? executable
-        : path.join(path.dirname(this.settings.ansible.path), executable);
+        : getAnsibleCommandExecPath(executable, this.settings);
     } else {
       executablePath = executable;
     }
@@ -52,9 +53,12 @@ export class CommandRunner {
         this.settings.python.activationScript
       );
     } else {
-      // prepare command executing env run
+      // prepare command and env for execution environment run
       const executionEnvironment = await this.context.executionEnvironment;
-      command = executionEnvironment.wrapContainerArgs(`${executable} ${args}`);
+      command = executionEnvironment.wrapContainerArgs(
+        `${executable} ${args}`,
+        mountPaths
+      );
       runEnv = undefined;
     }
 
@@ -69,4 +73,28 @@ export class CommandRunner {
 
     return result;
   }
+
+  /**
+   * A method to return the path to the provided executable
+   * @param executable String representing the name of the executable
+   * @returns Complete path of the executable (string) or undefined depending upon the presence of the executable
+   */
+  public async getExecutablePath(
+    executable: string
+  ): Promise | undefined {
+    try {
+      const executablePath = await this.runCommand('which', executable);
+      return executablePath.stdout.trim();
+    } catch (error) {
+      console.log(error);
+    }
+
+    try {
+      const executablePath = await this.runCommand('whereis', executable);
+      const outParts = executablePath.stdout.split(':');
+      return outParts.length >= 2 ? outParts[1].trim() : undefined;
+    } catch (error) {
+      console.log(error);
+    }
+  }
 }
diff --git a/src/utils/execPath.ts b/src/utils/execPath.ts
new file mode 100644
index 000000000..6129f8e84
--- /dev/null
+++ b/src/utils/execPath.ts
@@ -0,0 +1,18 @@
+// utils function to resolve executable path
+import * as path from 'path';
+import { ExtensionSettings } from '../interfaces/extensionSettings';
+
+/**
+ * A method to return the path to the provided executable
+ * @param name String representing the name of the ansible executable
+ * @param settings The settings received from client
+ * @returns Complete path of the ansible executable (string)
+ */
+export function getAnsibleCommandExecPath(
+  name: string,
+  settings: ExtensionSettings
+): string {
+  return name === 'ansible-lint'
+    ? settings.ansibleLint.path
+    : path.join(path.dirname(settings.ansible.path), name);
+}
diff --git a/src/utils/misc.ts b/src/utils/misc.ts
index 01cfec58a..1337002c7 100644
--- a/src/utils/misc.ts
+++ b/src/utils/misc.ts
@@ -81,23 +81,3 @@ export function withInterpreter(
     return [command, undefined];
   }
 }
-
-/**
- * A method to return the path to the provided executable
- * @param executable String representing the name of the executable
- * @returns Complete path of the executable (string) or undefined depending updon the presence of the executable
- */
-export async function getExecutablePath(
-  executable: string
-): Promise | undefined {
-  const exec = promisify(child_process.exec);
-
-  try {
-    const executablePath = await exec(`which ${executable}`, {
-      encoding: 'utf-8',
-    });
-    return executablePath.stdout;
-  } catch (error) {
-    return;
-  }
-}

From 3e1fe0131eb8e909d23b87b89a47235be0fd9606 Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko 
Date: Thu, 14 Oct 2021 02:13:44 +0200
Subject: [PATCH 112/558] Implement release CD via `workflow_dispatch` (#65)

---
 .github/workflows/ci.yml | 305 ++++++++++++++++++++++++++++++++++++---
 1 file changed, 283 insertions(+), 22 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 283b6ebc1..bcd2670f0 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -4,9 +4,145 @@ name: CI
 on:
   pull_request:
   push:
+  workflow_dispatch:
+    inputs:
+      release-version:
+        # github.event_name == 'workflow_dispatch'
+        # && github.event.inputs.release-version
+        description: >-
+          Target Semver-compliant version to release.
+          Please, don't prepend `v`.
+        required: true
+      release-commitish:
+        # github.event_name == 'workflow_dispatch'
+        # && github.event.inputs.release-commitish
+        default: ''
+        description: >-
+          The commit to be released to Npmjs and tagged
+          in Git as `release-version`. Normally, you
+          should keep this empty.
+      YOLO:
+        default: false
+        description: >-
+          Flag whether test results should block the
+          release (true/false). Only use this under
+          extraordinary circumstances to ignore the
+          test failures and cut the release regardless.
 
 jobs:
 
+  pre-setup:
+    name: Pre-set global build settings
+    runs-on: Ubuntu-latest
+    defaults:
+      run:
+        shell: python
+    outputs:
+      dist-version: >-
+        ${{
+            steps.request-check.outputs.release-requested == 'true'
+            && github.event.inputs.release-version
+            || steps.scm-version.outputs.dist-version
+        }}
+      dist-public-version: >-
+        ${{
+            steps.request-check.outputs.release-requested == 'true'
+            && github.event.inputs.release-version
+            || steps.scm-version.outputs.dist-public-version
+        }}
+      is-untagged-devel: >-
+        ${{ steps.untagged-check.outputs.is-untagged-devel || false }}
+      release-requested: >-
+        ${{
+            steps.request-check.outputs.release-requested || false
+        }}
+      git-tag: ${{ steps.git-tag.outputs.tag }}
+      tarball-artifact-name: ${{ steps.artifact-name.outputs.filename }}
+      version-patch-name: ${{ steps.patch-name.outputs.filename }}
+    steps:
+    - name: Switch to using Python 3.10 by default
+      uses: actions/setup-python@v2.2.2
+      with:
+        python-version: '3.10'
+    - name: >-
+        Mark the build as untagged '${{
+            github.event.repository.default_branch
+        }}' branch build
+      id: untagged-check
+      if: >-
+        github.event_name == 'push' &&
+        github.ref == format(
+          'refs/heads/{0}', github.event.repository.default_branch
+        )
+      run: >-
+        print('::set-output name=is-untagged-devel::true')
+    - name: Mark the build as "release request"
+      id: request-check
+      if: github.event_name == 'workflow_dispatch'
+      run: >-
+        print('::set-output name=release-requested::true')
+    - name: Check out src from Git
+      if: >-
+        steps.request-check.outputs.release-requested != 'true'
+      uses: actions/checkout@v2.3.4
+      with:
+        fetch-depth: 0  # To have all the tags
+        ref: ${{ github.event.inputs.release-commitish }}
+    - name: Drop Git tags from HEAD for non-tag-create events
+      if: >-
+        steps.request-check.outputs.release-requested != 'true'
+      run: >-
+        git tag --points-at HEAD
+        |
+        xargs git tag --delete
+      shell: bash
+    - name: Set up versioning prerequisites
+      if: >-
+        steps.request-check.outputs.release-requested != 'true'
+      run: >-
+        python -m
+        pip install
+        --user
+        dunamai
+      shell: bash
+    - name: Set the current dist version
+      if: steps.request-check.outputs.release-requested != 'true'
+      id: scm-version
+      run: |
+        import dunamai
+        scm_ver = dunamai.Version.from_git()
+        ver = scm_ver.serialize(style=dunamai.Style.SemVer)
+        ver_no_local = scm_ver.serialize(
+            metadata=False,
+            style=dunamai.Style.SemVer,
+        )
+        print(f'::set-output name=dist-version::{ver}')
+        print(f'::set-output name=dist-public-version::{ver_no_local}')
+    - name: Set the target Git tag
+      id: git-tag
+      run: >-
+        print('::set-output name=tag::v${{
+            steps.request-check.outputs.release-requested == 'true'
+            && github.event.inputs.release-version
+            || steps.scm-version.outputs.dist-version
+        }}')
+    - name: Set the expected tarball artifact name
+      id: artifact-name
+      run: |
+        print('::set-output name=filename::ansible-ansible-language-server-${{
+            steps.request-check.outputs.release-requested == 'true'
+            && github.event.inputs.release-version
+            || steps.scm-version.outputs.dist-public-version
+        }}.tgz')
+    - name: Set the expected version patch filename
+      id: patch-name
+      run: |
+        print('::set-output name=filename::0001-Release-${{
+            steps.request-check.outputs.release-requested == 'true'
+            && github.event.inputs.release-version
+            || steps.scm-version.outputs.dist-public-version
+        }}-from-GitHub-Actions-CI-CD.patch')
+
   lint:
     runs-on: Ubuntu-latest
     steps:
@@ -23,17 +159,44 @@ jobs:
 
   build:
     name: Build
+    needs:
+    - pre-setup  # transitive, for accessing settings
 
     runs-on: Ubuntu-latest
 
     steps:
     - name: Fetch the src
       uses: actions/checkout@v2
+    - name: Setup git user as [bot]
+      run: >
+        git config --local user.email
+        'github-actions[bot]@users.noreply.github.com'
+
+        git config --local user.name 'github-actions[bot]'
     - name: >-
         Set up NodeJS ${{ matrix.node-version }}
         with the global NPM registry
       uses: actions/setup-node@v2
 
+    - name: >-
+        Bump the package version to ${{
+          needs.pre-setup.outputs.dist-version
+        }}
+      run: >-
+        npm version '${{ needs.pre-setup.outputs.dist-version }}'
+        -m 'Release %s from GitHub Actions CI/CD'
+    - name: Log how the metadata has unchanged
+      run: git show --color=always
+    - name: Create a version bump patch from the last Git commit
+      run: git format-patch -1 HEAD
+    - name: Verify that expected patch got created
+      run: ls -1 ${{ needs.pre-setup.outputs.version-patch-name }}
+    - name: Save the package bump patch as a GHA artifact
+      uses: actions/upload-artifact@v2
+      with:
+        name: npm-package-bump-patch
+        path: ${{ needs.pre-setup.outputs.version-patch-name }}
+
     - name: Build a package tarball artifact
       run: npm pack
 
@@ -41,12 +204,12 @@ jobs:
       uses: actions/upload-artifact@v2
       with:
         name: npm-package-tarball
-        path: >-
-          ansible-ansible-language-server-*.tgz
+        path: ${{ needs.pre-setup.outputs.tarball-artifact-name }}
 
   test:
     needs:
     - build
+    - pre-setup  # transitive, for accessing settings
 
     runs-on: ${{ matrix.os }}-latest
 
@@ -69,7 +232,16 @@ jobs:
           node-version: 12
           os: Windows
 
-    continue-on-error: ${{ matrix.experimental }}
+    continue-on-error: >-
+      ${{
+          (
+            (
+              needs.pre-setup.outputs.release-requested == 'true' &&
+              !toJSON(github.event.inputs.YOLO)
+            ) ||
+            matrix.experimental
+          ) && true || false
+      }}
 
     steps:
     - name: Fetch the GHA artifact with the package tarball
@@ -83,10 +255,13 @@ jobs:
       with:
         node-version: ${{ matrix.node-version }}
         registry-url: https://registry.npmjs.org
-    - name: Install the package
-      run: npm install -g ansible-ansible-language-server-*.tgz
+    - name: >-
+        Install the `${{
+          needs.pre-setup.outputs.tarball-artifact-name
+        }}` package
+      run: npm install -g ${{ needs.pre-setup.outputs.tarball-artifact-name }}
       shell: bash
-    - name: Uninstall the package
+    - name: Uninstall the `@ansible/ansible-language-server` package
       run: npm uninstall -g @ansible/ansible-language-server
       shell: bash
 
@@ -98,56 +273,142 @@ jobs:
       uses: actions/checkout@v2
       with:
         fetch-depth: 1
+        ref: ${{ github.event.inputs.release-commitish }}
+    - name: Setup git user as [bot]
+      run: >
+        git config --local user.email
+        'github-actions[bot]@users.noreply.github.com'
+
+        git config --local user.name 'github-actions[bot]'
+    - name: Fetch the GHA artifact with the version patch
+      uses: actions/download-artifact@v2
+      with:
+        name: npm-package-bump-patch
+
+    - name: Apply the version patch
+      run: git am ${{ needs.pre-setup.outputs.version-patch-name }}
+    - name: Drop the version patch file
+      run: rm -fv ${{ needs.pre-setup.outputs.version-patch-name }}
+      shell: bash
 
     - name: Populate the test dependencies
       run: npm ci
     - name: Run testing against the Git checkout
       run: npm test
 
-  publish:
-    environment: release
+  publish-npmjs:
+    name: Publish to Npmjs
+    if: fromJSON(needs.pre-setup.outputs.release-requested)
+    environment:
+      name: release
+      url: >-
+        https://www.npmjs.com/package/@ansible/ansible-language-server/v/${{
+          needs.pre-setup.outputs.dist-public-version
+        }}
     needs:
+    - pre-setup  # transitive, for accessing settings
     - test
 
     runs-on: Ubuntu-latest
 
-    strategy:
-      matrix:
-        node-version:
-        - 16.x
-
     steps:
     - name: Fetch the GHA artifact with the package tarball
-      uses: actions/upload-artifact@v2
+      uses: actions/download-artifact@v2
       with:
         name: npm-package-tarball
-        path: .
 
     - name: >-
         Set up NodeJS ${{ matrix.node-version }}
         with the global NPM registry
       uses: actions/setup-node@v2
       with:
-        node-version: ${{ matrix.node-version }}
         registry-url: https://registry.npmjs.org
+
     - name: >-
         Publish the prebuilt and tested package
+        `${{ needs.pre-setup.outputs.tarball-artifact-name }}`
         to public NPM Registry
-      run: npm publish ansible-ansible-language-server-*.tgz
+      run: >-
+        npm publish
+        --public
+        ${{ needs.pre-setup.outputs.tarball-artifact-name }}
       env:
         NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
 
-    - name: >-
-        Set up NodeJS ${{ matrix.node-version }}
-        with the GitHub Packages NPM registry
+  publish-ghpnr:
+    name: Publish to GHPNR
+    if: >-
+      fromJSON(needs.pre-setup.outputs.is-untagged-devel) ||
+      fromJSON(needs.pre-setup.outputs.release-requested)
+    needs:
+    - pre-setup  # transitive, for accessing settings
+    - test
+    permissions:
+      contents: read
+      packages: write
+
+    runs-on: Ubuntu-latest
+
+    steps:
+    - name: Fetch the GHA artifact with the package tarball
+      uses: actions/download-artifact@v2
+      with:
+        name: npm-package-tarball
+
+    - name: Set up NodeJS with the GitHub Packages NPM registry
       uses: actions/setup-node@v2
       with:
-        node-version: ${{ matrix.node-version }}
         registry-url: https://npm.pkg.github.com
+
     - name: >-
         Publish the prebuilt and tested package
+        `${{ needs.pre-setup.outputs.tarball-artifact-name }}`
         to GitHub Packages NPM Registry
-      run: npm publish ansible-ansible-language-server-*.tgz
+      run: >-
+        npm publish
+        --public
+        ${{ needs.pre-setup.outputs.tarball-artifact-name }}
       env:
         NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+  post-release-repo-update:
+    name: Publish post-release meta
+    needs:
+    - pre-setup  # transitive, for accessing settings
+    - publish-npmjs
+
+    runs-on: Ubuntu-latest
+
+    steps:
+    - name: Fetch the src snapshot
+      uses: actions/checkout@v2
+      with:
+        fetch-depth: 1
+        ref: ${{ github.event.inputs.release-commitish }}
+    - name: Setup git user as [bot]
+      run: >
+        git config --local user.email
+        'github-actions[bot]@users.noreply.github.com'
+
+        git config --local user.name 'github-actions[bot]'
+    - name: Fetch the GHA artifact with the version patch
+      uses: actions/download-artifact@v2
+      with:
+        name: npm-package-bump-patch
+
+    - name: Apply the version patch
+      run: git am ${{ needs.pre-setup.outputs.version-patch-name }}
+    - name: Drop the version patch file
+      run: rm -fv ${{ needs.pre-setup.outputs.version-patch-name }}
+
+    - name: >-
+        Tag the release in the local Git repo
+        as ${{ needs.pre-setup.outputs.git-tag }}
+      run: git tag ${{ needs.pre-setup.outputs.version-patch-name }} HEAD
+    - name: >-
+        Push ${{ needs.pre-setup.outputs.git-tag }} tag corresponding
+        to the just published release back to GitHub
+      if: fromJSON(needs.pre-setup.outputs.release-requested)
+      run: >-
+        git push --atomic origin '${{ needs.pre-setup.outputs.git-tag }}'
 ...

From 77034ee592081558766edc4db933b2149bfa8781 Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko 
Date: Thu, 14 Oct 2021 02:46:23 +0200
Subject: [PATCH 113/558] Replace `--public` w/ `--access public` (#66)

---
 .github/workflows/ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bcd2670f0..b8e1e13e8 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -330,7 +330,7 @@ jobs:
         to public NPM Registry
       run: >-
         npm publish
-        --public
+        --access public
         ${{ needs.pre-setup.outputs.tarball-artifact-name }}
       env:
         NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -366,7 +366,7 @@ jobs:
         to GitHub Packages NPM Registry
       run: >-
         npm publish
-        --public
+        --access public
         ${{ needs.pre-setup.outputs.tarball-artifact-name }}
       env:
         NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

From 8dd9ff62375ef5857244f3357939d4a3b4a93aaa Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko 
Date: Thu, 14 Oct 2021 03:00:57 +0200
Subject: [PATCH 114/558] Fix the Git tag used post-release (#67)

---
 .github/workflows/ci.yml | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b8e1e13e8..6c7b8090d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -404,11 +404,10 @@ jobs:
     - name: >-
         Tag the release in the local Git repo
         as ${{ needs.pre-setup.outputs.git-tag }}
-      run: git tag ${{ needs.pre-setup.outputs.version-patch-name }} HEAD
+      run: git tag ${{ needs.pre-setup.outputs.git-tag }} HEAD
     - name: >-
         Push ${{ needs.pre-setup.outputs.git-tag }} tag corresponding
         to the just published release back to GitHub
-      if: fromJSON(needs.pre-setup.outputs.release-requested)
       run: >-
         git push --atomic origin '${{ needs.pre-setup.outputs.git-tag }}'
 ...

From 882378cd0c125ffe7469c3c8eda22c51bb2333a1 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Thu, 14 Oct 2021 16:37:21 +0100
Subject: [PATCH 115/558] fix: ensure npm archive includes out/server (#69)

---
 .gitignore   | 1 +
 package.json | 1 +
 2 files changed, 2 insertions(+)

diff --git a/.gitignore b/.gitignore
index 4fa903cac..2d9003989 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 .ignore/
 node_modules
 *.vsix
+*.tgz
 out/server
 tsconfig.tsbuildinfo
diff --git a/package.json b/package.json
index 34c108c20..50a90ec23 100644
--- a/package.json
+++ b/package.json
@@ -74,6 +74,7 @@
     "clean": "rimraf out/server && rimraf lib",
     "compile": "tsc -p .",
     "lint": "npm ci && pre-commit run -a",
+    "prepack": "npm ci && npm run compile",
     "watch": "tsc --watch -p .",
     "test": "mocha --require ts-node/register './test/**/*.ts'",
     "check-dependencies": "node ./scripts/check-dependencies.js"

From e40ada8bff6bfcc05d32050425e1b66f3f028159 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Thu, 14 Oct 2021 17:18:26 +0100
Subject: [PATCH 116/558] chore: avoid warnings related to pip version (#70)

---
 .github/workflows/ci.yml | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 6c7b8090d..d9cc9dcaf 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -99,11 +99,10 @@ jobs:
     - name: Set up versioning prerequisites
       if: >-
         steps.request-check.outputs.release-requested != 'true'
-      run: >-
-        python -m
-        pip install
-        --user
-        dunamai
+      run: |
+        python -m pip config set global.disable-pip-version-check true
+        python -m pip install --user --upgrade pip
+        python -m pip install --user dunamai
       shell: bash
     - name: Set the current dist version
       if: steps.request-check.outputs.release-requested != 'true'
@@ -152,7 +151,9 @@ jobs:
       uses: actions/setup-node@v2
     - name: Install dependencies
       run: |
-        pip3 install -r test-requirements.txt
+        python -m pip config set global.disable-pip-version-check true
+        python -m pip install --user --upgrade pip
+        python -m pip install -r test-requirements.txt
         npm ci
     - name: npm run lint
       run: npm run lint

From 4f5246722b14323a8f290b0747cb8f0ec448feaa Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Thu, 14 Oct 2021 17:32:31 +0100
Subject: [PATCH 117/558] chore: remove experimental flag from jobs (#71)

---
 .github/workflows/ci.yml | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d9cc9dcaf..1e5ba2b97 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -216,8 +216,6 @@ jobs:
 
     strategy:
       matrix:
-        experimental:
-        - false
         node-version:
         - 16.x
         - 14.x
@@ -226,11 +224,9 @@ jobs:
         - Ubuntu
         - macOS
         include:
-        - experimental: true
-          node-version: 16
+        - node-version: 16
           os: Windows
-        - experimental: true
-          node-version: 12
+        - node-version: 12
           os: Windows
 
     continue-on-error: >-

From 90dce0aa49cd8fb732824f2f7448e512bd1b1514 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Thu, 14 Oct 2021 17:38:40 +0100
Subject: [PATCH 118/558] chore: simplify test jobs names (#72)

---
 .github/workflows/ci.yml | 41 ++++++++++++++++++++++++++++------------
 1 file changed, 29 insertions(+), 12 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1e5ba2b97..c6c0bc760 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -212,22 +212,39 @@ jobs:
     - build
     - pre-setup  # transitive, for accessing settings
 
-    runs-on: ${{ matrix.os }}-latest
+    name: ${{ matrix.name }}
+    runs-on: ${{ matrix.os }}
 
     strategy:
       matrix:
-        node-version:
-        - 16.x
-        - 14.x
-        - 12.x
-        os:
-        - Ubuntu
-        - macOS
         include:
-        - node-version: 16
-          os: Windows
-        - node-version: 12
-          os: Windows
+        # linux
+        - name: test-node12-linux
+          node-version: 12
+          os: ubuntu-latest
+        - name: test-node14-linux
+          node-version: 14
+          os: ubuntu-latest
+        - name: test-node16-linux
+          node-version: 16
+          os: ubuntu-latest
+        # macos
+        - name: test-node12-macos
+          node-version: 12
+          os: macos-11
+        - name: test-node14-macos
+          node-version: 14
+          os: macos-11
+        - name: test-node16-macos
+          node-version: 16
+          os: macos-11
+        # windows
+        - name: test-node12-windows
+          node-version: 12
+          os: windows-latest
+        - name: test-node16-windows
+          node-version: 16
+          os: windows-latest
 
     continue-on-error: >-
       ${{

From 250bf1a0d8e27ab1e72709d32d1395047eab30fc Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Fri, 15 Oct 2021 14:04:43 +0100
Subject: [PATCH 119/558] fix: drop unused files from npm package (#73)

---
 .npmignore | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/.npmignore b/.npmignore
index ad888e542..400ea9335 100644
--- a/.npmignore
+++ b/.npmignore
@@ -1,12 +1,21 @@
-/src
-/test
+*.tgz
 .editorconfig
-Jenkinsfile
-tsconfig.json
-.nyc_output/
-coverage/
-.vscode/
+.eslintrc.json
+.gitattributes
 .github/
-.eslintrc.js
+.nyc_output/
+.pre-commit-config.yaml
 .prettierrc.json
+.prettierrc.yaml
 .travis.yml
+.vscode/
+.vscodeignore
+/coverage/
+/images/
+/out/server/test/
+/scripts/
+/src
+/test/
+Jenkinsfile
+test-requirements.txt
+tsconfig.json

From 0aaf1b72d59a6af05f2f0875445325621a1ee0e4 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Fri, 15 Oct 2021 16:45:35 +0100
Subject: [PATCH 120/558] chore: avoid pip version checks (#74)

---
 .github/workflows/ci.yml | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c6c0bc760..2beed37ce 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -37,6 +37,8 @@ jobs:
     defaults:
       run:
         shell: python
+    env:
+      PIP_DISABLE_PIP_VERSION_CHECK: "1"
     outputs:
       dist-version: >-
         ${{
@@ -100,7 +102,6 @@ jobs:
       if: >-
         steps.request-check.outputs.release-requested != 'true'
       run: |
-        python -m pip config set global.disable-pip-version-check true
         python -m pip install --user --upgrade pip
         python -m pip install --user dunamai
       shell: bash
@@ -143,6 +144,8 @@ jobs:
         }}-from-GitHub-Actions-CI-CD.patch')
 
   lint:
+    env:
+      PIP_DISABLE_PIP_VERSION_CHECK: "1"
     runs-on: Ubuntu-latest
     steps:
     - name: Fetch the src
@@ -151,7 +154,6 @@ jobs:
       uses: actions/setup-node@v2
     - name: Install dependencies
       run: |
-        python -m pip config set global.disable-pip-version-check true
         python -m pip install --user --upgrade pip
         python -m pip install -r test-requirements.txt
         npm ci

From a4a4a99e46e35c8c7d56c7a2873279b58640d582 Mon Sep 17 00:00:00 2001
From: Ganesh Nalawade 
Date: Sat, 16 Oct 2021 23:41:21 +0530
Subject: [PATCH 121/558] chore: update ansible-language-server version (#68)

Co-authored-by: Sorin Sbarnea 
Co-authored-by: Sviatoslav Sydorenko 
---
 package-lock.json | 4 ++--
 package.json      | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index a2f83c1a8..203cfda65 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "@ansible/ansible-language-server",
-  "version": "0.1.1-0",
+  "version": "0.2.0-beta",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "@ansible/ansible-language-server",
-      "version": "0.1.1-0",
+      "version": "0.2.0-beta",
       "license": "MIT",
       "dependencies": {
         "@flatten-js/interval-tree": "^1.0.14",
diff --git a/package.json b/package.json
index 50a90ec23..d450d5d60 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "displayName": "Ansible",
   "description": "Ansible language server",
   "license": "MIT",
-  "version": "0.1.1-0",
+  "version": "0.2.0-beta",
   "contributors": [
     {
       "name": "Tomasz Maciążek",

From 922eada812852f07b7be976abfa44eef91545a8d Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Mon, 18 Oct 2021 10:33:49 +0100
Subject: [PATCH 122/558] chore: activate ack shared workflow (#77)

---
 .github/workflows/ack.yml | 9 +++++++++
 1 file changed, 9 insertions(+)
 create mode 100644 .github/workflows/ack.yml

diff --git a/.github/workflows/ack.yml b/.github/workflows/ack.yml
new file mode 100644
index 000000000..5880addda
--- /dev/null
+++ b/.github/workflows/ack.yml
@@ -0,0 +1,9 @@
+# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml
+name: ack
+on:
+  pull_request_target:
+    types: [opened, labeled, unlabeled, synchronize]
+
+jobs:
+  ack:
+    uses: ansible-community/devtools/.github/workflows/ack.yml@main

From 7f46eb2d87ec032627566c93813e9b18dae3c8db Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Mon, 18 Oct 2021 10:36:41 +0100
Subject: [PATCH 123/558] fix: sort slice() exception bug (#76)

---
 src/services/ansibleConfig.ts | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/services/ansibleConfig.ts b/src/services/ansibleConfig.ts
index e64a555c9..c0090bfd6 100644
--- a/src/services/ansibleConfig.ts
+++ b/src/services/ansibleConfig.ts
@@ -40,7 +40,11 @@ export class AnsibleConfig {
         config,
         (_, key) => key.substring(0, key.indexOf('(')) // remove config source in parenthesis
       );
-      this._collection_paths = parsePythonStringArray(config.COLLECTIONS_PATHS);
+      if (typeof config.COLLECTIONS_PATHS === 'string') {
+        parsePythonStringArray(config.COLLECTIONS_PATHS);
+      } else {
+        this._collection_paths = [];
+      }
 
       // get Ansible basic information
       const ansibleVersionResult = await commandRunner.runCommand(
@@ -99,8 +103,8 @@ export class AnsibleConfig {
   }
 }
 
-function parsePythonStringArray(array: string) {
-  array = array.slice(1, array.length - 1); // remove []
-  const quoted_elements = array.split(',').map((e) => e.trim());
+function parsePythonStringArray(string_list: string): string[] {
+  const cleaned_str = string_list.slice(1, string_list.length - 1); // remove []
+  const quoted_elements = cleaned_str.split(',').map((e) => e.trim());
   return quoted_elements.map((e) => e.slice(1, e.length - 1));
 }

From 8dc62544283a29fd016d2fc4d36bd2c42932429b Mon Sep 17 00:00:00 2001
From: Ganesh Nalawade 
Date: Mon, 18 Oct 2021 16:58:17 +0530
Subject: [PATCH 124/558] doc: update readme file with language server settings
 (#75)

Co-authored-by: Sorin Sbarnea 
---
 README.md | 94 ++++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 62 insertions(+), 32 deletions(-)

diff --git a/README.md b/README.md
index b02fd1a21..cc1d90e18 100644
--- a/README.md
+++ b/README.md
@@ -1,30 +1,34 @@
 # Ansible Language Server
+
 This language server adds support for Ansible and is currently used by the
 following projects:
 
 * [Ansible extension for vscode/codium](https://github.com/ansible/vscode-ansible)
 * [Ansible extension for coc.nvim](https://github.com/yaegassy/coc-ansible)
 
-### Getting started
+## Getting started
 
 1. Install prerequisites:
-   - latest [Visual Studio Code](https://code.visualstudio.com/)
-   - [Node.js](https://nodejs.org/) v12.0.0 or higher
+   * latest [Visual Studio Code](https://code.visualstudio.com/)
+   * [Node.js](https://nodejs.org/) v12.0.0 or higher
 
 2. Fork and clone this repository
 
 3. Install the dependencies
+
    ```bash
    cd ansible-language-server
-   $ npm ci
+   npm ci
    ```
 
 4. Build the language server
+
    ```bash
-   $ npm run compile
+   npm run compile
    ```
 
 5. The new built server is now located in ./out/server/src/server.js.
+
    ```bash
    node /out/server/src/server.js --stdio
    ```
@@ -32,6 +36,7 @@ following projects:
 ## Features
 
 ### Syntax highlighting
+
 ![Syntax highlighting](images/syntax-highlighting.png)
 
 **Ansible keywords**, **module names** and **module options**, as well as
@@ -46,11 +51,13 @@ curly braces.
 > default will do better.
 
 ### Validation
+
 ![YAML validation](images/yaml-validation.gif)
 
 While you type, the syntax of your Ansible scripts is verified and any feedback is provided instantaneously.
 
 #### Integration with ansible-lint
+
 ![Linter support](images/ansible-lint.gif)
 
 On opening and saving a document, `ansible-lint` is executed in the background
@@ -63,20 +70,27 @@ are shown as warnings instead.
 > into the linting process. Any findings reported by `yamllint` will be exposed
 > in VSCode as errors/warnings.
 
+***Note***
+
+If `ansible-lint` is not installed/found or running `ansible-lint` results in error it will fallback to `ansible --syntax-check` for validation.
+
 ### Smart autocompletion
+
 ![Autocompletion](images/smart-completions.gif)
 
 The extension tries to detect whether the cursor is on a play, block or task
 etc. and provides suggestions accordingly. There are also a few other rules that
 improve user experience:
-- the `name` property is always suggested first
-- on module options, the required properties are shown first, and aliases are shown last, otherwise ordering from the documentation is preserved
-- FQCNs (fully qualified collection names) are inserted only when necessary;
+
+* the `name` property is always suggested first
+* on module options, the required properties are shown first, and aliases are shown last, otherwise ordering from the documentation is preserved
+* FQCNs (fully qualified collection names) are inserted only when necessary;
   collections configured with the
   [`collections` keyword]([LINK](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#simplifying-module-names-with-the-collections-keyword))
   are honored. This behavior can be disabled in extension settings.
 
 #### Auto-closing Jinja expressions
+
 ![Easier Jinja expression typing](images/jinja-expression.gif)
 
 When writing a Jinja expression, you only need to type `"{{ `, and it will be
@@ -84,6 +98,7 @@ mirrored behind the cursor (including the space). You can also select the whole
 expression and press `space` to put spaces on both sides of the expression.
 
 ### Documentation reference
+
 ![Documentation on hover](images/hover-documentation-module.png)
 
 Documentation is available on hover for Ansible keywords, modules and module
@@ -91,50 +106,65 @@ options. The extension works on the same principle as `ansible-doc`, providing
 the documentation straight from the Python implementation of the modules.
 
 #### Jump to module code
+
 ![Go to code on Ctrl+click](images/go-to-definition.gif)
 
 You may also open the implementation of any module using the standard *Go to
 Definition* operation, for instance, by clicking on the module name while
 holding `ctrl`/`cmd`.
 
-## Requirements
-- [Ansible 2.9+](https://docs.ansible.com/ansible/latest/index.html)
-- [Ansible Lint](https://ansible-lint.readthedocs.io/en/latest/) (required,
-  unless you disable linter support)
-- [yamllint](https://yamllint.readthedocs.io/en/stable/) (optional)
+## Language Server Settings
 
-For Windows users, this extension works perfectly well with extensions such as
-`Remote - WSL` and `Remote - Containers`.
-
-> If you have any other extension providing language support for Ansible, you might need to uninstall it first.
+The following settings are supported.
 
-## Configuration
-This extension supports multi-root workspaces, and as such, can be configured on
-any level (User, Remote, Workspace and/or Folder).
-
-- `ansible.ansible.path`: Path to the `ansible` executable.
-- `ansible.ansible.useFullyQualifiedCollectionNames`: Toggles use of
+* `ansible.ansible.path`: Path to the `ansible` executable.
+* `ansible.ansible.useFullyQualifiedCollectionNames`: Toggles use of
   fully qualified collection names (FQCN) when inserting a module name.
   Disabling it will only use FQCNs when necessary, that is when the collection
   isn't configured for the task.
-- `ansible.ansibleLint.enabled`: Enables/disables use of `ansible-lint`.
-- `ansible.ansibleLint.path`: Path to the `ansible-lint` executable.
-- `ansible.ansibleLint.arguments`: Optional command line arguments to be
+* `ansible.ansibleLint.arguments`: Optional command line arguments to be
   appended to `ansible-lint` invocation. See `ansible-lint` documentation.
-- `ansible.python.interpreterPath`: Path to the `python`/`python3` executable.
+* `ansible.ansibleLint.enabled`: Enables/disables use of `ansible-lint`.
+* `ansible.ansibleLint.path`: Path to the `ansible-lint` executable.
+* `ansible.ansibleNavigator.path`: Path to the `ansible-navigator` executable.
+* `ansible.ansiblePlaybook.path`: Path to the `ansible-playbook` executable.
+* `ansible.executionEnvironment.containerEngine`: The container engine to be used
+  while running with execution environment. Valid values are `auto`, `podman` and
+  `docker`. For `auto` it will look for `podman` then `docker`.
+* `ansible.executionEnvironment.enabled`: Enable or disable the use of an
+   execution environment.
+* `ansible.executionEnvironment.image`: Specify the name of the execution environment image.
+* `ansible.executionEnvironment.pullPolicy`: Specify the image pull policy. Valid values are `always`,
+  `missing`, `never` and `tag`. Setting `always` will always pull the image when extension is activated or reloaded.
+  Setting `missing` will pull if not locally available. Setting `never` will never pull the image and setting
+  tag will always pull if the image tag is 'latest', otherwise pull if not locally available.
+* `ansible.python.interpreterPath`: Path to the `python`/`python3` executable.
   This setting may be used to make the extension work with `ansible` and
   `ansible-lint` installations in a Python virtual environment.
-- `ansible.python.activationScript`: Path to a custom `activate` script, which
+* `ansible.python.activationScript`: Path to a custom `activate` script, which
   will be used instead of the setting above to run in a Python virtual
   environment.
 
+## Requirements
+
+* [Ansible 2.9+](https://docs.ansible.com/ansible/latest/index.html)
+* [Ansible Lint](https://ansible-lint.readthedocs.io/en/latest/) (required,
+  unless you disable linter support)
+* [yamllint](https://yamllint.readthedocs.io/en/stable/) (optional)
+
+For Windows users, this extension works perfectly well with extensions such as
+`Remote - WSL` and `Remote - Containers`.
+
+> If you have any other extension providing language support for Ansible, you might need to uninstall it first.
+
 ## Known limitations
-- The shorthand syntax for module options (key=value pairs) is not supported.
-- Nested module options are not supported yet.
-- Only Jinja *expressions* inside Ansible YAML files are supported. In order to
+
+* The shorthand syntax for module options (key=value pairs) is not supported.
+* Nested module options are not supported yet.
+* Only Jinja *expressions* inside Ansible YAML files are supported. In order to
   have syntax highlighting of Jinja template files, you'll need to install other
   extension.
-- Jinja *blocks* (inside Ansible YAML files) are not supported yet.
+* Jinja *blocks* (inside Ansible YAML files) are not supported yet.
 
 ## Credit
 

From cafb9994b2c2c621a3972c348cbb94e4fddf79eb Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Mon, 18 Oct 2021 12:51:19 +0100
Subject: [PATCH 125/558] Fix grammar mistakes in the project README (#79)

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index cc1d90e18..199b0fefe 100644
--- a/README.md
+++ b/README.md
@@ -27,7 +27,7 @@ following projects:
    npm run compile
    ```
 
-5. The new built server is now located in ./out/server/src/server.js.
+5. The newly built server is now located in ./out/server/src/server.js.
 
    ```bash
    node /out/server/src/server.js --stdio
@@ -47,7 +47,7 @@ curly braces.
 
 > The screenshots and animations presented in this README have been taken using
 > the One Dark Pro theme. The default VS Code theme will not show the syntax
-> elements as distinctly, unless customized. Virtually any theme other than
+> elements as distinctly unless customized. Virtually any theme other than
 > default will do better.
 
 ### Validation

From 20f8bf65812c949c2db61e14783c4f9817eaa6b2 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Mon, 18 Oct 2021 13:03:13 +0100
Subject: [PATCH 126/558] chore: enable markdownlint (#78)

---
 .pre-commit-config.yaml |  4 ++++
 CHANGELOG.md            |  7 +++++--
 README.md               | 33 +++++++++++++++++++++------------
 syntaxes/README.md      |  1 +
 4 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 5a6afecb9..f849ffcbd 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -66,6 +66,10 @@ repos:
 
       - id: debug-statements
         language_version: python3
+  - repo: https://github.com/igorshubovych/markdownlint-cli
+    rev: v0.29.0
+    hooks:
+    - id: markdownlint
   - repo: https://github.com/pre-commit/mirrors-eslint
     rev: v7.32.0
     hooks:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8d291bd0c..c52a046f1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,7 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
 ## [0.1.0-1] - 2021-07-28
+
 - Update npm package to include out folder
--
+
 ## [0.1.0] - 2021-07-28
-- Initial ansible language server release. Based on the vscode-ansible plugin developed by [Tomasz Maciążek](https://github.com/tomaciazek)
+
+- Initial ansible language server release. Based on the vscode-ansible plugin
+  developed by [Tomasz Maciążek](https://github.com/tomaciazek)
diff --git a/README.md b/README.md
index 199b0fefe..3ef92d06d 100644
--- a/README.md
+++ b/README.md
@@ -54,7 +54,8 @@ curly braces.
 
 ![YAML validation](images/yaml-validation.gif)
 
-While you type, the syntax of your Ansible scripts is verified and any feedback is provided instantaneously.
+While you type, the syntax of your Ansible scripts is verified and any feedback
+is provided instantaneously.
 
 #### Integration with ansible-lint
 
@@ -72,7 +73,8 @@ are shown as warnings instead.
 
 ***Note***
 
-If `ansible-lint` is not installed/found or running `ansible-lint` results in error it will fallback to `ansible --syntax-check` for validation.
+If `ansible-lint` is not installed/found or running `ansible-lint` results in
+error it will fallback to `ansible --syntax-check` for validation.
 
 ### Smart autocompletion
 
@@ -83,7 +85,8 @@ etc. and provides suggestions accordingly. There are also a few other rules that
 improve user experience:
 
 * the `name` property is always suggested first
-* on module options, the required properties are shown first, and aliases are shown last, otherwise ordering from the documentation is preserved
+* on module options, the required properties are shown first, and aliases are
+  shown last, otherwise ordering from the documentation is preserved
 * FQCNs (fully qualified collection names) are inserted only when necessary;
   collections configured with the
   [`collections` keyword]([LINK](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#simplifying-module-names-with-the-collections-keyword))
@@ -93,9 +96,10 @@ improve user experience:
 
 ![Easier Jinja expression typing](images/jinja-expression.gif)
 
-When writing a Jinja expression, you only need to type `"{{ `, and it will be
-mirrored behind the cursor (including the space). You can also select the whole
-expression and press `space` to put spaces on both sides of the expression.
+When writing a Jinja expression, you only need to type `"{{`, and it
+will be mirrored behind the cursor (including the space). You can also select
+the whole expression and press `space` to put spaces on both sides of the
+expression.
 
 ### Documentation reference
 
@@ -133,11 +137,15 @@ The following settings are supported.
   `docker`. For `auto` it will look for `podman` then `docker`.
 * `ansible.executionEnvironment.enabled`: Enable or disable the use of an
    execution environment.
-* `ansible.executionEnvironment.image`: Specify the name of the execution environment image.
-* `ansible.executionEnvironment.pullPolicy`: Specify the image pull policy. Valid values are `always`,
-  `missing`, `never` and `tag`. Setting `always` will always pull the image when extension is activated or reloaded.
-  Setting `missing` will pull if not locally available. Setting `never` will never pull the image and setting
-  tag will always pull if the image tag is 'latest', otherwise pull if not locally available.
+* `ansible.executionEnvironment.image`: Specify the name of the execution
+  environment image.
+* `ansible.executionEnvironment.pullPolicy`: Specify the image pull policy.
+  Valid values are `always`,
+  `missing`, `never` and `tag`. Setting `always` will always pull the image
+  when extension is activated or reloaded.
+  Setting `missing` will pull if not locally available. Setting `never` will
+  never pull the image and setting tag will always pull if the image tag is
+  'latest', otherwise pull if not locally available.
 * `ansible.python.interpreterPath`: Path to the `python`/`python3` executable.
   This setting may be used to make the extension work with `ansible` and
   `ansible-lint` installations in a Python virtual environment.
@@ -155,7 +163,8 @@ The following settings are supported.
 For Windows users, this extension works perfectly well with extensions such as
 `Remote - WSL` and `Remote - Containers`.
 
-> If you have any other extension providing language support for Ansible, you might need to uninstall it first.
+> If you have any other extension providing language support for Ansible, you
+  might need to uninstall it first.
 
 ## Known limitations
 
diff --git a/syntaxes/README.md b/syntaxes/README.md
index b1d0627cc..c0a58dc0c 100644
--- a/syntaxes/README.md
+++ b/syntaxes/README.md
@@ -1,4 +1,5 @@
 # TextMate grammar authoring
+
 TextMate grammars (which VS Code uses for syntax highlighting) are authored in a
 [textual property-list format](https://macromates.com/manual/en/language_grammars).
 This format is much easier to work with than its XML, JSON or even YAML

From c99be37d2e5805ae97ee585b1e5a03a7642443db Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Tue, 19 Oct 2021 11:37:53 +0100
Subject: [PATCH 127/558] fix: collection path regression from #76 (#82)

---
 src/services/ansibleConfig.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/services/ansibleConfig.ts b/src/services/ansibleConfig.ts
index c0090bfd6..fe81045af 100644
--- a/src/services/ansibleConfig.ts
+++ b/src/services/ansibleConfig.ts
@@ -41,7 +41,7 @@ export class AnsibleConfig {
         (_, key) => key.substring(0, key.indexOf('(')) // remove config source in parenthesis
       );
       if (typeof config.COLLECTIONS_PATHS === 'string') {
-        parsePythonStringArray(config.COLLECTIONS_PATHS);
+        this._collection_paths = parsePythonStringArray(config.COLLECTIONS_PATHS);
       } else {
         this._collection_paths = [];
       }

From 4a8f2c532eb8926d99106ddce0674d620cd7fdbe Mon Sep 17 00:00:00 2001
From: Ganesh Nalawade 
Date: Tue, 19 Oct 2021 17:49:22 +0530
Subject: [PATCH 128/558] doc: update readme file and add development docs
 (#80)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Sorin Sbarnea 
---
 README.md           | 31 ++------------
 docs/development.md | 98 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 102 insertions(+), 27 deletions(-)
 create mode 100644 docs/development.md

diff --git a/README.md b/README.md
index 3ef92d06d..392feb1ec 100644
--- a/README.md
+++ b/README.md
@@ -6,33 +6,6 @@ following projects:
 * [Ansible extension for vscode/codium](https://github.com/ansible/vscode-ansible)
 * [Ansible extension for coc.nvim](https://github.com/yaegassy/coc-ansible)
 
-## Getting started
-
-1. Install prerequisites:
-   * latest [Visual Studio Code](https://code.visualstudio.com/)
-   * [Node.js](https://nodejs.org/) v12.0.0 or higher
-
-2. Fork and clone this repository
-
-3. Install the dependencies
-
-   ```bash
-   cd ansible-language-server
-   npm ci
-   ```
-
-4. Build the language server
-
-   ```bash
-   npm run compile
-   ```
-
-5. The newly built server is now located in ./out/server/src/server.js.
-
-   ```bash
-   node /out/server/src/server.js --stdio
-   ```
-
 ## Features
 
 ### Syntax highlighting
@@ -153,6 +126,10 @@ The following settings are supported.
   will be used instead of the setting above to run in a Python virtual
   environment.
 
+## Developer support
+
+For details on setting up development environment and debugging [refer](https://github.com/ansible/ansible-language-server/blob/main/docs¸/development.md)
+
 ## Requirements
 
 * [Ansible 2.9+](https://docs.ansible.com/ansible/latest/index.html)
diff --git a/docs/development.md b/docs/development.md
new file mode 100644
index 000000000..b991c5596
--- /dev/null
+++ b/docs/development.md
@@ -0,0 +1,98 @@
+# Development
+
+## Setting up development environment
+
+A demo of the setup can be found [on youtube](https://youtu.be/LsvWsX7Mbo8).
+
+It is recommended to work on the forked copy of this repository from your
+github account to raise pull requests.
+
+```bash
+git clone git@github.com:/ansible-language-server.git
+cd ansible-language-server
+git remote add upstream git@github.com:ansible/ansible-language-server.git
+git fetch --all
+git checkout -b  upstream/main
+```
+
+## Running & debugging the language-server with vscode
+
+* Install dependent packages within ansible-language-server root directory
+
+```console
+ansible-language-server$ npm install .
+```
+
+This will install the dependent modules under `node_modules` folder within
+the current directory.
+
+* Clone the repository containing the vscode extension code into the
+  `vscode-ansible` directory *next to* the root directory of this repository.
+
+```bash
+cd ..
+git clone git@github.com:ansible/vscode-ansible.git
+cd vscode-ansible
+```
+
+* Open a new vscode window and add folder to workspace
+  `File -> Add folder to workspace` and add `vscode-ansible` and
+  `ansible-language-server` folders to the workspace
+
+* Once the language server and vscode-ansible directory is prepared,
+  compile both client and server using command
+
+```bash
+npm run compile:withserver
+```
+
+* In the Run and debug window select **Client + Server (source)** configuration
+  and start debugging `Run -> Start Debugging`. This will open up a new vscode window
+  which is the `Extension development Host` window.
+
+* In the `Extension development Host` window add a new folder that has ansible files.
+
+* You can set the ansible-language-server settings by adding
+  `.vscode/settings.json` file under the root folder. Example settings:
+
+```json
+{
+    "ansible.python.interpreterPath": "",
+    "ansible.ansible.path": "",
+    "ansibleServer.trace.server": "verbose"
+}
+```
+
+## Cleaning the output
+
+If you hit an odd compilation or debugger problem, don't hesitate to clean the
+output directory by running `npm run clean` under the `vscode-ansible` folder.
+You should also run it whenever you are switching between debug/compilation
+modes.
+
+### Building server locally
+
+1. Install prerequisites:
+   * latest [Visual Studio Code](https://code.visualstudio.com/)
+   * [Node.js](https://nodejs.org/) v12.0.0 or higher
+
+2. Fork and clone this repository
+
+3. Install the dependencies
+
+   ```bash
+   cd ansible-language-server
+   npm ci
+   ```
+
+4. Build the language server
+
+   ```bash
+   npm run compile
+   ```
+
+5. The newly built server is now located in ./out/server/src/server.js.
+
+   ```bash
+   node ./out/server/src/server.js --stdio
+   ```

From 30897ce5008b37518ce8d037d387bdb82cd444bb Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko 
Date: Tue, 19 Oct 2021 16:12:05 +0200
Subject: [PATCH 129/558] =?UTF-8?q?=F0=9F=93=9D=F0=9F=9A=91=20Hotfix=20the?=
 =?UTF-8?q?=20dev=20doc=20link=20in=20README=20(#83)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 392feb1ec..3f45a1db1 100644
--- a/README.md
+++ b/README.md
@@ -128,7 +128,11 @@ The following settings are supported.
 
 ## Developer support
 
-For details on setting up development environment and debugging [refer](https://github.com/ansible/ansible-language-server/blob/main/docs¸/development.md)
+For details on setting up development environment and debugging refer to the
+[development document].
+
+[development document]:
+https://github.com/ansible/ansible-language-server/blob/main/docs/development.md
 
 ## Requirements
 

From e4ff007b40d3899f63f31b217f9dbae5d35e8ab6 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]" 
Date: Tue, 19 Oct 2021 14:16:54 +0000
Subject: [PATCH 130/558] Release 0.2.4 from GitHub Actions CI/CD

---
 package-lock.json | 2 +-
 package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 203cfda65..ce0e2f72b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
 {
   "name": "@ansible/ansible-language-server",
-  "version": "0.2.0-beta",
+  "version": "0.2.4",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
diff --git a/package.json b/package.json
index d450d5d60..23365cc7e 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "displayName": "Ansible",
   "description": "Ansible language server",
   "license": "MIT",
-  "version": "0.2.0-beta",
+  "version": "0.2.4",
   "contributors": [
     {
       "name": "Tomasz Maciążek",

From db6c75855af18b756b936eacadbdec6b807a1f91 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Tue, 19 Oct 2021 16:12:49 +0100
Subject: [PATCH 131/558] fix: correct readme image urls

We cannot use relative image urls because they break rendering
on github package listing or npm listing.
---
 README.md | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md
index 3f45a1db1..9efc5b9b3 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ following projects:
 
 ### Syntax highlighting
 
-![Syntax highlighting](images/syntax-highlighting.png)
+![Syntax highlighting](https://github.com/ansible/ansible-language-server/blob/main/images/syntax-highlighting.png?raw=true)
 
 **Ansible keywords**, **module names** and **module options**, as well as
 standard YAML elements are recognized and highlighted distinctly. Jinja
@@ -25,14 +25,14 @@ curly braces.
 
 ### Validation
 
-![YAML validation](images/yaml-validation.gif)
+![YAML validation](https://github.com/ansible/ansible-language-server/blob/main/images/yaml-validation.gif?raw=true)
 
 While you type, the syntax of your Ansible scripts is verified and any feedback
 is provided instantaneously.
 
 #### Integration with ansible-lint
 
-![Linter support](images/ansible-lint.gif)
+![Linter support](https://github.com/ansible/ansible-language-server/blob/main/images/ansible-lint.gif?raw=true)
 
 On opening and saving a document, `ansible-lint` is executed in the background
 and any findings are presented as errors. You might find it useful that
@@ -51,7 +51,7 @@ error it will fallback to `ansible --syntax-check` for validation.
 
 ### Smart autocompletion
 
-![Autocompletion](images/smart-completions.gif)
+![Autocompletion](https://github.com/ansible/ansible-language-server/blob/main/images/smart-completions.gif?raw=true)
 
 The extension tries to detect whether the cursor is on a play, block or task
 etc. and provides suggestions accordingly. There are also a few other rules that
@@ -67,7 +67,7 @@ improve user experience:
 
 #### Auto-closing Jinja expressions
 
-![Easier Jinja expression typing](images/jinja-expression.gif)
+![Easier Jinja expression typing](https://github.com/ansible/ansible-language-server/blob/main/images/jinja-expression.gif?raw=true)
 
 When writing a Jinja expression, you only need to type `"{{`, and it
 will be mirrored behind the cursor (including the space). You can also select
@@ -76,7 +76,7 @@ expression.
 
 ### Documentation reference
 
-![Documentation on hover](images/hover-documentation-module.png)
+![Documentation on hover](https://github.com/ansible/ansible-language-server/blob/main/images/hover-documentation-module.png?raw=true)
 
 Documentation is available on hover for Ansible keywords, modules and module
 options. The extension works on the same principle as `ansible-doc`, providing
@@ -84,7 +84,7 @@ the documentation straight from the Python implementation of the modules.
 
 #### Jump to module code
 
-![Go to code on Ctrl+click](images/go-to-definition.gif)
+![Go to code on Ctrl+click](https://github.com/ansible/ansible-language-server/blob/main/images/go-to-definition.gif?raw=true)
 
 You may also open the implementation of any module using the standard *Go to
 Definition* operation, for instance, by clicking on the module name while

From 015a2ab423847fbbe9d8d3f73df96e4f62bd1f9b Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko 
Date: Tue, 19 Oct 2021 20:58:27 +0200
Subject: [PATCH 132/558] Expose the current ALS version in GHA CI/CD jobs

---
 .github/workflows/ci.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2beed37ce..bf88456e9 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -161,7 +161,7 @@ jobs:
       run: npm run lint
 
   build:
-    name: Build
+    name: Build ${{ needs.pre-setup.outputs.git-tag }}
     needs:
     - pre-setup  # transitive, for accessing settings
 
@@ -313,7 +313,7 @@ jobs:
       run: npm test
 
   publish-npmjs:
-    name: Publish to Npmjs
+    name: Publish ${{ needs.pre-setup.outputs.git-tag }} to Npmjs
     if: fromJSON(needs.pre-setup.outputs.release-requested)
     environment:
       name: release
@@ -352,7 +352,7 @@ jobs:
         NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
 
   publish-ghpnr:
-    name: Publish to GHPNR
+    name: Publish ${{ needs.pre-setup.outputs.git-tag }} to GHPNR
     if: >-
       fromJSON(needs.pre-setup.outputs.is-untagged-devel) ||
       fromJSON(needs.pre-setup.outputs.release-requested)
@@ -388,7 +388,7 @@ jobs:
         NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 
   post-release-repo-update:
-    name: Publish post-release meta
+    name: Publish post-release meta for ${{ needs.pre-setup.outputs.git-tag }}
     needs:
     - pre-setup  # transitive, for accessing settings
     - publish-npmjs

From 30a3a897521ae0923d97292d53f9908bbb304f64 Mon Sep 17 00:00:00 2001
From: yaegassy 
Date: Wed, 20 Oct 2021 20:10:25 +0900
Subject: [PATCH 133/558] fix: progress handling when "ansible-lint" fallback
 to "syntax check" (#88)

Co-authored-by: Sorin Sbarnea 
---
 src/services/ansibleLint.ts | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts
index 896a2a0c9..bac5eb36b 100644
--- a/src/services/ansibleLint.ts
+++ b/src/services/ansibleLint.ts
@@ -138,6 +138,9 @@ export class AnsibleLint {
               workingDirectory
             );
           } else {
+            if (progressTracker) {
+              progressTracker.done();
+            }
             this.connection.window.showErrorMessage(execError.message);
             return -1;
           }

From f974419ae0cdb966adfdad68a00c8f6a3dd73ee1 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Wed, 20 Oct 2021 12:11:46 +0100
Subject: [PATCH 134/558] Update README.md

Co-authored-by: Sviatoslav Sydorenko 
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 9efc5b9b3..dbc17aa08 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ following projects:
 
 ### Syntax highlighting
 
-![Syntax highlighting](https://github.com/ansible/ansible-language-server/blob/main/images/syntax-highlighting.png?raw=true)
+![Syntax highlighting](https://github.com/ansible/ansible-language-server/raw/main/images/syntax-highlighting.png)
 
 **Ansible keywords**, **module names** and **module options**, as well as
 standard YAML elements are recognized and highlighted distinctly. Jinja

From b063605d3b4f0cd924df3ee4954e520e11ce3242 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Wed, 20 Oct 2021 12:13:13 +0100
Subject: [PATCH 135/558] Update README.md

---
 README.md | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index dbc17aa08..a8507a273 100644
--- a/README.md
+++ b/README.md
@@ -25,14 +25,14 @@ curly braces.
 
 ### Validation
 
-![YAML validation](https://github.com/ansible/ansible-language-server/blob/main/images/yaml-validation.gif?raw=true)
+![YAML validation](https://github.com/ansible/ansible-language-server/raw/main/images/yaml-validation.gif)
 
 While you type, the syntax of your Ansible scripts is verified and any feedback
 is provided instantaneously.
 
 #### Integration with ansible-lint
 
-![Linter support](https://github.com/ansible/ansible-language-server/blob/main/images/ansible-lint.gif?raw=true)
+![Linter support](https://github.com/ansible/ansible-language-server/raw/main/images/ansible-lint.gif)
 
 On opening and saving a document, `ansible-lint` is executed in the background
 and any findings are presented as errors. You might find it useful that
@@ -51,7 +51,7 @@ error it will fallback to `ansible --syntax-check` for validation.
 
 ### Smart autocompletion
 
-![Autocompletion](https://github.com/ansible/ansible-language-server/blob/main/images/smart-completions.gif?raw=true)
+![Autocompletion](https://github.com/ansible/ansible-language-server/raw/main/images/smart-completions.gif)
 
 The extension tries to detect whether the cursor is on a play, block or task
 etc. and provides suggestions accordingly. There are also a few other rules that
@@ -67,7 +67,7 @@ improve user experience:
 
 #### Auto-closing Jinja expressions
 
-![Easier Jinja expression typing](https://github.com/ansible/ansible-language-server/blob/main/images/jinja-expression.gif?raw=true)
+![Easier Jinja expression typing](https://github.com/ansible/ansible-language-server/raw/main/images/jinja-expression.gif)
 
 When writing a Jinja expression, you only need to type `"{{`, and it
 will be mirrored behind the cursor (including the space). You can also select
@@ -76,7 +76,7 @@ expression.
 
 ### Documentation reference
 
-![Documentation on hover](https://github.com/ansible/ansible-language-server/blob/main/images/hover-documentation-module.png?raw=true)
+![Documentation on hover](https://github.com/ansible/ansible-language-server/raw/main/images/hover-documentation-module.png)
 
 Documentation is available on hover for Ansible keywords, modules and module
 options. The extension works on the same principle as `ansible-doc`, providing
@@ -84,7 +84,7 @@ the documentation straight from the Python implementation of the modules.
 
 #### Jump to module code
 
-![Go to code on Ctrl+click](https://github.com/ansible/ansible-language-server/blob/main/images/go-to-definition.gif?raw=true)
+![Go to code on Ctrl+click](https://github.com/ansible/ansible-language-server/raw/main/images/go-to-definition.gif)
 
 You may also open the implementation of any module using the standard *Go to
 Definition* operation, for instance, by clicking on the module name while

From 8e3e9756019d1546a8513fd3e8f3db1eb5436de3 Mon Sep 17 00:00:00 2001
From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com>
Date: Fri, 22 Oct 2021 15:08:45 +0530
Subject: [PATCH 136/558] Check file for playbook before running syntax-check
 (#89)

---
 src/providers/validationProvider.ts | 15 ++++++---
 src/utils/yaml.ts                   | 52 +++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+), 4 deletions(-)

diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts
index 371a91191..db9347c64 100644
--- a/src/providers/validationProvider.ts
+++ b/src/providers/validationProvider.ts
@@ -11,7 +11,7 @@ import {
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { ValidationManager } from '../services/validationManager';
 import { WorkspaceFolderContext } from '../services/workspaceManager';
-import { parseAllDocuments } from '../utils/yaml';
+import { isPlaybook, parseAllDocuments } from '../utils/yaml';
 import { CommandRunner } from '../utils/commandRunner';
 
 /**
@@ -63,9 +63,16 @@ export async function doValidate(
         );
       }
       console.debug('Validating using ansible syntax-check');
-      diagnosticsByFile = await context.ansiblePlaybook.doValidate(
-        textDocument
-      );
+
+      if (isPlaybook(textDocument)) {
+        console.log('is playbook...');
+        diagnosticsByFile = await context.ansiblePlaybook.doValidate(
+          textDocument
+        );
+      } else {
+        console.log('not a playbook...');
+        diagnosticsByFile = new Map();
+      }
     }
 
     if (!diagnosticsByFile.has(textDocument.uri)) {
diff --git a/src/utils/yaml.ts b/src/utils/yaml.ts
index a68c7662e..7b6b08c5d 100644
--- a/src/utils/yaml.ts
+++ b/src/utils/yaml.ts
@@ -5,6 +5,7 @@ import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
 import { IModuleMetadata } from '../interfaces/module';
 import { DocsLibrary } from '../services/docsLibrary';
 import { isTaskKeyword, playExclusiveKeywords } from './ansible';
+import { playKeywords, taskKeywords } from '../utils/ansible';
 
 /**
  * A helper class used for building YAML path assertions and retrieving parent
@@ -421,3 +422,54 @@ export function parseAllDocuments(str: string, options?: Options): Document[] {
   }
   return parsedDocuments;
 }
+
+/**
+ * For a given yaml file that is recognised as Ansible file, the function
+ * checks whether the file is a playbook or not
+ * @param textDocument the text document to check
+ */
+export function isPlaybook(textDocument: TextDocument): boolean {
+  // Check for empty file
+  if (textDocument.getText().trim().length === 0) {
+    return false;
+  }
+
+  const yamlDocs = parseAllDocuments(textDocument.getText());
+  const path = getPathAt(textDocument, { line: 1, character: 1 }, yamlDocs);
+
+  //   Check if keys are present or not
+  if (!path) {
+    return false;
+  }
+
+  //   A playbook is always YAML sequence
+  if (!(path[0] instanceof YAMLSeq)) {
+    return false;
+  }
+
+  const playbookKeysSet = new Set();
+  const playbookJSON = path[0].toJSON();
+
+  Object.keys(playbookJSON).forEach(function (key) {
+    Object.keys(playbookJSON[key]).forEach((item) => playbookKeysSet.add(item));
+  });
+
+  const playbookKeys = [...playbookKeysSet];
+
+  const playKeywordsList = [...playKeywords.keys()];
+  const taskKeywordsList = [...taskKeywords.keys()];
+
+  //   Filters out all play keywords that are task keywords
+  const filteredList = playKeywordsList.filter(
+    (value) => !taskKeywordsList.includes(value)
+  );
+
+  //   Check if any top-level key of the ansible file is a part of filtered list
+  //    If it is: The file is a playbook
+  //    Else: The file is not a playbook
+  const isPlaybookValue = playbookKeys.some((r: string) =>
+    filteredList.includes(r)
+  );
+
+  return isPlaybookValue;
+}

From 56e2fb5c874a38cbba32ec22a8e7e2e96825cc8e Mon Sep 17 00:00:00 2001
From: "github-actions[bot]" 
Date: Fri, 22 Oct 2021 23:39:35 +0000
Subject: [PATCH 137/558] Release 0.2.5 from GitHub Actions CI/CD

---
 package-lock.json | 2 +-
 package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index ce0e2f72b..6f08658c1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
 {
   "name": "@ansible/ansible-language-server",
-  "version": "0.2.4",
+  "version": "0.2.5",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
diff --git a/package.json b/package.json
index 23365cc7e..6c686880e 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "displayName": "Ansible",
   "description": "Ansible language server",
   "license": "MIT",
-  "version": "0.2.4",
+  "version": "0.2.5",
   "contributors": [
     {
       "name": "Tomasz Maciążek",

From ee57754399a6ea252f9f78fabe7e24e5a3ab5f34 Mon Sep 17 00:00:00 2001
From: "Ganesh B. Nalawade" 
Date: Mon, 25 Oct 2021 09:15:44 +0530
Subject: [PATCH 138/558] fix: added fix for builtin modules autocompletion
 with EE

Fixes https://github.com/ansible/vscode-ansible/issues/265

*  Update copy plugins logic from EE to local host to check
   for presence of the complete plugin folder path instead
   of the base of host cache path.
---
 src/services/executionEnvironment.ts | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts
index 790159247..973938f2a 100644
--- a/src/services/executionEnvironment.ts
+++ b/src/services/executionEnvironment.ts
@@ -289,19 +289,18 @@ export class ExecutionEnvironment {
     searchKind: string
   ): Promise {
     const updatedHostDocPath: string[] = [];
-    if (fs.existsSync(hostPluginDocCacheBasePath)) {
-      containerPluginPaths.forEach((srcPath) => {
-        updatedHostDocPath.push(path.join(hostPluginDocCacheBasePath, srcPath));
-      });
-    } else {
-      containerPluginPaths.forEach((srcPath) => {
+
+    containerPluginPaths.forEach((srcPath) => {
+      const destPath = path.join(hostPluginDocCacheBasePath, srcPath);
+      if (fs.existsSync(destPath)) {
+        updatedHostDocPath.push(destPath);
+      } else {
         if (
           srcPath === '' ||
           !this.isPluginInPath(containerName, srcPath, searchKind)
         ) {
           return;
         }
-        const destPath = path.join(hostPluginDocCacheBasePath, srcPath);
         const destPathFolder = destPath
           .split(path.sep)
           .slice(0, -1)
@@ -314,11 +313,9 @@ export class ExecutionEnvironment {
         asyncExec(copyCommand, {
           encoding: 'utf-8',
         });
-
         updatedHostDocPath.push(destPath);
-      });
-    }
-
+      }
+    });
     return updatedHostDocPath;
   }
 

From 42ee5cf9c06360c9d681f5573dbb177d73e05b77 Mon Sep 17 00:00:00 2001
From: "Ganesh B. Nalawade" 
Date: Wed, 27 Oct 2021 11:05:53 +0530
Subject: [PATCH 139/558] fix review comments

---
 src/services/executionEnvironment.ts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts
index 973938f2a..b855ce4a2 100644
--- a/src/services/executionEnvironment.ts
+++ b/src/services/executionEnvironment.ts
@@ -313,9 +313,11 @@ export class ExecutionEnvironment {
         asyncExec(copyCommand, {
           encoding: 'utf-8',
         });
+
         updatedHostDocPath.push(destPath);
       }
     });
+
     return updatedHostDocPath;
   }
 

From 26f554d18a3f6a77a70b63b19e4a64ab2695d52b Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko 
Date: Wed, 27 Oct 2021 17:18:36 +0200
Subject: [PATCH 140/558] Add a check job to the GHA matrix (#95)

---
 .github/workflows/ci.yml | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bf88456e9..8b151b18e 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -312,6 +312,19 @@ jobs:
     - name: Run testing against the Git checkout
       run: npm test
 
+  check:  # This job does nothing and is only used for the branch protection
+    needs:
+    - lint
+    - test
+
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Report success of the test matrix
+        run: >-
+          print("All's good")
+        shell: python
+
   publish-npmjs:
     name: Publish ${{ needs.pre-setup.outputs.git-tag }} to Npmjs
     if: fromJSON(needs.pre-setup.outputs.release-requested)
@@ -322,8 +335,8 @@ jobs:
           needs.pre-setup.outputs.dist-public-version
         }}
     needs:
+    - check
     - pre-setup  # transitive, for accessing settings
-    - test
 
     runs-on: Ubuntu-latest
 
@@ -357,8 +370,8 @@ jobs:
       fromJSON(needs.pre-setup.outputs.is-untagged-devel) ||
       fromJSON(needs.pre-setup.outputs.release-requested)
     needs:
+    - check
     - pre-setup  # transitive, for accessing settings
-    - test
     permissions:
       contents: read
       packages: write

From 642bba5231fb5788f51c85350d6f95fd811f8aaa Mon Sep 17 00:00:00 2001
From: "Ganesh B. Nalawade" 
Date: Fri, 22 Oct 2021 19:14:06 +0530
Subject: [PATCH 141/558] Suppress duplicate heading markdownlint rule

This patch only does the above in the CHANGELOG.
---
 CHANGELOG.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index c52a046f1..7d32afa8a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,4 @@
+
 # Change Log
 
 All notable changes to the Ansible VS Code extension will be documented in this file.

From 862e778d2728fa4dd6ffc1d3541ba1c061f8c9ef Mon Sep 17 00:00:00 2001
From: "Ganesh B. Nalawade" 
Date: Fri, 22 Oct 2021 18:54:58 +0530
Subject: [PATCH 142/558] Fill out the changelog versions through v0.2.5

---
 CHANGELOG.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 56 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7d32afa8a..b348a95bb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,11 +6,65 @@ All notable changes to the Ansible VS Code extension will be documented in this
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
+## [0.2.5] - 2021-10-23
+
+### Bugfixes
+
+* Added a guard for linting only playbook files with the Ansible's
+  built-in syntax-check when ansible-lint is unavailable. This is used for
+  providing the diagnostics information (#89) @priyamsahoo
+
+## [0.2.4] - 2021-10-19
+
+### Major changes
+
+The most notable changes that happened were:
+
+* Renaming and publishing the package under the `@ansible` scope on
+  Npmjs. The new name is `@ansible/ansible-language-server` now
+  (#10) @webknjaz
+* Deprecation of the initial `ansible-language-server` npm package that
+  existed in the global namespace prior to the rename @ganeshrn
+* Adding the auto-completion and diagnostics support for Ansible
+  Execution Environments @ganeshrn
+
+### Changes
+
+* Started falling back to checking playbooks with the Ansible's built-in
+  syntax-check when `ansible-lint` is not installed or disabled (#5)
+  @priyamsahoo
+* Set the minimum runtime prerequisites to `npm > 7.11.2` and
+  `node >= 12` (#23) @ssbarnea
+* Updated the default settings value to use fully qualified collection
+  name (FQCN) during autocompletion (#37) @priyamsahoo
+* Added auto-completion support for Ansible Execution Environments
+  (#42 #54 #55) @ganeshrn
+* Added diagnostics support for Ansible Execution Environments (#53)
+  @ganeshrn
+* Updated module completion return statement to support sorting as per
+  FQCN (#57) @priyamsahoo
+
+### Bugfixes
+
+* Added a fix to check that the module paths are directories before
+  globbing them during the documentation lookup (#38) @kimbernator
+* Implemented documentation fragment discovery (#40) @tomaciazek
+* Fixed sort `slice()` exception issue in `ansibleConfig` service (#76)
+  @ssbarnea
+* Fixed an issue with progress handling when `ansible-lint` falls back
+  to `syntax check` (#88) @yaegassy
+
+### Misc
+
+* Replaced `decode`/`encodeURI` with a native VS Code mechanism (#8)
+  @tomaciazek
+* Implemented the release CD via `workflow_dispatch` (#65) @webknjaz
+
 ## [0.1.0-1] - 2021-07-28
 
-- Update npm package to include out folder
+* Updated the npm package to include the `out/` folder
 
 ## [0.1.0] - 2021-07-28
 
-- Initial ansible language server release. Based on the vscode-ansible plugin
+* Initial ansible language server release. Based on the `vscode-ansible` plugin
   developed by [Tomasz Maciążek](https://github.com/tomaciazek)

From 64e523b93c90c8a97b450004fc2fa9421f1b17cb Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko 
Date: Thu, 28 Oct 2021 16:45:26 +0200
Subject: [PATCH 143/558] Shorten the `pre-setup` job name in GHA (#96)

Co-authored-by: Sorin Sbarnea 
---
 .github/workflows/ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 8b151b18e..8638df6a0 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -32,7 +32,7 @@ on:
 jobs:
 
   pre-setup:
-    name: Pre-set global build settings
+    name: Set up build mode
     runs-on: Ubuntu-latest
     defaults:
       run:

From 5f18ba03705db70c257622875b5acc4042fab3bf Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Fri, 29 Oct 2021 08:45:42 +0100
Subject: [PATCH 144/558] Enable push shared workflow (#90)

---
 .github/release-drafter.yml |  2 ++
 .github/release.yml         | 21 ---------------------
 .github/workflows/push.yml  | 12 ++++++++++++
 3 files changed, 14 insertions(+), 21 deletions(-)
 create mode 100644 .github/release-drafter.yml
 delete mode 100644 .github/release.yml
 create mode 100644 .github/workflows/push.yml

diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml
new file mode 100644
index 000000000..114b5fc80
--- /dev/null
+++ b/.github/release-drafter.yml
@@ -0,0 +1,2 @@
+# see https://github.com/ansible-community/devtools
+_extends: ansible-community/devtools
diff --git a/.github/release.yml b/.github/release.yml
deleted file mode 100644
index 17bccb707..000000000
--- a/.github/release.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-# https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes
-
-changelog:
-  exclude:
-    labels:
-      - skip-changelog
-    authors:
-      - dependabot
-  categories:
-    - title: Breaking Changes
-      labels:
-        - major
-    - title: Features
-      labels:
-        - enhancement
-    - title: Fixes
-      labels:
-        - bug
-    - title: Other Changes  # catch-all
-      labels:
-        - "*"
diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
new file mode 100644
index 000000000..e8239f701
--- /dev/null
+++ b/.github/workflows/push.yml
@@ -0,0 +1,12 @@
+# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/push.yml
+name: push
+on:
+  push:
+    branches:
+      - main
+      - 'releases/**'
+      - 'stable/**'
+
+jobs:
+  ack:
+    uses: ansible-community/devtools/.github/workflows/push.yml@main

From 130c259e5fc9ed2c20b5e6d8803ed4abe3bbcb12 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Fri, 29 Oct 2021 12:07:42 +0100
Subject: [PATCH 145/558] Prepare changelog for 0.2.6 release (#98)

---
 CHANGELOG.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index b348a95bb..ab7d6a4fe 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,12 @@ All notable changes to the Ansible VS Code extension will be documented in this
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
+## [0.2.6] - 2021-10-29
+
+### Bugfixes
+
+* Fix autocompletion of the builtin modules with EE (#94) @ganeshrn
+
 ## [0.2.5] - 2021-10-23
 
 ### Bugfixes

From 0d043fd8719179266813f67ed583337eb6063035 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Fri, 29 Oct 2021 12:10:35 +0100
Subject: [PATCH 146/558] Test impact on vscode extension (#97)

---
 .github/workflows/ci.yml     |  4 ++++
 .github/workflows/vscode.yml | 39 ++++++++++++++++++++++++++++++++++++
 .gitignore                   |  1 +
 tsconfig.json                |  2 +-
 4 files changed, 45 insertions(+), 1 deletion(-)
 create mode 100644 .github/workflows/vscode.yml

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 8638df6a0..4ab2e207f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -209,6 +209,9 @@ jobs:
         name: npm-package-tarball
         path: ${{ needs.pre-setup.outputs.tarball-artifact-name }}
 
+  # vscode:
+  #   uses: .github/workflows/vscode.yml@main
+
   test:
     needs:
     - build
@@ -316,6 +319,7 @@ jobs:
     needs:
     - lint
     - test
+    # - vscode
 
     runs-on: ubuntu-latest
 
diff --git a/.github/workflows/vscode.yml b/.github/workflows/vscode.yml
new file mode 100644
index 000000000..0f5020bb9
--- /dev/null
+++ b/.github/workflows/vscode.yml
@@ -0,0 +1,39 @@
+# This workflow tests if current language-server change breaks vscode-ansible
+# extension by running extension tests with it.
+name: vscode
+
+on:
+  pull_request:
+  workflow_call:
+
+jobs:
+  ui-test:
+    runs-on: ubuntu-latest
+    steps:
+
+      - name: Checkout ansible-language-server
+        uses: actions/checkout@v2
+
+      - name: Checkout vscode-ansible
+        uses: actions/checkout@v2
+        with:
+          repository: ansible/vscode-ansible
+          path: vscode-ansible
+
+      - name: Configure node
+        uses: actions/setup-node@v2
+        with:
+          node-version: 16
+
+      - name: Compile language server
+        run: npm ci && npm run compile
+
+      - name: Link language server to extension
+        run: npm link ..
+        working-directory: vscode-ansible
+
+      - name: Run ui-test with vscode-ansible
+        uses: GabrielBB/xvfb-action@v1
+        with:
+          run: npm run ui-test
+          working-directory: vscode-ansible
diff --git a/.gitignore b/.gitignore
index 2d9003989..638d8435f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ node_modules
 *.tgz
 out/server
 tsconfig.tsbuildinfo
+vscode-ansible
diff --git a/tsconfig.json b/tsconfig.json
index e05128a8c..d44562ff8 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -10,5 +10,5 @@
 	  "sourceMap": true,
 	  "target": "es6",
 	},
-	"exclude": ["node_modules", "out"]
+	"exclude": ["node_modules", "out", "vscode-ansible"]
   }

From 2821654daee4dd5149bff05ac4e72adbec5bc28b Mon Sep 17 00:00:00 2001
From: "github-actions[bot]" 
Date: Fri, 29 Oct 2021 11:11:44 +0000
Subject: [PATCH 147/558] Release 0.2.6 from GitHub Actions CI/CD

---
 package-lock.json | 2 +-
 package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 6f08658c1..ac44cf8b9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
 {
   "name": "@ansible/ansible-language-server",
-  "version": "0.2.5",
+  "version": "0.2.6",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
diff --git a/package.json b/package.json
index 6c686880e..196ef065d 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "displayName": "Ansible",
   "description": "Ansible language server",
   "license": "MIT",
-  "version": "0.2.5",
+  "version": "0.2.6",
   "contributors": [
     {
       "name": "Tomasz Maciążek",

From b8fe68943730786ee8d4b681432d150809e42ef7 Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko 
Date: Tue, 2 Nov 2021 13:16:23 +0100
Subject: [PATCH 148/558] Reword the change note for v0.2.6 (#103)

---
 CHANGELOG.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index ab7d6a4fe..ed7565bf5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,7 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Bugfixes
 
-* Fix autocompletion of the builtin modules with EE (#94) @ganeshrn
+* Fixed autocompletion to account for the builtin modules when used
+  with EE (#94) @ganeshrn
 
 ## [0.2.5] - 2021-10-23
 

From f914c0e47d7b976570cabf82af119215732071f6 Mon Sep 17 00:00:00 2001
From: Ganesh Nalawade 
Date: Mon, 8 Nov 2021 11:00:20 +0530
Subject: [PATCH 149/558] Fix issue with container copy command (#110)

Fixes https://github.com/ansible/ansible-language-server/issues/99

*  Replace the hardcoded name of container in copy command
   with the value set by the client settings
---
 src/services/executionEnvironment.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts
index b855ce4a2..5ef679fb6 100644
--- a/src/services/executionEnvironment.ts
+++ b/src/services/executionEnvironment.ts
@@ -306,7 +306,7 @@ export class ExecutionEnvironment {
           .slice(0, -1)
           .join(path.sep);
         fs.mkdirSync(destPath, { recursive: true });
-        const copyCommand = `docker cp ${containerName}:${srcPath} ${destPathFolder}`;
+        const copyCommand = `${this._container_engine} cp ${containerName}:${srcPath} ${destPathFolder}`;
         this.connection.console.log(
           `Copying plugins from container to local cache path ${copyCommand}`
         );

From 0f5dfa56dfeab3fdac5df7a033b4d6e03871ed65 Mon Sep 17 00:00:00 2001
From: Ganesh Nalawade 
Date: Mon, 8 Nov 2021 11:03:43 +0530
Subject: [PATCH 150/558] Update plugin doc cache validate logic for execution
 environment (#109)

*  Add a file marker in the base path
   of local cache after all the plugin
   docs are successfully copied to local
   cache path from within execution environment
*  Add check to update the local cache if `SUCCESS`
   file marker is not present in the path
---
 src/services/executionEnvironment.ts | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts
index 5ef679fb6..55d5f462b 100644
--- a/src/services/executionEnvironment.ts
+++ b/src/services/executionEnvironment.ts
@@ -13,6 +13,7 @@ export class ExecutionEnvironment {
   private connection: Connection;
   private context: WorkspaceFolderContext;
   private useProgressTracker = false;
+  private successFileMarker = 'SUCCESS'
   private _container_engine: IContainerEngine;
   private _container_image: string;
   private _container_image_id: string;
@@ -118,7 +119,7 @@ export class ExecutionEnvironment {
         return;
       }
 
-      if (fs.existsSync(hostCacheBasePath)) {
+      if (this.isPluginDocCacheValid(hostCacheBasePath)) {
         ansibleConfig.collections_paths = this.updateCachePaths(
           ansibleConfig.collections_paths,
           hostCacheBasePath
@@ -175,6 +176,8 @@ export class ExecutionEnvironment {
           '**/modules'
         );
       }
+      // plugin cache successfully created
+      fs.closeSync(fs.openSync(path.join(hostCacheBasePath, this.successFileMarker), 'w'));
     } catch (error) {
       this.connection.window.showErrorMessage(
         `Exception in ExecutionEnvironment service while fetching docs: ${JSON.stringify(
@@ -334,4 +337,9 @@ export class ExecutionEnvironment {
     });
     return localCachePaths;
   }
+
+  private isPluginDocCacheValid(hostCacheBasePath: string) {
+    const markerFilePath = path.join(hostCacheBasePath, this.successFileMarker)
+    return true ? fs.existsSync(markerFilePath) : false
+  }
 }

From c2c0db0444c1f7f9f61962c0eca6ca33024db3a9 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
 <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Mon, 8 Nov 2021 08:48:07 +0000
Subject: [PATCH 151/558] chore: pre-commit autoupdate (#102)

---
 .pre-commit-config.yaml | 4 ++--
 package-lock.json       | 2 +-
 src/utils/misc.ts       | 4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index f849ffcbd..8cf75aa89 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -71,7 +71,7 @@ repos:
     hooks:
     - id: markdownlint
   - repo: https://github.com/pre-commit/mirrors-eslint
-    rev: v7.32.0
+    rev: v8.2.0
     hooks:
       - id: eslint
         args:
@@ -81,7 +81,7 @@ repos:
         additional_dependencies:
           - "@typescript-eslint/eslint-plugin"
           - "@typescript-eslint/parser"
-          - eslint@v7.32.0
+          - eslint@v8.2.0
           - eslint-plugin-prettier
           - eslint-config-prettier
           - prettier
diff --git a/package-lock.json b/package-lock.json
index ac44cf8b9..6682c7ded 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,7 +6,7 @@
   "packages": {
     "": {
       "name": "@ansible/ansible-language-server",
-      "version": "0.2.0-beta",
+      "version": "0.2.6",
       "license": "MIT",
       "dependencies": {
         "@flatten-js/interval-tree": "^1.0.14",
diff --git a/src/utils/misc.ts b/src/utils/misc.ts
index 1337002c7..9d4ba349b 100644
--- a/src/utils/misc.ts
+++ b/src/utils/misc.ts
@@ -21,7 +21,7 @@ export function toLspRange(
   return Range.create(start, end);
 }
 
-export function hasOwnProperty(
+export function hasOwnProperty(
   obj: X,
   prop: Y
 ): obj is X & Record {
@@ -31,7 +31,7 @@ export function hasOwnProperty(
 /**
  * Checks whether `obj` is a non-null object.
  */
-export function isObject(
+export function isObject(
   obj: X
 ): obj is X & Record {
   return obj && typeof obj === 'object';

From dac88ce8cc740acd1c065354b16a36dc75c42f48 Mon Sep 17 00:00:00 2001
From: Ganesh Nalawade 
Date: Mon, 8 Nov 2021 16:58:53 +0530
Subject: [PATCH 152/558] Update container cleanup logic for execution
 environment (#111)

Co-authored-by: Sorin Sbarnea 
---
 src/services/executionEnvironment.ts | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts
index 55d5f462b..1fc35024c 100644
--- a/src/services/executionEnvironment.ts
+++ b/src/services/executionEnvironment.ts
@@ -233,18 +233,36 @@ export class ExecutionEnvironment {
   }
 
   public cleanUpContainer(containerName: string): void {
-    [
+    const cleanUpCommands =  [
       `${this._container_engine} stop ${containerName}`,
       `${this._container_engine} rm ${containerName}`,
-    ].forEach((command) => {
+    ]
+
+    if (!this.doesContainerNameExist(containerName)) {
+      console.log(`clean up container not required as container with name ${containerName} does not exist`);
+      return
+    }
+    for (const command of cleanUpCommands ){
       try {
         child_process.execSync(command, {
           cwd: URI.parse(this.context.workspaceFolder.uri).path,
         });
       } catch (error) {
         // container already stopped and/or removed
+        break
       }
-    });
+    }
+  }
+
+  public doesContainerNameExist(containerName: string): boolean {
+    let containerNameExist = false
+    try {
+      child_process.execSync(`${this._container_engine} inspect ${containerName}`);
+      containerNameExist = true
+    } catch (error) {
+      containerNameExist = false
+    }
+    return containerNameExist
   }
 
   private isPluginInPath(

From d4ea3cd3f4e91465097d4140ed47079cfbf68d35 Mon Sep 17 00:00:00 2001
From: Ganesh Nalawade 
Date: Thu, 11 Nov 2021 09:50:50 +0530
Subject: [PATCH 153/558] changed default execution environment image (#114)

*  Update default execution environment image
   from `quay.io/ansible/ansible-navigator-demo-ee:0.6.0`
   to `quay.io/ansible/ansible-devtools-demo-ee:v0.1.0`
---
 src/services/settingsManager.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts
index 1606906e9..576e46591 100644
--- a/src/services/settingsManager.ts
+++ b/src/services/settingsManager.ts
@@ -19,7 +19,7 @@ export class SettingsManager {
     executionEnvironment: {
       containerEngine: 'auto',
       enabled: false,
-      image: 'quay.io/ansible/ansible-navigator-demo-ee:0.6.0',
+      image: 'quay.io/ansible/ansible-devtools-demo-ee:v0.1.0',
       pullPolicy: 'missing'
     }
   };

From a90b57f845c9bfa1a89e37854b10f08fb1ceb8d3 Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko 
Date: Tue, 16 Nov 2021 15:26:36 +0100
Subject: [PATCH 154/558] Auto-mark the issues as `new` on creation (#119)

---
 .github/ISSUE_TEMPLATE/bug_report.yml      | 4 +++-
 .github/ISSUE_TEMPLATE/feature_request.yml | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 251f5a540..d4873a848 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -1,7 +1,9 @@
 ---
 name: 🐛 Bug report
 description: Create a report to help us improve
-labels: bug
+labels:
+- bug
+- new
 
 body:
   - type: markdown
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
index 728f1d5b5..3fe05185c 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.yml
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -1,7 +1,9 @@
 ---
 name: 💡 Feature request
 description: Suggest an idea for this project
-labels: enhancement
+labels:
+- enhancement
+- new
 
 body:
   - type: markdown

From d128e25ab727ff81e454dc7c48c608ce2cef552a Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko 
Date: Tue, 16 Nov 2021 15:30:49 +0100
Subject: [PATCH 155/558] Auto-cancel stale workflows per-PR (#118)

Co-authored-by: Sorin Sbarnea 
---
 .github/workflows/ci.yml | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4ab2e207f..2d344c276 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -29,6 +29,15 @@ on:
           extraordinary circumstances to ignore the
           test failures and cut the release regardless.
 
+concurrency:
+  group: >-
+    ${{
+        github.workflow
+    }}-${{
+        github.event.pull_request.number || github.sha
+    }}
+  cancel-in-progress: true
+
 jobs:
 
   pre-setup:

From 55686069c93b08a0dc77eaa2c3dd7b27bfbd41f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= 
Date: Tue, 16 Nov 2021 15:35:23 +0100
Subject: [PATCH 156/558] Add support for nested module options (suboptions)
 (#116)

Co-authored-by: Sorin Sbarnea 
---
 README.md                              |   1 -
 src/interfaces/module.ts               |   2 +-
 src/providers/completionProvider.ts    | 156 +++++++++++--------------
 src/providers/hoverProvider.ts         |  47 +++-----
 src/providers/semanticTokenProvider.ts |  53 +++++++--
 src/utils/docsParser.ts                |   2 +-
 src/utils/yaml.ts                      | 100 +++++++++++++++-
 7 files changed, 226 insertions(+), 135 deletions(-)

diff --git a/README.md b/README.md
index a8507a273..8d0f7911c 100644
--- a/README.md
+++ b/README.md
@@ -150,7 +150,6 @@ For Windows users, this extension works perfectly well with extensions such as
 ## Known limitations
 
 * The shorthand syntax for module options (key=value pairs) is not supported.
-* Nested module options are not supported yet.
 * Only Jinja *expressions* inside Ansible YAML files are supported. In order to
   have syntax highlighting of Jinja template files, you'll need to install other
   extension.
diff --git a/src/interfaces/module.ts b/src/interfaces/module.ts
index 1f0801674..d10ea9c37 100644
--- a/src/interfaces/module.ts
+++ b/src/interfaces/module.ts
@@ -38,5 +38,5 @@ export interface IOption {
   elements?: string;
   aliases?: Array;
   versionAdded?: string;
-  suboptions?: unknown;
+  suboptions?: Map;
 }
diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts
index 97c6e6e54..ef02e3c45 100644
--- a/src/providers/completionProvider.ts
+++ b/src/providers/completionProvider.ts
@@ -6,7 +6,7 @@ import {
   TextEdit,
 } from 'vscode-languageserver';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
-import { Node, Pair, Scalar, YAMLMap } from 'yaml/types';
+import { Node, Scalar, YAMLMap } from 'yaml/types';
 import { IOption } from '../interfaces/module';
 import { WorkspaceFolderContext } from '../services/workspaceManager';
 import {
@@ -30,6 +30,7 @@ import {
   isRoleParam,
   isTaskParam,
   parseAllDocuments,
+  getPossibleOptionsForPath,
 } from '../utils/yaml';
 
 const priorityMap = {
@@ -163,93 +164,72 @@ export async function doCompletion(
         return completionItems;
       }
 
-      // Finally, check if we're looking for module options
-      // In that case, the module name is a key of a map
-      const parentKeyPath = new AncestryBuilder(path)
-        .parentOfKey()
-        .parent(YAMLMap)
-        .getKeyPath();
-
-      if (parentKeyPath && isTaskParam(parentKeyPath)) {
-        const parentKeyNode = parentKeyPath[parentKeyPath.length - 1];
-        if (parentKeyNode instanceof Scalar) {
-          let module;
-          if (parentKeyNode.value === 'args') {
-            module = await findProvidedModule(
-              parentKeyPath,
-              document,
-              docsLibrary
-            );
-          } else {
-            [module] = await docsLibrary.findModule(
-              parentKeyNode.value,
-              parentKeyPath,
-              document.uri
-            );
-          }
-          if (module && module.documentation) {
-            const moduleOptions = module.documentation.options;
-
-            const optionMap = (
-              new AncestryBuilder(parentKeyPath).parent(Pair).get() as Pair
-            ).value as YAMLMap;
-
-            // find options that have been already provided by the user
-            const providedOptions = new Set(getYamlMapKeys(optionMap));
-
-            const remainingOptions = [...moduleOptions.entries()].filter(
-              ([, specs]) => !providedOptions.has(specs.name)
-            );
-
-            const nodeRange = getNodeRange(node, document);
-
-            return remainingOptions
-              .map(([option, specs]) => {
-                return {
-                  name: option,
-                  specs: specs,
-                };
-              })
-              .map((option, index) => {
-                // translate option documentation to CompletionItem
-                const details = getDetails(option.specs);
-                let priority;
-                if (isAlias(option)) {
-                  priority = priorityMap.aliasOption;
-                } else if (option.specs.required) {
-                  priority = priorityMap.requiredOption;
-                } else {
-                  priority = priorityMap.option;
-                }
-                const completionItem: CompletionItem = {
-                  label: option.name,
-                  detail: details,
-                  // using index preserves order from the specification
-                  // except when overridden by the priority
-                  sortText: priority.toString() + index.toString().padStart(3),
-                  kind: isAlias(option)
-                    ? CompletionItemKind.Reference
-                    : CompletionItemKind.Property,
-                  documentation: formatOption(option.specs),
-                  insertText: atEndOfLine(document, position)
-                    ? `${option.name}:`
-                    : undefined,
-                };
-                const insertText = atEndOfLine(document, position)
-                  ? `${option.name}:`
-                  : option.name;
-                if (nodeRange) {
-                  completionItem.textEdit = {
-                    range: nodeRange,
-                    newText: insertText,
-                  };
-                } else {
-                  completionItem.insertText = insertText;
-                }
-                return completionItem;
-              });
-          }
-        }
+      // Finally, check if we're looking for module options or sub-options
+      const options = await getPossibleOptionsForPath(
+        path,
+        document,
+        docsLibrary
+      );
+
+      if (options) {
+        const optionMap = new AncestryBuilder(path)
+          .parentOfKey()
+          .get() as YAMLMap;
+
+        // find options that have been already provided by the user
+        const providedOptions = new Set(getYamlMapKeys(optionMap));
+
+        const remainingOptions = [...options.entries()].filter(
+          ([, specs]) => !providedOptions.has(specs.name)
+        );
+
+        const nodeRange = getNodeRange(node, document);
+
+        return remainingOptions
+          .map(([option, specs]) => {
+            return {
+              name: option,
+              specs: specs,
+            };
+          })
+          .map((option, index) => {
+            // translate option documentation to CompletionItem
+            const details = getDetails(option.specs);
+            let priority;
+            if (isAlias(option)) {
+              priority = priorityMap.aliasOption;
+            } else if (option.specs.required) {
+              priority = priorityMap.requiredOption;
+            } else {
+              priority = priorityMap.option;
+            }
+            const completionItem: CompletionItem = {
+              label: option.name,
+              detail: details,
+              // using index preserves order from the specification
+              // except when overridden by the priority
+              sortText: priority.toString() + index.toString().padStart(3),
+              kind: isAlias(option)
+                ? CompletionItemKind.Reference
+                : CompletionItemKind.Property,
+              documentation: formatOption(option.specs),
+              insertText: atEndOfLine(document, position)
+                ? `${option.name}:`
+                : undefined,
+            };
+            const insertText = atEndOfLine(document, position)
+              ? `${option.name}:`
+              : option.name;
+            if (nodeRange) {
+              completionItem.textEdit = {
+                range: nodeRange,
+                newText: insertText,
+              };
+            } else {
+              completionItem.insertText = insertText;
+            }
+            return completionItem;
+          });
       }
     }
   }
diff --git a/src/providers/hoverProvider.ts b/src/providers/hoverProvider.ts
index f5914c64e..70ba96a13 100644
--- a/src/providers/hoverProvider.ts
+++ b/src/providers/hoverProvider.ts
@@ -1,6 +1,6 @@
 import { Hover, MarkupContent, MarkupKind } from 'vscode-languageserver';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
-import { Scalar, YAMLMap } from 'yaml/types';
+import { Scalar } from 'yaml/types';
 import { DocsLibrary } from '../services/docsLibrary';
 import {
   blockKeywords,
@@ -17,9 +17,9 @@ import {
 import { toLspRange } from '../utils/misc';
 import {
   AncestryBuilder,
-  findProvidedModule,
   getOrigRange,
   getPathAt,
+  getPossibleOptionsForPath,
   isBlockParam,
   isPlayParam,
   isRoleParam,
@@ -83,38 +83,19 @@ export async function doHover(
         }
       }
 
-      // hovering over a module parameter
-      // can either be directly under module or in 'args'
-      const parentKeyPath = new AncestryBuilder(path)
-        .parentOfKey()
-        .parent(YAMLMap)
-        .getKeyPath();
+      // hovering over a module option or sub-option
+      const options = await getPossibleOptionsForPath(
+        path,
+        document,
+        docsLibrary
+      );
 
-      if (parentKeyPath && isTaskParam(parentKeyPath)) {
-        const parentKeyNode = parentKeyPath[parentKeyPath.length - 1];
-        if (parentKeyNode instanceof Scalar) {
-          let module;
-          if (parentKeyNode.value === 'args') {
-            module = await findProvidedModule(
-              parentKeyPath,
-              document,
-              docsLibrary
-            );
-          } else {
-            [module] = await docsLibrary.findModule(
-              parentKeyNode.value,
-              parentKeyPath,
-              document.uri
-            );
-          }
-          if (module && module.documentation) {
-            const option = module.documentation.options.get(node.value);
-            if (option) {
-              return {
-                contents: formatOption(option, true),
-              };
-            }
-          }
+      if (options) {
+        const option = options.get(node.value);
+        if (option) {
+          return {
+            contents: formatOption(option, true),
+          };
         }
       }
     }
diff --git a/src/providers/semanticTokenProvider.ts b/src/providers/semanticTokenProvider.ts
index 566899453..afc933571 100644
--- a/src/providers/semanticTokenProvider.ts
+++ b/src/providers/semanticTokenProvider.ts
@@ -6,7 +6,7 @@ import {
 } from 'vscode-languageserver';
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
-import { IModuleMetadata } from '../interfaces/module';
+import { IOption } from '../interfaces/module';
 import { DocsLibrary } from '../services/docsLibrary';
 import {
   blockKeywords,
@@ -89,7 +89,12 @@ async function markSemanticTokens(
               );
               if (module && pair.value instanceof YAMLMap) {
                 // highlight module parameters
-                markModuleParameters(pair.value, module, builder, document);
+                markModuleParameters(
+                  pair.value,
+                  module.documentation?.options,
+                  builder,
+                  document
+                );
               }
             }
           } else {
@@ -109,7 +114,12 @@ async function markSemanticTokens(
               );
               if (pair.value instanceof YAMLMap) {
                 // highlight module parameters
-                markModuleParameters(pair.value, module, builder, document);
+                markModuleParameters(
+                  pair.value,
+                  module.documentation?.options,
+                  builder,
+                  document
+                );
               }
             } else {
               markAllNestedKeysAsOrdinary(pair, builder, document);
@@ -153,15 +163,13 @@ async function markSemanticTokens(
 
 function markModuleParameters(
   moduleParamMap: YAMLMap,
-  module: IModuleMetadata,
+  options: Map | undefined,
   builder: SemanticTokensBuilder,
   document: TextDocument
 ) {
   for (const moduleParamPair of moduleParamMap.items) {
     if (moduleParamPair.key instanceof Scalar) {
-      const option = module.documentation?.options.get(
-        moduleParamPair.key.value
-      );
+      const option = options?.get(moduleParamPair.key.value);
       if (option) {
         markNode(
           moduleParamPair.key,
@@ -170,11 +178,36 @@ function markModuleParameters(
           builder,
           document
         );
+        if (
+          option.type === 'dict' &&
+          moduleParamPair.value instanceof YAMLMap
+        ) {
+          // highlight sub-parameters
+          markModuleParameters(
+            moduleParamPair.value,
+            option.suboptions,
+            builder,
+            document
+          );
+        } else if (
+          option.type === 'list' &&
+          moduleParamPair.value instanceof YAMLSeq
+        ) {
+          // highlight list of sub-parameters
+          for (const item of moduleParamPair.value.items) {
+            if (item instanceof YAMLMap) {
+              markModuleParameters(item, option.suboptions, builder, document);
+            } else {
+              markAllNestedKeysAsOrdinary(item, builder, document);
+            }
+          }
+        } else {
+          markAllNestedKeysAsOrdinary(moduleParamPair.value, builder, document);
+        }
       } else {
-        markOrdinaryKey(moduleParamPair.key, builder, document);
+        markAllNestedKeysAsOrdinary(moduleParamPair.value, builder, document);
       }
-    }
-    if (moduleParamPair.value instanceof Node) {
+    } else if (moduleParamPair.value instanceof Node) {
       markAllNestedKeysAsOrdinary(moduleParamPair.value, builder, document);
     }
   }
diff --git a/src/utils/docsParser.ts b/src/utils/docsParser.ts
index 292569c7e..8cb39cec8 100644
--- a/src/utils/docsParser.ts
+++ b/src/utils/docsParser.ts
@@ -116,7 +116,7 @@ export function processRawOptions(rawOptions: unknown): Map {
           name: optionName,
           required: !!rawOption.required,
           default: rawOption.default,
-          suboptions: rawOption.suboptions,
+          suboptions: processRawOptions(rawOption.suboptions),
         };
         if (isIDescription(rawOption.description))
           optionDoc.description = rawOption.description;
diff --git a/src/utils/yaml.ts b/src/utils/yaml.ts
index 7b6b08c5d..9e67633a9 100644
--- a/src/utils/yaml.ts
+++ b/src/utils/yaml.ts
@@ -2,7 +2,7 @@ import * as _ from 'lodash';
 import { Position, TextDocument } from 'vscode-languageserver-textdocument';
 import { Document, Options, parseCST } from 'yaml';
 import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types';
-import { IModuleMetadata } from '../interfaces/module';
+import { IModuleMetadata, IOption } from '../interfaces/module';
 import { DocsLibrary } from '../services/docsLibrary';
 import { isTaskKeyword, playExclusiveKeywords } from './ansible';
 import { playKeywords, taskKeywords } from '../utils/ansible';
@@ -351,6 +351,104 @@ export function isRoleParam(path: Node[]): boolean {
   return rolesKey === 'roles';
 }
 
+/**
+ * If the path points at a parameter or sub-parameter provided for a module, it
+ * will return the list of all possible options or sub-options at that
+ * level/indentation.
+ */
+export async function getPossibleOptionsForPath(
+  path: Node[],
+  document: TextDocument,
+  docsLibrary: DocsLibrary
+): Promise | null> {
+  const [taskParamPath, suboptionTrace] = getTaskParamPathWithTrace(path);
+  if (!taskParamPath) return null;
+
+  const optionTraceElement = suboptionTrace.pop();
+  if (!optionTraceElement || optionTraceElement[1] !== 'dict') {
+    // that element must always be a `dict`
+    // (unlike for sub-options, which can also be a 'list')
+    return null;
+  }
+
+  // The module name is a key of the task parameters map
+  const taskParamNode = taskParamPath[taskParamPath.length - 1];
+  if (!(taskParamNode instanceof Scalar)) return null;
+
+  let module;
+  // Module options can either be directly under module or in 'args'
+  if (taskParamNode.value === 'args') {
+    module = await findProvidedModule(taskParamPath, document, docsLibrary);
+  } else {
+    [module] = await docsLibrary.findModule(
+      taskParamNode.value,
+      taskParamPath,
+      document.uri
+    );
+  }
+  if (!module || !module.documentation) return null;
+
+  let options = module.documentation.options;
+  suboptionTrace.reverse(); // now going down the path
+  for (const [optionName, optionType] of suboptionTrace) {
+    const option = options.get(optionName);
+    if (optionName && option?.type === optionType && option.suboptions) {
+      options = option.suboptions;
+    } else {
+      return null; // suboption structure mismatch
+    }
+  }
+
+  return options;
+}
+
+/**
+ * For a given path, it searches up that path until a path to the task parameter
+ * (typically a module name) is found. The trace of keys with indication whether
+ * the values hold a 'list' or a 'dict' is preserved along the way and returned
+ * alongside.
+ */
+export function getTaskParamPathWithTrace(
+  path: Node[]
+): [Node[], [string, 'list' | 'dict'][]] {
+  const trace: [string, 'list' | 'dict'][] = [];
+  while (!isTaskParam(path)) {
+    let parentKeyPath = new AncestryBuilder(path)
+      .parentOfKey()
+      .parent(YAMLMap)
+      .getKeyPath();
+    if (parentKeyPath) {
+      const parentKeyNode = parentKeyPath[parentKeyPath.length - 1];
+      if (
+        parentKeyNode instanceof Scalar &&
+        typeof parentKeyNode.value === 'string'
+      ) {
+        trace.push([parentKeyNode.value, 'dict']);
+        path = parentKeyPath;
+        continue;
+      }
+    }
+    parentKeyPath = new AncestryBuilder(path)
+      .parentOfKey()
+      .parent(YAMLSeq)
+      .parent(YAMLMap)
+      .getKeyPath();
+    if (parentKeyPath) {
+      const parentKeyNode = parentKeyPath[parentKeyPath.length - 1];
+      if (
+        parentKeyNode instanceof Scalar &&
+        typeof parentKeyNode.value === 'string'
+      ) {
+        trace.push([parentKeyNode.value, 'list']);
+        path = parentKeyPath;
+        continue;
+      }
+    }
+    return [[], []]; // return empty if no structural match found
+  }
+  return [path, trace];
+}
+
 /**
  * For a given Ansible task parameter path, find the module if it has been
  * provided for the task.

From 70b04a73f3f0234705962e4c9885bca46dc6c595 Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Wed, 17 Nov 2021 15:06:23 +0000
Subject: [PATCH 157/558] Repair vscode pipeline (#129)

---
 .github/workflows/vscode.yml | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/vscode.yml b/.github/workflows/vscode.yml
index 0f5020bb9..d2bf79e98 100644
--- a/.github/workflows/vscode.yml
+++ b/.github/workflows/vscode.yml
@@ -19,6 +19,8 @@ jobs:
         with:
           repository: ansible/vscode-ansible
           path: vscode-ansible
+          # We will later move this folder to ../ due to below bug:
+          # https://github.com/actions/checkout/issues/197
 
       - name: Configure node
         uses: actions/setup-node@v2
@@ -28,12 +30,17 @@ jobs:
       - name: Compile language server
         run: npm ci && npm run compile
 
-      - name: Link language server to extension
-        run: npm link ..
-        working-directory: vscode-ansible
+      - name: Link ansible-language-server into vscode-ansible
+        run: |
+          set -ex
+          mv vscode-ansible ..
+          pushd ../vscode-ansible
+          npm link ../ansible-language-server
+          npm ls --depth=0 --link=true
+          popd
 
       - name: Run ui-test with vscode-ansible
         uses: GabrielBB/xvfb-action@v1
         with:
           run: npm run ui-test
-          working-directory: vscode-ansible
+          working-directory: ../vscode-ansible

From b9c1dff22834a2bfd4f89a0d33226efdd29ecb6b Mon Sep 17 00:00:00 2001
From: Sorin Sbarnea 
Date: Wed, 17 Nov 2021 15:33:57 +0000
Subject: [PATCH 158/558] Ensure npm link uses --save (#130)

---
 .github/workflows/vscode.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/vscode.yml b/.github/workflows/vscode.yml
index d2bf79e98..6592c1c56 100644
--- a/.github/workflows/vscode.yml
+++ b/.github/workflows/vscode.yml
@@ -35,7 +35,7 @@ jobs:
           set -ex
           mv vscode-ansible ..
           pushd ../vscode-ansible
-          npm link ../ansible-language-server
+          npm link --save ../ansible-language-server
           npm ls --depth=0 --link=true
           popd
 

From 0b118bfeae26830055aadf804bd4eb10aeac8689 Mon Sep 17 00:00:00 2001
From: "imgbot[bot]" <31301654+imgbot[bot]@users.noreply.github.com>
Date: Thu, 18 Nov 2021 11:10:44 +0000
Subject: [PATCH 159/558] [ImgBot] Optimize images (#131)

Co-authored-by: ImgBotApp 
---
 icon.png                              | Bin 10868 -> 8152 bytes
 images/ansible-lint.gif               | Bin 20680 -> 20381 bytes
 images/go-to-definition.gif           | Bin 172455 -> 166868 bytes
 images/hover-documentation-module.png | Bin 57468 -> 22995 bytes
 images/jinja-expression.gif           | Bin 7483 -> 6581 bytes
 images/smart-completions.gif          | Bin 154225 -> 148655 bytes
 images/syntax-highlighting.png        | Bin 56054 -> 34720 bytes
 images/yaml-validation.gif            | Bin 16289 -> 15433 bytes
 8 files changed, 0 insertions(+), 0 deletions(-)
 mode change 100755 => 100644 icon.png
 mode change 100755 => 100644 images/hover-documentation-module.png
 mode change 100755 => 100644 images/syntax-highlighting.png

diff --git a/icon.png b/icon.png
old mode 100755
new mode 100644
index a4438492f7d4181012d78a9a260d253290a94443..9f55e10befc108321e256daa187e5ae065c38b8e
GIT binary patch
literal 8152
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

literal 10868
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
z%0D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

delta 17980
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
N)Vz><_slc~YXJIo-uVCk

diff --git a/images/go-to-definition.gif b/images/go-to-definition.gif
index 4e02534e2b27150051333dfaf41c3f02b8f750de..099fa022b3524afa9e31c8488d4b198b36b31604 100755
GIT binary patch
delta 157205
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

%}eHH==eK_N!P&axs5t`E^f-oPfc8E=6o;DT?@( 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 ZW=1O# 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%0DdL@RpHjBd1} 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

k3-J(!2gDad)G8 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 Rm$z)WctQVs_SqZ3{{nl90XqNy literal 57468 zcmb5Vb9i0R-zVCrQDdjE(bzT`+h}atNpoViL1Ww2iEZ0BvF+Zp{muK{J9FomXa2~O z?3KOuIeX!|KH6alauNt|xNsjnd_edrDXR400|e5C4`4(vAKzQ9n&t7{e}OqENeF+a z7{@z&KY%n7k`?;!p*jZs#Q^I47}j1=)9J$pROdfGVC$xY?jJtHoqQD)QgPQiZG-j3 z>r1}>{gX8%PQ3BUP{SAPM5HZ|1{82SX!yX|FV$TqwlzRO%+JE1Jt&C)d-t!KASBr1 z55xv&<0i0+#!Mq0*{K${$eG}onJAe0iAIPBuO1rckNL$HI!anS3-)ItSxI9~HWo4) zT1rYwkB>6;i#T*?N729_v4_1| zmPy>xeX6<_lhZ!Cvl6kkE7Cu=hE1Bn@sN}hd+O!-#qGr3zm!0TW0beKEy2)rpTQno zxw$7XF`!=gHCQYNd&K)P_5R}64{hKaF-!Ro<Gwp@34{SxcI$1o$)=~pB2H^{g-OZsvtixwtUO(ci88k5j z7&m>E=rdpZ818lP2+U0_Ui(M&fHi%h+$KmI^L{fPesS?3C7J5m?St{mEr}2}b7B-X z{)+V9bn*LUBuqk0t%wm-6Px?8UN^_|U#Q-mbTu>+qgv=XIvF?!6yLH*Bna9gp(x$9 zv5*$11-@O~W9}TA-EQR;3iM_QsAh=aG`Y|5j;0eykbj(9@cfiesbaKGd6h#T-)@A| zVm8`qoQekBa3(%rjlz#+zI3bp@}%xb{UPj^rxWa30~xey@gAb{=48XfMXQSqV>mMz zD_Zs?XVp|dWSo~O9X^R6#eY>r(d|bC=85My8t|H@ z@Jw#J3nW0-H`}vvSt^m@EHETM-+ABuBUrc6x{K!=zVR~6hDUTA>zi5@t4DmkIZe6C z!$JAP#ndyzlS@?g$k2fGVOiM2Q#tt{n$7in3_)kMDINBoNhPU}!+SLuGajr}cLyLp z>f^kuDlj2o>4}Di2t zYJ#T1sQ6doL1s1gSNLy+G??heNP|43=*`Q?3=Uzgc_t<#eVAG^oOP$1+;PE&`&tR| zaKm=ogtcW77a@KN5>)(0qdk2bqg|247^1P-X+a{tUkTP-dJT?pERb{eWBu|V#jmygT$@;MI;J+NrT3j# zv43mQF%QveeXT-VpTD;iL2dN)h&N3@8|uKabG@gnYBwg(0uIVlb_9GmW)rQL^VctL zIbzQ`R#=d9FPoJIbvv)Vu8K)BQ7%qGisoEM&X?K?kQHWDnIsenKv@n~%p+x+vDu2@ zZGS)o@6Q55nqo{Qr|8oXmyVO|{oW?n^a5LD+G zzSTudQ$e5VtJft5QZ4*=60yulUt$ct`MIs|Sco4YqlFrkxGPT?EGAk0l1S>v#aC$D zKEeoD*plCz5GIER4+le9C$AbQ;PqR%ej9;CVLugWWROTKmUIJS8aN&5#C8i`A^DdU zgPzoijVVI?epr7=OAT&cp12gKth1mH8<;=sm2m0oeT3RBNuHecF+X+%(q_!mv_d7M z#$-Wr{nDzS4<2ry@UByoj~QJV7r+;akR01>K5E&#F5$jex?(z}9Tw5aRE!PnPa)+8 z`5r)!%I2i8bBpTW*os+u5M$=u8=kkSE>aHJi z(nY&a`~5Az$XQoJ$(IPL*B80&gZmHkiA6;8PiY4~Fi8XDZf;U!C1gHz8*?xKjO==< z0DVoa>kOB>8|~p(^hpD7GKxvvBy4Cy!co847DFWn77SfcW8)Odz?-@5?kX>4pnqc= zH>QkQ@L~(v#VAYLb|@%4xlC*t_j$n_H#a-Ji69Q2v&dGo+aXfGZIoRaj7I%R|NbRA z#Ft5_EIIxNnt~5XG=@Prmw+H@tGo0%$t#>)+v= zwCaoWI2yi!{gtv9?6VSY@e{`>rNJdj^@Rz&Iuf=x$2$GMUONm-Vr6QUv?5A+X3Zc$ z8IE2 z`n#epBxSG9P66E-bWQyi)W)+V zl2ym?9=Od)^{s#%8o7geKZ`wh4ZdRW7{6{UpuH`DtKS2s?*>ICsDDX6;?xB?KH}fz zN5sMtd+BMe;1S9wLW|U57~8t9x%$*+N(UHW&;b#bzZ`we=GAx{0yKW@PFMZb9u*1w9fzX)iA<`3zSLA;;=qZw;VG+l1 zJajpzWa=X=1XOpyOL@_K(I|MK@-Sn`LEi1Qv@P?FKpkox77nTz1Mj`!Cf zxF|mN+a152y+FC$BwuJZT}MJ&K0o3w<@M%U)|h|ySX2Y?3G1*(ZdPrQzn}KesK+|& zUza#)3I2be!JnG_zu<-cG&=OtBJDUj#{T+Mr1SSQK&+tsZh(6=%su}-s-9P$Gp`#o zW@#xHbq54PcvVc9iml_YruY7gyUpp`FdMI0IYRZDywxlZQ+Ey7`wirvi+GV4;Np_! z!|>&GLuf1G23QsYpqhNBz-q1>bQrof+Vq-51mOx8)|(}pyNx*Sqjx=Wd*B3UnFczdy+4i_y$S)zsH#cj zc2LATpjp}ZlVU~;@9d6!zN2)P#jBiio{3?~RoJHpg;<2y^u?0ZEygr2i7TLDcj1Y| z_X@~)>xiwFeySNq@e1cZsHKoraovC$Z2kt^I7V8ch8z+5Ktg>)ah4-Zv;)qeB+iLI zOIvGlWu??xJXnQ*UUns5|ILk#U&VK-!1{=x+S3%Cz2lk`Sn@*Fvt*!k*Rrk$gqHv1 zm74!`nl5?Kd+b%CFxh?;Fgk2DspE?#Rj(MH>hMsLR8_Zyqx1V0x>^+D!q(U&Njq~Z zrtE;Liw`K!-Nqw(uW&~&2(uAu*$InCjLV8cFQgUaL67eANR!)hnIHrAfq)CQy1Qw% zVJ6)!x&O*^i$9!JPcxY0aDOrHmOnLfXZUA;#QN-YKJz9`k1Q3kiE_%G#~LX<>TQ|- z;dP)qUWND3t)h;RTxn}`-4qFFM?!LwZh=1k?{aVDHu&JdK%q`gm^}1HIu-#7wXHhW zZ+T1ln$j=z_zp20cjb>DVBytq`v69vwSbm3V}ehW*=G|ATb_Vr&iCoX9NznaI0Jhq zHb|J{KW?PoS>1sf63t4?Z^TRi0#Hu=*d(JUAeu5&tcWA_(w%ai6%o`0+EXYkr&Q}Z z9r7)EfJ*&ur^~)#-SB$d-ZK7rX0=7%{=w?!Y3N0%G@K~3N`BT#sBY_g&|PJU3z9Et z!Ht0ts*r>6NqL;@PdDc$0z$0PLYc`@&Au4BFFBQYUcRoA1}PI;n|=0e@tBVqF0;6F zzcgesf!ne}EZMy+bj``Nhb7QFPAJ?Kqj#dG2DCTus>A&7#LZYljIU7H(^F;7;PJ3j?7)okAHykFI7k}Z8xJuk; z77Tfh@y~N&GOODy!2}Qf;bATk23s_0I^MfY4`n=l6Lu8>@VUU|iqTJsrWzezl@BU3 zs1tHc{88u+e3XV_bJ5PMlssmSWf*prb@v>Bxa2t*x}dXiMp&KUAW<)N!1T77dn4~% zMgd-YQ6ISXax~Sm>E+rV@+1c>?l&HY9_y9PWYn-Llm<0~vm_~BODyE^h>B#TMZwH+ zB6)#&r<)hQZAUS`ed|WpovU3knZSZ0igk>Pf&;y+ilAyPluhhz4uv znGUcRol?H+BAew5+{ZNcL1$xtlBqITA#g^g|7@5*$j3krlIxL{ydy>Snh$|HM+y1O z{3$U+;izj=!Gt2==e-rTVx10$KJ)Uo$!FI5L1{(DE$x2sHqXdTcPbuF0tAq-pX+8E zx_YvEeBhhjBUSKwKM!IXJ10Poa2n@<>(a>{DC<>=0_iaBdfmyEr@z71-HPPk7qi2o z_HLkS`)?nw1|azPU?%XXF0Q@M-!+J!J-JBPKi-g#HJo&gcbO`$ zVA+EwA|S)p1Wrxlc~9n*!bS}?I(y781&~ZqIG~P&5>B}~pdj8O|JHVXiyxs z?6O2X%(L=^mi14!EgGUHgplRQ{{rM??3kNJiOqpw+q?E~!F)mt?Fjg>xG%ck|G;w~ zDqqQa85l}>adT|AI~-P!PI-}hmVK$Y@|B1l>9OBAHUsP8xrAGzV8cI?!3#$~-rNadIl=R9>hi3Ar2> z>aTl4Rm+26g|UaFtdA&(ATpy4sU!ig4dqw_ox9KWjVeTdDsQn+FY~e%8M!Byfm3C| z6puLSQ(tsa{Q$QEUiaLE9%NysPUfHY0_9^nlSh6P3kTA%&*0lE;JK-s&Bt>wH9M8o zzzgiC3v~+qi9gV+pFTH_7pBi(TE;jRQ37e9Z?`BgSOIq#_w(fJY;?Pzl>%&jc4;wK zR8;vvSjnj>G!4>f@cGLY0dKPl3*sGmmi3m+!() zwwXc4khvQ5d$ED-E?b9SPo|*7crGZLVm=;D?X=U zp|&($3&Qhk$WiGL)bKEcisgh5q2FNEcD`T&zjt}uJ?x-kmA}LD<+Vs|`Kfe4bnuO} z=(d=GlRyT8r+kfLid&dyJ6``mOH4N-s{zP* zFwIB47zI!3@R~m;rEQkcA5PU}ziB6>Y`NMo2+x6CDBvyc*f257@4FvHWi5R~X&(-) z6g*7XAUaFvt^n%Q>Gb87b7K^_>6S|w|N1soKJR%n=HQhyac#%uH5+2*3w2yt|Fx5L zw!kHOx9gcpm93lQ*Cbxn=qfEWj+5N%3zm^;A(2UWvZsx6(}-=eWXKdI2+}$iA4sAe zxePFknIbjHh-#`B?XB~ilF6I3lv21csixNUiTM$hpu{AP z`GSpZDP`Lp1F=ueljivf(+Jg6R@? z()}vC`P#^4vLc>p^vt>v%$_N!Q=cK01J`UNkN}y31h9 z3=UIPH}rBG_vLJ{FhyQ_Kn?GhO3dQYFdmDc>k&<9vhKd);sy(&Xh!%0-z)X6Gok_ARZ{Z*rV)Ea zCjy$@4?})jr)>4_hX6!lsA!R3s|v6Tg{OGY$I@bQ4xN~Y?eNNuXmC>ee%&)?yj~$) zkb@}xeJ2$ZRS@xbO2o;HZyn()c=YQWr*jkHEA`J<0f$u_*4?-;>W2I#%R40d1Tl}G zfVq@VQHMVd13-2x2}@OVJj>!H#Q36F%gEIVF>sGBoOH#L5IHg=WF-yn>E)F$0aIPp zSq@J>@B)+}qoC?&*SopnaR+D-dRA4nx+jJW-HcUR2s7B;AalDvPhb|4z%(jsjSh=H~*%p2(dn+mTb?)VF z_YEe?s!Q-N*E%Iwxs&bgf&{Y0b7ROcaCRJ#Hyj~l*HBRBB|`tll==uDvJ-L?r#P7h zyWx7?(k~4UVWWev7`i-gx$_L7?mJ>w`+m*x`C=a_v(s^2{3qTdjIuS|!D(nj_EeVovf30D&8 zrA8-iJn;d~!5<;sT>IIQFwLj+oUS#>x}kL2HpNwx{iIWgAGL|3vqgE7Y%s|}JE+;u zw^Jitth49l+5_|(RSeuFB#MeEdWE!6+F5VCF~ld;1CnA?zInyKUH7r$iI7|kG*j}s z-JYT>luS}P<9@o!(Sz3x^6`-ZW16b}ZSpc$t=al^w}tCW426Sd|8LTwm^#OYw2R|y z=p%&eV0+GlGv*T^^)UX9;f5Hu<%A9@<0pE%qn5XOSEi;RJt;jsL1D?doXe18@*0u( zn8kDX-&}>LDZ*=`&q%dkqW*t$s^C6<<@A4Z4V6#aV%<^T4UPEP}bUwU~Uzl~XmugpC(YYk7XtT`2=h{wCCFeb$Hc z=!MJUp5QBm@Hu$99;IwWyoVdjckn8*y%?E$MDurH5?2pXYu%V5JBD{1O1||*F!EHu zRlaQzWTU^su4Q+O_TNjTi-i@fGO2iWn^QY2#ZzY)h>*Ak*s5y$p$mE*L+6)+QW$&a z)eqx^w{`D=g?M{u-<&&{_?6h7QDsgH&ACE`wo+q)qr@VbGZpjx4uz>r?>J!gt*R94 zw6HjTtT#`Eh#2jWo$IhO_|vh9@j(*$?ZE-~4@y0M3~KUU={4XRyk5no4aQ%Gui@Z1 zwRrsFNxlrD8`zLjW!leCFI{Jwd*nghD;B&U0GJ;9Lh7R%`5Q`1~O`?|jw?oz^s zXcf4y&=07x99=wR5_GRD%Z4{yJDk4Q9gb8Do9MP8=3ey>ZZ0eXE$UT{u{wIoy&5Eu zi2jLQw|;GK8>NU&#cEtvRX~L_P6dZQDuf4pciY4oKq(N4c>R4_M9A>3x1ViWlZ$Jk+q8yLHK|{uL56x>a-|bf^y$SUDVL`T>%7yn}YC zM@Z0(OJ}-GEX62t?>C}Hi#y*wlGlA+&_zpxk1O7jpH*v-O>5x2YZ{V~A_BZ}gec%T zb1T-4DZsF24QI>sbW18zx&lpp5!&?iB+xJ$)%A5MmQNq~>PbZ>`Jn$<$AcCy3DBtE z>N{{rJ{{<3YjFOp3mZOzao_1;)*@*$m#Jr|gIFy*K|*CT6A~GFQ(=1$%U>axsM)qQ zrO^Hs0@#lU(9DpIHFXxuSM*CP=YqA&hhM3+gH@l3H!XQ3SH2oI@IGT!p z0v@uFX=f=cE8Di4WlH&fcN$Ocpv;#W4<>{;3pg}UkSy#}A zQX00s@{S(bwHOKWd==$8?&EnKlV!{wG6^=>U9lb({ZnTC-W%Z0FSKY>bNTelH}-?| zJM3}+NFUVp8380RH6QtU#LC;t!jUpVoMEIzuf|{6eXQtvnM6T1c9yU8*Wn#^ZkiCu z;|Pl&?q1(F__9?!0RiRxcQs~j^8Z6MfLKMN*?4H}aXgvfuOexG#nAW8@5jtFYA_z^ z1LW}D5EP3WnOSRoo%)X=oCYh}ZEd0Q=OUe5%7vZDZ0;NC4h`a*VUcO1i|Y<9!ts(2 z`-uP=5bS8`-IsQOR{YeBH!!_KsQ<00>KgK&Dl@cwv#D<!7wfmLDHOSrQjt`H+@Kk+4KbZq|crLVaKX4;%UcXju z4+-!CBsLy#){9(7+}5SM7l2)w1D?EZCZ@74rs4M|!V=`a)eayUen5k?TqFX%ERUOu7$$r$FK74z%#0&VSc4D` z*$)EY=MC2s8_^pg_tXrnJTI50HFPxMp22+Y*Ay>3UnXWxq|F)6nP?c;2!~Uk{`OFZ z4+et{eGJC09QsF4FJjqwA|>Hgv(3UbrR4_8ri=B1JJORQL!a)5e&0`hy@+%97W7&! z+J7)XG~iujOq~5PW-8#a{RjIpL<{G^yFHOPWF%z=g;4{hC+8Ra3kqDz2R0alEeN2nv~LYa^@KM$6zAHmQ`hg>s4NTo54k}WCXrD|2x(9Bu|KI~#}ApJ ze_4r%xDHn1o3t1}dAaK(xRIL4XSJxA4QP{CErDRfdR!7r+Ckv;^sY6vtZOYaGQJkd z3sW9BcDKDpvfnQZ0b7xY2NhfWr_)0ZQs@xwjIuf=oM9R-=EtGsHgMW>5i+;F*%6G> zrA9@Yd}WL!&xj=&QNmG837 zM&9*`q99wb?SzQ%3qF_Eps6@^C?6$c7;Zz9;LG^>_n8IK~$-p7ftEv zI*ndcR>Ga+G%=AIkwN|%~%dYk!NLy%FoY z3+>$z^6|(%TWUa)FZ0FIW(_%U(EDf&M0Bf6vR#^SLX(=Qi_kL|JJ<@hV$UvcPlnrg zcmCEQLki!a`3t|aL<&@yLK1m>h1qBKf^4JKx5!Z`zBF3-J$I13lSl0p%k*7jE2TJX zCX{g0?BSwq%U)EZ6_>)L3QJ*Th9t;&ovC{q{LvhX#dM23s)>}B0rQkTBNSwu|a*YF_|)j!?{YVlxYy#C2573XMP`^+kwg6+?!~!>NlK3cI?M1UqUj^mdLyP#Ud!wSy*{1(=bNkVzP4F?>DPL(cLj}L6OK2Qm3yufFy*5_ znArkyaXt^=K*mHoq#e@RJRRP9G@wEJc6e$(U$#T(XXasgVz&2=j# zNv#cDrfz`m8oz$^gTD9KC(&DT4qCF0VXXWrF?CE~7T!jx=UQXiw<{#@7@{JBdRkT8 zbq2YBAxML`LclK1$*65GwNWz$#wfn@G0>9Y+mc;hPibWj+DgzzT7jDFmb)%ALL=Qx zmW)=3m;q=_xwEYo+Dea)Jh*v&{_aqvd&4onaP@eeVYS0YO}~x{G>aMj`Ky*E><}ee z5&>y3bG~xKDFR#6Q_VNVqkD53!~7w+xm%;$?b)M^S{)NS^43`wI=KWn8*{zgT3K~Y z9STF@q~s@uVN3y3agFSYX1}s-12Pu|966qa^EiR%em)G@ZJdTlg7z(W@0TYtnyDOlAOEse`}v`mz#j zpE_C^JVW4p##G-JS1>?Ga2^Px^hzEQ{i2bIjTq2Q`-6BnGm)^;%}MkjMme#ALbQYx z+h%EHe(iMyorrF^kxJd?dRH+D_2)L_)Y0;dSAM-FL+kVAEgE=s0qM!Pn(@k8i!LGx z2ruT|Wo}hCyUAv{ohbs#)YDtv5A2sHE(%6MY zY@UlZ)yUQ1;DZdR2q9j5&Wwmk0`bkzH!?p*d&~@Kyp|s`9+w%O>bxbK9T3$yCHdEa z*@Y86#czv&Q4+YYhQ$JV}`kB)*=Km=dXakJx-k-sHjdM+Hl3U?{)8!&aZ z5X$i+-FK?2gO__p5jxYoPgoj2QJ)*VP}~lmI@c%Fq^DamnYIp*#zOnp%fesBs#*Ju z$m9gz;_l}olQzpb8zk}xIW@J{w{{!$%Ym*jlDW+x)3fX1@fm{d@u@8XMc3KOy^NR7 zx?$6`-QD`>VXisURz8=K1-Pnlj_u^)<& zVpx-5vfF}5k400b6bXI|82v}fEDjQrte5gi!zLU5z8h(sSGa`iek90SmJ?uXx)_H{ z_8GQ;HP0-cl#9tet4Wk+x`sK<@Ut%)@Uaj2;V`pLai+*SCnTE_+r5=EShETje5p0- zo&b7!FC>Q`1j4%tD`w(0HIa_;NSCl)&>(o?ouVGMiJT=A=}m_K1K-TO_Kn_+;9_O0 zfa{}feZB8|>b_Yf=i!n@7jbdr?j7PVej{SO-8%T93=lK+<@&+ewp}Mb;p34UJs{(p)Rna<2|)1jb~Du%M)Vy)Ry5mx8F? zCST)_5@~8k(U}SzzjnK}qw{!)wczLWPfG=_vp3DOG?~v;k@x8(0R5M7!V7$^)98~;gkh0$gX{%m2 zeXzktgqV>VugVcIeEDwEM;XtNwTFtKa&@+?LsGuiC#viNaX8ubD ze!0;$kgg|Y>VoqMrxPTGC-1clVe9&y$IA0%m_z68Hppn5m6`u{w^Q2aijR~AgRDm6 zmf&R#g4YAj2U&@b`7;q%G>U18dF%{l{GK|yNP5R2y*$}uC#dJD!&08&Yz;+qp`@Z2 z{^31h9j?go3MgV+P(dn@JAT1>-UV#iXg9`U?y&uGbKS@-Jx{HsI7o4}SlRCTf(c~` zk~yU!>Gtpt<4PTLj|Eb|5gqCw4x&hX7$fYHZrDX_uvqWe*Gja{>Ym~r#FIn2&k8hUFGt_Fo=m9v0BKb@mFUtZK zy+xK|Z|tNVOL$tI(ov6T2Yg!msp5}q*tvwTPsGUiPdNott&@Xpgx;l72-p)j&Q@rm zsM@qOxd$XR|8;^w%mRJD;R2sg%KqC9c~UpgZz;F3tl$2Ut$pNr?5#Z#pA9Zp(n@cU ziwKQ>8{DkpK+r{EY2o=!d2xiWV&I~--LrbO)#?@H-+y9>|5m1*>u0`I<9080%;aKy zWfyanB$<$k)0RYaK-DdYT{2p?{*~b;gleVj%dN3TLx&`?6wkeQt68Ytk*bx8m&*h* zb_u;nMw{%_>WSTjuBM@u9Oqry)3q*NBE9&XT+l{A8%!~uJLTDc2nscw5*p)eEcb7>ijq1 z!2%=*0KnE!R-r<$i9#^9w3N`#vcUOo3iw^}#Rp&3+|pbyRe=PYX>zS3$ij9ZAyi|3 zGP|egJRsA2`Q5QzD@+t?ax1qe;_i$Yu9`YoXrq8he9wP?dgXe2b(U09f&{3Mo7Gp5 z%?aC~nz|Vkr?z2U0`pe5JZ0Cl9ygIqg)$Cxy!UCwe6Pkr?>MPtOmQO4y(e$L;P03^ zaASUrD1HvU>qf6^oXiCcNGROmMHA{ZLy0uDy2$#gx$kkYj>1U}niN=1N;6!SsK+=e ze6KK97GHX-`!^i@8_!0z&^fkhMTE|4-b1?MUB}b7GE(6{goJ%L&DO)9=5q z9=+ZqH;N~hosoqtk@Ox)0~6fLO<1;XAUkXIM12?-M9UT8>j^fpmjOsERY&8sMf(Y+ z*Rez!300XG;w!KiY!bsxB<1SK0Dx@SA9EYZO-iDeaT=2#*b$y_i`q`&^K;pRe|a0hrJBZ|@QfASZzHe=v}zU;bFxG) z_r~FbZ8nV)ggnh^pdLmI+^X=8G%ol1Jl zje@giS3=sQl;1J>%9|}Z`5qsz-8QOyIOdYzp{^qoS(xWus6b!8ueV7;dr69BU3k-7 z5st3k*!dJc4uoo`J520tBgVATLM1WPA8A#QFuPmdJePyW=N0d>oXTmQyj-5w_hnxC&Y_ z4Jpga0^v(>d#|ico;p(n6BecoMzZo)x+Nd2-L@%uAm8HIKGmI9G^f#sH5XgaFS{Dn zKIGt7%&SGfaW12jwTWxb!)Cran%~}qK59+-3{Jq_nH~`_{tg8OQT{zAB4LFH(MZ-5 zncBUFeH=HwT}En50UytWQX5)v*d^!eRFwQI=n#{(KoUb?1&IWz)y;MwH3y34Io-XK zKlt8*D9$L~;?xo(CVA7m?Dpy=JctvruZR7nkw+(j>n;DwK1@8#>|=Gugor)_uAFms z3I{~c%wCrLl_;4rUe^@1B3?h_DWb}31CiI0N7McY*5oGZs1bveEiN>j;z5cb>;*Ovl6BtaGWN z$aNkUso^kWX4C8|#)6?<^!MPf_0Ra!NILe-GpmZvXjY&~ZPICrWeH(4cDcA|Cz?!r z+CTXjMM9>Q+FJAsKFBFW%l*GO7F2{H-bf4j0feO0kk19~)@y%NXkkee>;&2EZ5t14 z4g+4LGKbL52O{b_U}@%OqF+wruo9xylx%zCvFJpP&E7>m%6NU1CQKxqcJSuEIqb_d zGbUG#uBN8J57IdkaNh)&IHR^ zVV|a2C7)SG`0ub`nbmfnLMwqIE;zsPb^^l!B2cf@sKvE^_BF!ldoK!+E`i1UvW4*zo zIQKK1G7#lH-`4)c7l{D77t~jr#fMKRBWqiKv#|@u`?$=06;Jn0Yo!%qJTz8^&TB`> zA)S{WEeXLZy+$9eRxstiTraAw&e5y9x;Ib<$osUy=F0~C;K%Vzk!Xgg<2}0FlT$Xo z-BIi($$#DwaN36-Vz(U8Elxkdb-_@rE)Sn4^=Zpkqw0(7PDSlj&#L^4@C=QnlT;D&GSJBy> zsXuzC|IWGBULz;3v2eI$T=Ey}=;2h>&*&ILPsM*SYd&(a^YG5V5g)Y9lpHC;7)ryx z*5M`=%KtRP!{RsoU6NULUWAp zo%{!vg9ObByEODilQJ$ceEUi;{xG?>y{UdW&b#$kk)Xy*n*oWs^RZQ*kxd!s_fBM6&e_KBMElBN=ilE_QgsAx zM8a=_){L1j7B)h@@wpI&y$@zQ*7vwG9DE3o++c+HGlZ$=RdJ|fcFPATp87hs#mU$> z;ROP~nS#cxZ-a5@q`omI@yJKR`{`WoaYdJs{0;fHhO{E}4S@Z6YjTrfR6{Zbf-uY_ zMays?8xFfhEHS_RD}w&!=G%lr8I)uuD?&0;kwEW?l7W1rL=GK7gDB`w_P^4a0ZL+#;}B;!&0X#DeJF*d6#szoj#!W zs=P8smk^m2?7v~V#eePF(p+sdt1STb()b3|7!aLS=!)F-8#Jg^@P>1{;8K6*Q`QHQ zNalkf?jq-{=+M7jkc9$#K|buyEp$7QbNOD5p9Si4`P#{rI=Pw9q2i&ZG4N{mb z^&m??7JfmwfvS(3 zGeT%bAPGa;l`%Him;U-|-!RJGYRRO!?cmC@$MW#h2l zYT_Na+P&UnG!Wavp$)YhCcRp{{nBpMt0$qP`3R7d@de7XN>_e;-jnW%Yn$qV?4Qh_ zo;s;yYqd8T4~nMel}gw!9&l)*D1sbnEzkkwd^6#{!kbIc3@=bH-Zx56 zcnDk`43RZ|{5c%KG2=+`T0SX}3?Ad^p6r}F<>?c6EA{z6Y87oIV0wi2`ecnClOe4* zIRP?r1ewASQi>)R6rsQyi9*Jr_*I|L7{}|^mE?^pszn{aQ=N>A^4S*3F8*A+eRi6A zjCTrbW5w=Zq*6uQ%`;QA^%Z;YVeBIK7x$yrIGnQGszh+nq_Mibo zL?c~nUFwm^HKTLnK`~o~BRG2*8g*xlZ}X^IxDMC_6K_65NXXqdHTOM+3$Mw&r|GZK z{g0T4Rj6=9l3gMF_U7Dsd2_Oo^&~O3*6S%)5*&$(N|o(M6xsg};`oVdNO}uD8;Qd! zD1U=_qA{wf546LKfGA+6F$pGI_O3iuu*`6RTFlX^%&&<%(c3%EdRVum$5#5IOF6|3 zOIy)HsoKN1;^;9Og-tbY@OmVDFa_G5D5+3GEg0cDQq&K};am1NYER-Mv9!trwbK}m z$$)1an|5JhHTTGmo^uIE8C!wvx$EJv8+UlX3f`4$$<(x;M9bL)i_g-2kN8cBa_+v; z>Kfh86)^eg%GP#QxH#~<#A(Qmdnme~>{gM`PBk)0?f8)1U{Tu18MKjLwkc!!t02Jz zkUK;S!A99=3O7Is!~YFpas36{_if1S;%Xg{s1OqC=>VGY@@T-S`q3S3kIoZ$Lnhh) zO873cRmSqB2Ppb&aL}EdoA-2nB=we1OY<+{4@`s;!v;pHGESr1quFUTX=vjT(=6TE zB$ZigF!0|Qt+e964;QQVTHur(Zk61sLI9{TAJ6n!S`s`J$pS6$#cYcMu~2G>Y$~FV zn-GW{7XhjKB3TJrfpA*^u?6~;s>BN{3t_B9BLUd+PN3SGb=Muu%C;KFF`<#sfN)(W zovnH<)qr)yg+_@!y5-sqZ^+Wp=+kr9{2s|v{*)u8faTIM?{=mwU-elxxzs|ovL{kN z+L@?FW(X(Q{&*K)R&JJ%3o!mBy699u%#n{jfW+y1ovAFNa_14+iiz|^KOk&iqu)uD zFndNRQZsDjLi`%V;ZkY!HsLd4YX_X&3kcyv>^(hsO{kz3`(1CKwCTBaq5csC2gl0( z9H`>0cT2&4g4(S-z4WmBg7GT@2yF+vCS?O#vC0f-%71v8E8{kBow+cSAJ2h-NvGpD{UbG^fDWL%M1~6o;&ZlWQVVz zoDkZoOU6!G{JsNiB;pW?8^~bvI*(s8(SqKn=SX1lAQV>Jtg6qn~X1 zCmPi@vlJxhb?d}EP=&{Nov#xI$F;d!4osyfBoBY71(-hK4HBzF8m zzyA{IKkI$hIbay#-=Ab;@9%8>qq)N0|KE+G$Xt)yOiUl$#{Y$v$-w_O;SoCj4|{JJ zl-IVc4JJ5*;2JDQa0|iRU4y#@cXtB3IKkZ=f(LhZ2@b*C-5tI~viCmcblvWI{&jU# z|D}+3%{3Wwj>pE{3HpTe2&qyDUVB)(R^O(|<)XqP&ma!XgPoJk58Hd<1=fIYjgHel zlsu7WVi>b4HrF?|!Ps7ta4qFX)7r@QG3+q8&4^NHXSDNY<>L-a_{hhGeaAzAkt1&^ zQ{6VDJdcI1o2Lc?8--E%h2dhMZSM#@bFAo!M7o(~RtH26A#lF2$_N0oMkRTA@~L(1 zSsTsYP-on6Dz&5y%P3NO7qV!~E0(v9YL$HTu!IKAz?0;Y z{l54T3p1|0SXW`N1q5B9>)=C^RRire875qT)Cot*UJ8;ZK;JOuZ}+iYEajjXzFeRP zw?}(!WywVGDrHg2aOS7C^nvrhWO8A*d;u=+Vb8wxwd=7P1i)9HmAE%K4@yoZ9M8Dw z$7iVCnp{Kva+tG9DZG}>bMfQAF10tta#@5ajxb?b+zxWfR~75Mk}9Ck@*fhH*VuFl zXIQw*RBNS&>27@F zeS|b8b7ga#^mUXer8v%`r=Rjx)(T~qwW_)X`guzY#EKBR$uoS2<701Rnbci8y8w#G zJ$#&WKD+wHw{A`0QLh}#VzkSfjK4(S^+?a)kDOVUr7hz&AL^}>>eQQe9@XrtUbR@v z-QO$hD?*`g5m;}Y-dThQs=9iiE`G__R&{Dz3yRfjfh8o?gEvQ+3C??*vQ7x|?Ny`y zN_)Yo2;e0Nob|5|xlRN`8@+Co8?yaxRvnUIg9Kn=XsZamP~d(ylQ|SzvR$MW_%!=# zXVhzlh*9vENBXw25W+Ux-Z^;!O|N^w^s!;Ns(@gJ)QNLMKd2Y6m6oxe!1Xc(5H6G+ zkS=e-T%S{hQL#*CU&L8UD)LJO&^GPrf?(t=F*Y8fiN@6`21Vlq>Xhpz&@EG9!`JVC z@*Bpid19Bi-RI1>IvBXk&iR82lWK^0Q>`%)tQI-%-3NT1>i44a<3o~QRVA6{So|+5 zt$yk$MHal(ASH_t9#7!O!H~aa>EdOm23-8e^V{$4tGB02#pB#-#7-pDzs`R%8ldm+ z(Eob-W^B08Yx)qy2A$3}Sxjnpa!zQ;nfTiugR?ai5zu>El+C1Hb~(x!4mR&Edo8|$ z7#w`^r+01SH!<@hSL23ORCA7A)4A(0wwNYjj5rp1}QO{uwuiNSCuQORNg>XZ(8*%*$m*ue=ozyc8S|?D1-tfwSK! z0B`6&sNVuTW>mH3y2gO&CRvy;QbJLfm}ERH9?+QKCIg`ghpaBfg&=!cJXnZW--K(= z@>xD3`9oLb<`0J?YxDBG3dpuAhdlg_x6TvGKp$G~3OQqiVgr&RCCnohf+0Ri(;&<# zUJgRogbTdIkEIpZ!E;Q}y6Mr+X+`>wlu=llj8JCVqz>0bD?D2BurXFgwsH4nTpH*q zFz?!NKfus+_^mM&J0z^But5s}F5H%V>`a|fD=sPg4%dQE*5lW#qoH9{iFLBD$3ru<#2VLi+x%!LhYt8o6eEfZhLpwiR zM3cUnH=>fsq@kG#!J`-<4@fbOPne6!YPEEACdCB}!E>Oj#l#b!n45@>h>O_jt?>Sx zdcr(z3PU4B+%1a>-?WJQ#iM!})wOX1j~FngC&tF;t6ptHr$t;MmUtETI;QujWmU${HxZ$a!6@^Nii*`yNxB?;=i{4WyJNd**>7kPe*$+RcgJCBD_!6KImB~k*PCF$K1&p0Wi z)P!(O-ex>%&&Y7qO4vng5$AD+V{*TaH2x9S+nAgPeS7ru=HvdU0OQecGC%Kbp4gNVeP=N!>i!+#T9Ec{UcGROybZD)RD`L9Os6eJEnvJ5+-4; z$p+^&0bM;B6i`n)h2c2qC1Hnlnq#=ZWOJ)*S`pC0_^GE3e&n7Y83MSCB;CMyWWIEO zZ$5SqPDw8=*peImQ$eti%U$J6THJb?0k$c-`;b%&-rY%{Ldxs4Q*!WG zOZVaMsyo|{p*2h-oh3Zl26zL`d7Chcy2(S)rLqRnv6mYkZn`0eM;bpy)rwC>FHx0J zp}DM=VK~fxA0R}_lB@NG$u05wIz5JxlfOJzOy#~XkeC;dB$-!b%OdOyL)aA}Cy#Hw zJ6q14JUWdX4JEH69%konlL`_|L0LAe)Z4elsN#a}p&Hby>4y&+ zP*%OO!RQ{&Fr5dsZ)D8n`7}TYd6Bj|qq+;%Z8BB((0>?S--eyOlJ2jWgh%?U; z`>N{ZC-iDsU%?x1c6HzaGLs|eZRBiqL2y1k2)}BJe58qO@Y#~w_-Yh@P11N(JfSUP znETqdSe>&Iv$29Be->76q5HzCuYXC~Ql}!gNVPT-9|Zb2mzexgTxy&6$hzfbpOE)4 z_6I2FMqvV_NT?koqdK7^(v|Ob%0f8@d1syDY3yn_N?I1+6#6WvBr_?i?r`1>4+(Zv zW{p}D5)GD#mi}D-(y|^h@8~5M>bMkpy9Rfvh0S$af%|^%2ioe;Db`P?PE;2%B+%vEJZv z%L|-v-H%)QbgNe>d+$4U`K=?Ot^JU)12B1Z*Lr^_Y2x7%{hS)n5vf7WXLXO`hKDps z%Pr&8?~<>O(3a}+!}XXY_Y=Itb%|kVL<7fzrgR*((VS7z`Izh<$WRpF<1c4uS9Ce0 zq5+CPsJ9KT362h4k7X-x6^|)u;H36P&nJW#s4ASYHNdWyT)60T+tp-SoyuN>CERy8 z7AqF0rV%KJn&H=UA?m{&7;}{TZ-hu+ng?+#7Pe zvwPB($Wp63&bSP=lrUt#IUx~q?K1kqaHJz=$PstZ3yW)jPU%JQ55Zr`b-eVZlg?I5 z{MZ9USe$VU{%g%-Zm$+5aAob=9mM*z&4-l!EtHxng$zeu+U7k7Lim$9T*E`Yr5>6i zqP1)mveBy;3b7L{x0fq^0(NX<0ILMb8g#=LL34dmr#~?wNOXhTcN-Vl!k5A>ya^Zi zBq@AlDbp!Ikoe~-=i{!T!xE&LL~Ni}U~mK|wax-^#2@f~srYS4>6wTAVb%V3wJ#x5 zBx)HdD(YVWJQ2UX4uE5G4IHYyn90p_?4PL zB1)9o5j(2^$z&x%p{a4ieGv|P!o1`bg0$&Htpvzs$8-1V`6UI{17uuzC&(s7YVO3p zHj{uQq6m2T6O;tKmopjxRGX)h()MlMaGf46UML?(p>CT;ef3!A*|T56Sr2vE?Z%m~ zV`gParN)G@Az%9DpF*!Z1&f=NErq0#@w(qM$3%Wl6h-z5-g4cPxGVYwCR65!QR+h= zw4p_&Fb+$o5A)(ZMaiB_4Xlc4LJvs(8iPCX?N(`+Mo>hZEF$%ouuI&F5%1fR;FNobeCE}AI%#D5TJ6;OizWKQAqL@MEWq-^{C0Ru3CC~$sk7E58&uKR$R+$@Z1 zP3xb2C!)ru?qNqUdmRrOnVb0T~!}%&y$5C76GmEOzR~*Lo z7IYG$O*V+Z@qiR|AD@d``5o8Mxpoit;UsZ05!c+Orlorwm$L%5Aj)1+dCjCwV-tJj zg5|}5=5!-U?UAb$RZrph;)28=^e>K1T3l(nqw^tvo4hUgx~ov;>7D=2l+lTLaS9n2HZ=uISUcBD*wnyFLNSMq+$I4|Sb*t&Ft;>Xyt- z^st{OhX7G4p^pDI(gjgMX)gJkqSAvrBq?eG*M%)wWvz2~N5%pPPZcI*INv=sA}ezB z&E-7JJQJ5vq`U>) zLxTNt^w+RF{hi(YPF^p}hNPrXRI7mD!j6cKoqJZA0jfsmX4@~yV`ykfjb?M4lRTv9 z&%v0GNPT1-idUlw*n5U8^z{e}b)4Y=0WgOqs566e7tshk4d{9}zA9OI2?XpLVtP%aGUFkt+p|w;Uovj5~K&rf;6e9gU45stei_bG)m#BSCfT9iY#(@3K6a zm;~nxG=2qbOK}~k&BL7)pUjJ5Z5}v}5QowsFeY#PQ4)rkjv>^nJ-(BFk~+r&)1zI# zOcqRAI25T_M>}R$p<8D2l|9=?R4PvKB?{=Y_duqluE}sa8aukCEJ@3iy+3AGjh2EiiCuXByFf5NckP&oC=*1aByGCN zHZfrbfm`hCDdGPR{Li48q8q;cp>kqEX_s5V_Bj8GVtW!YChO$7~R%JhGqHIl7KG! z4Sbk1Q-Mq+L3U4x%=(^wbS*0TOWvKU)TfX!w`<}FVSYNJbocv=_}0=0H@M}k2eb3{ zrZrH?J&&AJR!!yvt{ezyak6JQH+8W7m$JuoX+br#E{^ zF68HHbQ1r-+T4ybtZ+fXn|Uyc%J&dY3dxYLYgRg$%W&$2Z-Zc!e#x7^hEs)k_&YWc zxi6T?*5n;qy4R`+>c%1WhvHUkoH;-eUP{U+=#HKuOBy1q%m2M9e_9GdGGNx99pKlDMvRwF95rTWi@AX!z^lfTl*1o3b~`GyT}u4{+4fzw7|H%HJ;y1lq@e(^i_*;| zE{s!I1Dd7OX~Pi6ewC+Ahm%oYna4h@s>(E*RXICHRvGPzr2rX)4P_N&$G3VcGt%xI zr({7ILwFPfQ5E~xa5m8X6vShGJoNo27Ii)MP49pdJIp+;HAj(Q6so+;l&ivUc)S=3{^%4aD8z#f}Xt zGE+1@%0^z@4B$U7d@pcGjIBFC5eHvM?Kv4302%6i5o;VPVd-W3sZu^f=%{sHY*%7j8Am*gaU^VAC^~bopV}&;=Di;S#AnL9@Qb zoUSmMT&X*zjw?G)YE`qgeqJiADcQbAqx1ikIrF;tPv#6vjgEr02x`*1ccY{+fxPhc zwWhjB^9~<6=#V8RMA__j=#Si1$kf6U{w0u9(N4a>=3~S;;xDETHw4r-W-lblk z>AqdqW+_$NHjW8~D`&`g{@Qs}ME*k?XhQ>v{md2f;R`9r!=(#Sr$`c7hd|=Yew$Q*OO#1IK(Ij$O51atSIwAS$RPLb|12?eT=akW`(A-`$}+ zd8)>clNgZsr9a9k;-gRp1^S{s;&W{^M^Hud%omU0U%k)gT7%YxL84W+8{T-IlGd3S zVTfcJoAz}iqB+Gs5rm&-5FdXV{t>1Zt7vb*;MGyocjJvUJKs3~N(L6bwVOIlI4lTs<}^y=FXMqI!@93-#~a z_*E2iwZ@e5Y-EO}VDU*~8ZJlTdY61PVh1gxiPodCwespV#`9@Ekbsy`;B@2dtQl9e zR?^IivoH5TS_MW@vB1(Ve)7fEQpf_EZeng%32md14&;#_BIQ#pM*yF>WU-VZHR(8& zDGN;*z^oocoJJch=5k|JMif3r9!L>hyRFbTpP1=BV3stF)WabOq#AyG5eudUiuu*^ zo)b>8RA$S0vYk2|}3jL}ELB ztNxuB@Wi6r-*d8tul{P+w^lokA~Xj@o50kjr{K@5^q0GD)aBmB%~_3 zGCv^64G2%>56ekaB4P{?jeF4R8UG}7GcaUPnp`~kj6==}O*$3+Nz68~mE zU+$my(TGT7mZA*}idNxoph^CX@R6@Vg%sc(##W|6deY3UVeY{_(p*E|4K$dCVEX;ow*C`SV_`!F8k_I%J~<|I!+uo-CtViwjFXr435us!5^#XF>QvcS(k=%1Ag^}jmN%_ zT5r>f?JtEKESZC_E`Mq4j{f{SpajXR9o6wn^CluIg&i=~q4)$vH96JK zLpI;a% zAfDnB-mwq)4WHaCo{GjTYiTRcHagHvTE^%e^|DVi1ESBdV-Hg@_8gH_++u!0hS;@? zey7K1eQ!UaE&^f113#)jBaf5<;NuxGSud*_gXciL+RkIwCH}VdkUYdK5yIlToUIY`vXZ7#T00?ABZ@3z>0W&|1U(W@^5;>w<~crX$^~< zv>9ZPkg=Ol5n)HC4ChHMk&4<@=K?f@EX+$@NOe*aqvp5>$pX%J|N0d}<5oys_OGn; zKfg!*6%by*2=GEK(Xf#rm)Gm!U#2&Dyy1o~MA^W}3FZoX(%o2~lhA0$zLb4L`~BgO zY$*d@GM%uSvBv9CaI0#nGHPp;Z{gELyV1WpCnfJirbHF~$>rUU%qz;qOPs9-LU&pJ z;&WkOg8-jv9JPT=T0mA}w`eUn4`Q+CPYU7Hi(8^0PRT?@*nZf(zX)HT%>~=!Q-;gK zK!1Y;;%tETle0>(4VL7)fC~e3|G#P^DVF!yXi(gGz}OU~K}+>;7zyjx z)KoqjO(LqU1*cDqHv|dU2NTcVyAu@ggHM4>vbS3uDd07{_#+WFj_U5AvFRai8EQG{ z+y(Dn-}RACAr|^m%>gGoBW}Pb&Yy}+s2>4D5BP$6jD{u^yI>g=iP+`a&qgFbu)4Wz zp#Q0xeOQDI#E8JPOBkhs%rLvM1^ID&gmRnj)gss8`0rpKfbt~{6?KWQd$)$VL6{w+ zyltE2o7DmtfOm%~P$LK+5Z(qSPq zjkcI-F(dHGcc*aKcfBMCi$zs~ijx0Mhd7LYi#FzWY79_eRES>2I`B=aaXn(kNBd64 zVO(56&F#?I6QL{TteIFAir9)5+Wy&0pAt*M91RS&DQ8Xsk5c~1D(f==!p;6X+b%#-@|UThwb-S7O7f?)EbaH!Nu+o z;_QS5lE24c=*2XkMk+Tehm!S6jyhhT?*BlG z`Q10ghP2Zf?6q$uNV!599 z250+f$9kl$6Hn*0;xb%bgazqA?`F7M-Afr=7q(kNJ?6fPxC*&e896s!x1VjuU85+5 zN#!*#28@mGl*%qUDXu(n%HO&I%DA&nbA~U@d-BT0^Sx8afF&)?acYf>%6AShp^ADrZ3|xY!;ny`|7&2#*GLnJ4TVqtKPvbCHY(Q-69b)zrNVBLRRbsT zt}!N^#kX7qYRt9{2=ZovRQTBUOXsq-w6nM}xZ3VTmEjAHUaD2|)>$6LjG{XP3?_?L z#P{Y@vDj^Ba(+AD#qkX`)lj?96e4|~^5XdZl3-sP(_Fh%1p`_+ZGu^^czca%IH_E+w%QAJtx~G4zxP_{>V$T644P2qoe9e3N%?d(6-4S8 zf4FUIu{tsO$I8)di2{?05TvC=u7R~D@i8d4ZD;AOw-`W2HidM!UP3rdy50eZ$oFh! z=9D6g{Fa3~$c=j4@O9m7GG-Z%bpfJY)J7r1u^jz)CgIE~=@<#g4!dlbc}41m&8_9Z|%P+rSZv^skO@MwlN)ckxkOW9^x-}Zp(OgLAA zSInzAjRnkc5=p`ZP9x4<3#E16JQXxOKbY*dg6Fy_7w$c7 zC5)I|?Le$$BP##l*oDke_~`|ZVq688p#B@_pLKR24D;|O{JD+46}?6Q2L-jbJpUIM zS_RV0p`!{awWxSyXO??_km&#S(6<84gn!FxhLQln9^WB(z4T_WWKY%|vn3;^){Y#j zJd>|n-BQ#NJdyLXukAmrV3ri8CD%@dd9uopGHL|4os zqML-59kkO$2Peg=2EC!nWPG(`0$)}vX-vv2aB-CU0)=O0b#Lk~t&zqsGcXcU84y1pSkz1^8=vcxD_8uN7kZ=1MxF`NY{DZ0K!~Tt^?VLv5 zEM7P;W`56nZNVP|)5YslgppUTsZ7Lat+3*!{RAd+i~Ag8K^Yi=G{N{80gpZO9{(n2 znwa!i{QCPBfXX*}H$6k@DU3Ai--tvtl#RXVw9>;+ceqmBpYNw)x`(Y%J>B#%z6GM*6uPT zh^8#40;~icY;Fl!Oh53;<}D}k@)`f6l55xy#9LJHMW{~mxeYp6JA45Ev}8!JMd$(I z+CkRZ5XChiN>gi#2YC9< zBUKpI5jV-g3w}_mmd15?G_6%nGT|i{$EdkMr`hJQ2iF(k7(3V*Xk zP+y?3dTt+mV?>@l&i-X=(SznSq3AmS>ff?sT{%A&A??H-u8+!O&HxKA%>yX05N#D{ zYuSQACBj@2*PL9Vqf(adu5iUIt11-NtOVqwk=lBAofWzE5yrrGcFIG57o z4=s)S&nU`F#09X9>4BUpFyX2Z0gWa|8(W`J4+c20U)E5;yx9A>67Vg6A0#7xDW7zV|;)Uce`1a$^p0)NlBk_ zBZ`S8GeY}KbbaKTV^@h}5^^$17Pg4CQ^3k(Rq^9+@HtA0h|Gb035Au0j+u?RHbwwG zj&!Jd!0tx`5qubI31EOr7s4F5Z!a$Nh~{@#LXzqKOD^&XS~ATaAc+6x|DE{vPfN!S zD1rsxiO96bNJ%L%|FnibUMs5yw@<|pp@(Z&{55k1oOX(xU)pH%b-(IfSBQa*9;US< zTPG1Q{wFo4a%Hw`;TbW9Kb?ynWD-qk&`^JGWq4XRrV_bRpvLX6%gsc1-s*8|^6$Tz zq8h5B=ph%V-NRu-TP#U%RUae3GGja>C_Al!o7q$09{cBMf@p;4 zx7)))VP~zGarxpM;DSkKM^)5)r@0;2UiG`2e5Ki+UqpXrxA-I|b^k3TG|&Qz(2)SbzuBWu!J&gCs)%W*P$_EOPtlJv ze#l>2dj5n5;89O^GAAcixW>sOXb=vw85b41b-O{httRs@#L z&EQ^zHfv5^oS^5~ZNaNh+=o=S+zHS?I>FTX94T5<67734+<}m(P1%GrQiTZGgE@`x zJX!>}j8%8=iATEKIi_oBGgmjmfg-tLg3CM!(@gX}s(LP7*?o4ib_}T#-)M z8mauim&8Wjww13pIOIWp*{pz3VgsmNtg8q3UvZ;t{^JlQ9TgoCov30ZQ+-$t)8}xg z^@@s2B~nP+wL8fd8F9jUW?Y1W={C%R`?7*|=hJTXc0BTxS<(?gkcS07q?qvOECqRN zzeLU2(we=^ct{>Q4G6k-=?UHQZlzW4ahi1V540f-`9I7>_=ltVI<3Obd;C{~qt7p` z%m3*-eL!hvd@Cd}yq(k^)q6VW`5>%`7-}rMT9vbhdJ`Y4-&S1je887k!0F7~5;YUj z?6nXc5MD(82d>=0g4`s;#)jQWJEUFOh@kgl;mFB)z|L+$4!UYB`Gxz zZgtyFUhM-ycME?I6kAiQ$TK8ND?WE0P6Ni%y@jmdpy@yvfvcFrz5^crY_cT!jM82* zlDf`_0^5U5Qr5fT1iLYVhjVwTmI`ZJEtSY)Cf$ZN&(+PaKSL?%ZsW`!Q#UrbIz8-nu~~9j4g#@(_}_IglpB`K5D>qeCYiFku7HS~TX1|J{V& zEf~_y2xDdNjZmG7YTvF&Pkwss`bh6(aFRMZ{`Q>A+QiZ6&7Cr-{%R=N#WY@*gbd4? zOiu=%K6FH~kKcLT+JFSv+IS-PjlCOH4<>2mk3xiJ8JwOS5xXeJ5OFwJ&m)MK_@H%( z+d50JcZStWD>5QN5iOS3vZKK*r`tMwo*O&1*gO?q!@BbKEB2;wIwm6a2`fmq+b~G0mt#G_4 zxd~>BMCrY)WT5Ap`+Rwst%(TaQ2-lJ4?c|3dPDa@tj1(Oz{L};*#B;B#xGAmQ>)x-;C%GfH(~Zm;>nX%gZ6z%J`eN`VT*ip+tV=Y}ETGo4;^9oUnhqHhK`r zU8(pf)5%@1MA$Rf-6=)%w>|sxo55d158QAppaDoKxx-EwKlU;hu202(06aF} zlm9|;Yv|N+Qs{=i(ooYrzlP1}d()?1p|lQ*!)#bi6Sf=n#~n+{O<{3+r0{orJ^iB1 ztMdsdj%d(N`{%wsJHOj*T%lK$br%!IUJ8b-rS$BXs`;_8K zweLb9W>K&Be>(5adfE$1Q5f#*Gj=DqFT^Nngi`j?Ja@S(P#5p7bTZUkoHG={qVLDF zK6F&w7QQE(m=6ilBAcrcyxpE&dvjvAi{`FbFT-Ym0Ds^Ho!b5e30$N$^U)aQ%LMJ- znlW9@-PAaP&+h?tq6#m#w~(#$#}}Y{*2;?r$!J)}(X|x`zvZjG7ZU0<{OB?`$rq{5me24PFmf!!(A?~H zb@upOOkPi~W(XW85w(khlx(^vl#3%m>jdQxENEbuOVQKcix*U)d)v;;QIuVn1^?b^ zddbMeH3lL*Aahonu#7==NTFzR^tdxQDxq%c>rr&ASYmef3kVq za*e){n(PF2t>yEEgQsJn^~5S5{cf@M<8aMeMIJY%3?1sjC!=Au(4_lx|K;|e%yP`N z+HDzuVB4$~IPFEnGF*0TI!=ORT3bKsvDF(G?Xp8zT0RYwBQ`U9+CGUXr^6%5F0#g= zAHu^zqig-`3*-=y~>xp7bSYzK&*=ubb{vobaW7-&!z5i!=Q9l^oV&YitC z0&C?tL^O&pv{K(bX0qNO{U-qPmk-0o9)j%Gctl!k*v9+j?!RpqFQjc;USDqG?Zje) zp4nU%Y#>iLc(30EZaM?x?Y1_dd#iVcSv-*pB|=G~+~dAicRo5nrdHq1)ptM9NrPF~ zzPc-p1U7j}ghSQ`b>uDI^_}?m(XjQ_$2c*Yh<{y@HcX9L;8oL}n^9Ylf;(w#8unM6 zz$g(!8+qqb+;|;}povVFqt3f7>sExF`35WZk?^0-U*h<9+K*n*bwLO4V9fBeLBH)7 zb3kgH>hSv7iwI=i%hfKYJK)p)+-ZX*7~EHvle6laHKJ=1U`7{=VuFoMc3jJElx}19 z#K7o1?2RTk>=euF(x8|2lLJjMZw6*ZoJNxlBU@0Z-rn*lnJc|MfHY~C54p>K4%J>z z3~?PRTx#COqeK8Ik|_KquuVdEYL~uvJN)3hwrQ;peKLJJ27|xmcfom&V2E0x@hcV% z`#_wslF*`v)+>+ya9>q^_wCEY!qLj>3EIl%)noSnMO$>z3C zC_6BD(ii-uZMUm&Z3i~Pm*Dt#qO^8!-`B(V^D56M6Aj+I0X06)*Tu%7(+OY{FOJO7 zJy>JvZo(&SF-R19d_h0*4JQtEP{NWoSFdzdR?!=ay^3Vn!Lv_{Emg2@#kO^(J$R5e zuPj>66X(1hDG?kobbEN7y%L`L5Cz}799exTA0p7ORqx)}xO)NG1^pc*9#2dZ@ARrlzbJ%rb}V)#4Z?&F}3;qPU2 zBTwt}ey+t#UE2bQN!T1cdqC&bK10K`oJo;1P&T7jki|f{FKHNrqrSC~X6vE&UeWki z=c%{$YreHZhTuWDc=?^NzoqdecFH2_?ZL#2duOk)G-X#66|LM;TGjKGi9(4Rro-Ya z`AuUPw8>y3`3O>ZKA}+HVdY5u@6_V~di5P!3X>{W){jg`oBn!H7Kgwd zcz#~1Kemt;bZE8luNhykM44BAUuK=*{|1LJCm&G0GYZi!3XDCk4*$9xUA)6aq+g?f3uxk5Wv;l`4fyK zhjr3KE%@V9YuDIYsvqZ?Oi>Yx;4W`2V;kW@e=TLGMs5`0jr;ko$dSUq6m#s(C z7w8FqM>KN`p{KA6NzM+I-rP)#2-C%SXwtO2g~Nrn>gM%*c8C=5o%+$}@Avp!;?QUk&^v$uS1 zcf_5XzZkxHr>&Tgt5!yNrtEh8p ztp@z3q!jAwG{jVq^4u0g)d`H1{uG77yWoo;XUleb4NL>uhrU}ZE;1pu9B7trw#c-r5mkRfK2euBl0HZ*yHjJAy& zb%Y5(oUxI*o`^jXw#T>N_qu~0YTDAaK4Jk%evr}yGXZG*Tl#99Zgs^WVgVQF_G`(u z3w1$OmxmP-YS$e+Y88j%nSsyH<(0xe9dC)R4hUbOf&aERy;4sH*% zy#AiNKiZ}@p015cn;WNcQ%{Jkva8;H#7CocV8{y5GuTO{YxUr>%OjWui$23v9R}-O z=Sb1Bk5l+towJnls{PtHN&o5+bSXeR2VrZVAJ|L_1=Tg57I(A^@q3JjelYUExwUH> zaKDE96hUtjoL7&KvJmPig_Gdj_2wD!4Q(PAMKsI9D$2nv?_E0FmhJ*#YfzBI{K>6d zSr*;bnkd)v^@O-eXr@+YIr4WO>u;>>#n_=$pWSIl*Yy>+*1Wz@lKd3hyPVOV14cnV zuA-V&)BOIgRYb8pJ0p**UE0CrIH zdu-ZAa1nggGiz~C)@@`oZ3fKU??;*io73aXc)d0k&C4r0+ALHf@{-e%T~3FQAzF~6 zC9)ft2;fHJI|Ae`(n+A34JG)Li$$^DIx>A!O2ogT=U{`7B@_M_>p>}E0Amj9IiP$2 zqsam$QhNNMlBoZ*41xbP%~_-Hl2N-b*7@T$rDV$~yJWo{HVQa(d+@*a2`Q=)#pafx8VR^-M~5J(t^$qcpWXuJ2rI(CbHy7^oaPolDQNVB5%E66K`CmyJB_Rn*W| ztv`@c!#Y=K+D+-YtVYuP(KZFQJs<8x5FV7+Jj8lOS~dJUw!DB_sqrk&A@qd<|m5Pn68OuEpF(}1vg%H#Dl zJ$T(0Y7;ZYv&xBM)&43|^A$9*V!k3R!ibsOuEY+91Lmj9gSzvj^t69AWE;bLaLor&w&@Fx@+i`#mu3LH0+}X8nEmuVEiGlLizU;#Y>pck8AKX-zlQ*kZ$$G4fWLLiwBOjKvftnCz1v;_Qo4 zTl+NQwqsXX6h`7s9_u^2t_0m1t+|()WV@NXP+GVT2q$LCgX0VC4azfpGCK;8nff!8 zsxsb`1jM}H)!1Kz>2(`0xeiNqqHWdnNGrx^c1$fn5@DapH;A0{;2NY^N0EI~m+_;c z*I!25fEL-mavOPlm5X{AauX4U8?I$kCW2+B@sg#TOGenT{5?LBU=5fsGbqZpmVw&* zc$7etNQyb#U1z>0XpjGB^-xA|pFlT!qpabi1Q+IUWyX0uOFC&k(w*fZVXZYI{qRGv z_In?}Gm@vQ($}!&=Wm!!P2R1HlDywxD*MKLo%YQ@fyAR}@*uJLUDli3Pb#%;JW)Nd zdPkwNqD7BhHyXQbQ#-=B0 zF;3!jUv&mpgSjLCF|aM*4mYxzQ)1l$+iBmheMMwX#n7L&R|pTx!bQedslukevoqX4Hj9N(M91uidtPA(}ulsNski+j*O z5}VW8XwMG{laz0eA%_w6%VEm7bxk$$@zFxiGrKjI4Yp97jw@7fSW4S{Awu=`hGF*T zZkv~fk}slKF*#LAaOFDA$$(fsz9{m}<0T37)!Ao*+51tAYUoF4FB;PV`exRXpPue# z%BQcn#zSS6*u(TKehc&%214C`b|N{4vHyx>bKvfoy)^qF{C7vxJ{niR*^CS(@TVo} z#wfTcF3+8dNYL@)>c+^3@N1)sfiUxd6f?Q{+Pn}cAy41pUnV&sc)VJBI?1ShC<@(lh=_E3+ z2uw!F%X_H~Z0Ox_(p_QYHP^$XEKWl*Pp`AU+^`n z4BBl#F`c8q42)5>djER(#gRWe5#FI(}Dp=pDtcm8;z(13Z4ah26W(*$H3NSn+8`LUn)WmI1 zPxD0LaoON0FOhS(MG{v<=(bF8zcO)eS=DDGL)V)_k0%&0s5+@h2Xws3+O zaw+(v<(}8L2S@|*6?pP7;nK#(boBVx&vo!FVr16Fon>;D2gzBN&Zy#8z`;oJBCppG z8|JULNoJQT?P1i$^%KQBx)59A9GOVsCPe~sRo4ekN}3xZ%LVg-`G?turT&=l$I{QQ z0!yui@RwPJu@rQRd$}uco_fE-aTM{&hMj zrW@ByH)rGf`~u4#I$NsSt7$^rH&-gEHA4bOJk2n>kKH6HAj|RkeY}*1n@?j1kKfAu zP+qjJL2t7PIWMXYeD%GmcUg;RL}ooTQdp|?y!*cAZ^Nj$`N>+O=TNw@M@OW`!BkD^ zmu;2uHCM6z2=C<_F8M@9BLNfW!1~TSb!?K;AeiUUg2TQx1p8*s>9`m1_z44}K~hWD zJGwXEXx75)Tk4W_{hsW-*h1~I{KB0Omrg3^T)47H^5F3QQ1;eQaRuG>V1hd|?$Wrs zJ2dVRJa}*j?yik{Ah<(t2pZfWxCD16xI0Yed+*J9v)269tm(h%*6praU8`$QMF$re^ zS=drJnb+JYOY&@jW_5Cio+JUw3o-q{3Qj6L>SMSIqsZsoY0hEY0h>y83%#0K_s=%d znQBqCmVcd6_EsZmaH$I_?x5R$ggJ3K{UxlF1x(645}svf2ZIhs?L@bz4JP==kgsMF zQuvX-9Q^w8?T{V431#}tJ2-Pf=O;+d`xlh*H?-89&)fX-C}VPs+oradojJRYzp}IG zUaN+is1US;)CXE!b4!DjYU74n4pNNmmCN@7oSX$5##4XmF)DkGw2@gsx#C*HtIYIP z4--Zln>PUV*LL6?r@lwQ{zP)Jtyk2*^*0oPoj(hC=>Fo38-EQVRNsprp9r?o$O%`d ztw*6(qD9|Ic1JFm%nI>o;8SpH^Q!I6#E`$OH40|gcb#D)ariXvbH3p zguwrv91!Bip-@A3DG@?V%lks0p5c8t^ou6NTxqbtdbZZ{H%RfYrtewMeamDPBl+9? zL$XyZj;WLrU}B=a;8_QURCp?`kU_CUXOsmJ=t7W?Q52C+lqTgLV=2po0daI$<@81{ z{vTf!L1%j!btfqfrNX$?14vNdx%XQJAxDG90hDXDvxtrU{wDi}msag*JmU|*+x;PS zW=nJ%|4ZPnzBQAK80%f<#!^Dv-^vTN4fB zs+}L4YyW<(oR5%{j@MC4CQteua{D*ec%FX*{}7T78C6u$rLhJ`_+N|hxBq&G>|TC5 zjLf??vp>+oKKfI=1+ddL-e8P@%{mM$LjpJWbST*li>D8zB4BlXZ4l?C2_E1=mBwoh^=qARm6Se@*^}DGN4 zqY}Rr5_v@8Zr6)0LpR1X`ie6#i`U5DTA)Nly8f3kWS9PTE+>Kr^=pCrrT7}rNTEQs zet(#%h^)>HlS?wC5%no zZu$twB5(fLx@CN-nWxZg&Z2){Zxw%-6GQUGMqv-m?wDme6P*NaKL0)CJMNhp7_kZ` zgCe3STn)&E%9#7W?Ee}~X66uz!KFJ`=Khoas1c9C^JGbSuzyavpSwT7hxh9s9R>@9 zQ^QDtb1zIs=HhO7zMI~Z(_9pb2c7FriTr|R=Jut2)dEKgs$Xd5ef!$rO|K)y_NSki z#DpiVBI1NT;D=RXE z_)M4?aEAl%H_YB6K!Mv~FqIG0A_wq`i}$P^_I|h`dsS)<{P5=3;c!*ooRNnVO=YSO zwP_6K?JXQx@Dr_^C!N?gy};GS9PyAf|7=4{a`+dX%L(12jtYLMywQ_~He!}-2IFlb z()8;)l%*oDX#X88z6?20X-1#8gES!hkxm^pQ+x&~5w8#g7C?sm$(on%tc6MXa8KRx zUMfH}jwzYS9KIh;wJMxjM(x2VFN$?S(_4DW_lHtqd4_nGxxgAgapNf9%C>of2kqvA zi$A_gs*D&>IU6kPU=&BSylYu+;=E%+osg`7TTzUV|N8MuPXeNnmE_bB8n|}n2^r4i zfOZEy7R{*vQ7YB}G?o$e$%8&j2s}XY&Ps9_qH8lST}a|sKI`<%sdosDwfTk=Hi={W zh#EXX-cDDj!W}SacG_lCCqn+zg8TaF zH`UCI!M>YIk6{%{VE-+j62J;FMrss0u zZS4o$*g6#rM7B&3V=L>2hy74UAfu4Byf)Fi(ZpKX4qHOCe`7j?%2aDV{$SJboTL&u zPudU;L(U@z3yZ9-#>R`-sw;o<*Y;w7=s=B=4O2d8BgQxwSjj^+c zQ2%5nSWuhZ1#=~7p}6L_pFEEeq-Z(@h#!WSyF*$0HLvB?%x@X)IX#dL>(=rhm6A$s zEwyKp`jH?^NfLIQl%V3v+9HB;U5!`R_WOe*Z{zf46RJz1+u`ZbYoBeAR3M~)Ym?;h9!wzxL!ta)#k*HJSa z=8jImH2&jlaf{Qw3HqwfvAS0B-*$cl7{;VVCnw}@VFR}#jpp7dHXhU>lJ2ClgjjY* z@E5urT*ZWw4F$c4MPhqDUCPFCY$`?utfQmAg*g4Vcox#z!0CLxwqmaa1!E0>;%<61 zMX7#=l-kz)-4dc|Ox^sG7A`k)PC6qtoD@8zeZXCw7<%N-Mr3ONSMV@Sxd>5nS+e2B zR0NLB$VB%T$0#lPDO_w~5y)a?2({95jX8$Obt@5FX447+Z2f;>cvNm>3O*`D?piJ9 zy4<8-{_90?pG|{rw@m|n8mt5E(@}bLD*8m!`Y~5wVGkYExeFSYkQ8J=PIGc*x)l;{vI?<17z-oK(3f7k06z7kSnt&V+lx){-=1%5X>VU z1?t4rH~&`!d2CN8Zb;9AL(&h>i{cjVzaP`2PnjBU9vXC`VCgj(@r@?MYJN2Au2l%5#_AHWI!VfPn8{d!g=BN$RA%P*EtBbkh))1cSD<;1B z4F-@h9J*deaDpH$n!F3N&EK$1_UY}japc-y;tDDXXqC4e6p(_AD!VEB1!E-Q-d_4} z-HlPr5Qz&5xlx!8r)WM&b~Ns0KG|P#8+!@K3XDl(wn6jXHVq&kqASEcBKsY#&isL) z)AcC3rC*V%^dN4z$hp{f0P^1ma2aEm9j3y{75iw8fw0%3qnC3v?b?6fxZ+v6H8QW+ zJ}>4X9IP)#*w-YU77A=2g95z1HG5Uze{m%!i{7g6P9ZE#@6?2k#NZ-rB4vC`$R}gh zN^jXqt2UrXNlOkx`Y}H0bT8c7iS8Yv#h2w;PAC{-_st(}NB^>IssLFoLgp_^2t1^DU7Pkf-$76D|%CKQb4^f4Ap2lvSfVK=rRUSQ>%1zaV4_Ru}E8{CE zg0GwL$Ps8feFWJtur6VF>`nzkh%L{dYZZZrd&OPWu9pR848LjNcI1uaaZ}L}e@`#1 z!<3GqwMxK7w<7!b^%-TpzUK7Ao`{nG!VJ@}_H$U)H#uCYxJcIhzw#J*vXRBF<;0Oy zEA|WjgwC@$?!8p*`2ZBUJ5+qRi)eiqsj}{;AzYA2S9M=Tq>SyfrRjW%#MLFBfB1u5 zvJ-*)lpibC|CGDCl~0rkwzcnji=(si^Fwo3h^)KoS@JxwV0NbNz7G(>6YUWG$V(3i zx=G;Yqi}JZJJI8^F*&HBg%#i+*W-5`447VxEDU-3AR6ER%fnRLjh!5tMwU77+$f9U z*7#ATRVt0XeS-+Rfxad`Lx0hYg^d`y2;QO0M5A=*rks4EJkv?~u#%6-Wn_FeLoj~s z#f3NOpwQQ@Z<>&9C2{I>a1qR=8wRU_yLtCqUu*n{!Gd)GNK=XRskmbkO|W*@*@w2^ zJUv3NGgo{jO2)L|E7^=}D*K?o5=FuJ|v9W1S24lig7&r-fHb&9{@Wl|x8R?Im75m@)4Q zN7cn2k6*mR$=GDzpqAP@dUx4OWRe@E#I@@nD<`@R&Li~5wo{P)t%j_0crhp6d#o0h z!sq3fEOMIt`OoyXq#tugfh*yXw(q36M8W%?rEjJJzYDBh-q=;P3zA&RitMoUL#@Lm{z|fsp)i$bKsw&$e$Q$iGZiK^hY%iLm6Y zXjpud3KC;0Dt8QJphmz9mc~M;Q%7x-56}BRVTBS*B_A3dCc$uJk4>H=PEZo=YmAsw zcM+lzW^1uks^BX22eJL`Y2o2Dj$_V;O4aid!}{}u-KwDE$G)Dv2jRLUJ@W{Mbzh-? z+yyQyOcG}(#>?fnYc|NiK(hYh%KI@)IYyY*HJtald_p?X$%Z>VwQ&BhQGrxn#KvZ! zjaV99^a?)_?O)rBi@mlD$Dya!m13(@nw`5w#Fn7wdmsf~{Fn6Foi6a&Gk0w`&E_Bu z5=BzhiXSIdUyde8%-9w$k?vGz#u5o$8xZ$w(d->$LY?s?BXZ)}GlAgCqdcgF`#pe@;6VGFb z6q<95Z!H9E>qR0sfZPV1rzx%?CGi7Wk*>yzl(bD|mM(qriHV^MnNPt3A6SS5<`g-& zU|~gSm;=^Vc(Asd8gN%gS;d{AF}R_Oyp~MK0~pc8>DF2)NaDX5#?kr%CI)__?2@uA zO^JJ$0-c5=`KNB@cg!+WzJAN&;X`C3Q<8Zx79qGG;4hT~<&|&OJKk4q9X?!PG^=## zKpd_y->p7=qw#ihIQZzSgk~ZNkR6eXAE7$x_K80q^f^z;J5nAgJQs~IBU?o6?^_WJpIsm7l1Q<&2%dtLrB!!wRITEHMP1?h- zuX^67IR-o|C5WDKW7*8*QY36UXo)bdgScyBCNiEO>*24lV2*Dc@w*{yIyn@tGNqKv zXMX>VLUQJZVjurnSfF$s@$(5 zhrWCW@8!dpBYFs`h{Xpi!0iqTlJRbFV=Bkr{^`;3)sl+o>q}(qM>qY^H;;GZ1YXP0 z(!}KSN;d#&Zu)rbuKuzGcLi?0Asj1K>T1jDPjU)uSso{rzD7R9ARbV|ls$ZJL`Wb_3hw zzSMo9q$O+q>UTZ~22wK>kaaG$yaW0uUF~Mys{x4F${VZ6jn#TUBj!t*1Kc(-ZWHw& zuYo<2lN2xeD3xgw>2QA~haH`j2}{&PAuS$+mUJfI+q8txq3u7)v6D!xgIfO+iS}1& zdLxHALW`>JL2+kCgn=8ysMvDOvkR_VO_$tT_%V-Q!~0(k>1<30`9!Hd>p5& zWwG-s%5;E~FpTh1zV8vBt<mi^7D>;Z|7V=H8Fj8Drl1#zvQaImR}!J1Sy3WA)c5snvmIlb z6_>i4LRv7+&aQVJv-7d`IygKS&=u)`7eODv%^&6GW`X=U5Z?b%@Z~B}Fwsezk@#{b z`A7n=%Pf7U#qDa;?4CaSzBd&o2z9o?-Ux6~a+W_6-jRrb+S;v87oeSP*p<2QW+>5| zDv9L_s9%DEr+Yv~j=AAVt?#kWjna}l{^~vDow7j|hZCWUPu_Z{$82*^ix9|Hof0C1W}0GJpj-LS%Bq-PXj$!S!^wLIV)pnR>vy!T@;zXh8~;!k!~2fmnIBHCf>dK zhw{+rq*eYXt|YfYSnmN+?P>*Hm$f$P-&N<`suA&ZpsD1Et4Fcfo@BC}-g5(KsW(Vg zUmzh4GYq{Hi`}mKh?PYHb(8i}yUOTw-6kB6D%7Rzy_Ma<;;XCUEKKNNn55*j4WRD8 ztUb>!X;{=`OEz;Lx6s0IhGiLhQT|F0kymu0G{2Ragx4a``T+@yYx{W95vXLzt8FTiq=uMd$1x= z!WIl2LjG*pG9hURponeY90T2T?vB zG&h*uFN}+Me>^Moy6vz|SFXNw6ry`8!*xJfX>14~KPGRoiynrOKSNS&)Jx~1w1@@v&VDicm#=A?nwc=O z+R3(8{Y>U=T6v3>Y0P@he}e{ouMeSwiy{vH{(kzCXi5_c)UVZ5dLCuR69bL`#gD)= zKX1c^b=F}5M24F9nGj=I_EQcQi{33NOJs1rhf`hQS-Pdf1bcX0uYl2+vl#Arbu zj>tSnz0V@l<_q7%;tzKniUGHiei33Hf%G4# z|6C%Pg^Gmqhoqt@+`SLep*NTiSYNhi<4^|Du;P*8#e z43K}0fQ{?Yu{7<+xgGhB$~%OBkubj&H4j%ZjhpWrO&aE-SwyP7ex))=3qY+uf76Sw zy?iPEBTL?Oa=^1KDuB1uqx%TXPmQx{0k7D6jvz1b~gD4R|4TNAQ7` zEk@r;`qc67)axTiU>LT8b z|M3OADR(_;`y1GMg_hXrlCOclo%7IHCsiuxy6KCy)*3%eOrzv2RL%$1Dw(~;kZrwm7 z@94(RJ(r{Sc(guvN<3s(x47k_0f1MRyH4T()hJ|L)`5|2at$p$E<8`l4PyM9hyb>o zIqg^kqm(dDYgWQ8{+Ro9T$7_wWDJb}(zpiKeg%UvK?5{f9)1;WV+O%E`;eeH<7Z)b91?%1XD!y)RAFj zl(4tmTvd9#!2UPq_66^ZpHY#^ftD85CUk4zyc53R$=TEC*&dV@zbY=jco5YknBB(U zIVuFhe;VT1V%;;!pZOL=tn@*d%pbGsoSd3ShL%uIxv*uQ$Q5Qx+C3fTPpVOYB6v?X zs5EUgx}nqA*U=MMr1}XiRamdcT5@EAltw+O_t{U8EJ)W$?{LztJ6Aa%M3Ng`b#(=m z)>2YcC}e}>H?+)5r+DP(GV}94Q0gcIt)mIRb zo&BVsR)8~;qx{QvNi(z^kP~73@%F*=nSfYm5zSIspjw|UWXo1KX6|y;)At?zJHoL* z#C=oFK;3LMMyU+tm}>a@Tbg%+a)}a;ZUnc=KKY8-PsvL`NbrmFG5jry(0H8lCj)Z zGS$B9*xxsIgl=GW1ycqO1a9p0tH`syj@!F!9!t_WSB@}+{;nl^_j>cgp7or?ebM%U z2O);FDAh^?aF%D298x1`5`M%c^G91zQesU3KmV&aLKl`_INEQn(BXnU19#5 zx7q85t1RUDF;8WTBu#^6 zQOCdc8SXN~ap^mB>rs|c=t5S$2baf)8#wX{8H^{5ZuKr|k+x*BOq9eg-dqM1UgWC4 z*wS~hUo?Io%hF}!x>ZZcQ^)A|R*$Q%eTu(2UxZ;&JVPG)lV1E2ExjV8b1e^OJgiJp zAyN8m;;e{z!`zcBK+uV_BLm0t?ixV`JU;cK%uf_n&&OAZoNuc> zdi^LoM&8qg!S7po&CwTw(~X`^DaYdvHrMAD+g+~&GJ;`wYKps0S6n#`p^0yN)8OWu zaxqvud4u_>k^xyJ!!BYKd)%hmS+FrVAuwtXzz};#Wy)-g23TrX(_oM`bjN?(3XRp` zP{yZEGL?hE1sdvy=Bd$PC|}Rm?Y!bZ@G;H1>S2lLjiCh}Ze?!75HI4vdm&fM-@mj| zqs?DkZsI(38bGc+OLA9w2oROs)ThA&KM>cp-?S!=`WD%s2{@Q`U8}fk!4uU-1^)2=}2w-AKHcb(wkX%kE5*lvb>^Z?aUi4eZYYPYn;AKd3qE>~+0#MI@&0)}arV%qM zykyfut9$K~;P1|9pd!KF4@C7t++=u7yHrvin5SrjXP-R_UkF}aT(QXIWP-H7nHbbo z`QzGKm&2GDj1fHNG=n1v;i)PwxLt1p@$9@32pLfSje@5wer{z}Wj5!>+piZ;!DKV` z?x%q-7>ezl?4koj09kPW6Nu49)v8M(RKBn~C{X5aNa4AL>6CH-k*7(&rD&v6_AxV;<&Or`&bP1BPNZzOYBi6eo@ z3y-`=v>Ch*CRx20mNOOVLOiXYZ^pI>{Y?$)QqYp3p#@BKZb{l1{kak>fi4$VE6nR_RC#H(Vr(XHDuI zEaqSart~cS$Hj!me0ids%jY7b{{ZHkcvxQ9{NK2e9@+wD0W7$ZKgZ= z*fmgAS_gY*RJx`QH*IQMXSeeyhqg;9TbL7VA?|ilZMNGDq=kNMK(z-)rnGPS-^^FL z9Mz+;A#;v}uq$4m$drLW0FbEWl)yNLKyIo4Ae2VJM4B-v2G$|1Bw01~lk6 z9@YZ_6WlV_BF+jMIE2Suw8_4teiQYBI_sI`6^$`iHj=B9a{r52l)gT&K$-F97gNNv zO?G%?(W6d!D-1GLeZCv-rt6ARN^2OspdG}MZx1N?EX_o9#H9E+{0qVTHjNy{gj-5} zG-pP1E|Wj5hXt#+J3cd;Wa97=8cFj4r35}esa5ypT+YCmrQk`=>8hXRW#nW{66{PE zn{7QTs~bwh*Tn%?vm8W}C0;9vW`FkSuXUkKJ;%^{Q1Q(DiZ$H z@PFFcB6y>3f2nD&MRqsfk7ZBO5i#Nx9g4tfFLcXXg6zvl*q12^t*OqhP@9$T?l+1S` zNKU2}b;?{CRPuxQJOuIO22Jb)-;9!<+nY|vNtlv(mW5~pD1+3!=hs$#+7D-wg?p@4 z<2uCj&kECQi|4Yj1iub0K;j&F@l`$7op49&EGT-MC5ItDek(Z2KnRmu+&uDHq=45i zr?qj%|LE}+-~ZyuX@2Vo1svO0{q-GT_HQH}-Fa-8b~V1=DU}{G8T_|*{0Ky3CS%Lz zc4{G5baBDpWJ~64EnF2=;``i*s*hUiPcS}oA;BQEF1lwT-i{eETi9APwXm=qE!r%x zfeJ$#MRDKiY9(5^=g|3>@{hLHK*G`!`5y{@aKPC_GW8#C|L@iY%axOyZ?OA0BW&JlB`xOLdX`$-8ifs=Bw{3W*mZvHlv0Yi?*Lgq`BwGJQY(cI>lGm z`tzoOn^}3gvfSZg3YbY@KGa8f6Fjt(ms2LgzZmZSbV!62|4&Liw7p$MY=L)9nij}! z50^CKj6r}iSrze*v=+8?kRO_%qrL0&fFo+k?qSU3*}e{s^bg^$eIHR2Y_d2TLIK>K7T~E_ye_3EowIIg=OpE1#)w4yt)rvjBd3^&X6Iy7(7>s2nrHcjj%Q0 zApkJpN@C%}H|-O)Wc5Pz!?dcy{z`XcMD%FOGDz1f3H%1Gx%(#I&~r38-Zdns{d z&>tH0U{Sj6(2&v6Ll;4+Kt@RpLgfN@ZUS;~QrqMP0=Y4U?4r+w@?~B_p6!BpSXlvrSG- z*jvpikzIHXL8;fvXI|5ar7ctNhpgo?bo ztbeB7o$>Qg6&b&nFbEp@fw1-il z5Kv0m(uu}}^T(vmiAY-apvZWr9wS#Nq8{w{GRj;hODH>PFFE_e!cNdm`o}_MnWHq6 ze>)wN4S@ZxTmFwqT>U#;HTwR4DCbY`Mn$|(jtD+#Rgv*7?3@k^Y$P}vKBu$i6L?y| zu;i6Wk%@F|%yS75AzTwDPPG`OXzWg$ykDMsj)5T9>f?3@c_e1ONq)i%R6qPjAVG?W z%`p6eHUYHgLki)&VCAR^6y)umJwx?;oMM@~Wgw@7eP-KzY*EvWzQ4!Jgf6aSoOLq0 z0#YOyS4m2t%Izp%c0J?xsvZYh3_^PX4Zvie*kG>;41-tN35PDjnDiswt)`C~5;^^p z*U0%!Cqq1cC)Y{nXywPNHo^j)y~WHwva20m4l6P%S~e%R@)*xv>J4+wZzmS{t_LO% zzH3yD#7LwWUpHHzCN)Uxg4lV*(E$?0b>_6V=o4!}RTVtj0K}!#P;n$)6bn|jYx~C{ zPdJsa$)GY5@~-%e~9Vb$aS=)!~?yn%?=pmU!%q)OezOO5=1 zPf!3k(c)*X#e_k9$3uHM!OtPuZxWgC3U!6;=*zH2o;14PTs96N7a7bXsF=k|-p(JF zD$iie+2470n7U57a-LUDs;*=LL%e4G)38zwG&x!4)Sds49&TMV%-$w9+lYODYR|wG z&hhtr5;k~9mCg$VqpOjFin@~?yce+k4`eJb&YS}r5)3Fv>CvufjJ~&qJ^LL4y?nnZ zI@uL(YDo{^Ub%F>{90?a3-oNld^vrS3S!fP| za2QkaOHMR?BawqPK9^>SY-FGm9tssJ9070cF6aSA;>+TB>W2P>(H;o~HTE`7k4>P{ zwRK>*AK$uFcwrlqluYD!dW^>;>P?kEyt+3jGip|CzNyWq>L2pW2Ge7D#we@Vyd|kn zb3r|Dd%QyWiHsV?V*-=`t{?-dug1>$PkYb(K6hdarm_cp!CbnVE4`Pil-RF>l{SMD z&b$pr06Of-f2LKNo-|;(`iVO-RAgQfy#&9B)U)NZ|K|p1VcOnmHX#;xgZ?Ui^v8t- z`SuQ$#Yklk1S9gkvg5L}5R?Ae=XhKQtE&=n6#Sf}L{>*oeoZtX^-MLnl~HrDmRdCR zf;;RqXkUq<7uv|lV>+wUFc{%bkw^}TEn28(8e8WD{yDQaeBP4f6N5dfVb>dvs3x{PL1fK*wQ0))cZdq>4X-bp^^YW z<;WDN6%@{{c>{vyL*u2s{i;DFy5V^3Fa8wq2oekh;I8$UOqCF>or>|UzUcQmOX5@P zU}^R@Vcx0c-%6<7K9Bxd`yyP^uOC6CLJdHy71BvOn|5_sG$RCymq}7#Z?ojuw@6>R zHde&Ry^#dYlNAOS6RO<)S&lHX%N6L^;oDE6V$`hvgm6j*xcO4gU)%`wFmOo+Vg+Ip z#z15MSU(h@zZa}JQdU=uoR9QYmEzw?66n=jJ= znYCrGKVIZB@uR2tS+Y(E^k3!caaY#!_3P7ZdnRI{%jb|{j8f51JO^rt-T7M`Tx%(} z>D*es(Da6d6O6dMM!z~h0N(biRBADi>Yxc}mHn|pzxEmlsQ(MO3a+%PR0~u+a=cX;ufF>~Fe~w>?TTLXeW>TZlagKwlSH&Bcc!Y53ofd8MUAim4DRFd-Hnr9 zBYxTkTV@o8PHS7w_q-7f680_7!(2dM+RB5)FXvL6PKKpHTHK0R7Yu`DlCCAGu-VC4 zhlN50A#ea~GHd7$X_Ab>T+N9?&br;EtAsPGQQF<~?+Xa+JIGD=k0mx>Zt<$sShMKuy4<*;p(_@Jk%A z6P3OG7fPP2z0525@eVvsKiH>dH8~EmogACW=L`hhA8;=473IW-z(=at5%O)w=;}V1 zVExxiWCD>^Lu@Mx#ImIx2;}e68?Hp$ZqQy^GkQ#sR4^uh>BFNlP)#Ocl|tY1LwN?a z^RHA-kyjRMS?2_1qgZ&$%ApK7CCieC)H0$U4is9WVO$n0I~iypk`1bt(pXfu49lmq zRB!^zeWK(jay<>r&Ajjz_fdK+pTaz?2KAUoFMRf;g(^r7`y1dRGQl%5OoO5{ERsz{ z2?#A|wS0Qu9F%=`*Jv);+2MTN)2(|P0$B~HwSBDMX;AI&v6yaVj}RkYNla#a|}uu};3$6Cyk&D#kBzgsa5>iiq7lvx@DOlD1RGuicTS-%%ma4dbQGh3G1w9e8b^0!doSgrnDp(x9*zHp-wXvP6MEyCl2gG(`_&4dh%IN8D=C&y=JSsbkf zHx&mF*tSRNcK;Rx?Unm(7&|NSF6Sb$r zCqULP$GvOM+!wKPzFBbtwCY%|hH9pwo+DW#D%iiqSmdbs;Smt!U~nMNZuuQ4D$Mae zc%d4OC36Z10bx_n+bF0Igvp3RAlkw+rWSKa-9)A;m{qL^yXH1Y(x;fCEkHgX_ z*FFBmfSk@ZxiNh9<*yi{9%gVXqNe`E}&LYkq0!_td6|KKdUWbiG}a-l%JL>n@)ew?NKs#z{m=fBQc>ps}gBD`Y=i6a=^ zwnwC?a>urHT=!*3V0CIEd@>eQf;?qs)k^eKQmDBw`tWKh(xSRxB&dU%1_}g5bY30c9{O;BdT4w;` zf28(flZx+uoLAq`|091M6q*=_y2808;Q1jU2VEcFDWJ#9}ac zmVMSS=Yk-&ge)FtHFh}!BvL(zFsDcaoeKP8@z-}z#vV~%ZprP{!yRajRI_4@h>o*Q&RR^w!$xH9j@ z@LO4Kfql*{rh_NmAi!#BMt2x z48Tn}C>^&f>Ay$j{~+gjh&N|8(|bJie2M>34AX>`5g^ChRUSDEER7=FH>q@9nY#>}< zqh;1koEYIV63IkVnzp3Nn;$Wn?!MdD{pHhllCu3f zI%n+u>Y?SM5!J{M2UbAZA2Q>W$83mmz)bUY;vvTg9hS*urEh;|f|v|e9PumjI$M01 z6u9MMe5HP*r{?BPz$<5*;S_agqZ)F8rVGM~veo5g{2X6LKFk2KL<6r&vYan=`MOZ> zD{Uwnnn-MWwT9>IJ&6RqQK4HvHBK9uXcz|t$_N9~YY&QI{5K#z>CIh(>HCVM)88Tt z(GMP#TsOXrMCTohp|PeXJKk8G7K9F;%Opd=zFA%dQ@Mt6+t;H77aUbq`@cGJg^f@=wW} zrCyzS);Ua0apJTSs^BF&$YQE=8ILP11~@}EeLrN_hB@Px-w*Jaz2l!J*$`+&FOC%I z!n*Z=5)$^K*RmQ$*GF9!nhxWiwJ^5e^Rv2HY^%Wzz>qKEF9%hQDoeN`baZyqx@&H; z9xT_*R`lzUqy`1Z&QruJJ9=(9W76AI^ktT2)M+4OBTQ4M>EvdIYo2|iIa>VXc;^di zctC%CEn|DI^S6AdE2n1@NaRK2h~#UlOCpF>VoGN%jT5DN$fBRj zYKzUJ!Lb7|4ZB2dfSv^uI#0aLxlh27zi&k2USaybezF;{y z%8p>P5qf|?qp=ZQz%u7QPBmsr{Z2&ZCdYKB$vfCD%<2m<>4S)4d9Fyw`vknBB zp_Kb+Bm|UDi60WVZFoGk=y)`^3KZJqBWd>VPfy+u0f3}Y4YD|p-TQgfQNWjn$$%sL zHUcQGQ?4#aLlYKJ5s#Nth!C2dRjN*i&^#(UHYiv{9+{N&6#?qm;P7@Dp5dQxK&n&o z`Lp9aYVod0ZVTRllFD`t6-nvECw7VVAG_Z#G|$DUzrsoeqFoM#Jak=6I+m3{O-wD( zjSWkI`Yh>4%jlgJwhjCMaq|rnLIUuFmc{3t>QO{aJ~6~3Zf3XBQ3Dy@yLzrJ&`ub= zNzS!MWg@Idzm28GmPtDcoefY7MOk-IqnE+&$?$Hm;zXDvvGx#W6N`UyiW3Z8f75ND zr-!tB?=)OTIJw^PQB)3ZLfDnsA^uoqZ)wtTCOP_;lLPQWIk4!`{^jV#(&}$+Y;X!! zsMjrL^#2w)By=6e44$+TvCn>vWo>(0a5d;Zr31@J$CYClk*);CA3r5zr9{{{`*o80 zqgT+=x8r!21Jv*od3Ln}GBQPOZr1wdF-6LN?99_WoeO)q zs@d|pD?B6sHZ~9E?yE>dT}oE_B}`0P7scdv3~tQaN3PJCgEYx@gk~CQN(!2fgY~?Z zX;*z0bhzZSx*?n8tgzF+5RP$0V!kI?obb!%h9G(N;+Z+!`Gzjc_#~w-R;cQFz>s|W znMg7p^xF20^{#!5iq=RfRUxB8Hy7=+A&BMWPrG~nVP_-lsTwy$U{?pb7!)Od`}geU zVmV$uTd>ML;{-#TH*)uJMVVB;o~t` z;khdDp@l*BM>^UVNE{rsY{TG=&&u1$#1$jYT;g`UX|#+c+O%dCnjhpRv-*Do>R?+v zo7mJ*Q1IZ6U6{?+ z#zPK}6A5ii`;5=a`jnOB6~}1fe(w5Fw$I)?+dBF#w(a&3JfNg=P$gl2snvCudeiVJ z=+b{X4oa_92C5zq({J*$hu>Q4 zR7i**ans>lOtSAPhUy^I$p6^X0BfQ=c&Ev?0T*NqlXHMhi}JmgsR)~M3*Qm_3mtdk zOq2MjlV4*YS-1$DgbAEf@>~nGM*4?a`H5W7M zdEWmEV3gOJjw^pig73eyDl+QQp7a1S|LEu4gGRO)zqk(5?$W|C>4bK7`a5bY`>N}R za@ec9@_f;+ryvU~wxCUzGV6xV+l`dG`3MC|R{eCk*AJ6OLq7(eRX-U`7=3KOn+b4G znbvHg@O+gMJxjlLZ9ip}g-g}h<|SA0@jY>ddiBf2sP%60t=HM#n|&Z4G0IyQfs72E zrz`wso71cGn^zd#)$fI3_D@&rR%{+)YpIK|fi@ zSJLep>ODVgoeK7M%5?MKHx{xHv{?lQZICZ%Oe4KTPAkMz+YEaH#%w-(b_;3n^6SHB zN4jqEgpAVd%j}jKUh7)^rQO{+Uog2+8Pb>%Asw&hqn%Q-*^a_3MZI`IZ5{Iwhn2`g zSTE5lkASvhUOsH8W`>p09Z{-M1A*A04Zre`f%|UFJTBNIq$>03`&brzKp?@{U0Zdg zE|Tr6shVYzhE(p7!cKZd%(O#B7lqFD)^p6lV+V#0{j^$lfQ~ALeKEn$5vDJvo&74( zf{Xa=Zfp*UPpx^#cJzR${6hhBff^{BSvsqHuG4N%3yisGW~lVGmd*naK5iG6LJ2fI z0gjH$$%t*Ob2Qf)$zgxzAiylR`c_Nea-i#nIT<$Dm#uT71QHvZlAS&Sj%(JX#}2TI zpNkKA4bscQO)Nz9H~<|%|=wFzwoI|Ze@1j3oF2fue5qcW$ zv9T52C+GVnh9dl+0X5UG&0j8Xb+T;}ZHs^?NGx-?3%Vw8q_BWYkTbl#v(oIrPH{8+=QLC`2;N5?aj$ zaU|a*mnwU<>ZMe_gxee1%wOz0bAKpd6kXN#q0KZZ=_FUQrpO~b^4zLQcuE~x;rO}jvgevzdg#RQ8Z4J=#C%UH-b{^$v?qZ6wBuh?QNLk1Lb0L&l8B za%&t=IW3D!M49qHbNLuO@Evd1&BOW8rzwIQ16r1x#j%%L;>BAl)jw~?8`&jt#Buus zP-DIgD)SO`oyxO_la#dMc7|Pq?9X3jsA`Eoy`ljS?OPacO(V9R35e`>K+|&LewaoJkl9&gdJUkPg{g>x|#ME z5Tk3HMn=2)a@cO;*=`BGt{r%aQ&H!J1~O%VAS@v`{JJ2$t!}T1W}zuq_Q?h9Hp{~1 zyUTG?Ey>qN6=3C6#0x|aZY`#Q6D853w=R_>Bx;4`8}fXy!%F4p3BXr3Kt~8i8nNj` zIV*t(0Dn^NwH8j|AI4fm#EmNZcn*SAL-9X!z+ z0ToXU>|dr-&ck9J&*K#9@HU~oG=e~q9QX306~tAk*^TXIP?zG+@*=nTHC{5PsDAm2 z1O6vk2Izt4aN9@6%2Vd{crA<1IAdOC5vH*Bkb3z~fxu_BJpkVoEOzMWLQJqOLW&p8 zCi5KL9~od;B+C&;m5g;kW_3iN{ZCM$kfz4(xpk*CcF3+B|Hp6HX$59RxC~G?jbe%?(xaF#Va{PpYuoA4q)^TA)I2$)*&>nX?yGPN?qu+fgH6ZbL>VmurtZE>)`1M| zIbXowzqEYcH5kYfH11UkDK5X&NuB@B)J85Psx{Z=`ou{$lT#XF=_BmOAk1{2^)OK3 zFxZi{{)T3K;gcvnqq@$^<~74;uJJEoV$mfmy@X7LSicCs-6e~o1;hROw@9-r^&M73 zVLXTqhBJ9l(#TY9^(WN3DsTF#OwbujeW>DGyBB?yez!|F8mdLR@a5K8@NH|3S9e*^ z>!p2F?>o){K3kL{M&PbrP zDHdf@L~2;M6!(}i2_o}YTuEDQ)A@fQ8jXsQY?9W(cvtvW_*y@nHA>gb<;ceV;?SMJ zM>&h`O+I4(#{k{xf6paZd?MGc+2PyADQ);MI{y6?7OZWd(bg>-gM|i6Kf9SV{CuV` ztBuC^Q+~O;5vk`gua$3&tG?ZB=G+w#U6}w%KE9W6)=n`>7#y77!=p5K=<}?$=B{Rw zU12V*;m~?5%^=uh0S)2tKQ#S77^aB@Aj<2vs7tC(?c6QMUK56|z8bx{UrD!G3IZzi zWn{TI=J&x{%z)5OVbaecL|lQJKHVE{mc=V`lo{XNOvr*-g{~T!4R;#kysmh=LlSSg z>Ty#roNd4V5uMZTbCy}T8!4mHCcYCcja)&Kr4%M9J@sww;)Rc6>)-MRLRBj&K9N-r z8{o~vKtU9*?%#urbO^7wNiF(304<}k!p`9;GmND<$-QLQfih+?M`x{(+&#)4d5Chb z0C257a9Cu&ZG$PWRHCQ75jV^4q}(e|hWx6>Qvw2nXGoVAVM4xu)6m}CO>AP8%FPOL zo8SZPkD^Dxq(6Cxhly{T5y74LA?gF)m8C*Oes{owCJ&N?75lXN!JeD}pfX`sAvA2Z2uOKDeq}UL@%mYl=w|bsAV`kmqcF)+@wz zOOZvmI{U~>kV=J#W7B+T!80`W=Ij}TdbYqkT+K(HU-NCio2n@>7;_xGaBR>hw zF`<_VOG}cgR?gV_K|q`vI;r`d?E_-_ZPkPQ*^H}x?zZ4YClg^pNV{)!O73^zU_G55 zbABcdK9sg4`7ZHPA-sUqn(r-8VAm9Dcw(`*xzoOUxCaP(dLz?iO?~|>P$h%7Nkg+>B zTRR=wZ6Y^;7LFZUVz#$Y5E66djy|6U*K0*ypT6thc}30v$0?+&a5KhD zdNZk|Zr^;NaEc^4(_U@dT>%dnjCYJ;g*KY=4vxnI)JvoS5^emLj9j=nftqW zqLcGC;6ch){DCw`1rVwl$af`0FV^WF*NmO~#rXeGc6Rm!Vq8bl|4nO0&)!3`HD16G zzc*ZT>)3T2;+tkGuPLi@sr7RN`_mwW>GOWst%X)dV%r%?=O3F*maVHHh(nqRb2K$i zUuu?Mu5&?g`u>6{kY~e=tXUv$(83NYcVvX$YTy3Z-gK~LO(7U5#FTXNmSbG}FMHVw zBYt`KE2(D1KXak^&}f>_xpSxEhwj`Su>uQGqGKI1m49FG&Chb;<;+k5n>lz4x)~CB z${?5r!#9*3Z!LFKHjak&+x?BrI8t}XBX%n%@p!fRBzcBQ6f_i3eLIV)RB1IaTVI!e z^E!Xacr+M9mc%ZNu8bRbt|aTAk$GiTnd!_wq-)m2C=LpPG37f%k`{AvT7;byG7SC= z!H|C5^7r&olIvBDv`IQ|WOSYHIziIZ|Ah1O95*P5=t+sF&@TK=;JeVm{) z5b&;%hL%ChFuRrMhvWhgd z{qwHNFe29d)zJM{V9;MQFXi4~4dTx%dfr0+3%~n|@%?8G(O*XA->X|q0j>Pso%U~= Y?*IKLLh_pr#Q(MR|G7Ljyds`tbYFyI0L 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 XZKx~_NH44?F5W18Gik$mWYvEIx)sfN literal 7483 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 yaUGBV{Y diff --git a/images/smart-completions.gif b/images/smart-completions.gif index 4a6bfcf838b531b8c3977a0b2009dadbfd09d6e2..09f45215e949008a17b9ce8f7730fb435f69a877 100755 GIT binary patch literal 148655 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

cBi$OA4@S#~!XfntEO(*-sK<_lF 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 WI|P=# literal 56054 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

XLbOW=KG>hd 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 Qq@!I({p*NIT?g#H06*oz>i_@% diff --git a/images/yaml-validation.gif b/images/yaml-validation.gif index fb4c4bd9d58ced74fbb26c9b89633e3cac94e2e0..2a3079039c4ae4e868df8c23d26b3f02216a7e72 100755 GIT binary patch delta 13201 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 From 2fb73280b006c38ba54a51606d214ab7085034c3 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 18 Nov 2021 14:07:10 +0000 Subject: [PATCH 160/558] Fix the tests under the Windows runtime (#125) Co-authored-by: Sviatoslav Sydorenko --- test/utils/yaml.test.ts | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/test/utils/yaml.test.ts b/test/utils/yaml.test.ts index b28f238c8..2b6852e47 100644 --- a/test/utils/yaml.test.ts +++ b/test/utils/yaml.test.ts @@ -2,7 +2,6 @@ import { expect } from 'chai'; import { promises as fs } from 'fs'; import * as path from 'path'; import { TextDocument } from 'vscode-languageserver-textdocument'; -import { parseAllDocuments } from 'yaml'; import { Node, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; import { AncestryBuilder, @@ -12,6 +11,7 @@ import { isPlayParam, isRoleParam, isTaskParam, + parseAllDocuments, } from '../../src/utils/yaml'; async function getYamlDoc(yamlFile: string) { @@ -47,17 +47,7 @@ describe('yaml', () => { beforeEach(function () { const brokenTests = new Map([ - ['canGetCollections', 'https://github.com/ansible/ansible-language-server/issues/26'], - ['canGetCollectionsFromPreTasks', 'https://github.com/ansible/ansible-language-server/issues/26'], - ['canGetCollectionsFromRescue', 'https://github.com/ansible/ansible-language-server/issues/26'], - ['canGetCollectionsFromAlways', 'https://github.com/ansible/ansible-language-server/issues/26'], - ['canCorrectlyNegateTaskParamForValue', 'https://github.com/ansible/ansible-language-server/issues/26'], - ['canCorrectlyConfirmTaskParamInPreTasks', 'https://github.com/ansible/ansible-language-server/issues/26'], - ['canCorrectlyConfirmTaskParamInTasks', 'https://github.com/ansible/ansible-language-server/issues/26'], - ['canCorrectlyConfirmTaskParamInBlock', 'https://github.com/ansible/ansible-language-server/issues/26'], - ['isUndecisiveWithoutPlayKeywords', 'https://github.com/ansible/ansible-language-server/issues/26'], - ['isUndecisiveWithoutPlayKeywordsWithoutPath', 'https://github.com/ansible/ansible-language-server/issues/26'], - ['canCorrectlyConfirmRoleParam', 'https://github.com/ansible/ansible-language-server/issues/26'], + // ['', ''], ]) const reason = brokenTests.get(this.currentTest.title); if (isWindows() && reason) { From 3e72faef04729651cbe84a751118e93cd68c6267 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 18 Nov 2021 14:36:38 +0000 Subject: [PATCH 161/558] Adopt use of creator-ee (#132) --- src/services/settingsManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index 576e46591..2f8c9144c 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -19,7 +19,7 @@ export class SettingsManager { executionEnvironment: { containerEngine: 'auto', enabled: false, - image: 'quay.io/ansible/ansible-devtools-demo-ee:v0.1.0', + image: 'quay.io/ansible/creator-ee:latest', pullPolicy: 'missing' } }; From 8cb43e4f90451a75282e9a43251e0b5e8f8f9bf2 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 18 Nov 2021 15:03:05 +0000 Subject: [PATCH 162/558] Prepare 0.3.0 release (#120) --- CHANGELOG.md | 14 ++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed7565bf5..492a7af8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,20 @@ All notable changes to the Ansible VS Code extension will be documented in this The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.0] - 2021-11-18 + +### Minor Changes + +* Added support for nested module options (suboptions) (#116) @tomaciazek +* Adopted use of `creator-ee` execution environment (#132) @ssbarnea +* Updated container cleanup logic for execution environment (#111) @ganeshrn + +### Bugfixes + +* Updated plugin doc cache validate logic for execution environment (#109) + @ganeshrn +* Fixed issue with container copy command (#110) @ganeshrn + ## [0.2.6] - 2021-10-29 ### Bugfixes diff --git a/package-lock.json b/package-lock.json index 6682c7ded..fa0605db7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.2.6", + "version": "0.3.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.2.6", + "version": "0.3.0", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.14", diff --git a/package.json b/package.json index 196ef065d..ccc5fdc9e 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.2.6", + "version": "0.3.0", "contributors": [ { "name": "Tomasz Maciążek", From fc43c6bb94d1e13c4045cc799034670fae438ac9 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 18 Nov 2021 15:16:07 +0000 Subject: [PATCH 163/558] Avoid release failure if version is already correct (#133) --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2d344c276..97a5b74d5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -195,7 +195,7 @@ jobs: needs.pre-setup.outputs.dist-version }} run: >- - npm version '${{ needs.pre-setup.outputs.dist-version }}' + npm version --allow-same-version '${{ needs.pre-setup.outputs.dist-version }}' -m 'Release %s from GitHub Actions CI/CD' - name: Log how the metadata has unchanged run: git show --color=always From fe76efe8ee25de227c0e0939a9d5d05e66d01545 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 18 Nov 2021 15:49:59 +0000 Subject: [PATCH 164/558] Avoid git am failure with empty patches (#134) --- .github/workflows/ci.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97a5b74d5..a5adeda6c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -314,7 +314,14 @@ jobs: name: npm-package-bump-patch - name: Apply the version patch - run: git am ${{ needs.pre-setup.outputs.version-patch-name }} + # `git am` is unable to apply empty patches and this is what we get + # if we already have the correct versions configured. + run: > + [ -s ${{ needs.pre-setup.outputs.version-patch-name }} ] && + git am ${{ needs.pre-setup.outputs.version-patch-name }} + || echo "Empty patch ignored." + shell: bash + - name: Drop the version patch file run: rm -fv ${{ needs.pre-setup.outputs.version-patch-name }} shell: bash From 66d0d213138d328441c50805c6296366071142db Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 18 Nov 2021 16:52:58 +0100 Subject: [PATCH 165/558] Revert "Avoid git am failure with empty patches (#134)" This reverts commit fe76efe8ee25de227c0e0939a9d5d05e66d01545. --- .github/workflows/ci.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a5adeda6c..97a5b74d5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -314,14 +314,7 @@ jobs: name: npm-package-bump-patch - name: Apply the version patch - # `git am` is unable to apply empty patches and this is what we get - # if we already have the correct versions configured. - run: > - [ -s ${{ needs.pre-setup.outputs.version-patch-name }} ] && - git am ${{ needs.pre-setup.outputs.version-patch-name }} - || echo "Empty patch ignored." - shell: bash - + run: git am ${{ needs.pre-setup.outputs.version-patch-name }} - name: Drop the version patch file run: rm -fv ${{ needs.pre-setup.outputs.version-patch-name }} shell: bash From c8e4b6c849d0ef65b4e51680261b8fd559150d05 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 18 Nov 2021 17:05:30 +0100 Subject: [PATCH 166/558] Partially revert "Prepare 0.3.0 release" (#136) --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index fa0605db7..6682c7ded 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.3.0", + "version": "0.2.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.3.0", + "version": "0.2.6", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.14", diff --git a/package.json b/package.json index ccc5fdc9e..196ef065d 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.3.0", + "version": "0.2.6", "contributors": [ { "name": "Tomasz Maciążek", From d9667787a51fc941fba8e8bdca7d5e6d743f81cf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 18 Nov 2021 16:20:14 +0000 Subject: [PATCH 167/558] Release 0.3.0 from GitHub Actions CI/CD --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6682c7ded..6b908246b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ansible/ansible-language-server", - "version": "0.2.6", + "version": "0.3.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index 196ef065d..ccc5fdc9e 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.2.6", + "version": "0.3.0", "contributors": [ { "name": "Tomasz Maciążek", From c0c586b974d6c46b009e69bf308268a9a2a40110 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 18 Nov 2021 18:34:46 +0100 Subject: [PATCH 168/558] Revert "Avoid release failure if version is already correct (#133)" This reverts commit fc43c6bb94d1e13c4045cc799034670fae438ac9. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97a5b74d5..2d344c276 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -195,7 +195,7 @@ jobs: needs.pre-setup.outputs.dist-version }} run: >- - npm version --allow-same-version '${{ needs.pre-setup.outputs.dist-version }}' + npm version '${{ needs.pre-setup.outputs.dist-version }}' -m 'Release %s from GitHub Actions CI/CD' - name: Log how the metadata has unchanged run: git show --color=always From 96113fcefbc6165698edd19f0e5e40e0a8fa329b Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 18 Nov 2021 17:57:36 +0100 Subject: [PATCH 169/558] Only allow bumping the version from CI/CD --- bin/version-bump-allowed | 20 ++++++++++++++++++++ package.json | 1 + 2 files changed, 21 insertions(+) create mode 100755 bin/version-bump-allowed diff --git a/bin/version-bump-allowed b/bin/version-bump-allowed new file mode 100755 index 000000000..e9284614b --- /dev/null +++ b/bin/version-bump-allowed @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +console.debug('Checking if it is allowed to bump the package version...') +console.debug( + `The previous package version was ${process.env.npm_package_version}` +) + +const isGitHubActionsCiCd = + process.env.CI === 'true' && + process.env.GITHUB_ACTIONS === 'true' + +console.debug( + `The package bump is ${ + isGitHubActionsCiCd + ? '' + : 'not ' + }running under GitHub Actions CI/CD` +) + +process.exit(~~!isGitHubActionsCiCd) diff --git a/package.json b/package.json index 196ef065d..f267dde0e 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "compile": "tsc -p .", "lint": "npm ci && pre-commit run -a", "prepack": "npm ci && npm run compile", + "preversion": "bin/version-bump-allowed", "watch": "tsc --watch -p .", "test": "mocha --require ts-node/register './test/**/*.ts'", "check-dependencies": "node ./scripts/check-dependencies.js" From 570931428ac870aa505afdccc416e44bff354507 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Tue, 23 Nov 2021 23:09:06 +0100 Subject: [PATCH 170/558] Set the proper GHA email in Git --- .github/workflows/ci.yml | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2d344c276..f28779cb2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -180,11 +180,10 @@ jobs: - name: Fetch the src uses: actions/checkout@v2 - name: Setup git user as [bot] - run: > - git config --local user.email - 'github-actions[bot]@users.noreply.github.com' - - git config --local user.name 'github-actions[bot]' + # Refs: + # * https://github.community/t/github-actions-bot-email-address/17204/6 + # * https://github.com/actions/checkout/issues/13#issuecomment-724415212 + uses: fregante/setup-git-user@v1.0.1 - name: >- Set up NodeJS ${{ matrix.node-version }} with the global NPM registry @@ -303,11 +302,10 @@ jobs: fetch-depth: 1 ref: ${{ github.event.inputs.release-commitish }} - name: Setup git user as [bot] - run: > - git config --local user.email - 'github-actions[bot]@users.noreply.github.com' - - git config --local user.name 'github-actions[bot]' + # Refs: + # * https://github.community/t/github-actions-bot-email-address/17204/6 + # * https://github.com/actions/checkout/issues/13#issuecomment-724415212 + uses: fregante/setup-git-user@v1.0.1 - name: Fetch the GHA artifact with the version patch uses: actions/download-artifact@v2 with: @@ -428,11 +426,10 @@ jobs: fetch-depth: 1 ref: ${{ github.event.inputs.release-commitish }} - name: Setup git user as [bot] - run: > - git config --local user.email - 'github-actions[bot]@users.noreply.github.com' - - git config --local user.name 'github-actions[bot]' + # Refs: + # * https://github.community/t/github-actions-bot-email-address/17204/6 + # * https://github.com/actions/checkout/issues/13#issuecomment-724415212 + uses: fregante/setup-git-user@v1.0.1 - name: Fetch the GHA artifact with the version patch uses: actions/download-artifact@v2 with: From a34729df41ab9cccf71d8db5e66a40d2500fa15e Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Wed, 24 Nov 2021 18:14:54 +0530 Subject: [PATCH 171/558] Allow use of Ansible files without a workspace (#140) Co-authored-by: Sorin Sbarnea --- src/services/workspaceManager.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/services/workspaceManager.ts b/src/services/workspaceManager.ts index 4b4909952..29a1896f0 100644 --- a/src/services/workspaceManager.ts +++ b/src/services/workspaceManager.ts @@ -13,6 +13,8 @@ import { DocsLibrary } from './docsLibrary'; import { ExecutionEnvironment } from './executionEnvironment'; import { MetadataLibrary } from './metadataLibrary'; import { SettingsManager } from './settingsManager'; +import * as path from 'path'; +import { URI } from 'vscode-uri'; /** * Holds the overall context for the whole workspace. @@ -73,6 +75,20 @@ export class WorkspaceManager { return workspaceFolder; } } + /* * + * If control reaches at this point it indicates an individual file is + * opened in client without any workspace. + * Set the workspace to directory of the file pointed by uri. + */ + const documentFolderPathParts = uri.split(path.sep) + documentFolderPathParts.pop() + const workspaceFolder: WorkspaceFolder = { + 'uri': documentFolderPathParts.join(path.sep), + 'name': documentFolderPathParts[documentFolderPathParts.length - 1] + } + + this.connection.console.log(`workspace folder explicitly set to ${URI.parse(workspaceFolder.uri).path}`); + return workspaceFolder } public handleWorkspaceChanged(event: WorkspaceFoldersChangeEvent): void { From f005040aca1be06d3a08469703701bd8182c9623 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 24 Nov 2021 12:59:25 +0000 Subject: [PATCH 172/558] Avoid exception with undefined linter arguments settings (#142) --- src/services/ansibleLint.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts index bac5eb36b..a4bf68848 100644 --- a/src/services/ansibleLint.ts +++ b/src/services/ansibleLint.ts @@ -61,7 +61,7 @@ export class AnsibleLint { ); return; } else { - let linterArguments = settings.ansibleLint.arguments; + let linterArguments = settings.ansibleLint.arguments ?? ''; // Determine linter config file let ansibleLintConfigPath = linterArguments.match( From a185b58ef134655c655ac9c1ed379fd07875f3dd Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 24 Nov 2021 14:43:10 +0100 Subject: [PATCH 173/558] Make a GitHub Release on publishing --- .github/workflows/ci.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f28779cb2..ecd83f041 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -449,4 +449,36 @@ jobs: to the just published release back to GitHub run: >- git push --atomic origin '${{ needs.pre-setup.outputs.git-tag }}' + + publish-github-release: + name: >- + Publish a GitHub Release for + ${{ needs.pre-setup.outputs.git-tag }} + needs: + - post-release-repo-update + - pre-setup # transitive, for accessing settings + runs-on: Ubuntu-latest + + permissions: + contents: write + + steps: + - name: Fetch the GHA artifact with the package tarball + uses: actions/download-artifact@v2 + with: + name: npm-package-tarball + + - name: >- + Publish a GitHub Release for + ${{ needs.pre-setup.outputs.git-tag }} + uses: softprops/action-gh-release@v1 + with: + # body/body_path: # FIXME: Use once Towncrier is integrated. + discussion_category_name: Announcements + fail_on_unmatched_files: true + files: | + ${{ needs.pre-setup.outputs.tarball-artifact-name }} + name: ${{ needs.pre-setup.outputs.git-tag }} + tag_name: ${{ needs.pre-setup.outputs.git-tag }} + target_commitish: ${{ github.event.inputs.release-commitish }} ... From 8e396880628c80caab708598f6734ee588f2b9ee Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 24 Nov 2021 13:16:05 +0000 Subject: [PATCH 174/558] Add code coverage reporting Partial: #52 --- .github/workflows/ci.yml | 13 + .gitignore | 2 + codecov.yml | 11 + package-lock.json | 2399 +++++++++++++++++++++++++++++++++++++- package.json | 4 +- 5 files changed, 2414 insertions(+), 15 deletions(-) create mode 100644 codecov.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ecd83f041..7cf86cad8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -322,6 +322,19 @@ jobs: - name: Run testing against the Git checkout run: npm test + - name: Produce coverage report + run: npm run coverage + - name: Upload coverage data + uses: codecov/codecov-action@v2 + with: + name: ${{ matrix.name }} + files: out/coverage.lcov + flags: >- + GHA, + ${{ runner.os }}, + ${{ matrix.os }}, + ${{ matrix.node-version }} + check: # This job does nothing and is only used for the branch protection needs: - lint diff --git a/.gitignore b/.gitignore index 638d8435f..938ec0da3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ node_modules out/server tsconfig.tsbuildinfo vscode-ansible +.nyc_output +*.lcov diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 000000000..80177619f --- /dev/null +++ b/codecov.yml @@ -0,0 +1,11 @@ +codecov: + notify: + after_n_builds: 8 # the number of individual jobs in the test matrix + wait_for_ci: yes + require_ci_to_pass: true +comment: false +coverage: + status: + patch: false + project: + threshold: 0.5% diff --git a/package-lock.json b/package-lock.json index 6b908246b..db1b100c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.2.6", + "version": "0.3.0", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.14", @@ -36,6 +36,7 @@ "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "mocha": "^8.4.0", + "nyc": "^15.1.0", "prettier": "^2.4.1", "rimraf": "^3.0.2", "ts-node": "^9.1.1", @@ -55,6 +56,257 @@ "@babel/highlight": "^7.10.4" } }, + "node_modules/@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", @@ -64,13 +316,36 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { + "node_modules/@babel/helper-validator-option": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -149,6 +424,98 @@ "node": ">=4" } }, + "node_modules/@babel/parser": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -194,6 +561,101 @@ "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", "dev": true }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -457,6 +919,19 @@ "acorn": "^6.0.0 || ^7.0.0 || ^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": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -519,6 +994,24 @@ "node": ">= 8" } }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -602,12 +1095,50 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "node_modules/browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -629,6 +1160,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001282", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz", + "integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, "node_modules/chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", @@ -692,6 +1233,15 @@ "fsevents": "~2.3.1" } }, + "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/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -721,12 +1271,33 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/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/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -794,6 +1365,18 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -826,6 +1409,12 @@ "node": ">=6.0.0" } }, + "node_modules/electron-to-chromium": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.0.tgz", + "integrity": "sha512-+oXCt6SaIu8EmFTPx8wNGSB0tHQ5biDscnlf6Uxuz17e9CjzMRtGk9B8705aMPnj0iWr3iC74WuIkngCsLElmA==", + "dev": true + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -844,6 +1433,12 @@ "node": ">=8.6" } }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -1158,6 +1753,23 @@ "node": ">=8" } }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -1202,6 +1814,39 @@ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1228,6 +1873,15 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1246,6 +1900,15 @@ "node": "*" } }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -1319,6 +1982,12 @@ "node": ">= 4" } }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -1337,6 +2006,31 @@ "node": ">=8" } }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -1346,6 +2040,12 @@ "he": "bin/he" } }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -1380,6 +2080,15 @@ "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/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1458,12 +2167,153 @@ "node": ">=8" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/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/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1483,6 +2333,18 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1495,6 +2357,21 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -1534,6 +2411,12 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -1570,6 +2453,30 @@ "node": ">=10" } }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -1608,6 +2515,12 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, "node_modules/mocha": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", @@ -1738,6 +2651,24 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1747,6 +2678,192 @@ "node": ">=0.10.0" } }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1803,6 +2920,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -1859,15 +3012,85 @@ "node": "*" } }, - "node_modules/picomatch": { + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=8.6" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/prelude-ls": { @@ -1891,6 +3114,18 @@ "node": ">=10.13.0" } }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -1961,6 +3196,18 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -1979,6 +3226,12 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2078,6 +3331,12 @@ "randombytes": "^2.1.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2099,6 +3358,12 @@ "node": ">=8" } }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -2143,6 +3408,23 @@ "source-map": "^0.6.0" } }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -2175,6 +3457,15 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2238,12 +3529,35 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2344,6 +3658,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, "node_modules/typescript": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", @@ -2438,6 +3761,12 @@ "node": ">= 8" } }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, "node_modules/wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -2528,6 +3857,18 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -2625,19 +3966,229 @@ "@babel/highlight": "^7.10.4" } }, + "@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true + }, + "@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, - "@babel/highlight": { + "@babel/helper-validator-option": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helpers": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "dev": true, + "requires": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" + } + }, + "@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -2700,6 +4251,78 @@ } } }, + "@babel/parser": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "dev": true + }, + "@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + } + } + }, + "@babel/traverse": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + } + }, "@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -2739,6 +4362,76 @@ "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", "dev": true }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2911,6 +4604,16 @@ "dev": true, "requires": {} }, + "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, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -2954,6 +4657,21 @@ "picomatch": "^2.0.4" } }, + "append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -3022,12 +4740,37 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3040,6 +4783,12 @@ "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, + "caniuse-lite": { + "version": "1.0.30001282", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz", + "integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg==", + "dev": true + }, "chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", @@ -3086,6 +4835,12 @@ "readdirp": "~3.5.0" } }, + "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 + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -3112,12 +4867,35 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "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 + } + } + }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -3165,6 +4943,15 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + } + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -3188,6 +4975,12 @@ "esutils": "^2.0.2" } }, + "electron-to-chromium": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.0.tgz", + "integrity": "sha512-+oXCt6SaIu8EmFTPx8wNGSB0tHQ5biDscnlf6Uxuz17e9CjzMRtGk9B8705aMPnj0iWr3iC74WuIkngCsLElmA==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -3203,6 +4996,12 @@ "ansi-colors": "^4.1.1" } }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -3440,6 +5239,17 @@ "to-regex-range": "^5.0.1" } }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -3472,6 +5282,22 @@ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3491,6 +5317,12 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3503,6 +5335,12 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -3554,6 +5392,12 @@ } } }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -3566,12 +5410,36 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -3594,6 +5462,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "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 + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3654,12 +5528,120 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "requires": { + "append-transform": "^2.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3676,6 +5658,12 @@ "esprima": "^4.0.0" } }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3688,6 +5676,15 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -3718,6 +5715,12 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -3748,6 +5751,23 @@ "yallist": "^4.0.0" } }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -3777,6 +5797,12 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, "mocha": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", @@ -3877,12 +5903,176 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "requires": { + "process-on-spawn": "^1.0.0" + } + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3924,6 +6114,33 @@ "p-limit": "^3.0.2" } }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3962,11 +6179,65 @@ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3979,6 +6250,15 @@ "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", "dev": true }, + "process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -4020,6 +6300,15 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4032,6 +6321,12 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -4084,6 +6379,12 @@ "randombytes": "^2.1.0" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4099,6 +6400,12 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -4131,6 +6438,20 @@ "source-map": "^0.6.0" } }, + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "requires": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -4157,6 +6478,12 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4206,12 +6533,29 @@ } } }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4278,6 +6622,15 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, "typescript": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", @@ -4350,6 +6703,12 @@ "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -4421,6 +6780,18 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index f97062538..5cda08928 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "mocha": "^8.4.0", + "nyc": "^15.1.0", "prettier": "^2.4.1", "rimraf": "^3.0.2", "ts-node": "^9.1.1", @@ -73,11 +74,12 @@ "scripts": { "clean": "rimraf out/server && rimraf lib", "compile": "tsc -p .", + "coverage": "nyc report --reporter=text-lcov > out/coverage.lcov", "lint": "npm ci && pre-commit run -a", "prepack": "npm ci && npm run compile", "preversion": "bin/version-bump-allowed", "watch": "tsc --watch -p .", - "test": "mocha --require ts-node/register './test/**/*.ts'", + "test": "nyc -a mocha --require ts-node/register './test/**/*.ts'", "check-dependencies": "node ./scripts/check-dependencies.js" }, "all": true From 15ae36dd43395b8283be05cfebcdb1fa3bc4f813 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 24 Nov 2021 20:53:18 +0100 Subject: [PATCH 175/558] Fix downstream `vscode` workflow to use `test:ui` --- .github/workflows/vscode.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/vscode.yml b/.github/workflows/vscode.yml index 6592c1c56..c351ffd4b 100644 --- a/.github/workflows/vscode.yml +++ b/.github/workflows/vscode.yml @@ -8,6 +8,8 @@ on: jobs: ui-test: + name: >- + test:ui runs-on: ubuntu-latest steps: @@ -39,8 +41,10 @@ jobs: npm ls --depth=0 --link=true popd - - name: Run ui-test with vscode-ansible + - name: >- + Run test:ui with vscode-ansible uses: GabrielBB/xvfb-action@v1 with: - run: npm run ui-test + run: >- + npm run test:ui working-directory: ../vscode-ansible From 07e657a47fd524e99db47949ade6d21a7091ed4a Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 24 Nov 2021 19:08:17 +0100 Subject: [PATCH 176/558] Create a release PR on successful publishing --- .github/workflows/ci.yml | 60 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7cf86cad8..473aecf37 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -453,15 +453,69 @@ jobs: - name: Drop the version patch file run: rm -fv ${{ needs.pre-setup.outputs.version-patch-name }} + - name: Create a merge commit with the release branch + run: | + sh -x + + git checkout --branch 'release/${{ + needs.pre-setup.outputs.dist-version + }}' + + git checkout '${{ github.event.repository.default_branch }}' + + git merge --no-ff 'release/${{ + needs.pre-setup.outputs.dist-version + }}' + + git checkout --branch 'release/${{ + needs.pre-setup.outputs.dist-version + }}' --force + - name: >- Tag the release in the local Git repo as ${{ needs.pre-setup.outputs.git-tag }} run: git tag ${{ needs.pre-setup.outputs.git-tag }} HEAD - name: >- - Push ${{ needs.pre-setup.outputs.git-tag }} tag corresponding - to the just published release back to GitHub + Push the `${{ needs.pre-setup.outputs.git-tag }}` tag and + the `release/${{ + needs.pre-setup.outputs.dist-version + }}` release branch corresponding to the just published + release back to GitHub + run: >- + git push --atomic origin + '${{ needs.pre-setup.outputs.git-tag }}' + 'release/${{ needs.pre-setup.outputs.dist-version }}' + + github-release-pull-request: + name: >- + Publish a GitHub Release for + ${{ needs.pre-setup.outputs.git-tag }} + needs: + - post-release-repo-update + - pre-setup # transitive, for accessing settings + runs-on: Ubuntu-latest + + permissions: + pull-requests: write + + steps: + - name: Create a release pull request + id: pr + uses: repo-sync/pull-request@v2 + with: + destination_branch: ${{ github.event.repository.default_branch }} + pr_body: >- + Automated metadata update with the just released version + ${{ needs.pre-setup.outputs.dist-version }} + pr_label: skip-changelog + pr_title: Bump version to ${{ needs.pre-setup.outputs.git-tag }} + source_branch: release/${{ needs.pre-setup.outputs.dist-version }} + - name: Log the pull request details run: >- - git push --atomic origin '${{ needs.pre-setup.outputs.git-tag }}' + echo + "PR number: ${{ steps.pr.outputs.pr_number }}" + "\nPR URL: ${{ steps.pr.outputs.pr_url }}" + "\nPR changed files: ${{ steps.pr.outputs.has_changed_files }}" publish-github-release: name: >- From 218e5a046ec3f4a12d5c34ed9c269a8c5f49c58b Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 12:54:11 +0100 Subject: [PATCH 177/558] Fix GHA to fetch the same commitish in all jobs --- .github/workflows/ci.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 473aecf37..822493f7f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -157,8 +157,11 @@ jobs: PIP_DISABLE_PIP_VERSION_CHECK: "1" runs-on: Ubuntu-latest steps: - - name: Fetch the src + - name: Fetch the src snapshot uses: actions/checkout@v2 + with: + fetch-depth: 1 + ref: ${{ github.event.inputs.release-commitish }} - name: Setup node uses: actions/setup-node@v2 - name: Install dependencies @@ -177,8 +180,11 @@ jobs: runs-on: Ubuntu-latest steps: - - name: Fetch the src + - name: Fetch the src snapshot uses: actions/checkout@v2 + with: + fetch-depth: 1 + ref: ${{ github.event.inputs.release-commitish }} - name: Setup git user as [bot] # Refs: # * https://github.community/t/github-actions-bot-email-address/17204/6 From cda054e29ee886f571c009fea91ef81f5bb4cbd5 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 12:46:06 +0100 Subject: [PATCH 178/558] Compose a changelog entry for v0.4.0 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 492a7af8d..d2c9ced7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,15 @@ All notable changes to the Ansible VS Code extension will be documented in this The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.4.0] - 2021-11-25 + +### Bugfixes + +* Prevented throwing an unhandled exception caused by undefined linter + arguments settings (#142) @ssbarnea +* Implemented opening standalone Ansible files that have no workspace + associated (#140) @ganeshrn + ## [0.3.0] - 2021-11-18 ### Minor Changes From e7a7f5b751462296f5eb31e9e1c5f2ee30e54f0b Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 13:30:19 +0100 Subject: [PATCH 179/558] Fix the release branch creation in CI/CD `git checkout` does not have a `--branch` argument, it's either `-b` or `-B` (the same but with `--force`). This change fixes the mistake. --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 822493f7f..40e3e9dee 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -463,7 +463,7 @@ jobs: run: | sh -x - git checkout --branch 'release/${{ + git checkout -b 'release/${{ needs.pre-setup.outputs.dist-version }}' @@ -473,9 +473,9 @@ jobs: needs.pre-setup.outputs.dist-version }}' - git checkout --branch 'release/${{ + git checkout -B 'release/${{ needs.pre-setup.outputs.dist-version - }}' --force + }}' - name: >- Tag the release in the local Git repo From 06388b46919b3e0d0890b1fdef9c411b7e6998e3 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 13:57:13 +0100 Subject: [PATCH 180/558] Fetch the default branch before switching in GHA --- .github/workflows/ci.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40e3e9dee..090915724 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -467,6 +467,14 @@ jobs: needs.pre-setup.outputs.dist-version }}' + git config --add remote.origin.fetch '+refs/heads/${{ + github.event.repository.default_branch + }}:refs/remotes/origin/${{ + github.event.repository.default_branch + }}' + + git fetch origin '${{ github.event.repository.default_branch }}' + git checkout '${{ github.event.repository.default_branch }}' git merge --no-ff 'release/${{ From 961b5726d30a6ed72638f7eff8fb48fbdd1ecf8b Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 14:25:56 +0100 Subject: [PATCH 181/558] Collapse the `git fetch` into one command in GHA --- .github/workflows/ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 090915724..f4475c854 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -467,14 +467,12 @@ jobs: needs.pre-setup.outputs.dist-version }}' - git config --add remote.origin.fetch '+refs/heads/${{ + git fetch origin '+refs/heads/${{ github.event.repository.default_branch }}:refs/remotes/origin/${{ github.event.repository.default_branch }}' - git fetch origin '${{ github.event.repository.default_branch }}' - git checkout '${{ github.event.repository.default_branch }}' git merge --no-ff 'release/${{ From 5ee0e0d64c6391cdd1e59d2fe68bfdb394a8fae6 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 14:26:38 +0100 Subject: [PATCH 182/558] Fetch the whole target commitish branch in GHA --- .github/workflows/ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f4475c854..e3142d003 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -439,10 +439,9 @@ jobs: runs-on: Ubuntu-latest steps: - - name: Fetch the src snapshot + - name: Fetch the src uses: actions/checkout@v2 with: - fetch-depth: 1 ref: ${{ github.event.inputs.release-commitish }} - name: Setup git user as [bot] # Refs: From 761561454f639079d89db9dc1dcec06fef10229b Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 15:33:21 +0100 Subject: [PATCH 183/558] Fix GHA to really deep-fetch the repo on release --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e3142d003..e340748bd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -442,6 +442,7 @@ jobs: - name: Fetch the src uses: actions/checkout@v2 with: + fetch-depth: 0 # To reach the common commit w/ the repo default branch ref: ${{ github.event.inputs.release-commitish }} - name: Setup git user as [bot] # Refs: From b4fa0e9b25413f932a5a30b1c0cd5d85bad96819 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 16:54:54 +0100 Subject: [PATCH 184/558] Add the dotenv file to gitignore This file is a common convention and it is also auto-imported by the `npm` utility making it possible to subsitute secrets set as environment variables in `npmrc`. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 938ec0da3..95ae5c416 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ tsconfig.tsbuildinfo vscode-ansible .nyc_output *.lcov +.env From 7716a72ce96916042cfa50ef473123bcac989480 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 17:11:08 +0100 Subject: [PATCH 185/558] Fix the job name for opening a release PR --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e340748bd..c5e680b9b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -500,7 +500,7 @@ jobs: github-release-pull-request: name: >- - Publish a GitHub Release for + Open a GitHub Pull Request for ${{ needs.pre-setup.outputs.git-tag }} needs: - post-release-repo-update From 114d77fbc5750bf17b83d769436a0b0bf7af907f Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 17:13:34 +0100 Subject: [PATCH 186/558] Set an explicit GH token for creating PRs --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c5e680b9b..e8da0599e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -516,6 +516,7 @@ jobs: uses: repo-sync/pull-request@v2 with: destination_branch: ${{ github.event.repository.default_branch }} + github_token: ${{ secrets.GITHUB_TOKEN }} pr_body: >- Automated metadata update with the just released version ${{ needs.pre-setup.outputs.dist-version }} From bd0d525ef3f81fefb7aec8fda1591e4abb639d81 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 17:25:17 +0100 Subject: [PATCH 187/558] Use the tag as target commitish for release in GHA --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e8da0599e..9871af1b3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -560,5 +560,5 @@ jobs: ${{ needs.pre-setup.outputs.tarball-artifact-name }} name: ${{ needs.pre-setup.outputs.git-tag }} tag_name: ${{ needs.pre-setup.outputs.git-tag }} - target_commitish: ${{ github.event.inputs.release-commitish }} + target_commitish: ${{ needs.pre-setup.outputs.git-tag }} ... From 3867d4a42ba900a009be857dd2b7f27a940dfd24 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 17:57:36 +0100 Subject: [PATCH 188/558] Migrate PR creation to `vsoch/pull-request-action` --- .github/workflows/ci.yml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9871af1b3..7cd88a3c4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -511,24 +511,25 @@ jobs: pull-requests: write steps: - - name: Create a release pull request + - name: pull-request-action id: pr - uses: repo-sync/pull-request@v2 - with: - destination_branch: ${{ github.event.repository.default_branch }} - github_token: ${{ secrets.GITHUB_TOKEN }} - pr_body: >- + uses: vsoch/pull-request-action@1.0.18 + env: + BRANCH_PREFIX: '' + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PULL_REQUEST_BODY: >- Automated metadata update with the just released version ${{ needs.pre-setup.outputs.dist-version }} - pr_label: skip-changelog - pr_title: Bump version to ${{ needs.pre-setup.outputs.git-tag }} - source_branch: release/${{ needs.pre-setup.outputs.dist-version }} + PULL_REQUEST_BRANCH: ${{ github.event.repository.default_branch }} + PULL_REQUEST_FROM_BRANCH: >- + release/${{ needs.pre-setup.outputs.dist-version }} + PULL_REQUEST_TITLE: >- + Bump version to ${{ needs.pre-setup.outputs.git-tag }} - name: Log the pull request details run: >- echo - "PR number: ${{ steps.pr.outputs.pr_number }}" - "\nPR URL: ${{ steps.pr.outputs.pr_url }}" - "\nPR changed files: ${{ steps.pr.outputs.has_changed_files }}" + "PR number: ${{ steps.pr.outputs.pull_request_number }}" + "\nPR URL: ${{ steps.pr.outputs.pull_request_url }}" publish-github-release: name: >- From 4d03021f5435581dd27c7b1426cdf6551531944f Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 22:11:06 +0100 Subject: [PATCH 189/558] Use `ncipollo/release-action` to make GH Release --- .github/workflows/ci.yml | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7cd88a3c4..f8c379ca1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -552,14 +552,26 @@ jobs: - name: >- Publish a GitHub Release for ${{ needs.pre-setup.outputs.git-tag }} - uses: softprops/action-gh-release@v1 + uses: ncipollo/release-action@v1.8.10 with: - # body/body_path: # FIXME: Use once Towncrier is integrated. - discussion_category_name: Announcements - fail_on_unmatched_files: true - files: | + allowUpdates: false + artifactErrorsFailBuild: false + artifacts: | ${{ needs.pre-setup.outputs.tarball-artifact-name }} + artifactContentType: application/gzip # .tgz / RFC 6713 + # body/bodyFile: # FIXME: Use once Towncrier is integrated. + commit: release/${{ needs.pre-setup.outputs.dist-version }} + discussionCategory: Announcements + draft: false name: ${{ needs.pre-setup.outputs.git-tag }} - tag_name: ${{ needs.pre-setup.outputs.git-tag }} - target_commitish: ${{ needs.pre-setup.outputs.git-tag }} + # omitBody: false + omitBodyDuringUpdate: true + omitName: false + omitNameDuringUpdate: true + omitPrereleaseDuringUpdate: true + prerelease: false + removeArtifacts: false + replacesArtifacts: false + tag: ${{ needs.pre-setup.outputs.git-tag }} + token: ${{ secrets.GITHUB_TOKEN }} ... From 1775560b7b394f3222d1eeab2f56bba34d1f5ba4 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 23:09:42 +0100 Subject: [PATCH 190/558] Add a more natural merge commit message --- .github/workflows/ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f8c379ca1..68ad2a998 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -475,7 +475,11 @@ jobs: git checkout '${{ github.event.repository.default_branch }}' - git merge --no-ff 'release/${{ + git merge --no-ff -m "Merge branch 'release/${{ + needs.pre-setup.outputs.dist-version + }}' into ${{ + github.event.repository.default_branch + }}" 'release/${{ needs.pre-setup.outputs.dist-version }}' From 301a055bc337dbd668db8a73bfaeacdaddbf48df Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 23:17:00 +0100 Subject: [PATCH 191/558] Enable permission to start discussions in GHA --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 68ad2a998..6ec2b929e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -546,6 +546,7 @@ jobs: permissions: contents: write + discussions: write steps: - name: Fetch the GHA artifact with the package tarball From a05bddb2299c47358886e4801f4c841038f549bd Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 12:46:06 +0100 Subject: [PATCH 192/558] Compose a changelog entry for v0.4.0 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 492a7af8d..d2c9ced7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,15 @@ All notable changes to the Ansible VS Code extension will be documented in this The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.4.0] - 2021-11-25 + +### Bugfixes + +* Prevented throwing an unhandled exception caused by undefined linter + arguments settings (#142) @ssbarnea +* Implemented opening standalone Ansible files that have no workspace + associated (#140) @ganeshrn + ## [0.3.0] - 2021-11-18 ### Minor Changes From 1ccee4f2e2c021576df791506425f68be6c9b55b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 25 Nov 2021 22:27:54 +0000 Subject: [PATCH 193/558] Release 0.4.0-alpha.6 from GitHub Actions CI/CD --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index db1b100c3..5b064d817 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ansible/ansible-language-server", - "version": "0.3.0", + "version": "0.4.0-alpha.6", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index 5cda08928..db256b6c1 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.3.0", + "version": "0.4.0-alpha.6", "contributors": [ { "name": "Tomasz Maciążek", From c540373442dcab0db7ebc2c5b5e0db208d3e5d54 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 25 Nov 2021 23:49:49 +0100 Subject: [PATCH 194/558] Use v0.4.0 in the package metadata --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5b064d817..2f2490815 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.4.0-alpha.6", + "version": "0.4.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.3.0", + "version": "0.4.0", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.14", diff --git a/package.json b/package.json index db256b6c1..d72b8dce5 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.4.0-alpha.6", + "version": "0.4.0", "contributors": [ { "name": "Tomasz Maciążek", From 56c0a50b47be1a786a84928b5405f01c5eeeff95 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 25 Nov 2021 11:57:49 +0000 Subject: [PATCH 195/558] Release 0.4.0 from GitHub Actions CI/CD --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index db1b100c3..cab33e9b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ansible/ansible-language-server", - "version": "0.3.0", + "version": "0.4.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index 5cda08928..d72b8dce5 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.3.0", + "version": "0.4.0", "contributors": [ { "name": "Tomasz Maciążek", From f58466c247c0fd96010a7721c44efd2a706e8377 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 25 Nov 2021 11:57:49 +0000 Subject: [PATCH 196/558] Release 0.4.0 from GitHub Actions CI/CD --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index db1b100c3..cab33e9b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@ansible/ansible-language-server", - "version": "0.3.0", + "version": "0.4.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index 5cda08928..d72b8dce5 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.3.0", + "version": "0.4.0", "contributors": [ { "name": "Tomasz Maciążek", From f1ec91a1b8f0b0a6cfd43f4a90990bfa2eeb9142 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Sat, 27 Nov 2021 00:21:46 +0100 Subject: [PATCH 197/558] Implement changelog management with Towncrier This patch only includes a manually-invokable tox env that can be used to inject a release notes section into the changelog document. It intentionally skips adding any further automation as it is planned for the follow-up PRs. This is partially targeting https://github.com/ansible/ansible-navigator/issues/558 but in the ALS repository because it is currently more ready for this sort of setup. --- .github/chronographer.yml | 11 +++ .gitignore | 1 + .pre-commit-config.yaml | 4 + CHANGELOG.md | 5 +- .../.CHANGELOG-TEMPLATE.md.j2 | 31 ++++++++ docs/changelog-fragments.d/.gitignore | 25 ++++++ docs/changelog-fragments.d/README.md | 76 +++++++++++++++++++ pyproject.toml | 46 +++++++++++ tox.ini | 39 ++++++++++ 9 files changed, 237 insertions(+), 1 deletion(-) create mode 100644 .github/chronographer.yml create mode 100644 docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 create mode 100644 docs/changelog-fragments.d/.gitignore create mode 100644 docs/changelog-fragments.d/README.md create mode 100644 pyproject.toml create mode 100644 tox.ini diff --git a/.github/chronographer.yml b/.github/chronographer.yml new file mode 100644 index 000000000..24168796f --- /dev/null +++ b/.github/chronographer.yml @@ -0,0 +1,11 @@ +--- +enforce_name: + suffix: .md +exclude: + bots: + - dependabot-preview + - dependabot + - patchback + humans: + - pyup-bot +... diff --git a/.gitignore b/.gitignore index 95ae5c416..8090036ef 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ vscode-ansible .nyc_output *.lcov .env +.tox diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8cf75aa89..cc26f5a30 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -70,6 +70,10 @@ repos: rev: v0.29.0 hooks: - id: markdownlint + exclude: > + (?x)^ + docs/changelog-fragments\.d/\d+\.\w+\.md + $ - repo: https://github.com/pre-commit/mirrors-eslint rev: v8.2.0 hooks: diff --git a/CHANGELOG.md b/CHANGELOG.md index d2c9ced7b..ba74c325c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ - + # Change Log All notable changes to the Ansible VS Code extension will be documented in this file. @@ -6,6 +6,9 @@ All notable changes to the Ansible VS Code extension will be documented in this The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + ## [0.4.0] - 2021-11-25 ### Bugfixes diff --git a/docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 b/docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 new file mode 100644 index 000000000..b231e9b21 --- /dev/null +++ b/docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 @@ -0,0 +1,31 @@ + +{% for section, _ in sections.items() %} +{% set title_prefix = underlines[0] %} +{% if section %} +{{ title_prefix }} {{ section }} +{% set title_prefix = underlines[1] %} +{% endif %} + +{% if sections[section] %} +{% for category, val in definitions.items() if category in sections[section] %} +{{ title_prefix }} {{ definitions[category]['name'] }} +{% if definitions[category]['showcontent'] %} + +{% for text, values in sections[section][category].items() %} +* {{ text }} + ({{ values|join(',\n ') }}) +{% endfor -%} + +{% else %} +* {{ sections[section][category]['']|join(', ') }} +{% endif %} + +{% if sections[section][category]|length == 0 %} +No significant changes. +{% endif %} +{% endfor %} + +{% else %} +No significant changes. +{% endif %} +{% endfor %} diff --git a/docs/changelog-fragments.d/.gitignore b/docs/changelog-fragments.d/.gitignore new file mode 100644 index 000000000..46978d225 --- /dev/null +++ b/docs/changelog-fragments.d/.gitignore @@ -0,0 +1,25 @@ +* +!.CHANGELOG-TEMPLATE.md.j2 +!.gitignore +!README.md +!*.bugfix +!*.bugfix.md +!*.bugfix.*.md +!*.breaking +!*.breaking.md +!*.breaking.*.md +!*.deprecation +!*.deprecation.md +!*.deprecation.*.md +!*.doc +!*.doc.md +!*.doc.*.md +!*.feature +!*.feature.md +!*.feature.*.md +!*.internal +!*.internal.md +!*.internal.*.md +!*.misc +!*.misc.md +!*.misc.*.md diff --git a/docs/changelog-fragments.d/README.md b/docs/changelog-fragments.d/README.md new file mode 100644 index 000000000..1deff5698 --- /dev/null +++ b/docs/changelog-fragments.d/README.md @@ -0,0 +1,76 @@ + +## Adding change notes with your PRs + +It is very important to maintain a log for news of how +updating to the new version of the software will affect +end-users. This is why we enforce collection of the change +fragment files in pull requests as per [Towncrier philosophy]. + +The idea is that when somebody makes a change, they must record +the bits that would affect end-users only including information +that would be useful to them. Then, when the maintainers publish +a new release, they'll automatically use these records to compose +a change log for the respective version. It is important to +understand that including unnecessary low-level implementation +related details generates noise that is not particularly useful +to the end-users most of the time. And so such details should be +recorded in the Git history rather than a changelog. + +## Alright! So how do I add a news fragment? + +To submit a change note about your PR, add a text file into the +`docs/changelog-fragments.d/` folder. It should contain an +explanation of what applying this PR will change in the way +end-users interact with the project. One sentence is usually +enough but feel free to add as many details as you feel necessary +for the users to understand what it means. + +**Use the past tense** for the text in your fragment because, +combined with others, it will be a part of the "news digest" +telling the readers **what changed** in a specific version of +the library *since the previous version*. You should also use +[MyST Markdown] syntax for highlighting code (inline or block), +linking parts of the docs or external sites. +At the end, sign your change note by adding ```-- by +{user}`github-username``` (replace `github-username` with +your own!). + +Finally, name your file following the convention that Towncrier +understands: it should start with the number of an issue or a +PR followed by a dot, then add a patch type, like `feature`, +`bugfix`, `doc`, `misc` etc., and add `.md` as a suffix. If you +need to add more than one fragment, you may add an optional +sequence number (delimited with another period) between the type +and the suffix. + +## Examples for changelog entries adding to your Pull Requests + +File `docs/changelog-fragments.d/666.doc.md`: + +```md +Added a `{user}` role to Sphinx config -- by {user}`webknjaz` +``` + +File `docs/changelog-fragments.d/116.feature.md`: + +```md +Added support for nested module options (suboptions) +-- by {user}`tomaciazek` +``` + +File `docs/changelog-fragments.d/140.bugfix.md`: + +```md +Implemented opening standalone Ansible files that have no workspace +associated -- by {user}`ganeshrn` +``` + +```{tip} +See `pyproject.toml` for all available categories +(`tool.towncrier.type`). +``` + +[MyST Markdown]: +https://myst-parser.rtfd.io/en/latest/syntax/syntax.html +[Towncrier philosophy]: +https://towncrier.rtfd.io/en/actual-freaking-docs/#philosophy diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..6a3d2bd42 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,46 @@ +[tool.towncrier] + directory = "docs/changelog-fragments.d/" + filename = "CHANGELOG.md" + issue_format = "{{issue}}`{issue}`" + start_string = "\n\n" + template = "docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2" + title_format = "## [{version}] - {project_date}" + underlines = ["##", "###", "####", "#####"] + + [[tool.towncrier.section]] + path = "" + + [[tool.towncrier.type]] + directory = "bugfix" + name = "Bugfixes" + showcontent = true + + [[tool.towncrier.type]] + directory = "feature" + name = "Features" + showcontent = true + + [[tool.towncrier.type]] + directory = "deprecation" + name = "Deprecations (removal in next major release)" + showcontent = true + + [[tool.towncrier.type]] + directory = "breaking" + name = "Backward incompatible changes" + showcontent = true + + [[tool.towncrier.type]] + directory = "doc" + name = "Documentation" + showcontent = true + + [[tool.towncrier.type]] + directory = "misc" + name = "Miscellaneous" + showcontent = true + + [[tool.towncrier.type]] + directory = "internal" + name = "Contributor-facing changes" + showcontent = true diff --git a/tox.ini b/tox.ini new file mode 100644 index 000000000..adf2fa51c --- /dev/null +++ b/tox.ini @@ -0,0 +1,39 @@ +[tox] +envlist = +minversion = 3.21.0 +skip_install = true + + +[testenv:make-changelog] +basepython = python3 +depends = + check-changelog +description = + Generate a changelog from fragments using Towncrier. Getting an + unreleased changelog preview does not require extra arguments. + When invoking to update the changelog, pass the desired version as an + argument after `--`. For example, `tox -e {envname} -- 1.3.2`. +commands = + {envpython} -m \ + towncrier.build \ + --version \ + {posargs:'[UNRELEASED DRAFT]' --draft} +deps = + towncrier == 21.3.0 +isolated_build = true +skip_install = true + + +[testenv:check-changelog] +basepython = {[testenv:make-changelog]basepython} +description = + Check Towncrier change notes +commands = + {envpython} -m \ + towncrier.check \ + --compare-with origin/main \ + {posargs:} +deps = + {[testenv:make-changelog]deps} +isolated_build = {[testenv:make-changelog]isolated_build} +skip_install = {[testenv:make-changelog]skip_install} From ef6a64fb7869e9f2b994ef09b87f9101b7cf33c2 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Mon, 29 Nov 2021 18:00:57 +0100 Subject: [PATCH 198/558] Add a change note for PR #158 --- docs/changelog-fragments.d/158.misc.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 docs/changelog-fragments.d/158.misc.md diff --git a/docs/changelog-fragments.d/158.misc.md b/docs/changelog-fragments.d/158.misc.md new file mode 100644 index 000000000..d4652c91f --- /dev/null +++ b/docs/changelog-fragments.d/158.misc.md @@ -0,0 +1,4 @@ +Added changelog fragment management infrastructure using [Towncrier] +-- by {user}`webknjaz` + +[Towncrier]: https://github.com/twisted/towncrier From 9d07f8047ff5cd9a1689bd3319960ad33c6d3179 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Mon, 29 Nov 2021 23:01:11 +0100 Subject: [PATCH 199/558] Gitignore Python-related files --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 8090036ef..ebb774630 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ vscode-ansible *.lcov .env .tox +.python-version +__pycache__ From 4093ff6ac84026922da87c508c1d6e1d6c209d8b Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Mon, 29 Nov 2021 20:40:08 +0100 Subject: [PATCH 200/558] Add the RTD config --- .readthedocs.yml | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .readthedocs.yml diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 000000000..1175e8a24 --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,38 @@ +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html +# for details + +--- + +# Required +version: 2 + +# Build documentation in the docs/ directory with Sphinx +sphinx: + builder: dirhtml + configuration: docs/conf.py + fail_on_warning: true + +# Optionally build your docs in additional formats +# such as PDF and ePub +formats: [] + +submodules: + include: all # [] + exclude: [] + recursive: true + +build: + os: ubuntu-20.04 + tools: + python: >- # PyYAML parses it as float `3.1` it it's not an explicit string + 3.10 + +# Optionally set the version of Python and requirements required +# to build docs +python: + install: + - requirements: docs/requirements.txt + system_packages: false + +... From 06164acacfc75a982d5eba00e0cdfc09f46001fa Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 1 Dec 2021 00:41:47 +0100 Subject: [PATCH 201/558] Fix broken link syntax in README --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8d0f7911c..83dfb6af7 100644 --- a/README.md +++ b/README.md @@ -61,9 +61,11 @@ improve user experience: * on module options, the required properties are shown first, and aliases are shown last, otherwise ordering from the documentation is preserved * FQCNs (fully qualified collection names) are inserted only when necessary; - collections configured with the - [`collections` keyword]([LINK](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#simplifying-module-names-with-the-collections-keyword)) - are honored. This behavior can be disabled in extension settings. + collections configured with the [`collections` keyword] are honored. This + behavior can be disabled in extension settings. + +[`collections` keyword]: +https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#simplifying-module-names-with-the-collections-keyword #### Auto-closing Jinja expressions From e726cc0d024901d6df144bf3d2bc21dcf4161079 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 1 Dec 2021 00:41:19 +0100 Subject: [PATCH 202/558] Add initial Sphinx docs infra --- .github/workflows/ci.yml | 89 +++++++++ CHANGELOG.md | 16 +- README.md | 6 +- docs/_ext/spelling_stub_ext.py | 27 +++ docs/changelog.md | 39 ++++ docs/conf.py | 298 ++++++++++++++++++++++++++++++ docs/development.md | 12 +- docs/index.md | 23 +++ docs/requirements.in | 9 + docs/requirements.txt | 323 +++++++++++++++++++++++++++++++++ docs/spelling_wordlist.txt | 2 + tox.ini | 90 +++++++++ 12 files changed, 924 insertions(+), 10 deletions(-) create mode 100644 docs/_ext/spelling_stub_ext.py create mode 100644 docs/changelog.md create mode 100644 docs/conf.py create mode 100644 docs/index.md create mode 100644 docs/requirements.in create mode 100644 docs/requirements.txt create mode 100644 docs/spelling_wordlist.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6ec2b929e..3f81d4df0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -223,6 +223,94 @@ jobs: name: npm-package-tarball path: ${{ needs.pre-setup.outputs.tarball-artifact-name }} + docs: + name: 📚 ${{ matrix.toxenv }} + + runs-on: ${{ matrix.os }}-latest + strategy: + matrix: + os: + - Ubuntu + python-version: + - >- + 3.10 + toxenv: + - build-docs + - linkcheck-docs + - spellcheck-docs + fail-fast: false + + env: + PY_COLORS: 1 + TOX_PARALLEL_NO_SPINNER: 1 + TOXENV: ${{ matrix.toxenv }} + + steps: + - name: >- + Switch to using Python v${{ matrix.python-version }} + by default + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: >- + Calculate Python interpreter version hash value + for use in the cache key + id: calc-cache-key-py + run: | + from hashlib import sha512 + from sys import version + + hash = sha512(version.encode()).hexdigest() + print(f'::set-output name=py-hash-key::{hash}') + shell: python + - name: Get pip cache dir + id: pip-cache + run: >- + echo "::set-output name=dir::$(pip cache dir)" + - name: Set up pip cache + uses: actions/cache@v2.1.7 + with: + path: ${{ steps.pip-cache.outputs.dir }} + key: >- + ${{ runner.os }}-pip-${{ + steps.calc-cache-key-py.outputs.py-hash-key }}-${{ + hashFiles('tox.ini', 'docs/requirements.*') }} + restore-keys: | + ${{ runner.os }}-pip-${{ + steps.calc-cache-key-py.outputs.py-hash-key + }}- + ${{ runner.os }}-pip- + - name: Install tox + run: >- + python -m + pip install + --user + tox + + - name: Grab the source from Git + uses: actions/checkout@v2 + with: + ref: ${{ github.event.inputs.release-commitish }} + + - name: >- + Pre-populate tox envs: `${{ env.TOXENV }}` + run: >- + python -m + tox + --parallel auto + --parallel-live + --skip-missing-interpreters false + --notest + - name: >- + Run tox envs: `${{ env.TOXENV }}` + run: >- + python -m + tox + --parallel auto + --parallel-live + --skip-missing-interpreters false + --skip-pkg-install + # vscode: # uses: .github/workflows/vscode.yml@main @@ -343,6 +431,7 @@ jobs: check: # This job does nothing and is only used for the branch protection needs: + - docs - lint - test # - vscode diff --git a/CHANGELOG.md b/CHANGELOG.md index ba74c325c..8c3732321 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,20 @@ All notable changes to the Ansible VS Code extension will be documented in this file. +[//]: # (DO-NOT-REMOVE-versioning-promise-START) + +```{note} The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +``` + + @@ -36,7 +48,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Bugfixes -* Fixed autocompletion to account for the builtin modules when used +* Fixed auto-completion to account for the builtin modules when used with EE (#94) @ganeshrn ## [0.2.5] - 2021-10-23 @@ -69,7 +81,7 @@ The most notable changes that happened were: * Set the minimum runtime prerequisites to `npm > 7.11.2` and `node >= 12` (#23) @ssbarnea * Updated the default settings value to use fully qualified collection - name (FQCN) during autocompletion (#37) @priyamsahoo + name (FQCN) during auto-completion (#37) @priyamsahoo * Added auto-completion support for Ansible Execution Environments (#42 #54 #55) @ganeshrn * Added diagnostics support for Ansible Execution Environments (#53) diff --git a/README.md b/README.md index 83dfb6af7..2c65c9057 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Ansible Language Server +[//]: # (DO-NOT-REMOVE-README-TITLE) + This language server adds support for Ansible and is currently used by the following projects: @@ -49,7 +51,7 @@ are shown as warnings instead. If `ansible-lint` is not installed/found or running `ansible-lint` results in error it will fallback to `ansible --syntax-check` for validation. -### Smart autocompletion +### Smart auto-completion ![Autocompletion](https://github.com/ansible/ansible-language-server/raw/main/images/smart-completions.gif) @@ -100,7 +102,7 @@ The following settings are supported. * `ansible.ansible.useFullyQualifiedCollectionNames`: Toggles use of fully qualified collection names (FQCN) when inserting a module name. Disabling it will only use FQCNs when necessary, that is when the collection - isn't configured for the task. + is not configured for the task. * `ansible.ansibleLint.arguments`: Optional command line arguments to be appended to `ansible-lint` invocation. See `ansible-lint` documentation. * `ansible.ansibleLint.enabled`: Enables/disables use of `ansible-lint`. diff --git a/docs/_ext/spelling_stub_ext.py b/docs/_ext/spelling_stub_ext.py new file mode 100644 index 000000000..c8989dc14 --- /dev/null +++ b/docs/_ext/spelling_stub_ext.py @@ -0,0 +1,27 @@ +"""Sphinx extension for making the spelling directive noop.""" + +from typing import List + +from sphinx.application import Sphinx +from sphinx.util.docutils import SphinxDirective +from sphinx.util.nodes import nodes + + +class SpellingNoOpDirective(SphinxDirective): + """Definition of the stub spelling directive.""" + + has_content = True + + def run(self) -> List[nodes.Node]: + """Generate nothing in place of the directive.""" + return [] + + +def setup(app: Sphinx) -> None: + """Initialize the extension.""" + app.add_directive('spelling', SpellingNoOpDirective) + + return { + 'parallel_read_safe': True, + 'version': 'builtin', + } diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 000000000..cfb673813 --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,39 @@ +# Changelog + +```{spelling} + +Ansible +Bugfixes +Changelog +ganeshrn +globbing +kimbernator +linter +Npmjs +priyamsahoo +ssbarnea +suboptions +tomaciazek +unhandled +webknjaz +yaegassy +``` + +```{include} ../CHANGELOG.md +:end-before: +:start-after: (DO-NOT-REMOVE-versioning-promise-START) + +``` + +## [{{ release_l }}] - as of {sub-ref}`today` _{subscript}`/UNRELEASED DRAFT/`_ + +```{important} This version is not yet released and is under active development +``` + +```{towncrier-draft-entries} +``` + +```{include} ../CHANGELOG.md +:start-after: + +``` diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 000000000..c38d0fa7d --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,298 @@ +# pylint: disable=invalid-name +# Requires Python 3.6+ +# Ref: https://www.sphinx-doc.org/en/master/usage/configuration.html +"""Configuration for the Sphinx documentation generator.""" + +import collections +import os +import sys +from functools import partial +from pathlib import Path + +from setuptools_scm import get_version + + +# Patches for parsimonious->sphinx-js under Python 3.10/3.9: +collections.Mapping = collections.abc.Mapping + + +# -- Path setup -------------------------------------------------------------- + +PROJECT_ROOT_DIR = Path(__file__).parents[1].resolve() # pylint: disable=no-member +get_scm_version = partial(get_version, root=PROJECT_ROOT_DIR) + +# Patch necessary for sphinx-js to locate the `typedoc` executable: +os.environ['PATH'] = ( + f'{PROJECT_ROOT_DIR / "node_modules" / "typedoc" / "bin"!s}' + f'{os.pathsep}{os.getenv("PATH", "")}' +) + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. + + +# Make in-tree extension importable in non-tox setups/envs, like RTD. +# Refs: +# https://github.com/readthedocs/readthedocs.org/issues/6311 +# https://github.com/readthedocs/readthedocs.org/issues/7182 +sys.path.insert(0, str((Path(__file__).parent / '_ext').resolve())) + +# -- Project information ----------------------------------------------------- + +ansible_homepage_url = 'https://www.ansible.com' +github_url = 'https://github.com' +github_repo_org = 'ansible' +github_repo_name = 'ansible-language-server' +github_repo_slug = f'{github_repo_org}/{github_repo_name}' +github_repo_url = f'{github_url}/{github_repo_slug}' +github_sponsors_url = f'{github_url}/sponsors' + +project = ' '.join(github_repo_name.split('-')).title() +author = f'{project} project contributors' +copyright = author # pylint: disable=redefined-builtin + +# The short X.Y version +version = '.'.join( + get_scm_version( + local_scheme='no-local-version', + ).split('.')[:3], +) + +# The full version, including alpha/beta/rc tags +release = get_scm_version() + +rst_epilog = f""" +.. |project| replace:: {project} +.. |release_l| replace:: ``{release}`` +""" + + +# -- General configuration --------------------------------------------------- + + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +# today = '' +# Else, today_fmt is used as the format for a strftime call. +today_fmt = '%B %d, %Y' + +# If true, '()' will be appended to :func: etc. cross-reference text. +add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +show_authors = True + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'ansible' + +# Default domain +# Tell sphinx what the primary language being documented is. +primary_domain = 'js' + +# Tell sphinx what the pygments highlight language should be. +highlight_language = 'js' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + # stdlib-party extensions: + 'sphinx.ext.autodoc', + 'sphinx.ext.doctest', + 'sphinx.ext.extlinks', + 'sphinx.ext.intersphinx', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.viewcode', + + # Third-party extensions: + 'myst_parser', # extended markdown; https://pypi.org/project/myst-parser/ + 'notfound.extension', + # FIXME: `sphinx-js` is not fully configured right now; TODO: change this. + # 'sphinx_js', # Support for using Sphinx on JSDoc-documented JS code + 'sphinxcontrib.towncrier', # provides `towncrier-draft-entries` directive +] + +# Conditional third-party extensions: +try: + import sphinxcontrib.spelling as _sphinxcontrib_spelling +except ImportError: + extensions.append('spelling_stub_ext') +else: + del _sphinxcontrib_spelling + extensions.append('sphinxcontrib.spelling') + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = 'en' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [ + 'changelog-fragments.d/**', # Towncrier-managed change notes +] + +primary_domain = 'js' + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'sphinx_ansible_theme' + +html_show_sphinx = True + +html_theme_options = { + 'collapse_navigation': False, + 'analytics_id': '', + 'style_nav_header_background': '#ff5850', # 5bbdbf + 'style_external_links': True, + 'canonical_url': f'https://{github_repo_name}.readthedocs.io/en/latest/', + 'vcs_pageview_mode': 'edit', + 'topbar_links': { + 'AnsibleFest': f'{ansible_homepage_url}/ansiblefest', + 'Products': f'{ansible_homepage_url}/tower', + 'Community': f'{ansible_homepage_url}/community', + 'Webinars & Training': f'{ansible_homepage_url}/webinars-training', + 'Blog': f'{ansible_homepage_url}/blog', + }, + 'navigation_depth': 3, +} + +html_context = { + 'display_github': True, + 'github_user': github_repo_org, + 'github_repo': github_repo_name, + 'github_version': 'main/docs/', + 'current_version': version, + 'latest_version': 'latest', + 'available_versions': ('latest',), +} + + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +html_title = f'{project} Documentation' + +# A shorter title for the navigation bar. Default is the same as html_title. +html_short_title = 'ALS Documentation' + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +html_last_updated_fmt = '%b %d, %Y' + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +html_use_opensearch = f'https://{github_repo_name}.readthedocs.io/en/latest/' + +# The master toctree document. +root_doc = master_doc = 'index' # Sphinx 4+ / 3- # noqa: WPS429 + + +# -- Extension configuration ------------------------------------------------- + +# -- Options for intersphinx extension --------------------------------------- + +intersphinx_mapping = { + 'ansible-runner': ('https://ansible-runner.rtfd.io/en/latest', None), + 'python': ('https://docs.python.org/3', None), + 'python2': ('https://docs.python.org/2', None), +} + +# -- Options for todo extension ---------------------------------------------- + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + +# -- Options for sphinxcontrib.spelling extension ---------------------------- + +spelling_ignore_acronyms = True +spelling_ignore_importable_modules = True +spelling_ignore_pypi_package_names = True +spelling_ignore_python_builtins = True +spelling_ignore_wiki_words = True +spelling_show_suggestions = True +spelling_word_list_filename = [ + 'spelling_wordlist.txt', +] + +# -- Options for extlinks extension ------------------------------------------ + +extlinks = { + 'issue': (f'{github_repo_url}/issues/%s', '#'), # noqa: WPS323 + 'pr': (f'{github_repo_url}/pull/%s', 'PR #'), # noqa: WPS323 + 'commit': (f'{github_repo_url}/commit/%s', ''), # noqa: WPS323 + 'gh': (f'{github_url}/%s', 'GitHub: '), # noqa: WPS323 + 'user': (f'{github_sponsors_url}/%s', '@'), # noqa: WPS323 +} + +# -- Options for linkcheck builder ------------------------------------------- + +linkcheck_ignore = [ + r'http://localhost:\d+/', # local URLs +] +linkcheck_workers = 25 + +# -- Options for towncrier_draft extension ----------------------------------- + +towncrier_draft_autoversion_mode = 'draft' # or: 'sphinx-version', 'sphinx-release' +towncrier_draft_include_empty = True +towncrier_draft_working_directory = PROJECT_ROOT_DIR +# Not yet supported: towncrier_draft_config_path = 'pyproject.toml' # relative to cwd + +# -- Options for myst_parser extension --------------------------------------- + +myst_enable_extensions = [ + 'colon_fence', # allow to optionally use ::: instead of ``` + 'deflist', + 'html_admonition', # allow having HTML admonitions + 'html_image', # allow HTML in Markdown + 'linkify', # auto-detect URLs @ plain text, needs myst-parser[linkify] + 'replacements', # allows Jinja2-style replacements + 'smartquotes', # use "cursive" quotes + 'substitution', # replace common ASCII shortcuts into their symbols +] +myst_substitutions = { + 'project': project, + 'release': release, + 'release_l': f'`{release}`', + 'version': version, +} + +# -- Options for sphinx_js extension ----------------------------------------- + +# Example sphinx-js use: https://mozilla.github.io/fathom/ruleset.html +js_language = 'typescript' +# js_source_path = '../src' # default: '../' +# jsdoc_cache = # FIXME: think about cache invalidation? +# jsdoc_config_path = '../conf.json' +# root_for_relative_js_paths = js_source_path + +# -- Strict mode ------------------------------------------------------------- + +# The reST default role (used for this markup: `text`) to use for all +# documents. +# Ref: python-attrs/attrs#571 +default_role = 'any' + +nitpicky = True +_any_role = 'any' +_py_obj_role = 'py:obj' +_py_class_role = 'py:class' +nitpick_ignore = [ + (_any_role, '.'), + (_py_class_role, '.'), + (_py_obj_role, '.'), +] diff --git a/docs/development.md b/docs/development.md index b991c5596..9555d1667 100644 --- a/docs/development.md +++ b/docs/development.md @@ -15,7 +15,7 @@ git fetch --all git checkout -b upstream/main ``` -## Running & debugging the language-server with vscode +## Running & debugging the language-server with VS Code * Install dependent packages within ansible-language-server root directory @@ -26,7 +26,7 @@ ansible-language-server$ npm install . This will install the dependent modules under `node_modules` folder within the current directory. -* Clone the repository containing the vscode extension code into the +* Clone the repository containing the VS Code extension code into the `vscode-ansible` directory *next to* the root directory of this repository. ```bash @@ -35,11 +35,11 @@ git clone git@github.com:ansible/vscode-ansible.git cd vscode-ansible ``` -* Open a new vscode window and add folder to workspace +* Open a new VS Code window and add folder to workspace `File -> Add folder to workspace` and add `vscode-ansible` and `ansible-language-server` folders to the workspace -* Once the language server and vscode-ansible directory is prepared, +* Once the language server and `vscode-ansible/` directory is prepared, compile both client and server using command ```bash @@ -47,7 +47,7 @@ npm run compile:withserver ``` * In the Run and debug window select **Client + Server (source)** configuration - and start debugging `Run -> Start Debugging`. This will open up a new vscode window + and start debugging `Run -> Start Debugging`. This will open up a new VS Code window which is the `Extension development Host` window. * In the `Extension development Host` window add a new folder that has ansible files. @@ -91,7 +91,7 @@ modes. npm run compile ``` -5. The newly built server is now located in ./out/server/src/server.js. +5. The newly built server is now located in `./out/server/src/server.js`. ```bash node ./out/server/src/server.js --stdio diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..d1a25f93d --- /dev/null +++ b/docs/index.md @@ -0,0 +1,23 @@ + +```{spelling} + +linter +``` + +(_ansible_language_server_index)= + +# {{ project }} Documentation + +```{include} ../README.md +:start-after: (DO-NOT-REMOVE-README-TITLE) +``` + +```{toctree} +changelog +``` + +```{toctree} +:caption: Contributing + +development +``` diff --git a/docs/requirements.in b/docs/requirements.in new file mode 100644 index 000000000..403fb5fc3 --- /dev/null +++ b/docs/requirements.in @@ -0,0 +1,9 @@ +myst-parser[linkify] >= 0.15.1 +setuptools-scm >= 6.0.1 +Sphinx >= 4.1.2 +sphinx-ansible-theme >= 0.8.0 +sphinx-favicon >= 0.2 +sphinx-js >= 3.1.2 +sphinx-notfound-page >= 0.7.1 +sphinxcontrib-apidoc >= 0.3.0 +sphinxcontrib-towncrier >= 0.2.0a0 diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 000000000..b18581be5 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,323 @@ +# +# This file is autogenerated by pip-compile with python 3.10 +# To update, run: +# +# pip-compile --allow-unsafe --generate-hashes --output-file=docs/requirements.txt --strip-extras docs/requirements.in +# +alabaster==0.7.12 \ + --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ + --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 + # via sphinx +ansible-pygments==0.1.0 \ + --hash=sha256:055a46de4b745b1090fc596aba15c9324fe346a7b048955995b5337393e541f9 \ + --hash=sha256:0c106912afcb0115444f79152687731436b30b69bf230f09a0b1127bd7a9b9ef + # via sphinx-ansible-theme +attrs==21.2.0 \ + --hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \ + --hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb + # via markdown-it-py +babel==2.9.1 \ + --hash=sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9 \ + --hash=sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0 + # via sphinx +certifi==2021.10.8 \ + --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \ + --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569 + # via requests +charset-normalizer==2.0.8 \ + --hash=sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0 \ + --hash=sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405 + # via requests +click==8.0.3 \ + --hash=sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3 \ + --hash=sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b + # via towncrier +click-default-group==1.2.2 \ + --hash=sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904 + # via towncrier +docutils==0.17.1 \ + --hash=sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125 \ + --hash=sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61 + # via + # myst-parser + # sphinx + # sphinx-rtd-theme +idna==3.3 \ + --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ + --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d + # via requests +imagesize==1.3.0 \ + --hash=sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c \ + --hash=sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d + # via sphinx +incremental==21.3.0 \ + --hash=sha256:02f5de5aff48f6b9f665d99d48bfc7ec03b6e3943210de7cfc88856d755d6f57 \ + --hash=sha256:92014aebc6a20b78a8084cdd5645eeaa7f74b8933f70fa3ada2cfbd1e3b54321 + # via towncrier +jinja2==2.11.3 \ + --hash=sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419 \ + --hash=sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6 + # via + # myst-parser + # sphinx + # sphinx-js + # towncrier +linkify-it-py==1.0.2 \ + --hash=sha256:4f416e72a41d9a00ecf1270ffb28b033318e458ac1144eb7c326563968a5dd24 \ + --hash=sha256:6c37ef4fc3001b38bc2359ccb5dc7e54388ec5d54fe46d2dbcd9a081f90fdbe3 + # via myst-parser +markdown-it-py==1.1.0 \ + --hash=sha256:36be6bb3ad987bfdb839f5ba78ddf094552ca38ccbd784ae4f74a4e1419fc6e3 \ + --hash=sha256:98080fc0bc34c4f2bcf0846a096a9429acbd9d5d8e67ed34026c03c61c464389 + # via + # mdit-py-plugins + # myst-parser +markupsafe==2.0.1 \ + --hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \ + --hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \ + --hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \ + --hash=sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194 \ + --hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \ + --hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \ + --hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \ + --hash=sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74 \ + --hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \ + --hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \ + --hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \ + --hash=sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a \ + --hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \ + --hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \ + --hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \ + --hash=sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38 \ + --hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \ + --hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \ + --hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \ + --hash=sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047 \ + --hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \ + --hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \ + --hash=sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b \ + --hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \ + --hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \ + --hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \ + --hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \ + --hash=sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1 \ + --hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \ + --hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \ + --hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \ + --hash=sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee \ + --hash=sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f \ + --hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \ + --hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \ + --hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \ + --hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \ + --hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \ + --hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \ + --hash=sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86 \ + --hash=sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6 \ + --hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \ + --hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \ + --hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \ + --hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \ + --hash=sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e \ + --hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \ + --hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \ + --hash=sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f \ + --hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \ + --hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \ + --hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \ + --hash=sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145 \ + --hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \ + --hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \ + --hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \ + --hash=sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a \ + --hash=sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207 \ + --hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \ + --hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \ + --hash=sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd \ + --hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \ + --hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \ + --hash=sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9 \ + --hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \ + --hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \ + --hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \ + --hash=sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51 \ + --hash=sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872 + # via jinja2 +mdit-py-plugins==0.2.8 \ + --hash=sha256:1833bf738e038e35d89cb3a07eb0d227ed647ce7dd357579b65343740c6d249c \ + --hash=sha256:5991cef645502e80a5388ec4fc20885d2313d4871e8b8e320ca2de14ac0c015f + # via myst-parser +myst-parser==0.15.2 \ + --hash=sha256:40124b6f27a4c42ac7f06b385e23a9dcd03d84801e9c7130b59b3729a554b1f9 \ + --hash=sha256:f7f3b2d62db7655cde658eb5d62b2ec2a4631308137bd8d10f296a40d57bbbeb + # via -r docs/requirements.in +packaging==21.3 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 + # via + # setuptools-scm + # sphinx +parsimonious==0.7.0 \ + --hash=sha256:396d424f64f834f9463e81ba79a331661507a21f1ed7b644f7f6a744006fd938 + # via sphinx-js +pbr==5.8.0 \ + --hash=sha256:176e8560eaf61e127817ef93d8a844803abb27a4d4637f0ff3bb783129be2e0a \ + --hash=sha256:672d8ebee84921862110f23fcec2acea191ef58543d34dfe9ef3d9f13c31cddf + # via sphinxcontrib-apidoc +pygments==2.10.0 \ + --hash=sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380 \ + --hash=sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6 + # via + # ansible-pygments + # sphinx +pyparsing==3.0.6 \ + --hash=sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4 \ + --hash=sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81 + # via packaging +pytz==2021.3 \ + --hash=sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c \ + --hash=sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326 + # via babel +pyyaml==6.0 \ + --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ + --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ + --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ + --hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \ + --hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \ + --hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \ + --hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \ + --hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \ + --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ + --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ + --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ + --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ + --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ + --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ + --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 \ + --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ + --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ + --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ + --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ + --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ + --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ + --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ + --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ + --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ + --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ + --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ + --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ + --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ + --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ + --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ + --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ + --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ + --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 + # via myst-parser +requests==2.26.0 \ + --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ + --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 + # via sphinx +setuptools-scm==6.3.2 \ + --hash=sha256:4c64444b1d49c4063ae60bfe1680f611c8b13833d556fd1d6050c0023162a119 \ + --hash=sha256:a49aa8081eeb3514eb9728fa5040f2eaa962d6c6f4ec9c32f6c1fba88f88a0f2 + # via -r docs/requirements.in +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + # via parsimonious +snowballstemmer==2.2.0 \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a + # via sphinx +sphinx==4.3.1 \ + --hash=sha256:048dac56039a5713f47a554589dc98a442b39226a2b9ed7f82797fcb2fe9253f \ + --hash=sha256:32a5b3e9a1b176cc25ed048557d4d3d01af635e6b76c5bc7a43b0a34447fbd45 + # via + # -r docs/requirements.in + # myst-parser + # sphinx-ansible-theme + # sphinx-favicon + # sphinx-js + # sphinx-rtd-theme + # sphinxcontrib-apidoc + # sphinxcontrib-towncrier +sphinx-ansible-theme==0.8.0 \ + --hash=sha256:998adeec8cef058308c545b16ff87e63098b89412ebefb7b36c1e400398c5a4a \ + --hash=sha256:eb4088c241851fe9e73b048ccd341461a01ef10138d1d137c75d788ad1909b35 + # via -r docs/requirements.in +sphinx-favicon==0.2 \ + --hash=sha256:0b17cb0f9b97fb99172d47fb11fbdd0aadb26cbe0f6368e81843176ca18d06e6 \ + --hash=sha256:73436a1f5f80c4fcae6eadd2520b9c2bc6c1aec0d91d153b3774359bdd103a58 + # via -r docs/requirements.in +sphinx-js==3.1.2 \ + --hash=sha256:04fe0d2fec6d39b505d70500d0132cfa0efc834760c9598048c1a9dbbc175732 \ + --hash=sha256:4503accb74ba3a15e0e59e20ec18b15be1932b2c8e8b82e03ace39a415899785 + # via -r docs/requirements.in +sphinx-notfound-page==0.8 \ + --hash=sha256:1901e01df9931922e87ef1f967042322b06a65790132cbd393861261e023b974 \ + --hash=sha256:39bf5b99e1fbf6164631ecac2b58038f08e0ab9278c563076aadd1cf04b6bb7a + # via -r docs/requirements.in +sphinx-rtd-theme==1.0.0 \ + --hash=sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8 \ + --hash=sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c + # via sphinx-ansible-theme +sphinxcontrib-apidoc==0.3.0 \ + --hash=sha256:6671a46b2c6c5b0dca3d8a147849d159065e50443df79614f921b42fbd15cb09 \ + --hash=sha256:729bf592cf7b7dd57c4c05794f732dc026127275d785c2a5494521fdde773fb9 + # via -r docs/requirements.in +sphinxcontrib-applehelp==1.0.2 \ + --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a \ + --hash=sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58 + # via sphinx +sphinxcontrib-devhelp==1.0.2 \ + --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e \ + --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 + # via sphinx +sphinxcontrib-htmlhelp==2.0.0 \ + --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 \ + --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 + # via sphinx +sphinxcontrib-jsmath==1.0.1 \ + --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ + --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 + # via sphinx +sphinxcontrib-qthelp==1.0.3 \ + --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \ + --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 + # via sphinx +sphinxcontrib-serializinghtml==1.1.5 \ + --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd \ + --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 + # via sphinx +sphinxcontrib-towncrier==0.2.0a0 \ + --hash=sha256:31eed078e0a8b4c38dc30978dac8c53e2dfa7342ad8597d11816d1ea9ab0eabb \ + --hash=sha256:3cd4295c0198e753d964e2c06ee4ecd91a73a8d103385d08af9b05487ae68dd0 + # via -r docs/requirements.in +toml==0.10.2 \ + --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ + --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f + # via towncrier +tomli==1.2.2 \ + --hash=sha256:c6ce0015eb38820eaf32b5db832dbc26deb3dd427bd5f6556cf0acac2c214fee \ + --hash=sha256:f04066f68f5554911363063a30b108d2b5a5b1a010aa8b6132af78489fe3aade + # via setuptools-scm +towncrier==21.3.0 \ + --hash=sha256:6eed0bc924d72c98c000cb8a64de3bd566e5cb0d11032b73fcccf8a8f956ddfe \ + --hash=sha256:e6ccec65418bbcb8de5c908003e130e37fe0e9d6396cb77c1338241071edc082 + # via sphinxcontrib-towncrier +uc-micro-py==1.0.1 \ + --hash=sha256:316cfb8b6862a0f1d03540f0ae6e7b033ff1fa0ddbe60c12cbe0d4cec846a69f \ + --hash=sha256:b7cdf4ea79433043ddfe2c82210208f26f7962c0cfbe3bacb05ee879a7fdb596 + # via linkify-it-py +urllib3==1.26.7 \ + --hash=sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece \ + --hash=sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844 + # via requests + +# The following packages are considered to be unsafe in a requirements file: +setuptools==59.4.0 \ + --hash=sha256:b4c634615a0cf5b02cf83c7bedffc8da0ca439f00e79452699454da6fbd4153d \ + --hash=sha256:feb5ff19b354cde9efd2344ef6d5e79880ce4be643037641b49508bbb850d060 + # via + # setuptools-scm + # sphinx diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt new file mode 100644 index 000000000..38e7a01f3 --- /dev/null +++ b/docs/spelling_wordlist.txt @@ -0,0 +1,2 @@ +Ansible +ansible diff --git a/tox.ini b/tox.ini index adf2fa51c..9268db56e 100644 --- a/tox.ini +++ b/tox.ini @@ -4,6 +4,96 @@ minversion = 3.21.0 skip_install = true +[docs] +allowlist_externals = + git +basepython = python3 +commands_pre = + # Retrieve possibly missing commits: + -git fetch --unshallow + -git fetch --tags +changedir = {toxinidir}/docs +sphinx_entrypoint = {envpython} -m sphinx +sphinx_common_args = + -j auto \ + {tty:--color} \ + -a \ + -n \ + -W --keep-going \ + -T \ + -d "{temp_dir}/.doctrees" \ + . \ + "{envdir}/docs_out" +deps = + -r{toxinidir}/docs/requirements.txt + # FIXME: re-enable the "-r" + "-c" paradigm once the pip bug is fixed. + # Ref: https://github.com/pypa/pip/issues/9243 + # -r{toxinidir}/docs/requirements.in + # -c{toxinidir}/docs/requirements.txt +passenv = + SSH_AUTH_SOCK +skip_install = true +usedevelop = false + + +[testenv:build-docs] +allowlist_externals = {[docs]allowlist_externals} +basepython = {[docs]basepython} +changedir = {[docs]changedir} +commands_pre = {[docs]commands_pre} +commands = + {[docs]sphinx_entrypoint} -b html {[docs]sphinx_common_args} + + # Print out the output docs dir and a way to serve html: + -{envpython} -c\ + 'import pathlib;\ + docs_dir = pathlib.Path(r"{envdir}") / "docs_out";\ + index_file = docs_dir / "index.html";\ + print("\n" + "=" * 120 +\ + f"\n\nDocumentation available under:\n\n\ + \tfile://\{index_file\}\n\nTo serve docs, use\n\n\ + \t$ python3 -m http.server --directory \ + \N\{QUOTATION MARK\}\{docs_dir\}\N\{QUOTATION MARK\} 0\n\n" +\ + "=" * 120)' +deps = {[docs]deps} +description = Build The Docs +passenv = {[docs]passenv} +skip_install = {[docs]skip_install} +usedevelop = {[docs]usedevelop} + + +[testenv:linkcheck-docs] +allowlist_externals = + {[docs]allowlist_externals} +basepython = {[testenv:build-docs]basepython} +commands_pre = {[testenv:build-docs]commands_pre} +commands = + {[docs]sphinx_entrypoint} -b linkcheck {[docs]sphinx_common_args} +changedir = {[docs]changedir} +deps = {[docs]deps} +description = Linkcheck The Docs +passenv = {[docs]passenv} +skip_install = {[docs]skip_install} +usedevelop = {[docs]usedevelop} + + +[testenv:spellcheck-docs] +allowlist_externals = + {[docs]allowlist_externals} +basepython = {[testenv:build-docs]basepython} +commands_pre = {[testenv:build-docs]commands_pre} +commands = + {[docs]sphinx_entrypoint} -b spelling {[docs]sphinx_common_args} +changedir = {[docs]changedir} +deps = + sphinxcontrib-spelling >= 7.2.0 + -r{toxinidir}/docs/requirements.in +description = Spellcheck The Docs +passenv = {[docs]passenv} +skip_install = {[docs]skip_install} +usedevelop = {[docs]usedevelop} + + [testenv:make-changelog] basepython = python3 depends = From 5159811a71b976b36279e1e6726a6f768b06c1ce Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 1 Dec 2021 03:28:47 +0100 Subject: [PATCH 203/558] Add a change note for PR #161 --- docs/changelog-fragments.d/161.misc.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 docs/changelog-fragments.d/161.misc.md diff --git a/docs/changelog-fragments.d/161.misc.md b/docs/changelog-fragments.d/161.misc.md new file mode 100644 index 000000000..3c4e733f1 --- /dev/null +++ b/docs/changelog-fragments.d/161.misc.md @@ -0,0 +1,4 @@ +Added [Sphinx] documentation generator and set up the CI +infrastructure for it -- by {user}`webknjaz` + +[Sphinx]: https://github.com/twisted/towncrier From b03e8370b299c9e7e4a5d0c9bd1cc981112e1cda Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Mon, 6 Dec 2021 14:02:41 +0100 Subject: [PATCH 204/558] Update the changelog to use bracketless titles (#164) --- CHANGELOG.md | 19 ++++++++++--------- docs/changelog-fragments.d/164.doc.md | 5 +++++ docs/changelog.md | 3 ++- docs/conf.py | 4 ++-- pyproject.toml | 2 +- 5 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 docs/changelog-fragments.d/164.doc.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c3732321..b7b18e612 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,9 @@ All notable changes to the Ansible VS Code extension will be documented in this [//]: # (DO-NOT-REMOVE-versioning-promise-START) ```{note} -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +The change notes follow [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +except for the title formatting, and this project adheres to [Semantic +Versioning](https://semver.org/spec/v2.0.0.html). ``` -## [0.4.0] - 2021-11-25 +## v0.4.0 (2021-11-25) ### Bugfixes @@ -30,7 +31,7 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag * Implemented opening standalone Ansible files that have no workspace associated (#140) @ganeshrn -## [0.3.0] - 2021-11-18 +## v0.3.0 (2021-11-18) ### Minor Changes @@ -44,14 +45,14 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag @ganeshrn * Fixed issue with container copy command (#110) @ganeshrn -## [0.2.6] - 2021-10-29 +## v0.2.6 (2021-10-29) ### Bugfixes * Fixed auto-completion to account for the builtin modules when used with EE (#94) @ganeshrn -## [0.2.5] - 2021-10-23 +## v0.2.5 (2021-10-23) ### Bugfixes @@ -59,7 +60,7 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag built-in syntax-check when ansible-lint is unavailable. This is used for providing the diagnostics information (#89) @priyamsahoo -## [0.2.4] - 2021-10-19 +## v0.2.4 (2021-10-19) ### Major changes @@ -105,11 +106,11 @@ The most notable changes that happened were: @tomaciazek * Implemented the release CD via `workflow_dispatch` (#65) @webknjaz -## [0.1.0-1] - 2021-07-28 +## v0.1.0-1 (2021-07-28) * Updated the npm package to include the `out/` folder -## [0.1.0] - 2021-07-28 +## v0.1.0 (2021-07-28) * Initial ansible language server release. Based on the `vscode-ansible` plugin developed by [Tomasz Maciążek](https://github.com/tomaciazek) diff --git a/docs/changelog-fragments.d/164.doc.md b/docs/changelog-fragments.d/164.doc.md new file mode 100644 index 000000000..21ee969a1 --- /dev/null +++ b/docs/changelog-fragments.d/164.doc.md @@ -0,0 +1,5 @@ +Dropped the brackets from the changelog titles for the release sections. +We now don't strictly follow the release notes format suggested by [Keep +a Changelog] -- by {user}`webknjaz` + +[Keep a Changelog]: https://keepachangelog.com/en/1.1.0/ diff --git a/docs/changelog.md b/docs/changelog.md index cfb673813..ebe49f48c 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -25,7 +25,8 @@ yaegassy ``` -## [{{ release_l }}] - as of {sub-ref}`today` _{subscript}`/UNRELEASED DRAFT/`_ + +## {{ release_l }}, as of {sub-ref}`today` _{subscript}`/UNRELEASED DRAFT/`_ ```{important} This version is not yet released and is under active development ``` diff --git a/docs/conf.py b/docs/conf.py index c38d0fa7d..85409fa01 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -64,7 +64,7 @@ rst_epilog = f""" .. |project| replace:: {project} -.. |release_l| replace:: ``{release}`` +.. |release_l| replace:: ``v{release}`` """ @@ -267,7 +267,7 @@ myst_substitutions = { 'project': project, 'release': release, - 'release_l': f'`{release}`', + 'release_l': f'`v{release}`', 'version': version, } diff --git a/pyproject.toml b/pyproject.toml index 6a3d2bd42..17b4778fe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ issue_format = "{{issue}}`{issue}`" start_string = "\n\n" template = "docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2" - title_format = "## [{version}] - {project_date}" + title_format = "## v{version} ({project_date})" underlines = ["##", "###", "####", "#####"] [[tool.towncrier.section]] From 37b8b62c242b92592222d0367cac021c52638331 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 2 Dec 2021 17:06:06 +0100 Subject: [PATCH 205/558] Replace plain text a user handles with roles This change is necessary so that we can drop the usernames from allowlist in the changelog document. --- CHANGELOG.md | 55 ++++++++++++++++++++++++++--------------------- docs/changelog.md | 7 ------ 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7b18e612..129a82feb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,30 +27,33 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag ### Bugfixes * Prevented throwing an unhandled exception caused by undefined linter - arguments settings (#142) @ssbarnea + arguments settings (#142) {user}`ssbarnea` * Implemented opening standalone Ansible files that have no workspace - associated (#140) @ganeshrn + associated (#140) {user}`ganeshrn` ## v0.3.0 (2021-11-18) ### Minor Changes -* Added support for nested module options (suboptions) (#116) @tomaciazek -* Adopted use of `creator-ee` execution environment (#132) @ssbarnea -* Updated container cleanup logic for execution environment (#111) @ganeshrn +* Added support for nested module options (suboptions) (#116) + {user}`tomaciazek` +* Adopted use of `creator-ee` execution environment (#132) + {user}`ssbarnea` +* Updated container cleanup logic for execution environment (#111) + {user}`ganeshrn` ### Bugfixes * Updated plugin doc cache validate logic for execution environment (#109) - @ganeshrn -* Fixed issue with container copy command (#110) @ganeshrn + {user}`ganeshrn` +* Fixed issue with container copy command (#110) {user}`ganeshrn` ## v0.2.6 (2021-10-29) ### Bugfixes * Fixed auto-completion to account for the builtin modules when used - with EE (#94) @ganeshrn + with EE (#94) {user}`ganeshrn` ## v0.2.5 (2021-10-23) @@ -58,7 +61,7 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag * Added a guard for linting only playbook files with the Ansible's built-in syntax-check when ansible-lint is unavailable. This is used for - providing the diagnostics information (#89) @priyamsahoo + providing the diagnostics information (#89) {user}`priyamsahoo` ## v0.2.4 (2021-10-19) @@ -68,43 +71,45 @@ The most notable changes that happened were: * Renaming and publishing the package under the `@ansible` scope on Npmjs. The new name is `@ansible/ansible-language-server` now - (#10) @webknjaz + (#10) {user}`webknjaz` * Deprecation of the initial `ansible-language-server` npm package that - existed in the global namespace prior to the rename @ganeshrn + existed in the global namespace prior to the rename {user}`ganeshrn` * Adding the auto-completion and diagnostics support for Ansible - Execution Environments @ganeshrn + Execution Environments {user}`ganeshrn` ### Changes * Started falling back to checking playbooks with the Ansible's built-in syntax-check when `ansible-lint` is not installed or disabled (#5) - @priyamsahoo + {user}`priyamsahoo` * Set the minimum runtime prerequisites to `npm > 7.11.2` and - `node >= 12` (#23) @ssbarnea + `node >= 12` (#23) {user}`ssbarnea` * Updated the default settings value to use fully qualified collection - name (FQCN) during auto-completion (#37) @priyamsahoo + name (FQCN) during auto-completion (#37) {user}`priyamsahoo` * Added auto-completion support for Ansible Execution Environments - (#42 #54 #55) @ganeshrn + (#42 #54 #55) {user}`ganeshrn` * Added diagnostics support for Ansible Execution Environments (#53) - @ganeshrn + {user}`ganeshrn` * Updated module completion return statement to support sorting as per - FQCN (#57) @priyamsahoo + FQCN (#57) {user}`priyamsahoo` ### Bugfixes * Added a fix to check that the module paths are directories before - globbing them during the documentation lookup (#38) @kimbernator -* Implemented documentation fragment discovery (#40) @tomaciazek + globbing them during the documentation lookup (#38) + {user}`kimbernator` +* Implemented documentation fragment discovery (#40) {user}`tomaciazek` * Fixed sort `slice()` exception issue in `ansibleConfig` service (#76) - @ssbarnea + {user}`ssbarnea` * Fixed an issue with progress handling when `ansible-lint` falls back - to `syntax check` (#88) @yaegassy + to `syntax check` (#88) {user}`yaegassy` ### Misc * Replaced `decode`/`encodeURI` with a native VS Code mechanism (#8) - @tomaciazek -* Implemented the release CD via `workflow_dispatch` (#65) @webknjaz + {user}`tomaciazek` +* Implemented the release CD via `workflow_dispatch` (#65) + {user}`webknjaz` ## v0.1.0-1 (2021-07-28) @@ -113,4 +118,4 @@ The most notable changes that happened were: ## v0.1.0 (2021-07-28) * Initial ansible language server release. Based on the `vscode-ansible` plugin - developed by [Tomasz Maciążek](https://github.com/tomaciazek) + developed by {user}`Tomasz Maciążek ` diff --git a/docs/changelog.md b/docs/changelog.md index ebe49f48c..310e3eb44 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -5,18 +5,11 @@ Ansible Bugfixes Changelog -ganeshrn globbing -kimbernator linter Npmjs -priyamsahoo -ssbarnea suboptions -tomaciazek unhandled -webknjaz -yaegassy ``` ```{include} ../CHANGELOG.md From a9c4ac26da6ab9e9cda1522736c2e141045fb0a9 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 2 Dec 2021 19:36:01 +0100 Subject: [PATCH 206/558] Add a change note for PR #165 --- docs/changelog-fragments.d/165.doc.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 docs/changelog-fragments.d/165.doc.md diff --git a/docs/changelog-fragments.d/165.doc.md b/docs/changelog-fragments.d/165.doc.md new file mode 100644 index 000000000..45f41c119 --- /dev/null +++ b/docs/changelog-fragments.d/165.doc.md @@ -0,0 +1,2 @@ +Replaced all the credits in the changelog with a dedicated Sphinx role +-- by {user}`webknjaz` From c3cb2b61f429f35536986af0db4cebc80e0d47d0 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 2 Dec 2021 02:24:49 +0100 Subject: [PATCH 207/558] Add references to the Community Code of Conduct --- .github/CODE_OF_CONDUCT.md | 6 ++++++ docs/contributing/code_of_conduct.md | 3 +++ docs/index.md | 1 + 3 files changed, 10 insertions(+) create mode 100644 .github/CODE_OF_CONDUCT.md create mode 100644 docs/contributing/code_of_conduct.md diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..e638882f2 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,6 @@ +# Community Code of Conduct + +Please see the official [Ansible Community Code of Conduct][CoC]. + +[CoC]: +https://docs.ansible.com/ansible/latest/community/code_of_conduct.html diff --git a/docs/contributing/code_of_conduct.md b/docs/contributing/code_of_conduct.md new file mode 100644 index 000000000..821994c34 --- /dev/null +++ b/docs/contributing/code_of_conduct.md @@ -0,0 +1,3 @@ + +```{include} ../../.github/CODE_OF_CONDUCT.md +``` diff --git a/docs/index.md b/docs/index.md index d1a25f93d..f339aa589 100644 --- a/docs/index.md +++ b/docs/index.md @@ -19,5 +19,6 @@ changelog ```{toctree} :caption: Contributing +Code Of Conduct development ``` From 429005683fa13a70fcbbf30b5815c9636ccd3cc4 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 2 Dec 2021 02:41:02 +0100 Subject: [PATCH 208/558] Add the security document --- .github/SECURITY.md | 16 ++++++++++++++++ docs/contributing/security.md | 7 +++++++ docs/index.md | 1 + 3 files changed, 24 insertions(+) create mode 100644 .github/SECURITY.md create mode 100644 docs/contributing/security.md diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 000000000..a90459f2e --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,16 @@ +# Security Policy + +## Supported Versions + +Ansible Language Server does not backport security fixes only applying +them to the main branch and making the next patch release in the stream. + +## Reporting a Vulnerability + +We encourage responsible disclosure practices for security +vulnerabilities. Please read our [policies for reporting bugs][bug +reports policy] if you want to report a security issue that might affect +Ansible. + +[bug reports policy]: +https://docs.ansible.com/ansible/devel/community/reporting_bugs_and_features.html#reporting-a-bug diff --git a/docs/contributing/security.md b/docs/contributing/security.md new file mode 100644 index 000000000..91bd9bf9a --- /dev/null +++ b/docs/contributing/security.md @@ -0,0 +1,7 @@ + +```{spelling} +backport +``` + +```{include} ../../.github/SECURITY.md +``` diff --git a/docs/index.md b/docs/index.md index f339aa589..7051bbcaf 100644 --- a/docs/index.md +++ b/docs/index.md @@ -20,5 +20,6 @@ changelog :caption: Contributing Code Of Conduct +contributing/security development ``` From 57a7b57eb335f9d0edb533b43e916a9abb75e858 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 2 Dec 2021 12:58:54 +0100 Subject: [PATCH 209/558] Add CONTRIBUTING doc Co-authored-by: Rick Elrod --- .github/CONTRIBUTING.md | 31 +++++++++++++++ docs/changelog-fragments.d/README.md | 3 ++ docs/conf.py | 1 + docs/contributing/guidelines.md | 58 ++++++++++++++++++++++++++++ docs/index.md | 1 + 5 files changed, 94 insertions(+) create mode 100644 .github/CONTRIBUTING.md create mode 100644 docs/contributing/guidelines.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 000000000..1316d16a1 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing to Ansible Language Server + +In order to contribute, you'll need to: + +1. Fork the repository. + +2. Create a branch, push your changes there. Don't forget to + {ref}`include news files for the changelog <_ansible_language_server_adding_changelog_fragments>`. + +3. Send it to us as a PR. + +4. Iterate on your PR, incorporating the requested improvements + and participating in the discussions. + +Prerequisites: + +1. Have [npm]. + +2. Use [npm] to run the tests. + +3. Before sending a PR, make sure that the linters pass: + +```shell-session +$ npm run lint + +> @ansible/ansible-language-server@0.4.0 lint +> npm ci && pre-commit run -a +... +``` + +[npm]: https://npmjs.org diff --git a/docs/changelog-fragments.d/README.md b/docs/changelog-fragments.d/README.md index 1deff5698..09cf88760 100644 --- a/docs/changelog-fragments.d/README.md +++ b/docs/changelog-fragments.d/README.md @@ -1,4 +1,7 @@ + +(_ansible_language_server_adding_changelog_fragments)= + ## Adding change notes with your PRs It is very important to maintain a log for news of how diff --git a/docs/conf.py b/docs/conf.py index 85409fa01..ac6b2999e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -207,6 +207,7 @@ intersphinx_mapping = { 'ansible-runner': ('https://ansible-runner.rtfd.io/en/latest', None), + 'myst': ('https://myst-parser.rtfd.io/en/latest', None), 'python': ('https://docs.python.org/3', None), 'python2': ('https://docs.python.org/2', None), } diff --git a/docs/contributing/guidelines.md b/docs/contributing/guidelines.md new file mode 100644 index 000000000..3775d3938 --- /dev/null +++ b/docs/contributing/guidelines.md @@ -0,0 +1,58 @@ + +```{spelling} +de +facto +linters +Pre +reStructuredText +Towncrier +``` + +```{include} ../../.github/CONTRIBUTING.md +``` + +# Contributing docs + +We use [Sphinx] to generate our docs website. You can trigger +the process locally by executing: + +```shell-session +$ tox -e build-docs +build-docs create: .tox/build-docs +build-docs installdeps: -rdocs/requirements.txt +... + +======================================================================================================================== + +Documentation available under: + + file://.tox/build-docs/docs_out/index.html + +To serve docs, use + + $ python3 -m http.server --directory ".tox/build-docs/docs_out" 0 + +======================================================================================================================== +_______________________________________________________ summary ________________________________________________________ + build-docs: commands succeeded + congratulations :) +``` + +It is also integrated with [Read The Docs] that builds and +publishes each commit to the main branch and generates live +docs previews for each pull request. + +The sources of the [Sphinx] documents use reStructuredText as a +de-facto standard. But in order to make contributing docs more +beginner-friendly, we have integrated [MyST parser] allowing us +to also accept new documents written in an extended version of +Markdown that supports using Sphinx directives and roles. +{ref}`Read the docs ` to learn more on how +to use it. + +[MyST parser]: https://pypi.org/project/myst-parser/ +[Read The Docs]: https://readthedocs.org +[Sphinx]: https://www.sphinx-doc.org + +```{include} ../changelog-fragments.d/README.md +``` diff --git a/docs/index.md b/docs/index.md index 7051bbcaf..039600352 100644 --- a/docs/index.md +++ b/docs/index.md @@ -21,5 +21,6 @@ changelog Code Of Conduct contributing/security +contributing/guidelines development ``` From 480bfad50a127a3d895272d28efe92ac423380d3 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 2 Dec 2021 16:30:32 +0100 Subject: [PATCH 210/558] Add a change note for PR #163 --- docs/changelog-fragments.d/163.misc.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 docs/changelog-fragments.d/163.misc.md diff --git a/docs/changelog-fragments.d/163.misc.md b/docs/changelog-fragments.d/163.misc.md new file mode 100644 index 000000000..157273106 --- /dev/null +++ b/docs/changelog-fragments.d/163.misc.md @@ -0,0 +1,2 @@ +Added docs and references to the Community Code Of Conduct, security and +contributing guides, and a pull request template -- by {user}`webknjaz` From b095ebce4098450701811e2f30d5005e80226d1c Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Tue, 7 Dec 2021 03:35:24 +0100 Subject: [PATCH 211/558] Fix GHA check-gate to properly identify failures This is achieved by always running the `check` job and inspecting the needed job results. --- .github/workflows/ci.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3f81d4df0..b877f519a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -430,19 +430,21 @@ jobs: ${{ matrix.node-version }} check: # This job does nothing and is only used for the branch protection + if: always() + needs: - docs - lint - test # - vscode - runs-on: ubuntu-latest + runs-on: Ubuntu-latest steps: - - name: Report success of the test matrix - run: >- - print("All's good") - shell: python + - name: Decide whether the needed jobs succeeded or failed + uses: re-actors/alls-green@release/v1 + with: + jobs: ${{ toJSON(needs) }} publish-npmjs: name: Publish ${{ needs.pre-setup.outputs.git-tag }} to Npmjs From 76ebdf11f3a45593af62d98d6d93ae891cd94479 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Tue, 7 Dec 2021 03:41:20 +0100 Subject: [PATCH 212/558] Add a change note for PR #169 --- docs/changelog-fragments.d/169.misc.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 docs/changelog-fragments.d/169.misc.md diff --git a/docs/changelog-fragments.d/169.misc.md b/docs/changelog-fragments.d/169.misc.md new file mode 100644 index 000000000..3454cf5ab --- /dev/null +++ b/docs/changelog-fragments.d/169.misc.md @@ -0,0 +1,2 @@ +Fixed a half-baked change in the GitHub Actions CI/CD workflow job +that is used in branch protection -- by {user}`webknjaz` From 4b7c97c46aa3fbed08166d82c48703d8c61c26ac Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 15 Dec 2021 10:15:08 +0000 Subject: [PATCH 213/558] chore: pre-commit autoupdate (#167) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/igorshubovych/markdownlint-cli: v0.29.0 → v0.30.0](https://github.com/igorshubovych/markdownlint-cli/compare/v0.29.0...v0.30.0) - [github.com/pre-commit/mirrors-eslint: v8.2.0 → v8.4.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.2.0...v8.4.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cc26f5a30..8422360fc 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -67,7 +67,7 @@ repos: - id: debug-statements language_version: python3 - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.29.0 + rev: v0.30.0 hooks: - id: markdownlint exclude: > @@ -75,7 +75,7 @@ repos: docs/changelog-fragments\.d/\d+\.\w+\.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.2.0 + rev: v8.4.0 hooks: - id: eslint args: From d2d4dfb7d4298d8e8bdef778f306984999d69ecf Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Fri, 17 Dec 2021 04:33:12 +0100 Subject: [PATCH 214/558] Fix a contributing docs link in changelog comment --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 129a82feb..df8fb30fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ Versioning](https://semver.org/spec/v2.0.0.html). From 317a6aa1fe8ba954cacf5b745a07e5400ab1b1ab Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 4 Jan 2022 09:00:22 +0000 Subject: [PATCH 215/558] chore: pre-commit autoupdate (#172) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8422360fc..5c947ea22 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -39,7 +39,7 @@ repos: pass_filenames: false always_run: true - repo: https://github.com/pre-commit/pre-commit-hooks.git - rev: v4.0.1 + rev: v4.1.0 hooks: - id: end-of-file-fixer exclude: > @@ -75,7 +75,7 @@ repos: docs/changelog-fragments\.d/\d+\.\w+\.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.4.0 + rev: v8.6.0 hooks: - id: eslint args: From 962899c03ab708ac755b27820ab7002abc6b630b Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 18 Jan 2022 18:24:43 +0000 Subject: [PATCH 216/558] chore: fix broken spellcheck-docs (#175) --- docs/requirements.in | 1 + docs/requirements.txt | 11 +++++++++++ tox.ini | 4 +--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/requirements.in b/docs/requirements.in index 403fb5fc3..3c4be50a5 100644 --- a/docs/requirements.in +++ b/docs/requirements.in @@ -6,4 +6,5 @@ sphinx-favicon >= 0.2 sphinx-js >= 3.1.2 sphinx-notfound-page >= 0.7.1 sphinxcontrib-apidoc >= 0.3.0 +sphinxcontrib-spelling >= 7.2.0 sphinxcontrib-towncrier >= 0.2.0a0 diff --git a/docs/requirements.txt b/docs/requirements.txt index b18581be5..db40817df 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -164,6 +164,12 @@ pbr==5.8.0 \ --hash=sha256:176e8560eaf61e127817ef93d8a844803abb27a4d4637f0ff3bb783129be2e0a \ --hash=sha256:672d8ebee84921862110f23fcec2acea191ef58543d34dfe9ef3d9f13c31cddf # via sphinxcontrib-apidoc +pyenchant==3.2.2 \ + --hash=sha256:1cf830c6614362a78aab78d50eaf7c6c93831369c52e1bb64ffae1df0341e637 \ + --hash=sha256:5a636832987eaf26efe971968f4d1b78e81f62bca2bde0a9da210c7de43c3bce \ + --hash=sha256:5facc821ece957208a81423af7d6ec7810dad29697cb0d77aae81e4e11c8e5a6 \ + --hash=sha256:6153f521852e23a5add923dbacfbf4bebbb8d70c4e4bad609a8e0f9faeb915d1 + # via sphinxcontrib-spelling pygments==2.10.0 \ --hash=sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380 \ --hash=sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6 @@ -240,6 +246,7 @@ sphinx==4.3.1 \ # sphinx-js # sphinx-rtd-theme # sphinxcontrib-apidoc + # sphinxcontrib-spelling # sphinxcontrib-towncrier sphinx-ansible-theme==0.8.0 \ --hash=sha256:998adeec8cef058308c545b16ff87e63098b89412ebefb7b36c1e400398c5a4a \ @@ -289,6 +296,10 @@ sphinxcontrib-serializinghtml==1.1.5 \ --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd \ --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 # via sphinx +sphinxcontrib-spelling==7.3.2 \ + --hash=sha256:1b99cdb1a30271c7080ec5b968dfc243c2540a960afdc4c052cd59dfe8d94c54 \ + --hash=sha256:9d66dc4990749c5ac52e7eaf17e82f4dc6b4aff6515d26bbf48821829d41bd02 + # via -r docs/requirements.in sphinxcontrib-towncrier==0.2.0a0 \ --hash=sha256:31eed078e0a8b4c38dc30978dac8c53e2dfa7342ad8597d11816d1ea9ab0eabb \ --hash=sha256:3cd4295c0198e753d964e2c06ee4ecd91a73a8d103385d08af9b05487ae68dd0 diff --git a/tox.ini b/tox.ini index 9268db56e..9ae10c7c6 100644 --- a/tox.ini +++ b/tox.ini @@ -85,9 +85,7 @@ commands_pre = {[testenv:build-docs]commands_pre} commands = {[docs]sphinx_entrypoint} -b spelling {[docs]sphinx_common_args} changedir = {[docs]changedir} -deps = - sphinxcontrib-spelling >= 7.2.0 - -r{toxinidir}/docs/requirements.in +deps = {[docs]deps} description = Spellcheck The Docs passenv = {[docs]passenv} skip_install = {[docs]skip_install} From fc32d746eb9e15f1c19195fcf2a6b0318fcaf905 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 18 Jan 2022 18:40:36 +0000 Subject: [PATCH 217/558] chore: avoid coverage report on failed test runs (#174) While we want to measure coverage using nyc when running tests, we do not want to display the report unless user calls `npm run coverage`. That is very important because current behaviour makes very hard to debug test failues. Coverage has zero value on test failures. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d72b8dce5..ed467660f 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "prepack": "npm ci && npm run compile", "preversion": "bin/version-bump-allowed", "watch": "tsc --watch -p .", - "test": "nyc -a mocha --require ts-node/register './test/**/*.ts'", + "test": "nyc -s -a mocha --require ts-node/register './test/**/*.ts' && nyc report", "check-dependencies": "node ./scripts/check-dependencies.js" }, "all": true From b42d4e0a5ec0f2f5abc549edb8901dd7b4b382db Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 19 Jan 2022 09:19:23 +0000 Subject: [PATCH 218/558] chore: fix nyc includes (#176) Sorts bug where nyc failed due finding a map file somewhere inside .tox docs. --- .nycrc.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .nycrc.yml diff --git a/.nycrc.yml b/.nycrc.yml new file mode 100644 index 000000000..53754230a --- /dev/null +++ b/.nycrc.yml @@ -0,0 +1,4 @@ +# Exclude files from elsewhere and avoid random error like +# https://github.com/istanbuljs/nyc/issues/847 +include: + - "src/**/*.ts" From 49136ef92d867668c038ff9ca147b3c066f6cc9c Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 19 Jan 2022 19:27:45 +0000 Subject: [PATCH 219/558] chore: prepare md for prettier (#178) Ensures that our markdown files do not contain syntax that would be modified by prettier. That is preparatory change containing some manual fixes that were needed as part of #386 but we took them separately in order to ease the review. --- .github/CONTRIBUTING.md | 2 +- CHANGELOG.md | 2 +- README.md | 2 +- docs/changelog-fragments.d/README.md | 2 +- docs/changelog.md | 9 +++++++-- docs/index.md | 5 +++-- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 1316d16a1..9691061b0 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -5,7 +5,7 @@ In order to contribute, you'll need to: 1. Fork the repository. 2. Create a branch, push your changes there. Don't forget to - {ref}`include news files for the changelog <_ansible_language_server_adding_changelog_fragments>`. + {ref}`include news files for the changelog `. 3. Send it to us as a PR. diff --git a/CHANGELOG.md b/CHANGELOG.md index df8fb30fe..174528e3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to the Ansible VS Code extension will be documented in this file. -[//]: # (DO-NOT-REMOVE-versioning-promise-START) +[//]: # DO-NOT-REMOVE-versioning-promise-START ```{note} The change notes follow [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), diff --git a/README.md b/README.md index 2c65c9057..8336f7d65 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Ansible Language Server -[//]: # (DO-NOT-REMOVE-README-TITLE) +[//]: # DO-NOT-REMOVE-README-TITLE This language server adds support for Ansible and is currently used by the following projects: diff --git a/docs/changelog-fragments.d/README.md b/docs/changelog-fragments.d/README.md index 09cf88760..0005721a7 100644 --- a/docs/changelog-fragments.d/README.md +++ b/docs/changelog-fragments.d/README.md @@ -1,6 +1,6 @@ -(_ansible_language_server_adding_changelog_fragments)= +(ansible_language_server_adding_changelog_fragments)= ## Adding change notes with your PRs diff --git a/docs/changelog.md b/docs/changelog.md index 310e3eb44..162b6e9c9 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -14,17 +14,22 @@ unhandled ```{include} ../CHANGELOG.md :end-before: -:start-after: (DO-NOT-REMOVE-versioning-promise-START) +:start-after: DO-NOT-REMOVE-versioning-promise-START ``` - + + ## {{ release_l }}, as of {sub-ref}`today` _{subscript}`/UNRELEASED DRAFT/`_ + + ```{important} This version is not yet released and is under active development + ``` ```{towncrier-draft-entries} + ``` ```{include} ../CHANGELOG.md diff --git a/docs/index.md b/docs/index.md index 039600352..c2556440e 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,15 +1,16 @@ + ```{spelling} linter ``` -(_ansible_language_server_index)= +(\_ansible_language_server_index)= # {{ project }} Documentation ```{include} ../README.md -:start-after: (DO-NOT-REMOVE-README-TITLE) +:start-after: DO-NOT-REMOVE-README-TITLE ``` ```{toctree} From d6ce980576e78c1ec6b397925b68fbeba80b9723 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 19 Jan 2022 19:44:07 +0000 Subject: [PATCH 220/558] chore: improve mocha configuration (#180) - replace mocha args with own config, so extension can load them - recommends working mocha test explorer application - now we can run mocha directly (npx mocha) --- .mocharc.yml | 2 ++ .vscode/extensions.json | 5 ++++- .vscode/settings.json | 2 -- package.json | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 .mocharc.yml diff --git a/.mocharc.yml b/.mocharc.yml new file mode 100644 index 000000000..4e425dd6f --- /dev/null +++ b/.mocharc.yml @@ -0,0 +1,2 @@ +require: ts-node/register +spec: './test/**/*.ts' diff --git a/.vscode/extensions.json b/.vscode/extensions.json index c0a2258b0..62681ed20 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,5 +1,8 @@ { // See http://go.microsoft.com/fwlink/?LinkId=827846 // for the documentation about the extensions.json format - "recommendations": ["dbaeumer.vscode-eslint"] + "recommendations": [ + "dbaeumer.vscode-eslint", + "hbenl.vscode-mocha-test-adapter" + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index a5f1dcd75..c18708a34 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,8 +9,6 @@ "[jsonc]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "mochaExplorer.files": "server/src/test/**/*.ts", - "mochaExplorer.require": "ts-node/register", "files.exclude": { "**/.git": true, "**/.svn": true, diff --git a/package.json b/package.json index ed467660f..72400e3bc 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "prepack": "npm ci && npm run compile", "preversion": "bin/version-bump-allowed", "watch": "tsc --watch -p .", - "test": "nyc -s -a mocha --require ts-node/register './test/**/*.ts' && nyc report", + "test": "nyc -s -a mocha && nyc report", "check-dependencies": "node ./scripts/check-dependencies.js" }, "all": true From 55092ac8142111af5e22846b877ff5d2f7525ae2 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 20 Jan 2022 09:10:06 +0000 Subject: [PATCH 221/558] Autoformat json files using prettier (#179) * chore: use prettier with json * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 12 ++++++++++++ .prettierrc.yaml | 9 +++++++++ .vscode/extensions.json | 4 ++-- .vscode/launch.json | 4 ++-- .vscode/settings.json | 10 +++++----- .vscode/tasks.json | 12 ++++++------ scripts/tsconfig.esm.json | 7 +------ scripts/tsconfig.json | 2 +- scripts/tsconfig.umd.json | 7 +------ tsconfig.json | 26 +++++++++++++------------- 10 files changed, 52 insertions(+), 41 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5c947ea22..4d00c8c5e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -66,6 +66,18 @@ repos: - id: debug-statements language_version: python3 + - repo: https://github.com/pre-commit/mirrors-prettier + # keep it before markdownlint and eslint + rev: "v2.5.1" + hooks: + - id: prettier + types: ["json"] + exclude: > + (?x)^( + ansible-language-configuration.json| + jinja-language-configuration.json| + syntaxes/external/jinja.tmLanguage.json + )$ - repo: https://github.com/igorshubovych/markdownlint-cli rev: v0.30.0 hooks: diff --git a/.prettierrc.yaml b/.prettierrc.yaml index fe34a0096..a0e47692c 100644 --- a/.prettierrc.yaml +++ b/.prettierrc.yaml @@ -6,5 +6,14 @@ overrides: - '*.yml' options: singleQuote: false + - # json with comments + files: + - '.vscode/*.json' + - 'scripts/*.json' + - 'tsconfig.json' + options: + parser: json5 + quoteProps: preserve + singleQuote: false semi: true singleQuote: true diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 62681ed20..691d9cbed 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -3,6 +3,6 @@ // for the documentation about the extensions.json format "recommendations": [ "dbaeumer.vscode-eslint", - "hbenl.vscode-mocha-test-adapter" - ] + "hbenl.vscode-mocha-test-adapter", + ], } diff --git a/.vscode/launch.json b/.vscode/launch.json index 9177ee633..1d5436e27 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -16,8 +16,8 @@ "sourceMaps": true, "outFiles": ["${workspaceRoot}/out/server/**/*.ts"], "protocol": "inspector", - "trace": true - } + "trace": true, + }, // { // "name": "Language Server E2E Test", // "type": "extensionHost", diff --git a/.vscode/settings.json b/.vscode/settings.json index c18708a34..50a3e08b9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,13 +1,13 @@ { "editor.formatOnSave": true, "[typescript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "esbenp.prettier-vscode", }, "[json]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "esbenp.prettier-vscode", }, "[jsonc]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "esbenp.prettier-vscode", }, "files.exclude": { "**/.git": true, @@ -15,7 +15,7 @@ "**/.hg": true, "**/CVS": true, "**/.DS_Store": true, - "**/node_modules": true + "**/node_modules": true, }, - "explorerExclude.backup": null + "explorerExclude.backup": null, } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 53c175220..93fb3d1fc 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -8,21 +8,21 @@ "type": "shell", "command": "yarn run watch", "presentation": { - "reveal": "never" + "reveal": "never", }, "isBackground": true, "problemMatcher": "$tsc-watch", "group": { "kind": "build", - "isDefault": true - } + "isDefault": true, + }, }, { "type": "npm", "script": "lint", "problemMatcher": ["$eslint-stylish"], "label": "npm: lint", - "detail": "eslint -c .eslintrc.js --ext .ts src" - } - ] + "detail": "eslint -c .eslintrc.js --ext .ts src", + }, + ], } diff --git a/scripts/tsconfig.esm.json b/scripts/tsconfig.esm.json index a352c2862..f0045dcf9 100644 --- a/scripts/tsconfig.esm.json +++ b/scripts/tsconfig.esm.json @@ -6,10 +6,5 @@ "module": "esnext", "outDir": "./lib/esm", }, - "exclude": [ - "node_modules", - "out", - "lib", - "test" - ] + "exclude": ["node_modules", "out", "lib", "test"], } diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json index 9bd3522aa..67cacdeee 100644 --- a/scripts/tsconfig.json +++ b/scripts/tsconfig.json @@ -10,5 +10,5 @@ "sourceMap": true, "target": "es6", }, - "exclude": ["node_modules", "out"] + "exclude": ["node_modules", "out"], } diff --git a/scripts/tsconfig.umd.json b/scripts/tsconfig.umd.json index 09cf5fcda..c91a467cb 100644 --- a/scripts/tsconfig.umd.json +++ b/scripts/tsconfig.umd.json @@ -5,10 +5,5 @@ "module": "umd", "outDir": "./lib/umd", }, - "exclude": [ - "node_modules", - "out", - "lib", - "test" - ] + "exclude": ["node_modules", "out", "lib", "test"], } diff --git a/tsconfig.json b/tsconfig.json index d44562ff8..a279ae0a0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,14 @@ { - "compilerOptions": { - "alwaysStrict": true, - "declaration": true, - "forceConsistentCasingInFileNames": true, - "lib": ["es2016"], - "module": "commonjs", - "moduleResolution": "node", - "outDir": "./out/server", - "sourceMap": true, - "target": "es6", - }, - "exclude": ["node_modules", "out", "vscode-ansible"] - } + "compilerOptions": { + "alwaysStrict": true, + "declaration": true, + "forceConsistentCasingInFileNames": true, + "lib": ["es2016"], + "module": "commonjs", + "moduleResolution": "node", + "outDir": "./out/server", + "sourceMap": true, + "target": "es6", + }, + "exclude": ["node_modules", "out", "vscode-ansible"], +} From 4f2c83b0d7cfdabdc8a48f4229ba67bca2f89983 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 20 Jan 2022 18:01:10 +0000 Subject: [PATCH 222/558] tests: make doc loading reusable (#182) --- test/data/{utils => }/yaml/ancestryBuilder.yml | 0 .../{utils => }/yaml/getDeclaredCollections.yml | 0 test/data/{utils => }/yaml/isBlockParam.yml | 0 test/data/{utils => }/yaml/isPlayParam.yml | 0 test/data/{utils => }/yaml/isRoleParam.yml | 0 test/data/{utils => }/yaml/isTaskParam.yml | 0 test/data/{utils => }/yaml/test.json | 0 test/utils/helper.ts | 14 ++++++++++++++ test/utils/yaml.test.ts | 16 ++-------------- 9 files changed, 16 insertions(+), 14 deletions(-) rename test/data/{utils => }/yaml/ancestryBuilder.yml (100%) rename test/data/{utils => }/yaml/getDeclaredCollections.yml (100%) rename test/data/{utils => }/yaml/isBlockParam.yml (100%) rename test/data/{utils => }/yaml/isPlayParam.yml (100%) rename test/data/{utils => }/yaml/isRoleParam.yml (100%) rename test/data/{utils => }/yaml/isTaskParam.yml (100%) rename test/data/{utils => }/yaml/test.json (100%) create mode 100644 test/utils/helper.ts diff --git a/test/data/utils/yaml/ancestryBuilder.yml b/test/data/yaml/ancestryBuilder.yml similarity index 100% rename from test/data/utils/yaml/ancestryBuilder.yml rename to test/data/yaml/ancestryBuilder.yml diff --git a/test/data/utils/yaml/getDeclaredCollections.yml b/test/data/yaml/getDeclaredCollections.yml similarity index 100% rename from test/data/utils/yaml/getDeclaredCollections.yml rename to test/data/yaml/getDeclaredCollections.yml diff --git a/test/data/utils/yaml/isBlockParam.yml b/test/data/yaml/isBlockParam.yml similarity index 100% rename from test/data/utils/yaml/isBlockParam.yml rename to test/data/yaml/isBlockParam.yml diff --git a/test/data/utils/yaml/isPlayParam.yml b/test/data/yaml/isPlayParam.yml similarity index 100% rename from test/data/utils/yaml/isPlayParam.yml rename to test/data/yaml/isPlayParam.yml diff --git a/test/data/utils/yaml/isRoleParam.yml b/test/data/yaml/isRoleParam.yml similarity index 100% rename from test/data/utils/yaml/isRoleParam.yml rename to test/data/yaml/isRoleParam.yml diff --git a/test/data/utils/yaml/isTaskParam.yml b/test/data/yaml/isTaskParam.yml similarity index 100% rename from test/data/utils/yaml/isTaskParam.yml rename to test/data/yaml/isTaskParam.yml diff --git a/test/data/utils/yaml/test.json b/test/data/yaml/test.json similarity index 100% rename from test/data/utils/yaml/test.json rename to test/data/yaml/test.json diff --git a/test/utils/helper.ts b/test/utils/helper.ts new file mode 100644 index 000000000..7abff8155 --- /dev/null +++ b/test/utils/helper.ts @@ -0,0 +1,14 @@ +import { TextDocument } from 'vscode-languageserver-textdocument'; +import * as path from 'path'; +import { promises as fs } from 'fs'; + + +export async function getDoc(filename: string): Promise { + const file = await fs.readFile( + path.resolve('test', 'data', filename), + { + encoding: 'utf8', + } + ); + return TextDocument.create('uri', 'ansible', 1, file); +} diff --git a/test/utils/yaml.test.ts b/test/utils/yaml.test.ts index 2b6852e47..3d973e7ed 100644 --- a/test/utils/yaml.test.ts +++ b/test/utils/yaml.test.ts @@ -1,7 +1,4 @@ import { expect } from 'chai'; -import { promises as fs } from 'fs'; -import * as path from 'path'; -import { TextDocument } from 'vscode-languageserver-textdocument'; import { Node, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; import { AncestryBuilder, @@ -13,23 +10,14 @@ import { isTaskParam, parseAllDocuments, } from '../../src/utils/yaml'; - -async function getYamlDoc(yamlFile: string) { - const yaml = await fs.readFile( - path.resolve('test', 'data', 'utils', 'yaml', yamlFile), - { - encoding: 'utf8', - } - ); - return TextDocument.create('uri', 'ansible', 1, yaml); -} +import { getDoc } from './helper'; async function getPathInFile( yamlFile: string, line: number, character: number ) { - const textDoc = await getYamlDoc(yamlFile); + const textDoc = await getDoc(`yaml/${yamlFile}`); const parsedDocs = parseAllDocuments(textDoc.getText()); return getPathAt( textDoc, From 4c65138fd031de6f4db9d94fd321b1ef15e8ee89 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 21 Jan 2022 09:03:40 +0000 Subject: [PATCH 223/558] Make markdown refs compatible with prettier (#181) --- .github/CODE_OF_CONDUCT.md | 4 ++-- docs/changelog-fragments.d/158.misc.md | 4 ++-- docs/changelog-fragments.d/161.misc.md | 4 ++-- docs/changelog-fragments.d/164.doc.md | 6 +++--- docs/changelog-fragments.d/README.md | 9 +++++---- docs/contributing/guidelines.md | 14 +++++++------- 6 files changed, 21 insertions(+), 20 deletions(-) diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index e638882f2..f47324924 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -1,6 +1,6 @@ # Community Code of Conduct -Please see the official [Ansible Community Code of Conduct][CoC]. +Please see the official [Ansible Community Code of Conduct][coc]. -[CoC]: +[coc]: https://docs.ansible.com/ansible/latest/community/code_of_conduct.html diff --git a/docs/changelog-fragments.d/158.misc.md b/docs/changelog-fragments.d/158.misc.md index d4652c91f..89e51b6b5 100644 --- a/docs/changelog-fragments.d/158.misc.md +++ b/docs/changelog-fragments.d/158.misc.md @@ -1,4 +1,4 @@ -Added changelog fragment management infrastructure using [Towncrier] +Added changelog fragment management infrastructure using [Towncrier][towncrier] -- by {user}`webknjaz` -[Towncrier]: https://github.com/twisted/towncrier +[towncrier]: https://github.com/twisted/towncrier diff --git a/docs/changelog-fragments.d/161.misc.md b/docs/changelog-fragments.d/161.misc.md index 3c4e733f1..090f756af 100644 --- a/docs/changelog-fragments.d/161.misc.md +++ b/docs/changelog-fragments.d/161.misc.md @@ -1,4 +1,4 @@ -Added [Sphinx] documentation generator and set up the CI +Added [Sphinx][sphinx] documentation generator and set up the CI infrastructure for it -- by {user}`webknjaz` -[Sphinx]: https://github.com/twisted/towncrier +[sphinx]: https://github.com/twisted/towncrier diff --git a/docs/changelog-fragments.d/164.doc.md b/docs/changelog-fragments.d/164.doc.md index 21ee969a1..99b4e2c86 100644 --- a/docs/changelog-fragments.d/164.doc.md +++ b/docs/changelog-fragments.d/164.doc.md @@ -1,5 +1,5 @@ Dropped the brackets from the changelog titles for the release sections. -We now don't strictly follow the release notes format suggested by [Keep -a Changelog] -- by {user}`webknjaz` +We now don't strictly follow the release notes format suggested by +[Keep a Changelog][keepachangelog] -- by {user}`webknjaz` -[Keep a Changelog]: https://keepachangelog.com/en/1.1.0/ +[keepachangelog]: https://keepachangelog.com/en/1.1.0/ diff --git a/docs/changelog-fragments.d/README.md b/docs/changelog-fragments.d/README.md index 0005721a7..68aa8f252 100644 --- a/docs/changelog-fragments.d/README.md +++ b/docs/changelog-fragments.d/README.md @@ -7,7 +7,8 @@ It is very important to maintain a log for news of how updating to the new version of the software will affect end-users. This is why we enforce collection of the change -fragment files in pull requests as per [Towncrier philosophy]. +fragment files in pull requests as per +[Towncrier philosophy][towncrier-philosophy]. The idea is that when somebody makes a change, they must record the bits that would affect end-users only including information @@ -32,7 +33,7 @@ for the users to understand what it means. combined with others, it will be a part of the "news digest" telling the readers **what changed** in a specific version of the library *since the previous version*. You should also use -[MyST Markdown] syntax for highlighting code (inline or block), +[MyST Markdown][myst-md] syntax for highlighting code (inline or block), linking parts of the docs or external sites. At the end, sign your change note by adding ```-- by {user}`github-username``` (replace `github-username` with @@ -73,7 +74,7 @@ See `pyproject.toml` for all available categories (`tool.towncrier.type`). ``` -[MyST Markdown]: +[myst-md]: https://myst-parser.rtfd.io/en/latest/syntax/syntax.html -[Towncrier philosophy]: +[towncrier-philosophy]: https://towncrier.rtfd.io/en/actual-freaking-docs/#philosophy diff --git a/docs/contributing/guidelines.md b/docs/contributing/guidelines.md index 3775d3938..a32ac6876 100644 --- a/docs/contributing/guidelines.md +++ b/docs/contributing/guidelines.md @@ -13,7 +13,7 @@ Towncrier # Contributing docs -We use [Sphinx] to generate our docs website. You can trigger +We use [Sphinx][sphinx] to generate our docs website. You can trigger the process locally by executing: ```shell-session @@ -38,21 +38,21 @@ _______________________________________________________ summary ________________ congratulations :) ``` -It is also integrated with [Read The Docs] that builds and +It is also integrated with [Read The Docs][rtd] that builds and publishes each commit to the main branch and generates live docs previews for each pull request. -The sources of the [Sphinx] documents use reStructuredText as a +The sources of the [Sphinx][sphinx] documents use reStructuredText as a de-facto standard. But in order to make contributing docs more -beginner-friendly, we have integrated [MyST parser] allowing us +beginner-friendly, we have integrated [MyST parser][myst] allowing us to also accept new documents written in an extended version of Markdown that supports using Sphinx directives and roles. {ref}`Read the docs ` to learn more on how to use it. -[MyST parser]: https://pypi.org/project/myst-parser/ -[Read The Docs]: https://readthedocs.org -[Sphinx]: https://www.sphinx-doc.org +[myst]: https://pypi.org/project/myst-parser/ +[rtd]: https://readthedocs.org +[sphinx]: https://www.sphinx-doc.org ```{include} ../changelog-fragments.d/README.md ``` From fce7b0e02036a538235ad67b24a2ed3f943f2111 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sun, 23 Jan 2022 16:41:50 +0000 Subject: [PATCH 224/558] Move isWindows to helpers (#185) We will need this method for other tests. --- test/utils/helper.ts | 5 +++++ test/utils/yaml.test.ts | 7 +------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/utils/helper.ts b/test/utils/helper.ts index 7abff8155..f0e2ecdde 100644 --- a/test/utils/helper.ts +++ b/test/utils/helper.ts @@ -12,3 +12,8 @@ export async function getDoc(filename: string): Promise { ); return TextDocument.create('uri', 'ansible', 1, file); } + +export function isWindows(): boolean { + // win32 applies to x64 arch too, is the platform name + return process.platform === 'win32'; +} diff --git a/test/utils/yaml.test.ts b/test/utils/yaml.test.ts index 3d973e7ed..150d3171e 100644 --- a/test/utils/yaml.test.ts +++ b/test/utils/yaml.test.ts @@ -10,7 +10,7 @@ import { isTaskParam, parseAllDocuments, } from '../../src/utils/yaml'; -import { getDoc } from './helper'; +import { getDoc, isWindows } from './helper'; async function getPathInFile( yamlFile: string, @@ -26,11 +26,6 @@ async function getPathInFile( ); } -function isWindows() { - // win32 applies to x64 arch too, is the platform name - return process.platform === 'win32'; -} - describe('yaml', () => { beforeEach(function () { From 0bcccfd1bd77ebd82548029034aeb0fbc8e2044c Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sun, 23 Jan 2022 17:06:04 +0000 Subject: [PATCH 225/558] Add tests for commandRunner (#184) Needed-By: #173 --- .github/workflows/ci.yml | 18 ++++++++++--- test/utils/runCommand.test.ts | 48 +++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 test/utils/runCommand.test.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b877f519a..5eaea7f5a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -323,6 +323,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: include: # linux @@ -411,10 +412,21 @@ jobs: run: rm -fv ${{ needs.pre-setup.outputs.version-patch-name }} shell: bash - - name: Populate the test dependencies - run: npm ci + - name: Switch to using Python 3.10 by default + uses: actions/setup-python@v2.2.2 + with: + python-version: '3.10' + - name: Install test dependencies + run: | + python -m pip install --user --upgrade pip + python -m pip install --user ansible-core ansible-lint + echo "$HOME/.local/bin" >> $GITHUB_PATH + # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#adding-a-system-path + npm ci - name: Run testing against the Git checkout - run: npm test + run: | + ansible-lint --version + npm test - name: Produce coverage report run: npm run coverage diff --git a/test/utils/runCommand.test.ts b/test/utils/runCommand.test.ts new file mode 100644 index 000000000..627296c95 --- /dev/null +++ b/test/utils/runCommand.test.ts @@ -0,0 +1,48 @@ +import { CommandRunner } from '../../src/utils/commandRunner'; +import { expect } from 'chai'; +import { WorkspaceManager } from '../../src/services/workspaceManager'; +import { createConnection } from 'vscode-languageserver/node'; +import { getDoc, isWindows } from './helper'; + + +describe('commandRunner', () => { + + const tests = [ + { args: ['ansible-config', 'dump'], rc: 0, stdout: 'ANSIBLE_FORCE_COLOR', stderr: '' }, + { args: ['ansible', '--version'], rc: 0, stdout: 'configured module search path', stderr: '' }, + { args: ['ansible-lint', '--version'], rc: 0, stdout: 'using ansible', stderr: '' }, + { args: ['ansible-playbook', 'missing-file'], rc: 1, stdout: '', stderr: 'ERROR! the playbook: missing-file could not be found' }, + ] + + tests.forEach(({ args, rc, stdout, stderr }) => { + it(`call ${args.join(' ')}`, async function () { + + this.timeout(10000); + process.argv.push('--node-ipc'); + const connection = createConnection(); + const workspaceManager = new WorkspaceManager(connection); + const textDoc = await getDoc('yaml/ancestryBuilder.yml'); + const context = workspaceManager.getContext(textDoc.uri); + const settings = await context.documentSettings.get(textDoc.uri); + + const commandRunner = new CommandRunner( + connection, + context, + settings + ); + try { + const proc = await commandRunner.runCommand(args[0], args.slice(1).join(' ')); + expect(proc.stdout).contains(stdout); + expect(proc.stderr).contains(stderr); + } + catch (e) { + if (!isWindows()) { + // ansible does not work on Windows, so we can't test it + expect(e.code).equals(rc); + expect(e.stderr).contains(stderr); + expect(e.stderr).contains(stdout); + } + } + }); + }); + }); From a3f53a784e6ab4c8a1e4127af9399aa0d0082a7e Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 24 Jan 2022 10:23:06 +0000 Subject: [PATCH 226/558] Fix nyc configuration (#186) --- .nycrc.yml | 9 +++++++++ package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.nycrc.yml b/.nycrc.yml index 53754230a..26bd0be0f 100644 --- a/.nycrc.yml +++ b/.nycrc.yml @@ -1,4 +1,13 @@ +# https://github.com/istanbuljs/nyc # Exclude files from elsewhere and avoid random error like # https://github.com/istanbuljs/nyc/issues/847 include: - "src/**/*.ts" +recursive: true +require: + - ts-node/register +temp-dir: out/.nyc_output +report-dir: out/coverage +skip-full: true +# increase threshold once possible: +lines: 24 diff --git a/package.json b/package.json index 72400e3bc..16eab2812 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "prepack": "npm ci && npm run compile", "preversion": "bin/version-bump-allowed", "watch": "tsc --watch -p .", - "test": "nyc -s -a mocha && nyc report", + "test": "nyc -s -a mocha && nyc report --check-coverage", "check-dependencies": "node ./scripts/check-dependencies.js" }, "all": true From 2f8a17f1d5bd73442b7399379db151d8c01bb72d Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 24 Jan 2022 11:43:34 +0000 Subject: [PATCH 227/558] chore: fix codecov.yml (#187) --- .pre-commit-config.yaml | 11 +++++++++++ codecov.yml | 5 +++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4d00c8c5e..a2ea7a155 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -10,6 +10,7 @@ ci: skip: # https://github.com/pre-commit-ci/issues/issues/55 - npm-ci + - codecov repos: - repo: local hooks: @@ -38,6 +39,16 @@ repos: language: system pass_filenames: false always_run: true + - id: codecov + name: Check codecov.yml + # https://superuser.com/a/1587813/3004 + entry: > + bash -c '[ $( + curl --silent -o /dev/stderr -w "%{http_code}" -X POST --data-binary @codecov.yml https://codecov.io/validate + ) -eq 200 ]' + language: system + files: "codecov.yml" + pass_filenames: false - repo: https://github.com/pre-commit/pre-commit-hooks.git rev: v4.1.0 hooks: diff --git a/codecov.yml b/codecov.yml index 80177619f..62390b094 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,11 +1,12 @@ codecov: notify: after_n_builds: 8 # the number of individual jobs in the test matrix - wait_for_ci: yes + wait_for_ci: true require_ci_to_pass: true comment: false coverage: status: patch: false project: - threshold: 0.5% + default: + threshold: 0.5% From c1c2828a658937a9f8c8ed88138d960fef7ae5f8 Mon Sep 17 00:00:00 2001 From: Michael Rolli Date: Thu, 27 Jan 2022 05:27:29 +0100 Subject: [PATCH 228/558] Add defaults to settings section of README.md (#189) * Add defaults to settings section of README.md * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- README.md | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 8336f7d65..5ba0a953e 100644 --- a/README.md +++ b/README.md @@ -98,37 +98,41 @@ holding `ctrl`/`cmd`. The following settings are supported. -* `ansible.ansible.path`: Path to the `ansible` executable. +* `ansible.ansible.path`: Path to the `ansible` executable. Default is `ansible`, + which means $PATH is searched for the executable. * `ansible.ansible.useFullyQualifiedCollectionNames`: Toggles use of fully qualified collection names (FQCN) when inserting a module name. Disabling it will only use FQCNs when necessary, that is when the collection - is not configured for the task. + is not configured for the task. Default is `true`. * `ansible.ansibleLint.arguments`: Optional command line arguments to be - appended to `ansible-lint` invocation. See `ansible-lint` documentation. -* `ansible.ansibleLint.enabled`: Enables/disables use of `ansible-lint`. -* `ansible.ansibleLint.path`: Path to the `ansible-lint` executable. + appended to `ansible-lint` invocation. See `ansible-lint` documentation. Default + is empty string. +* `ansible.ansibleLint.enabled`: Enables/disables use of `ansible-lint`. default + is `true`. +* `ansible.ansibleLint.path`: Path to the `ansible-lint` executable. Default is + `ansible-lint`, which means $PATH is searched for the executable. * `ansible.ansibleNavigator.path`: Path to the `ansible-navigator` executable. * `ansible.ansiblePlaybook.path`: Path to the `ansible-playbook` executable. * `ansible.executionEnvironment.containerEngine`: The container engine to be used while running with execution environment. Valid values are `auto`, `podman` and - `docker`. For `auto` it will look for `podman` then `docker`. + `docker`. For `auto` it will look for `podman` then `docker`. Default is `auto`. * `ansible.executionEnvironment.enabled`: Enable or disable the use of an - execution environment. + execution environment. Default is `false`. * `ansible.executionEnvironment.image`: Specify the name of the execution - environment image. + environment image. Default is `quay.io/ansible/creator-ee:latest`. * `ansible.executionEnvironment.pullPolicy`: Specify the image pull policy. - Valid values are `always`, - `missing`, `never` and `tag`. Setting `always` will always pull the image - when extension is activated or reloaded. + Valid values are `always`, `missing`, `never` and `tag`. Setting `always` will + always pull the image when extension is activated or reloaded. Default is `missing`. Setting `missing` will pull if not locally available. Setting `never` will never pull the image and setting tag will always pull if the image tag is 'latest', otherwise pull if not locally available. * `ansible.python.interpreterPath`: Path to the `python`/`python3` executable. This setting may be used to make the extension work with `ansible` and - `ansible-lint` installations in a Python virtual environment. + `ansible-lint` installations in a Python virtual environment. Default is empty + string. * `ansible.python.activationScript`: Path to a custom `activate` script, which will be used instead of the setting above to run in a Python virtual - environment. + environment. Default is empty string. ## Developer support From 56960665aac6f015c269408710f0d2b7d38c0644 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 27 Jan 2022 14:52:56 +0100 Subject: [PATCH 229/558] Move showing ansible-lint version to separate step --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5eaea7f5a..f65cfd86e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -423,10 +423,10 @@ jobs: echo "$HOME/.local/bin" >> $GITHUB_PATH # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#adding-a-system-path npm ci + - name: Log ansible-lint version + run: ansible-lint --version - name: Run testing against the Git checkout - run: | - ansible-lint --version - npm test + run: npm test - name: Produce coverage report run: npm run coverage From f9c7f1c02baf318c654534c587d1481ff2cab5f4 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 27 Jan 2022 14:55:21 +0100 Subject: [PATCH 230/558] Skip logging ansible-lint version under Windows --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f65cfd86e..c1745c016 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -424,6 +424,7 @@ jobs: # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#adding-a-system-path npm ci - name: Log ansible-lint version + if: runner.os != 'Windows' run: ansible-lint --version - name: Run testing against the Git checkout run: npm test From 149f8a5900ceb5ace4d451082a2833ffc152c5a3 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 28 Jan 2022 14:28:12 +0000 Subject: [PATCH 231/558] Reformat typescript using prettier (#196) --- .pre-commit-config.yaml | 12 +++---- src/services/ansibleConfig.ts | 4 ++- src/services/executionEnvironment.ts | 36 ++++++++++++-------- src/services/settingsManager.ts | 4 +-- src/services/workspaceManager.ts | 28 ++++++++------- src/utils/misc.ts | 4 +-- test/utils/helper.ts | 10 ++---- test/utils/runCommand.test.ts | 51 ++++++++++++++++++---------- test/utils/yaml.test.ts | 3 +- 9 files changed, 86 insertions(+), 66 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a2ea7a155..5d72683a3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -82,7 +82,7 @@ repos: rev: "v2.5.1" hooks: - id: prettier - types: ["json"] + types_or: ["json", "ts"] exclude: > (?x)^( ansible-language-configuration.json| @@ -92,11 +92,11 @@ repos: - repo: https://github.com/igorshubovych/markdownlint-cli rev: v0.30.0 hooks: - - id: markdownlint - exclude: > - (?x)^ - docs/changelog-fragments\.d/\d+\.\w+\.md - $ + - id: markdownlint + exclude: > + (?x)^ + docs/changelog-fragments\.d/\d+\.\w+\.md + $ - repo: https://github.com/pre-commit/mirrors-eslint rev: v8.6.0 hooks: diff --git a/src/services/ansibleConfig.ts b/src/services/ansibleConfig.ts index fe81045af..6e43e9282 100644 --- a/src/services/ansibleConfig.ts +++ b/src/services/ansibleConfig.ts @@ -41,7 +41,9 @@ export class AnsibleConfig { (_, key) => key.substring(0, key.indexOf('(')) // remove config source in parenthesis ); if (typeof config.COLLECTIONS_PATHS === 'string') { - this._collection_paths = parsePythonStringArray(config.COLLECTIONS_PATHS); + this._collection_paths = parsePythonStringArray( + config.COLLECTIONS_PATHS + ); } else { this._collection_paths = []; } diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 1fc35024c..a452ba03e 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -13,7 +13,7 @@ export class ExecutionEnvironment { private connection: Connection; private context: WorkspaceFolderContext; private useProgressTracker = false; - private successFileMarker = 'SUCCESS' + private successFileMarker = 'SUCCESS'; private _container_engine: IContainerEngine; private _container_image: string; private _container_image_id: string; @@ -177,7 +177,9 @@ export class ExecutionEnvironment { ); } // plugin cache successfully created - fs.closeSync(fs.openSync(path.join(hostCacheBasePath, this.successFileMarker), 'w')); + fs.closeSync( + fs.openSync(path.join(hostCacheBasePath, this.successFileMarker), 'w') + ); } catch (error) { this.connection.window.showErrorMessage( `Exception in ExecutionEnvironment service while fetching docs: ${JSON.stringify( @@ -233,36 +235,40 @@ export class ExecutionEnvironment { } public cleanUpContainer(containerName: string): void { - const cleanUpCommands = [ + const cleanUpCommands = [ `${this._container_engine} stop ${containerName}`, `${this._container_engine} rm ${containerName}`, - ] + ]; if (!this.doesContainerNameExist(containerName)) { - console.log(`clean up container not required as container with name ${containerName} does not exist`); - return + console.log( + `clean up container not required as container with name ${containerName} does not exist` + ); + return; } - for (const command of cleanUpCommands ){ + for (const command of cleanUpCommands) { try { child_process.execSync(command, { cwd: URI.parse(this.context.workspaceFolder.uri).path, }); } catch (error) { // container already stopped and/or removed - break + break; } } } public doesContainerNameExist(containerName: string): boolean { - let containerNameExist = false + let containerNameExist = false; try { - child_process.execSync(`${this._container_engine} inspect ${containerName}`); - containerNameExist = true + child_process.execSync( + `${this._container_engine} inspect ${containerName}` + ); + containerNameExist = true; } catch (error) { - containerNameExist = false + containerNameExist = false; } - return containerNameExist + return containerNameExist; } private isPluginInPath( @@ -357,7 +363,7 @@ export class ExecutionEnvironment { } private isPluginDocCacheValid(hostCacheBasePath: string) { - const markerFilePath = path.join(hostCacheBasePath, this.successFileMarker) - return true ? fs.existsSync(markerFilePath) : false + const markerFilePath = path.join(hostCacheBasePath, this.successFileMarker); + return true ? fs.existsSync(markerFilePath) : false; } } diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index 2f8c9144c..cda7227cb 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -20,8 +20,8 @@ export class SettingsManager { containerEngine: 'auto', enabled: false, image: 'quay.io/ansible/creator-ee:latest', - pullPolicy: 'missing' - } + pullPolicy: 'missing', + }, }; private globalSettings: ExtensionSettings = this.defaultSettings; diff --git a/src/services/workspaceManager.ts b/src/services/workspaceManager.ts index 29a1896f0..80531e59a 100644 --- a/src/services/workspaceManager.ts +++ b/src/services/workspaceManager.ts @@ -76,19 +76,23 @@ export class WorkspaceManager { } } /* * - * If control reaches at this point it indicates an individual file is - * opened in client without any workspace. - * Set the workspace to directory of the file pointed by uri. - */ - const documentFolderPathParts = uri.split(path.sep) - documentFolderPathParts.pop() + * If control reaches at this point it indicates an individual file is + * opened in client without any workspace. + * Set the workspace to directory of the file pointed by uri. + */ + const documentFolderPathParts = uri.split(path.sep); + documentFolderPathParts.pop(); const workspaceFolder: WorkspaceFolder = { - 'uri': documentFolderPathParts.join(path.sep), - 'name': documentFolderPathParts[documentFolderPathParts.length - 1] - } - - this.connection.console.log(`workspace folder explicitly set to ${URI.parse(workspaceFolder.uri).path}`); - return workspaceFolder + uri: documentFolderPathParts.join(path.sep), + name: documentFolderPathParts[documentFolderPathParts.length - 1], + }; + + this.connection.console.log( + `workspace folder explicitly set to ${ + URI.parse(workspaceFolder.uri).path + }` + ); + return workspaceFolder; } public handleWorkspaceChanged(event: WorkspaceFoldersChangeEvent): void { diff --git a/src/utils/misc.ts b/src/utils/misc.ts index 9d4ba349b..88ee9b48e 100644 --- a/src/utils/misc.ts +++ b/src/utils/misc.ts @@ -31,9 +31,7 @@ export function hasOwnProperty( /** * Checks whether `obj` is a non-null object. */ -export function isObject( - obj: X -): obj is X & Record { +export function isObject(obj: X): obj is X & Record { return obj && typeof obj === 'object'; } diff --git a/test/utils/helper.ts b/test/utils/helper.ts index f0e2ecdde..540cdebee 100644 --- a/test/utils/helper.ts +++ b/test/utils/helper.ts @@ -2,14 +2,10 @@ import { TextDocument } from 'vscode-languageserver-textdocument'; import * as path from 'path'; import { promises as fs } from 'fs'; - export async function getDoc(filename: string): Promise { - const file = await fs.readFile( - path.resolve('test', 'data', filename), - { - encoding: 'utf8', - } - ); + const file = await fs.readFile(path.resolve('test', 'data', filename), { + encoding: 'utf8', + }); return TextDocument.create('uri', 'ansible', 1, file); } diff --git a/test/utils/runCommand.test.ts b/test/utils/runCommand.test.ts index 627296c95..881633581 100644 --- a/test/utils/runCommand.test.ts +++ b/test/utils/runCommand.test.ts @@ -4,19 +4,36 @@ import { WorkspaceManager } from '../../src/services/workspaceManager'; import { createConnection } from 'vscode-languageserver/node'; import { getDoc, isWindows } from './helper'; - describe('commandRunner', () => { - const tests = [ - { args: ['ansible-config', 'dump'], rc: 0, stdout: 'ANSIBLE_FORCE_COLOR', stderr: '' }, - { args: ['ansible', '--version'], rc: 0, stdout: 'configured module search path', stderr: '' }, - { args: ['ansible-lint', '--version'], rc: 0, stdout: 'using ansible', stderr: '' }, - { args: ['ansible-playbook', 'missing-file'], rc: 1, stdout: '', stderr: 'ERROR! the playbook: missing-file could not be found' }, - ] + { + args: ['ansible-config', 'dump'], + rc: 0, + stdout: 'ANSIBLE_FORCE_COLOR', + stderr: '', + }, + { + args: ['ansible', '--version'], + rc: 0, + stdout: 'configured module search path', + stderr: '', + }, + { + args: ['ansible-lint', '--version'], + rc: 0, + stdout: 'using ansible', + stderr: '', + }, + { + args: ['ansible-playbook', 'missing-file'], + rc: 1, + stdout: '', + stderr: 'ERROR! the playbook: missing-file could not be found', + }, + ]; tests.forEach(({ args, rc, stdout, stderr }) => { it(`call ${args.join(' ')}`, async function () { - this.timeout(10000); process.argv.push('--node-ipc'); const connection = createConnection(); @@ -25,24 +42,22 @@ describe('commandRunner', () => { const context = workspaceManager.getContext(textDoc.uri); const settings = await context.documentSettings.get(textDoc.uri); - const commandRunner = new CommandRunner( - connection, - context, - settings - ); + const commandRunner = new CommandRunner(connection, context, settings); try { - const proc = await commandRunner.runCommand(args[0], args.slice(1).join(' ')); + const proc = await commandRunner.runCommand( + args[0], + args.slice(1).join(' ') + ); expect(proc.stdout).contains(stdout); expect(proc.stderr).contains(stderr); - } - catch (e) { + } catch (e) { if (!isWindows()) { // ansible does not work on Windows, so we can't test it expect(e.code).equals(rc); expect(e.stderr).contains(stderr); expect(e.stderr).contains(stdout); } - } - }); + } }); }); +}); diff --git a/test/utils/yaml.test.ts b/test/utils/yaml.test.ts index 150d3171e..01f5a0c03 100644 --- a/test/utils/yaml.test.ts +++ b/test/utils/yaml.test.ts @@ -27,11 +27,10 @@ async function getPathInFile( } describe('yaml', () => { - beforeEach(function () { const brokenTests = new Map([ // ['', ''], - ]) + ]); const reason = brokenTests.get(this.currentTest.title); if (isWindows() && reason) { const msg = `Marked ${this.currentTest.title} as pending due to ${reason}`; From 4a9d80bd1491f6a8ad6870b7884c8b2147426604 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 2 Feb 2022 16:00:11 +0100 Subject: [PATCH 232/558] Integrate the release changelog preview into CD --- .github/workflows/ci.yml | 380 ++++++++++++++++++------- docs/changelog-fragments.d/198.misc.md | 1 + tox.ini | 23 ++ 3 files changed, 294 insertions(+), 110 deletions(-) create mode 120000 docs/changelog-fragments.d/198.misc.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c1745c016..beb99c143 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,6 +70,8 @@ jobs: git-tag: ${{ steps.git-tag.outputs.tag }} tarball-artifact-name: ${{ steps.artifact-name.outputs.filename }} version-patch-name: ${{ steps.patch-name.outputs.filename }} + changelog-patch-name: ${{ steps.changelog-patch-name.outputs.filename }} + changelog-draft-name: ${{ steps.changelog-draft-name.outputs.filename }} steps: - name: Switch to using Python 3.10 by default uses: actions/setup-python@v2.2.2 @@ -127,6 +129,10 @@ jobs: ) print(f'::set-output name=dist-version::{ver}') print(f'::set-output name=dist-public-version::{ver_no_local}') + print( + '::set-output name=dist-version-for-filenames::' + f'{ver.replace("+", "-")}' + ) - name: Set the target Git tag id: git-tag run: >- @@ -151,6 +157,22 @@ jobs: && github.event.inputs.release-version || steps.scm-version.outputs.dist-public-version }}-from-GitHub-Actions-CI-CD.patch') + - name: Set the expected changelog patch filename + id: changelog-patch-name + run: | + print('::set-output name=filename::0001-Generate-a-changelog-entry-for-v${{ + steps.request-check.outputs.release-requested == 'true' + && github.event.inputs.release-version + || steps.scm-version.outputs.dist-version-for-filenames + }}.patch') + - name: Set the expected changelog draft filename + id: changelog-draft-name + run: | + print('::set-output name=filename::change-notes-v${{ + steps.request-check.outputs.release-requested == 'true' + && github.event.inputs.release-version + || steps.scm-version.outputs.dist-version-for-filenames + }}.md') lint: env: @@ -179,7 +201,23 @@ jobs: runs-on: Ubuntu-latest + env: + PY_COLORS: 1 + TOX_PARALLEL_NO_SPINNER: 1 + TOXENV: make-changelog + steps: + - name: Switch to using Python v3.10 by default + uses: actions/setup-python@v2 + with: + python-version: >- + 3.10 + - name: Install tox + run: >- + python -m + pip install + --user + tox - name: Fetch the src snapshot uses: actions/checkout@v2 with: @@ -195,6 +233,56 @@ jobs: with the global NPM registry uses: actions/setup-node@v2 + - name: Pre-populate tox env + run: >- + python -m + tox + --parallel auto + --parallel-live + --skip-missing-interpreters false + --notest + - name: Generate changelog draft to a temporary file + run: >- + python -m + tox + --parallel auto + --parallel-live + --skip-missing-interpreters false + --skip-pkg-install + -e draft-changelog + -qq + | + tee + ${{ needs.pre-setup.outputs.changelog-draft-name }} + - name: Generate changelog update with tox and stage it in Git + run: >- + python -m + tox + --parallel auto + --parallel-live + --skip-missing-interpreters false + --skip-pkg-install + -- + '${{ needs.pre-setup.outputs.dist-version }}' + --yes + - name: >- + Commit the changelog updates for release + ${{ needs.pre-setup.outputs.git-tag }} in the local Git repo + run: >- + git commit -m + 'Generate a changelog entry for ${{ + needs.pre-setup.outputs.git-tag + }}' + - name: Log the changelog commit + run: git show --color + - name: Create a changelog update patch from the last Git commit + run: >- + git format-patch + --output='${{ needs.pre-setup.outputs.changelog-patch-name }}' + -1 HEAD + - name: Verify that expected patch got created + run: ls -1 '${{ needs.pre-setup.outputs.changelog-patch-name }}' + - name: >- Bump the package version to ${{ needs.pre-setup.outputs.dist-version @@ -212,7 +300,10 @@ jobs: uses: actions/upload-artifact@v2 with: name: npm-package-bump-patch - path: ${{ needs.pre-setup.outputs.version-patch-name }} + path: | + ${{ needs.pre-setup.outputs.version-patch-name }} + ${{ needs.pre-setup.outputs.changelog-patch-name }} + ${{ needs.pre-setup.outputs.changelog-draft-name }} - name: Build a package tarball artifact run: npm pack @@ -406,6 +497,12 @@ jobs: with: name: npm-package-bump-patch + - name: Apply the changelog patch + run: git am '${{ needs.pre-setup.outputs.changelog-patch-name }}' + - name: Drop the changelog patch file + run: rm -fv '${{ needs.pre-setup.outputs.changelog-patch-name }}' + shell: bash + - name: Apply the version patch run: git am ${{ needs.pre-setup.outputs.version-patch-name }} - name: Drop the version patch file @@ -459,9 +556,127 @@ jobs: with: jobs: ${{ toJSON(needs) }} + github-release-pull-request: + name: >- + Open a GitHub Pull Request for + ${{ needs.pre-setup.outputs.git-tag }} + if: fromJSON(needs.pre-setup.outputs.release-requested) + needs: + - check + - pre-setup # transitive, for accessing settings + + runs-on: Ubuntu-latest + + environment: git-repo + + outputs: + pull_request_url: ${{ steps.pr.outputs.pull_request_url }} + + permissions: + pull-requests: write + + steps: + - name: Fetch the src + uses: actions/checkout@v2 + with: + fetch-depth: 0 # To reach the common commit w/ the repo default branch + ref: ${{ github.event.inputs.release-commitish }} + ssh-key: ${{ secrets.DEPLOYMENT_KEY }} + - name: Setup git user as [bot] + # Refs: + # * https://github.community/t/github-actions-bot-email-address/17204/6 + # * https://github.com/actions/checkout/issues/13#issuecomment-724415212 + uses: fregante/setup-git-user@v1.0.1 + - name: Fetch the GHA artifact with the version patch + uses: actions/download-artifact@v2 + with: + name: npm-package-bump-patch + + - name: Apply the version patch + run: git am ${{ needs.pre-setup.outputs.version-patch-name }} + - name: Drop the version patch file + run: rm -fv ${{ needs.pre-setup.outputs.version-patch-name }} + + - name: >- + Create a local 'release/${{ + needs.pre-setup.outputs.dist-version + }}' branch + run: >- + git checkout -b 'release/${{ + needs.pre-setup.outputs.dist-version + }}' + + - name: >- + Push the `release/${{ + needs.pre-setup.outputs.dist-version + }}` release branch to GitHub + run: >- + git push --atomic origin + 'release/${{ needs.pre-setup.outputs.dist-version }}' + + - name: pull-request-action + id: pr + uses: vsoch/pull-request-action@1.0.18 + env: + BRANCH_PREFIX: '' + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PULL_REQUEST_BODY: >- + Automated metadata update with the just released version + ${{ needs.pre-setup.outputs.dist-version }} + PULL_REQUEST_BRANCH: ${{ github.event.repository.default_branch }} + PULL_REQUEST_FROM_BRANCH: >- + release/${{ needs.pre-setup.outputs.dist-version }} + PULL_REQUEST_TITLE: >- + Bump version to ${{ needs.pre-setup.outputs.git-tag }} + - name: Log the pull request details + run: | + echo "PR number: ${{ steps.pr.outputs.pull_request_number }}" + echo "PR URL: ${{ steps.pr.outputs.pull_request_url }}" + + - name: Append the release changelog to the PR description + run: >- + gh pr edit + '${{ steps.pr.outputs.pull_request_url }}' + --body-file='${{ + needs.pre-setup.outputs.changelog-draft-name + }}' + + - name: Create a merge commit with the release branch + run: | + sh -x + + git fetch origin '+refs/heads/${{ + github.event.repository.default_branch + }}:refs/remotes/origin/${{ + github.event.repository.default_branch + }}' + + git checkout '${{ github.event.repository.default_branch }}' + + git merge --no-ff -m "Merge branch 'release/${{ + needs.pre-setup.outputs.dist-version + }}' into ${{ + github.event.repository.default_branch + }}" 'release/${{ + needs.pre-setup.outputs.dist-version + }}' + + git checkout -B 'release/${{ + needs.pre-setup.outputs.dist-version + }}' + + - name: >- + Push the `release/${{ + needs.pre-setup.outputs.dist-version + }}` release branch to GitHub + # ... after PR is created so that `pull_request` `synchronize` + # originates from a non-GHA token + run: >- + git push --atomic origin + 'release/${{ needs.pre-setup.outputs.dist-version }}' + publish-npmjs: name: Publish ${{ needs.pre-setup.outputs.git-tag }} to Npmjs - if: fromJSON(needs.pre-setup.outputs.release-requested) environment: name: release url: >- @@ -469,7 +684,7 @@ jobs: needs.pre-setup.outputs.dist-public-version }} needs: - - check + - github-release-pull-request - pre-setup # transitive, for accessing settings runs-on: Ubuntu-latest @@ -534,118 +749,13 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - post-release-repo-update: - name: Publish post-release meta for ${{ needs.pre-setup.outputs.git-tag }} - needs: - - pre-setup # transitive, for accessing settings - - publish-npmjs - - runs-on: Ubuntu-latest - - steps: - - name: Fetch the src - uses: actions/checkout@v2 - with: - fetch-depth: 0 # To reach the common commit w/ the repo default branch - ref: ${{ github.event.inputs.release-commitish }} - - name: Setup git user as [bot] - # Refs: - # * https://github.community/t/github-actions-bot-email-address/17204/6 - # * https://github.com/actions/checkout/issues/13#issuecomment-724415212 - uses: fregante/setup-git-user@v1.0.1 - - name: Fetch the GHA artifact with the version patch - uses: actions/download-artifact@v2 - with: - name: npm-package-bump-patch - - - name: Apply the version patch - run: git am ${{ needs.pre-setup.outputs.version-patch-name }} - - name: Drop the version patch file - run: rm -fv ${{ needs.pre-setup.outputs.version-patch-name }} - - - name: Create a merge commit with the release branch - run: | - sh -x - - git checkout -b 'release/${{ - needs.pre-setup.outputs.dist-version - }}' - - git fetch origin '+refs/heads/${{ - github.event.repository.default_branch - }}:refs/remotes/origin/${{ - github.event.repository.default_branch - }}' - - git checkout '${{ github.event.repository.default_branch }}' - - git merge --no-ff -m "Merge branch 'release/${{ - needs.pre-setup.outputs.dist-version - }}' into ${{ - github.event.repository.default_branch - }}" 'release/${{ - needs.pre-setup.outputs.dist-version - }}' - - git checkout -B 'release/${{ - needs.pre-setup.outputs.dist-version - }}' - - - name: >- - Tag the release in the local Git repo - as ${{ needs.pre-setup.outputs.git-tag }} - run: git tag ${{ needs.pre-setup.outputs.git-tag }} HEAD - - name: >- - Push the `${{ needs.pre-setup.outputs.git-tag }}` tag and - the `release/${{ - needs.pre-setup.outputs.dist-version - }}` release branch corresponding to the just published - release back to GitHub - run: >- - git push --atomic origin - '${{ needs.pre-setup.outputs.git-tag }}' - 'release/${{ needs.pre-setup.outputs.dist-version }}' - - github-release-pull-request: - name: >- - Open a GitHub Pull Request for - ${{ needs.pre-setup.outputs.git-tag }} - needs: - - post-release-repo-update - - pre-setup # transitive, for accessing settings - runs-on: Ubuntu-latest - - permissions: - pull-requests: write - - steps: - - name: pull-request-action - id: pr - uses: vsoch/pull-request-action@1.0.18 - env: - BRANCH_PREFIX: '' - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PULL_REQUEST_BODY: >- - Automated metadata update with the just released version - ${{ needs.pre-setup.outputs.dist-version }} - PULL_REQUEST_BRANCH: ${{ github.event.repository.default_branch }} - PULL_REQUEST_FROM_BRANCH: >- - release/${{ needs.pre-setup.outputs.dist-version }} - PULL_REQUEST_TITLE: >- - Bump version to ${{ needs.pre-setup.outputs.git-tag }} - - name: Log the pull request details - run: >- - echo - "PR number: ${{ steps.pr.outputs.pull_request_number }}" - "\nPR URL: ${{ steps.pr.outputs.pull_request_url }}" - publish-github-release: name: >- Publish a GitHub Release for ${{ needs.pre-setup.outputs.git-tag }} needs: - - post-release-repo-update - pre-setup # transitive, for accessing settings + - publish-npmjs runs-on: Ubuntu-latest permissions: @@ -657,6 +767,10 @@ jobs: uses: actions/download-artifact@v2 with: name: npm-package-tarball + - name: Fetch the GHA artifact with the release changelog draft + uses: actions/download-artifact@v2 + with: + name: npm-package-bump-patch - name: >- Publish a GitHub Release for @@ -668,7 +782,7 @@ jobs: artifacts: | ${{ needs.pre-setup.outputs.tarball-artifact-name }} artifactContentType: application/gzip # .tgz / RFC 6713 - # body/bodyFile: # FIXME: Use once Towncrier is integrated. + bodyFile: ${{ needs.pre-setup.outputs.changelog-draft-name }} commit: release/${{ needs.pre-setup.outputs.dist-version }} discussionCategory: Announcements draft: false @@ -683,4 +797,50 @@ jobs: replacesArtifacts: false tag: ${{ needs.pre-setup.outputs.git-tag }} token: ${{ secrets.GITHUB_TOKEN }} + + merge-pr: + name: Merge the release PR + # ... when it's already published + needs: + - github-release-pull-request # transitive, for accessing the PR number + - publish-github-release + runs-on: Ubuntu-latest + + permissions: + contents: write # Needed to merge or enable auto-merge + pull-requests: write + + steps: + - name: Auto-approve the PR + # ... to fulfill the branch protection requirement + run: >- + gh pr review + '${{ steps.pr.outputs.pull_request_url }}' + --approve + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Enable auto-merge for the PR + # ... so that GitHub merges it right when the branch protection + # conditions are fulfilled, this will fail if it is green already + run: >- + gh pr merge + --auto --merge + '${{ needs.github-release-pull-request.outputs.pull_request_url }}' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Attempt to merge the PR + # ... in case the branch protection is still being evaluated + # NOTE: At this point the release has already been published to Npmjs + # NOTE: and GitHub releases so human gating has already happened via + # NOTE: approving the deployment environment earlier. + # NOTE: This means that the PR must get merged no matter what, just to + # NOTE: correspond the published artifacts for tracability and transparency. + if: failure() + run: >- + gh pr merge + --merge + '${{ needs.github-release-pull-request.outputs.pull_request_url }}' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ... diff --git a/docs/changelog-fragments.d/198.misc.md b/docs/changelog-fragments.d/198.misc.md new file mode 120000 index 000000000..93f1fe791 --- /dev/null +++ b/docs/changelog-fragments.d/198.misc.md @@ -0,0 +1 @@ +158.misc.md \ No newline at end of file diff --git a/tox.ini b/tox.ini index 9ae10c7c6..f0a405ed1 100644 --- a/tox.ini +++ b/tox.ini @@ -101,6 +101,7 @@ description = unreleased changelog preview does not require extra arguments. When invoking to update the changelog, pass the desired version as an argument after `--`. For example, `tox -e {envname} -- 1.3.2`. +envdir = {toxworkdir}/changelog commands = {envpython} -m \ towncrier.build \ @@ -121,6 +122,28 @@ commands = towncrier.check \ --compare-with origin/main \ {posargs:} +deps = + {[testenv:make-changelog]deps} +envdir = {[testenv:make-changelog]envdir} +isolated_build = {[testenv:make-changelog]isolated_build} +skip_install = {[testenv:make-changelog]skip_install} + + +[testenv:draft-changelog] +basepython = {[testenv:make-changelog]basepython} +description = + Print out the Towncrier-managed change notes + draft for the next release to stdout +commands = + # NOTE: `sh` invocation is required to suppress stderr from + # NOTE: towncrier since it does not have own CLI flags for + # NOTE: doing this. + sh -c "2>/dev/null \ + {envpython} -m \ + towncrier.build \ + --version '[UNRELEASED DRAFT]' \ + --draft" +envdir = {[testenv:make-changelog]envdir} deps = {[testenv:make-changelog]deps} isolated_build = {[testenv:make-changelog]isolated_build} From 1c52ad147215f39c429b767f44a9ba68d26fa2ab Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 2 Feb 2022 20:58:50 +0100 Subject: [PATCH 233/558] Provide GH token to PR edit in release automation --- .github/workflows/ci.yml | 2 ++ docs/changelog-fragments.d/201.misc.md | 1 + 2 files changed, 3 insertions(+) create mode 120000 docs/changelog-fragments.d/201.misc.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index beb99c143..b0afbf73c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -640,6 +640,8 @@ jobs: --body-file='${{ needs.pre-setup.outputs.changelog-draft-name }}' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Create a merge commit with the release branch run: | diff --git a/docs/changelog-fragments.d/201.misc.md b/docs/changelog-fragments.d/201.misc.md new file mode 120000 index 000000000..93f1fe791 --- /dev/null +++ b/docs/changelog-fragments.d/201.misc.md @@ -0,0 +1 @@ +158.misc.md \ No newline at end of file From 784e991434a7653614477643e3e0795c3f317783 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 2 Feb 2022 21:08:39 +0100 Subject: [PATCH 234/558] Apply the changelog patch to the release PR --- .github/workflows/ci.yml | 6 ++++++ docs/changelog-fragments.d/202.misc.md | 1 + 2 files changed, 7 insertions(+) create mode 120000 docs/changelog-fragments.d/202.misc.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index beb99c143..853a3f49d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -592,6 +592,12 @@ jobs: with: name: npm-package-bump-patch + - name: Apply the changelog patch + run: git am '${{ needs.pre-setup.outputs.changelog-patch-name }}' + - name: Drop the changelog patch file + run: rm -fv '${{ needs.pre-setup.outputs.changelog-patch-name }}' + shell: bash + - name: Apply the version patch run: git am ${{ needs.pre-setup.outputs.version-patch-name }} - name: Drop the version patch file diff --git a/docs/changelog-fragments.d/202.misc.md b/docs/changelog-fragments.d/202.misc.md new file mode 120000 index 000000000..93f1fe791 --- /dev/null +++ b/docs/changelog-fragments.d/202.misc.md @@ -0,0 +1 @@ +158.misc.md \ No newline at end of file From 36c013d982baa39563a6baea234b277347d28530 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 2 Feb 2022 22:43:26 +0100 Subject: [PATCH 235/558] Add a change note for PR #204 --- docs/changelog-fragments.d/204.misc.md | 1 + 1 file changed, 1 insertion(+) create mode 120000 docs/changelog-fragments.d/204.misc.md diff --git a/docs/changelog-fragments.d/204.misc.md b/docs/changelog-fragments.d/204.misc.md new file mode 120000 index 000000000..93f1fe791 --- /dev/null +++ b/docs/changelog-fragments.d/204.misc.md @@ -0,0 +1 @@ +158.misc.md \ No newline at end of file From c3ddf43fc09c0fd8ef1c35dba88977249feb92f9 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 2 Feb 2022 22:43:52 +0100 Subject: [PATCH 236/558] Hide tox report trailer from change notes draft --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3e772134e..d713940c5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -243,10 +243,9 @@ jobs: --notest - name: Generate changelog draft to a temporary file run: >- + 2>/dev/null python -m tox - --parallel auto - --parallel-live --skip-missing-interpreters false --skip-pkg-install -e draft-changelog @@ -254,6 +253,7 @@ jobs: | tee ${{ needs.pre-setup.outputs.changelog-draft-name }} + shell: bash - name: Generate changelog update with tox and stage it in Git run: >- python -m From 4e66f559c594c8cae7a3c2a787592bfb54bee6af Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 2 Feb 2022 23:01:26 +0100 Subject: [PATCH 237/558] Transform user&issue roles @ changelog to pure MD This prepares the changelog draft to be used in GitHub releases and PR description for native rendering. --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d713940c5..4eaccd082 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -251,6 +251,10 @@ jobs: -e draft-changelog -qq | + sed + 's/{issue}`\([0-9]\+\)`/#\1/g; + s/{user}`\([-.a-zA-Z0-9]\+\)`/@\1/g' + | tee ${{ needs.pre-setup.outputs.changelog-draft-name }} shell: bash From 20746368cbe8692a2a8e3c54aea4a4ad8843ebc1 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 2 Feb 2022 23:23:03 +0100 Subject: [PATCH 238/558] Extend changelog PR description with RTD preview --- .github/workflows/ci.yml | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4eaccd082..b970eef15 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -631,8 +631,9 @@ jobs: BRANCH_PREFIX: '' GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PULL_REQUEST_BODY: >- - Automated metadata update with the just released version + Automated metadata update with the version ${{ needs.pre-setup.outputs.dist-version }} + preview. PULL_REQUEST_BRANCH: ${{ github.event.repository.default_branch }} PULL_REQUEST_FROM_BRANCH: >- release/${{ needs.pre-setup.outputs.dist-version }} @@ -643,13 +644,42 @@ jobs: echo "PR number: ${{ steps.pr.outputs.pull_request_number }}" echo "PR URL: ${{ steps.pr.outputs.pull_request_url }}" + - name: Prepare a combined PR description + run: | + SECTION_ANCHOR="v$(echo '${{ + needs.pre-setup.outputs.dist-version + }}' | sed 's/\./-/g')-$(date '+%Y-%m-%d')" + + echo '## Summary' > pr-description.md + echo >> pr-description.md + echo 'Automated metadata update with the version ${{ + needs.pre-setup.outputs.dist-version + }} preview.' >> pr-description.md + echo >> pr-description.md + + echo '## Read the Docs preview' >> pr-description.md + echo >> pr-description.md + echo "https://als--${{ + steps.pr.outputs.pull_request_number + }}.org.readthedocs.build/en/${{ + steps.pr.outputs.pull_request_number + }}/changelog/#${SECTION_ANCHOR}" >> pr-description.md + echo >> pr-description.md + + echo '## v${{ + needs.pre-setup.outputs.dist-version + }} changelog /DRAFT/' >> pr-description.md + echo >> pr-description.md + cat '${{ + needs.pre-setup.outputs.changelog-draft-name + }}' >> pr-description.md + shell: bash + - name: Append the release changelog to the PR description run: >- gh pr edit '${{ steps.pr.outputs.pull_request_url }}' - --body-file='${{ - needs.pre-setup.outputs.changelog-draft-name - }}' + --body-file=pr-description.md env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 7989d2ef13c87b672364393d3cf88d882423ecf9 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Thu, 3 Feb 2022 14:32:22 +0530 Subject: [PATCH 239/558] Fix test name for vscode-ansible extension test run (#206) The PR on vscode-ansible https://github.com/ansible/vscode-ansible/pull/418 changed script name from `test:ui` to `test-ui`. Updating the name to reflect in language server CI --- .github/workflows/vscode.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/vscode.yml b/.github/workflows/vscode.yml index c351ffd4b..c4c6bc27e 100644 --- a/.github/workflows/vscode.yml +++ b/.github/workflows/vscode.yml @@ -42,9 +42,9 @@ jobs: popd - name: >- - Run test:ui with vscode-ansible + Run test-ui with vscode-ansible uses: GabrielBB/xvfb-action@v1 with: run: >- - npm run test:ui + npm run test-ui working-directory: ../vscode-ansible From 6a2c69568610d46291aee89dd798a971e2aec24e Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Thu, 3 Feb 2022 15:36:14 +0530 Subject: [PATCH 240/558] Temporary disable test run on windows node (#207) * Temporary disable test run on windows node * Currently tests are run on windows node without enabling WSL2 which is not supported test matrix * Currently work is in progress to add Windows + WSL2 combination https://github.com/ansible/vscode-ansible/pull/408 in CI. After it is successfully done we will re-enable windows + wsl2 node testing * update comment * fix lint failure --- .github/workflows/ci.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b970eef15..8ad7f1849 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -442,12 +442,14 @@ jobs: node-version: 16 os: macos-11 # windows - - name: test-node12-windows - node-version: 12 - os: windows-latest - - name: test-node16-windows - node-version: 16 - os: windows-latest + # TODO: revisit this after windows + wsl2 node + # is enabled in CI + # - name: test-node12-windows + # node-version: 12 + # os: windows-latest + # - name: test-node16-windows + # node-version: 16 + # os: windows-latest continue-on-error: >- ${{ From 54e108f6f6dbf55fd3a6f03447548969e200e003 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 3 Feb 2022 18:26:28 +0100 Subject: [PATCH 241/558] Add a cleanup job for removing PR/branch on fails Ref #198 --- .github/workflows/ci.yml | 39 ++++++++++++++++++++++++++ docs/changelog-fragments.d/208.misc.md | 1 + 2 files changed, 40 insertions(+) create mode 120000 docs/changelog-fragments.d/208.misc.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8ad7f1849..e2d11c0c5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -887,4 +887,43 @@ jobs: '${{ needs.github-release-pull-request.outputs.pull_request_url }}' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + clean-up-on-failure-or-cancellation: + name: Close release PR and branch on failure + # ... when publishing to Npmjs was canceled or failed + + if: >- # necessary so that the check is always performed + !success() + && fromJSON(needs.pre-setup.outputs.release-requested) + + needs: + # If these fail, there's no point in keeping the branch. + # Besides, a pre-existing PR or a branch can break workflows + # when the same version re-release is requested. + - github-release-pull-request + - pre-setup # transitive, for accessing settings + - publish-npmjs + + runs-on: Ubuntu-latest + + permissions: + contents: write # Needed to drop the branch + + steps: + - name: Check out src from Git + # ... to pre-provision the GH token in the env + uses: actions/checkout@v2.3.4 + with: + fetch-depth: 1 + + - name: Delete the release branch and the PR + # ... but only in the event of a failure to create a PR or + # make a release to Npmjs + run: >- + git push + --atomic + -d origin + 'release/${{ needs.pre-setup.outputs.dist-version }}' + || : + ... diff --git a/docs/changelog-fragments.d/208.misc.md b/docs/changelog-fragments.d/208.misc.md new file mode 120000 index 000000000..93f1fe791 --- /dev/null +++ b/docs/changelog-fragments.d/208.misc.md @@ -0,0 +1 @@ +158.misc.md \ No newline at end of file From a564d44e7a0607efde9a56433396f70142fc8421 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Thu, 3 Feb 2022 20:31:49 +0100 Subject: [PATCH 242/558] Extend release automation to link deployment page Ref #198 --- .github/workflows/ci.yml | 19 +++++++++++++++++++ docs/changelog-fragments.d/210.misc.md | 1 + 2 files changed, 20 insertions(+) create mode 120000 docs/changelog-fragments.d/210.misc.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e2d11c0c5..95ff2c86e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -659,6 +659,25 @@ jobs: }} preview.' >> pr-description.md echo >> pr-description.md + echo '## Approve publishing v${{ + needs.pre-setup.outputs.dist-version + }} to Npmjs 👇' >> pr-description.md + echo >> pr-description.md + echo 'To proceed with publishing this release to Npmjs, ' \ + 'follow the link below and approve the pending deployment:' \ + >> pr-description.md + echo >> pr-description.md + echo '### https://github.com/${{ + github.repository + }}/actions/runs/${{ + github.run_id + }}' >> pr-description.md + echo >> pr-description.md + echo '_**Note:** Approving this PR is not mandatory but ' \ + 'approving the pending deployment referenced above is._' \ + >> pr-description.md + echo >> pr-description.md + echo '## Read the Docs preview' >> pr-description.md echo >> pr-description.md echo "https://als--${{ diff --git a/docs/changelog-fragments.d/210.misc.md b/docs/changelog-fragments.d/210.misc.md new file mode 120000 index 000000000..93f1fe791 --- /dev/null +++ b/docs/changelog-fragments.d/210.misc.md @@ -0,0 +1 @@ +158.misc.md \ No newline at end of file From 63f5958ba6b9a8fe00feeb7d163c47ff6a1bad09 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Fri, 4 Feb 2022 08:08:09 +0530 Subject: [PATCH 243/558] Add tests for hoverProvider (#199) * add test fixtures for hoverProvider test * add script to test hoverProvider * restructure and put hoverProvider test script at right place * increase default timeout for tests * rectify the docUri to create TextDocument * add function to create test workspace manager * fix issues from pre-commit * add motivation as comment to increase the timeout of mocha tests * add jsdoc to convey the purpose of createTestWorkspaceManager function * remove unnecessary files Co-authored-by: Ganesh Nalawade --- .mocharc.yml | 1 + test/data/hover/roles.yml | 7 + test/data/hover/tasks.yml | 15 ++ test/data/hover/test_role/defaults/main.yml | 3 + test/data/hover/test_role/meta/main.yml | 52 ++++++ test/data/hover/test_role/tasks/main.yml | 9 + test/data/hover/test_role/templates/motd.j2 | 6 + test/testScripts/providers/hoverTest.test.ts | 181 +++++++++++++++++++ test/utils/helper.ts | 17 +- 9 files changed, 290 insertions(+), 1 deletion(-) create mode 100644 test/data/hover/roles.yml create mode 100644 test/data/hover/tasks.yml create mode 100644 test/data/hover/test_role/defaults/main.yml create mode 100644 test/data/hover/test_role/meta/main.yml create mode 100644 test/data/hover/test_role/tasks/main.yml create mode 100644 test/data/hover/test_role/templates/motd.j2 create mode 100644 test/testScripts/providers/hoverTest.test.ts diff --git a/.mocharc.yml b/.mocharc.yml index 4e425dd6f..ab091bf07 100644 --- a/.mocharc.yml +++ b/.mocharc.yml @@ -1,2 +1,3 @@ require: ts-node/register spec: './test/**/*.ts' +timeout: 60000 # same as 60 seconds. This done to ensure that we have sufficient time to run tests on the CI as each test involves loading yaml files and docs library for ansible. diff --git a/test/data/hover/roles.yml b/test/data/hover/roles.yml new file mode 100644 index 000000000..8e286e000 --- /dev/null +++ b/test/data/hover/roles.yml @@ -0,0 +1,7 @@ +--- +- hosts: localhost + roles: + - role: test_role + test_manager: admin@test.com + become: True + tags: typeA diff --git a/test/data/hover/tasks.yml b/test/data/hover/tasks.yml new file mode 100644 index 000000000..b891f366d --- /dev/null +++ b/test/data/hover/tasks.yml @@ -0,0 +1,15 @@ +- name: Hello World + hosts: localhost + gather_facts: False + tasks: + - ansible.builtin.debug: + msg: Happy testing ! + register: result + + - block: + - name: List test directory content + ansible.builtin.command: "ls -l /test/" + become: True + + - improper_module: + improper_option: invalid_value diff --git a/test/data/hover/test_role/defaults/main.yml b/test/data/hover/test_role/defaults/main.yml new file mode 100644 index 000000000..288d29df0 --- /dev/null +++ b/test/data/hover/test_role/defaults/main.yml @@ -0,0 +1,3 @@ +--- +# defaults file for test_role +test_manager: admin@test.com diff --git a/test/data/hover/test_role/meta/main.yml b/test/data/hover/test_role/meta/main.yml new file mode 100644 index 000000000..c572acc9f --- /dev/null +++ b/test/data/hover/test_role/meta/main.yml @@ -0,0 +1,52 @@ +galaxy_info: + author: your name + description: your role description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Choose a valid license ID from https://spdx.org - some suggested licenses: + # - BSD-3-Clause (default) + # - MIT + # - GPL-2.0-or-later + # - GPL-3.0-only + # - Apache-2.0 + # - CC-BY-4.0 + license: license (GPL-2.0-or-later, MIT, etc) + + min_ansible_version: 2.1 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + # platforms: + # - name: Fedora + # versions: + # - all + # - 25 + # - name: SomePlatform + # versions: + # - all + # - 1.0 + # - 7 + # - 99.99 + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +dependencies: [] + # List your role dependencies here, one per line. Be sure to remove the '[]' above, + # if you add dependencies to this list. diff --git a/test/data/hover/test_role/tasks/main.yml b/test/data/hover/test_role/tasks/main.yml new file mode 100644 index 000000000..3e89d81e5 --- /dev/null +++ b/test/data/hover/test_role/tasks/main.yml @@ -0,0 +1,9 @@ +--- +# tasks file for test_role +- name: copy motd file + template: + src: templates/motd.j2 + dest: /etc/motd + owner: root + group: root + mode: 0444 diff --git a/test/data/hover/test_role/templates/motd.j2 b/test/data/hover/test_role/templates/motd.j2 new file mode 100644 index 000000000..ae77a7d84 --- /dev/null +++ b/test/data/hover/test_role/templates/motd.j2 @@ -0,0 +1,6 @@ +Welcome to {{ ansible_hostname }} + +This file was created on {{ ansible_date_time.date }} +Go away if you have no business being here + +Contact {{ system_manager }} if anything is wrong diff --git a/test/testScripts/providers/hoverTest.test.ts b/test/testScripts/providers/hoverTest.test.ts new file mode 100644 index 000000000..aeadfe4a8 --- /dev/null +++ b/test/testScripts/providers/hoverTest.test.ts @@ -0,0 +1,181 @@ +import { expect } from 'chai'; +import { createTestWorkspaceManager, getDoc } from '../../utils/helper'; +import { doHover } from '../../../src/providers/hoverProvider'; +import { Position } from 'vscode-languageserver'; + +describe('doHover()', () => { + const workspaceManager = createTestWorkspaceManager(); + + describe('Play keywords hover', () => { + const tests = [ + { + word: 'name', + position: { line: 0, character: 4 } as Position, + doc: 'Identifier. Can be used for documentation, or in tasks/handlers.', + }, + { + word: 'host', + position: { line: 1, character: 4 } as Position, + doc: 'A list of groups, hosts or host pattern that translates into a list of hosts that are the play’s target.', + }, + { + word: 'tasks', + position: { line: 3, character: 4 } as Position, + doc: 'Main list of tasks to execute in the play, they run after roles and before post_tasks.', + }, + ]; + + tests.forEach(({ word, position, doc }) => { + it(`should provide hovering for '${word}'`, async function () { + const textDoc = await getDoc('hover/tasks.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualHover = await doHover( + textDoc, + position, + await context.docsLibrary + ); + expect(actualHover.contents['value']).includes(doc); + }); + }); + }); + + describe('Task keywords hover', () => { + const tests = [ + { + word: 'register', + position: { line: 6, character: 8 } as Position, + doc: 'Name of variable that will contain task status and module return data.', + }, + ]; + + tests.forEach(({ word, position, doc }) => { + it(`should provide hovering for '${word}'`, async function () { + const textDoc = await getDoc('hover/tasks.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualHover = await doHover( + textDoc, + position, + await context.docsLibrary + ); + expect(actualHover.contents['value']).includes(doc); + }); + }); + }); + + describe('Block keywords hover', () => { + const tests = [ + { + word: 'become', + position: { line: 11, character: 8 } as Position, + doc: 'Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin.', + }, + ]; + + tests.forEach(({ word, position, doc }) => { + it(`should provide hovering for '${word}'`, async function () { + const textDoc = await getDoc('hover/tasks.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualHover = await doHover( + textDoc, + position, + await context.docsLibrary + ); + expect(actualHover.contents['value']).includes(doc); + }); + }); + }); + + describe('Role keywords hover', () => { + const tests = [ + { + word: 'tags', + position: { line: 6, character: 8 } as Position, + doc: 'Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.', + }, + ]; + + tests.forEach(({ word, position, doc }) => { + it(`should provide hovering for '${word}'`, async function () { + const textDoc = await getDoc('hover/roles.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualHover = await doHover( + textDoc, + position, + await context.docsLibrary + ); + expect(actualHover.contents['value']).includes(doc); + }); + }); + }); + + describe('Module name and options hover', () => { + const tests = [ + { + word: 'ansible.builtin.debug', + position: { line: 4, character: 8 } as Position, + doc: 'Print statements during execution', + }, + { + word: 'ansible.builtin.debug -> msg', + position: { line: 5, character: 10 } as Position, + doc: 'The customized message that is printed. If omitted, prints a generic message.', + }, + ]; + + tests.forEach(({ word, position, doc }) => { + it(`should provide hovering for '${word}'`, async function () { + const textDoc = await getDoc('hover/tasks.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualHover = await doHover( + textDoc, + position, + await context.docsLibrary + ); + expect(actualHover.contents['value']).includes(doc); + }); + }); + }); + + describe('No hover', () => { + it('should not provide hovering for values', async function () { + const textDoc = await getDoc('hover/tasks.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualHover = await doHover( + textDoc, + { line: 13, character: 24 } as Position, + await context.docsLibrary + ); + expect(actualHover).to.be.null; + }); + + it('should not provide hovering for improper module name and options', async function () { + const textDoc = await getDoc('hover/tasks.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualHover = await doHover( + textDoc, + { line: 13, character: 8 } as Position, + await context.docsLibrary + ); + expect(actualHover).to.be.null; + }); + + it('should not provide hovering for improper module option', async function () { + const textDoc = await getDoc('hover/tasks.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualHover = await doHover( + textDoc, + { line: 14, character: 10 } as Position, + await context.docsLibrary + ); + expect(actualHover).to.be.null; + }); + }); +}); diff --git a/test/utils/helper.ts b/test/utils/helper.ts index 540cdebee..41efbf05b 100644 --- a/test/utils/helper.ts +++ b/test/utils/helper.ts @@ -1,15 +1,30 @@ import { TextDocument } from 'vscode-languageserver-textdocument'; import * as path from 'path'; import { promises as fs } from 'fs'; +import { WorkspaceManager } from '../../src/services/workspaceManager'; +import { createConnection } from 'vscode-languageserver/node'; export async function getDoc(filename: string): Promise { const file = await fs.readFile(path.resolve('test', 'data', filename), { encoding: 'utf8', }); - return TextDocument.create('uri', 'ansible', 1, file); + const docUri = path.resolve('test', 'data', filename).toString(); + return TextDocument.create(docUri, 'ansible', 1, file); } export function isWindows(): boolean { // win32 applies to x64 arch too, is the platform name return process.platform === 'win32'; } + +/** + * A function that initiates the connection object with ipc that can be used to create a workspace manager for testing purposes + * @returns {WorkspaceManager} object to serve as a workspace manager for testing purposes + */ +export function createTestWorkspaceManager(): WorkspaceManager { + process.argv.push('--node-ipc'); + const connection = createConnection(); + const workspaceManager = new WorkspaceManager(connection); + + return workspaceManager; +} From 140e9cfb2c70b85b197e9be800027612840c55e2 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sat, 5 Feb 2022 08:39:43 +0000 Subject: [PATCH 244/558] ci: bump mocha version (#213) This is also addressing `npm audit report`. --- package-lock.json | 341 ++++++++++++++++------------------------------ package.json | 2 +- 2 files changed, 118 insertions(+), 225 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f2490815..5c070d9d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "chai": "^4.3.4", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", - "mocha": "^8.4.0", + "mocha": "^9.2.0", "nyc": "^15.1.0", "prettier": "^2.4.1", "rimraf": "^3.0.2", @@ -1213,24 +1213,30 @@ } }, "node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "glob-parent": "~5.1.0", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { - "fsevents": "~2.3.1" + "fsevents": "~2.3.2" } }, "node_modules/clean-stack": { @@ -1319,9 +1325,9 @@ } }, "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -1910,9 +1916,9 @@ } }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -2185,6 +2191,18 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -2430,15 +2448,19 @@ "dev": true }, "node_modules/log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { - "chalk": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lru-cache": { @@ -2522,33 +2544,32 @@ "dev": true }, "node_modules/mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", + "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.1.6", + "glob": "7.2.0", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", "minimatch": "3.0.4", "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", + "nanoid": "3.2.0", + "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", + "workerpool": "6.2.0", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" @@ -2558,7 +2579,7 @@ "mocha": "bin/mocha" }, "engines": { - "node": ">= 10.12.0" + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", @@ -2571,33 +2592,10 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/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/mocha/node_modules/js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" @@ -2634,9 +2632,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -3173,9 +3171,9 @@ } }, "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { "picomatch": "^2.2.1" @@ -3323,9 +3321,9 @@ } }, "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -3767,58 +3765,6 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -3829,9 +3775,9 @@ } }, "node_modules/workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", "dev": true }, "node_modules/wrap-ansi": { @@ -4820,19 +4766,19 @@ "dev": true }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" } }, "clean-stack": { @@ -4914,9 +4860,9 @@ } }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -5342,9 +5288,9 @@ "dev": true }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -5540,6 +5486,12 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -5734,12 +5686,13 @@ "dev": true }, "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "chalk": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" } }, "lru-cache": { @@ -5804,33 +5757,32 @@ "dev": true }, "mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", + "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.1.6", + "glob": "7.2.0", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", "minimatch": "3.0.4", "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", + "nanoid": "3.2.0", + "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", + "workerpool": "6.2.0", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" @@ -5842,27 +5794,10 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "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 - } - } - }, "js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -5892,9 +5827,9 @@ "dev": true }, "nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true }, "natural-compare": { @@ -6286,9 +6221,9 @@ } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" @@ -6371,9 +6306,9 @@ } }, "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -6709,48 +6644,6 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -6758,9 +6651,9 @@ "dev": true }, "workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", "dev": true }, "wrap-ansi": { diff --git a/package.json b/package.json index 16eab2812..33f5c5207 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "chai": "^4.3.4", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", - "mocha": "^8.4.0", + "mocha": "^9.2.0", "nyc": "^15.1.0", "prettier": "^2.4.1", "rimraf": "^3.0.2", From 4d8ec1474867c9939666fd6f7647a51d256665f5 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sat, 5 Feb 2022 12:06:30 +0000 Subject: [PATCH 245/558] ci: make prettier ignores consistent (#214) --- .pre-commit-config.yaml | 7 ------- .prettierignore | 13 +++++++++++++ bin/version-bump-allowed | 15 ++++++--------- 3 files changed, 19 insertions(+), 16 deletions(-) create mode 100644 .prettierignore diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5d72683a3..dab8a895e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -82,13 +82,6 @@ repos: rev: "v2.5.1" hooks: - id: prettier - types_or: ["json", "ts"] - exclude: > - (?x)^( - ansible-language-configuration.json| - jinja-language-configuration.json| - syntaxes/external/jinja.tmLanguage.json - )$ - repo: https://github.com/igorshubovych/markdownlint-cli rev: v0.30.0 hooks: diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..2e473c117 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,13 @@ +# Untracked files, cannot symlink .gitignore due to: +# https://github.com/prettier/prettier/issues/4708#issuecomment-1030581671 +.tox +out + +# Tracked but externally sourced, no reformatting wanted: +jinja-language-configuration.json +syntaxes/external/jinja.tmLanguage.json + +# Files temporary excluded during prettier adoption: +*.md +*.yaml +*.yml diff --git a/bin/version-bump-allowed b/bin/version-bump-allowed index e9284614b..8b104bc0d 100755 --- a/bin/version-bump-allowed +++ b/bin/version-bump-allowed @@ -1,20 +1,17 @@ #!/usr/bin/env node -console.debug('Checking if it is allowed to bump the package version...') +console.debug('Checking if it is allowed to bump the package version...'); console.debug( `The previous package version was ${process.env.npm_package_version}` -) +); const isGitHubActionsCiCd = - process.env.CI === 'true' && - process.env.GITHUB_ACTIONS === 'true' + process.env.CI === 'true' && process.env.GITHUB_ACTIONS === 'true'; console.debug( `The package bump is ${ - isGitHubActionsCiCd - ? '' - : 'not ' + isGitHubActionsCiCd ? '' : 'not ' }running under GitHub Actions CI/CD` -) +); -process.exit(~~!isGitHubActionsCiCd) +process.exit(~~!isGitHubActionsCiCd); From 2777cc68667a36851feda886ea60f45cfddb9663 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sat, 5 Feb 2022 13:05:19 +0000 Subject: [PATCH 246/558] ci: use prettier on markdown from repo root (#215) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .prettierignore | 4 +- .prettierrc.yaml | 5 +++ CHANGELOG.md | 90 ++++++++++++++++++++---------------------- README.md | 100 ++++++++++++++++++++++++----------------------- 4 files changed, 102 insertions(+), 97 deletions(-) diff --git a/.prettierignore b/.prettierignore index 2e473c117..04aaf9282 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,6 @@ # Untracked files, cannot symlink .gitignore due to: # https://github.com/prettier/prettier/issues/4708#issuecomment-1030581671 +.pytest_cache .tox out @@ -8,6 +9,7 @@ jinja-language-configuration.json syntaxes/external/jinja.tmLanguage.json # Files temporary excluded during prettier adoption: -*.md +docs/**/*.md +.github/**/*.md *.yaml *.yml diff --git a/.prettierrc.yaml b/.prettierrc.yaml index a0e47692c..bcc4ae91e 100644 --- a/.prettierrc.yaml +++ b/.prettierrc.yaml @@ -15,5 +15,10 @@ overrides: parser: json5 quoteProps: preserve singleQuote: false + - files: + - '*.md' + options: + # compatibility with markdownlint + proseWrap: always semi: true singleQuote: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 174528e3f..66e409ef8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,9 @@ + # Change Log -All notable changes to the Ansible VS Code extension will be documented in this file. +All notable changes to the Ansible VS Code extension will be documented in this +file. [//]: # DO-NOT-REMOVE-versioning-promise-START @@ -21,47 +23,44 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag - ## v0.4.0 (2021-11-25) ### Bugfixes -* Prevented throwing an unhandled exception caused by undefined linter - arguments settings (#142) {user}`ssbarnea` -* Implemented opening standalone Ansible files that have no workspace - associated (#140) {user}`ganeshrn` +- Prevented throwing an unhandled exception caused by undefined linter arguments + settings (#142) {user}`ssbarnea` +- Implemented opening standalone Ansible files that have no workspace associated + (#140) {user}`ganeshrn` ## v0.3.0 (2021-11-18) ### Minor Changes -* Added support for nested module options (suboptions) (#116) - {user}`tomaciazek` -* Adopted use of `creator-ee` execution environment (#132) - {user}`ssbarnea` -* Updated container cleanup logic for execution environment (#111) +- Added support for nested module options (suboptions) (#116) {user}`tomaciazek` +- Adopted use of `creator-ee` execution environment (#132) {user}`ssbarnea` +- Updated container cleanup logic for execution environment (#111) {user}`ganeshrn` ### Bugfixes -* Updated plugin doc cache validate logic for execution environment (#109) +- Updated plugin doc cache validate logic for execution environment (#109) {user}`ganeshrn` -* Fixed issue with container copy command (#110) {user}`ganeshrn` +- Fixed issue with container copy command (#110) {user}`ganeshrn` ## v0.2.6 (2021-10-29) ### Bugfixes -* Fixed auto-completion to account for the builtin modules when used - with EE (#94) {user}`ganeshrn` +- Fixed auto-completion to account for the builtin modules when used with EE + (#94) {user}`ganeshrn` ## v0.2.5 (2021-10-23) ### Bugfixes -* Added a guard for linting only playbook files with the Ansible's - built-in syntax-check when ansible-lint is unavailable. This is used for - providing the diagnostics information (#89) {user}`priyamsahoo` +- Added a guard for linting only playbook files with the Ansible's built-in + syntax-check when ansible-lint is unavailable. This is used for providing the + diagnostics information (#89) {user}`priyamsahoo` ## v0.2.4 (2021-10-19) @@ -69,53 +68,50 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag The most notable changes that happened were: -* Renaming and publishing the package under the `@ansible` scope on - Npmjs. The new name is `@ansible/ansible-language-server` now - (#10) {user}`webknjaz` -* Deprecation of the initial `ansible-language-server` npm package that - existed in the global namespace prior to the rename {user}`ganeshrn` -* Adding the auto-completion and diagnostics support for Ansible - Execution Environments {user}`ganeshrn` +- Renaming and publishing the package under the `@ansible` scope on Npmjs. The + new name is `@ansible/ansible-language-server` now (#10) {user}`webknjaz` +- Deprecation of the initial `ansible-language-server` npm package that existed + in the global namespace prior to the rename {user}`ganeshrn` +- Adding the auto-completion and diagnostics support for Ansible Execution + Environments {user}`ganeshrn` ### Changes -* Started falling back to checking playbooks with the Ansible's built-in +- Started falling back to checking playbooks with the Ansible's built-in syntax-check when `ansible-lint` is not installed or disabled (#5) {user}`priyamsahoo` -* Set the minimum runtime prerequisites to `npm > 7.11.2` and - `node >= 12` (#23) {user}`ssbarnea` -* Updated the default settings value to use fully qualified collection - name (FQCN) during auto-completion (#37) {user}`priyamsahoo` -* Added auto-completion support for Ansible Execution Environments - (#42 #54 #55) {user}`ganeshrn` -* Added diagnostics support for Ansible Execution Environments (#53) +- Set the minimum runtime prerequisites to `npm > 7.11.2` and `node >= 12` (#23) + {user}`ssbarnea` +- Updated the default settings value to use fully qualified collection name + (FQCN) during auto-completion (#37) {user}`priyamsahoo` +- Added auto-completion support for Ansible Execution Environments (#42 #54 #55) + {user}`ganeshrn` +- Added diagnostics support for Ansible Execution Environments (#53) {user}`ganeshrn` -* Updated module completion return statement to support sorting as per - FQCN (#57) {user}`priyamsahoo` +- Updated module completion return statement to support sorting as per FQCN + (#57) {user}`priyamsahoo` ### Bugfixes -* Added a fix to check that the module paths are directories before - globbing them during the documentation lookup (#38) - {user}`kimbernator` -* Implemented documentation fragment discovery (#40) {user}`tomaciazek` -* Fixed sort `slice()` exception issue in `ansibleConfig` service (#76) +- Added a fix to check that the module paths are directories before globbing + them during the documentation lookup (#38) {user}`kimbernator` +- Implemented documentation fragment discovery (#40) {user}`tomaciazek` +- Fixed sort `slice()` exception issue in `ansibleConfig` service (#76) {user}`ssbarnea` -* Fixed an issue with progress handling when `ansible-lint` falls back - to `syntax check` (#88) {user}`yaegassy` +- Fixed an issue with progress handling when `ansible-lint` falls back to + `syntax check` (#88) {user}`yaegassy` ### Misc -* Replaced `decode`/`encodeURI` with a native VS Code mechanism (#8) +- Replaced `decode`/`encodeURI` with a native VS Code mechanism (#8) {user}`tomaciazek` -* Implemented the release CD via `workflow_dispatch` (#65) - {user}`webknjaz` +- Implemented the release CD via `workflow_dispatch` (#65) {user}`webknjaz` ## v0.1.0-1 (2021-07-28) -* Updated the npm package to include the `out/` folder +- Updated the npm package to include the `out/` folder ## v0.1.0 (2021-07-28) -* Initial ansible language server release. Based on the `vscode-ansible` plugin +- Initial ansible language server release. Based on the `vscode-ansible` plugin developed by {user}`Tomasz Maciążek ` diff --git a/README.md b/README.md index 5ba0a953e..a41b37334 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@ This language server adds support for Ansible and is currently used by the following projects: -* [Ansible extension for vscode/codium](https://github.com/ansible/vscode-ansible) -* [Ansible extension for coc.nvim](https://github.com/yaegassy/coc-ansible) +- [Ansible extension for vscode/codium](https://github.com/ansible/vscode-ansible) +- [Ansible extension for coc.nvim](https://github.com/yaegassy/coc-ansible) ## Features @@ -38,15 +38,15 @@ is provided instantaneously. On opening and saving a document, `ansible-lint` is executed in the background and any findings are presented as errors. You might find it useful that -rules/tags added to `warn_list` -(see [Ansible Lint Documentation](https://ansible-lint.readthedocs.io/en/latest/configuring.html)) +rules/tags added to `warn_list` (see +[Ansible Lint Documentation](https://ansible-lint.readthedocs.io/en/latest/configuring.html)) are shown as warnings instead. > If you also install `yamllint`, `ansible-lint` will detect it and incorporate > into the linting process. Any findings reported by `yamllint` will be exposed > in VSCode as errors/warnings. -***Note*** +**_Note_** If `ansible-lint` is not installed/found or running `ansible-lint` results in error it will fallback to `ansible --syntax-check` for validation. @@ -59,23 +59,23 @@ The extension tries to detect whether the cursor is on a play, block or task etc. and provides suggestions accordingly. There are also a few other rules that improve user experience: -* the `name` property is always suggested first -* on module options, the required properties are shown first, and aliases are +- the `name` property is always suggested first +- on module options, the required properties are shown first, and aliases are shown last, otherwise ordering from the documentation is preserved -* FQCNs (fully qualified collection names) are inserted only when necessary; +- FQCNs (fully qualified collection names) are inserted only when necessary; collections configured with the [`collections` keyword] are honored. This behavior can be disabled in extension settings. [`collections` keyword]: -https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#simplifying-module-names-with-the-collections-keyword + https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#simplifying-module-names-with-the-collections-keyword #### Auto-closing Jinja expressions ![Easier Jinja expression typing](https://github.com/ansible/ansible-language-server/raw/main/images/jinja-expression.gif) -When writing a Jinja expression, you only need to type `"{{`, and it -will be mirrored behind the cursor (including the space). You can also select -the whole expression and press `space` to put spaces on both sides of the +When writing a Jinja expression, you only need to type `"{{`, and it will +be mirrored behind the cursor (including the space). You can also select the +whole expression and press `space` to put spaces on both sides of the expression. ### Documentation reference @@ -90,47 +90,48 @@ the documentation straight from the Python implementation of the modules. ![Go to code on Ctrl+click](https://github.com/ansible/ansible-language-server/raw/main/images/go-to-definition.gif) -You may also open the implementation of any module using the standard *Go to -Definition* operation, for instance, by clicking on the module name while +You may also open the implementation of any module using the standard _Go to +Definition_ operation, for instance, by clicking on the module name while holding `ctrl`/`cmd`. ## Language Server Settings The following settings are supported. -* `ansible.ansible.path`: Path to the `ansible` executable. Default is `ansible`, - which means $PATH is searched for the executable. -* `ansible.ansible.useFullyQualifiedCollectionNames`: Toggles use of - fully qualified collection names (FQCN) when inserting a module name. - Disabling it will only use FQCNs when necessary, that is when the collection - is not configured for the task. Default is `true`. -* `ansible.ansibleLint.arguments`: Optional command line arguments to be - appended to `ansible-lint` invocation. See `ansible-lint` documentation. Default - is empty string. -* `ansible.ansibleLint.enabled`: Enables/disables use of `ansible-lint`. default +- `ansible.ansible.path`: Path to the `ansible` executable. Default is + `ansible`, which means $PATH is searched for the executable. +- `ansible.ansible.useFullyQualifiedCollectionNames`: Toggles use of fully + qualified collection names (FQCN) when inserting a module name. Disabling it + will only use FQCNs when necessary, that is when the collection is not + configured for the task. Default is `true`. +- `ansible.ansibleLint.arguments`: Optional command line arguments to be + appended to `ansible-lint` invocation. See `ansible-lint` documentation. + Default is empty string. +- `ansible.ansibleLint.enabled`: Enables/disables use of `ansible-lint`. default is `true`. -* `ansible.ansibleLint.path`: Path to the `ansible-lint` executable. Default is +- `ansible.ansibleLint.path`: Path to the `ansible-lint` executable. Default is `ansible-lint`, which means $PATH is searched for the executable. -* `ansible.ansibleNavigator.path`: Path to the `ansible-navigator` executable. -* `ansible.ansiblePlaybook.path`: Path to the `ansible-playbook` executable. -* `ansible.executionEnvironment.containerEngine`: The container engine to be used - while running with execution environment. Valid values are `auto`, `podman` and - `docker`. For `auto` it will look for `podman` then `docker`. Default is `auto`. -* `ansible.executionEnvironment.enabled`: Enable or disable the use of an - execution environment. Default is `false`. -* `ansible.executionEnvironment.image`: Specify the name of the execution +- `ansible.ansibleNavigator.path`: Path to the `ansible-navigator` executable. +- `ansible.ansiblePlaybook.path`: Path to the `ansible-playbook` executable. +- `ansible.executionEnvironment.containerEngine`: The container engine to be + used while running with execution environment. Valid values are `auto`, + `podman` and `docker`. For `auto` it will look for `podman` then `docker`. + Default is `auto`. +- `ansible.executionEnvironment.enabled`: Enable or disable the use of an + execution environment. Default is `false`. +- `ansible.executionEnvironment.image`: Specify the name of the execution environment image. Default is `quay.io/ansible/creator-ee:latest`. -* `ansible.executionEnvironment.pullPolicy`: Specify the image pull policy. +- `ansible.executionEnvironment.pullPolicy`: Specify the image pull policy. Valid values are `always`, `missing`, `never` and `tag`. Setting `always` will - always pull the image when extension is activated or reloaded. Default is `missing`. - Setting `missing` will pull if not locally available. Setting `never` will - never pull the image and setting tag will always pull if the image tag is - 'latest', otherwise pull if not locally available. -* `ansible.python.interpreterPath`: Path to the `python`/`python3` executable. + always pull the image when extension is activated or reloaded. Default is + `missing`. Setting `missing` will pull if not locally available. Setting + `never` will never pull the image and setting tag will always pull if the + image tag is 'latest', otherwise pull if not locally available. +- `ansible.python.interpreterPath`: Path to the `python`/`python3` executable. This setting may be used to make the extension work with `ansible` and `ansible-lint` installations in a Python virtual environment. Default is empty string. -* `ansible.python.activationScript`: Path to a custom `activate` script, which +- `ansible.python.activationScript`: Path to a custom `activate` script, which will be used instead of the setting above to run in a Python virtual environment. Default is empty string. @@ -140,29 +141,30 @@ For details on setting up development environment and debugging refer to the [development document]. [development document]: -https://github.com/ansible/ansible-language-server/blob/main/docs/development.md + https://github.com/ansible/ansible-language-server/blob/main/docs/development.md ## Requirements -* [Ansible 2.9+](https://docs.ansible.com/ansible/latest/index.html) -* [Ansible Lint](https://ansible-lint.readthedocs.io/en/latest/) (required, +- [Ansible 2.9+](https://docs.ansible.com/ansible/latest/index.html) +- [Ansible Lint](https://ansible-lint.readthedocs.io/en/latest/) (required, unless you disable linter support) -* [yamllint](https://yamllint.readthedocs.io/en/stable/) (optional) +- [yamllint](https://yamllint.readthedocs.io/en/stable/) (optional) For Windows users, this extension works perfectly well with extensions such as `Remote - WSL` and `Remote - Containers`. > If you have any other extension providing language support for Ansible, you - might need to uninstall it first. +> might need to uninstall it first. ## Known limitations -* The shorthand syntax for module options (key=value pairs) is not supported. -* Only Jinja *expressions* inside Ansible YAML files are supported. In order to +- The shorthand syntax for module options (key=value pairs) is not supported. +- Only Jinja _expressions_ inside Ansible YAML files are supported. In order to have syntax highlighting of Jinja template files, you'll need to install other extension. -* Jinja *blocks* (inside Ansible YAML files) are not supported yet. +- Jinja _blocks_ (inside Ansible YAML files) are not supported yet. ## Credit -Based on the good work done by [Tomasz Maciążek](https://github.com/tomaciazek/vscode-ansible) +Based on the good work done by +[Tomasz Maciążek](https://github.com/tomaciazek/vscode-ansible) From 1267b325563832f7c2e2f74f44d354c91a0231f2 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sat, 5 Feb 2022 14:23:40 +0000 Subject: [PATCH 247/558] ci: use prettier on github md files (#216) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/CODE_OF_CONDUCT.md | 3 +-- .github/CONTRIBUTING.md | 4 ++-- .github/SECURITY.md | 13 ++++++------- .prettierignore | 1 - 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index f47324924..1524975eb 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -2,5 +2,4 @@ Please see the official [Ansible Community Code of Conduct][coc]. -[coc]: -https://docs.ansible.com/ansible/latest/community/code_of_conduct.html +[coc]: https://docs.ansible.com/ansible/latest/community/code_of_conduct.html diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 9691061b0..673ad5808 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -9,8 +9,8 @@ In order to contribute, you'll need to: 3. Send it to us as a PR. -4. Iterate on your PR, incorporating the requested improvements - and participating in the discussions. +4. Iterate on your PR, incorporating the requested improvements and + participating in the discussions. Prerequisites: diff --git a/.github/SECURITY.md b/.github/SECURITY.md index a90459f2e..32985fe01 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -2,15 +2,14 @@ ## Supported Versions -Ansible Language Server does not backport security fixes only applying -them to the main branch and making the next patch release in the stream. +Ansible Language Server does not backport security fixes only applying them to +the main branch and making the next patch release in the stream. ## Reporting a Vulnerability -We encourage responsible disclosure practices for security -vulnerabilities. Please read our [policies for reporting bugs][bug -reports policy] if you want to report a security issue that might affect -Ansible. +We encourage responsible disclosure practices for security vulnerabilities. +Please read our [policies for reporting bugs][bug reports policy] if you want to +report a security issue that might affect Ansible. [bug reports policy]: -https://docs.ansible.com/ansible/devel/community/reporting_bugs_and_features.html#reporting-a-bug + https://docs.ansible.com/ansible/devel/community/reporting_bugs_and_features.html#reporting-a-bug diff --git a/.prettierignore b/.prettierignore index 04aaf9282..53e3fd620 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,6 +10,5 @@ syntaxes/external/jinja.tmLanguage.json # Files temporary excluded during prettier adoption: docs/**/*.md -.github/**/*.md *.yaml *.yml From 0e9a7d58b3c8c11d61f6ace50328ac0ad4ffaeb9 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 8 Feb 2022 09:45:55 +0000 Subject: [PATCH 248/558] Improve runCommand tests (#220) --- test/utils/runCommand.test.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/utils/runCommand.test.ts b/test/utils/runCommand.test.ts index 881633581..3c18c8a08 100644 --- a/test/utils/runCommand.test.ts +++ b/test/utils/runCommand.test.ts @@ -1,8 +1,8 @@ import { CommandRunner } from '../../src/utils/commandRunner'; -import { expect } from 'chai'; +import { AssertionError, expect } from 'chai'; import { WorkspaceManager } from '../../src/services/workspaceManager'; import { createConnection } from 'vscode-languageserver/node'; -import { getDoc, isWindows } from './helper'; +import { getDoc } from './helper'; describe('commandRunner', () => { const tests = [ @@ -48,15 +48,15 @@ describe('commandRunner', () => { args[0], args.slice(1).join(' ') ); - expect(proc.stdout).contains(stdout); - expect(proc.stderr).contains(stderr); + expect(proc.stdout, proc.stderr).contains(stdout); + expect(proc.stderr, proc.stdout).contains(stderr); } catch (e) { - if (!isWindows()) { - // ansible does not work on Windows, so we can't test it - expect(e.code).equals(rc); - expect(e.stderr).contains(stderr); - expect(e.stderr).contains(stdout); + if (e instanceof AssertionError) { + throw e; } + expect(e.code, e).equals(rc); + expect(e.stdout, e).contains(stdout); + expect(e.stderr, e).contains(stderr); } }); }); From 782ea16e893e5ecd64ba10845ec6da151bb41f77 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 8 Feb 2022 16:13:35 +0000 Subject: [PATCH 249/558] Reformat changelog fragments with prettier (#224) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .prettierignore | 3 +- docs/changelog-fragments.d/161.misc.md | 4 +- docs/changelog-fragments.d/164.doc.md | 6 +- docs/changelog-fragments.d/165.doc.md | 4 +- docs/changelog-fragments.d/169.misc.md | 4 +- docs/changelog-fragments.d/README.md | 81 ++++++++++++-------------- 6 files changed, 47 insertions(+), 55 deletions(-) diff --git a/.prettierignore b/.prettierignore index 53e3fd620..e8ebefbd4 100644 --- a/.prettierignore +++ b/.prettierignore @@ -9,6 +9,7 @@ jinja-language-configuration.json syntaxes/external/jinja.tmLanguage.json # Files temporary excluded during prettier adoption: -docs/**/*.md +docs/*.md +docs/contributing/*.md *.yaml *.yml diff --git a/docs/changelog-fragments.d/161.misc.md b/docs/changelog-fragments.d/161.misc.md index 090f756af..3ce615fbf 100644 --- a/docs/changelog-fragments.d/161.misc.md +++ b/docs/changelog-fragments.d/161.misc.md @@ -1,4 +1,4 @@ -Added [Sphinx][sphinx] documentation generator and set up the CI -infrastructure for it -- by {user}`webknjaz` +Added [Sphinx][sphinx] documentation generator and set up the CI infrastructure +for it -- by {user}`webknjaz` [sphinx]: https://github.com/twisted/towncrier diff --git a/docs/changelog-fragments.d/164.doc.md b/docs/changelog-fragments.d/164.doc.md index 99b4e2c86..3b0f5ec89 100644 --- a/docs/changelog-fragments.d/164.doc.md +++ b/docs/changelog-fragments.d/164.doc.md @@ -1,5 +1,5 @@ -Dropped the brackets from the changelog titles for the release sections. -We now don't strictly follow the release notes format suggested by -[Keep a Changelog][keepachangelog] -- by {user}`webknjaz` +Dropped the brackets from the changelog titles for the release sections. We now +don't strictly follow the release notes format suggested by [Keep a +Changelog][keepachangelog] -- by {user}`webknjaz` [keepachangelog]: https://keepachangelog.com/en/1.1.0/ diff --git a/docs/changelog-fragments.d/165.doc.md b/docs/changelog-fragments.d/165.doc.md index 45f41c119..31305861a 100644 --- a/docs/changelog-fragments.d/165.doc.md +++ b/docs/changelog-fragments.d/165.doc.md @@ -1,2 +1,2 @@ -Replaced all the credits in the changelog with a dedicated Sphinx role --- by {user}`webknjaz` +Replaced all the credits in the changelog with a dedicated Sphinx role -- by +{user}`webknjaz` diff --git a/docs/changelog-fragments.d/169.misc.md b/docs/changelog-fragments.d/169.misc.md index 3454cf5ab..0863acd7f 100644 --- a/docs/changelog-fragments.d/169.misc.md +++ b/docs/changelog-fragments.d/169.misc.md @@ -1,2 +1,2 @@ -Fixed a half-baked change in the GitHub Actions CI/CD workflow job -that is used in branch protection -- by {user}`webknjaz` +Fixed a half-baked change in the GitHub Actions CI/CD workflow job that is used +in branch protection -- by {user}`webknjaz` diff --git a/docs/changelog-fragments.d/README.md b/docs/changelog-fragments.d/README.md index 68aa8f252..e9f7cf056 100644 --- a/docs/changelog-fragments.d/README.md +++ b/docs/changelog-fragments.d/README.md @@ -4,48 +4,41 @@ ## Adding change notes with your PRs -It is very important to maintain a log for news of how -updating to the new version of the software will affect -end-users. This is why we enforce collection of the change -fragment files in pull requests as per -[Towncrier philosophy][towncrier-philosophy]. - -The idea is that when somebody makes a change, they must record -the bits that would affect end-users only including information -that would be useful to them. Then, when the maintainers publish -a new release, they'll automatically use these records to compose -a change log for the respective version. It is important to -understand that including unnecessary low-level implementation -related details generates noise that is not particularly useful -to the end-users most of the time. And so such details should be -recorded in the Git history rather than a changelog. +It is very important to maintain a log for news of how updating to the new +version of the software will affect end-users. This is why we enforce collection +of the change fragment files in pull requests as per [Towncrier +philosophy][towncrier-philosophy]. + +The idea is that when somebody makes a change, they must record the bits that +would affect end-users only including information that would be useful to them. +Then, when the maintainers publish a new release, they'll automatically use +these records to compose a change log for the respective version. It is +important to understand that including unnecessary low-level implementation +related details generates noise that is not particularly useful to the end-users +most of the time. And so such details should be recorded in the Git history +rather than a changelog. ## Alright! So how do I add a news fragment? To submit a change note about your PR, add a text file into the -`docs/changelog-fragments.d/` folder. It should contain an -explanation of what applying this PR will change in the way -end-users interact with the project. One sentence is usually -enough but feel free to add as many details as you feel necessary -for the users to understand what it means. - -**Use the past tense** for the text in your fragment because, -combined with others, it will be a part of the "news digest" -telling the readers **what changed** in a specific version of -the library *since the previous version*. You should also use -[MyST Markdown][myst-md] syntax for highlighting code (inline or block), -linking parts of the docs or external sites. -At the end, sign your change note by adding ```-- by -{user}`github-username``` (replace `github-username` with -your own!). - -Finally, name your file following the convention that Towncrier -understands: it should start with the number of an issue or a -PR followed by a dot, then add a patch type, like `feature`, -`bugfix`, `doc`, `misc` etc., and add `.md` as a suffix. If you -need to add more than one fragment, you may add an optional -sequence number (delimited with another period) between the type -and the suffix. +`docs/changelog-fragments.d/` folder. It should contain an explanation of what +applying this PR will change in the way end-users interact with the project. One +sentence is usually enough but feel free to add as many details as you feel +necessary for the users to understand what it means. + +**Use the past tense** for the text in your fragment because, combined with +others, it will be a part of the "news digest" telling the readers **what +changed** in a specific version of the library _since the previous version_. You +should also use [MyST Markdown][myst-md] syntax for highlighting code (inline or +block), linking parts of the docs or external sites. At the end, sign your +change note by adding `` -- by {user}`github-username `` (replace +`github-username` with your own!). + +Finally, name your file following the convention that Towncrier understands: it +should start with the number of an issue or a PR followed by a dot, then add a +patch type, like `feature`, `bugfix`, `doc`, `misc` etc., and add `.md` as a +suffix. If you need to add more than one fragment, you may add an optional +sequence number (delimited with another period) between the type and the suffix. ## Examples for changelog entries adding to your Pull Requests @@ -58,15 +51,14 @@ Added a `{user}` role to Sphinx config -- by {user}`webknjaz` File `docs/changelog-fragments.d/116.feature.md`: ```md -Added support for nested module options (suboptions) --- by {user}`tomaciazek` +Added support for nested module options (suboptions) -- by {user}`tomaciazek` ``` File `docs/changelog-fragments.d/140.bugfix.md`: ```md -Implemented opening standalone Ansible files that have no workspace -associated -- by {user}`ganeshrn` +Implemented opening standalone Ansible files that have no workspace associated +-- by {user}`ganeshrn` ``` ```{tip} @@ -74,7 +66,6 @@ See `pyproject.toml` for all available categories (`tool.towncrier.type`). ``` -[myst-md]: -https://myst-parser.rtfd.io/en/latest/syntax/syntax.html +[myst-md]: https://myst-parser.rtfd.io/en/latest/syntax/syntax.html [towncrier-philosophy]: -https://towncrier.rtfd.io/en/actual-freaking-docs/#philosophy + https://towncrier.rtfd.io/en/actual-freaking-docs/#philosophy From f97e3713d42beb642ef32078e13d38a09d306537 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 8 Feb 2022 16:25:52 +0000 Subject: [PATCH 250/558] test: add pretest checks (#221) Fail fast with meaningful message if tests are run on a system that does not have prerequisites. --- test/index.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 test/index.ts diff --git a/test/index.ts b/test/index.ts new file mode 100644 index 000000000..927d71b19 --- /dev/null +++ b/test/index.ts @@ -0,0 +1,25 @@ +// This file is loaded automatically by mocha during the test run. +import { isWindows } from './utils/helper'; +import { execSync } from 'child_process'; + +// Error code returned if we cannot even start testing: +const PRETEST_ERR_RC = 2; + +// isWindows returns false under WSL +if (isWindows()) { + console.error( + 'ERROR: This project does not support pure Windows, try under WSL2.' + ); + process.exit(PRETEST_ERR_RC); +} + +const command = 'ansible-lint --version'; +try { + const result = execSync(command); + console.info(`Detected: ${result}`); +} catch (e) { + console.error(`error: test requisites not met, '${command}' returned ${e}`); + process.exit(PRETEST_ERR_RC); +} + +// TODO: add checks for podman and docker that include their ability to pull and run containers using volume mounts. From aa3b425ca2350d630039aa13fb655add7730e9a3 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 8 Feb 2022 17:01:45 +0000 Subject: [PATCH 251/558] chore: pre-commit autoupdate (#219) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/igorshubovych/markdownlint-cli: v0.30.0 → v0.31.0](https://github.com/igorshubovych/markdownlint-cli/compare/v0.30.0...v0.31.0) - [github.com/pre-commit/mirrors-eslint: v8.6.0 → v8.8.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.6.0...v8.8.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index dab8a895e..086fc47e9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -83,7 +83,7 @@ repos: hooks: - id: prettier - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.30.0 + rev: v0.31.0 hooks: - id: markdownlint exclude: > @@ -91,7 +91,7 @@ repos: docs/changelog-fragments\.d/\d+\.\w+\.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.6.0 + rev: v8.8.0 hooks: - id: eslint args: From 3cde4d629a156a46f755ced8b876cd66bb6dc9d8 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Tue, 8 Feb 2022 18:06:17 +0100 Subject: [PATCH 252/558] Separate wrapped issue/PR list @ changelog entries --- docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 b/docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 index b231e9b21..bde68ed6e 100644 --- a/docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 +++ b/docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 @@ -13,7 +13,8 @@ {% for text, values in sections[section][category].items() %} * {{ text }} - ({{ values|join(',\n ') }}) + + ({{- values | join(', ') | wordwrap(72 - 4) -}}) {% endfor -%} {% else %} From 5068bbb83cb7d89e743a529456a2da00fe5b6daa Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Thu, 10 Feb 2022 14:17:33 +0530 Subject: [PATCH 253/558] Refactor unit testcases (#228) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../ansible_collections/org_1/coll_1/galaxy.yml | 9 +++++++++ .../org_1/coll_1/roles/role_1}/defaults/main.yml | 0 .../org_1/coll_1/roles/role_1}/meta/main.yml | 0 .../org_1/coll_1/roles/role_1}/tasks/main.yml | 0 .../org_1/coll_1/roles/role_1}/templates/motd.j2 | 0 test/{data => fixtures}/hover/roles.yml | 2 +- test/{data => fixtures}/hover/tasks.yml | 0 test/{data => fixtures}/yaml/ancestryBuilder.yml | 0 .../yaml/getDeclaredCollections.yml | 0 test/{data => fixtures}/yaml/isBlockParam.yml | 0 test/{data => fixtures}/yaml/isPlayParam.yml | 0 test/{data => fixtures}/yaml/isRoleParam.yml | 0 test/{data => fixtures}/yaml/isTaskParam.yml | 0 test/{data => fixtures}/yaml/test.json | 0 test/{utils => }/helper.ts | 16 +++++++++++++--- test/index.ts | 2 +- .../hoverProvider.test.ts} | 10 ++++++++-- test/utils/runCommand.test.ts | 2 +- test/utils/yaml.test.ts | 2 +- 19 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml rename test/{data/hover/test_role => fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1}/defaults/main.yml (100%) rename test/{data/hover/test_role => fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1}/meta/main.yml (100%) rename test/{data/hover/test_role => fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1}/tasks/main.yml (100%) rename test/{data/hover/test_role => fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1}/templates/motd.j2 (100%) rename test/{data => fixtures}/hover/roles.yml (76%) rename test/{data => fixtures}/hover/tasks.yml (100%) rename test/{data => fixtures}/yaml/ancestryBuilder.yml (100%) rename test/{data => fixtures}/yaml/getDeclaredCollections.yml (100%) rename test/{data => fixtures}/yaml/isBlockParam.yml (100%) rename test/{data => fixtures}/yaml/isPlayParam.yml (100%) rename test/{data => fixtures}/yaml/isRoleParam.yml (100%) rename test/{data => fixtures}/yaml/isTaskParam.yml (100%) rename test/{data => fixtures}/yaml/test.json (100%) rename test/{utils => }/helper.ts (67%) rename test/{testScripts/providers/hoverTest.test.ts => providers/hoverProvider.test.ts} (96%) diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml new file mode 100644 index 000000000..432400cae --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml @@ -0,0 +1,9 @@ +--- +authors: + - "Ansible devtools team" +description: "test collection" +license_file: LICENSE +name: coll_1 +namespace: testorg +readme: README.md +version: 1.0.0 diff --git a/test/data/hover/test_role/defaults/main.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/defaults/main.yml similarity index 100% rename from test/data/hover/test_role/defaults/main.yml rename to test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/defaults/main.yml diff --git a/test/data/hover/test_role/meta/main.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/meta/main.yml similarity index 100% rename from test/data/hover/test_role/meta/main.yml rename to test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/meta/main.yml diff --git a/test/data/hover/test_role/tasks/main.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/tasks/main.yml similarity index 100% rename from test/data/hover/test_role/tasks/main.yml rename to test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/tasks/main.yml diff --git a/test/data/hover/test_role/templates/motd.j2 b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/templates/motd.j2 similarity index 100% rename from test/data/hover/test_role/templates/motd.j2 rename to test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/templates/motd.j2 diff --git a/test/data/hover/roles.yml b/test/fixtures/hover/roles.yml similarity index 76% rename from test/data/hover/roles.yml rename to test/fixtures/hover/roles.yml index 8e286e000..59adca568 100644 --- a/test/data/hover/roles.yml +++ b/test/fixtures/hover/roles.yml @@ -1,7 +1,7 @@ --- - hosts: localhost roles: - - role: test_role + - role: org_1.coll_1.role_1 test_manager: admin@test.com become: True tags: typeA diff --git a/test/data/hover/tasks.yml b/test/fixtures/hover/tasks.yml similarity index 100% rename from test/data/hover/tasks.yml rename to test/fixtures/hover/tasks.yml diff --git a/test/data/yaml/ancestryBuilder.yml b/test/fixtures/yaml/ancestryBuilder.yml similarity index 100% rename from test/data/yaml/ancestryBuilder.yml rename to test/fixtures/yaml/ancestryBuilder.yml diff --git a/test/data/yaml/getDeclaredCollections.yml b/test/fixtures/yaml/getDeclaredCollections.yml similarity index 100% rename from test/data/yaml/getDeclaredCollections.yml rename to test/fixtures/yaml/getDeclaredCollections.yml diff --git a/test/data/yaml/isBlockParam.yml b/test/fixtures/yaml/isBlockParam.yml similarity index 100% rename from test/data/yaml/isBlockParam.yml rename to test/fixtures/yaml/isBlockParam.yml diff --git a/test/data/yaml/isPlayParam.yml b/test/fixtures/yaml/isPlayParam.yml similarity index 100% rename from test/data/yaml/isPlayParam.yml rename to test/fixtures/yaml/isPlayParam.yml diff --git a/test/data/yaml/isRoleParam.yml b/test/fixtures/yaml/isRoleParam.yml similarity index 100% rename from test/data/yaml/isRoleParam.yml rename to test/fixtures/yaml/isRoleParam.yml diff --git a/test/data/yaml/isTaskParam.yml b/test/fixtures/yaml/isTaskParam.yml similarity index 100% rename from test/data/yaml/isTaskParam.yml rename to test/fixtures/yaml/isTaskParam.yml diff --git a/test/data/yaml/test.json b/test/fixtures/yaml/test.json similarity index 100% rename from test/data/yaml/test.json rename to test/fixtures/yaml/test.json diff --git a/test/utils/helper.ts b/test/helper.ts similarity index 67% rename from test/utils/helper.ts rename to test/helper.ts index 41efbf05b..db7cdf5be 100644 --- a/test/utils/helper.ts +++ b/test/helper.ts @@ -1,14 +1,24 @@ import { TextDocument } from 'vscode-languageserver-textdocument'; import * as path from 'path'; import { promises as fs } from 'fs'; -import { WorkspaceManager } from '../../src/services/workspaceManager'; +import { WorkspaceManager } from '../src/services/workspaceManager'; import { createConnection } from 'vscode-languageserver/node'; +const FIXTURES_BASE_PATH = path.join('test', 'fixtures'); + +export function setFixtureAnsibleCollectionPathEnv(): void { + process.env.ANSIBLE_COLLECTIONS_PATHS = path.resolve( + FIXTURES_BASE_PATH, + 'common', + 'collections' + ); +} + export async function getDoc(filename: string): Promise { - const file = await fs.readFile(path.resolve('test', 'data', filename), { + const file = await fs.readFile(path.resolve(FIXTURES_BASE_PATH, filename), { encoding: 'utf8', }); - const docUri = path.resolve('test', 'data', filename).toString(); + const docUri = path.resolve(FIXTURES_BASE_PATH, filename).toString(); return TextDocument.create(docUri, 'ansible', 1, file); } diff --git a/test/index.ts b/test/index.ts index 927d71b19..0be7e241b 100644 --- a/test/index.ts +++ b/test/index.ts @@ -1,5 +1,5 @@ // This file is loaded automatically by mocha during the test run. -import { isWindows } from './utils/helper'; +import { isWindows } from './helper'; import { execSync } from 'child_process'; // Error code returned if we cannot even start testing: diff --git a/test/testScripts/providers/hoverTest.test.ts b/test/providers/hoverProvider.test.ts similarity index 96% rename from test/testScripts/providers/hoverTest.test.ts rename to test/providers/hoverProvider.test.ts index aeadfe4a8..83cfe778d 100644 --- a/test/testScripts/providers/hoverTest.test.ts +++ b/test/providers/hoverProvider.test.ts @@ -1,8 +1,14 @@ import { expect } from 'chai'; -import { createTestWorkspaceManager, getDoc } from '../../utils/helper'; -import { doHover } from '../../../src/providers/hoverProvider'; +import { + createTestWorkspaceManager, + getDoc, + setFixtureAnsibleCollectionPathEnv, +} from '../helper'; +import { doHover } from '../../src/providers/hoverProvider'; import { Position } from 'vscode-languageserver'; +setFixtureAnsibleCollectionPathEnv(); + describe('doHover()', () => { const workspaceManager = createTestWorkspaceManager(); diff --git a/test/utils/runCommand.test.ts b/test/utils/runCommand.test.ts index 3c18c8a08..5a664b829 100644 --- a/test/utils/runCommand.test.ts +++ b/test/utils/runCommand.test.ts @@ -2,7 +2,7 @@ import { CommandRunner } from '../../src/utils/commandRunner'; import { AssertionError, expect } from 'chai'; import { WorkspaceManager } from '../../src/services/workspaceManager'; import { createConnection } from 'vscode-languageserver/node'; -import { getDoc } from './helper'; +import { getDoc } from '../helper'; describe('commandRunner', () => { const tests = [ diff --git a/test/utils/yaml.test.ts b/test/utils/yaml.test.ts index 01f5a0c03..ac5b0550e 100644 --- a/test/utils/yaml.test.ts +++ b/test/utils/yaml.test.ts @@ -10,7 +10,7 @@ import { isTaskParam, parseAllDocuments, } from '../../src/utils/yaml'; -import { getDoc, isWindows } from './helper'; +import { getDoc, isWindows } from '../helper'; async function getPathInFile( yamlFile: string, From ab3c95e2d294e689244fc9e088c6d00cfefb54e5 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 10 Feb 2022 08:51:08 +0000 Subject: [PATCH 254/558] ci: use prettier on docs md files (#217) * ci: use prettier on docs md files Follow-Up: #215 Increases the scope of markdown files prettier will clean-up to include the docs directory and includes changes to those files made by prettier. * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .prettierignore | 2 -- docs/contributing/code_of_conduct.md | 2 ++ docs/contributing/guidelines.md | 25 +++++++++-------- docs/contributing/security.md | 2 ++ docs/development.md | 42 +++++++++++++++------------- 5 files changed, 39 insertions(+), 34 deletions(-) diff --git a/.prettierignore b/.prettierignore index e8ebefbd4..a625356d9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -9,7 +9,5 @@ jinja-language-configuration.json syntaxes/external/jinja.tmLanguage.json # Files temporary excluded during prettier adoption: -docs/*.md -docs/contributing/*.md *.yaml *.yml diff --git a/docs/contributing/code_of_conduct.md b/docs/contributing/code_of_conduct.md index 821994c34..f0451d312 100644 --- a/docs/contributing/code_of_conduct.md +++ b/docs/contributing/code_of_conduct.md @@ -1,3 +1,5 @@ + ```{include} ../../.github/CODE_OF_CONDUCT.md + ``` diff --git a/docs/contributing/guidelines.md b/docs/contributing/guidelines.md index a32ac6876..a0826d0b6 100644 --- a/docs/contributing/guidelines.md +++ b/docs/contributing/guidelines.md @@ -1,4 +1,5 @@ + ```{spelling} de facto @@ -9,12 +10,13 @@ Towncrier ``` ```{include} ../../.github/CONTRIBUTING.md + ``` # Contributing docs -We use [Sphinx][sphinx] to generate our docs website. You can trigger -the process locally by executing: +We use [Sphinx][sphinx] to generate our docs website. You can trigger the +process locally by executing: ```shell-session $ tox -e build-docs @@ -38,21 +40,20 @@ _______________________________________________________ summary ________________ congratulations :) ``` -It is also integrated with [Read The Docs][rtd] that builds and -publishes each commit to the main branch and generates live -docs previews for each pull request. +It is also integrated with [Read The Docs][rtd] that builds and publishes each +commit to the main branch and generates live docs previews for each pull +request. -The sources of the [Sphinx][sphinx] documents use reStructuredText as a -de-facto standard. But in order to make contributing docs more -beginner-friendly, we have integrated [MyST parser][myst] allowing us -to also accept new documents written in an extended version of -Markdown that supports using Sphinx directives and roles. -{ref}`Read the docs ` to learn more on how -to use it. +The sources of the [Sphinx][sphinx] documents use reStructuredText as a de-facto +standard. But in order to make contributing docs more beginner-friendly, we have +integrated [MyST parser][myst] allowing us to also accept new documents written +in an extended version of Markdown that supports using Sphinx directives and +roles. {ref}`Read the docs ` to learn more on how to use it. [myst]: https://pypi.org/project/myst-parser/ [rtd]: https://readthedocs.org [sphinx]: https://www.sphinx-doc.org ```{include} ../changelog-fragments.d/README.md + ``` diff --git a/docs/contributing/security.md b/docs/contributing/security.md index 91bd9bf9a..23683d984 100644 --- a/docs/contributing/security.md +++ b/docs/contributing/security.md @@ -1,7 +1,9 @@ + ```{spelling} backport ``` ```{include} ../../.github/SECURITY.md + ``` diff --git a/docs/development.md b/docs/development.md index 9555d1667..45ef25b99 100644 --- a/docs/development.md +++ b/docs/development.md @@ -4,8 +4,8 @@ A demo of the setup can be found [on youtube](https://youtu.be/LsvWsX7Mbo8). -It is recommended to work on the forked copy of this repository from your -github account to raise pull requests. +It is recommended to work on the forked copy of this repository from your github +account to raise pull requests. ```bash git clone git@github.com:/ansible-language-server.git @@ -17,17 +17,17 @@ git checkout -b upstream/main ## Running & debugging the language-server with VS Code -* Install dependent packages within ansible-language-server root directory +- Install dependent packages within ansible-language-server root directory ```console ansible-language-server$ npm install . ``` -This will install the dependent modules under `node_modules` folder within -the current directory. +This will install the dependent modules under `node_modules` folder within the +current directory. -* Clone the repository containing the VS Code extension code into the - `vscode-ansible` directory *next to* the root directory of this repository. +- Clone the repository containing the VS Code extension code into the + `vscode-ansible` directory _next to_ the root directory of this repository. ```bash cd .. @@ -35,31 +35,32 @@ git clone git@github.com:ansible/vscode-ansible.git cd vscode-ansible ``` -* Open a new VS Code window and add folder to workspace +- Open a new VS Code window and add folder to workspace `File -> Add folder to workspace` and add `vscode-ansible` and `ansible-language-server` folders to the workspace -* Once the language server and `vscode-ansible/` directory is prepared, - compile both client and server using command +- Once the language server and `vscode-ansible/` directory is prepared, compile + both client and server using command ```bash npm run compile:withserver ``` -* In the Run and debug window select **Client + Server (source)** configuration - and start debugging `Run -> Start Debugging`. This will open up a new VS Code window - which is the `Extension development Host` window. +- In the Run and debug window select **Client + Server (source)** configuration + and start debugging `Run -> Start Debugging`. This will open up a new VS Code + window which is the `Extension development Host` window. -* In the `Extension development Host` window add a new folder that has ansible files. +- In the `Extension development Host` window add a new folder that has ansible + files. -* You can set the ansible-language-server settings by adding +- You can set the ansible-language-server settings by adding `.vscode/settings.json` file under the root folder. Example settings: ```json { - "ansible.python.interpreterPath": "", - "ansible.ansible.path": "", - "ansibleServer.trace.server": "verbose" + "ansible.python.interpreterPath": "", + "ansible.ansible.path": "", + "ansibleServer.trace.server": "verbose" } ``` @@ -73,8 +74,9 @@ modes. ### Building server locally 1. Install prerequisites: - * latest [Visual Studio Code](https://code.visualstudio.com/) - * [Node.js](https://nodejs.org/) v12.0.0 or higher + + - latest [Visual Studio Code](https://code.visualstudio.com/) + - [Node.js](https://nodejs.org/) v12.0.0 or higher 2. Fork and clone this repository From a5d8396a0a063556f6d0cf5524374a8a865ac353 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Wed, 23 Feb 2022 18:39:39 +0530 Subject: [PATCH 255/558] export yaml validation function to use it in the test cases (#231) --- src/providers/validationProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts index db9347c64..74e287e29 100644 --- a/src/providers/validationProvider.ts +++ b/src/providers/validationProvider.ts @@ -93,7 +93,7 @@ export async function doValidate( return diagnosticsByFile; } -function getYamlValidation(textDocument: TextDocument): Diagnostic[] { +export function getYamlValidation(textDocument: TextDocument): Diagnostic[] { const diagnostics: Diagnostic[] = []; const yDocuments = parseAllDocuments(textDocument.getText(), { prettyErrors: false, From bc26b15ea3c9937db9a45591c33a87f4ea1ed1d0 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Fri, 25 Feb 2022 16:48:17 +0530 Subject: [PATCH 256/558] Fix npm script name change in docs (#234) --- docs/development.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development.md b/docs/development.md index 45ef25b99..1fc7422b5 100644 --- a/docs/development.md +++ b/docs/development.md @@ -43,7 +43,7 @@ cd vscode-ansible both client and server using command ```bash -npm run compile:withserver +npm run compile-withserver ``` - In the Run and debug window select **Client + Server (source)** configuration From 15b341960c451d5c5870fffa22c1c69cdc419d6e Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 1 Mar 2022 10:57:04 +0000 Subject: [PATCH 257/558] Emit notification about unsupported platforms (#195) --- docs/changelog-fragments.d/195.feature.md | 1 + src/server.ts | 8 ++++++++ src/utils/misc.ts | 11 +++++++++++ 3 files changed, 20 insertions(+) create mode 100644 docs/changelog-fragments.d/195.feature.md diff --git a/docs/changelog-fragments.d/195.feature.md b/docs/changelog-fragments.d/195.feature.md new file mode 100644 index 000000000..69c4f2d67 --- /dev/null +++ b/docs/changelog-fragments.d/195.feature.md @@ -0,0 +1 @@ +Emit notification about unsupported platforms -- by {user}`ssbarnea` diff --git a/src/server.ts b/src/server.ts index 41a179506..3e6d52e06 100644 --- a/src/server.ts +++ b/src/server.ts @@ -8,11 +8,19 @@ import { TextDocuments, } from 'vscode-languageserver/node'; import { AnsibleLanguageService } from './ansibleLanguageService'; +import { getUnsupportedError } from './utils/misc'; // Create a connection for the server, using Node's IPC as a transport. // Also include all preview / proposed LSP features. const connection: Connection = createConnection(ProposedFeatures.all); +// Detect if we are running in an unsupported environment and pass the +// error message to the client if so. +const errorMessage = getUnsupportedError(); +if (errorMessage) { + connection.sendNotification('ansible/errorMessage', errorMessage); +} + const docChangeHandlers: NotificationHandler[] = []; connection.onDidChangeTextDocument((params) => { diff --git a/src/utils/misc.ts b/src/utils/misc.ts index 88ee9b48e..7804d76bd 100644 --- a/src/utils/misc.ts +++ b/src/utils/misc.ts @@ -79,3 +79,14 @@ export function withInterpreter( return [command, undefined]; } } + +/** + * Returns errors messages when LS is run on unsupported platform, or undefined + * when all is fine. + */ +export function getUnsupportedError(): string | undefined { + // win32 applies to x64 arch too, is the platform name + if (process.platform === 'win32') { + return 'Ansible Language Server can only run inside WSL on Windows. Refer to vscode documentation for more details.'; + } +} From 7af78c03b8b3e47118ed3469559e009a8d6e6bdf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 1 Mar 2022 15:27:29 +0000 Subject: [PATCH 258/558] Bump version to v0.5.0 (#235) * Generate a changelog entry for v0.5.0 * Release 0.5.0 from GitHub Actions CI/CD * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- CHANGELOG.md | 46 +++++++++++++++++++++++ docs/changelog-fragments.d/158.misc.md | 4 -- docs/changelog-fragments.d/161.misc.md | 4 -- docs/changelog-fragments.d/163.misc.md | 2 - docs/changelog-fragments.d/164.doc.md | 5 --- docs/changelog-fragments.d/165.doc.md | 2 - docs/changelog-fragments.d/169.misc.md | 2 - docs/changelog-fragments.d/195.feature.md | 1 - docs/changelog-fragments.d/198.misc.md | 1 - docs/changelog-fragments.d/201.misc.md | 1 - docs/changelog-fragments.d/202.misc.md | 1 - docs/changelog-fragments.d/204.misc.md | 1 - docs/changelog-fragments.d/208.misc.md | 1 - docs/changelog-fragments.d/210.misc.md | 1 - package-lock.json | 4 +- package.json | 2 +- 16 files changed, 49 insertions(+), 29 deletions(-) delete mode 100644 docs/changelog-fragments.d/158.misc.md delete mode 100644 docs/changelog-fragments.d/161.misc.md delete mode 100644 docs/changelog-fragments.d/163.misc.md delete mode 100644 docs/changelog-fragments.d/164.doc.md delete mode 100644 docs/changelog-fragments.d/165.doc.md delete mode 100644 docs/changelog-fragments.d/169.misc.md delete mode 100644 docs/changelog-fragments.d/195.feature.md delete mode 120000 docs/changelog-fragments.d/198.misc.md delete mode 120000 docs/changelog-fragments.d/201.misc.md delete mode 120000 docs/changelog-fragments.d/202.misc.md delete mode 120000 docs/changelog-fragments.d/204.misc.md delete mode 120000 docs/changelog-fragments.d/208.misc.md delete mode 120000 docs/changelog-fragments.d/210.misc.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 66e409ef8..77d90d889 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,52 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag +## v0.5.0 (2022-03-01) + +### Features + +- Emit notification about unsupported platforms -- by {user}`ssbarnea` + + ({issue}`195`) + +### Documentation + +- Dropped the brackets from the changelog titles for the release sections. We + now don't strictly follow the release notes format suggested by [Keep a + Changelog][keepachangelog] -- by {user}`webknjaz` + + [keepachangelog]: https://keepachangelog.com/en/1.1.0/ '{issue}`164`' + +- Replaced all the credits in the changelog with a dedicated Sphinx role -- by + {user}`webknjaz` + + ({issue}`165`) + +### Miscellaneous + +- Added changelog fragment management infrastructure using + [Towncrier][towncrier] -- by {user}`webknjaz` + + [towncrier]: + https://github.com/twisted/towncrier + '{issue}`158`, {issue}`198`, {issue}`201`, {issue}`202`, +{issue}`204`, {issue}`208`, {issue}`210`' + +- Added [Sphinx][sphinx] documentation generator and set up the CI + infrastructure for it -- by {user}`webknjaz` + + [sphinx]: https://github.com/twisted/towncrier '{issue}`161`' + +- Added docs and references to the Community Code Of Conduct, security and + contributing guides, and a pull request template -- by {user}`webknjaz` + + ({issue}`163`) + +- Fixed a half-baked change in the GitHub Actions CI/CD workflow job that is + used in branch protection -- by {user}`webknjaz` + + ({issue}`169`) + ## v0.4.0 (2021-11-25) ### Bugfixes diff --git a/docs/changelog-fragments.d/158.misc.md b/docs/changelog-fragments.d/158.misc.md deleted file mode 100644 index 89e51b6b5..000000000 --- a/docs/changelog-fragments.d/158.misc.md +++ /dev/null @@ -1,4 +0,0 @@ -Added changelog fragment management infrastructure using [Towncrier][towncrier] --- by {user}`webknjaz` - -[towncrier]: https://github.com/twisted/towncrier diff --git a/docs/changelog-fragments.d/161.misc.md b/docs/changelog-fragments.d/161.misc.md deleted file mode 100644 index 3ce615fbf..000000000 --- a/docs/changelog-fragments.d/161.misc.md +++ /dev/null @@ -1,4 +0,0 @@ -Added [Sphinx][sphinx] documentation generator and set up the CI infrastructure -for it -- by {user}`webknjaz` - -[sphinx]: https://github.com/twisted/towncrier diff --git a/docs/changelog-fragments.d/163.misc.md b/docs/changelog-fragments.d/163.misc.md deleted file mode 100644 index 157273106..000000000 --- a/docs/changelog-fragments.d/163.misc.md +++ /dev/null @@ -1,2 +0,0 @@ -Added docs and references to the Community Code Of Conduct, security and -contributing guides, and a pull request template -- by {user}`webknjaz` diff --git a/docs/changelog-fragments.d/164.doc.md b/docs/changelog-fragments.d/164.doc.md deleted file mode 100644 index 3b0f5ec89..000000000 --- a/docs/changelog-fragments.d/164.doc.md +++ /dev/null @@ -1,5 +0,0 @@ -Dropped the brackets from the changelog titles for the release sections. We now -don't strictly follow the release notes format suggested by [Keep a -Changelog][keepachangelog] -- by {user}`webknjaz` - -[keepachangelog]: https://keepachangelog.com/en/1.1.0/ diff --git a/docs/changelog-fragments.d/165.doc.md b/docs/changelog-fragments.d/165.doc.md deleted file mode 100644 index 31305861a..000000000 --- a/docs/changelog-fragments.d/165.doc.md +++ /dev/null @@ -1,2 +0,0 @@ -Replaced all the credits in the changelog with a dedicated Sphinx role -- by -{user}`webknjaz` diff --git a/docs/changelog-fragments.d/169.misc.md b/docs/changelog-fragments.d/169.misc.md deleted file mode 100644 index 0863acd7f..000000000 --- a/docs/changelog-fragments.d/169.misc.md +++ /dev/null @@ -1,2 +0,0 @@ -Fixed a half-baked change in the GitHub Actions CI/CD workflow job that is used -in branch protection -- by {user}`webknjaz` diff --git a/docs/changelog-fragments.d/195.feature.md b/docs/changelog-fragments.d/195.feature.md deleted file mode 100644 index 69c4f2d67..000000000 --- a/docs/changelog-fragments.d/195.feature.md +++ /dev/null @@ -1 +0,0 @@ -Emit notification about unsupported platforms -- by {user}`ssbarnea` diff --git a/docs/changelog-fragments.d/198.misc.md b/docs/changelog-fragments.d/198.misc.md deleted file mode 120000 index 93f1fe791..000000000 --- a/docs/changelog-fragments.d/198.misc.md +++ /dev/null @@ -1 +0,0 @@ -158.misc.md \ No newline at end of file diff --git a/docs/changelog-fragments.d/201.misc.md b/docs/changelog-fragments.d/201.misc.md deleted file mode 120000 index 93f1fe791..000000000 --- a/docs/changelog-fragments.d/201.misc.md +++ /dev/null @@ -1 +0,0 @@ -158.misc.md \ No newline at end of file diff --git a/docs/changelog-fragments.d/202.misc.md b/docs/changelog-fragments.d/202.misc.md deleted file mode 120000 index 93f1fe791..000000000 --- a/docs/changelog-fragments.d/202.misc.md +++ /dev/null @@ -1 +0,0 @@ -158.misc.md \ No newline at end of file diff --git a/docs/changelog-fragments.d/204.misc.md b/docs/changelog-fragments.d/204.misc.md deleted file mode 120000 index 93f1fe791..000000000 --- a/docs/changelog-fragments.d/204.misc.md +++ /dev/null @@ -1 +0,0 @@ -158.misc.md \ No newline at end of file diff --git a/docs/changelog-fragments.d/208.misc.md b/docs/changelog-fragments.d/208.misc.md deleted file mode 120000 index 93f1fe791..000000000 --- a/docs/changelog-fragments.d/208.misc.md +++ /dev/null @@ -1 +0,0 @@ -158.misc.md \ No newline at end of file diff --git a/docs/changelog-fragments.d/210.misc.md b/docs/changelog-fragments.d/210.misc.md deleted file mode 120000 index 93f1fe791..000000000 --- a/docs/changelog-fragments.d/210.misc.md +++ /dev/null @@ -1 +0,0 @@ -158.misc.md \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 5c070d9d1..e904798e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.4.0", + "version": "0.5.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.4.0", + "version": "0.5.0", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.14", diff --git a/package.json b/package.json index 33f5c5207..1658fa9c9 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.4.0", + "version": "0.5.0", "contributors": [ { "name": "Tomasz Maciążek", From fd79046730a077da58b80fce84816128a791cd01 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 1 Mar 2022 15:37:27 +0000 Subject: [PATCH 259/558] Ensure ansible output is parseable (#236) --- docs/changelog-fragments.d/236.bugfix.md | 4 ++++ src/utils/misc.ts | 16 +++++++--------- test/utils/runCommand.test.ts | 5 +++++ 3 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 docs/changelog-fragments.d/236.bugfix.md diff --git a/docs/changelog-fragments.d/236.bugfix.md b/docs/changelog-fragments.d/236.bugfix.md new file mode 100644 index 000000000..c8f507182 --- /dev/null +++ b/docs/changelog-fragments.d/236.bugfix.md @@ -0,0 +1,4 @@ +Ensure that Ansible calls do not return ANSI escapes, so we can parse them. +[vscode-ansible#373] -- by {user}`ssbarnea` + +[vscode-ansible#373]: https://github.com/ansible/vscode-ansible/issues/373 diff --git a/src/utils/misc.ts b/src/utils/misc.ts index 7804d76bd..9bc02a4ef 100644 --- a/src/utils/misc.ts +++ b/src/utils/misc.ts @@ -50,6 +50,10 @@ export function withInterpreter( ): [string, NodeJS.ProcessEnv | undefined] { let command = `${executable} ${args}`; // base case + const newEnv = Object.assign({}, process.env, { + ANSIBLE_FORCE_COLOR: '0', // ensure output is parseable (no ANSI) + }); + if (activationScript) { command = `bash -c 'source ${activationScript} && ${executable} ${args}'`; return [command, undefined]; @@ -67,17 +71,11 @@ export function withInterpreter( } // emulating virtual environment activation script - const envOverride = { - VIRTUAL_ENV: virtualEnv, - PATH: `${pathEntry}:${process.env.PATH}`, - }; - const newEnv = Object.assign({}, process.env, envOverride); + newEnv['VIRTUAL_ENV'] = virtualEnv; + newEnv['PATH'] = `${pathEntry}:${process.env.PATH}`; delete newEnv.PYTHONHOME; - - return [command, newEnv]; - } else { - return [command, undefined]; } + return [command, newEnv]; } /** diff --git a/test/utils/runCommand.test.ts b/test/utils/runCommand.test.ts index 5a664b829..308a6be79 100644 --- a/test/utils/runCommand.test.ts +++ b/test/utils/runCommand.test.ts @@ -35,6 +35,11 @@ describe('commandRunner', () => { tests.forEach(({ args, rc, stdout, stderr }) => { it(`call ${args.join(' ')}`, async function () { this.timeout(10000); + + // try to enforce ansible to output ANSI in order to check if we are + // still able to disable it at runtime in order to keep output parseable. + process.env.ANSIBLE_FORCE_COLOR = '1'; + process.argv.push('--node-ipc'); const connection = createConnection(); const workspaceManager = new WorkspaceManager(connection); From 9be174a01463cb77be66e07e40eafd3f6687e76d Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Tue, 1 Mar 2022 21:52:05 +0530 Subject: [PATCH 260/558] Use `ls` instead of `find` for EE ansible docs (#190) * Use `ls` instead of `find` for EE ansible docs * Currently `find` command is used to check if ansible plugins are present for a given candidate path. * In some cases the `findutils` might not be bundled within `execution-environments`. * Hence instead `find` command the PR updates logic to use `ls` command to figure out if ansible plugin files are present in a given path * add changelog fragment * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/changelog-fragments.d/190.bugfix.md | 2 ++ src/services/executionEnvironment.ts | 11 ++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 docs/changelog-fragments.d/190.bugfix.md diff --git a/docs/changelog-fragments.d/190.bugfix.md b/docs/changelog-fragments.d/190.bugfix.md new file mode 100644 index 000000000..c2a080024 --- /dev/null +++ b/docs/changelog-fragments.d/190.bugfix.md @@ -0,0 +1,2 @@ +Used ls instead of find for execution-environments while check if ansible +plugins are present in a given path -- by {user}`ganeshrn` diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index a452ba03e..78ed0d5a1 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -145,7 +145,7 @@ export class ExecutionEnvironment { hostCacheBasePath, containerName, ansibleConfig.collections_paths, - '**/ansible_collections' + 'ansible_collections' ); const builtin_plugin_locations: string[] = []; @@ -165,7 +165,7 @@ export class ExecutionEnvironment { hostCacheBasePath, containerName, builtin_plugin_locations, - '*' + '/' ); // Copy builtin modules @@ -173,7 +173,7 @@ export class ExecutionEnvironment { hostCacheBasePath, containerName, ansibleConfig.module_locations, - '**/modules' + '/' ); } // plugin cache successfully created @@ -276,7 +276,8 @@ export class ExecutionEnvironment { searchPath: string, pluginFolderPath: string ): boolean { - const command = `${this._container_engine} exec ${containerName} find ${searchPath} -path '${pluginFolderPath}'`; + const completeSearchPath = path.join(searchPath, pluginFolderPath); + const command = `${this._container_engine} exec ${containerName} ls ${completeSearchPath}`; try { this.connection.console.info(`Executing command ${command}`); const result = child_process @@ -284,7 +285,7 @@ export class ExecutionEnvironment { encoding: 'utf-8', }) .trim(); - return result !== ''; + return result.trim() !== ''; } catch (error) { this.connection.console.error(error); return false; From ff2358f5a3f2bd2e3ee7cb8dbd675a4e78265cd7 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 1 Mar 2022 17:05:47 +0000 Subject: [PATCH 261/558] Bump test dependencies (#239) --- package-lock.json | 5139 +++++++++++++++++++++++++++++++++++++++------ package.json | 42 +- 2 files changed, 4507 insertions(+), 674 deletions(-) diff --git a/package-lock.json b/package-lock.json index e904798e2..9fd2e822f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,53 +9,45 @@ "version": "0.5.0", "license": "MIT", "dependencies": { - "@flatten-js/interval-tree": "^1.0.14", + "@flatten-js/interval-tree": "^1.0.18", "globby": "^11.0.4", - "ini": "^1.3.8", + "ini": "^2.0.0", "lodash": "^4.17.21", "uuid": "^8.3.2", "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^3.0.2", + "vscode-languageserver-textdocument": "^1.0.4", + "vscode-uri": "^3.0.3", "yaml": "^1.10.2" }, "bin": { "ansible-language-server": "bin/ansible-language-server" }, "devDependencies": { - "@types/chai": "^4.2.21", - "@types/ini": "^1.3.30", - "@types/lodash": "^4.14.171", - "@types/mocha": "^8.2.3", - "@types/node": "^14.17.5", - "@types/uuid": "^8.3.1", - "@types/vscode": "^1.56.0", - "@typescript-eslint/eslint-plugin": "^4.28.3", - "@typescript-eslint/parser": "^4.28.3", - "chai": "^4.3.4", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.3.0", - "mocha": "^9.2.0", + "@types/chai": "^4.3.0", + "@types/ini": "^1.3.31", + "@types/lodash": "^4.14.179", + "@types/mocha": "^9.1.0", + "@types/node": "^17.0.21", + "@types/uuid": "^8.3.4", + "@types/vscode": "^1.64.0", + "@typescript-eslint/eslint-plugin": "^5.13.0", + "@typescript-eslint/parser": "^5.13.0", + "chai": "^4.3.6", + "eslint": "^8.10.0", + "eslint-config-prettier": "^8.4.0", + "mocha": "^9.2.1", + "npm-check-updates": "^12.5.0", "nyc": "^15.1.0", - "prettier": "^2.4.1", + "prettier": "^2.5.1", "rimraf": "^3.0.2", - "ts-node": "^9.1.1", - "typescript": "^4.3.5" + "ts-node": "^10.5.0", + "typescript": "^4.6.2" }, "engines": { "node": ">=12.0", "npm": ">=7.11.2" } }, - "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, "node_modules/@babel/compat-data": { "version": "7.16.4", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", @@ -516,38 +508,92 @@ "node": ">=6.9.0" } }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", "dev": true, "dependencies": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", + "debug": "^4.3.2", + "espree": "^9.3.1", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "node_modules/@flatten-js/interval-tree": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz", - "integrity": "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg==" + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.18.tgz", + "integrity": "sha512-o72sZErW0Y1C82Cg7nk82ojJ/22EtmKyp5I3eNqgcOKFp/VCzetATYYjJIqOBBaR7FQ/MFj/ZpsmP38mL4TkYA==" + }, + "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/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" }, @@ -556,9 +602,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { @@ -688,16 +734,168 @@ "node": ">= 8" } }, + "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/git": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.0.tgz", + "integrity": "sha512-xfSBJ+KBMZWWqRHFbEgIaXG/LtELHrQZMJ72Gkb3yWdHysu/7+VGOs8ME0c3td7QNQX57Ggo3kYL6ylcd70/kA==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^7.3.1", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.4.0.tgz", + "integrity": "sha512-YOfuyWa/Ee+PXbDm40j9WXyJrzQUynVbgn4Km643UYcWNcrSfRkKL0WaiUcxcIbkXcVTgNpDqSnPXntWXT75cw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "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==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true + }, + "node_modules/@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "dependencies": { + "infer-owner": "^1.0.4" + } + }, + "node_modules/@npmcli/run-script": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.0.tgz", + "integrity": "sha512-jIdmUepw+kVP2WEE/+XrBIvrSF5miDutdGBrQ8May6uHVAvpAb0m3NRHcJ0lKWbQ1BxsRFsmTrjkdY99qTTVIw==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^1.0.3", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^8.4.1", + "read-package-json-fast": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "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/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "node_modules/@types/chai": { - "version": "4.2.22", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz", - "integrity": "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", "dev": true }, "node_modules/@types/ini": { - "version": "1.3.30", - "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz", - "integrity": "sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ==", + "version": "1.3.31", + "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.31.tgz", + "integrity": "sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w==", "dev": true }, "node_modules/@types/json-schema": { @@ -707,59 +905,61 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.174", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.174.tgz", - "integrity": "sha512-KMBLT6+g9qrGXpDt7ohjWPUD34WA/jasrtjTEHStF0NPdEwJ1N9SZ+4GaMVDeuk/y0+X5j9xFm6mNiXS7UoaLQ==", + "version": "4.14.179", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz", + "integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==", "dev": true }, "node_modules/@types/mocha": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", "dev": true }, "node_modules/@types/node": { - "version": "14.17.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.19.tgz", - "integrity": "sha512-jjYI6NkyfXykucU6ELEoT64QyKOdvaA6enOqKtP4xUsGY0X0ZUZz29fUmrTRo+7v7c6TgDu82q3GHHaCEkqZwA==", + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", "dev": true }, "node_modules/@types/uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", "dev": true }, "node_modules/@types/vscode": { - "version": "1.60.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.60.0.tgz", - "integrity": "sha512-wZt3VTmzYrgZ0l/3QmEbCq4KAJ71K3/hmMQ/nfpv84oH8e81KKwPEoQ5v8dNCxfHFVJ1JabHKmCvqdYOoVm1Ow==", + "version": "1.64.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.64.0.tgz", + "integrity": "sha512-bSlAWz5WtcSL3cO9tAT/KpEH9rv5OBnm93OIIFwdCshaAiqr2bp1AUyEwW9MWeCvZBHEXc3V0fTYVdVyzDNwHA==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz", - "integrity": "sha512-w63SCQ4bIwWN/+3FxzpnWrDjQRXVEGiTt9tJTRptRXeFvdZc/wLiz3FQUwNQ2CVoRGI6KUWMNUj/pk63noUfcA==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.13.0.tgz", + "integrity": "sha512-vLktb2Uec81fxm/cfz2Hd6QaWOs8qdmVAZXLdOBX6JFJDhf6oDZpMzZ4/LZ6SFM/5DgDcxIMIvy3F+O9yZBuiQ==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "4.31.2", - "@typescript-eslint/scope-manager": "4.31.2", - "debug": "^4.3.1", + "@typescript-eslint/scope-manager": "5.13.0", + "@typescript-eslint/type-utils": "5.13.0", + "@typescript-eslint/utils": "5.13.0", + "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -767,81 +967,83 @@ } } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.2.tgz", - "integrity": "sha512-3tm2T4nyA970yQ6R3JZV9l0yilE2FedYg8dcXrTar34zC9r6JB7WyBQbpIVongKPlhEMjhQ01qkwrzWy38Bk1Q==", + "node_modules/@typescript-eslint/parser": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.13.0.tgz", + "integrity": "sha512-GdrU4GvBE29tm2RqWOM0P5QfCtgCyN4hXICj/X9ibKED16136l9ZpoJvCL5pSKtmJzA+NRDzQ312wWMejCVVfg==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.31.2", - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/typescript-estree": "4.31.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@typescript-eslint/scope-manager": "5.13.0", + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/typescript-estree": "5.13.0", + "debug": "^4.3.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/parser": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.2.tgz", - "integrity": "sha512-EcdO0E7M/sv23S/rLvenHkb58l3XhuSZzKf6DBvLgHqOYdL6YFMYVtreGFWirxaU2mS1GYDby3Lyxco7X5+Vjw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.13.0.tgz", + "integrity": "sha512-T4N8UvKYDSfVYdmJq7g2IPJYCRzwtp74KyDZytkR4OL3NRupvswvmJQJ4CX5tDSurW2cvCc1Ia1qM7d0jpa7IA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "4.31.2", - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/typescript-estree": "4.31.2", - "debug": "^4.3.1" + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/visitor-keys": "5.13.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.2.tgz", - "integrity": "sha512-2JGwudpFoR/3Czq6mPpE8zBPYdHWFGL6lUNIGolbKQeSNv4EAiHaR5GVDQaLA0FwgcdcMtRk+SBJbFGL7+La5w==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.13.0.tgz", + "integrity": "sha512-/nz7qFizaBM1SuqAKb7GLkcNn2buRdDgZraXlkhz+vUGiN1NZ9LzkA595tHHeduAiS2MsHqMNhE2zNzGdw43Yg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/visitor-keys": "4.31.2" + "@typescript-eslint/utils": "5.13.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@typescript-eslint/types": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.2.tgz", - "integrity": "sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.13.0.tgz", + "integrity": "sha512-LmE/KO6DUy0nFY/OoQU0XelnmDt+V8lPQhh8MOVa7Y5k2gGRd6U9Kp3wAjhB4OHg57tUO0nOnwYQhRRyEAyOyg==", "dev": true, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -849,21 +1051,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.2.tgz", - "integrity": "sha512-ieBq8U9at6PvaC7/Z6oe8D3czeW5d//Fo1xkF/s9394VR0bg/UaMYPdARiWyKX+lLEjY3w/FNZJxitMsiWv+wA==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.13.0.tgz", + "integrity": "sha512-Q9cQow0DeLjnp5DuEDjLZ6JIkwGx3oYZe+BfcNuw/POhtpcxMTy18Icl6BJqTSd+3ftsrfuVb7mNHRZf7xiaNA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/visitor-keys": "4.31.2", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/visitor-keys": "5.13.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -875,17 +1077,41 @@ } } }, + "node_modules/@typescript-eslint/utils": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.13.0.tgz", + "integrity": "sha512-+9oHlPWYNl6AwwoEt5TQryEHwiKRVjz7Vk6kaBeD3/kwHE5YqTGHtm/JZY8Bo9ITOeKutFaXnBlMgSATMJALUQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.13.0", + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/typescript-estree": "5.13.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.2.tgz", - "integrity": "sha512-PrBId7EQq2Nibns7dd/ch6S6/M4/iwLM9McbgeEbCXfxdwRUNxJ4UNreJ6Gh3fI2GNKNrWnQxKL7oCPmngKBug==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.13.0.tgz", + "integrity": "sha512-HLKEAS/qA1V7d9EzcpLFykTePmOQqOFim8oCvhY3pZgQ8Hi38hYpHd9e5GN6nQBFQNecNhws5wkS9Y5XIO0s/g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.31.2", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.13.0", + "eslint-visitor-keys": "^3.0.0" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -898,10 +1124,16 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "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/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -919,6 +1151,41 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "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", @@ -948,6 +1215,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -1006,12 +1282,31 @@ "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/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, + "node_modules/are-we-there-yet": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", + "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -1044,15 +1339,6 @@ "node": "*" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1068,6 +1354,28 @@ "node": ">=8" } }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1124,29 +1432,121 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "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": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" + "@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": ">=8" + "node": ">= 10" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/cacache/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": ">=6" - } + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } }, "node_modules/camelcase": { "version": "6.2.0", @@ -1171,15 +1571,16 @@ } }, "node_modules/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", + "loupe": "^2.3.1", "pathval": "^1.1.1", "type-detect": "^4.0.5" }, @@ -1239,6 +1640,27 @@ "fsevents": "~2.3.2" } }, + "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/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cint": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/cint/-/cint-8.2.1.tgz", + "integrity": "sha1-cDhrG0jidz0NYxZqVa/5TvRFahI=", + "dev": true + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -1248,6 +1670,30 @@ "node": ">=6" } }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", + "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", + "dev": true, + "dependencies": { + "colors": "1.0.3" + }, + "engines": { + "node": ">= 0.2.0" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -1259,6 +1705,15 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1277,6 +1732,33 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "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/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", + "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -1289,6 +1771,29 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -1324,6 +1829,15 @@ "node": ">= 8" } }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -1353,6 +1867,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -1365,6 +1891,15 @@ "node": ">=0.12" } }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -1383,6 +1918,27 @@ "node": ">=8" } }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -1415,6 +1971,24 @@ "node": ">=6.0.0" } }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, "node_modules/electron-to-chromium": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.0.tgz", @@ -1427,18 +2001,40 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "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": { - "ansi-colors": "^4.1.1" - }, + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "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": ">=8.6" + "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/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", @@ -1454,6 +2050,15 @@ "node": ">=6" } }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1467,49 +2072,44 @@ } }, "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", "dev": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "@eslint/eslintrc": "^1.2.0", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", + "glob-parent": "^6.0.1", "globals": "^13.6.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -1517,16 +2117,16 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", + "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -1566,7 +2166,7 @@ "eslint": ">=5" } }, - "node_modules/eslint-visitor-keys": { + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", @@ -1575,51 +2175,79 @@ "node": ">=10" } }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=4.0" } }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "is-glob": "^4.0.3" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=10.13.0" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/espree": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/esprima": { @@ -1669,9 +2297,9 @@ } }, "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -1702,9 +2330,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -1713,7 +2341,7 @@ "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, "node_modules/fast-json-stable-stringify": { @@ -1728,6 +2356,12 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "node_modules/fast-memoize": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", + "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==", + "dev": true + }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -1736,6 +2370,12 @@ "reusify": "^1.0.4" } }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -1833,6 +2473,15 @@ "node": ">=8.0.0" } }, + "node_modules/fp-and-or": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fp-and-or/-/fp-and-or-0.1.3.tgz", + "integrity": "sha512-wJaE62fLaB3jCYvY2ZHjZvmKK2iiLiiehX38rz5QZxtdN8fVPJDeZUiVvJrHStdTc+23LHlyZuSEKgFc0pxi2g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -1853,6 +2502,18 @@ } ] }, + "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", @@ -1873,12 +2534,38 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "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/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/gauge": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz", + "integrity": "sha512-aSPRm2CvA9R8QyU5eXMFPd+cYkyxLsXHd2l5/FOH2V/eml//M04G6KZOmTap07O1PvEwNcl2NndyLfK8g3QrKA==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "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" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -1915,12 +2602,36 @@ "node": ">=8.0.0" } }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true, - "dependencies": { + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", @@ -1946,10 +2657,25 @@ "node": ">= 6" } }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1962,15 +2688,15 @@ } }, "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { @@ -1980,12 +2706,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, "engines": { - "node": ">= 4" + "node": ">=8.6" } }, "node_modules/graceful-fs": { @@ -2003,6 +2743,18 @@ "node": ">=4.x" } }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2012,6 +2764,21 @@ "node": ">=8" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -2046,21 +2813,99 @@ "he": "bin/he" } }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "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/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "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": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "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/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "engines": { "node": ">= 4" } }, + "node_modules/ignore-walk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", + "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2077,6 +2922,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -2095,6 +2949,12 @@ "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", @@ -2112,9 +2972,18 @@ "dev": true }, "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true }, "node_modules/is-binary-path": { "version": "2.1.0", @@ -2128,6 +2997,30 @@ "node": ">=8" } }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2146,9 +3039,9 @@ } }, "node_modules/is-glob": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.2.tgz", - "integrity": "sha512-ZZTOjRcDjuAAAv2cTBQP/lL59ZTArx77+7UzHdWW/XB1mrfp7DEaVpKmZ0XIzx+M7AxfhKcqV+nMetUQmFifwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -2156,6 +3049,40 @@ "node": ">=0.10.0" } }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2164,6 +3091,24 @@ "node": ">=0.12.0" } }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -2212,6 +3157,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2332,6 +3283,12 @@ "node": ">=8" } }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "dev": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2363,6 +3320,27 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-parse-helpfulerror": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", + "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", + "dev": true, + "dependencies": { + "jju": "^1.1.0" + } + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2390,6 +3368,51 @@ "node": ">=6" } }, + "node_modules/jsonlines": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsonlines/-/jsonlines-0.1.1.tgz", + "integrity": "sha1-T80kbcXQ44aRkHxEqwAveC0dlMw=", + "dev": true + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2403,48 +3426,114 @@ "node": ">= 0.8.0" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/libnpmconfig": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", + "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "figgy-pudding": "^3.5.1", + "find-up": "^3.0.0", + "ini": "^1.3.5" + } + }, + "node_modules/libnpmconfig/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "node_modules/libnpmconfig/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "node_modules/libnpmconfig/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "node_modules/libnpmconfig/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/libnpmconfig/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/libnpmconfig/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "node_modules/log-symbols": { @@ -2463,6 +3552,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2505,6 +3612,33 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "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/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2525,6 +3659,15 @@ "node": ">=8.6" } }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -2543,10 +3686,122 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "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-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "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/mocha": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", - "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz", + "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", @@ -2649,6 +3904,39 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": 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-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -2667,6 +3955,36 @@ "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, + "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/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2676,6 +3994,261 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-check-updates": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.0.tgz", + "integrity": "sha512-nrryXO9IZdJsAIXo8LdtllrsGiTDE4IMAod7fl1jd5C38tOdZZG/crNNii4IkctxltQRmK/ziZwsMDTlhszZXg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "cint": "^8.2.1", + "cli-table": "^0.3.11", + "commander": "^9.0.0", + "fast-memoize": "^2.5.2", + "find-up": "5.0.0", + "fp-and-or": "^0.1.3", + "get-stdin": "^8.0.0", + "globby": "^11.0.4", + "hosted-git-info": "^4.1.0", + "json-parse-helpfulerror": "^1.0.3", + "jsonlines": "^0.1.1", + "libnpmconfig": "^1.2.1", + "lodash": "^4.17.21", + "minimatch": "^5.0.0", + "p-map": "^4.0.0", + "pacote": "^13.0.2", + "parse-github-url": "^1.0.2", + "progress": "^2.0.3", + "prompts": "^2.4.2", + "rc-config-loader": "^4.0.0", + "remote-git-tags": "^3.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "semver-utils": "^1.1.4", + "source-map-support": "^0.5.21", + "spawn-please": "^1.0.0", + "update-notifier": "^5.1.0", + "yaml": "^1.10.2" + }, + "bin": { + "ncu": "build/src/bin/cli.js", + "npm-check-updates": "build/src/bin/cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-check-updates/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm-check-updates/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-check-updates/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/npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-package-arg": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.0.tgz", + "integrity": "sha512-yhzXxeor+Zfhe5MGwPdDumz6HtNlj2pMekWB95IX3CC6uDNgde0oPKHDCLDPoJqQfd0HqAWt+y4Hs5m7CK1+9Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.1.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/npm-packlist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", + "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^4.0.1", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.0.tgz", + "integrity": "sha512-njM1AcdioFaKd0JSGtLO09YA1WRwctjGQJbnHGmKS+u+uwP8oFvtZtOQWPYdxrnY5eJud3wn8OpH4sEIx6+GEQ==", + "dev": true, + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/npm-registry-fetch": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.0.0.tgz", + "integrity": "sha512-MmiMuV9DU5gRuAU0jia952Qq+E4h7ZoUaeltCXivhClcqfOVKqNLZEQsRUOb6a8WQY+um8x97JcUuaWFoPoBBw==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^10.0.2", + "minipass": "^3.1.6", + "minipass-fetch": "^1.4.1", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.0", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.4.0.tgz", + "integrity": "sha512-YOfuyWa/Ee+PXbDm40j9WXyJrzQUynVbgn4Km643UYcWNcrSfRkKL0WaiUcxcIbkXcVTgNpDqSnPXntWXT75cw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.0.3.tgz", + "integrity": "sha512-CzarPHynPpHjhF5in/YapnO44rSZeYX5VCMfdXa99+gLwpbfFLh20CWa6dP/taV9Net9PWJwXNKtp/4ZTCQnag==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.0", + "cacache": "^15.3.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.3.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.4.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.1.1", + "ssri": "^8.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/npmlog": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", + "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, "node_modules/nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -2888,6 +4461,15 @@ "node": ">= 0.8.0" } }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -2939,19 +4521,78 @@ "node": ">=6" } }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/pacote": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.0.3.tgz", + "integrity": "sha512-8thQ06YoO01O1k5rvSpHS/XPJZucw2DPiiT1jI+ys8QaTN6ifAyxfyoABHBa8nIt/4wPdzly4GEPqshctHFoYA==", + "dev": true, + "dependencies": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^3.0.0", + "cacache": "^15.3.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^3.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^4.1.1", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/parent-module": { @@ -2966,6 +4607,18 @@ "node": ">=6" } }, + "node_modules/parse-github-url": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", + "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==", + "dev": true, + "bin": { + "parse-github-url": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3100,10 +4753,19 @@ "node": ">= 0.8.0" } }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -3112,6 +4774,15 @@ "node": ">=10.13.0" } }, + "node_modules/proc-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.0.tgz", + "integrity": "sha512-I/35MfCX2H8jBUhKN8JB8nmqvQo/nKdrBodBY7L3RhDSPPyvOHwLYNmPuhwuJq7a7C3vgFKWGQM+ecPStcvOHA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, "node_modules/process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", @@ -3133,6 +4804,48 @@ "node": ">=0.4.0" } }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "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/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -3142,6 +4855,18 @@ "node": ">=6" } }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3170,6 +4895,108 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc-config-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.0.0.tgz", + "integrity": "sha512-//LRTblJEcqbmmro1GCmZ39qZXD+JqzuD8Y5/IZU3Dhp3A1Yr0Xn68ks8MQ6qKfKvYCWDveUmRDKDA40c+sCXw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "js-yaml": "^4.0.0", + "json5": "^2.1.2", + "require-from-string": "^2.0.2" + } + }, + "node_modules/rc-config-loader/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/rc-config-loader/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-package-json": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.1.tgz", + "integrity": "sha512-P82sbZJ3ldDrWCOSKxJT0r/CXMWR0OR3KRh55SgKo3p91GSIEEC32v3lSHAvO/UcH3/IoL7uqhOFBduAnwdldw==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3194,6 +5021,30 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -3206,6 +5057,15 @@ "node": ">=4" } }, + "node_modules/remote-git-tags": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remote-git-tags/-/remote-git-tags-3.0.0.tgz", + "integrity": "sha512-C9hAO4eoEsX+OXA4rla66pXZQ+TLQ8T9dttgQj18yuKlPMTVkIkdYXvlMC55IuUsIkV6DpmQYi10JKFLaU+l7w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -3239,6 +5099,24 @@ "node": ">=4" } }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -3305,6 +5183,13 @@ } ] }, + "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, + "optional": true + }, "node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -3320,6 +5205,33 @@ "node": ">=10" } }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-utils": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/semver-utils/-/semver-utils-1.1.4.tgz", + "integrity": "sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA==", + "dev": true + }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -3357,9 +5269,15 @@ } }, "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "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/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, "node_modules/slash": { @@ -3370,21 +5288,42 @@ "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "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/socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">=10" + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "engines": { + "node": ">= 10" } }, "node_modules/source-map": { @@ -3397,15 +5336,24 @@ } }, "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, + "node_modules/spawn-please": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-1.0.0.tgz", + "integrity": "sha512-Kz33ip6NRNKuyTRo3aDWyWxeGeM0ORDO552Fs6E1nj4pLWPkl37SrRtTnq+MEopVaqgmaO6bAvVS+v64BJ5M/A==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", @@ -3423,12 +5371,65 @@ "node": ">=8" } }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "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.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -3488,45 +5489,23 @@ "node": ">=8" } }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "node": ">= 10" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -3556,6 +5535,15 @@ "node": ">=4" } }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3568,29 +5556,45 @@ } }, "node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "dependencies": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.5.0.tgz", + "integrity": "sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "source-map-support": "^0.5.17", + "v8-compile-cache-lib": "^3.0.0", "yn": "3.1.1" }, "bin": { "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" }, - "engines": { - "node": ">=10.0.0" - }, "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, "node_modules/ts-node/node_modules/diff": { @@ -3666,9 +5670,9 @@ } }, "node_modules/typescript": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", - "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -3678,6 +5682,64 @@ "node": ">=4.2.0" } }, + "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/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -3687,6 +5749,24 @@ "punycode": "^2.1.0" } }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -3701,6 +5781,31 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", + "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, "node_modules/vscode-jsonrpc": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", @@ -3730,9 +5835,9 @@ } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", - "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz", + "integrity": "sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==" }, "node_modules/vscode-languageserver-types": { "version": "3.16.0", @@ -3740,9 +5845,9 @@ "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, "node_modules/vscode-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.2.tgz", - "integrity": "sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", + "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==" }, "node_modules/which": { "version": "2.0.2", @@ -3765,6 +5870,27 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "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/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -3815,6 +5941,15 @@ "typedarray-to-buffer": "^3.1.5" } }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -3903,15 +6038,6 @@ } }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, "@babel/compat-data": { "version": "7.16.4", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", @@ -4269,43 +6395,87 @@ "to-fast-properties": "^2.0.0" } }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", + "debug": "^4.3.2", + "espree": "^9.3.1", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + } } }, "@flatten-js/interval-tree": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.14.tgz", - "integrity": "sha512-u7RFCMnrQb/fC6gIEXtfuqXFXN+yRDM+NSKZe0JECVyiDPTPqYDgkzvRHIX1NS1BxgK6BlZRLtPukAHoDJgGWg==" + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.18.tgz", + "integrity": "sha512-o72sZErW0Y1C82Cg7nk82ojJ/22EtmKyp5I3eNqgcOKFp/VCzetATYYjJIqOBBaR7FQ/MFj/ZpsmP38mL4TkYA==" + }, + "@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 }, "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.0", + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" } }, "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "@istanbuljs/load-nyc-config": { @@ -4401,16 +6571,143 @@ "fastq": "^1.6.0" } }, + "@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, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.0.tgz", + "integrity": "sha512-xfSBJ+KBMZWWqRHFbEgIaXG/LtELHrQZMJ72Gkb3yWdHysu/7+VGOs8ME0c3td7QNQX57Ggo3kYL6ylcd70/kA==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^7.3.1", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.4.0.tgz", + "integrity": "sha512-YOfuyWa/Ee+PXbDm40j9WXyJrzQUynVbgn4Km643UYcWNcrSfRkKL0WaiUcxcIbkXcVTgNpDqSnPXntWXT75cw==", + "dev": true + } + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@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==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.0.tgz", + "integrity": "sha512-jIdmUepw+kVP2WEE/+XrBIvrSF5miDutdGBrQ8May6uHVAvpAb0m3NRHcJ0lKWbQ1BxsRFsmTrjkdY99qTTVIw==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.3", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^8.4.1", + "read-package-json-fast": "^2.0.3" + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@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 + }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "@types/chai": { - "version": "4.2.22", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz", - "integrity": "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", "dev": true }, "@types/ini": { - "version": "1.3.30", - "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz", - "integrity": "sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ==", + "version": "1.3.31", + "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.31.tgz", + "integrity": "sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w==", "dev": true }, "@types/json-schema": { @@ -4420,115 +6717,128 @@ "dev": true }, "@types/lodash": { - "version": "4.14.174", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.174.tgz", - "integrity": "sha512-KMBLT6+g9qrGXpDt7ohjWPUD34WA/jasrtjTEHStF0NPdEwJ1N9SZ+4GaMVDeuk/y0+X5j9xFm6mNiXS7UoaLQ==", + "version": "4.14.179", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz", + "integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==", "dev": true }, "@types/mocha": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", "dev": true }, "@types/node": { - "version": "14.17.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.19.tgz", - "integrity": "sha512-jjYI6NkyfXykucU6ELEoT64QyKOdvaA6enOqKtP4xUsGY0X0ZUZz29fUmrTRo+7v7c6TgDu82q3GHHaCEkqZwA==", + "version": "17.0.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", + "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", "dev": true }, "@types/uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", "dev": true }, "@types/vscode": { - "version": "1.60.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.60.0.tgz", - "integrity": "sha512-wZt3VTmzYrgZ0l/3QmEbCq4KAJ71K3/hmMQ/nfpv84oH8e81KKwPEoQ5v8dNCxfHFVJ1JabHKmCvqdYOoVm1Ow==", + "version": "1.64.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.64.0.tgz", + "integrity": "sha512-bSlAWz5WtcSL3cO9tAT/KpEH9rv5OBnm93OIIFwdCshaAiqr2bp1AUyEwW9MWeCvZBHEXc3V0fTYVdVyzDNwHA==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz", - "integrity": "sha512-w63SCQ4bIwWN/+3FxzpnWrDjQRXVEGiTt9tJTRptRXeFvdZc/wLiz3FQUwNQ2CVoRGI6KUWMNUj/pk63noUfcA==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.13.0.tgz", + "integrity": "sha512-vLktb2Uec81fxm/cfz2Hd6QaWOs8qdmVAZXLdOBX6JFJDhf6oDZpMzZ4/LZ6SFM/5DgDcxIMIvy3F+O9yZBuiQ==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.31.2", - "@typescript-eslint/scope-manager": "4.31.2", - "debug": "^4.3.1", + "@typescript-eslint/scope-manager": "5.13.0", + "@typescript-eslint/type-utils": "5.13.0", + "@typescript-eslint/utils": "5.13.0", + "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, - "@typescript-eslint/experimental-utils": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.2.tgz", - "integrity": "sha512-3tm2T4nyA970yQ6R3JZV9l0yilE2FedYg8dcXrTar34zC9r6JB7WyBQbpIVongKPlhEMjhQ01qkwrzWy38Bk1Q==", + "@typescript-eslint/parser": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.13.0.tgz", + "integrity": "sha512-GdrU4GvBE29tm2RqWOM0P5QfCtgCyN4hXICj/X9ibKED16136l9ZpoJvCL5pSKtmJzA+NRDzQ312wWMejCVVfg==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.31.2", - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/typescript-estree": "4.31.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@typescript-eslint/scope-manager": "5.13.0", + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/typescript-estree": "5.13.0", + "debug": "^4.3.2" } }, - "@typescript-eslint/parser": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.2.tgz", - "integrity": "sha512-EcdO0E7M/sv23S/rLvenHkb58l3XhuSZzKf6DBvLgHqOYdL6YFMYVtreGFWirxaU2mS1GYDby3Lyxco7X5+Vjw==", + "@typescript-eslint/scope-manager": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.13.0.tgz", + "integrity": "sha512-T4N8UvKYDSfVYdmJq7g2IPJYCRzwtp74KyDZytkR4OL3NRupvswvmJQJ4CX5tDSurW2cvCc1Ia1qM7d0jpa7IA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.31.2", - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/typescript-estree": "4.31.2", - "debug": "^4.3.1" + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/visitor-keys": "5.13.0" } }, - "@typescript-eslint/scope-manager": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.2.tgz", - "integrity": "sha512-2JGwudpFoR/3Czq6mPpE8zBPYdHWFGL6lUNIGolbKQeSNv4EAiHaR5GVDQaLA0FwgcdcMtRk+SBJbFGL7+La5w==", + "@typescript-eslint/type-utils": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.13.0.tgz", + "integrity": "sha512-/nz7qFizaBM1SuqAKb7GLkcNn2buRdDgZraXlkhz+vUGiN1NZ9LzkA595tHHeduAiS2MsHqMNhE2zNzGdw43Yg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/visitor-keys": "4.31.2" + "@typescript-eslint/utils": "5.13.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.2.tgz", - "integrity": "sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.13.0.tgz", + "integrity": "sha512-LmE/KO6DUy0nFY/OoQU0XelnmDt+V8lPQhh8MOVa7Y5k2gGRd6U9Kp3wAjhB4OHg57tUO0nOnwYQhRRyEAyOyg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.2.tgz", - "integrity": "sha512-ieBq8U9at6PvaC7/Z6oe8D3czeW5d//Fo1xkF/s9394VR0bg/UaMYPdARiWyKX+lLEjY3w/FNZJxitMsiWv+wA==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.13.0.tgz", + "integrity": "sha512-Q9cQow0DeLjnp5DuEDjLZ6JIkwGx3oYZe+BfcNuw/POhtpcxMTy18Icl6BJqTSd+3ftsrfuVb7mNHRZf7xiaNA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/visitor-keys": "4.31.2", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/visitor-keys": "5.13.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, + "@typescript-eslint/utils": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.13.0.tgz", + "integrity": "sha512-+9oHlPWYNl6AwwoEt5TQryEHwiKRVjz7Vk6kaBeD3/kwHE5YqTGHtm/JZY8Bo9ITOeKutFaXnBlMgSATMJALUQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.13.0", + "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/typescript-estree": "5.13.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, "@typescript-eslint/visitor-keys": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.2.tgz", - "integrity": "sha512-PrBId7EQq2Nibns7dd/ch6S6/M4/iwLM9McbgeEbCXfxdwRUNxJ4UNreJ6Gh3fI2GNKNrWnQxKL7oCPmngKBug==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.13.0.tgz", + "integrity": "sha512-HLKEAS/qA1V7d9EzcpLFykTePmOQqOFim8oCvhY3pZgQ8Hi38hYpHd9e5GN6nQBFQNecNhws5wkS9Y5XIO0s/g==", "dev": true, "requires": { - "@typescript-eslint/types": "4.31.2", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.13.0", + "eslint-visitor-keys": "^3.0.0" } }, "@ungap/promise-all-settled": { @@ -4537,10 +6847,16 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "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 + }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, "acorn-jsx": { @@ -4550,6 +6866,32 @@ "dev": true, "requires": {} }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "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, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -4572,6 +6914,15 @@ "uri-js": "^4.2.2" } }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -4612,12 +6963,28 @@ "default-require-extensions": "^3.0.0" } }, + "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 + }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, + "are-we-there-yet": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", + "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -4644,12 +7011,6 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4662,6 +7023,22 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4699,11 +7076,86 @@ "picocolors": "^1.0.0" } }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "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, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } }, "caching-transform": { "version": "4.0.0", @@ -4736,15 +7188,16 @@ "dev": true }, "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", + "loupe": "^2.3.1", "pathval": "^1.1.1", "type-detect": "^4.0.5" } @@ -4781,12 +7234,45 @@ "readdirp": "~3.6.0" } }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cint": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/cint/-/cint-8.2.1.tgz", + "integrity": "sha1-cDhrG0jidz0NYxZqVa/5TvRFahI=", + "dev": true + }, "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 }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-table": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", + "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", + "dev": true, + "requires": { + "colors": "1.0.3" + } + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -4798,6 +7284,15 @@ "wrap-ansi": "^7.0.0" } }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4813,6 +7308,24 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "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 + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + }, + "commander": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", + "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", + "dev": true + }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -4825,6 +7338,26 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -4859,6 +7392,12 @@ "which": "^2.0.1" } }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -4874,6 +7413,15 @@ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -4883,6 +7431,12 @@ "type-detect": "^4.0.0" } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -4898,6 +7452,24 @@ "strip-bom": "^4.0.0" } }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -4921,6 +7493,21 @@ "esutils": "^2.0.2" } }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, "electron-to-chromium": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.0.tgz", @@ -4933,15 +7520,37 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "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, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { - "ansi-colors": "^4.1.1" + "once": "^1.4.0" } }, + "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 + }, + "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 + }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", @@ -4954,6 +7563,12 @@ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -4961,76 +7576,94 @@ "dev": true }, "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "@eslint/eslintrc": "^1.2.0", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", + "glob-parent": "^6.0.1", "globals": "^13.6.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "argparse": "^2.0.1" } } } }, "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", + "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", "dev": true, "requires": {} }, @@ -5051,31 +7684,31 @@ "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, "requires": { - "acorn": "^7.4.0", + "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "eslint-visitor-keys": "^3.3.0" } }, "esprima": { @@ -5111,9 +7744,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -5137,9 +7770,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5160,6 +7793,12 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-memoize": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", + "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==", + "dev": true + }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -5168,6 +7807,12 @@ "reusify": "^1.0.4" } }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -5238,12 +7883,27 @@ "signal-exit": "^3.0.2" } }, + "fp-and-or": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fp-and-or/-/fp-and-or-0.1.3.tgz", + "integrity": "sha512-wJaE62fLaB3jCYvY2ZHjZvmKK2iiLiiehX38rz5QZxtdN8fVPJDeZUiVvJrHStdTc+23LHlyZuSEKgFc0pxi2g==", + "dev": true + }, "fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true }, + "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, + "requires": { + "minipass": "^3.0.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5257,12 +7917,35 @@ "dev": true, "optional": true }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "gauge": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz", + "integrity": "sha512-aSPRm2CvA9R8QyU5eXMFPd+cYkyxLsXHd2l5/FOH2V/eml//M04G6KZOmTap07O1PvEwNcl2NndyLfK8g3QrKA==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "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" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5287,6 +7970,21 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -5309,33 +8007,54 @@ "is-glob": "^4.0.1" } }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "requires": { + "ini": "2.0.0" + } + }, "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" - }, - "dependencies": { - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" - } + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" } }, "graceful-fs": { @@ -5350,12 +8069,33 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, "hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -5380,18 +8120,81 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "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, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "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, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + }, + "ignore-walk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", + "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -5402,6 +8205,12 @@ "resolve-from": "^4.0.0" } }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -5414,6 +8223,12 @@ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, + "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 + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -5431,17 +8246,41 @@ "dev": true }, "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "requires": { - "binary-extensions": "^2.0.0" + "has": "^1.0.3" } }, "is-extglob": { @@ -5456,18 +8295,52 @@ "dev": true }, "is-glob": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.2.tgz", - "integrity": "sha512-ZZTOjRcDjuAAAv2cTBQP/lL59ZTArx77+7UzHdWW/XB1mrfp7DEaVpKmZ0XIzx+M7AxfhKcqV+nMetUQmFifwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -5498,6 +8371,12 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -5594,6 +8473,12 @@ "istanbul-lib-report": "^3.0.0" } }, + "jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5616,6 +8501,27 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-parse-helpfulerror": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", + "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", + "dev": true, + "requires": { + "jju": "^1.1.0" + } + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -5637,6 +8543,42 @@ "minimist": "^1.2.5" } }, + "jsonlines": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsonlines/-/jsonlines-0.1.1.tgz", + "integrity": "sha1-T80kbcXQ44aRkHxEqwAveC0dlMw=", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -5647,6 +8589,68 @@ "type-check": "~0.4.0" } }, + "libnpmconfig": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", + "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "find-up": "^3.0.0", + "ini": "^1.3.5" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -5661,12 +8665,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", @@ -5679,12 +8677,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -5695,6 +8687,21 @@ "is-unicode-supported": "^0.1.0" } }, + "loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -5727,6 +8734,30 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "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, + "requires": { + "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" + } + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -5741,6 +8772,12 @@ "picomatch": "^2.2.3" } }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -5756,10 +8793,93 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "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, + "requires": { + "minipass": "^3.0.0" + } + }, + "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, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "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, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "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, + "requires": { + "minipass": "^3.0.0" + } + }, + "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, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, "mocha": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", - "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz", + "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -5838,6 +8958,30 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "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 + }, + "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, + "requires": { + "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" + } + }, "node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -5853,12 +8997,240 @@ "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-check-updates": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.0.tgz", + "integrity": "sha512-nrryXO9IZdJsAIXo8LdtllrsGiTDE4IMAod7fl1jd5C38tOdZZG/crNNii4IkctxltQRmK/ziZwsMDTlhszZXg==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "cint": "^8.2.1", + "cli-table": "^0.3.11", + "commander": "^9.0.0", + "fast-memoize": "^2.5.2", + "find-up": "5.0.0", + "fp-and-or": "^0.1.3", + "get-stdin": "^8.0.0", + "globby": "^11.0.4", + "hosted-git-info": "^4.1.0", + "json-parse-helpfulerror": "^1.0.3", + "jsonlines": "^0.1.1", + "libnpmconfig": "^1.2.1", + "lodash": "^4.17.21", + "minimatch": "^5.0.0", + "p-map": "^4.0.0", + "pacote": "^13.0.2", + "parse-github-url": "^1.0.2", + "progress": "^2.0.3", + "prompts": "^2.4.2", + "rc-config-loader": "^4.0.0", + "remote-git-tags": "^3.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "semver-utils": "^1.1.4", + "source-map-support": "^0.5.21", + "spawn-please": "^1.0.0", + "update-notifier": "^5.1.0", + "yaml": "^1.10.2" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "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, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.0.tgz", + "integrity": "sha512-yhzXxeor+Zfhe5MGwPdDumz6HtNlj2pMekWB95IX3CC6uDNgde0oPKHDCLDPoJqQfd0HqAWt+y4Hs5m7CK1+9Q==", + "dev": true, + "requires": { + "hosted-git-info": "^4.1.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", + "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^4.0.1", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.0.tgz", + "integrity": "sha512-njM1AcdioFaKd0JSGtLO09YA1WRwctjGQJbnHGmKS+u+uwP8oFvtZtOQWPYdxrnY5eJud3wn8OpH4sEIx6+GEQ==", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + } + }, + "npm-registry-fetch": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.0.0.tgz", + "integrity": "sha512-MmiMuV9DU5gRuAU0jia952Qq+E4h7ZoUaeltCXivhClcqfOVKqNLZEQsRUOb6a8WQY+um8x97JcUuaWFoPoBBw==", + "dev": true, + "requires": { + "make-fetch-happen": "^10.0.2", + "minipass": "^3.1.6", + "minipass-fetch": "^1.4.1", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.0", + "proc-log": "^2.0.0" + }, + "dependencies": { + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "lru-cache": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.4.0.tgz", + "integrity": "sha512-YOfuyWa/Ee+PXbDm40j9WXyJrzQUynVbgn4Km643UYcWNcrSfRkKL0WaiUcxcIbkXcVTgNpDqSnPXntWXT75cw==", + "dev": true + }, + "make-fetch-happen": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.0.3.tgz", + "integrity": "sha512-CzarPHynPpHjhF5in/YapnO44rSZeYX5VCMfdXa99+gLwpbfFLh20CWa6dP/taV9Net9PWJwXNKtp/4ZTCQnag==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.0", + "cacache": "^15.3.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.3.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.4.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.1.1", + "ssri": "^8.0.1" + } + } + } + }, + "npmlog": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", + "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.0", + "set-blocking": "^2.0.0" + } + }, "nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -6031,6 +9403,12 @@ "word-wrap": "^1.2.3" } }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -6076,6 +9454,55 @@ "release-zalgo": "^1.0.0" } }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "pacote": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.0.3.tgz", + "integrity": "sha512-8thQ06YoO01O1k5rvSpHS/XPJZucw2DPiiT1jI+ys8QaTN6ifAyxfyoABHBa8nIt/4wPdzly4GEPqshctHFoYA==", + "dev": true, + "requires": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^3.0.0", + "cacache": "^15.3.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^3.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^4.1.1", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.11" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6085,6 +9512,12 @@ "callsites": "^3.0.0" } }, + "parse-github-url": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", + "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==", + "dev": true + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6179,10 +9612,22 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, "prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + }, + "proc-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.0.tgz", + "integrity": "sha512-I/35MfCX2H8jBUhKN8JB8nmqvQo/nKdrBodBY7L3RhDSPPyvOHwLYNmPuhwuJq7a7C3vgFKWGQM+ecPStcvOHA==", "dev": true }, "process-on-spawn": { @@ -6200,12 +9645,57 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "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, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6220,6 +9710,94 @@ "safe-buffer": "^5.1.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, + "rc-config-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.0.0.tgz", + "integrity": "sha512-//LRTblJEcqbmmro1GCmZ39qZXD+JqzuD8Y5/IZU3Dhp3A1Yr0Xn68ks8MQ6qKfKvYCWDveUmRDKDA40c+sCXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "js-yaml": "^4.0.0", + "json5": "^2.1.2", + "require-from-string": "^2.0.2" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "read-package-json": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.1.tgz", + "integrity": "sha512-P82sbZJ3ldDrWCOSKxJT0r/CXMWR0OR3KRh55SgKo3p91GSIEEC32v3lSHAvO/UcH3/IoL7uqhOFBduAnwdldw==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6235,6 +9813,24 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -6244,6 +9840,12 @@ "es6-error": "^4.0.1" } }, + "remote-git-tags": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remote-git-tags/-/remote-git-tags-3.0.0.tgz", + "integrity": "sha512-C9hAO4eoEsX+OXA4rla66pXZQ+TLQ8T9dttgQj18yuKlPMTVkIkdYXvlMC55IuUsIkV6DpmQYi10JKFLaU+l7w==", + "dev": true + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -6268,6 +9870,21 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -6296,6 +9913,13 @@ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -6305,6 +9929,29 @@ "lru-cache": "^6.0.0" } }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "semver-utils": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/semver-utils/-/semver-utils-1.1.4.tgz", + "integrity": "sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA==", + "dev": true + }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -6336,9 +9983,15 @@ "dev": true }, "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "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 + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, "slash": { @@ -6346,15 +9999,31 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "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 + }, + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" } }, "source-map": { @@ -6364,15 +10033,21 @@ "dev": true }, "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, + "spawn-please": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-1.0.0.tgz", + "integrity": "sha512-Kz33ip6NRNKuyTRo3aDWyWxeGeM0ORDO552Fs6E1nj4pLWPkl37SrRtTnq+MEopVaqgmaO6bAvVS+v64BJ5M/A==", + "dev": true + }, "spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", @@ -6387,12 +10062,62 @@ "which": "^2.0.1" } }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -6434,38 +10159,18 @@ "has-flag": "^4.0.0" } }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" } }, "test-exclude": { @@ -6491,6 +10196,12 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -6500,16 +10211,23 @@ } }, "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "requires": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.5.0.tgz", + "integrity": "sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "source-map-support": "^0.5.17", + "v8-compile-cache-lib": "^3.0.0", "yn": "3.1.1" }, "dependencies": { @@ -6567,11 +10285,60 @@ } }, "typescript": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", - "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "dev": true }, + "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, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -6581,6 +10348,21 @@ "punycode": "^2.1.0" } }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -6592,6 +10374,31 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "v8-compile-cache-lib": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", + "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, "vscode-jsonrpc": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", @@ -6615,9 +10422,9 @@ } }, "vscode-languageserver-textdocument": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", - "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz", + "integrity": "sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==" }, "vscode-languageserver-types": { "version": "3.16.0", @@ -6625,9 +10432,9 @@ "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, "vscode-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.2.tgz", - "integrity": "sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", + "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==" }, "which": { "version": "2.0.2", @@ -6644,6 +10451,24 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "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, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -6685,6 +10510,12 @@ "typedarray-to-buffer": "^3.1.5" } }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 1658fa9c9..e4708caf0 100644 --- a/package.json +++ b/package.json @@ -41,40 +41,42 @@ "LSP" ], "dependencies": { - "@flatten-js/interval-tree": "^1.0.14", + "@flatten-js/interval-tree": "^1.0.18", "globby": "^11.0.4", - "ini": "^1.3.8", + "ini": "^2.0.0", "lodash": "^4.17.21", "uuid": "^8.3.2", "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^3.0.2", + "vscode-languageserver-textdocument": "^1.0.4", + "vscode-uri": "^3.0.3", "yaml": "^1.10.2" }, "devDependencies": { - "@types/chai": "^4.2.21", - "@types/ini": "^1.3.30", - "@types/lodash": "^4.14.171", - "@types/mocha": "^8.2.3", - "@types/node": "^14.17.5", - "@types/uuid": "^8.3.1", - "@types/vscode": "^1.56.0", - "@typescript-eslint/eslint-plugin": "^4.28.3", - "@typescript-eslint/parser": "^4.28.3", - "chai": "^4.3.4", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.3.0", - "mocha": "^9.2.0", + "@types/chai": "^4.3.0", + "@types/ini": "^1.3.31", + "@types/lodash": "^4.14.179", + "@types/mocha": "^9.1.0", + "@types/node": "^17.0.21", + "@types/uuid": "^8.3.4", + "@types/vscode": "^1.64.0", + "@typescript-eslint/eslint-plugin": "^5.13.0", + "@typescript-eslint/parser": "^5.13.0", + "chai": "^4.3.6", + "eslint": "^8.10.0", + "eslint-config-prettier": "^8.4.0", + "mocha": "^9.2.1", + "npm-check-updates": "^12.5.0", "nyc": "^15.1.0", - "prettier": "^2.4.1", + "prettier": "^2.5.1", "rimraf": "^3.0.2", - "ts-node": "^9.1.1", - "typescript": "^4.3.5" + "ts-node": "^10.5.0", + "typescript": "^4.6.2" }, "scripts": { "clean": "rimraf out/server && rimraf lib", "compile": "tsc -p .", "coverage": "nyc report --reporter=text-lcov > out/coverage.lcov", + "deps": "ncu -u && npm install", "lint": "npm ci && pre-commit run -a", "prepack": "npm ci && npm run compile", "preversion": "bin/version-bump-allowed", From c2f5da13a855c65be610450c87539767e28f6642 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 2 Mar 2022 10:19:34 +0530 Subject: [PATCH 262/558] Bump version to v0.5.1 (#238) * Generate a changelog entry for v0.5.1 * Release 0.5.1 from GitHub Actions CI/CD * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Ganesh Nalawade --- CHANGELOG.md | 11 +++++++++++ docs/changelog-fragments.d/236.bugfix.md | 4 ---- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) delete mode 100644 docs/changelog-fragments.d/236.bugfix.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 77d90d889..8c542cd7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,17 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag +## v0.5.1 (2022-03-01) + +### Bugfixes + +- Ensure that Ansible calls do not return ANSI escapes, so we can parse them. + [vscode-ansible#373] -- by {user}`ssbarnea` + + [vscode-ansible#373]: + https://github.com/ansible/vscode-ansible/issues/373 + '{issue}`236`' + ## v0.5.0 (2022-03-01) ### Features diff --git a/docs/changelog-fragments.d/236.bugfix.md b/docs/changelog-fragments.d/236.bugfix.md deleted file mode 100644 index c8f507182..000000000 --- a/docs/changelog-fragments.d/236.bugfix.md +++ /dev/null @@ -1,4 +0,0 @@ -Ensure that Ansible calls do not return ANSI escapes, so we can parse them. -[vscode-ansible#373] -- by {user}`ssbarnea` - -[vscode-ansible#373]: https://github.com/ansible/vscode-ansible/issues/373 diff --git a/package-lock.json b/package-lock.json index 9fd2e822f..f39b8a2ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.5.0", + "version": "0.5.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.5.0", + "version": "0.5.1", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index e4708caf0..3977b95eb 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.5.0", + "version": "0.5.1", "contributors": [ { "name": "Tomasz Maciążek", From aeeff6b65da535e1ce7b0a7dfc724bfc54f02427 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Wed, 2 Mar 2022 10:42:58 +0530 Subject: [PATCH 263/558] Remove usage of URL from `fileExists()` (#233) * remove usage of URL * added a change note for the PR * use markdown syntax to highlight the identifier in change note * replace usage of url with vscode-uri * rename fileUri to filePath Co-authored-by: Sorin Sbarnea Co-authored-by: Ganesh Nalawade --- docs/changelog-fragments.d/233.bugfix.md | 2 ++ src/services/metadataLibrary.ts | 7 ++++--- src/utils/misc.ts | 5 ++--- 3 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 docs/changelog-fragments.d/233.bugfix.md diff --git a/docs/changelog-fragments.d/233.bugfix.md b/docs/changelog-fragments.d/233.bugfix.md new file mode 100644 index 000000000..7992c4d50 --- /dev/null +++ b/docs/changelog-fragments.d/233.bugfix.md @@ -0,0 +1,2 @@ +Fixed source of `INVALID_URL` type error that occurred during the search for +ansible-lint config file -- by {user} `priyamsahoo` diff --git a/src/services/metadataLibrary.ts b/src/services/metadataLibrary.ts index 7b65d8351..fd108409f 100644 --- a/src/services/metadataLibrary.ts +++ b/src/services/metadataLibrary.ts @@ -1,7 +1,7 @@ import { promises as fs } from 'fs'; -import { URL } from 'url'; import { Connection } from 'vscode-languageserver'; import { DidChangeWatchedFilesParams } from 'vscode-languageserver-protocol'; +import { URI } from 'vscode-uri'; import { parseAllDocuments } from 'yaml'; import { IDocumentMetadata } from '../interfaces/documentMeta'; import { fileExists, hasOwnProperty } from '../utils/misc'; @@ -64,9 +64,10 @@ export class MetadataLibrary { source: metadataUri, collections: new Array(), }; - if (await fileExists(metadataUri)) { + const metadataFilePath = URI.parse(metadataUri).path; + if (await fileExists(metadataFilePath)) { try { - const metaContents = await fs.readFile(new URL(metadataUri), { + const metaContents = await fs.readFile(metadataFilePath, { encoding: 'utf8', }); parseAllDocuments(metaContents).forEach((metaDoc) => { diff --git a/src/utils/misc.ts b/src/utils/misc.ts index 9bc02a4ef..83f9f90b0 100644 --- a/src/utils/misc.ts +++ b/src/utils/misc.ts @@ -1,13 +1,12 @@ import * as child_process from 'child_process'; import { promises as fs } from 'fs'; -import { URL } from 'url'; import { promisify } from 'util'; import { TextDocument } from 'vscode-languageserver-textdocument'; import { Range } from 'vscode-languageserver-types'; import * as path from 'path'; -export async function fileExists(fileUri: string): Promise { - return !!(await fs.stat(new URL(fileUri)).catch(() => false)); +export async function fileExists(filePath: string): Promise { + return !!(await fs.stat(filePath).catch(() => false)); } export const asyncExec = promisify(child_process.exec); From 89671981c4a5b9414943995218cb32d58c4fbb6e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 2 Mar 2022 11:06:59 +0530 Subject: [PATCH 264/558] Bump version to v0.5.2 (#240) * Generate a changelog entry for v0.5.2 * Release 0.5.2 from GitHub Actions CI/CD * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- CHANGELOG.md | 14 ++++++++++++++ docs/changelog-fragments.d/190.bugfix.md | 2 -- docs/changelog-fragments.d/233.bugfix.md | 2 -- package-lock.json | 4 ++-- package.json | 2 +- 5 files changed, 17 insertions(+), 7 deletions(-) delete mode 100644 docs/changelog-fragments.d/190.bugfix.md delete mode 100644 docs/changelog-fragments.d/233.bugfix.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c542cd7d..c99972fd1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,20 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag +## v0.5.2 (2022-03-02) + +### Bugfixes + +- Used ls instead of find for execution-environments while check if ansible + plugins are present in a given path -- by {user}`ganeshrn` + + ({issue}`190`) + +- Fixed source of `INVALID_URL` type error that occurred during the search for + ansible-lint config file -- by {user} `priyamsahoo` + + ({issue}`233`) + ## v0.5.1 (2022-03-01) ### Bugfixes diff --git a/docs/changelog-fragments.d/190.bugfix.md b/docs/changelog-fragments.d/190.bugfix.md deleted file mode 100644 index c2a080024..000000000 --- a/docs/changelog-fragments.d/190.bugfix.md +++ /dev/null @@ -1,2 +0,0 @@ -Used ls instead of find for execution-environments while check if ansible -plugins are present in a given path -- by {user}`ganeshrn` diff --git a/docs/changelog-fragments.d/233.bugfix.md b/docs/changelog-fragments.d/233.bugfix.md deleted file mode 100644 index 7992c4d50..000000000 --- a/docs/changelog-fragments.d/233.bugfix.md +++ /dev/null @@ -1,2 +0,0 @@ -Fixed source of `INVALID_URL` type error that occurred during the search for -ansible-lint config file -- by {user} `priyamsahoo` diff --git a/package-lock.json b/package-lock.json index f39b8a2ec..ef5fad146 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.5.1", + "version": "0.5.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.5.1", + "version": "0.5.2", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 3977b95eb..a2fb7ea6d 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.5.1", + "version": "0.5.2", "contributors": [ { "name": "Tomasz Maciążek", From 20b628e6ebd1ed8259d731362551a4e163144702 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 2 Mar 2022 09:02:31 +0000 Subject: [PATCH 265/558] Enable wsl1 testing using npm pipeline (#212) --- .github/workflows/npm.yml | 90 +++++++++++++++++++++++++++++++++++++++ tools/test-setup.sh | 63 +++++++++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 .github/workflows/npm.yml create mode 100755 tools/test-setup.sh diff --git a/.github/workflows/npm.yml b/.github/workflows/npm.yml new file mode 100644 index 000000000..008c3e709 --- /dev/null +++ b/.github/workflows/npm.yml @@ -0,0 +1,90 @@ +# alternative KISS pipeline to bloated ci.yml, modeled after vscode-ansible one. +name: npm + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the main branch +on: + push: + branches: [main] + pull_request: + branches: [main] + +env: + FORCE_COLOR: "1" # make mocha output colorful + # https://devblogs.microsoft.com/commandline/share-environment-vars-between-wsl-and-windows/ + WSLENV: FORCE_COLOR:GITHUB_PATH/p + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + test: + name: ${{ matrix.name || format('{0} ({1})', matrix.npm-target, matrix.os) }} + # The type of runner that the job will run on + runs-on: ${{ matrix.os }} + defaults: + run: + shell: ${{ matrix.shell || 'bash'}} + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - macos-11 + npm-target: + - test + upload-artifact: + - false + name: + - false + include: + - name: test (wsl) + npm-target: test + # https://github.com/actions/virtual-environments/issues/5151 + os: windows-2019 + shell: "wsl-bash {0}" + + steps: + - name: Disable autocrlf + if: "contains(matrix.os, 'windows')" + run: |- + git config --global core.autocrlf false + git config --global core.eol lf + shell: bash # <-- keep it here to avoid using default shell + + - uses: actions/checkout@v2 + + # https://github.com/marketplace/actions/setup-wsl + - name: Activate WSL + if: "contains(matrix.shell, 'wsl')" + uses: Vampire/setup-wsl@v1 + with: + # we want to load user profile + # https://github.com/Vampire/setup-wsl#wsl-shell-command + wsl-shell-command: "bash -i -euo pipefail" + + - name: Use NodeJS v16 + # as Windows executables are exposed inside WSL at top of PATH, we + # would end with broken npm script in PATH on wsl. + if: "!contains(matrix.shell, 'wsl')" + uses: actions/setup-node@v2 + with: + node-version: 16 + + - name: Run ./tools/test-setup.sh + run: ./tools/test-setup.sh + + - name: npm run compile + run: npm run compile + + - name: npm run ${{ matrix.npm-target }} + run: npm run ${{ matrix.npm-target }} + + check: # This job does nothing and is only used for the branch protection + if: always() + runs-on: ubuntu-latest + needs: + - test + steps: + - name: Decide whether the needed jobs succeeded or failed + uses: re-actors/alls-green@release/v1 + with: + jobs: ${{ toJSON(needs) }} diff --git a/tools/test-setup.sh b/tools/test-setup.sh new file mode 100755 index 000000000..ccee73990 --- /dev/null +++ b/tools/test-setup.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# This tool is used to setup the environment for running the tests. Its name +# name and location is based on Zuul CI, which can automatically run it. +set -euxo pipefail + +# User specific environment +# shellcheck disable=SC2076 +if ! [[ "$PATH" =~ "$HOME/.local/bin" ]]; then + cat >>"$HOME/.bashrc" < Date: Wed, 2 Mar 2022 15:47:43 +0000 Subject: [PATCH 266/558] Ensure that we have a prepare script Prepare script is needed when installing package from source, so npm will know how to compile them. --- .github/workflows/vscode.yml | 6 +----- package.json | 2 ++ 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/vscode.yml b/.github/workflows/vscode.yml index c4c6bc27e..7a50582b4 100644 --- a/.github/workflows/vscode.yml +++ b/.github/workflows/vscode.yml @@ -29,16 +29,12 @@ jobs: with: node-version: 16 - - name: Compile language server - run: npm ci && npm run compile - - name: Link ansible-language-server into vscode-ansible run: | set -ex mv vscode-ansible .. pushd ../vscode-ansible - npm link --save ../ansible-language-server - npm ls --depth=0 --link=true + npm install --save ../ansible-language-server popd - name: >- diff --git a/package.json b/package.json index a2fb7ea6d..72c282810 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,8 @@ "deps": "ncu -u && npm install", "lint": "npm ci && pre-commit run -a", "prepack": "npm ci && npm run compile", + "//prepare": "Prepare is needed for installation from source", + "prepare": "npm run compile", "preversion": "bin/version-bump-allowed", "watch": "tsc --watch -p .", "test": "nyc -s -a mocha && nyc report --check-coverage", From 25c500a9e2d966f314ceb97fbba49cb8311782a5 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 4 Mar 2022 14:11:52 +0000 Subject: [PATCH 267/558] Enable cspell (#244) --- .config/dictionary.txt | 89 ++++++++++ .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- .github/workflows/ci.yml | 5 +- .pre-commit-config.yaml | 5 + cspell.config.yaml | 18 ++ docs/conf.py | 185 ++++++++++----------- docs/contributing/guidelines.md | 2 +- src/utils/ansible.ts | 4 +- src/utils/docsParser.ts | 6 +- src/utils/yaml.ts | 2 +- test/utils/yaml.test.ts | 4 +- tools/test-setup.sh | 1 + tox.ini | 1 + 14 files changed, 220 insertions(+), 106 deletions(-) create mode 100644 .config/dictionary.txt create mode 100644 cspell.config.yaml diff --git a/.config/dictionary.txt b/.config/dictionary.txt new file mode 100644 index 000000000..731906d18 --- /dev/null +++ b/.config/dictionary.txt @@ -0,0 +1,89 @@ +Dpkg +FQCN +FQCNs +HORIZONTALLINE +Jenkinsfile +PYTHONHOME +TLDR +WSLENV +YOLO +alphanums +ansiblefest +autocrlf +autofix +autoupdate +backticks +cacheable +codeclimate +codecov +commitish +commitlint +customizer +deps +devel +dirhtml +doctrees +dunamai +endfor +eqeqeq +globbing +globby +installdeps +jsdoc +lcov +libyaml +lineinfile +linkcheck +linkify +lxml +markdownlint +monospace +mycollection +mymodule +mynamespace +nocolor +notest +npmjs +nvim +parseable +patchback +pkgcache +prettierrc +preversion +pyparsing +pyup +seealso +showcontent +suboption +suboptions +testorg +toctree +todos +towncrier +toxenv +tsbuildinfo +unshallow +uuidv4 +vscodeignore +vsix +whereis +withserver +wordwrap +workdir +xvfb + +# names and usernames: +Ganesh +Maciążek +Nalawade +Tomasz +dbaeumer +esbenp +ganeshrn +hbenl +kimbernator +priyamsahoo +ssbarnea +tomaciazek +webknjaz +yaegassy diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index d4873a848..13a2baee3 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -18,7 +18,7 @@ body: 🛈 **Tip:** If you are seeking community support, or want to ask a question, please consider [starting a discussion][discussions]. - + []: # (cspell: disable-next-line) [issues]: ../search?q=is%3Aissue&type=issues [discussions]: ../discussions diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 3fe05185c..77ca0cb4d 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -18,7 +18,7 @@ body: 🛈 **Tip:** If you are seeking community support, or want to ask a question, please consider [starting a discussion][discussions]. - + []: # (cspell: disable-next-line) [issues]: ../search?q=is%3Aissue&type=issues [discussions]: ../discussions diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 95ff2c86e..7e7bbfb45 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,5 @@ --- +# spell-checker:ignore fregante hexdigest vsoch ncipollo ghpnr name: CI on: @@ -777,7 +778,7 @@ jobs: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} publish-ghpnr: - name: Publish ${{ needs.pre-setup.outputs.git-tag }} to GHPNR + name: Publish ${{ needs.pre-setup.outputs.git-tag }} to Github NPM Registry if: >- fromJSON(needs.pre-setup.outputs.is-untagged-devel) || fromJSON(needs.pre-setup.outputs.release-requested) @@ -898,7 +899,7 @@ jobs: # NOTE: and GitHub releases so human gating has already happened via # NOTE: approving the deployment environment earlier. # NOTE: This means that the PR must get merged no matter what, just to - # NOTE: correspond the published artifacts for tracability and transparency. + # NOTE: correspond the published artifacts for traceability and transparency. if: failure() run: >- gh pr merge diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 086fc47e9..d7cab08a6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,6 +49,11 @@ repos: language: system files: "codecov.yml" pass_filenames: false + - repo: https://github.com/streetsidesoftware/cspell-cli + rev: v5.8.4 + hooks: + - id: cspell + name: Spell check with cspell - repo: https://github.com/pre-commit/pre-commit-hooks.git rev: v4.1.0 hooks: diff --git a/cspell.config.yaml b/cspell.config.yaml new file mode 100644 index 000000000..5925849ad --- /dev/null +++ b/cspell.config.yaml @@ -0,0 +1,18 @@ +--- +dictionaryDefinitions: + - name: words + path: .config/dictionary.txt + addWords: true +dictionaries: + # Use `cspell-cli trace word` to check where a work is defined + - en_US + - bash + - words + - python + - "!backwards-compatibility" + - "!cryptocurrencies" + - "!cpp" +ignorePaths: + - docs/requirements.txt + - docs/requirements.in + - syntaxes/**/*.* diff --git a/docs/conf.py b/docs/conf.py index ac6b2999e..0927cb951 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -22,7 +22,7 @@ get_scm_version = partial(get_version, root=PROJECT_ROOT_DIR) # Patch necessary for sphinx-js to locate the `typedoc` executable: -os.environ['PATH'] = ( +os.environ["PATH"] = ( f'{PROJECT_ROOT_DIR / "node_modules" / "typedoc" / "bin"!s}' f'{os.pathsep}{os.getenv("PATH", "")}' ) @@ -36,27 +36,27 @@ # Refs: # https://github.com/readthedocs/readthedocs.org/issues/6311 # https://github.com/readthedocs/readthedocs.org/issues/7182 -sys.path.insert(0, str((Path(__file__).parent / '_ext').resolve())) +sys.path.insert(0, str((Path(__file__).parent / "_ext").resolve())) # -- Project information ----------------------------------------------------- -ansible_homepage_url = 'https://www.ansible.com' -github_url = 'https://github.com' -github_repo_org = 'ansible' -github_repo_name = 'ansible-language-server' -github_repo_slug = f'{github_repo_org}/{github_repo_name}' -github_repo_url = f'{github_url}/{github_repo_slug}' -github_sponsors_url = f'{github_url}/sponsors' +ansible_homepage_url = "https://www.ansible.com" +github_url = "https://github.com" +github_repo_org = "ansible" +github_repo_name = "ansible-language-server" +github_repo_slug = f"{github_repo_org}/{github_repo_name}" +github_repo_url = f"{github_url}/{github_repo_slug}" +github_sponsors_url = f"{github_url}/sponsors" -project = ' '.join(github_repo_name.split('-')).title() -author = f'{project} project contributors' +project = " ".join(github_repo_name.split("-")).title() +author = f"{project} project contributors" copyright = author # pylint: disable=redefined-builtin # The short X.Y version -version = '.'.join( - get_scm_version( - local_scheme='no-local-version', - ).split('.')[:3], +version = ".".join( + get_scm_version(local_scheme="no-local-version",).split( + "." + )[:3], ) # The full version, including alpha/beta/rc tags @@ -75,7 +75,7 @@ # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. -today_fmt = '%B %d, %Y' +today_fmt = "%B %d, %Y" # If true, '()' will be appended to :func: etc. cross-reference text. add_function_parentheses = True @@ -89,116 +89,115 @@ show_authors = True # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'ansible' +pygments_style = "ansible" # Default domain # Tell sphinx what the primary language being documented is. -primary_domain = 'js' +primary_domain = "js" # Tell sphinx what the pygments highlight language should be. -highlight_language = 'js' +highlight_language = "js" # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ # stdlib-party extensions: - 'sphinx.ext.autodoc', - 'sphinx.ext.doctest', - 'sphinx.ext.extlinks', - 'sphinx.ext.intersphinx', - 'sphinx.ext.todo', - 'sphinx.ext.coverage', - 'sphinx.ext.viewcode', - + "sphinx.ext.autodoc", + "sphinx.ext.doctest", + "sphinx.ext.extlinks", + "sphinx.ext.intersphinx", + "sphinx.ext.todo", + "sphinx.ext.coverage", + "sphinx.ext.viewcode", # Third-party extensions: - 'myst_parser', # extended markdown; https://pypi.org/project/myst-parser/ - 'notfound.extension', + "myst_parser", # extended markdown; https://pypi.org/project/myst-parser/ + "notfound.extension", # FIXME: `sphinx-js` is not fully configured right now; TODO: change this. # 'sphinx_js', # Support for using Sphinx on JSDoc-documented JS code - 'sphinxcontrib.towncrier', # provides `towncrier-draft-entries` directive + "sphinxcontrib.towncrier", # provides `towncrier-draft-entries` directive ] # Conditional third-party extensions: try: import sphinxcontrib.spelling as _sphinxcontrib_spelling except ImportError: - extensions.append('spelling_stub_ext') + extensions.append("spelling_stub_ext") else: del _sphinxcontrib_spelling - extensions.append('sphinxcontrib.spelling') + extensions.append("sphinxcontrib.spelling") # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = 'en' +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = [ - 'changelog-fragments.d/**', # Towncrier-managed change notes + "changelog-fragments.d/**", # Towncrier-managed change notes ] -primary_domain = 'js' +primary_domain = "js" # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'sphinx_ansible_theme' +html_theme = "sphinx_ansible_theme" html_show_sphinx = True html_theme_options = { - 'collapse_navigation': False, - 'analytics_id': '', - 'style_nav_header_background': '#ff5850', # 5bbdbf - 'style_external_links': True, - 'canonical_url': f'https://{github_repo_name}.readthedocs.io/en/latest/', - 'vcs_pageview_mode': 'edit', - 'topbar_links': { - 'AnsibleFest': f'{ansible_homepage_url}/ansiblefest', - 'Products': f'{ansible_homepage_url}/tower', - 'Community': f'{ansible_homepage_url}/community', - 'Webinars & Training': f'{ansible_homepage_url}/webinars-training', - 'Blog': f'{ansible_homepage_url}/blog', + "collapse_navigation": False, + "analytics_id": "", + "style_nav_header_background": "#ff5850", # #5bbdbf + "style_external_links": True, + "canonical_url": f"https://{github_repo_name}.readthedocs.io/en/latest/", + "vcs_pageview_mode": "edit", + "topbar_links": { + "AnsibleFest": f"{ansible_homepage_url}/ansiblefest", + "Products": f"{ansible_homepage_url}/tower", + "Community": f"{ansible_homepage_url}/community", + "Webinars & Training": f"{ansible_homepage_url}/webinars-training", + "Blog": f"{ansible_homepage_url}/blog", }, - 'navigation_depth': 3, + "navigation_depth": 3, } html_context = { - 'display_github': True, - 'github_user': github_repo_org, - 'github_repo': github_repo_name, - 'github_version': 'main/docs/', - 'current_version': version, - 'latest_version': 'latest', - 'available_versions': ('latest',), + "display_github": True, + "github_user": github_repo_org, + "github_repo": github_repo_name, + "github_version": "main/docs/", + "current_version": version, + "latest_version": "latest", + "available_versions": ("latest",), } # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". -html_title = f'{project} Documentation' +html_title = f"{project} Documentation" # A shorter title for the navigation bar. Default is the same as html_title. -html_short_title = 'ALS Documentation' +html_short_title = "ALS Documentation" # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. -html_last_updated_fmt = '%b %d, %Y' +html_last_updated_fmt = "%b %d, %Y" # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. -html_use_opensearch = f'https://{github_repo_name}.readthedocs.io/en/latest/' +html_use_opensearch = f"https://{github_repo_name}.readthedocs.io/en/latest/" # The master toctree document. -root_doc = master_doc = 'index' # Sphinx 4+ / 3- # noqa: WPS429 +root_doc = master_doc = "index" # Sphinx 4+ / 3- # noqa: WPS429 # -- Extension configuration ------------------------------------------------- @@ -206,10 +205,10 @@ # -- Options for intersphinx extension --------------------------------------- intersphinx_mapping = { - 'ansible-runner': ('https://ansible-runner.rtfd.io/en/latest', None), - 'myst': ('https://myst-parser.rtfd.io/en/latest', None), - 'python': ('https://docs.python.org/3', None), - 'python2': ('https://docs.python.org/2', None), + "ansible-runner": ("https://ansible-runner.rtfd.io/en/latest", None), + "myst": ("https://myst-parser.rtfd.io/en/latest", None), + "python": ("https://docs.python.org/3", None), + "python2": ("https://docs.python.org/2", None), } # -- Options for todo extension ---------------------------------------------- @@ -226,29 +225,29 @@ spelling_ignore_wiki_words = True spelling_show_suggestions = True spelling_word_list_filename = [ - 'spelling_wordlist.txt', + "spelling_wordlist.txt", ] # -- Options for extlinks extension ------------------------------------------ extlinks = { - 'issue': (f'{github_repo_url}/issues/%s', '#'), # noqa: WPS323 - 'pr': (f'{github_repo_url}/pull/%s', 'PR #'), # noqa: WPS323 - 'commit': (f'{github_repo_url}/commit/%s', ''), # noqa: WPS323 - 'gh': (f'{github_url}/%s', 'GitHub: '), # noqa: WPS323 - 'user': (f'{github_sponsors_url}/%s', '@'), # noqa: WPS323 + "issue": (f"{github_repo_url}/issues/%s", "#"), # noqa: WPS323 + "pr": (f"{github_repo_url}/pull/%s", "PR #"), # noqa: WPS323 + "commit": (f"{github_repo_url}/commit/%s", ""), # noqa: WPS323 + "gh": (f"{github_url}/%s", "GitHub: "), # noqa: WPS323 + "user": (f"{github_sponsors_url}/%s", "@"), # noqa: WPS323 } # -- Options for linkcheck builder ------------------------------------------- linkcheck_ignore = [ - r'http://localhost:\d+/', # local URLs + r"http://localhost:\d+/", # local URLs ] linkcheck_workers = 25 # -- Options for towncrier_draft extension ----------------------------------- -towncrier_draft_autoversion_mode = 'draft' # or: 'sphinx-version', 'sphinx-release' +towncrier_draft_autoversion_mode = "draft" # or: 'sphinx-version', 'sphinx-release' towncrier_draft_include_empty = True towncrier_draft_working_directory = PROJECT_ROOT_DIR # Not yet supported: towncrier_draft_config_path = 'pyproject.toml' # relative to cwd @@ -256,26 +255,26 @@ # -- Options for myst_parser extension --------------------------------------- myst_enable_extensions = [ - 'colon_fence', # allow to optionally use ::: instead of ``` - 'deflist', - 'html_admonition', # allow having HTML admonitions - 'html_image', # allow HTML in Markdown - 'linkify', # auto-detect URLs @ plain text, needs myst-parser[linkify] - 'replacements', # allows Jinja2-style replacements - 'smartquotes', # use "cursive" quotes - 'substitution', # replace common ASCII shortcuts into their symbols + "colon_fence", # allow to optionally use ::: instead of ``` + "deflist", + "html_admonition", # allow having HTML admonitions + "html_image", # allow HTML in Markdown + "linkify", # auto-detect URLs @ plain text, needs myst-parser[linkify] + "replacements", # allows Jinja2-style replacements + "smartquotes", # use "cursive" quotes + "substitution", # replace common ASCII shortcuts into their symbols ] myst_substitutions = { - 'project': project, - 'release': release, - 'release_l': f'`v{release}`', - 'version': version, + "project": project, + "release": release, + "release_l": f"`v{release}`", + "version": version, } # -- Options for sphinx_js extension ----------------------------------------- # Example sphinx-js use: https://mozilla.github.io/fathom/ruleset.html -js_language = 'typescript' +js_language = "typescript" # js_source_path = '../src' # default: '../' # jsdoc_cache = # FIXME: think about cache invalidation? # jsdoc_config_path = '../conf.json' @@ -286,14 +285,14 @@ # The reST default role (used for this markup: `text`) to use for all # documents. # Ref: python-attrs/attrs#571 -default_role = 'any' +default_role = "any" nitpicky = True -_any_role = 'any' -_py_obj_role = 'py:obj' -_py_class_role = 'py:class' +_any_role = "any" +_py_obj_role = "py:obj" +_py_class_role = "py:class" nitpick_ignore = [ - (_any_role, '.'), - (_py_class_role, '.'), - (_py_obj_role, '.'), + (_any_role, "."), + (_py_class_role, "."), + (_py_obj_role, "."), ] diff --git a/docs/contributing/guidelines.md b/docs/contributing/guidelines.md index a0826d0b6..e34faf884 100644 --- a/docs/contributing/guidelines.md +++ b/docs/contributing/guidelines.md @@ -21,7 +21,7 @@ process locally by executing: ```shell-session $ tox -e build-docs build-docs create: .tox/build-docs -build-docs installdeps: -rdocs/requirements.txt +build-docs installdeps: -r docs/requirements.txt ... ======================================================================================================================== diff --git a/src/utils/ansible.ts b/src/utils/ansible.ts index e653bb6d0..ebb76eeb4 100644 --- a/src/utils/ansible.ts +++ b/src/utils/ansible.ts @@ -94,7 +94,7 @@ playKeywords.set( playKeywords.set( 'handlers', - 'A section with tasks that are treated as handlers, these won’t get executed normally, only when notified after each section of tasks is complete. A handler’s listen field is not templatable.' + 'A section with tasks that are treated as handlers, these won’t get executed normally, only when notified after each section of tasks is complete. A handler’s listen field cannot use templates.' ); playKeywords.set( @@ -621,7 +621,7 @@ taskKeywords.set( taskKeywords.set( 'loop_control', - 'Several keys here allow you to modify/set loop behaviour in a task.' + 'Several keys here allow you to modify/set loop behavior in a task.' ); taskKeywords.set( diff --git a/src/utils/docsParser.ts b/src/utils/docsParser.ts index 8cb39cec8..d22b2fd17 100644 --- a/src/utils/docsParser.ts +++ b/src/utils/docsParser.ts @@ -179,10 +179,10 @@ function parseRawRoutesByName( function parseRawRoute(rawRoute: Record): IPluginRoute { const route: IPluginRoute = {}; if (isObject(rawRoute.deprecation)) { - route.deprecation = parseRawDepracationOrTombstone(rawRoute.deprecation); + route.deprecation = parseRawDeprecationOrTombstone(rawRoute.deprecation); } if (isObject(rawRoute.tombstone)) { - route.tombstone = parseRawDepracationOrTombstone(rawRoute.tombstone); + route.tombstone = parseRawDeprecationOrTombstone(rawRoute.tombstone); } if (typeof rawRoute.redirect === 'string') { route.redirect = rawRoute.redirect; @@ -190,7 +190,7 @@ function parseRawRoute(rawRoute: Record): IPluginRoute { return route; } -function parseRawDepracationOrTombstone( +function parseRawDeprecationOrTombstone( rawInfo: Record ): { removalVersion?: string; diff --git a/src/utils/yaml.ts b/src/utils/yaml.ts index 9e67633a9..09cd9af3d 100644 --- a/src/utils/yaml.ts +++ b/src/utils/yaml.ts @@ -522,7 +522,7 @@ export function parseAllDocuments(str: string, options?: Options): Document[] { } /** - * For a given yaml file that is recognised as Ansible file, the function + * For a given yaml file that is recognized as Ansible file, the function * checks whether the file is a playbook or not * @param textDocument the text document to check */ diff --git a/test/utils/yaml.test.ts b/test/utils/yaml.test.ts index ac5b0550e..b1dd7af22 100644 --- a/test/utils/yaml.test.ts +++ b/test/utils/yaml.test.ts @@ -288,13 +288,13 @@ describe('yaml', () => { expect(test).to.be.eq(false); }); - it('isUndecisiveWithoutPlayKeywords', async () => { + it('isIndecisiveWithoutPlayKeywords', async () => { const path = (await getPathInFile('isPlayParam.yml', 7, 3)) as Node[]; const test = isPlayParam(path, 'file://test/isPlay.yml'); expect(test).to.be.eq(undefined); }); - it('isUndecisiveWithoutPlayKeywordsWithoutPath', async () => { + it('isIndecisiveWithoutPlayKeywordsWithoutPath', async () => { const path = (await getPathInFile('isPlayParam.yml', 7, 3)) as Node[]; const test = isPlayParam(path); expect(test).to.be.eq(undefined); diff --git a/tools/test-setup.sh b/tools/test-setup.sh index ccee73990..20405a049 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -1,6 +1,7 @@ #!/bin/bash # This tool is used to setup the environment for running the tests. Its name # name and location is based on Zuul CI, which can automatically run it. +# (cspell: disable-next-line) set -euxo pipefail # User specific environment diff --git a/tox.ini b/tox.ini index f0a405ed1..050d89144 100644 --- a/tox.ini +++ b/tox.ini @@ -1,3 +1,4 @@ +# spell-checker:ignore toxinidir passenv usedevelop testenv basepython envpython linkcheck changedir envdir envlist minversion toxworkdir posargs envname [tox] envlist = minversion = 3.21.0 From 9cf846c7d2119aa20814e2985e35fb9b02a365fa Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 7 Mar 2022 10:42:55 +0000 Subject: [PATCH 268/558] Use a single spellchecking dictionary (#248) --- .config/dictionary.txt | 3 +++ docs/conf.py | 2 +- docs/spelling_wordlist.txt | 2 -- 3 files changed, 4 insertions(+), 3 deletions(-) delete mode 100644 docs/spelling_wordlist.txt diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 731906d18..e675fe46e 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -1,3 +1,4 @@ +Ansible Dpkg FQCN FQCNs @@ -8,6 +9,7 @@ TLDR WSLENV YOLO alphanums +ansible ansiblefest autocrlf autofix @@ -22,6 +24,7 @@ customizer deps devel dirhtml +doctree doctrees dunamai endfor diff --git a/docs/conf.py b/docs/conf.py index 0927cb951..8b56e2e46 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -225,7 +225,7 @@ spelling_ignore_wiki_words = True spelling_show_suggestions = True spelling_word_list_filename = [ - "spelling_wordlist.txt", + "../.config/dictionary.txt", ] # -- Options for extlinks extension ------------------------------------------ diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt deleted file mode 100644 index 38e7a01f3..000000000 --- a/docs/spelling_wordlist.txt +++ /dev/null @@ -1,2 +0,0 @@ -Ansible -ansible From be74a3acf1f82841df4cf8fbc50252a2edeb6dcd Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 7 Mar 2022 10:57:22 +0000 Subject: [PATCH 269/558] Fix docs requirements (#249) --- docs/requirements.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/requirements.in b/docs/requirements.in index 3c4be50a5..0a061e318 100644 --- a/docs/requirements.in +++ b/docs/requirements.in @@ -1,6 +1,7 @@ +MarkupSafe<2.1.0 # https://github.com/pallets/markupsafe/issues/282 myst-parser[linkify] >= 0.15.1 setuptools-scm >= 6.0.1 -Sphinx >= 4.1.2 +Sphinx >= 4.1.2, < 4.4.0 # https://github.com/sphinx-doc/sphinx/issues/10112 sphinx-ansible-theme >= 0.8.0 sphinx-favicon >= 0.2 sphinx-js >= 3.1.2 From 87f02912b7e0eb13ef027eb547e1f3a50a40c3a9 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 7 Mar 2022 11:25:25 +0000 Subject: [PATCH 270/558] Fix minor docs build issues (#250) - tox 4 requires a space after `-` prefixes lines - .temp folder was not ignored (used by docs) --- .gitignore | 1 + tox.ini | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index ebb774630..22f3aeb81 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ vscode-ansible .tox .python-version __pycache__ +.temp diff --git a/tox.ini b/tox.ini index 050d89144..d63fab160 100644 --- a/tox.ini +++ b/tox.ini @@ -11,8 +11,8 @@ allowlist_externals = basepython = python3 commands_pre = # Retrieve possibly missing commits: - -git fetch --unshallow - -git fetch --tags + - git fetch --unshallow + - git fetch --tags changedir = {toxinidir}/docs sphinx_entrypoint = {envpython} -m sphinx sphinx_common_args = From b59218ba75798922f4ee929818e781ae999349c0 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Mon, 7 Mar 2022 17:04:35 +0530 Subject: [PATCH 271/558] Enhance fallback to --syntax-check logic (#243) * add patch for falling back to --syntax-check in all failure scenarios * declutter try-catch block * add logic to handle empty array scenario returned by executing ansible-lint command * update code for progressTracker to avoif if stamements * remove unnecessary falling back to syntax-check After debugging, I found that when ansible-lint internally calls --synatax-check and returns result, it is returned as an error. So, this had to be tackled in order to avoid unncecessary fallback to --syntax-check during validation. * remove unncessary console.log statements * update the fallback logic It has been found that ansible-lint is inconsistent in sending the linting problems, as in sometimes it sends as error and sometimes as simple result. This commit handles the cases and prevents fallback to syntax-check in unnecessary scenarios. * change warning message to info message in case there is nothing reported by ansible-lint * remove 'no error' message from console * add change note for the PR * update the change note * add spellings to c-spell dictionary * update change note * sort the dictionary --- .config/dictionary.txt | 22 +++++----- docs/changelog-fragments.d/243.feature.md | 9 ++++ src/services/ansibleLint.ts | 52 ++++++++++++----------- 3 files changed, 48 insertions(+), 35 deletions(-) create mode 100644 docs/changelog-fragments.d/243.feature.md diff --git a/.config/dictionary.txt b/.config/dictionary.txt index e675fe46e..e688ddcf7 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -1,14 +1,5 @@ -Ansible -Dpkg -FQCN -FQCNs -HORIZONTALLINE -Jenkinsfile -PYTHONHOME -TLDR -WSLENV -YOLO alphanums +Ansible ansible ansiblefest autocrlf @@ -26,12 +17,17 @@ devel dirhtml doctree doctrees +Dpkg dunamai endfor eqeqeq +FQCN +FQCNs globbing globby +HORIZONTALLINE installdeps +Jenkinsfile jsdoc lcov libyaml @@ -54,12 +50,16 @@ pkgcache prettierrc preversion pyparsing +PYTHONHOME pyup seealso showcontent +stderr +stdout suboption suboptions testorg +TLDR toctree todos towncrier @@ -73,7 +73,9 @@ whereis withserver wordwrap workdir +WSLENV xvfb +YOLO # names and usernames: Ganesh diff --git a/docs/changelog-fragments.d/243.feature.md b/docs/changelog-fragments.d/243.feature.md new file mode 100644 index 000000000..092339043 --- /dev/null +++ b/docs/changelog-fragments.d/243.feature.md @@ -0,0 +1,9 @@ +Enhanced the logic of ansible-lint service to do the following things by +--{user}`priyamsahoo`: + +- Fallback to `--syntax-check` in every failure scenarios (for eg. in case of + wrong arguments passed, etc) and give visual feedback to the user in terms of + notification about what went wrong. +- Handle different response types sent by ansible-lint (for e.g. ansible-lint + sends failure reports as stdout and sometimes as errors) by making them + uniform in terms of structure and redirection. diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts index a4bf68848..ed4d6ede8 100644 --- a/src/services/ansibleLint.ts +++ b/src/services/ansibleLint.ts @@ -83,15 +83,21 @@ export class AnsibleLint { const docPath = URI.parse(textDocument.uri).path; mountPaths.add(path.dirname(docPath)); - let progressTracker; - if (this.useProgressTracker) { - progressTracker = await this.connection.window.createWorkDoneProgress(); - } + + const progressTracker = this.useProgressTracker + ? await this.connection.window.createWorkDoneProgress() + : { + begin: () => {}, // eslint-disable-line @typescript-eslint/no-empty-function + done: () => {}, // eslint-disable-line @typescript-eslint/no-empty-function + }; + const ansibleLintConfigPromise = this.getAnsibleLintConfig( workingDirectory, ansibleLintConfigPath ); + progressTracker.begin('ansible-lint', undefined, 'Processing files...'); + const commandRunner = new CommandRunner( this.connection, this.context, @@ -99,14 +105,6 @@ export class AnsibleLint { ); try { - if (progressTracker) { - progressTracker.begin( - 'ansible-lint', - undefined, - 'Processing files...' - ); - } - // get Ansible configuration const result = await commandRunner.runCommand( 'ansible-lint', @@ -131,33 +129,37 @@ export class AnsibleLint { stdout: string; stderr: string; }; - if (execError.code === 2) { + + if (execError.stdout) { diagnostics = this.processReport( execError.stdout, await ansibleLintConfigPromise, workingDirectory ); } else { - if (progressTracker) { - progressTracker.done(); + if (execError.stderr) { + this.connection.console.info( + `[ansible-lint] ${execError.stderr}` + ); } + + progressTracker.done(); this.connection.window.showErrorMessage(execError.message); return -1; } - - if (execError.stderr) { - this.connection.console.info(`[ansible-lint] ${execError.stderr}`); - } } else { - this.connection.console.error( - `Exception in AnsibleLint service: ${JSON.stringify(error)}` - ); + const exceptionString = `Exception in AnsibleLint service: ${JSON.stringify( + error + )}`; + + progressTracker.done(); + this.connection.console.error(exceptionString); + this.connection.window.showErrorMessage(exceptionString); + return -1; } } - if (progressTracker) { - progressTracker.done(); - } + progressTracker.done(); } return diagnostics; } From 1e7f36cb899a2857bb20794670efd632c6e76627 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 7 Mar 2022 18:14:14 +0000 Subject: [PATCH 272/558] chore: pre-commit autoupdate (#251) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d7cab08a6..9d01f2077 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -88,7 +88,7 @@ repos: hooks: - id: prettier - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.31.0 + rev: v0.31.1 hooks: - id: markdownlint exclude: > @@ -96,7 +96,7 @@ repos: docs/changelog-fragments\.d/\d+\.\w+\.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.8.0 + rev: v8.10.0 hooks: - id: eslint args: From 8e84536c118fb3dbc4c7feb86352f9f954013b0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Giquel?= Date: Tue, 8 Mar 2022 12:27:03 +0100 Subject: [PATCH 273/558] Add link to Emacs LSP client (#252) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a41b37334..2f05d3893 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ following projects: - [Ansible extension for vscode/codium](https://github.com/ansible/vscode-ansible) - [Ansible extension for coc.nvim](https://github.com/yaegassy/coc-ansible) +- [Ansible client for Emacs LSP](https://emacs-lsp.github.io/lsp-mode/page/lsp-ansible/) ## Features From 4785b3f1335f5840a4d25f047d153654a9d94834 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 8 Mar 2022 12:46:50 +0000 Subject: [PATCH 274/558] Fix vscode testing pipeline (#254) --- .github/workflows/vscode.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/vscode.yml b/.github/workflows/vscode.yml index 7a50582b4..96f703123 100644 --- a/.github/workflows/vscode.yml +++ b/.github/workflows/vscode.yml @@ -29,13 +29,19 @@ jobs: with: node-version: 16 - - name: Link ansible-language-server into vscode-ansible + - name: Inject unreleased ansible-language-server into vscode-ansible extension + # do not try to use command below as vsce package is unable to work with symlinked modules: + # npm install --save ../ansible-language-server run: | set -ex mv vscode-ansible .. pushd ../vscode-ansible - npm install --save ../ansible-language-server - popd + npm ci # Install vscode-ansible dependencies + rm -rf node_modules/@ansible/ansible-language-server + cp -r ../ansible-language-server node_modules/@ansible/ansible-language-server + npm ls + # npm install --save ../ansible-language-server + npm run package - name: >- Run test-ui with vscode-ansible From c13ea3de966bf7dc8f3b891ff5c407f7b4092fa4 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 8 Mar 2022 12:46:31 +0000 Subject: [PATCH 275/558] Make ansible syntax check fallback more resilient --- src/providers/validationProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts index 74e287e29..2fb45293e 100644 --- a/src/providers/validationProvider.ts +++ b/src/providers/validationProvider.ts @@ -58,7 +58,7 @@ export async function doValidate( console.debug( 'Ansible-lint command execution failed. Falling back to ansible syntax-check' ); - connection.window.showInformationMessage( + connection?.window.showInformationMessage( 'Falling back to ansible syntax-check.' ); } From fdc28b507726a251ea80133ba8fa75175bf29236 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Wed, 9 Mar 2022 13:13:46 +0530 Subject: [PATCH 276/558] Add tests for hoverProvider (#256) * add tests for ansible diagnostics using ansible-playbook --synatx-check * remove unnecessary eslint-disable-next-line quotes * add test for yaml validation * simplify expect statement to run test * add test for validation using ansible-lint * restructure tests in validation using ansible-playbook --syntax-check * add function to create validation manager for testing purpose * update doValidate tests with direct calling of the API * add clientCapabilities for workspaceManager * add connection listening capabilities to avoid exceptions * add tests for falling back to syntax-check incase of ansible-lint command failure * add logic to revert back changed settings during testing * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * replace gibberish test with meaningful phrase * add 'yammlint' to dictionary * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .config/dictionary.txt | 1 + test/fixtures/diagnostics/empty.yml | 0 test/fixtures/diagnostics/invalid_yaml.yml | 8 + test/fixtures/diagnostics/lint_errors.yml | 16 + test/fixtures/diagnostics/noHost.yml | 4 + test/helper.ts | 23 +- test/providers/validationProvider.test.ts | 433 +++++++++++++++++++++ 7 files changed, 484 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/diagnostics/empty.yml create mode 100644 test/fixtures/diagnostics/invalid_yaml.yml create mode 100644 test/fixtures/diagnostics/lint_errors.yml create mode 100644 test/fixtures/diagnostics/noHost.yml create mode 100644 test/providers/validationProvider.test.ts diff --git a/.config/dictionary.txt b/.config/dictionary.txt index e688ddcf7..b16da021d 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -75,6 +75,7 @@ wordwrap workdir WSLENV xvfb +yammlint YOLO # names and usernames: diff --git a/test/fixtures/diagnostics/empty.yml b/test/fixtures/diagnostics/empty.yml new file mode 100644 index 000000000..e69de29bb diff --git a/test/fixtures/diagnostics/invalid_yaml.yml b/test/fixtures/diagnostics/invalid_yaml.yml new file mode 100644 index 000000000..4330c0ad4 --- /dev/null +++ b/test/fixtures/diagnostics/invalid_yaml.yml @@ -0,0 +1,8 @@ +--- +- name: + hosts: localhost + tasks: + # This following line is invalid and has been kept this way to test the YAML diagnostics features of extension. + # The file is ignored while running yammlint pre-commit hook. + - debug: msg="foo: bar" +become: true diff --git a/test/fixtures/diagnostics/lint_errors.yml b/test/fixtures/diagnostics/lint_errors.yml new file mode 100644 index 000000000..e99660773 --- /dev/null +++ b/test/fixtures/diagnostics/lint_errors.yml @@ -0,0 +1,16 @@ +--- +- name: Test play + hosts: localhost + vars: + MY_VAR: faulty + tasks: + - ansible.builtin.debug: + msg: Happy debugging + + - name: Comparison + ansible.builtin.ping: + data: 10101 + when: MY_VAR != '' + + - name: this would typically fire deprecated-command-syntax + command: warn=no chmod 644 X diff --git a/test/fixtures/diagnostics/noHost.yml b/test/fixtures/diagnostics/noHost.yml new file mode 100644 index 000000000..7c42a8164 --- /dev/null +++ b/test/fixtures/diagnostics/noHost.yml @@ -0,0 +1,4 @@ +- name: play name + tasks: + - name: task 1 + debug: diff --git a/test/helper.ts b/test/helper.ts index db7cdf5be..7ca1e1918 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -2,7 +2,8 @@ import { TextDocument } from 'vscode-languageserver-textdocument'; import * as path from 'path'; import { promises as fs } from 'fs'; import { WorkspaceManager } from '../src/services/workspaceManager'; -import { createConnection } from 'vscode-languageserver/node'; +import { createConnection, TextDocuments } from 'vscode-languageserver/node'; +import { ValidationManager } from '../src/services/validationManager'; const FIXTURES_BASE_PATH = path.join('test', 'fixtures'); @@ -36,5 +37,25 @@ export function createTestWorkspaceManager(): WorkspaceManager { const connection = createConnection(); const workspaceManager = new WorkspaceManager(connection); + workspaceManager.clientCapabilities.window = { + showMessage: { messageActionItem: { additionalPropertiesSupport: false } }, + showDocument: { support: true }, + workDoneProgress: true, + }; + + connection.listen(); return workspaceManager; } + +export function createTestValidationManager(): ValidationManager { + process.argv.push('--node-ipc'); + const connection = createConnection(); + + const documents: TextDocuments = new TextDocuments( + TextDocument + ); + const validationManager = new ValidationManager(connection, documents); + + connection.listen(); + return validationManager; +} diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts new file mode 100644 index 000000000..58a98406c --- /dev/null +++ b/test/providers/validationProvider.test.ts @@ -0,0 +1,433 @@ +import { expect } from 'chai'; +import { Position } from 'vscode-languageserver'; +import { + doValidate, + getYamlValidation, +} from '../../src/providers/validationProvider'; +import { + createTestValidationManager, + createTestWorkspaceManager, + getDoc, + setFixtureAnsibleCollectionPathEnv, +} from '../helper'; + +setFixtureAnsibleCollectionPathEnv(); + +describe('doValidate()', () => { + const workspaceManager = createTestWorkspaceManager(); + const validationManager = createTestValidationManager(); + + describe('Get validation only from cache', () => { + it('should provide no diagnostics', async function () { + const textDoc = await getDoc('diagnostics/lint_errors.yml'); + + const actualDiagnostics = await doValidate(textDoc, validationManager); + + expect(actualDiagnostics.size).to.equal(0); + }); + }); + + describe('Ansible diagnostics', () => { + describe('Diagnostics using ansible-lint', () => { + const tests = [ + { + name: 'specific ansible lint errors', + file: 'diagnostics/lint_errors.yml', + diagnosticReport: [ + { + severity: 1, + message: 'violates variable naming standards', + range: { + start: { line: 4, character: 0 } as Position, + end: { + line: 4, + character: Number.MAX_SAFE_INTEGER, + } as Position, + }, + source: 'Ansible', + }, + { + severity: 1, + message: 'All tasks should be named', + range: { + start: { line: 6, character: 0 } as Position, + end: { + line: 6, + character: Number.MAX_SAFE_INTEGER, + } as Position, + }, + source: 'Ansible', + }, + { + severity: 1, + // eslint-disable-next-line quotes + message: "Don't compare to empty string", + range: { + start: { line: 9, character: 0 } as Position, + end: { + line: 9, + character: Number.MAX_SAFE_INTEGER, + } as Position, + }, + source: 'Ansible', + }, + { + severity: 1, + message: + 'Commands should not change things if nothing needs doing', + range: { + start: { line: 14, character: 0 } as Position, + end: { + line: 14, + character: Number.MAX_SAFE_INTEGER, + } as Position, + }, + source: 'Ansible', + }, + ], + }, + { + name: 'empty playbook', + file: 'diagnostics/empty.yml', + diagnosticReport: [ + { + severity: 1, + message: '[syntax-check] Empty playbook, nothing to do', + range: { + start: { line: 0, character: 0 } as Position, + end: { + line: 0, + character: Number.MAX_SAFE_INTEGER, + } as Position, + }, + source: 'Ansible', + }, + ], + }, + { + name: 'no host', + file: 'diagnostics/noHost.yml', + diagnosticReport: [ + { + severity: 1, + message: '[syntax-check] Ansible syntax check failed', + range: { + start: { line: 0, character: 0 } as Position, + end: { + line: 0, + character: Number.MAX_SAFE_INTEGER, + } as Position, + }, + source: 'Ansible', + }, + ], + }, + ]; + + tests.forEach(({ name, file, diagnosticReport }) => { + it(`should provide diagnostics for ${name}`, async function () { + const textDoc = await getDoc(file); + const context = workspaceManager.getContext(textDoc.uri); + + const actualDiagnostics = await doValidate( + textDoc, + validationManager, + false, + context + ); + + if (diagnosticReport.length === 0) { + expect(actualDiagnostics.has(`file://${textDoc.uri}`)).to.be.false; + } else { + expect( + actualDiagnostics.get(`file://${textDoc.uri}`).length + ).to.equal(diagnosticReport.length); + + actualDiagnostics + .get(`file://${textDoc.uri}`) + .forEach((diag, i) => { + const actDiag = diag; + const expDiag = diagnosticReport[i]; + + expect(actDiag.message).include(expDiag.message); + expect(actDiag.range).to.deep.equal(expDiag.range); + expect(actDiag.severity).to.equal(expDiag.severity); + expect(actDiag.source).to.equal(expDiag.source); + }); + } + }); + }); + }); + + describe('Diagnostics after falling back to --syntax-check due to change in settings', () => { + const tests = [ + { + name: 'no specific ansible lint errors', + file: 'diagnostics/lint_errors.yml', + diagnosticReport: [], + }, + { + name: 'empty playbook', + file: 'diagnostics/empty.yml', + diagnosticReport: [], + }, + { + name: 'no host', + file: 'diagnostics/noHost.yml', + diagnosticReport: [ + { + severity: 1, + // eslint-disable-next-line quotes + message: "the field 'hosts' is required but was not set", + range: { + start: { line: 0, character: 0 } as Position, + end: { + line: 0, + character: Number.MAX_SAFE_INTEGER, + } as Position, + }, + source: 'Ansible', + }, + ], + }, + ]; + + tests.forEach(({ name, file, diagnosticReport }) => { + it(`should provide diagnostics for ${name}`, async function () { + const textDoc = await getDoc(file); + const context = workspaceManager.getContext(textDoc.uri); + + // Update setting to disable ansible-lint + const docSettings = context.documentSettings.get(textDoc.uri); + const cachedDefaultSetting = (await docSettings).ansibleLint.enabled; + (await docSettings).ansibleLint.enabled = false; + + const actualDiagnostics = await doValidate( + textDoc, + validationManager, + false, + context + ); + + if (diagnosticReport.length === 0) { + expect(actualDiagnostics.has(`file://${textDoc.uri}`)).to.be.false; + } else { + expect( + actualDiagnostics.get(`file://${textDoc.uri}`).length + ).to.equal(diagnosticReport.length); + + actualDiagnostics + .get(`file://${textDoc.uri}`) + .forEach((diag, i) => { + const actDiag = diag; + const expDiag = diagnosticReport[i]; + + expect(actDiag.message).include(expDiag.message); + expect(actDiag.range).to.deep.equal(expDiag.range); + expect(actDiag.severity).to.equal(expDiag.severity); + expect(actDiag.source).to.equal(expDiag.source); + }); + } + + (await docSettings).ansibleLint.enabled = cachedDefaultSetting; + }); + }); + }); + describe('Diagnostics after falling back to --syntax-check due to unavailability of ansible-lint', () => { + const tests = [ + { + name: 'no specific ansible lint errors', + file: 'diagnostics/lint_errors.yml', + diagnosticReport: [], + }, + { + name: 'no host', + file: 'diagnostics/noHost.yml', + diagnosticReport: [ + { + severity: 1, + // eslint-disable-next-line quotes + message: "the field 'hosts' is required but was not set", + range: { + start: { line: 0, character: 0 } as Position, + end: { + line: 0, + character: Number.MAX_SAFE_INTEGER, + } as Position, + }, + source: 'Ansible', + }, + ], + }, + ]; + + tests.forEach(({ name, file, diagnosticReport }) => { + it(`should provide diagnostics for ${name}`, async function () { + const textDoc = await getDoc(file); + const context = workspaceManager.getContext(textDoc.uri); + + // Update setting to disable ansible-lint + const docSettings = context.documentSettings.get(textDoc.uri); + const cachedDefaultSetting = (await docSettings).ansibleLint.path; + (await docSettings).ansibleLint.path = 'invalid-ansible-lint-path'; + + const actualDiagnostics = await doValidate( + textDoc, + validationManager, + false, + context + ); + + if (diagnosticReport.length === 0) { + expect(actualDiagnostics.has(`file://${textDoc.uri}`)).to.be.false; + } else { + expect( + actualDiagnostics.get(`file://${textDoc.uri}`).length + ).to.equal(diagnosticReport.length); + + actualDiagnostics + .get(`file://${textDoc.uri}`) + .forEach((diag, i) => { + const actDiag = diag; + const expDiag = diagnosticReport[i]; + + expect(actDiag.message).include(expDiag.message); + expect(actDiag.range).to.deep.equal(expDiag.range); + expect(actDiag.severity).to.equal(expDiag.severity); + expect(actDiag.source).to.equal(expDiag.source); + }); + } + + // Revert setting + (await docSettings).ansibleLint.path = cachedDefaultSetting; + }); + }); + }); + + describe('Diagnostics after falling back to --syntax-check due to failure in execution of ansible-lint command', () => { + const tests = [ + { + name: 'no specific ansible lint errors', + file: 'diagnostics/lint_errors.yml', + diagnosticReport: [], + }, + { + name: 'no host', + file: 'diagnostics/noHost.yml', + diagnosticReport: [ + { + severity: 1, + // eslint-disable-next-line quotes + message: "the field 'hosts' is required but was not set", + range: { + start: { line: 0, character: 0 } as Position, + end: { + line: 0, + character: Number.MAX_SAFE_INTEGER, + } as Position, + }, + source: 'Ansible', + }, + ], + }, + ]; + + tests.forEach(({ name, file, diagnosticReport }) => { + it(`should provide diagnostics for ${name}`, async function () { + const textDoc = await getDoc(file); + const context = workspaceManager.getContext(textDoc.uri); + + // Update setting to make the ansible-lint command fail + const docSettings = context.documentSettings.get(textDoc.uri); + const cachedDefaultSetting = (await docSettings).ansibleLint + .arguments; + (await docSettings).ansibleLint.arguments = '-f invalid_argument'; + + const actualDiagnostics = await doValidate( + textDoc, + validationManager, + false, + context + ); + + if (diagnosticReport.length === 0) { + expect(actualDiagnostics.has(`file://${textDoc.uri}`)).to.be.false; + } else { + expect( + actualDiagnostics.get(`file://${textDoc.uri}`).length + ).to.equal(diagnosticReport.length); + + actualDiagnostics + .get(`file://${textDoc.uri}`) + .forEach((diag, i) => { + const actDiag = diag; + const expDiag = diagnosticReport[i]; + + expect(actDiag.message).include(expDiag.message); + expect(actDiag.range).to.deep.equal(expDiag.range); + expect(actDiag.severity).to.equal(expDiag.severity); + expect(actDiag.source).to.equal(expDiag.source); + }); + } + + (await docSettings).ansibleLint.arguments = cachedDefaultSetting; + }); + }); + }); + }); + + describe('YAML diagnostics', () => { + const tests = [ + { + name: 'invalid YAML', + file: 'diagnostics/invalid_yaml.yml', + diagnosticReport: [ + { + severity: 1, + message: 'Nested mappings are not allowed', + range: { + start: { line: 6, character: 13 } as Position, + end: { + line: 6, + character: 13, + } as Position, + }, + source: 'Ansible [YAML]', + }, + { + severity: 1, + message: 'Document contains trailing content', + range: { + start: { line: 7, character: 0 } as Position, + end: { + line: 8, + character: 0, + } as Position, + }, + source: 'Ansible [YAML]', + }, + ], + }, + ]; + + tests.forEach(({ name, file, diagnosticReport }) => { + it(`should provide diagnostic for ${name}`, async function () { + const textDoc = await getDoc(file); + + const actualDiagnostics = getYamlValidation(textDoc); + + expect(actualDiagnostics.length).to.equal(diagnosticReport.length); + + actualDiagnostics.forEach((diag, i) => { + const actDiag = diag; + const expDiag = diagnosticReport[i]; + + expect(actDiag.message).include(expDiag.message); + expect(actDiag.range).to.deep.equal(expDiag.range); + expect(actDiag.severity).to.equal(expDiag.severity); + expect(actDiag.source).to.equal(expDiag.source); + }); + }); + }); + }); +}); From 6ba5d8f733eb723b42e35d89f0c8f46ee41a43e1 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 9 Mar 2022 10:22:43 +0000 Subject: [PATCH 277/558] Simplify docs requirements (#257) --- docs/requirements.txt | 311 ++++++++---------------------------------- 1 file changed, 55 insertions(+), 256 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index db40817df..c02d48b54 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -2,242 +2,84 @@ # This file is autogenerated by pip-compile with python 3.10 # To update, run: # -# pip-compile --allow-unsafe --generate-hashes --output-file=docs/requirements.txt --strip-extras docs/requirements.in +# pip-compile --output-file=docs/requirements.txt --strip-extras docs/requirements.in # -alabaster==0.7.12 \ - --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ - --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 +alabaster==0.7.12 # via sphinx -ansible-pygments==0.1.0 \ - --hash=sha256:055a46de4b745b1090fc596aba15c9324fe346a7b048955995b5337393e541f9 \ - --hash=sha256:0c106912afcb0115444f79152687731436b30b69bf230f09a0b1127bd7a9b9ef +ansible-pygments==0.1.0 # via sphinx-ansible-theme -attrs==21.2.0 \ - --hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \ - --hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb +attrs==21.2.0 # via markdown-it-py -babel==2.9.1 \ - --hash=sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9 \ - --hash=sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0 +babel==2.9.1 # via sphinx -certifi==2021.10.8 \ - --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \ - --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569 +certifi==2021.10.8 # via requests -charset-normalizer==2.0.8 \ - --hash=sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0 \ - --hash=sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405 +charset-normalizer==2.0.8 # via requests -click==8.0.3 \ - --hash=sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3 \ - --hash=sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b +click==8.0.3 # via towncrier -click-default-group==1.2.2 \ - --hash=sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904 +click-default-group==1.2.2 # via towncrier -docutils==0.17.1 \ - --hash=sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125 \ - --hash=sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61 +docutils==0.17.1 # via # myst-parser # sphinx # sphinx-rtd-theme -idna==3.3 \ - --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ - --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d +idna==3.3 # via requests -imagesize==1.3.0 \ - --hash=sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c \ - --hash=sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d +imagesize==1.3.0 # via sphinx -incremental==21.3.0 \ - --hash=sha256:02f5de5aff48f6b9f665d99d48bfc7ec03b6e3943210de7cfc88856d755d6f57 \ - --hash=sha256:92014aebc6a20b78a8084cdd5645eeaa7f74b8933f70fa3ada2cfbd1e3b54321 +incremental==21.3.0 # via towncrier -jinja2==2.11.3 \ - --hash=sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419 \ - --hash=sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6 +jinja2==2.11.3 # via # myst-parser # sphinx # sphinx-js # towncrier -linkify-it-py==1.0.2 \ - --hash=sha256:4f416e72a41d9a00ecf1270ffb28b033318e458ac1144eb7c326563968a5dd24 \ - --hash=sha256:6c37ef4fc3001b38bc2359ccb5dc7e54388ec5d54fe46d2dbcd9a081f90fdbe3 +linkify-it-py==1.0.2 # via myst-parser -markdown-it-py==1.1.0 \ - --hash=sha256:36be6bb3ad987bfdb839f5ba78ddf094552ca38ccbd784ae4f74a4e1419fc6e3 \ - --hash=sha256:98080fc0bc34c4f2bcf0846a096a9429acbd9d5d8e67ed34026c03c61c464389 +markdown-it-py==1.1.0 # via # mdit-py-plugins # myst-parser -markupsafe==2.0.1 \ - --hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \ - --hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \ - --hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \ - --hash=sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194 \ - --hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \ - --hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \ - --hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \ - --hash=sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74 \ - --hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \ - --hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \ - --hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \ - --hash=sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a \ - --hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \ - --hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \ - --hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \ - --hash=sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38 \ - --hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \ - --hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \ - --hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \ - --hash=sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047 \ - --hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \ - --hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \ - --hash=sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b \ - --hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \ - --hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \ - --hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \ - --hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \ - --hash=sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1 \ - --hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \ - --hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \ - --hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \ - --hash=sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee \ - --hash=sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f \ - --hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \ - --hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \ - --hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \ - --hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \ - --hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \ - --hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \ - --hash=sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86 \ - --hash=sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6 \ - --hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \ - --hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \ - --hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \ - --hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \ - --hash=sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e \ - --hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \ - --hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \ - --hash=sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f \ - --hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \ - --hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \ - --hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \ - --hash=sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145 \ - --hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \ - --hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \ - --hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \ - --hash=sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a \ - --hash=sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207 \ - --hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \ - --hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \ - --hash=sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd \ - --hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \ - --hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \ - --hash=sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9 \ - --hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \ - --hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \ - --hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \ - --hash=sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51 \ - --hash=sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872 - # via jinja2 -mdit-py-plugins==0.2.8 \ - --hash=sha256:1833bf738e038e35d89cb3a07eb0d227ed647ce7dd357579b65343740c6d249c \ - --hash=sha256:5991cef645502e80a5388ec4fc20885d2313d4871e8b8e320ca2de14ac0c015f +markupsafe==2.0.1 + # via + # -r docs/requirements.in + # jinja2 +mdit-py-plugins==0.2.8 # via myst-parser -myst-parser==0.15.2 \ - --hash=sha256:40124b6f27a4c42ac7f06b385e23a9dcd03d84801e9c7130b59b3729a554b1f9 \ - --hash=sha256:f7f3b2d62db7655cde658eb5d62b2ec2a4631308137bd8d10f296a40d57bbbeb +myst-parser==0.15.2 # via -r docs/requirements.in -packaging==21.3 \ - --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ - --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 +packaging==21.3 # via # setuptools-scm # sphinx -parsimonious==0.7.0 \ - --hash=sha256:396d424f64f834f9463e81ba79a331661507a21f1ed7b644f7f6a744006fd938 +parsimonious==0.7.0 # via sphinx-js -pbr==5.8.0 \ - --hash=sha256:176e8560eaf61e127817ef93d8a844803abb27a4d4637f0ff3bb783129be2e0a \ - --hash=sha256:672d8ebee84921862110f23fcec2acea191ef58543d34dfe9ef3d9f13c31cddf +pbr==5.8.0 # via sphinxcontrib-apidoc -pyenchant==3.2.2 \ - --hash=sha256:1cf830c6614362a78aab78d50eaf7c6c93831369c52e1bb64ffae1df0341e637 \ - --hash=sha256:5a636832987eaf26efe971968f4d1b78e81f62bca2bde0a9da210c7de43c3bce \ - --hash=sha256:5facc821ece957208a81423af7d6ec7810dad29697cb0d77aae81e4e11c8e5a6 \ - --hash=sha256:6153f521852e23a5add923dbacfbf4bebbb8d70c4e4bad609a8e0f9faeb915d1 +pyenchant==3.2.2 # via sphinxcontrib-spelling -pygments==2.10.0 \ - --hash=sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380 \ - --hash=sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6 +pygments==2.10.0 # via # ansible-pygments # sphinx -pyparsing==3.0.6 \ - --hash=sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4 \ - --hash=sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81 +pyparsing==3.0.6 # via packaging -pytz==2021.3 \ - --hash=sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c \ - --hash=sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326 +pytz==2021.3 # via babel -pyyaml==6.0 \ - --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ - --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ - --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ - --hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \ - --hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \ - --hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \ - --hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \ - --hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \ - --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ - --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ - --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ - --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ - --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ - --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ - --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 \ - --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ - --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ - --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ - --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ - --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ - --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ - --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ - --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ - --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ - --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ - --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ - --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ - --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ - --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ - --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ - --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ - --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ - --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 +pyyaml==6.0 # via myst-parser -requests==2.26.0 \ - --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ - --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 +requests==2.26.0 # via sphinx -setuptools-scm==6.3.2 \ - --hash=sha256:4c64444b1d49c4063ae60bfe1680f611c8b13833d556fd1d6050c0023162a119 \ - --hash=sha256:a49aa8081eeb3514eb9728fa5040f2eaa962d6c6f4ec9c32f6c1fba88f88a0f2 +setuptools-scm==6.3.2 # via -r docs/requirements.in -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +six==1.16.0 # via parsimonious -snowballstemmer==2.2.0 \ - --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ - --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a +snowballstemmer==2.2.0 # via sphinx -sphinx==4.3.1 \ - --hash=sha256:048dac56039a5713f47a554589dc98a442b39226a2b9ed7f82797fcb2fe9253f \ - --hash=sha256:32a5b3e9a1b176cc25ed048557d4d3d01af635e6b76c5bc7a43b0a34447fbd45 +sphinx==4.3.1 # via # -r docs/requirements.in # myst-parser @@ -248,87 +90,44 @@ sphinx==4.3.1 \ # sphinxcontrib-apidoc # sphinxcontrib-spelling # sphinxcontrib-towncrier -sphinx-ansible-theme==0.8.0 \ - --hash=sha256:998adeec8cef058308c545b16ff87e63098b89412ebefb7b36c1e400398c5a4a \ - --hash=sha256:eb4088c241851fe9e73b048ccd341461a01ef10138d1d137c75d788ad1909b35 +sphinx-ansible-theme==0.8.0 # via -r docs/requirements.in -sphinx-favicon==0.2 \ - --hash=sha256:0b17cb0f9b97fb99172d47fb11fbdd0aadb26cbe0f6368e81843176ca18d06e6 \ - --hash=sha256:73436a1f5f80c4fcae6eadd2520b9c2bc6c1aec0d91d153b3774359bdd103a58 +sphinx-favicon==0.2 # via -r docs/requirements.in -sphinx-js==3.1.2 \ - --hash=sha256:04fe0d2fec6d39b505d70500d0132cfa0efc834760c9598048c1a9dbbc175732 \ - --hash=sha256:4503accb74ba3a15e0e59e20ec18b15be1932b2c8e8b82e03ace39a415899785 +sphinx-js==3.1.2 # via -r docs/requirements.in -sphinx-notfound-page==0.8 \ - --hash=sha256:1901e01df9931922e87ef1f967042322b06a65790132cbd393861261e023b974 \ - --hash=sha256:39bf5b99e1fbf6164631ecac2b58038f08e0ab9278c563076aadd1cf04b6bb7a +sphinx-notfound-page==0.8 # via -r docs/requirements.in -sphinx-rtd-theme==1.0.0 \ - --hash=sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8 \ - --hash=sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c +sphinx-rtd-theme==1.0.0 # via sphinx-ansible-theme -sphinxcontrib-apidoc==0.3.0 \ - --hash=sha256:6671a46b2c6c5b0dca3d8a147849d159065e50443df79614f921b42fbd15cb09 \ - --hash=sha256:729bf592cf7b7dd57c4c05794f732dc026127275d785c2a5494521fdde773fb9 +sphinxcontrib-apidoc==0.3.0 # via -r docs/requirements.in -sphinxcontrib-applehelp==1.0.2 \ - --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a \ - --hash=sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58 +sphinxcontrib-applehelp==1.0.2 # via sphinx -sphinxcontrib-devhelp==1.0.2 \ - --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e \ - --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 +sphinxcontrib-devhelp==1.0.2 # via sphinx -sphinxcontrib-htmlhelp==2.0.0 \ - --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 \ - --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 +sphinxcontrib-htmlhelp==2.0.0 # via sphinx -sphinxcontrib-jsmath==1.0.1 \ - --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ - --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 +sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-qthelp==1.0.3 \ - --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \ - --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 +sphinxcontrib-qthelp==1.0.3 # via sphinx -sphinxcontrib-serializinghtml==1.1.5 \ - --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd \ - --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 +sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sphinxcontrib-spelling==7.3.2 \ - --hash=sha256:1b99cdb1a30271c7080ec5b968dfc243c2540a960afdc4c052cd59dfe8d94c54 \ - --hash=sha256:9d66dc4990749c5ac52e7eaf17e82f4dc6b4aff6515d26bbf48821829d41bd02 +sphinxcontrib-spelling==7.3.2 # via -r docs/requirements.in -sphinxcontrib-towncrier==0.2.0a0 \ - --hash=sha256:31eed078e0a8b4c38dc30978dac8c53e2dfa7342ad8597d11816d1ea9ab0eabb \ - --hash=sha256:3cd4295c0198e753d964e2c06ee4ecd91a73a8d103385d08af9b05487ae68dd0 +sphinxcontrib-towncrier==0.2.0a0 # via -r docs/requirements.in -toml==0.10.2 \ - --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ - --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f +toml==0.10.2 # via towncrier -tomli==1.2.2 \ - --hash=sha256:c6ce0015eb38820eaf32b5db832dbc26deb3dd427bd5f6556cf0acac2c214fee \ - --hash=sha256:f04066f68f5554911363063a30b108d2b5a5b1a010aa8b6132af78489fe3aade +tomli==1.2.2 # via setuptools-scm -towncrier==21.3.0 \ - --hash=sha256:6eed0bc924d72c98c000cb8a64de3bd566e5cb0d11032b73fcccf8a8f956ddfe \ - --hash=sha256:e6ccec65418bbcb8de5c908003e130e37fe0e9d6396cb77c1338241071edc082 +towncrier==21.3.0 # via sphinxcontrib-towncrier -uc-micro-py==1.0.1 \ - --hash=sha256:316cfb8b6862a0f1d03540f0ae6e7b033ff1fa0ddbe60c12cbe0d4cec846a69f \ - --hash=sha256:b7cdf4ea79433043ddfe2c82210208f26f7962c0cfbe3bacb05ee879a7fdb596 +uc-micro-py==1.0.1 # via linkify-it-py -urllib3==1.26.7 \ - --hash=sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece \ - --hash=sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844 +urllib3==1.26.7 # via requests # The following packages are considered to be unsafe in a requirements file: -setuptools==59.4.0 \ - --hash=sha256:b4c634615a0cf5b02cf83c7bedffc8da0ca439f00e79452699454da6fbd4153d \ - --hash=sha256:feb5ff19b354cde9efd2344ef6d5e79880ce4be643037641b49508bbb850d060 - # via - # setuptools-scm - # sphinx +# setuptools From cfbd23f1336d0353bfd7e13c29ded9704f9f4bd9 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 9 Mar 2022 10:57:13 +0000 Subject: [PATCH 278/558] Standardize documentation building (#258) --- .github/workflows/ci.yml | 6 +-- .gitignore | 1 + tox.ini | 87 ++++++++++------------------------------ 3 files changed, 24 insertions(+), 70 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7e7bbfb45..e06599427 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -320,7 +320,7 @@ jobs: path: ${{ needs.pre-setup.outputs.tarball-artifact-name }} docs: - name: 📚 ${{ matrix.toxenv }} + name: docs runs-on: ${{ matrix.os }}-latest strategy: @@ -331,9 +331,7 @@ jobs: - >- 3.10 toxenv: - - build-docs - - linkcheck-docs - - spellcheck-docs + - docs fail-fast: false env: diff --git a/.gitignore b/.gitignore index 22f3aeb81..8906347e2 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ vscode-ansible .python-version __pycache__ .temp +UNKNOWN.egg-info diff --git a/tox.ini b/tox.ini index d63fab160..83f6da165 100644 --- a/tox.ini +++ b/tox.ini @@ -6,47 +6,25 @@ skip_install = true [docs] +# do not use continuation with vars, see https://github.com/tox-dev/tox/issues/2069 +sphinx_common_args = + -j auto {tty:--color} -a -n -W --keep-going -T -d "{temp_dir}/.doctrees" . "{envdir}/docs_out" + +[testenv:docs] allowlist_externals = git -basepython = python3 +changedir = {toxinidir}/docs commands_pre = # Retrieve possibly missing commits: - git fetch --unshallow - git fetch --tags -changedir = {toxinidir}/docs -sphinx_entrypoint = {envpython} -m sphinx -sphinx_common_args = - -j auto \ - {tty:--color} \ - -a \ - -n \ - -W --keep-going \ - -T \ - -d "{temp_dir}/.doctrees" \ - . \ - "{envdir}/docs_out" -deps = - -r{toxinidir}/docs/requirements.txt - # FIXME: re-enable the "-r" + "-c" paradigm once the pip bug is fixed. - # Ref: https://github.com/pypa/pip/issues/9243 - # -r{toxinidir}/docs/requirements.in - # -c{toxinidir}/docs/requirements.txt -passenv = - SSH_AUTH_SOCK -skip_install = true -usedevelop = false - - -[testenv:build-docs] -allowlist_externals = {[docs]allowlist_externals} -basepython = {[docs]basepython} -changedir = {[docs]changedir} -commands_pre = {[docs]commands_pre} commands = - {[docs]sphinx_entrypoint} -b html {[docs]sphinx_common_args} + {envpython} -m sphinx -b html {[docs]sphinx_common_args} + {envpython} -m sphinx -b linkcheck {[docs]sphinx_common_args} + {envpython} -m sphinx -b spelling {[docs]sphinx_common_args} # Print out the output docs dir and a way to serve html: - -{envpython} -c\ + - {envpython} -c\ 'import pathlib;\ docs_dir = pathlib.Path(r"{envdir}") / "docs_out";\ index_file = docs_dir / "index.html";\ @@ -56,41 +34,18 @@ commands = \t$ python3 -m http.server --directory \ \N\{QUOTATION MARK\}\{docs_dir\}\N\{QUOTATION MARK\} 0\n\n" +\ "=" * 120)' -deps = {[docs]deps} -description = Build The Docs -passenv = {[docs]passenv} -skip_install = {[docs]skip_install} -usedevelop = {[docs]usedevelop} - -[testenv:linkcheck-docs] -allowlist_externals = - {[docs]allowlist_externals} -basepython = {[testenv:build-docs]basepython} -commands_pre = {[testenv:build-docs]commands_pre} -commands = - {[docs]sphinx_entrypoint} -b linkcheck {[docs]sphinx_common_args} -changedir = {[docs]changedir} -deps = {[docs]deps} -description = Linkcheck The Docs -passenv = {[docs]passenv} -skip_install = {[docs]skip_install} -usedevelop = {[docs]usedevelop} - - -[testenv:spellcheck-docs] -allowlist_externals = - {[docs]allowlist_externals} -basepython = {[testenv:build-docs]basepython} -commands_pre = {[testenv:build-docs]commands_pre} -commands = - {[docs]sphinx_entrypoint} -b spelling {[docs]sphinx_common_args} -changedir = {[docs]changedir} -deps = {[docs]deps} -description = Spellcheck The Docs -passenv = {[docs]passenv} -skip_install = {[docs]skip_install} -usedevelop = {[docs]usedevelop} +deps = + -r{toxinidir}/docs/requirements.txt + # FIXME: re-enable the "-r" + "-c" paradigm once the pip bug is fixed. + # Ref: https://github.com/pypa/pip/issues/9243 + # -r{toxinidir}/docs/requirements.in + # -c{toxinidir}/docs/requirements.txt +description = Build The Docs +passenv = + SSH_AUTH_SOCK +skip_install = true +usedevelop = false [testenv:make-changelog] From 30f8c26a9febaa65afcef93dcd5c0f28938673e4 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 9 Mar 2022 14:38:59 +0000 Subject: [PATCH 279/558] Simplify lint and docs runs on GHA (#259) --- .github/workflows/ci.yml | 36 +++++++++++------------------------- package.json | 2 +- tox.ini | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e06599427..7061ae3bc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -175,26 +175,6 @@ jobs: || steps.scm-version.outputs.dist-version-for-filenames }}.md') - lint: - env: - PIP_DISABLE_PIP_VERSION_CHECK: "1" - runs-on: Ubuntu-latest - steps: - - name: Fetch the src snapshot - uses: actions/checkout@v2 - with: - fetch-depth: 1 - ref: ${{ github.event.inputs.release-commitish }} - - name: Setup node - uses: actions/setup-node@v2 - - name: Install dependencies - run: | - python -m pip install --user --upgrade pip - python -m pip install -r test-requirements.txt - npm ci - - name: npm run lint - run: npm run lint - build: name: Build ${{ needs.pre-setup.outputs.git-tag }} needs: @@ -319,8 +299,8 @@ jobs: name: npm-package-tarball path: ${{ needs.pre-setup.outputs.tarball-artifact-name }} - docs: - name: docs + tox: + name: ${{ matrix.toxenv }} runs-on: ${{ matrix.os }}-latest strategy: @@ -332,12 +312,14 @@ jobs: 3.10 toxenv: - docs + - lint fail-fast: false env: + PIP_DISABLE_PIP_VERSION_CHECK: "1" PY_COLORS: 1 - TOX_PARALLEL_NO_SPINNER: 1 TOXENV: ${{ matrix.toxenv }} + TOX_PARALLEL_NO_SPINNER: 1 steps: - name: >- @@ -346,6 +328,11 @@ jobs: uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} + + - name: Setup node + if: contains(matrix.toxenv, 'lint') + uses: actions/setup-node@v2 + - name: >- Calculate Python interpreter version hash value for use in the cache key @@ -548,8 +535,7 @@ jobs: if: always() needs: - - docs - - lint + - tox # lint, docs - test # - vscode diff --git a/package.json b/package.json index 72c282810..17fd27ab5 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "compile": "tsc -p .", "coverage": "nyc report --reporter=text-lcov > out/coverage.lcov", "deps": "ncu -u && npm install", - "lint": "npm ci && pre-commit run -a", + "lint": "pre-commit run -a", "prepack": "npm ci && npm run compile", "//prepare": "Prepare is needed for installation from source", "prepare": "npm run compile", diff --git a/tox.ini b/tox.ini index 83f6da165..5fde37002 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,8 @@ # spell-checker:ignore toxinidir passenv usedevelop testenv basepython envpython linkcheck changedir envdir envlist minversion toxworkdir posargs envname [tox] envlist = + lint + docs minversion = 3.21.0 skip_install = true @@ -10,6 +12,11 @@ skip_install = true sphinx_common_args = -j auto {tty:--color} -a -n -W --keep-going -T -d "{temp_dir}/.doctrees" . "{envdir}/docs_out" +[testenv] +passenv = + CI + GITHUB_ACTIONS + [testenv:docs] allowlist_externals = git @@ -48,6 +55,16 @@ skip_install = true usedevelop = false +[testenv:lint] +description = Run all linters +deps = + pre-commit >= 2.17.0 +commands = + # Commands are the same as running `npm run lint`: + pre-commit run -a +skip_install = true + + [testenv:make-changelog] basepython = python3 depends = From 109927b65ea503d22222485fe97974522b0fe835 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Fri, 11 Mar 2022 14:13:25 +0530 Subject: [PATCH 280/558] replace Number.MAX_SAFE_INTEGER to integer.MAX_VALUE --- src/services/ansibleLint.ts | 3 ++- src/services/ansiblePlaybook.ts | 3 ++- src/services/validationManager.ts | 3 ++- test/providers/validationProvider.test.ts | 20 ++++++++++---------- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts index ed4d6ede8..e60cf963e 100644 --- a/src/services/ansibleLint.ts +++ b/src/services/ansibleLint.ts @@ -7,6 +7,7 @@ import { Diagnostic, DiagnosticSeverity, DidChangeWatchedFilesParams, + integer, Position, Range, } from 'vscode-languageserver'; @@ -197,7 +198,7 @@ export class AnsibleLint { }; const end: Position = { line: begin_line - 1, - character: Number.MAX_SAFE_INTEGER, + character: integer.MAX_VALUE, }; const range: Range = { start: start, diff --git a/src/services/ansiblePlaybook.ts b/src/services/ansiblePlaybook.ts index 544f1e9a6..736a4ff0c 100644 --- a/src/services/ansiblePlaybook.ts +++ b/src/services/ansiblePlaybook.ts @@ -5,6 +5,7 @@ import { Connection, Diagnostic, DiagnosticSeverity, + integer, Position, Range, } from 'vscode-languageserver'; @@ -134,7 +135,7 @@ export class AnsiblePlaybook { }; const end: Position = { line: line - 1, - character: Number.MAX_SAFE_INTEGER, + character: integer.MAX_VALUE, }; const range: Range = { start, diff --git a/src/services/validationManager.ts b/src/services/validationManager.ts index 736e942d1..2a7df2591 100644 --- a/src/services/validationManager.ts +++ b/src/services/validationManager.ts @@ -2,6 +2,7 @@ import IntervalTree from '@flatten-js/interval-tree'; import { Connection, Diagnostic, + integer, TextDocumentContentChangeEvent, TextDocuments, } from 'vscode-languageserver'; @@ -136,7 +137,7 @@ export class ValidationManager { if (displacement) { const displacedDiagnostics = diagnosticTree.search([ change.range.start.line, - Number.MAX_SAFE_INTEGER, + integer.MAX_VALUE, ]); if (displacedDiagnostics) { for (const diagnostic of displacedDiagnostics as Array) { diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts index 58a98406c..5affa83f7 100644 --- a/test/providers/validationProvider.test.ts +++ b/test/providers/validationProvider.test.ts @@ -1,5 +1,5 @@ import { expect } from 'chai'; -import { Position } from 'vscode-languageserver'; +import { Position, integer } from 'vscode-languageserver'; import { doValidate, getYamlValidation, @@ -41,7 +41,7 @@ describe('doValidate()', () => { start: { line: 4, character: 0 } as Position, end: { line: 4, - character: Number.MAX_SAFE_INTEGER, + character: integer.MAX_VALUE, } as Position, }, source: 'Ansible', @@ -53,7 +53,7 @@ describe('doValidate()', () => { start: { line: 6, character: 0 } as Position, end: { line: 6, - character: Number.MAX_SAFE_INTEGER, + character: integer.MAX_VALUE, } as Position, }, source: 'Ansible', @@ -66,7 +66,7 @@ describe('doValidate()', () => { start: { line: 9, character: 0 } as Position, end: { line: 9, - character: Number.MAX_SAFE_INTEGER, + character: integer.MAX_VALUE, } as Position, }, source: 'Ansible', @@ -79,7 +79,7 @@ describe('doValidate()', () => { start: { line: 14, character: 0 } as Position, end: { line: 14, - character: Number.MAX_SAFE_INTEGER, + character: integer.MAX_VALUE, } as Position, }, source: 'Ansible', @@ -97,7 +97,7 @@ describe('doValidate()', () => { start: { line: 0, character: 0 } as Position, end: { line: 0, - character: Number.MAX_SAFE_INTEGER, + character: integer.MAX_VALUE, } as Position, }, source: 'Ansible', @@ -115,7 +115,7 @@ describe('doValidate()', () => { start: { line: 0, character: 0 } as Position, end: { line: 0, - character: Number.MAX_SAFE_INTEGER, + character: integer.MAX_VALUE, } as Position, }, source: 'Ansible', @@ -183,7 +183,7 @@ describe('doValidate()', () => { start: { line: 0, character: 0 } as Position, end: { line: 0, - character: Number.MAX_SAFE_INTEGER, + character: integer.MAX_VALUE, } as Position, }, source: 'Ansible', @@ -252,7 +252,7 @@ describe('doValidate()', () => { start: { line: 0, character: 0 } as Position, end: { line: 0, - character: Number.MAX_SAFE_INTEGER, + character: integer.MAX_VALUE, } as Position, }, source: 'Ansible', @@ -323,7 +323,7 @@ describe('doValidate()', () => { start: { line: 0, character: 0 } as Position, end: { line: 0, - character: Number.MAX_SAFE_INTEGER, + character: integer.MAX_VALUE, } as Position, }, source: 'Ansible', From 290e9f588c35a418a945b829a048b22ad076ecb1 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sat, 12 Mar 2022 07:57:19 +0000 Subject: [PATCH 281/558] Enable test runs using tox (#260) --- tox.ini | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index 5fde37002..1fbfc34b9 100644 --- a/tox.ini +++ b/tox.ini @@ -1,11 +1,12 @@ -# spell-checker:ignore toxinidir passenv usedevelop testenv basepython envpython linkcheck changedir envdir envlist minversion toxworkdir posargs envname +# spell-checker:ignore toxinidir passenv usedevelop testenv basepython envpython linkcheck changedir envdir envlist minversion toxworkdir posargs envname skipsdist setenv [tox] envlist = lint docs + test minversion = 3.21.0 skip_install = true - +skipsdist = true [docs] # do not use continuation with vars, see https://github.com/tox-dev/tox/issues/2069 @@ -13,9 +14,46 @@ sphinx_common_args = -j auto {tty:--color} -a -n -W --keep-going -T -d "{temp_dir}/.doctrees" . "{envdir}/docs_out" [testenv] +description = + Run tests + test-node12: with node 12 + test-node14: with node 14 + test-node16: with node 16 passenv = CI GITHUB_ACTIONS + HOME + SSH_AUTH_SOCK + TERM +setenv = + FORCE_COLOR=1 + NODE_VERSION=stable + node12: NODE_VERSION=12 + node14: NODE_VERSION=14 + node16: NODE_VERSION=16 +allowlist_externals = + bash + node +# Activation of node version is not persistent and nvm works only from +# within `bash --login`, do not call nvm/npm/node without it under tox as +# you might end-up using system version, if any +commands_pre = + {node12,node14,node16}: bash --login -c "nvm install --latest-npm --default {env:NODE_VERSION}" +commands_post = + # restore nvm default alias to stable version + {node12,node14,node16}: bash --login -c "nvm alias default stable" +commands = + bash --login -c "npm run test" + +skip_install = true + +# keep them, so tox 3 can lists these as additional envs: +[testenv:test-{node12,node14,node16}] +description = + Run tests + test-node12: with node 12 + test-node14: with node 14 + test-node16: with node 16 [testenv:docs] allowlist_externals = From aa1577833c4a3a9fbf23fa129952829585890a56 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Mon, 14 Mar 2022 12:15:17 +0530 Subject: [PATCH 282/558] add change note for the PR --- docs/changelog-fragments.d/261.feature.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/changelog-fragments.d/261.feature.md diff --git a/docs/changelog-fragments.d/261.feature.md b/docs/changelog-fragments.d/261.feature.md new file mode 100644 index 000000000..c6993f2d1 --- /dev/null +++ b/docs/changelog-fragments.d/261.feature.md @@ -0,0 +1,3 @@ +Replaced the value `2^53 - 1 (which is Number.MAX_SAFE_INTEGER)` with +`2^31 - 1 (which is integer.MAX_VALUE)` to support extension clients that do +handle 64-bit floating point IEEE 754 number by --{user}`priyamsahoo`. From 592c59784dedeabf10c75a62637ce9e11f12bdfd Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 14 Mar 2022 09:11:16 +0000 Subject: [PATCH 283/558] Remove custom eslint/prettier single quote configuration (#262) * Remove custom prettier singleQuote option Fixes: https://github.com/ansible-community/devtools/issues/28 * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .eslintrc.json | 3 +- .prettierrc.yaml | 1 - CHANGELOG.md | 10 +- bin/ansible-language-server | 2 +- bin/version-bump-allowed | 6 +- scripts/.eslintrc.js | 32 +- scripts/check-dependencies.js | 6 +- src/ansibleLanguageService.ts | 54 +-- src/interfaces/extensionSettings.ts | 4 +- src/interfaces/module.ts | 2 +- src/interfaces/pluginRouting.ts | 2 +- src/providers/completionProvider.ts | 38 +- src/providers/definitionProvider.ts | 12 +- src/providers/hoverProvider.ts | 18 +- src/providers/semanticTokenProvider.ts | 20 +- src/providers/validationProvider.ts | 44 +- src/server.ts | 12 +- src/services/ansibleConfig.ts | 36 +- src/services/ansibleLint.ts | 56 +-- src/services/ansiblePlaybook.ts | 24 +- src/services/docsLibrary.ts | 36 +- src/services/executionEnvironment.ts | 80 ++-- src/services/metadataLibrary.ts | 28 +- src/services/settingsManager.ts | 24 +- src/services/validationManager.ts | 8 +- src/services/workspaceManager.ts | 22 +- src/utils/ansible.ts | 532 +++++++++++----------- src/utils/commandRunner.ts | 24 +- src/utils/docsFinder.ts | 64 +-- src/utils/docsFormatter.ts | 54 +-- src/utils/docsParser.ts | 52 +-- src/utils/execPath.ts | 6 +- src/utils/imagePuller.ts | 26 +- src/utils/misc.ts | 28 +- src/utils/yaml.ts | 40 +- test/helper.ts | 28 +- test/index.ts | 8 +- test/providers/hoverProvider.test.ts | 86 ++-- test/providers/validationProvider.test.ts | 112 ++--- test/utils/runCommand.test.ts | 46 +- test/utils/yaml.test.ts | 250 +++++----- 41 files changed, 967 insertions(+), 969 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 24ebf904d..03bb86d69 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -14,7 +14,6 @@ "plugins": ["@typescript-eslint"], "rules": { "eqeqeq": ["error", "smart"], - "prefer-template": "warn", - "quotes": ["warn", "single"] + "prefer-template": "warn" } } diff --git a/.prettierrc.yaml b/.prettierrc.yaml index bcc4ae91e..87b7971a1 100644 --- a/.prettierrc.yaml +++ b/.prettierrc.yaml @@ -21,4 +21,3 @@ overrides: # compatibility with markdownlint proseWrap: always semi: true -singleQuote: true diff --git a/CHANGELOG.md b/CHANGELOG.md index c99972fd1..ee8fa3c09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,7 +46,7 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag [vscode-ansible#373]: https://github.com/ansible/vscode-ansible/issues/373 - '{issue}`236`' + "{issue}`236`" ## v0.5.0 (2022-03-01) @@ -62,7 +62,7 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag now don't strictly follow the release notes format suggested by [Keep a Changelog][keepachangelog] -- by {user}`webknjaz` - [keepachangelog]: https://keepachangelog.com/en/1.1.0/ '{issue}`164`' + [keepachangelog]: https://keepachangelog.com/en/1.1.0/ "{issue}`164`" - Replaced all the credits in the changelog with a dedicated Sphinx role -- by {user}`webknjaz` @@ -76,13 +76,13 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag [towncrier]: https://github.com/twisted/towncrier - '{issue}`158`, {issue}`198`, {issue}`201`, {issue}`202`, -{issue}`204`, {issue}`208`, {issue}`210`' + "{issue}`158`, {issue}`198`, {issue}`201`, {issue}`202`, +{issue}`204`, {issue}`208`, {issue}`210`" - Added [Sphinx][sphinx] documentation generator and set up the CI infrastructure for it -- by {user}`webknjaz` - [sphinx]: https://github.com/twisted/towncrier '{issue}`161`' + [sphinx]: https://github.com/twisted/towncrier "{issue}`161`" - Added docs and references to the Community Code Of Conduct, security and contributing guides, and a pull request template -- by {user}`webknjaz` diff --git a/bin/ansible-language-server b/bin/ansible-language-server index d1dbeeeea..0d646de30 100755 --- a/bin/ansible-language-server +++ b/bin/ansible-language-server @@ -1,3 +1,3 @@ #!/usr/bin/env node -require('../out/server/src/server.js'); +require("../out/server/src/server.js"); diff --git a/bin/version-bump-allowed b/bin/version-bump-allowed index 8b104bc0d..5840ce5fc 100755 --- a/bin/version-bump-allowed +++ b/bin/version-bump-allowed @@ -1,16 +1,16 @@ #!/usr/bin/env node -console.debug('Checking if it is allowed to bump the package version...'); +console.debug("Checking if it is allowed to bump the package version..."); console.debug( `The previous package version was ${process.env.npm_package_version}` ); const isGitHubActionsCiCd = - process.env.CI === 'true' && process.env.GITHUB_ACTIONS === 'true'; + process.env.CI === "true" && process.env.GITHUB_ACTIONS === "true"; console.debug( `The package bump is ${ - isGitHubActionsCiCd ? '' : 'not ' + isGitHubActionsCiCd ? "" : "not " }running under GitHub Actions CI/CD` ); diff --git a/scripts/.eslintrc.js b/scripts/.eslintrc.js index ba2024c29..ae754a1bf 100644 --- a/scripts/.eslintrc.js +++ b/scripts/.eslintrc.js @@ -1,34 +1,34 @@ module.exports = { root: true, - parser: '@typescript-eslint/parser', + parser: "@typescript-eslint/parser", env: { node: true, es6: true, }, parserOptions: { - sourceType: 'module', + sourceType: "module", }, - plugins: ['@typescript-eslint', 'prettier'], + plugins: ["@typescript-eslint", "prettier"], extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/eslint-recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier', + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "prettier", ], rules: { - 'prettier/prettier': 'error', - '@typescript-eslint/no-use-before-define': [ - 'error', + "prettier/prettier": "error", + "@typescript-eslint/no-use-before-define": [ + "error", { functions: false, classes: false }, ], - '@typescript-eslint/no-unused-vars': ['warn'], - '@typescript-eslint/explicit-function-return-type': [ + "@typescript-eslint/no-unused-vars": ["warn"], + "@typescript-eslint/explicit-function-return-type": [ 1, { allowExpressions: true }, ], - 'eol-last': ['error'], - 'space-infix-ops': ['error', { int32Hint: false }], - 'no-multi-spaces': ['error', { ignoreEOLComments: true }], - 'keyword-spacing': ['error'], + "eol-last": ["error"], + "space-infix-ops": ["error", { int32Hint: false }], + "no-multi-spaces": ["error", { ignoreEOLComments: true }], + "keyword-spacing": ["error"], }, }; diff --git a/scripts/check-dependencies.js b/scripts/check-dependencies.js index 522b3ee3e..4460ed3de 100644 --- a/scripts/check-dependencies.js +++ b/scripts/check-dependencies.js @@ -7,13 +7,13 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -const exit = require('process').exit; -const dependencies = require('../package.json').dependencies; +const exit = require("process").exit; +const dependencies = require("../package.json").dependencies; for (const dep in dependencies) { if (Object.prototype.hasOwnProperty.call(dependencies, dep)) { const version = dependencies[dep]; - if (version === 'next') { + if (version === "next") { console.error( `Dependency ${dep} has "${version}" version, please change it to fixed version` ); diff --git a/src/ansibleLanguageService.ts b/src/ansibleLanguageService.ts index c3d2fbab8..8f54ff0c1 100644 --- a/src/ansibleLanguageService.ts +++ b/src/ansibleLanguageService.ts @@ -6,22 +6,22 @@ import { InitializeResult, TextDocuments, TextDocumentSyncKind, -} from 'vscode-languageserver'; -import { TextDocument } from 'vscode-languageserver-textdocument'; +} from "vscode-languageserver"; +import { TextDocument } from "vscode-languageserver-textdocument"; import { doCompletion, doCompletionResolve, -} from './providers/completionProvider'; -import { getDefinition } from './providers/definitionProvider'; -import { doHover } from './providers/hoverProvider'; +} from "./providers/completionProvider"; +import { getDefinition } from "./providers/definitionProvider"; +import { doHover } from "./providers/hoverProvider"; import { doSemanticTokens, tokenModifiers, tokenTypes, -} from './providers/semanticTokenProvider'; -import { doValidate } from './providers/validationProvider'; -import { ValidationManager } from './services/validationManager'; -import { WorkspaceManager } from './services/workspaceManager'; +} from "./providers/semanticTokenProvider"; +import { doValidate } from "./providers/validationProvider"; +import { ValidationManager } from "./services/validationManager"; +import { WorkspaceManager } from "./services/workspaceManager"; /** * Initializes the connection and registers all lifecycle event handlers. @@ -61,7 +61,7 @@ export class AnsibleLanguageService { semanticTokensProvider: { documentSelector: [ { - language: 'ansible', + language: "ansible", }, ], full: true, @@ -97,7 +97,7 @@ export class AnsibleLanguageService { this.connection.client.register( DidChangeConfigurationNotification.type, { - section: 'ansible', + section: "ansible", } ); } @@ -112,15 +112,15 @@ export class AnsibleLanguageService { watchers: [ { // watch ansible configuration - globPattern: '**/ansible.cfg', + globPattern: "**/ansible.cfg", }, { // watch ansible-lint configuration - globPattern: '**/.ansible-lint', + globPattern: "**/.ansible-lint", }, { // watch role meta-configuration - globPattern: '**/meta/main.{yml,yaml}', + globPattern: "**/meta/main.{yml,yaml}", }, ], }); @@ -134,7 +134,7 @@ export class AnsibleLanguageService { context.documentSettings.handleConfigurationChanged(params) ); } catch (error) { - this.handleError(error, 'onDidChangeConfiguration'); + this.handleError(error, "onDidChangeConfiguration"); } }); @@ -152,7 +152,7 @@ export class AnsibleLanguageService { ); } } catch (error) { - this.handleError(error, 'onDidOpen'); + this.handleError(error, "onDidOpen"); } }); @@ -164,7 +164,7 @@ export class AnsibleLanguageService { context.documentSettings.handleDocumentClosed(e.document.uri); } } catch (error) { - this.handleError(error, 'onDidClose'); + this.handleError(error, "onDidClose"); } }); @@ -174,7 +174,7 @@ export class AnsibleLanguageService { context.handleWatchedDocumentChange(params) ); } catch (error) { - this.handleError(error, 'onDidChangeWatchedFiles'); + this.handleError(error, "onDidChangeWatchedFiles"); } }); @@ -192,7 +192,7 @@ export class AnsibleLanguageService { ); } } catch (error) { - this.handleError(error, 'onDidSave'); + this.handleError(error, "onDidSave"); } }); @@ -203,7 +203,7 @@ export class AnsibleLanguageService { e.contentChanges ); } catch (error) { - this.handleError(error, 'onDidChangeTextDocument'); + this.handleError(error, "onDidChangeTextDocument"); } }); @@ -217,7 +217,7 @@ export class AnsibleLanguageService { this.connection ); } catch (error) { - this.handleError(error, 'onDidChangeContent'); + this.handleError(error, "onDidChangeContent"); } }); @@ -233,7 +233,7 @@ export class AnsibleLanguageService { } } } catch (error) { - this.handleError(error, 'onSemanticTokens'); + this.handleError(error, "onSemanticTokens"); } return { data: [], @@ -256,7 +256,7 @@ export class AnsibleLanguageService { } } } catch (error) { - this.handleError(error, 'onHover'); + this.handleError(error, "onHover"); } return null; }); @@ -273,7 +273,7 @@ export class AnsibleLanguageService { } } } catch (error) { - this.handleError(error, 'onCompletion'); + this.handleError(error, "onCompletion"); } return null; }); @@ -289,7 +289,7 @@ export class AnsibleLanguageService { } } } catch (error) { - this.handleError(error, 'onCompletionResolve'); + this.handleError(error, "onCompletionResolve"); } return completionItem; }); @@ -310,7 +310,7 @@ export class AnsibleLanguageService { } } } catch (error) { - this.handleError(error, 'onDefinition'); + this.handleError(error, "onDefinition"); } return null; }); @@ -319,7 +319,7 @@ export class AnsibleLanguageService { private handleError(error: unknown, contextName: string) { const leadMessage = `An error occurred in '${contextName}' handler: `; if (error instanceof Error) { - const stack = error.stack ? `\n${error.stack}` : ''; + const stack = error.stack ? `\n${error.stack}` : ""; this.connection.console.error( `${leadMessage}[${error.name}] ${error.message}${stack}` ); diff --git a/src/interfaces/extensionSettings.ts b/src/interfaces/extensionSettings.ts index 9ddcdff42..c2cd2d2c6 100644 --- a/src/interfaces/extensionSettings.ts +++ b/src/interfaces/extensionSettings.ts @@ -1,6 +1,6 @@ -export type IContainerEngine = 'auto' | 'podman' | 'docker'; +export type IContainerEngine = "auto" | "podman" | "docker"; -export type IPullPolicy = 'always' | 'missing' | 'never' | 'tag'; +export type IPullPolicy = "always" | "missing" | "never" | "tag"; export interface ExtensionSettings { ansible: { path: string; useFullyQualifiedCollectionNames: boolean }; diff --git a/src/interfaces/module.ts b/src/interfaces/module.ts index d10ea9c37..15171c548 100644 --- a/src/interfaces/module.ts +++ b/src/interfaces/module.ts @@ -1,4 +1,4 @@ -import { YAMLError } from 'yaml/util'; +import { YAMLError } from "yaml/util"; export type IDescription = string | Array; diff --git a/src/interfaces/pluginRouting.ts b/src/interfaces/pluginRouting.ts index 2fd9df7f5..b3878980d 100644 --- a/src/interfaces/pluginRouting.ts +++ b/src/interfaces/pluginRouting.ts @@ -1,6 +1,6 @@ export type IPluginRoutingByCollection = Map; -export type IPluginTypes = 'modules'; // currently only modules are supported +export type IPluginTypes = "modules"; // currently only modules are supported export type IPluginRoutesByType = Map; diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index ef02e3c45..affd8d85e 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -4,20 +4,20 @@ import { MarkupContent, Range, TextEdit, -} from 'vscode-languageserver'; -import { Position, TextDocument } from 'vscode-languageserver-textdocument'; -import { Node, Scalar, YAMLMap } from 'yaml/types'; -import { IOption } from '../interfaces/module'; -import { WorkspaceFolderContext } from '../services/workspaceManager'; +} from "vscode-languageserver"; +import { Position, TextDocument } from "vscode-languageserver-textdocument"; +import { Node, Scalar, YAMLMap } from "yaml/types"; +import { IOption } from "../interfaces/module"; +import { WorkspaceFolderContext } from "../services/workspaceManager"; import { blockKeywords, playKeywords, playWithoutTaskKeywords, roleKeywords, taskKeywords, -} from '../utils/ansible'; -import { formatModule, formatOption, getDetails } from '../utils/docsFormatter'; -import { insert, toLspRange } from '../utils/misc'; +} from "../utils/ansible"; +import { formatModule, formatOption, getDetails } from "../utils/docsFormatter"; +import { insert, toLspRange } from "../utils/misc"; import { AncestryBuilder, findProvidedModule, @@ -31,7 +31,7 @@ import { isTaskParam, parseAllDocuments, getPossibleOptionsForPath, -} from '../utils/yaml'; +} from "../utils/yaml"; const priorityMap = { nameKeyword: 1, @@ -55,7 +55,7 @@ export async function doCompletion( // This is particularly important when parser has nothing more than // indentation to determine the scope of the current line. `_:` is ok here, // since we expect to work on a Pair level - preparedText = insert(preparedText, offset, '_:'); + preparedText = insert(preparedText, offset, "_:"); const yamlDocs = parseAllDocuments(preparedText); const useFqcn = (await context.documentSettings.get(document.uri)).ansible @@ -112,7 +112,7 @@ export async function doCompletion( document, position, path, - new Map([['block', blockKeywords.get('block') as string]]) + new Map([["block", blockKeywords.get("block") as string]]) ) ); @@ -123,7 +123,7 @@ export async function doCompletion( if (nodeRange) { textEdit = { range: nodeRange, - newText: '', // placeholder + newText: "", // placeholder }; } @@ -138,7 +138,7 @@ export async function doCompletion( priority = priorityMap.moduleName; kind = CompletionItemKind.Class; } - const [namespace, collection, name] = moduleFqcn.split('.'); + const [namespace, collection, name] = moduleFqcn.split("."); return { label: useFqcn ? moduleFqcn : name, kind: kind, @@ -254,7 +254,7 @@ function getKeywordCompletion( const nodeRange = getNodeRange(path[path.length - 1], document); return remainingParams.map(([keyword, description]) => { const priority = - keyword === 'name' ? priorityMap.nameKeyword : priorityMap.keyword; + keyword === "name" ? priorityMap.nameKeyword : priorityMap.keyword; const completionItem: CompletionItem = { label: keyword, kind: CompletionItemKind.Property, @@ -282,11 +282,11 @@ function getKeywordCompletion( */ function getNodeRange(node: Node, document: TextDocument): Range | undefined { const range = getOrigRange(node); - if (range && node instanceof Scalar && typeof node.value === 'string') { + if (range && node instanceof Scalar && typeof node.value === "string") { const start = range[0]; let end = range[1]; // compensate for `_:` - if (node.value.includes('_:')) { + if (node.value.includes("_:")) { end -= 2; } else { // colon, being at the end of the line, was excluded from the node @@ -310,7 +310,7 @@ export async function doCompletionResolve( if (module && module.documentation) { const [namespace, collection, name] = - completionItem.data.moduleFqcn.split('.'); + completionItem.data.moduleFqcn.split("."); let useFqcn = ( await context.documentSettings.get(completionItem.data.documentUri) @@ -321,7 +321,7 @@ export async function doCompletionResolve( const declaredCollections: Array = completionItem.data?.inlineCollections || []; - declaredCollections.push('ansible.builtin'); + declaredCollections.push("ansible.builtin"); const metadata = await context.documentMetadata.get( completionItem.data.documentUri @@ -368,5 +368,5 @@ function atEndOfLine(document: TextDocument, position: Position): boolean { const charAfterCursor = `${document.getText()}\n`[ document.offsetAt(position) ]; - return charAfterCursor === '\n' || charAfterCursor === '\r'; + return charAfterCursor === "\n" || charAfterCursor === "\r"; } diff --git a/src/providers/definitionProvider.ts b/src/providers/definitionProvider.ts index 3161fcc6f..24a590792 100644 --- a/src/providers/definitionProvider.ts +++ b/src/providers/definitionProvider.ts @@ -1,15 +1,15 @@ -import { DefinitionLink, Range } from 'vscode-languageserver'; -import { Position, TextDocument } from 'vscode-languageserver-textdocument'; -import { Scalar } from 'yaml/types'; -import { DocsLibrary } from '../services/docsLibrary'; -import { toLspRange } from '../utils/misc'; +import { DefinitionLink, Range } from "vscode-languageserver"; +import { Position, TextDocument } from "vscode-languageserver-textdocument"; +import { Scalar } from "yaml/types"; +import { DocsLibrary } from "../services/docsLibrary"; +import { toLspRange } from "../utils/misc"; import { AncestryBuilder, getOrigRange, getPathAt, isTaskParam, parseAllDocuments, -} from '../utils/yaml'; +} from "../utils/yaml"; export async function getDefinition( document: TextDocument, diff --git a/src/providers/hoverProvider.ts b/src/providers/hoverProvider.ts index 70ba96a13..8754d6ce1 100644 --- a/src/providers/hoverProvider.ts +++ b/src/providers/hoverProvider.ts @@ -1,20 +1,20 @@ -import { Hover, MarkupContent, MarkupKind } from 'vscode-languageserver'; -import { Position, TextDocument } from 'vscode-languageserver-textdocument'; -import { Scalar } from 'yaml/types'; -import { DocsLibrary } from '../services/docsLibrary'; +import { Hover, MarkupContent, MarkupKind } from "vscode-languageserver"; +import { Position, TextDocument } from "vscode-languageserver-textdocument"; +import { Scalar } from "yaml/types"; +import { DocsLibrary } from "../services/docsLibrary"; import { blockKeywords, isTaskKeyword, playKeywords, roleKeywords, taskKeywords, -} from '../utils/ansible'; +} from "../utils/ansible"; import { formatModule, formatOption, formatTombstone, -} from '../utils/docsFormatter'; -import { toLspRange } from '../utils/misc'; +} from "../utils/docsFormatter"; +import { toLspRange } from "../utils/misc"; import { AncestryBuilder, getOrigRange, @@ -25,7 +25,7 @@ import { isRoleParam, isTaskParam, parseAllDocuments, -} from '../utils/yaml'; +} from "../utils/yaml"; export async function doHover( document: TextDocument, @@ -110,7 +110,7 @@ function getKeywordHover( ): Hover | null { const keywordDocumentation = keywords.get(node.value); const markupDoc = - typeof keywordDocumentation === 'string' + typeof keywordDocumentation === "string" ? { kind: MarkupKind.Markdown, value: keywordDocumentation, diff --git a/src/providers/semanticTokenProvider.ts b/src/providers/semanticTokenProvider.ts index afc933571..8bd366d7b 100644 --- a/src/providers/semanticTokenProvider.ts +++ b/src/providers/semanticTokenProvider.ts @@ -3,17 +3,17 @@ import { SemanticTokens, SemanticTokensBuilder, SemanticTokenTypes, -} from 'vscode-languageserver'; -import { TextDocument } from 'vscode-languageserver-textdocument'; -import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; -import { IOption } from '../interfaces/module'; -import { DocsLibrary } from '../services/docsLibrary'; +} from "vscode-languageserver"; +import { TextDocument } from "vscode-languageserver-textdocument"; +import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from "yaml/types"; +import { IOption } from "../interfaces/module"; +import { DocsLibrary } from "../services/docsLibrary"; import { blockKeywords, isTaskKeyword, playKeywords, roleKeywords, -} from '../utils/ansible'; +} from "../utils/ansible"; import { findProvidedModule, getOrigRange, @@ -22,7 +22,7 @@ import { isRoleParam, isTaskParam, parseAllDocuments, -} from '../utils/yaml'; +} from "../utils/yaml"; export const tokenTypes = [ SemanticTokenTypes.method, @@ -81,7 +81,7 @@ async function markSemanticTokens( } else if (isTaskParam(keyPath)) { if (isTaskKeyword(pair.key.value)) { markKeyword(pair.key, builder, document); - if (pair.key.value === 'args') { + if (pair.key.value === "args") { const module = await findProvidedModule( path.concat(pair, pair.key), document, @@ -179,7 +179,7 @@ function markModuleParameters( document ); if ( - option.type === 'dict' && + option.type === "dict" && moduleParamPair.value instanceof YAMLMap ) { // highlight sub-parameters @@ -190,7 +190,7 @@ function markModuleParameters( document ); } else if ( - option.type === 'list' && + option.type === "list" && moduleParamPair.value instanceof YAMLSeq ) { // highlight list of sub-parameters diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts index 2fb45293e..ed3d38f7d 100644 --- a/src/providers/validationProvider.ts +++ b/src/providers/validationProvider.ts @@ -1,5 +1,5 @@ -import IntervalTree from '@flatten-js/interval-tree'; -import * as _ from 'lodash'; +import IntervalTree from "@flatten-js/interval-tree"; +import * as _ from "lodash"; import { Connection, Diagnostic, @@ -7,12 +7,12 @@ import { DiagnosticSeverity, Location, Range, -} from 'vscode-languageserver'; -import { TextDocument } from 'vscode-languageserver-textdocument'; -import { ValidationManager } from '../services/validationManager'; -import { WorkspaceFolderContext } from '../services/workspaceManager'; -import { isPlaybook, parseAllDocuments } from '../utils/yaml'; -import { CommandRunner } from '../utils/commandRunner'; +} from "vscode-languageserver"; +import { TextDocument } from "vscode-languageserver-textdocument"; +import { ValidationManager } from "../services/validationManager"; +import { WorkspaceFolderContext } from "../services/workspaceManager"; +import { isPlaybook, parseAllDocuments } from "../utils/yaml"; +import { CommandRunner } from "../utils/commandRunner"; /** * Validates the given document. @@ -40,15 +40,15 @@ export async function doValidate( const settings = await context.documentSettings.get(textDocument.uri); const commandRunner = new CommandRunner(connection, context, settings); const lintExecutable = settings.executionEnvironment.enabled - ? 'ansible-lint' + ? "ansible-lint" : settings.ansibleLint.path; const lintAvailability = await commandRunner.getExecutablePath( lintExecutable ); - console.debug('Path for lint: ', lintAvailability); + console.debug("Path for lint: ", lintAvailability); if (lintAvailability) { - console.debug('Validating using ansible-lint'); + console.debug("Validating using ansible-lint"); diagnosticsByFile = await context.ansibleLint.doValidate(textDocument); } @@ -56,21 +56,21 @@ export async function doValidate( // Notifying the user about the failed ansible-lint command and falling back to ansible syntax-check in this scenario if (diagnosticsByFile === -1) { console.debug( - 'Ansible-lint command execution failed. Falling back to ansible syntax-check' + "Ansible-lint command execution failed. Falling back to ansible syntax-check" ); connection?.window.showInformationMessage( - 'Falling back to ansible syntax-check.' + "Falling back to ansible syntax-check." ); } - console.debug('Validating using ansible syntax-check'); + console.debug("Validating using ansible syntax-check"); if (isPlaybook(textDocument)) { - console.log('is playbook...'); + console.log("is playbook..."); diagnosticsByFile = await context.ansiblePlaybook.doValidate( textDocument ); } else { - console.log('not a playbook...'); + console.log("not a playbook..."); diagnosticsByFile = new Map(); } } @@ -116,12 +116,12 @@ export function getYamlValidation(textDocument: TextDocument): Diagnostic[] { let severity; switch (error.name) { - case 'YAMLReferenceError': - case 'YAMLSemanticError': - case 'YAMLSyntaxError': + case "YAMLReferenceError": + case "YAMLSemanticError": + case "YAMLSyntaxError": severity = DiagnosticSeverity.Error; break; - case 'YAMLWarning': + case "YAMLWarning": severity = DiagnosticSeverity.Warning; break; default: @@ -132,7 +132,7 @@ export function getYamlValidation(textDocument: TextDocument): Diagnostic[] { message: error.message, range: range || Range.create(0, 0, 0, 0), severity: severity, - source: 'Ansible [YAML]', + source: "Ansible [YAML]", }); } }); @@ -157,7 +157,7 @@ export function getYamlValidation(textDocument: TextDocument): Diagnostic[] { start: range.end, end: range.end, }), - 'the scope of this error ends here' + "the scope of this error ends here" ), ]; // collapse the range diff --git a/src/server.ts b/src/server.ts index 3e6d52e06..b55658768 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,4 +1,4 @@ -import { TextDocument } from 'vscode-languageserver-textdocument'; +import { TextDocument } from "vscode-languageserver-textdocument"; import { Connection, createConnection, @@ -6,9 +6,9 @@ import { NotificationHandler, ProposedFeatures, TextDocuments, -} from 'vscode-languageserver/node'; -import { AnsibleLanguageService } from './ansibleLanguageService'; -import { getUnsupportedError } from './utils/misc'; +} from "vscode-languageserver/node"; +import { AnsibleLanguageService } from "./ansibleLanguageService"; +import { getUnsupportedError } from "./utils/misc"; // Create a connection for the server, using Node's IPC as a transport. // Also include all preview / proposed LSP features. @@ -18,7 +18,7 @@ const connection: Connection = createConnection(ProposedFeatures.all); // error message to the client if so. const errorMessage = getUnsupportedError(); if (errorMessage) { - connection.sendNotification('ansible/errorMessage', errorMessage); + connection.sendNotification("ansible/errorMessage", errorMessage); } const docChangeHandlers: NotificationHandler[] = @@ -35,7 +35,7 @@ connection.onDidChangeTextDocument((params) => { // overrides, such as `onDidChangeTextDocument`. const connectionProxy = new Proxy(connection, { get: (target, p, receiver) => { - if (p === 'onDidChangeTextDocument') { + if (p === "onDidChangeTextDocument") { return (handler: NotificationHandler) => { docChangeHandlers.push(handler); }; diff --git a/src/services/ansibleConfig.ts b/src/services/ansibleConfig.ts index 6e43e9282..fe5d5a297 100644 --- a/src/services/ansibleConfig.ts +++ b/src/services/ansibleConfig.ts @@ -1,16 +1,16 @@ -import * as ini from 'ini'; -import * as _ from 'lodash'; -import * as path from 'path'; -import { Connection } from 'vscode-languageserver'; -import { WorkspaceFolderContext } from './workspaceManager'; -import { CommandRunner } from '../utils/commandRunner'; +import * as ini from "ini"; +import * as _ from "lodash"; +import * as path from "path"; +import { Connection } from "vscode-languageserver"; +import { WorkspaceFolderContext } from "./workspaceManager"; +import { CommandRunner } from "../utils/commandRunner"; export class AnsibleConfig { private connection: Connection; private context: WorkspaceFolderContext; private _collection_paths: string[] = []; private _module_locations: string[] = []; - private _ansible_location = ''; + private _ansible_location = ""; constructor(connection: Connection, context: WorkspaceFolderContext) { this.connection = connection; @@ -31,16 +31,16 @@ export class AnsibleConfig { // get Ansible configuration const ansibleConfigResult = await commandRunner.runCommand( - 'ansible-config', - 'dump' + "ansible-config", + "dump" ); let config = ini.parse(ansibleConfigResult.stdout); config = _.mapKeys( config, - (_, key) => key.substring(0, key.indexOf('(')) // remove config source in parenthesis + (_, key) => key.substring(0, key.indexOf("(")) // remove config source in parenthesis ); - if (typeof config.COLLECTIONS_PATHS === 'string') { + if (typeof config.COLLECTIONS_PATHS === "string") { this._collection_paths = parsePythonStringArray( config.COLLECTIONS_PATHS ); @@ -50,24 +50,24 @@ export class AnsibleConfig { // get Ansible basic information const ansibleVersionResult = await commandRunner.runCommand( - 'ansible', - '--version' + "ansible", + "--version" ); const versionInfo = ini.parse(ansibleVersionResult.stdout); this._module_locations = parsePythonStringArray( - versionInfo['configured module search path'] + versionInfo["configured module search path"] ); this._module_locations.push( - path.resolve(versionInfo['ansible python module location'], 'modules') + path.resolve(versionInfo["ansible python module location"], "modules") ); - this._ansible_location = versionInfo['ansible python module location']; + this._ansible_location = versionInfo["ansible python module location"]; // get Python sys.path // this is needed to get the pre-installed collections to work const pythonPathResult = await commandRunner.runCommand( - 'python3', + "python3", ' -c "import sys; print(sys.path, end=\\"\\")"' ); this._collection_paths.push( @@ -107,6 +107,6 @@ export class AnsibleConfig { function parsePythonStringArray(string_list: string): string[] { const cleaned_str = string_list.slice(1, string_list.length - 1); // remove [] - const quoted_elements = cleaned_str.split(',').map((e) => e.trim()); + const quoted_elements = cleaned_str.split(",").map((e) => e.trim()); return quoted_elements.map((e) => e.slice(1, e.length - 1)); } diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts index e60cf963e..5e434752c 100644 --- a/src/services/ansibleLint.ts +++ b/src/services/ansibleLint.ts @@ -1,7 +1,7 @@ -import { ExecException } from 'child_process'; -import { promises as fs } from 'fs'; -import * as path from 'path'; -import { URI } from 'vscode-uri'; +import { ExecException } from "child_process"; +import { promises as fs } from "fs"; +import * as path from "path"; +import { URI } from "vscode-uri"; import { Connection, Diagnostic, @@ -10,13 +10,13 @@ import { integer, Position, Range, -} from 'vscode-languageserver'; -import { TextDocument } from 'vscode-languageserver-textdocument'; -import { parseAllDocuments } from 'yaml'; -import { IAnsibleLintConfig } from '../interfaces/ansibleLintConfig'; -import { fileExists, hasOwnProperty } from '../utils/misc'; -import { WorkspaceFolderContext } from './workspaceManager'; -import { CommandRunner } from '../utils/commandRunner'; +} from "vscode-languageserver"; +import { TextDocument } from "vscode-languageserver-textdocument"; +import { parseAllDocuments } from "yaml"; +import { IAnsibleLintConfig } from "../interfaces/ansibleLintConfig"; +import { fileExists, hasOwnProperty } from "../utils/misc"; +import { WorkspaceFolderContext } from "./workspaceManager"; +import { CommandRunner } from "../utils/commandRunner"; /** * Acts as and interface to ansible-lint and a cache of its output. @@ -58,11 +58,11 @@ export class AnsibleLint { if (!settings.ansibleLint.enabled) { console.debug( - 'Ansible-lint is disabled. Falling back to ansible syntax-check' + "Ansible-lint is disabled. Falling back to ansible syntax-check" ); return; } else { - let linterArguments = settings.ansibleLint.arguments ?? ''; + let linterArguments = settings.ansibleLint.arguments ?? ""; // Determine linter config file let ansibleLintConfigPath = linterArguments.match( @@ -97,7 +97,7 @@ export class AnsibleLint { ansibleLintConfigPath ); - progressTracker.begin('ansible-lint', undefined, 'Processing files...'); + progressTracker.begin("ansible-lint", undefined, "Processing files..."); const commandRunner = new CommandRunner( this.connection, @@ -108,7 +108,7 @@ export class AnsibleLint { try { // get Ansible configuration const result = await commandRunner.runCommand( - 'ansible-lint', + "ansible-lint", `${linterArguments} "${docPath}"`, workingDirectory, mountPaths @@ -173,7 +173,7 @@ export class AnsibleLint { const diagnostics: Map = new Map(); if (!result) { this.connection.console.warn( - 'Standard output from ansible-lint is suspiciously empty.' + "Standard output from ansible-lint is suspiciously empty." ); return diagnostics; } @@ -182,12 +182,12 @@ export class AnsibleLint { if (report instanceof Array) { for (const item of report) { if ( - typeof item.check_name === 'string' && + typeof item.check_name === "string" && item.location && - typeof item.location.path === 'string' && + typeof item.location.path === "string" && item.location.lines && (item.location.lines.begin || - typeof item.location.lines.begin === 'number') + typeof item.location.lines.begin === "number") ) { const begin_line = item.location.lines.begin.line || item.location.lines.begin || 1; @@ -241,15 +241,15 @@ export class AnsibleLint { message: message, range: range || Range.create(0, 0, 0, 0), severity: severity, - source: 'Ansible', + source: "Ansible", }); } } } } catch (error) { this.connection.window.showErrorMessage( - 'Could not parse ansible-lint output. Please check your ansible-lint installation & configuration.' + - ' More info in `Ansible Server` output.' + "Could not parse ansible-lint output. Please check your ansible-lint installation & configuration." + + " More info in `Ansible Server` output." ); let message: string; if (error instanceof Error) { @@ -297,16 +297,16 @@ export class AnsibleLint { }; try { const configContents = await fs.readFile(configPath, { - encoding: 'utf8', + encoding: "utf8", }); parseAllDocuments(configContents).forEach((configDoc) => { const configObject: unknown = configDoc.toJSON(); if ( - hasOwnProperty(configObject, 'warn_list') && + hasOwnProperty(configObject, "warn_list") && configObject.warn_list instanceof Array ) { for (const warn_item of configObject.warn_list) { - if (typeof warn_item === 'string') { + if (typeof warn_item === "string") { config.warnList.add(warn_item); } } @@ -323,14 +323,14 @@ export class AnsibleLint { ): Promise { // find configuration path let configPath; - const pathArray = uri.split('/'); + const pathArray = uri.split("/"); // Find first configuration file going up until workspace root for (let index = pathArray.length - 1; index >= 0; index--) { const candidatePath = pathArray .slice(0, index) - .concat('.ansible-lint') - .join('/'); + .concat(".ansible-lint") + .join("/"); if (!candidatePath.startsWith(this.context.workspaceFolder.uri)) { // we've gone out of the workspace folder break; diff --git a/src/services/ansiblePlaybook.ts b/src/services/ansiblePlaybook.ts index 736a4ff0c..dbde600ff 100644 --- a/src/services/ansiblePlaybook.ts +++ b/src/services/ansiblePlaybook.ts @@ -1,6 +1,6 @@ -import * as child_process from 'child_process'; -import * as path from 'path'; -import { URI } from 'vscode-uri'; +import * as child_process from "child_process"; +import * as path from "path"; +import { URI } from "vscode-uri"; import { Connection, Diagnostic, @@ -8,10 +8,10 @@ import { integer, Position, Range, -} from 'vscode-languageserver'; -import { TextDocument } from 'vscode-languageserver-textdocument'; -import { WorkspaceFolderContext } from './workspaceManager'; -import { CommandRunner } from '../utils/commandRunner'; +} from "vscode-languageserver"; +import { TextDocument } from "vscode-languageserver-textdocument"; +import { WorkspaceFolderContext } from "./workspaceManager"; +import { CommandRunner } from "../utils/commandRunner"; /** * Acts as an interface to ansible-playbook command. @@ -57,9 +57,9 @@ export class AnsiblePlaybook { const settings = await this.context.documentSettings.get(textDocument.uri); progressTracker.begin( - 'ansible syntax-check', + "ansible syntax-check", undefined, - 'Processing files...' + "Processing files..." ); const commandRunner = new CommandRunner( @@ -70,7 +70,7 @@ export class AnsiblePlaybook { try { // run ansible playbook syntax-check await commandRunner.runCommand( - 'ansible-playbook', + "ansible-playbook", `${docPath} --syntax-check`, workingDirectory, mountPaths @@ -125,7 +125,7 @@ export class AnsiblePlaybook { const diagnostics: Map = new Map(); if (!result) { this.connection.console.warn( - 'Standard output from ansible syntax-check is suspiciously empty.' + "Standard output from ansible syntax-check is suspiciously empty." ); return diagnostics; } @@ -152,7 +152,7 @@ export class AnsiblePlaybook { message: result, range, severity, - source: 'Ansible', + source: "Ansible", }); diagnostics.set(locationUri, fileDiagnostics); diff --git a/src/services/docsLibrary.ts b/src/services/docsLibrary.ts index aab32ac95..4f4eb4856 100644 --- a/src/services/docsLibrary.ts +++ b/src/services/docsLibrary.ts @@ -1,18 +1,18 @@ -import { Connection } from 'vscode-languageserver'; -import { Node } from 'yaml/types'; -import { getDeclaredCollections } from '../utils/yaml'; -import { findDocumentation, findPluginRouting } from '../utils/docsFinder'; -import { WorkspaceFolderContext } from './workspaceManager'; +import { Connection } from "vscode-languageserver"; +import { Node } from "yaml/types"; +import { getDeclaredCollections } from "../utils/yaml"; +import { findDocumentation, findPluginRouting } from "../utils/docsFinder"; +import { WorkspaceFolderContext } from "./workspaceManager"; import { IPluginRoute, IPluginRoutesByType, IPluginRoutingByCollection, -} from '../interfaces/pluginRouting'; +} from "../interfaces/pluginRouting"; import { processDocumentationFragments, processRawDocumentation, -} from '../utils/docsParser'; -import { IModuleMetadata } from '../interfaces/module'; +} from "../utils/docsParser"; +import { IModuleMetadata } from "../interfaces/module"; export class DocsLibrary { private connection: Connection; private modules = new Map(); @@ -40,12 +40,12 @@ export class DocsLibrary { await this.context.executionEnvironment; } for (const modulesPath of ansibleConfig.module_locations) { - (await findDocumentation(modulesPath, 'builtin')).forEach((doc) => { + (await findDocumentation(modulesPath, "builtin")).forEach((doc) => { this.modules.set(doc.fqcn, doc); this.moduleFqcns.add(doc.fqcn); }); - (await findDocumentation(modulesPath, 'builtin_doc_fragment')).forEach( + (await findDocumentation(modulesPath, "builtin_doc_fragment")).forEach( (doc) => { this.docFragments.set(doc.fqcn, doc); } @@ -53,11 +53,11 @@ export class DocsLibrary { } ( - await findPluginRouting(ansibleConfig.ansible_location, 'builtin') + await findPluginRouting(ansibleConfig.ansible_location, "builtin") ).forEach((r, collection) => this.pluginRouting.set(collection, r)); for (const collectionsPath of ansibleConfig.collections_paths) { - (await findDocumentation(collectionsPath, 'collection')).forEach( + (await findDocumentation(collectionsPath, "collection")).forEach( (doc) => { this.modules.set(doc.fqcn, doc); this.moduleFqcns.add(doc.fqcn); @@ -65,18 +65,18 @@ export class DocsLibrary { ); ( - await findDocumentation(collectionsPath, 'collection_doc_fragment') + await findDocumentation(collectionsPath, "collection_doc_fragment") ).forEach((doc) => { this.docFragments.set(doc.fqcn, doc); }); - (await findPluginRouting(collectionsPath, 'collection')).forEach( + (await findPluginRouting(collectionsPath, "collection")).forEach( (r, collection) => this.pluginRouting.set(collection, r) ); // add all valid redirect routes as possible FQCNs for (const [collection, routesByType] of this.pluginRouting) { - for (const [name, route] of routesByType.get('modules') || []) { + for (const [name, route] of routesByType.get("modules") || []) { if (route.redirect && !route.tombstone) { this.moduleFqcns.add(`${collection}.${name}`); } @@ -163,7 +163,7 @@ export class DocsLibrary { contextPath: Node[] | undefined ) { const candidateFqcns = []; - if (searchText.split('.').length === 3) { + if (searchText.split(".").length === 3) { candidateFqcns.push(searchText); // try searching as-is (FQCN match) } else { candidateFqcns.push(`ansible.builtin.${searchText}`); // try searching built-in @@ -190,12 +190,12 @@ export class DocsLibrary { } public getModuleRoute(fqcn: string): IPluginRoute | undefined { - const fqcn_array = fqcn.split('.'); + const fqcn_array = fqcn.split("."); if (fqcn_array.length === 3) { const [namespace, collection, name] = fqcn_array; return this.pluginRouting .get(`${namespace}.${collection}`) - ?.get('modules') + ?.get("modules") ?.get(name); } } diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 78ed0d5a1..387eac019 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -1,19 +1,19 @@ -import * as child_process from 'child_process'; -import * as fs from 'fs'; -import * as path from 'path'; -import { URI } from 'vscode-uri'; -import { Connection } from 'vscode-languageserver'; -import { v4 as uuidv4 } from 'uuid'; -import { ImagePuller } from '../utils/imagePuller'; -import { asyncExec } from '../utils/misc'; -import { WorkspaceFolderContext } from './workspaceManager'; -import { IContainerEngine } from '../interfaces/extensionSettings'; +import * as child_process from "child_process"; +import * as fs from "fs"; +import * as path from "path"; +import { URI } from "vscode-uri"; +import { Connection } from "vscode-languageserver"; +import { v4 as uuidv4 } from "uuid"; +import { ImagePuller } from "../utils/imagePuller"; +import { asyncExec } from "../utils/misc"; +import { WorkspaceFolderContext } from "./workspaceManager"; +import { IContainerEngine } from "../interfaces/extensionSettings"; export class ExecutionEnvironment { private connection: Connection; private context: WorkspaceFolderContext; private useProgressTracker = false; - private successFileMarker = 'SUCCESS'; + private successFileMarker = "SUCCESS"; private _container_engine: IContainerEngine; private _container_image: string; private _container_image_id: string; @@ -35,11 +35,11 @@ export class ExecutionEnvironment { } this._container_image = settings.executionEnvironment.image; this._container_engine = settings.executionEnvironment.containerEngine; - if (this._container_engine === 'auto') { - for (const ce of ['podman', 'docker']) { + if (this._container_engine === "auto") { + for (const ce of ["podman", "docker"]) { try { child_process.execSync(`which ${ce}`, { - encoding: 'utf-8', + encoding: "utf-8", }); } catch (error) { this.connection.console.info(`Container engine '${ce}' not found`); @@ -52,7 +52,7 @@ export class ExecutionEnvironment { } else { try { child_process.execSync(`which ${this._container_engine}`, { - encoding: 'utf-8', + encoding: "utf-8", }); } catch (error) { this.connection.window.showErrorMessage( @@ -61,9 +61,9 @@ export class ExecutionEnvironment { return; } } - if (!['podman', 'docker'].includes(this._container_engine)) { + if (!["podman", "docker"].includes(this._container_engine)) { this.connection.window.showInformationMessage( - 'No valid container engine found.' + "No valid container engine found." ); return; } @@ -98,7 +98,7 @@ export class ExecutionEnvironment { const ansibleConfig = await this.context.ansibleConfig; const containerName = `${this._container_image.replace( /[^a-z0-9]/gi, - '_' + "_" )}`; let progressTracker; @@ -107,7 +107,7 @@ export class ExecutionEnvironment { this.connection.console.log(containerImageIdCommand); this._container_image_id = child_process .execSync(containerImageIdCommand, { - encoding: 'utf-8', + encoding: "utf-8", }) .trim(); const hostCacheBasePath = path.resolve( @@ -135,7 +135,7 @@ export class ExecutionEnvironment { } if (progressTracker) { progressTracker.begin( - 'execution-environment', + "execution-environment", undefined, `Copy plugin docs from '${this._container_image} to host cache path`, true @@ -145,18 +145,18 @@ export class ExecutionEnvironment { hostCacheBasePath, containerName, ansibleConfig.collections_paths, - 'ansible_collections' + "ansible_collections" ); const builtin_plugin_locations: string[] = []; ansibleConfig.module_locations.forEach((modulePath) => { const pluginsPathParts = modulePath.split(path.sep).slice(0, -1); - if (pluginsPathParts.includes('site-packages')) { + if (pluginsPathParts.includes("site-packages")) { // ansible-config returns default builtin configured module path // as ``/site-packages/ansible/modules`` to copy other plugins // to local cache strip the ``modules`` part from the path and append // ``plugins`` folder. - pluginsPathParts.push('plugins'); + pluginsPathParts.push("plugins"); } builtin_plugin_locations.push(pluginsPathParts.join(path.sep)); }); @@ -165,7 +165,7 @@ export class ExecutionEnvironment { hostCacheBasePath, containerName, builtin_plugin_locations, - '/' + "/" ); // Copy builtin modules @@ -173,12 +173,12 @@ export class ExecutionEnvironment { hostCacheBasePath, containerName, ansibleConfig.module_locations, - '/' + "/" ); } // plugin cache successfully created fs.closeSync( - fs.openSync(path.join(hostCacheBasePath, this.successFileMarker), 'w') + fs.openSync(path.join(hostCacheBasePath, this.successFileMarker), "w") ); } catch (error) { this.connection.window.showErrorMessage( @@ -199,11 +199,11 @@ export class ExecutionEnvironment { this.context.workspaceFolder.uri ).path; const containerCommand: Array = [this._container_engine]; - containerCommand.push(...['run', '--rm']); - containerCommand.push(...['--workdir', workspaceFolderPath]); + containerCommand.push(...["run", "--rm"]); + containerCommand.push(...["--workdir", workspaceFolderPath]); containerCommand.push( - ...['-v', `${workspaceFolderPath}:${workspaceFolderPath}`] + ...["-v", `${workspaceFolderPath}:${workspaceFolderPath}`] ); for (const mountPath of mountPaths || []) { @@ -211,23 +211,23 @@ export class ExecutionEnvironment { if (containerCommand.includes(volumeMountPath)) { continue; } - containerCommand.push('-v', volumeMountPath); + containerCommand.push("-v", volumeMountPath); } - if (this._container_engine === 'podman') { + if (this._container_engine === "podman") { // container namespace stuff - containerCommand.push('--group-add=root'); - containerCommand.push('--ipc=host'); + containerCommand.push("--group-add=root"); + containerCommand.push("--ipc=host"); // docker does not support this option - containerCommand.push('--quiet'); + containerCommand.push("--quiet"); } else { containerCommand.push(`--user=${process.getuid()}`); } containerCommand.push(`--name ansible_language_server_${uuidv4()}`); containerCommand.push(this._container_image); containerCommand.push(command); - const generatedCommand = containerCommand.join(' '); + const generatedCommand = containerCommand.join(" "); this.connection.console.log( `container engine invocation: ${generatedCommand}` ); @@ -282,10 +282,10 @@ export class ExecutionEnvironment { this.connection.console.info(`Executing command ${command}`); const result = child_process .execSync(command, { - encoding: 'utf-8', + encoding: "utf-8", }) .trim(); - return result.trim() !== ''; + return result.trim() !== ""; } catch (error) { this.connection.console.error(error); return false; @@ -299,7 +299,7 @@ export class ExecutionEnvironment { const command = `${this._container_engine} run --rm -it -d --name ${containerName} ${this._container_image} bash`; this.connection.console.log(`run container with command '${command}'`); child_process.execSync(command, { - encoding: 'utf-8', + encoding: "utf-8", }); } catch (error) { this.connection.window.showErrorMessage( @@ -324,7 +324,7 @@ export class ExecutionEnvironment { updatedHostDocPath.push(destPath); } else { if ( - srcPath === '' || + srcPath === "" || !this.isPluginInPath(containerName, srcPath, searchKind) ) { return; @@ -339,7 +339,7 @@ export class ExecutionEnvironment { `Copying plugins from container to local cache path ${copyCommand}` ); asyncExec(copyCommand, { - encoding: 'utf-8', + encoding: "utf-8", }); updatedHostDocPath.push(destPath); diff --git a/src/services/metadataLibrary.ts b/src/services/metadataLibrary.ts index fd108409f..2cd503f48 100644 --- a/src/services/metadataLibrary.ts +++ b/src/services/metadataLibrary.ts @@ -1,10 +1,10 @@ -import { promises as fs } from 'fs'; -import { Connection } from 'vscode-languageserver'; -import { DidChangeWatchedFilesParams } from 'vscode-languageserver-protocol'; -import { URI } from 'vscode-uri'; -import { parseAllDocuments } from 'yaml'; -import { IDocumentMetadata } from '../interfaces/documentMeta'; -import { fileExists, hasOwnProperty } from '../utils/misc'; +import { promises as fs } from "fs"; +import { Connection } from "vscode-languageserver"; +import { DidChangeWatchedFilesParams } from "vscode-languageserver-protocol"; +import { URI } from "vscode-uri"; +import { parseAllDocuments } from "yaml"; +import { IDocumentMetadata } from "../interfaces/documentMeta"; +import { fileExists, hasOwnProperty } from "../utils/misc"; export class MetadataLibrary { private connection: Connection; @@ -43,15 +43,15 @@ export class MetadataLibrary { */ private getAnsibleMetadataUri(uri: string): string | undefined { let metaPath; - const pathArray = uri.split('/'); + const pathArray = uri.split("/"); // Find first for (let index = pathArray.length - 1; index >= 0; index--) { - if (pathArray[index] === 'tasks') { + if (pathArray[index] === "tasks") { metaPath = pathArray .slice(0, index) - .concat('meta', 'main.yml') - .join('/'); + .concat("meta", "main.yml") + .join("/"); } } return metaPath; @@ -68,16 +68,16 @@ export class MetadataLibrary { if (await fileExists(metadataFilePath)) { try { const metaContents = await fs.readFile(metadataFilePath, { - encoding: 'utf8', + encoding: "utf8", }); parseAllDocuments(metaContents).forEach((metaDoc) => { const metaObject: unknown = metaDoc.toJSON(); if ( - hasOwnProperty(metaObject, 'collections') && + hasOwnProperty(metaObject, "collections") && metaObject.collections instanceof Array ) { metaObject.collections.forEach((collection) => { - if (typeof collection === 'string') { + if (typeof collection === "string") { metadata.collections.push(collection); } }); diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index cda7227cb..e6d7fce5d 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -1,7 +1,7 @@ -import * as _ from 'lodash'; -import { Connection } from 'vscode-languageserver'; -import { DidChangeConfigurationParams } from 'vscode-languageserver-protocol'; -import { ExtensionSettings } from '../interfaces/extensionSettings'; +import * as _ from "lodash"; +import { Connection } from "vscode-languageserver"; +import { DidChangeConfigurationParams } from "vscode-languageserver-protocol"; +import { ExtensionSettings } from "../interfaces/extensionSettings"; export class SettingsManager { private connection: Connection; @@ -13,14 +13,14 @@ export class SettingsManager { new Map(); private defaultSettings: ExtensionSettings = { - ansible: { path: 'ansible', useFullyQualifiedCollectionNames: true }, - ansibleLint: { enabled: true, path: 'ansible-lint', arguments: '' }, - python: { interpreterPath: '', activationScript: '' }, + ansible: { path: "ansible", useFullyQualifiedCollectionNames: true }, + ansibleLint: { enabled: true, path: "ansible-lint", arguments: "" }, + python: { interpreterPath: "", activationScript: "" }, executionEnvironment: { - containerEngine: 'auto', + containerEngine: "auto", enabled: false, - image: 'quay.io/ansible/creator-ee:latest', - pullPolicy: 'missing', + image: "quay.io/ansible/creator-ee:latest", + pullPolicy: "missing", }, }; private globalSettings: ExtensionSettings = this.defaultSettings; @@ -48,7 +48,7 @@ export class SettingsManager { if (!result) { result = this.connection.workspace.getConfiguration({ scopeUri: uri, - section: 'ansible', + section: "ansible", }); this.documentSettings.set(uri, result); } @@ -78,7 +78,7 @@ export class SettingsManager { const newConfigPromise = this.connection.workspace.getConfiguration({ scopeUri: uri, - section: 'ansible', + section: "ansible", }); newDocumentSettings.set(uri, newConfigPromise); diff --git a/src/services/validationManager.ts b/src/services/validationManager.ts index 2a7df2591..9c9504ead 100644 --- a/src/services/validationManager.ts +++ b/src/services/validationManager.ts @@ -1,12 +1,12 @@ -import IntervalTree from '@flatten-js/interval-tree'; +import IntervalTree from "@flatten-js/interval-tree"; import { Connection, Diagnostic, integer, TextDocumentContentChangeEvent, TextDocuments, -} from 'vscode-languageserver'; -import { TextDocument } from 'vscode-languageserver-textdocument'; +} from "vscode-languageserver"; +import { TextDocument } from "vscode-languageserver-textdocument"; /** * Provides cache for selected diagnostics. @@ -115,7 +115,7 @@ export class ValidationManager { const diagnosticTree = this.validationCache.get(fileUri); if (diagnosticTree) { for (const change of changes) { - if ('range' in change) { + if ("range" in change) { const invalidatedDiagnostics = diagnosticTree.search([ change.range.start.line, change.range.end.line, diff --git a/src/services/workspaceManager.ts b/src/services/workspaceManager.ts index 80531e59a..46bcee726 100644 --- a/src/services/workspaceManager.ts +++ b/src/services/workspaceManager.ts @@ -1,20 +1,20 @@ -import * as _ from 'lodash'; +import * as _ from "lodash"; import { ClientCapabilities, Connection, DidChangeWatchedFilesParams, WorkspaceFolder, WorkspaceFoldersChangeEvent, -} from 'vscode-languageserver'; -import { AnsibleConfig } from './ansibleConfig'; -import { AnsibleLint } from './ansibleLint'; -import { AnsiblePlaybook } from './ansiblePlaybook'; -import { DocsLibrary } from './docsLibrary'; -import { ExecutionEnvironment } from './executionEnvironment'; -import { MetadataLibrary } from './metadataLibrary'; -import { SettingsManager } from './settingsManager'; -import * as path from 'path'; -import { URI } from 'vscode-uri'; +} from "vscode-languageserver"; +import { AnsibleConfig } from "./ansibleConfig"; +import { AnsibleLint } from "./ansibleLint"; +import { AnsiblePlaybook } from "./ansiblePlaybook"; +import { DocsLibrary } from "./docsLibrary"; +import { ExecutionEnvironment } from "./executionEnvironment"; +import { MetadataLibrary } from "./metadataLibrary"; +import { SettingsManager } from "./settingsManager"; +import * as path from "path"; +import { URI } from "vscode-uri"; /** * Holds the overall context for the whole workspace. diff --git a/src/utils/ansible.ts b/src/utils/ansible.ts index ebb76eeb4..5fdd4e7cf 100644 --- a/src/utils/ansible.ts +++ b/src/utils/ansible.ts @@ -1,43 +1,43 @@ -import { MarkupContent, MarkupKind } from 'vscode-languageserver'; +import { MarkupContent, MarkupKind } from "vscode-languageserver"; export const playKeywords = new Map(); playKeywords.set( - 'any_errors_fatal', - 'Force any un-handled task errors on any host to propagate to all hosts and end the play.' + "any_errors_fatal", + "Force any un-handled task errors on any host to propagate to all hosts and end the play." ); playKeywords.set( - 'become', - 'Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin.' + "become", + "Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin." ); -playKeywords.set('become_exe', { +playKeywords.set("become_exe", { kind: MarkupKind.Markdown, value: - 'Path to the executable used to elevate privileges. Implemented by the become plugin. See `Become Plugins`.', + "Path to the executable used to elevate privileges. Implemented by the become plugin. See `Become Plugins`.", }); playKeywords.set( - 'become_flags', - 'A string of flag(s) to pass to the privilege escalation program when become is True.' + "become_flags", + "A string of flag(s) to pass to the privilege escalation program when become is True." ); playKeywords.set( - 'become_method', - 'Which method of privilege escalation to use (such as sudo or su).' + "become_method", + "Which method of privilege escalation to use (such as sudo or su)." ); playKeywords.set( - 'become_user', - 'User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user.' + "become_user", + "User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user." ); -playKeywords.set('check_mode', { +playKeywords.set("check_mode", { kind: MarkupKind.Markdown, value: - 'A boolean that controls if a task is executed in ‘check’ mode. See `Validating tasks: check mode and diff mode`.', + "A boolean that controls if a task is executed in ‘check’ mode. See `Validating tasks: check mode and diff mode`.", }); -playKeywords.set('collections', { +playKeywords.set("collections", { kind: MarkupKind.Markdown, value: `List of collection namespaces to search for modules, plugins, and roles. See \`Using collections in a Playbook\`. @@ -45,198 +45,198 @@ NOTE: Tasks within a role do not inherit the value of \`collections\` from the play. To have a role search a list of collections, use the \`collections\` keyword in \`meta/main.yml\` within a role.`, }); -playKeywords.set('connection', { +playKeywords.set("connection", { kind: MarkupKind.Markdown, value: - 'Allows you to change the connection plugin used for tasks to execute on the target. See `Using connection plugins`.', + "Allows you to change the connection plugin used for tasks to execute on the target. See `Using connection plugins`.", }); -playKeywords.set('debugger', { +playKeywords.set("debugger", { kind: MarkupKind.Markdown, value: - 'Enable debugging tasks based on state of the task result. See `Debugging tasks`.', + "Enable debugging tasks based on state of the task result. See `Debugging tasks`.", }); playKeywords.set( - 'diff', - 'Toggle to make tasks return ‘diff’ information or not.' + "diff", + "Toggle to make tasks return ‘diff’ information or not." ); playKeywords.set( - 'environment', - 'A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data.' + "environment", + "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data." ); playKeywords.set( - 'fact_path', - 'Set the fact path option for the fact gathering plugin controlled by gather_facts.' + "fact_path", + "Set the fact path option for the fact gathering plugin controlled by gather_facts." ); playKeywords.set( - 'force_handlers', - 'Will force notified handler execution for hosts even if they failed during the play. Will not trigger if the play itself fails.' + "force_handlers", + "Will force notified handler execution for hosts even if they failed during the play. Will not trigger if the play itself fails." ); playKeywords.set( - 'gather_facts', - 'A boolean that controls if the play will automatically run the ‘setup’ task to gather facts for the hosts.' + "gather_facts", + "A boolean that controls if the play will automatically run the ‘setup’ task to gather facts for the hosts." ); playKeywords.set( - 'gather_subset', - 'Allows you to pass subset options to the fact gathering plugin controlled by gather_facts.' + "gather_subset", + "Allows you to pass subset options to the fact gathering plugin controlled by gather_facts." ); playKeywords.set( - 'gather_timeout', - 'Allows you to set the timeout for the fact gathering plugin controlled by gather_facts.' + "gather_timeout", + "Allows you to set the timeout for the fact gathering plugin controlled by gather_facts." ); playKeywords.set( - 'handlers', - 'A section with tasks that are treated as handlers, these won’t get executed normally, only when notified after each section of tasks is complete. A handler’s listen field cannot use templates.' + "handlers", + "A section with tasks that are treated as handlers, these won’t get executed normally, only when notified after each section of tasks is complete. A handler’s listen field cannot use templates." ); playKeywords.set( - 'hosts', - 'A list of groups, hosts or host pattern that translates into a list of hosts that are the play’s target.' + "hosts", + "A list of groups, hosts or host pattern that translates into a list of hosts that are the play’s target." ); playKeywords.set( - 'ignore_errors', - 'Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.' + "ignore_errors", + "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors." ); playKeywords.set( - 'ignore_unreachable', - 'Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts.' + "ignore_unreachable", + "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts." ); playKeywords.set( - 'max_fail_percentage', - 'Can be used to abort the run after a given percentage of hosts in the current batch has failed. This only works on linear or linear derived strategies.' + "max_fail_percentage", + "Can be used to abort the run after a given percentage of hosts in the current batch has failed. This only works on linear or linear derived strategies." ); playKeywords.set( - 'module_defaults', - 'Specifies default parameter values for modules.' + "module_defaults", + "Specifies default parameter values for modules." ); playKeywords.set( - 'name', - 'Identifier. Can be used for documentation, or in tasks/handlers.' + "name", + "Identifier. Can be used for documentation, or in tasks/handlers." ); -playKeywords.set('no_log', 'Boolean that controls information disclosure.'); +playKeywords.set("no_log", "Boolean that controls information disclosure."); playKeywords.set( - 'order', - 'Controls the sorting of hosts as they are used for executing the play. Possible values are inventory (default), sorted, reverse_sorted, reverse_inventory and shuffle.' + "order", + "Controls the sorting of hosts as they are used for executing the play. Possible values are inventory (default), sorted, reverse_sorted, reverse_inventory and shuffle." ); playKeywords.set( - 'port', - 'Used to override the default port used in a connection.' + "port", + "Used to override the default port used in a connection." ); playKeywords.set( - 'post_tasks', - 'A list of tasks to execute after the tasks section.' + "post_tasks", + "A list of tasks to execute after the tasks section." ); -playKeywords.set('pre_tasks', 'A list of tasks to execute before roles.'); +playKeywords.set("pre_tasks", "A list of tasks to execute before roles."); playKeywords.set( - 'remote_user', - 'User used to log into the target via the connection plugin.' + "remote_user", + "User used to log into the target via the connection plugin." ); -playKeywords.set('roles', 'List of roles to be imported into the play'); +playKeywords.set("roles", "List of roles to be imported into the play"); playKeywords.set( - 'run_once', - 'Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch.' + "run_once", + "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch." ); playKeywords.set( - 'serial', - 'Explicitly define how Ansible batches the execution of the current play on the play’s target' + "serial", + "Explicitly define how Ansible batches the execution of the current play on the play’s target" ); playKeywords.set( - 'strategy', - 'Allows you to choose the connection plugin to use for the play.' + "strategy", + "Allows you to choose the connection plugin to use for the play." ); playKeywords.set( - 'tags', - 'Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.' + "tags", + "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line." ); playKeywords.set( - 'tasks', - 'Main list of tasks to execute in the play, they run after roles and before post_tasks.' + "tasks", + "Main list of tasks to execute in the play, they run after roles and before post_tasks." ); playKeywords.set( - 'throttle', - 'Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel.' + "throttle", + "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel." ); playKeywords.set( - 'timeout', - 'Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task.' + "timeout", + "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task." ); -playKeywords.set('vars', 'Dictionary/map of variables'); +playKeywords.set("vars", "Dictionary/map of variables"); playKeywords.set( - 'vars_files', - 'List of files that contain vars to include in the play.' + "vars_files", + "List of files that contain vars to include in the play." ); -playKeywords.set('vars_prompt', 'List of variables to prompt for.'); +playKeywords.set("vars_prompt", "List of variables to prompt for."); export const roleKeywords = new Map(); roleKeywords.set( - 'any_errors_fatal', - 'Force any un-handled task errors on any host to propagate to all hosts and end the play.' + "any_errors_fatal", + "Force any un-handled task errors on any host to propagate to all hosts and end the play." ); -roleKeywords.set('become', { +roleKeywords.set("become", { kind: MarkupKind.Markdown, value: - 'Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin. See `Become Plugins`.', + "Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin. See `Become Plugins`.", }); -roleKeywords.set('become_exe', { +roleKeywords.set("become_exe", { kind: MarkupKind.Markdown, value: - 'Path to the executable used to elevate privileges. Implemented by the become plugin. See `Become Plugins`.', + "Path to the executable used to elevate privileges. Implemented by the become plugin. See `Become Plugins`.", }); roleKeywords.set( - 'become_flags', - 'A string of flag(s) to pass to the privilege escalation program when become is True.' + "become_flags", + "A string of flag(s) to pass to the privilege escalation program when become is True." ); roleKeywords.set( - 'become_method', - 'Which method of privilege escalation to use (such as sudo or su).' + "become_method", + "Which method of privilege escalation to use (such as sudo or su)." ); roleKeywords.set( - 'become_user', - 'User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user.' + "become_user", + "User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user." ); -roleKeywords.set('check_mode', { +roleKeywords.set("check_mode", { kind: MarkupKind.Markdown, value: - 'A boolean that controls if a task is executed in ‘check’ mode. See `Validating tasks: check mode and diff mode`.', + "A boolean that controls if a task is executed in ‘check’ mode. See `Validating tasks: check mode and diff mode`.", }); -roleKeywords.set('collections', { +roleKeywords.set("collections", { kind: MarkupKind.Markdown, value: `List of collection namespaces to search for modules, plugins, and roles. See \`Using collections in a Playbook\`. @@ -244,144 +244,144 @@ NOTE: Tasks within a role do not inherit the value of \`collections\` from the play. To have a role search a list of collections, use the \`collections\` keyword in \`meta/main.yml\` within a role.`, }); -roleKeywords.set('connection', { +roleKeywords.set("connection", { kind: MarkupKind.Markdown, value: - 'Allows you to change the connection plugin used for tasks to execute on the target. See `Using connection plugins`.', + "Allows you to change the connection plugin used for tasks to execute on the target. See `Using connection plugins`.", }); -roleKeywords.set('debugger', { +roleKeywords.set("debugger", { kind: MarkupKind.Markdown, value: - 'Enable debugging tasks based on state of the task result. See `Debugging tasks`.', + "Enable debugging tasks based on state of the task result. See `Debugging tasks`.", }); roleKeywords.set( - 'delegate_facts', - 'Boolean that allows you to apply facts to a delegated host instead of inventory_hostname.' + "delegate_facts", + "Boolean that allows you to apply facts to a delegated host instead of inventory_hostname." ); roleKeywords.set( - 'delegate_to', - 'Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task.' + "delegate_to", + "Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task." ); roleKeywords.set( - 'diff', - 'Toggle to make tasks return ‘diff’ information or not.' + "diff", + "Toggle to make tasks return ‘diff’ information or not." ); roleKeywords.set( - 'environment', - 'A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data.' + "environment", + "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data." ); roleKeywords.set( - 'ignore_errors', - 'Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.' + "ignore_errors", + "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors." ); roleKeywords.set( - 'ignore_unreachable', - 'Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts.' + "ignore_unreachable", + "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts." ); roleKeywords.set( - 'module_defaults', - 'Specifies default parameter values for modules.' + "module_defaults", + "Specifies default parameter values for modules." ); roleKeywords.set( - 'name', - 'Identifier. Can be used for documentation, or in tasks/handlers.' + "name", + "Identifier. Can be used for documentation, or in tasks/handlers." ); -roleKeywords.set('no_log', 'Boolean that controls information disclosure.'); +roleKeywords.set("no_log", "Boolean that controls information disclosure."); roleKeywords.set( - 'port', - 'Used to override the default port used in a connection.' + "port", + "Used to override the default port used in a connection." ); roleKeywords.set( - 'remote_user', - 'User used to log into the target via the connection plugin.' + "remote_user", + "User used to log into the target via the connection plugin." ); roleKeywords.set( - 'run_once', - 'Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch.' + "run_once", + "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch." ); roleKeywords.set( - 'tags', - 'Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.' + "tags", + "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line." ); roleKeywords.set( - 'throttle', - 'Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel.' + "throttle", + "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel." ); roleKeywords.set( - 'timeout', - 'Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task.' + "timeout", + "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task." ); -roleKeywords.set('vars', 'Dictionary/map of variables'); +roleKeywords.set("vars", "Dictionary/map of variables"); roleKeywords.set( - 'when', - 'Conditional expression, determines if an iteration of a task is run or not.' + "when", + "Conditional expression, determines if an iteration of a task is run or not." ); export const blockKeywords = new Map(); blockKeywords.set( - 'always', - 'List of tasks, in a block, that execute no matter if there is an error in the block or not.' + "always", + "List of tasks, in a block, that execute no matter if there is an error in the block or not." ); blockKeywords.set( - 'any_errors_fatal', - 'Force any un-handled task errors on any host to propagate to all hosts and end the play.' + "any_errors_fatal", + "Force any un-handled task errors on any host to propagate to all hosts and end the play." ); -blockKeywords.set('become', { +blockKeywords.set("become", { kind: MarkupKind.Markdown, value: - 'Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin. See `Become Plugins`.', + "Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin. See `Become Plugins`.", }); -blockKeywords.set('become_exe', { +blockKeywords.set("become_exe", { kind: MarkupKind.Markdown, value: - 'Path to the executable used to elevate privileges. Implemented by the become plugin. See `Become Plugins`.', + "Path to the executable used to elevate privileges. Implemented by the become plugin. See `Become Plugins`.", }); blockKeywords.set( - 'become_flags', - 'A string of flag(s) to pass to the privilege escalation program when become is True.' + "become_flags", + "A string of flag(s) to pass to the privilege escalation program when become is True." ); blockKeywords.set( - 'become_method', - 'Which method of privilege escalation to use (such as sudo or su).' + "become_method", + "Which method of privilege escalation to use (such as sudo or su)." ); blockKeywords.set( - 'become_user', - 'User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user.' + "become_user", + "User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user." ); -blockKeywords.set('block', 'List of tasks in a block.'); +blockKeywords.set("block", "List of tasks in a block."); -blockKeywords.set('check_mode', { +blockKeywords.set("check_mode", { kind: MarkupKind.Markdown, value: - 'A boolean that controls if a task is executed in ‘check’ mode. See `Validating tasks: check mode and diff mode`.', + "A boolean that controls if a task is executed in ‘check’ mode. See `Validating tasks: check mode and diff mode`.", }); -blockKeywords.set('collections', { +blockKeywords.set("collections", { kind: MarkupKind.Markdown, value: `List of collection namespaces to search for modules, plugins, and roles. See \`Using collections in a Playbook\`. @@ -389,167 +389,167 @@ NOTE: Tasks within a role do not inherit the value of \`collections\` from the play. To have a role search a list of collections, use the \`collections\` keyword in \`meta/main.yml\` within a role.`, }); -blockKeywords.set('connection', { +blockKeywords.set("connection", { kind: MarkupKind.Markdown, value: - 'Allows you to change the connection plugin used for tasks to execute on the target. See `Using connection plugins`.', + "Allows you to change the connection plugin used for tasks to execute on the target. See `Using connection plugins`.", }); -blockKeywords.set('debugger', { +blockKeywords.set("debugger", { kind: MarkupKind.Markdown, value: - 'Enable debugging tasks based on state of the task result. See `Debugging tasks`.', + "Enable debugging tasks based on state of the task result. See `Debugging tasks`.", }); blockKeywords.set( - 'delegate_facts', - 'Boolean that allows you to apply facts to a delegated host instead of inventory_hostname.' + "delegate_facts", + "Boolean that allows you to apply facts to a delegated host instead of inventory_hostname." ); blockKeywords.set( - 'delegate_to', - 'Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task.' + "delegate_to", + "Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task." ); blockKeywords.set( - 'diff', - 'Toggle to make tasks return ‘diff’ information or not.' + "diff", + "Toggle to make tasks return ‘diff’ information or not." ); blockKeywords.set( - 'environment', - 'A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data.' + "environment", + "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data." ); blockKeywords.set( - 'ignore_errors', - 'Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.' + "ignore_errors", + "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors." ); blockKeywords.set( - 'ignore_unreachable', - 'Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts.' + "ignore_unreachable", + "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts." ); blockKeywords.set( - 'module_defaults', - 'Specifies default parameter values for modules.' + "module_defaults", + "Specifies default parameter values for modules." ); blockKeywords.set( - 'name', - 'Identifier. Can be used for documentation, or in tasks/handlers.' + "name", + "Identifier. Can be used for documentation, or in tasks/handlers." ); -blockKeywords.set('no_log', 'Boolean that controls information disclosure.'); +blockKeywords.set("no_log", "Boolean that controls information disclosure."); blockKeywords.set( - 'notify', - 'List of handlers to notify when the task returns a ‘changed=True’ status.' + "notify", + "List of handlers to notify when the task returns a ‘changed=True’ status." ); blockKeywords.set( - 'port', - 'Used to override the default port used in a connection.' + "port", + "Used to override the default port used in a connection." ); blockKeywords.set( - 'remote_user', - 'User used to log into the target via the connection plugin.' + "remote_user", + "User used to log into the target via the connection plugin." ); blockKeywords.set( - 'rescue', - 'List of tasks in a block that run if there is a task error in the main block list.' + "rescue", + "List of tasks in a block that run if there is a task error in the main block list." ); blockKeywords.set( - 'run_once', - 'Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch.' + "run_once", + "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch." ); blockKeywords.set( - 'tags', - 'Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.' + "tags", + "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line." ); blockKeywords.set( - 'throttle', - 'Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel.' + "throttle", + "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel." ); blockKeywords.set( - 'timeout', - 'Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task.' + "timeout", + "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task." ); -blockKeywords.set('vars', 'Dictionary/map of variables'); +blockKeywords.set("vars", "Dictionary/map of variables"); blockKeywords.set( - 'when', - 'Conditional expression, determines if an iteration of a task is run or not.' + "when", + "Conditional expression, determines if an iteration of a task is run or not." ); export const taskKeywords = new Map(); taskKeywords.set( - 'action', - 'The ‘action’ to execute for a task, it normally translates into a C(module) or action plugin.' + "action", + "The ‘action’ to execute for a task, it normally translates into a C(module) or action plugin." ); taskKeywords.set( - 'any_errors_fatal', - 'Force any un-handled task errors on any host to propagate to all hosts and end the play.' + "any_errors_fatal", + "Force any un-handled task errors on any host to propagate to all hosts and end the play." ); taskKeywords.set( - 'args', - 'A secondary way to add arguments into a task. Takes a dictionary in which keys map to options and values.' + "args", + "A secondary way to add arguments into a task. Takes a dictionary in which keys map to options and values." ); taskKeywords.set( - 'async', - 'Run a task asynchronously if the C(action) supports this; value is maximum runtime in seconds.' + "async", + "Run a task asynchronously if the C(action) supports this; value is maximum runtime in seconds." ); -taskKeywords.set('become', { +taskKeywords.set("become", { kind: MarkupKind.Markdown, value: - 'Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin. See `Become Plugins`.', + "Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin. See `Become Plugins`.", }); -taskKeywords.set('become_exe', { +taskKeywords.set("become_exe", { kind: MarkupKind.Markdown, value: - 'Path to the executable used to elevate privileges. Implemented by the become plugin. See `Become Plugins`.', + "Path to the executable used to elevate privileges. Implemented by the become plugin. See `Become Plugins`.", }); taskKeywords.set( - 'become_flags', - 'A string of flag(s) to pass to the privilege escalation program when become is True.' + "become_flags", + "A string of flag(s) to pass to the privilege escalation program when become is True." ); taskKeywords.set( - 'become_method', - 'Which method of privilege escalation to use (such as sudo or su).' + "become_method", + "Which method of privilege escalation to use (such as sudo or su)." ); taskKeywords.set( - 'become_user', - 'User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user.' + "become_user", + "User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user." ); taskKeywords.set( - 'changed_when', - 'Conditional expression that overrides the task’s normal ‘changed’ status.' + "changed_when", + "Conditional expression that overrides the task’s normal ‘changed’ status." ); -taskKeywords.set('check_mode', { +taskKeywords.set("check_mode", { kind: MarkupKind.Markdown, value: - 'A boolean that controls if a task is executed in ‘check’ mode. See `Validating tasks: check mode and diff mode`.', + "A boolean that controls if a task is executed in ‘check’ mode. See `Validating tasks: check mode and diff mode`.", }); -taskKeywords.set('collections', { +taskKeywords.set("collections", { kind: MarkupKind.Markdown, value: `List of collection namespaces to search for modules, plugins, and roles. See \`Using collections in a Playbook\`. @@ -557,145 +557,145 @@ NOTE: Tasks within a role do not inherit the value of \`collections\` from the play. To have a role search a list of collections, use the \`collections\` keyword in \`meta/main.yml\` within a role.`, }); -taskKeywords.set('connection', { +taskKeywords.set("connection", { kind: MarkupKind.Markdown, value: - 'Allows you to change the connection plugin used for tasks to execute on the target. See `Using connection plugins`.', + "Allows you to change the connection plugin used for tasks to execute on the target. See `Using connection plugins`.", }); -taskKeywords.set('debugger', { +taskKeywords.set("debugger", { kind: MarkupKind.Markdown, value: - 'Enable debugging tasks based on state of the task result. See `Debugging tasks`.', + "Enable debugging tasks based on state of the task result. See `Debugging tasks`.", }); taskKeywords.set( - 'delay', - 'Number of seconds to delay between retries. This setting is only used in combination with until.' + "delay", + "Number of seconds to delay between retries. This setting is only used in combination with until." ); taskKeywords.set( - 'delegate_facts', - 'Boolean that allows you to apply facts to a delegated host instead of inventory_hostname.' + "delegate_facts", + "Boolean that allows you to apply facts to a delegated host instead of inventory_hostname." ); taskKeywords.set( - 'delegate_to', - 'Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task.' + "delegate_to", + "Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task." ); taskKeywords.set( - 'diff', - 'Toggle to make tasks return ‘diff’ information or not.' + "diff", + "Toggle to make tasks return ‘diff’ information or not." ); taskKeywords.set( - 'environment', - 'A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data.' + "environment", + "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data." ); taskKeywords.set( - 'failed_when', - 'Conditional expression that overrides the task’s normal ‘failed’ status.' + "failed_when", + "Conditional expression that overrides the task’s normal ‘failed’ status." ); taskKeywords.set( - 'ignore_errors', - 'Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.' + "ignore_errors", + "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors." ); taskKeywords.set( - 'ignore_unreachable', - 'Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts.' + "ignore_unreachable", + "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts." ); taskKeywords.set( - 'local_action', - 'Same as action but also implies delegate_to: localhost' + "local_action", + "Same as action but also implies delegate_to: localhost" ); taskKeywords.set( - 'loop', - 'Takes a list for the task to iterate over, saving each list element into the item variable (configurable via loop_control)' + "loop", + "Takes a list for the task to iterate over, saving each list element into the item variable (configurable via loop_control)" ); taskKeywords.set( - 'loop_control', - 'Several keys here allow you to modify/set loop behavior in a task.' + "loop_control", + "Several keys here allow you to modify/set loop behavior in a task." ); taskKeywords.set( - 'module_defaults', - 'Specifies default parameter values for modules.' + "module_defaults", + "Specifies default parameter values for modules." ); taskKeywords.set( - 'name', - 'Identifier. Can be used for documentation, or in tasks/handlers.' + "name", + "Identifier. Can be used for documentation, or in tasks/handlers." ); -taskKeywords.set('no_log', 'Boolean that controls information disclosure.'); +taskKeywords.set("no_log", "Boolean that controls information disclosure."); taskKeywords.set( - 'notify', - 'List of handlers to notify when the task returns a ‘changed=True’ status.' + "notify", + "List of handlers to notify when the task returns a ‘changed=True’ status." ); taskKeywords.set( - 'poll', - 'Sets the polling interval in seconds for async tasks (default 10s).' + "poll", + "Sets the polling interval in seconds for async tasks (default 10s)." ); taskKeywords.set( - 'port', - 'Used to override the default port used in a connection.' + "port", + "Used to override the default port used in a connection." ); taskKeywords.set( - 'register', - 'Name of variable that will contain task status and module return data.' + "register", + "Name of variable that will contain task status and module return data." ); taskKeywords.set( - 'remote_user', - 'User used to log into the target via the connection plugin.' + "remote_user", + "User used to log into the target via the connection plugin." ); taskKeywords.set( - 'retries', - 'Number of retries before giving up in a until loop. This setting is only used in combination with until.' + "retries", + "Number of retries before giving up in a until loop. This setting is only used in combination with until." ); taskKeywords.set( - 'run_once', - 'Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch.' + "run_once", + "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch." ); taskKeywords.set( - 'tags', - 'Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.' + "tags", + "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line." ); taskKeywords.set( - 'throttle', - 'Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel.' + "throttle", + "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel." ); taskKeywords.set( - 'timeout', - 'Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task.' + "timeout", + "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task." ); taskKeywords.set( - 'until', - 'This keyword implies a ‘retries loop’ that will go on until the condition supplied here is met or we hit the retries limit.' + "until", + "This keyword implies a ‘retries loop’ that will go on until the condition supplied here is met or we hit the retries limit." ); -taskKeywords.set('vars', 'Dictionary/map of variables'); +taskKeywords.set("vars", "Dictionary/map of variables"); taskKeywords.set( - 'when', - 'Conditional expression, determines if an iteration of a task is run or not.' + "when", + "Conditional expression, determines if an iteration of a task is run or not." ); export const playExclusiveKeywords = new Map( @@ -710,5 +710,5 @@ export const playWithoutTaskKeywords = new Map( ); export function isTaskKeyword(value: string): boolean { - return taskKeywords.has(value) || value.startsWith('with_'); + return taskKeywords.has(value) || value.startsWith("with_"); } diff --git a/src/utils/commandRunner.ts b/src/utils/commandRunner.ts index 285e38e1f..8de56336c 100644 --- a/src/utils/commandRunner.ts +++ b/src/utils/commandRunner.ts @@ -1,9 +1,9 @@ -import { URI } from 'vscode-uri'; -import { Connection } from 'vscode-languageserver'; -import { withInterpreter, asyncExec } from './misc'; -import { getAnsibleCommandExecPath } from './execPath'; -import { WorkspaceFolderContext } from '../services/workspaceManager'; -import { ExtensionSettings } from '../interfaces/extensionSettings'; +import { URI } from "vscode-uri"; +import { Connection } from "vscode-languageserver"; +import { withInterpreter, asyncExec } from "./misc"; +import { getAnsibleCommandExecPath } from "./execPath"; +import { WorkspaceFolderContext } from "../services/workspaceManager"; +import { ExtensionSettings } from "../interfaces/extensionSettings"; export class CommandRunner { private connection: Connection; @@ -34,9 +34,9 @@ export class CommandRunner { let runEnv: NodeJS.ProcessEnv | undefined; const isEEEnabled = this.settings.executionEnvironment.enabled; const interpreterPath = isEEEnabled - ? 'python3' + ? "python3" : this.settings.python.interpreterPath; - if (executable.startsWith('ansible')) { + if (executable.startsWith("ansible")) { executablePath = isEEEnabled ? executable : getAnsibleCommandExecPath(executable, this.settings); @@ -66,7 +66,7 @@ export class CommandRunner { ? workingDirectory : URI.parse(this.context.workspaceFolder.uri).path; const result = await asyncExec(command, { - encoding: 'utf-8', + encoding: "utf-8", cwd: currentWorkingDirectory, env: runEnv, }); @@ -83,15 +83,15 @@ export class CommandRunner { executable: string ): Promise | undefined { try { - const executablePath = await this.runCommand('which', executable); + const executablePath = await this.runCommand("which", executable); return executablePath.stdout.trim(); } catch (error) { console.log(error); } try { - const executablePath = await this.runCommand('whereis', executable); - const outParts = executablePath.stdout.split(':'); + const executablePath = await this.runCommand("whereis", executable); + const outParts = executablePath.stdout.split(":"); return outParts.length >= 2 ? outParts[1].trim() : undefined; } catch (error) { console.log(error); diff --git a/src/utils/docsFinder.ts b/src/utils/docsFinder.ts index 5ffe9a8f0..35b46e108 100644 --- a/src/utils/docsFinder.ts +++ b/src/utils/docsFinder.ts @@ -1,43 +1,43 @@ -import * as fs from 'fs'; -import * as path from 'path'; -import { parseDocument } from 'yaml'; -import globby = require('globby'); -import { LazyModuleDocumentation, parseRawRouting } from './docsParser'; -import { IModuleMetadata } from '../interfaces/module'; +import * as fs from "fs"; +import * as path from "path"; +import { parseDocument } from "yaml"; +import globby = require("globby"); +import { LazyModuleDocumentation, parseRawRouting } from "./docsParser"; +import { IModuleMetadata } from "../interfaces/module"; import { IPluginRoutesByType, IPluginRoutingByCollection, -} from '../interfaces/pluginRouting'; +} from "../interfaces/pluginRouting"; export async function findDocumentation( dir: string, kind: - | 'builtin' - | 'collection' - | 'builtin_doc_fragment' - | 'collection_doc_fragment' + | "builtin" + | "collection" + | "builtin_doc_fragment" + | "collection_doc_fragment" ): Promise { if (!fs.existsSync(dir) || fs.lstatSync(dir).isFile()) { return []; } let files; switch (kind) { - case 'builtin': - files = await globby([`${dir}/**/*.py`, '!/**/_*.py']); + case "builtin": + files = await globby([`${dir}/**/*.py`, "!/**/_*.py"]); break; - case 'builtin_doc_fragment': + case "builtin_doc_fragment": files = await globby([ - `${path.resolve(dir, '../')}/plugins/doc_fragments/*.py`, - '!/**/_*.py', + `${path.resolve(dir, "../")}/plugins/doc_fragments/*.py`, + "!/**/_*.py", ]); break; - case 'collection': + case "collection": files = await globby([ `${dir}/ansible_collections/*/*/plugins/modules/*.py`, `!${dir}/ansible_collections/*/*/plugins/modules/_*.py`, ]); break; - case 'collection_doc_fragment': + case "collection_doc_fragment": files = await globby([ `${dir}/ansible_collections/*/*/plugins/doc_fragments/*.py`, `!${dir}/ansible_collections/*/*/plugins/doc_fragments/_*.py`, @@ -45,17 +45,17 @@ export async function findDocumentation( break; } return files.map((file) => { - const name = path.basename(file, '.py'); + const name = path.basename(file, ".py"); let namespace; let collection; switch (kind) { - case 'builtin': - case 'builtin_doc_fragment': - namespace = 'ansible'; - collection = 'builtin'; + case "builtin": + case "builtin_doc_fragment": + namespace = "ansible"; + collection = "builtin"; break; - case 'collection': - case 'collection_doc_fragment': + case "collection": + case "collection_doc_fragment": const pathArray = file.split(path.sep); namespace = pathArray[pathArray.length - 5]; collection = pathArray[pathArray.length - 4]; @@ -74,7 +74,7 @@ export async function findDocumentation( export async function findPluginRouting( dir: string, - kind: 'builtin' | 'collection' + kind: "builtin" | "collection" ): Promise { const pluginRouting = new Map(); if (!fs.existsSync(dir) || fs.lstatSync(dir).isFile()) { @@ -82,20 +82,20 @@ export async function findPluginRouting( } let files; switch (kind) { - case 'builtin': + case "builtin": files = await globby([`${dir}/config/ansible_builtin_runtime.yml`]); break; - case 'collection': + case "collection": files = await globby([`${dir}/ansible_collections/*/*/meta/runtime.yml`]); break; } for (const file of files) { let collection; switch (kind) { - case 'builtin': - collection = 'ansible.builtin'; + case "builtin": + collection = "ansible.builtin"; break; - case 'collection': + case "collection": const pathArray = file.split(path.sep); collection = `${pathArray[pathArray.length - 4]}.${ pathArray[pathArray.length - 3] @@ -103,7 +103,7 @@ export async function findPluginRouting( break; } const runtimeContent = await fs.promises.readFile(file, { - encoding: 'utf8', + encoding: "utf8", }); const document = parseDocument(runtimeContent).toJSON(); pluginRouting.set(collection, parseRawRouting(document)); diff --git a/src/utils/docsFormatter.ts b/src/utils/docsFormatter.ts index 162ef9888..0d21564a7 100644 --- a/src/utils/docsFormatter.ts +++ b/src/utils/docsFormatter.ts @@ -1,11 +1,11 @@ -import { format } from 'util'; -import { MarkupContent, MarkupKind } from 'vscode-languageserver'; +import { format } from "util"; +import { MarkupContent, MarkupKind } from "vscode-languageserver"; import { IDescription, IModuleDocumentation, IOption, -} from '../interfaces/module'; -import { IPluginRoute } from '../interfaces/pluginRouting'; +} from "../interfaces/module"; +import { IPluginRoute } from "../interfaces/pluginRouting"; export function formatModule( module: IModuleDocumentation, @@ -13,7 +13,7 @@ export function formatModule( ): MarkupContent { const sections: string[] = []; if (module.deprecated || route?.deprecation) { - sections.push('**DEPRECATED**'); + sections.push("**DEPRECATED**"); if (route?.deprecation) { if (route.deprecation.warningText) { sections.push(`${route.deprecation.warningText}`); @@ -30,27 +30,27 @@ export function formatModule( sections.push(`*${formatDescription(module.shortDescription)}*`); } if (module.description) { - sections.push('**Description**'); + sections.push("**Description**"); sections.push(formatDescription(module.description)); } if (module.requirements) { - sections.push('**Requirements**'); + sections.push("**Requirements**"); sections.push(formatDescription(module.requirements)); } if (module.notes) { - sections.push('**Notes**'); + sections.push("**Notes**"); sections.push(formatDescription(module.notes)); } return { kind: MarkupKind.Markdown, - value: sections.join('\n\n'), + value: sections.join("\n\n"), }; } export function formatTombstone(route: IPluginRoute): MarkupContent { const sections: string[] = []; if (route?.tombstone) { - sections.push('**REMOVED**'); + sections.push("**REMOVED**"); if (route.tombstone.warningText) { sections.push(`${route.tombstone.warningText}`); } @@ -63,7 +63,7 @@ export function formatTombstone(route: IPluginRoute): MarkupContent { } return { kind: MarkupKind.Markdown, - value: sections.join('\n\n'), + value: sections.join("\n\n"), }; } @@ -97,12 +97,12 @@ export function formatOption( } return { kind: MarkupKind.Markdown, - value: sections.join('\n\n'), + value: sections.join("\n\n"), }; } export function formatDescription(doc?: IDescription, asList = true): string { - let result = ''; + let result = ""; if (doc instanceof Array) { const lines: string[] = []; doc.forEach((element) => { @@ -112,8 +112,8 @@ export function formatDescription(doc?: IDescription, asList = true): string { lines.push(`${replaceMacros(element)}\n`); } }); - result += lines.join('\n'); - } else if (typeof doc === 'string') { + result += lines.join("\n"); + } else if (typeof doc === "string") { result += replaceMacros(doc); } return result; @@ -122,16 +122,16 @@ export function formatDescription(doc?: IDescription, asList = true): string { export function getDetails(option: IOption): string | undefined { const details = []; if (option.required) { - details.push('(required)'); + details.push("(required)"); } if (option.type) { - if (option.type === 'list' && option.elements) { + if (option.type === "list" && option.elements) { details.push(`list(${option.elements})`); } else { details.push(option.type); } } - if (details) return details.join(' '); + if (details) return details.join(" "); } // TODO: do something with links @@ -147,18 +147,18 @@ const macroPatterns = { }; function replaceMacros(text: unknown): string { let safeText; - if (typeof text === 'string') { + if (typeof text === "string") { safeText = text; } else { safeText = JSON.stringify(text); } return safeText - .replace(macroPatterns.link, '[$1]($2)') - .replace(macroPatterns.url, '$1') - .replace(macroPatterns.reference, '[$1]($2)') - .replace(macroPatterns.module, '*`$1`*') - .replace(macroPatterns.monospace, '`$1`') - .replace(macroPatterns.italics, '_$1_') - .replace(macroPatterns.bold, '**$1**') - .replace(macroPatterns.hr, '


'); + .replace(macroPatterns.link, "[$1]($2)") + .replace(macroPatterns.url, "$1") + .replace(macroPatterns.reference, "[$1]($2)") + .replace(macroPatterns.module, "*`$1`*") + .replace(macroPatterns.monospace, "`$1`") + .replace(macroPatterns.italics, "_$1_") + .replace(macroPatterns.bold, "**$1**") + .replace(macroPatterns.hr, "
"); } diff --git a/src/utils/docsParser.ts b/src/utils/docsParser.ts index d22b2fd17..13842546c 100644 --- a/src/utils/docsParser.ts +++ b/src/utils/docsParser.ts @@ -1,22 +1,22 @@ -import * as _ from 'lodash'; -import * as fs from 'fs'; -import { parseDocument } from 'yaml'; -import { YAMLError } from 'yaml/util'; +import * as _ from "lodash"; +import * as fs from "fs"; +import { parseDocument } from "yaml"; +import { YAMLError } from "yaml/util"; import { IDescription, IModuleDocumentation, IModuleMetadata, IOption, -} from '../interfaces/module'; -import { hasOwnProperty, isObject } from './misc'; +} from "../interfaces/module"; +import { hasOwnProperty, isObject } from "./misc"; import { IPluginRoute, IPluginRoutesByName, IPluginRoutesByType, IPluginTypes, -} from '../interfaces/pluginRouting'; +} from "../interfaces/pluginRouting"; -const DOCUMENTATION = 'DOCUMENTATION'; +const DOCUMENTATION = "DOCUMENTATION"; export function processDocumentationFragments( module: IModuleMetadata, @@ -27,7 +27,7 @@ export function processDocumentationFragments( module.rawDocumentationFragments.get(DOCUMENTATION); if ( mainDocumentationFragment && - hasOwnProperty(mainDocumentationFragment, 'extends_documentation_fragment') + hasOwnProperty(mainDocumentationFragment, "extends_documentation_fragment") ) { const docFragmentNames: string[] = mainDocumentationFragment.extends_documentation_fragment instanceof Array @@ -35,14 +35,14 @@ export function processDocumentationFragments( : [mainDocumentationFragment.extends_documentation_fragment]; const resultContents = {}; for (const docFragmentName of docFragmentNames) { - const fragmentNameArray = docFragmentName.split('.'); + const fragmentNameArray = docFragmentName.split("."); let fragmentPartName: string; if (fragmentNameArray.length === 2 || fragmentNameArray.length === 4) { fragmentPartName = fragmentNameArray.pop()?.toUpperCase() as string; } else { fragmentPartName = DOCUMENTATION; } - const docFragmentCatalogueName = fragmentNameArray.join('.'); + const docFragmentCatalogueName = fragmentNameArray.join("."); const docFragment = docFragments.get(docFragmentCatalogueName) || docFragments.get(`ansible.builtin.${docFragmentCatalogueName}`); @@ -73,7 +73,7 @@ function docFragmentMergeCustomizer( key: string ): Record[] | undefined { if ( - ['notes', 'requirements', 'seealso'].includes(key) && + ["notes", "requirements", "seealso"].includes(key) && _.isArray(objValue) ) { return objValue.concat(srcValue); @@ -85,7 +85,7 @@ export function processRawDocumentation( ): IModuleDocumentation | undefined { // currently processing only the main documentation const rawDoc = moduleDocParts.get(DOCUMENTATION); - if (rawDoc && typeof rawDoc.module === 'string') { + if (rawDoc && typeof rawDoc.module === "string") { const moduleDoc: IModuleDocumentation = { module: rawDoc.module, options: processRawOptions(rawDoc.options), @@ -95,12 +95,12 @@ export function processRawDocumentation( moduleDoc.shortDescription = rawDoc.short_description; if (isIDescription(rawDoc.description)) moduleDoc.description = rawDoc.description; - if (typeof rawDoc.version_added === 'string') + if (typeof rawDoc.version_added === "string") moduleDoc.versionAdded = rawDoc.version_added; if (isIDescription(rawDoc.author)) moduleDoc.author = rawDoc.author; if (isIDescription(rawDoc.requirements)) moduleDoc.requirements = rawDoc.requirements; - if (typeof rawDoc.seealso === 'object') + if (typeof rawDoc.seealso === "object") moduleDoc.seealso = rawDoc.seealso as Record; if (isIDescription(rawDoc.notes)) moduleDoc.notes = rawDoc.notes; return moduleDoc; @@ -122,12 +122,12 @@ export function processRawOptions(rawOptions: unknown): Map { optionDoc.description = rawOption.description; if (rawOption.choices instanceof Array) optionDoc.choices = rawOption.choices; - if (typeof rawOption.type === 'string') optionDoc.type = rawOption.type; - if (typeof rawOption.elements === 'string') + if (typeof rawOption.type === "string") optionDoc.type = rawOption.type; + if (typeof rawOption.elements === "string") optionDoc.elements = rawOption.elements; if (rawOption.aliases instanceof Array) optionDoc.aliases = rawOption.aliases; - if (typeof rawOption.version_added === 'string') + if (typeof rawOption.version_added === "string") optionDoc.versionAdded = rawOption.version_added; options.set(optionName, optionDoc); if (optionDoc.aliases) { @@ -144,20 +144,20 @@ export function processRawOptions(rawOptions: unknown): Map { function isIDescription(obj: unknown): obj is IDescription { return ( obj instanceof Array || // won't check that all elements are string - typeof obj === 'string' + typeof obj === "string" ); } export function parseRawRouting(rawDoc: unknown): IPluginRoutesByType { const routesByType = new Map(); if ( - hasOwnProperty(rawDoc, 'plugin_routing') && + hasOwnProperty(rawDoc, "plugin_routing") && isObject(rawDoc.plugin_routing) ) { for (const [pluginType, rawRoutesByName] of Object.entries( rawDoc.plugin_routing )) { - if (pluginType === 'modules' && isObject(rawRoutesByName)) { + if (pluginType === "modules" && isObject(rawRoutesByName)) { routesByType.set(pluginType, parseRawRoutesByName(rawRoutesByName)); } } @@ -184,7 +184,7 @@ function parseRawRoute(rawRoute: Record): IPluginRoute { if (isObject(rawRoute.tombstone)) { route.tombstone = parseRawDeprecationOrTombstone(rawRoute.tombstone); } - if (typeof rawRoute.redirect === 'string') { + if (typeof rawRoute.redirect === "string") { route.redirect = rawRoute.redirect; } return route; @@ -200,13 +200,13 @@ function parseRawDeprecationOrTombstone( let warningText; let removalDate; let removalVersion; - if (typeof rawInfo.warning_text === 'string') { + if (typeof rawInfo.warning_text === "string") { warningText = rawInfo.warning_text; } - if (typeof rawInfo.removal_date === 'string') { + if (typeof rawInfo.removal_date === "string") { removalDate = rawInfo.removal_date; } - if (typeof rawInfo.removal_version === 'string') { + if (typeof rawInfo.removal_version === "string") { removalVersion = rawInfo.removal_version; } return { @@ -247,7 +247,7 @@ export class LazyModuleDocumentation implements IModuleMetadata { public get rawDocumentationFragments(): Map> { if (!this._contents) { this._contents = new Map>(); - const contents = fs.readFileSync(this.source, { encoding: 'utf8' }); + const contents = fs.readFileSync(this.source, { encoding: "utf8" }); let m; while ((m = LazyModuleDocumentation.docsRegex.exec(contents)) !== null) { if (m && m.groups && m.groups.name && m.groups.doc && m.groups.pre) { diff --git a/src/utils/execPath.ts b/src/utils/execPath.ts index 6129f8e84..cc942a81b 100644 --- a/src/utils/execPath.ts +++ b/src/utils/execPath.ts @@ -1,6 +1,6 @@ // utils function to resolve executable path -import * as path from 'path'; -import { ExtensionSettings } from '../interfaces/extensionSettings'; +import * as path from "path"; +import { ExtensionSettings } from "../interfaces/extensionSettings"; /** * A method to return the path to the provided executable @@ -12,7 +12,7 @@ export function getAnsibleCommandExecPath( name: string, settings: ExtensionSettings ): string { - return name === 'ansible-lint' + return name === "ansible-lint" ? settings.ansibleLint.path : path.join(path.dirname(settings.ansible.path), name); } diff --git a/src/utils/imagePuller.ts b/src/utils/imagePuller.ts index 2243a4e22..06b7860e7 100644 --- a/src/utils/imagePuller.ts +++ b/src/utils/imagePuller.ts @@ -1,6 +1,6 @@ -import * as child_process from 'child_process'; -import { Connection } from 'vscode-languageserver'; -import { WorkspaceFolderContext } from '../services/workspaceManager'; +import * as child_process from "child_process"; +import { Connection } from "vscode-languageserver"; +import { WorkspaceFolderContext } from "../services/workspaceManager"; export class ImagePuller { private connection: Connection; @@ -28,7 +28,7 @@ export class ImagePuller { public async setupImage(): Promise { let setupComplete = false; - const imageTag = this._containerImage.split(':', 2)[1] || 'latest'; + const imageTag = this._containerImage.split(":", 2)[1] || "latest"; const imagePresent = this.checkForImage(); const pullRequired = this.determinePull(imagePresent, imageTag); @@ -45,13 +45,13 @@ export class ImagePuller { const pullCommand = `${this._containerEngine} pull ${this._containerImage}`; if (progressTracker) { progressTracker.begin( - 'execution-environment', + "execution-environment", undefined, - 'Pulling Ansible execution environment image...' + "Pulling Ansible execution environment image..." ); } child_process.execSync(pullCommand, { - encoding: 'utf-8', + encoding: "utf-8", }); this.connection.console.info( `Container image '${this._containerImage}' pull successful` @@ -60,7 +60,7 @@ export class ImagePuller { } catch (error) { let errorMsg = `Failed to pull container image ${this._containerEngine} with error '${error}'`; errorMsg += - 'Check the execution environment image name, connectivity to and permissions for the registry, and try again'; + "Check the execution environment image name, connectivity to and permissions for the registry, and try again"; this.connection.console.error(errorMsg); setupComplete = false; } @@ -76,13 +76,13 @@ export class ImagePuller { private determinePull(imagePresent: boolean, imageTag: string): boolean { let pull: boolean; - if (this._pullPolicy === 'missing' && !imagePresent) { + if (this._pullPolicy === "missing" && !imagePresent) { pull = true; - } else if (this._pullPolicy === 'always') { + } else if (this._pullPolicy === "always") { pull = true; - } else if (this._pullPolicy === 'tag' && imageTag === 'latest') { + } else if (this._pullPolicy === "tag" && imageTag === "latest") { pull = true; - } else if (this._pullPolicy === 'tag' && !imagePresent) { + } else if (this._pullPolicy === "tag" && !imagePresent) { pull = true; } else { pull = false; @@ -97,7 +97,7 @@ export class ImagePuller { `check for container image with command: '${command}'` ); child_process.execSync(command, { - encoding: 'utf-8', + encoding: "utf-8", }); return true; } catch (error) { diff --git a/src/utils/misc.ts b/src/utils/misc.ts index 83f9f90b0..ba621d872 100644 --- a/src/utils/misc.ts +++ b/src/utils/misc.ts @@ -1,9 +1,9 @@ -import * as child_process from 'child_process'; -import { promises as fs } from 'fs'; -import { promisify } from 'util'; -import { TextDocument } from 'vscode-languageserver-textdocument'; -import { Range } from 'vscode-languageserver-types'; -import * as path from 'path'; +import * as child_process from "child_process"; +import { promises as fs } from "fs"; +import { promisify } from "util"; +import { TextDocument } from "vscode-languageserver-textdocument"; +import { Range } from "vscode-languageserver-types"; +import * as path from "path"; export async function fileExists(filePath: string): Promise { return !!(await fs.stat(filePath).catch(() => false)); @@ -31,7 +31,7 @@ export function hasOwnProperty( * Checks whether `obj` is a non-null object. */ export function isObject(obj: X): obj is X & Record { - return obj && typeof obj === 'object'; + return obj && typeof obj === "object"; } export function insert(str: string, index: number, val: string): string { @@ -50,7 +50,7 @@ export function withInterpreter( let command = `${executable} ${args}`; // base case const newEnv = Object.assign({}, process.env, { - ANSIBLE_FORCE_COLOR: '0', // ensure output is parseable (no ANSI) + ANSIBLE_FORCE_COLOR: "0", // ensure output is parseable (no ANSI) }); if (activationScript) { @@ -59,9 +59,9 @@ export function withInterpreter( } if (interpreterPath) { - const virtualEnv = path.resolve(interpreterPath, '../..'); + const virtualEnv = path.resolve(interpreterPath, "../.."); - const pathEntry = path.join(virtualEnv, 'bin'); + const pathEntry = path.join(virtualEnv, "bin"); if (path.isAbsolute(executable)) { // if both interpreter path and absolute command path are provided, we can // bolster the chances of success by letting the interpreter execute the @@ -70,8 +70,8 @@ export function withInterpreter( } // emulating virtual environment activation script - newEnv['VIRTUAL_ENV'] = virtualEnv; - newEnv['PATH'] = `${pathEntry}:${process.env.PATH}`; + newEnv["VIRTUAL_ENV"] = virtualEnv; + newEnv["PATH"] = `${pathEntry}:${process.env.PATH}`; delete newEnv.PYTHONHOME; } return [command, newEnv]; @@ -83,7 +83,7 @@ export function withInterpreter( */ export function getUnsupportedError(): string | undefined { // win32 applies to x64 arch too, is the platform name - if (process.platform === 'win32') { - return 'Ansible Language Server can only run inside WSL on Windows. Refer to vscode documentation for more details.'; + if (process.platform === "win32") { + return "Ansible Language Server can only run inside WSL on Windows. Refer to vscode documentation for more details."; } } diff --git a/src/utils/yaml.ts b/src/utils/yaml.ts index 09cd9af3d..1f6bfd018 100644 --- a/src/utils/yaml.ts +++ b/src/utils/yaml.ts @@ -1,11 +1,11 @@ -import * as _ from 'lodash'; -import { Position, TextDocument } from 'vscode-languageserver-textdocument'; -import { Document, Options, parseCST } from 'yaml'; -import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; -import { IModuleMetadata, IOption } from '../interfaces/module'; -import { DocsLibrary } from '../services/docsLibrary'; -import { isTaskKeyword, playExclusiveKeywords } from './ansible'; -import { playKeywords, taskKeywords } from '../utils/ansible'; +import * as _ from "lodash"; +import { Position, TextDocument } from "vscode-languageserver-textdocument"; +import { Document, Options, parseCST } from "yaml"; +import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from "yaml/types"; +import { IModuleMetadata, IOption } from "../interfaces/module"; +import { DocsLibrary } from "../services/docsLibrary"; +import { isTaskKeyword, playExclusiveKeywords } from "./ansible"; +import { playKeywords, taskKeywords } from "../utils/ansible"; /** * A helper class used for building YAML path assertions and retrieving parent @@ -79,7 +79,7 @@ export class AncestryBuilder { if ( node instanceof Pair && node.key instanceof Scalar && - typeof node.key.value === 'string' + typeof node.key.value === "string" ) { return node.key.value; } @@ -274,7 +274,7 @@ function getDeclaredCollectionsForMap(playNode: YAMLMap | null): string[] { const declaredCollections: string[] = []; const collectionsPair = _.find( playNode?.items, - (pair) => pair.key instanceof Scalar && pair.key.value === 'collections' + (pair) => pair.key instanceof Scalar && pair.key.value === "collections" ); if (collectionsPair) { @@ -334,7 +334,7 @@ export function isBlockParam(path: Node[]): boolean { const isInYAMLSeq = !!builder.parent(YAMLSeq).get(); if (mapNode && isInYAMLSeq) { const providedKeys = getYamlMapKeys(mapNode); - return providedKeys.includes('block'); + return providedKeys.includes("block"); } return false; } @@ -348,7 +348,7 @@ export function isRoleParam(path: Node[]): boolean { .parent(YAMLSeq) .parent(YAMLMap) .getStringKey(); - return rolesKey === 'roles'; + return rolesKey === "roles"; } /** @@ -365,7 +365,7 @@ export async function getPossibleOptionsForPath( if (!taskParamPath) return null; const optionTraceElement = suboptionTrace.pop(); - if (!optionTraceElement || optionTraceElement[1] !== 'dict') { + if (!optionTraceElement || optionTraceElement[1] !== "dict") { // that element must always be a `dict` // (unlike for sub-options, which can also be a 'list') return null; @@ -377,7 +377,7 @@ export async function getPossibleOptionsForPath( let module; // Module options can either be directly under module or in 'args' - if (taskParamNode.value === 'args') { + if (taskParamNode.value === "args") { module = await findProvidedModule(taskParamPath, document, docsLibrary); } else { [module] = await docsLibrary.findModule( @@ -410,8 +410,8 @@ export async function getPossibleOptionsForPath( */ export function getTaskParamPathWithTrace( path: Node[] -): [Node[], [string, 'list' | 'dict'][]] { - const trace: [string, 'list' | 'dict'][] = []; +): [Node[], [string, "list" | "dict"][]] { + const trace: [string, "list" | "dict"][] = []; while (!isTaskParam(path)) { let parentKeyPath = new AncestryBuilder(path) .parentOfKey() @@ -421,9 +421,9 @@ export function getTaskParamPathWithTrace( const parentKeyNode = parentKeyPath[parentKeyPath.length - 1]; if ( parentKeyNode instanceof Scalar && - typeof parentKeyNode.value === 'string' + typeof parentKeyNode.value === "string" ) { - trace.push([parentKeyNode.value, 'dict']); + trace.push([parentKeyNode.value, "dict"]); path = parentKeyPath; continue; } @@ -437,9 +437,9 @@ export function getTaskParamPathWithTrace( const parentKeyNode = parentKeyPath[parentKeyPath.length - 1]; if ( parentKeyNode instanceof Scalar && - typeof parentKeyNode.value === 'string' + typeof parentKeyNode.value === "string" ) { - trace.push([parentKeyNode.value, 'list']); + trace.push([parentKeyNode.value, "list"]); path = parentKeyPath; continue; } diff --git a/test/helper.ts b/test/helper.ts index 7ca1e1918..a7658d6de 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -1,31 +1,31 @@ -import { TextDocument } from 'vscode-languageserver-textdocument'; -import * as path from 'path'; -import { promises as fs } from 'fs'; -import { WorkspaceManager } from '../src/services/workspaceManager'; -import { createConnection, TextDocuments } from 'vscode-languageserver/node'; -import { ValidationManager } from '../src/services/validationManager'; +import { TextDocument } from "vscode-languageserver-textdocument"; +import * as path from "path"; +import { promises as fs } from "fs"; +import { WorkspaceManager } from "../src/services/workspaceManager"; +import { createConnection, TextDocuments } from "vscode-languageserver/node"; +import { ValidationManager } from "../src/services/validationManager"; -const FIXTURES_BASE_PATH = path.join('test', 'fixtures'); +const FIXTURES_BASE_PATH = path.join("test", "fixtures"); export function setFixtureAnsibleCollectionPathEnv(): void { process.env.ANSIBLE_COLLECTIONS_PATHS = path.resolve( FIXTURES_BASE_PATH, - 'common', - 'collections' + "common", + "collections" ); } export async function getDoc(filename: string): Promise { const file = await fs.readFile(path.resolve(FIXTURES_BASE_PATH, filename), { - encoding: 'utf8', + encoding: "utf8", }); const docUri = path.resolve(FIXTURES_BASE_PATH, filename).toString(); - return TextDocument.create(docUri, 'ansible', 1, file); + return TextDocument.create(docUri, "ansible", 1, file); } export function isWindows(): boolean { // win32 applies to x64 arch too, is the platform name - return process.platform === 'win32'; + return process.platform === "win32"; } /** @@ -33,7 +33,7 @@ export function isWindows(): boolean { * @returns {WorkspaceManager} object to serve as a workspace manager for testing purposes */ export function createTestWorkspaceManager(): WorkspaceManager { - process.argv.push('--node-ipc'); + process.argv.push("--node-ipc"); const connection = createConnection(); const workspaceManager = new WorkspaceManager(connection); @@ -48,7 +48,7 @@ export function createTestWorkspaceManager(): WorkspaceManager { } export function createTestValidationManager(): ValidationManager { - process.argv.push('--node-ipc'); + process.argv.push("--node-ipc"); const connection = createConnection(); const documents: TextDocuments = new TextDocuments( diff --git a/test/index.ts b/test/index.ts index 0be7e241b..f92a073dc 100644 --- a/test/index.ts +++ b/test/index.ts @@ -1,6 +1,6 @@ // This file is loaded automatically by mocha during the test run. -import { isWindows } from './helper'; -import { execSync } from 'child_process'; +import { isWindows } from "./helper"; +import { execSync } from "child_process"; // Error code returned if we cannot even start testing: const PRETEST_ERR_RC = 2; @@ -8,12 +8,12 @@ const PRETEST_ERR_RC = 2; // isWindows returns false under WSL if (isWindows()) { console.error( - 'ERROR: This project does not support pure Windows, try under WSL2.' + "ERROR: This project does not support pure Windows, try under WSL2." ); process.exit(PRETEST_ERR_RC); } -const command = 'ansible-lint --version'; +const command = "ansible-lint --version"; try { const result = execSync(command); console.info(`Detected: ${result}`); diff --git a/test/providers/hoverProvider.test.ts b/test/providers/hoverProvider.test.ts index 83cfe778d..920e96d7a 100644 --- a/test/providers/hoverProvider.test.ts +++ b/test/providers/hoverProvider.test.ts @@ -1,39 +1,39 @@ -import { expect } from 'chai'; +import { expect } from "chai"; import { createTestWorkspaceManager, getDoc, setFixtureAnsibleCollectionPathEnv, -} from '../helper'; -import { doHover } from '../../src/providers/hoverProvider'; -import { Position } from 'vscode-languageserver'; +} from "../helper"; +import { doHover } from "../../src/providers/hoverProvider"; +import { Position } from "vscode-languageserver"; setFixtureAnsibleCollectionPathEnv(); -describe('doHover()', () => { +describe("doHover()", () => { const workspaceManager = createTestWorkspaceManager(); - describe('Play keywords hover', () => { + describe("Play keywords hover", () => { const tests = [ { - word: 'name', + word: "name", position: { line: 0, character: 4 } as Position, - doc: 'Identifier. Can be used for documentation, or in tasks/handlers.', + doc: "Identifier. Can be used for documentation, or in tasks/handlers.", }, { - word: 'host', + word: "host", position: { line: 1, character: 4 } as Position, - doc: 'A list of groups, hosts or host pattern that translates into a list of hosts that are the play’s target.', + doc: "A list of groups, hosts or host pattern that translates into a list of hosts that are the play’s target.", }, { - word: 'tasks', + word: "tasks", position: { line: 3, character: 4 } as Position, - doc: 'Main list of tasks to execute in the play, they run after roles and before post_tasks.', + doc: "Main list of tasks to execute in the play, they run after roles and before post_tasks.", }, ]; tests.forEach(({ word, position, doc }) => { it(`should provide hovering for '${word}'`, async function () { - const textDoc = await getDoc('hover/tasks.yml'); + const textDoc = await getDoc("hover/tasks.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualHover = await doHover( @@ -41,23 +41,23 @@ describe('doHover()', () => { position, await context.docsLibrary ); - expect(actualHover.contents['value']).includes(doc); + expect(actualHover.contents["value"]).includes(doc); }); }); }); - describe('Task keywords hover', () => { + describe("Task keywords hover", () => { const tests = [ { - word: 'register', + word: "register", position: { line: 6, character: 8 } as Position, - doc: 'Name of variable that will contain task status and module return data.', + doc: "Name of variable that will contain task status and module return data.", }, ]; tests.forEach(({ word, position, doc }) => { it(`should provide hovering for '${word}'`, async function () { - const textDoc = await getDoc('hover/tasks.yml'); + const textDoc = await getDoc("hover/tasks.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualHover = await doHover( @@ -65,23 +65,23 @@ describe('doHover()', () => { position, await context.docsLibrary ); - expect(actualHover.contents['value']).includes(doc); + expect(actualHover.contents["value"]).includes(doc); }); }); }); - describe('Block keywords hover', () => { + describe("Block keywords hover", () => { const tests = [ { - word: 'become', + word: "become", position: { line: 11, character: 8 } as Position, - doc: 'Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin.', + doc: "Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin.", }, ]; tests.forEach(({ word, position, doc }) => { it(`should provide hovering for '${word}'`, async function () { - const textDoc = await getDoc('hover/tasks.yml'); + const textDoc = await getDoc("hover/tasks.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualHover = await doHover( @@ -89,23 +89,23 @@ describe('doHover()', () => { position, await context.docsLibrary ); - expect(actualHover.contents['value']).includes(doc); + expect(actualHover.contents["value"]).includes(doc); }); }); }); - describe('Role keywords hover', () => { + describe("Role keywords hover", () => { const tests = [ { - word: 'tags', + word: "tags", position: { line: 6, character: 8 } as Position, - doc: 'Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.', + doc: "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.", }, ]; tests.forEach(({ word, position, doc }) => { it(`should provide hovering for '${word}'`, async function () { - const textDoc = await getDoc('hover/roles.yml'); + const textDoc = await getDoc("hover/roles.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualHover = await doHover( @@ -113,28 +113,28 @@ describe('doHover()', () => { position, await context.docsLibrary ); - expect(actualHover.contents['value']).includes(doc); + expect(actualHover.contents["value"]).includes(doc); }); }); }); - describe('Module name and options hover', () => { + describe("Module name and options hover", () => { const tests = [ { - word: 'ansible.builtin.debug', + word: "ansible.builtin.debug", position: { line: 4, character: 8 } as Position, - doc: 'Print statements during execution', + doc: "Print statements during execution", }, { - word: 'ansible.builtin.debug -> msg', + word: "ansible.builtin.debug -> msg", position: { line: 5, character: 10 } as Position, - doc: 'The customized message that is printed. If omitted, prints a generic message.', + doc: "The customized message that is printed. If omitted, prints a generic message.", }, ]; tests.forEach(({ word, position, doc }) => { it(`should provide hovering for '${word}'`, async function () { - const textDoc = await getDoc('hover/tasks.yml'); + const textDoc = await getDoc("hover/tasks.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualHover = await doHover( @@ -142,14 +142,14 @@ describe('doHover()', () => { position, await context.docsLibrary ); - expect(actualHover.contents['value']).includes(doc); + expect(actualHover.contents["value"]).includes(doc); }); }); }); - describe('No hover', () => { - it('should not provide hovering for values', async function () { - const textDoc = await getDoc('hover/tasks.yml'); + describe("No hover", () => { + it("should not provide hovering for values", async function () { + const textDoc = await getDoc("hover/tasks.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualHover = await doHover( @@ -160,8 +160,8 @@ describe('doHover()', () => { expect(actualHover).to.be.null; }); - it('should not provide hovering for improper module name and options', async function () { - const textDoc = await getDoc('hover/tasks.yml'); + it("should not provide hovering for improper module name and options", async function () { + const textDoc = await getDoc("hover/tasks.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualHover = await doHover( @@ -172,8 +172,8 @@ describe('doHover()', () => { expect(actualHover).to.be.null; }); - it('should not provide hovering for improper module option', async function () { - const textDoc = await getDoc('hover/tasks.yml'); + it("should not provide hovering for improper module option", async function () { + const textDoc = await getDoc("hover/tasks.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualHover = await doHover( diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts index 5affa83f7..395b5025d 100644 --- a/test/providers/validationProvider.test.ts +++ b/test/providers/validationProvider.test.ts @@ -1,25 +1,25 @@ -import { expect } from 'chai'; -import { Position, integer } from 'vscode-languageserver'; +import { expect } from "chai"; +import { Position, integer } from "vscode-languageserver"; import { doValidate, getYamlValidation, -} from '../../src/providers/validationProvider'; +} from "../../src/providers/validationProvider"; import { createTestValidationManager, createTestWorkspaceManager, getDoc, setFixtureAnsibleCollectionPathEnv, -} from '../helper'; +} from "../helper"; setFixtureAnsibleCollectionPathEnv(); -describe('doValidate()', () => { +describe("doValidate()", () => { const workspaceManager = createTestWorkspaceManager(); const validationManager = createTestValidationManager(); - describe('Get validation only from cache', () => { - it('should provide no diagnostics', async function () { - const textDoc = await getDoc('diagnostics/lint_errors.yml'); + describe("Get validation only from cache", () => { + it("should provide no diagnostics", async function () { + const textDoc = await getDoc("diagnostics/lint_errors.yml"); const actualDiagnostics = await doValidate(textDoc, validationManager); @@ -27,16 +27,16 @@ describe('doValidate()', () => { }); }); - describe('Ansible diagnostics', () => { - describe('Diagnostics using ansible-lint', () => { + describe("Ansible diagnostics", () => { + describe("Diagnostics using ansible-lint", () => { const tests = [ { - name: 'specific ansible lint errors', - file: 'diagnostics/lint_errors.yml', + name: "specific ansible lint errors", + file: "diagnostics/lint_errors.yml", diagnosticReport: [ { severity: 1, - message: 'violates variable naming standards', + message: "violates variable naming standards", range: { start: { line: 4, character: 0 } as Position, end: { @@ -44,11 +44,11 @@ describe('doValidate()', () => { character: integer.MAX_VALUE, } as Position, }, - source: 'Ansible', + source: "Ansible", }, { severity: 1, - message: 'All tasks should be named', + message: "All tasks should be named", range: { start: { line: 6, character: 0 } as Position, end: { @@ -56,7 +56,7 @@ describe('doValidate()', () => { character: integer.MAX_VALUE, } as Position, }, - source: 'Ansible', + source: "Ansible", }, { severity: 1, @@ -69,12 +69,12 @@ describe('doValidate()', () => { character: integer.MAX_VALUE, } as Position, }, - source: 'Ansible', + source: "Ansible", }, { severity: 1, message: - 'Commands should not change things if nothing needs doing', + "Commands should not change things if nothing needs doing", range: { start: { line: 14, character: 0 } as Position, end: { @@ -82,17 +82,17 @@ describe('doValidate()', () => { character: integer.MAX_VALUE, } as Position, }, - source: 'Ansible', + source: "Ansible", }, ], }, { - name: 'empty playbook', - file: 'diagnostics/empty.yml', + name: "empty playbook", + file: "diagnostics/empty.yml", diagnosticReport: [ { severity: 1, - message: '[syntax-check] Empty playbook, nothing to do', + message: "[syntax-check] Empty playbook, nothing to do", range: { start: { line: 0, character: 0 } as Position, end: { @@ -100,17 +100,17 @@ describe('doValidate()', () => { character: integer.MAX_VALUE, } as Position, }, - source: 'Ansible', + source: "Ansible", }, ], }, { - name: 'no host', - file: 'diagnostics/noHost.yml', + name: "no host", + file: "diagnostics/noHost.yml", diagnosticReport: [ { severity: 1, - message: '[syntax-check] Ansible syntax check failed', + message: "[syntax-check] Ansible syntax check failed", range: { start: { line: 0, character: 0 } as Position, end: { @@ -118,7 +118,7 @@ describe('doValidate()', () => { character: integer.MAX_VALUE, } as Position, }, - source: 'Ansible', + source: "Ansible", }, ], }, @@ -159,21 +159,21 @@ describe('doValidate()', () => { }); }); - describe('Diagnostics after falling back to --syntax-check due to change in settings', () => { + describe("Diagnostics after falling back to --syntax-check due to change in settings", () => { const tests = [ { - name: 'no specific ansible lint errors', - file: 'diagnostics/lint_errors.yml', + name: "no specific ansible lint errors", + file: "diagnostics/lint_errors.yml", diagnosticReport: [], }, { - name: 'empty playbook', - file: 'diagnostics/empty.yml', + name: "empty playbook", + file: "diagnostics/empty.yml", diagnosticReport: [], }, { - name: 'no host', - file: 'diagnostics/noHost.yml', + name: "no host", + file: "diagnostics/noHost.yml", diagnosticReport: [ { severity: 1, @@ -186,7 +186,7 @@ describe('doValidate()', () => { character: integer.MAX_VALUE, } as Position, }, - source: 'Ansible', + source: "Ansible", }, ], }, @@ -233,16 +233,16 @@ describe('doValidate()', () => { }); }); }); - describe('Diagnostics after falling back to --syntax-check due to unavailability of ansible-lint', () => { + describe("Diagnostics after falling back to --syntax-check due to unavailability of ansible-lint", () => { const tests = [ { - name: 'no specific ansible lint errors', - file: 'diagnostics/lint_errors.yml', + name: "no specific ansible lint errors", + file: "diagnostics/lint_errors.yml", diagnosticReport: [], }, { - name: 'no host', - file: 'diagnostics/noHost.yml', + name: "no host", + file: "diagnostics/noHost.yml", diagnosticReport: [ { severity: 1, @@ -255,7 +255,7 @@ describe('doValidate()', () => { character: integer.MAX_VALUE, } as Position, }, - source: 'Ansible', + source: "Ansible", }, ], }, @@ -269,7 +269,7 @@ describe('doValidate()', () => { // Update setting to disable ansible-lint const docSettings = context.documentSettings.get(textDoc.uri); const cachedDefaultSetting = (await docSettings).ansibleLint.path; - (await docSettings).ansibleLint.path = 'invalid-ansible-lint-path'; + (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; const actualDiagnostics = await doValidate( textDoc, @@ -304,16 +304,16 @@ describe('doValidate()', () => { }); }); - describe('Diagnostics after falling back to --syntax-check due to failure in execution of ansible-lint command', () => { + describe("Diagnostics after falling back to --syntax-check due to failure in execution of ansible-lint command", () => { const tests = [ { - name: 'no specific ansible lint errors', - file: 'diagnostics/lint_errors.yml', + name: "no specific ansible lint errors", + file: "diagnostics/lint_errors.yml", diagnosticReport: [], }, { - name: 'no host', - file: 'diagnostics/noHost.yml', + name: "no host", + file: "diagnostics/noHost.yml", diagnosticReport: [ { severity: 1, @@ -326,7 +326,7 @@ describe('doValidate()', () => { character: integer.MAX_VALUE, } as Position, }, - source: 'Ansible', + source: "Ansible", }, ], }, @@ -341,7 +341,7 @@ describe('doValidate()', () => { const docSettings = context.documentSettings.get(textDoc.uri); const cachedDefaultSetting = (await docSettings).ansibleLint .arguments; - (await docSettings).ansibleLint.arguments = '-f invalid_argument'; + (await docSettings).ansibleLint.arguments = "-f invalid_argument"; const actualDiagnostics = await doValidate( textDoc, @@ -376,15 +376,15 @@ describe('doValidate()', () => { }); }); - describe('YAML diagnostics', () => { + describe("YAML diagnostics", () => { const tests = [ { - name: 'invalid YAML', - file: 'diagnostics/invalid_yaml.yml', + name: "invalid YAML", + file: "diagnostics/invalid_yaml.yml", diagnosticReport: [ { severity: 1, - message: 'Nested mappings are not allowed', + message: "Nested mappings are not allowed", range: { start: { line: 6, character: 13 } as Position, end: { @@ -392,11 +392,11 @@ describe('doValidate()', () => { character: 13, } as Position, }, - source: 'Ansible [YAML]', + source: "Ansible [YAML]", }, { severity: 1, - message: 'Document contains trailing content', + message: "Document contains trailing content", range: { start: { line: 7, character: 0 } as Position, end: { @@ -404,7 +404,7 @@ describe('doValidate()', () => { character: 0, } as Position, }, - source: 'Ansible [YAML]', + source: "Ansible [YAML]", }, ], }, diff --git a/test/utils/runCommand.test.ts b/test/utils/runCommand.test.ts index 308a6be79..b6d72fe3c 100644 --- a/test/utils/runCommand.test.ts +++ b/test/utils/runCommand.test.ts @@ -1,49 +1,49 @@ -import { CommandRunner } from '../../src/utils/commandRunner'; -import { AssertionError, expect } from 'chai'; -import { WorkspaceManager } from '../../src/services/workspaceManager'; -import { createConnection } from 'vscode-languageserver/node'; -import { getDoc } from '../helper'; +import { CommandRunner } from "../../src/utils/commandRunner"; +import { AssertionError, expect } from "chai"; +import { WorkspaceManager } from "../../src/services/workspaceManager"; +import { createConnection } from "vscode-languageserver/node"; +import { getDoc } from "../helper"; -describe('commandRunner', () => { +describe("commandRunner", () => { const tests = [ { - args: ['ansible-config', 'dump'], + args: ["ansible-config", "dump"], rc: 0, - stdout: 'ANSIBLE_FORCE_COLOR', - stderr: '', + stdout: "ANSIBLE_FORCE_COLOR", + stderr: "", }, { - args: ['ansible', '--version'], + args: ["ansible", "--version"], rc: 0, - stdout: 'configured module search path', - stderr: '', + stdout: "configured module search path", + stderr: "", }, { - args: ['ansible-lint', '--version'], + args: ["ansible-lint", "--version"], rc: 0, - stdout: 'using ansible', - stderr: '', + stdout: "using ansible", + stderr: "", }, { - args: ['ansible-playbook', 'missing-file'], + args: ["ansible-playbook", "missing-file"], rc: 1, - stdout: '', - stderr: 'ERROR! the playbook: missing-file could not be found', + stdout: "", + stderr: "ERROR! the playbook: missing-file could not be found", }, ]; tests.forEach(({ args, rc, stdout, stderr }) => { - it(`call ${args.join(' ')}`, async function () { + it(`call ${args.join(" ")}`, async function () { this.timeout(10000); // try to enforce ansible to output ANSI in order to check if we are // still able to disable it at runtime in order to keep output parseable. - process.env.ANSIBLE_FORCE_COLOR = '1'; + process.env.ANSIBLE_FORCE_COLOR = "1"; - process.argv.push('--node-ipc'); + process.argv.push("--node-ipc"); const connection = createConnection(); const workspaceManager = new WorkspaceManager(connection); - const textDoc = await getDoc('yaml/ancestryBuilder.yml'); + const textDoc = await getDoc("yaml/ancestryBuilder.yml"); const context = workspaceManager.getContext(textDoc.uri); const settings = await context.documentSettings.get(textDoc.uri); @@ -51,7 +51,7 @@ describe('commandRunner', () => { try { const proc = await commandRunner.runCommand( args[0], - args.slice(1).join(' ') + args.slice(1).join(" ") ); expect(proc.stdout, proc.stderr).contains(stdout); expect(proc.stderr, proc.stdout).contains(stderr); diff --git a/test/utils/yaml.test.ts b/test/utils/yaml.test.ts index b1dd7af22..37c7d26ca 100644 --- a/test/utils/yaml.test.ts +++ b/test/utils/yaml.test.ts @@ -1,5 +1,5 @@ -import { expect } from 'chai'; -import { Node, Scalar, YAMLMap, YAMLSeq } from 'yaml/types'; +import { expect } from "chai"; +import { Node, Scalar, YAMLMap, YAMLSeq } from "yaml/types"; import { AncestryBuilder, getDeclaredCollections, @@ -9,8 +9,8 @@ import { isRoleParam, isTaskParam, parseAllDocuments, -} from '../../src/utils/yaml'; -import { getDoc, isWindows } from '../helper'; +} from "../../src/utils/yaml"; +import { getDoc, isWindows } from "../helper"; async function getPathInFile( yamlFile: string, @@ -26,7 +26,7 @@ async function getPathInFile( ); } -describe('yaml', () => { +describe("yaml", () => { beforeEach(function () { const brokenTests = new Map([ // ['', ''], @@ -43,53 +43,53 @@ describe('yaml', () => { } }); - describe('ancestryBuilder', () => { - it('canGetParent', async () => { - const path = await getPathInFile('ancestryBuilder.yml', 4, 7); + describe("ancestryBuilder", () => { + it("canGetParent", async () => { + const path = await getPathInFile("ancestryBuilder.yml", 4, 7); const node = new AncestryBuilder(path).parent().get(); expect(node).to.be.an.instanceOf(YAMLMap); }); - it('canGetAssertedParent', async () => { - const path = await getPathInFile('ancestryBuilder.yml', 4, 7); + it("canGetAssertedParent", async () => { + const path = await getPathInFile("ancestryBuilder.yml", 4, 7); const node = new AncestryBuilder(path).parent(YAMLMap).get(); expect(node).to.be.an.instanceOf(YAMLMap); }); - it('canAssertParent', async () => { - const path = await getPathInFile('ancestryBuilder.yml', 4, 7); + it("canAssertParent", async () => { + const path = await getPathInFile("ancestryBuilder.yml", 4, 7); const node = new AncestryBuilder(path).parent(YAMLSeq).get(); expect(node).to.be.null; }); - it('canGetAncestor', async () => { - const path = await getPathInFile('ancestryBuilder.yml', 4, 7); + it("canGetAncestor", async () => { + const path = await getPathInFile("ancestryBuilder.yml", 4, 7); const node = new AncestryBuilder(path).parent().parent().get(); expect(node).to.be.an.instanceOf(YAMLSeq); }); - it('canGetParentPath', async () => { - const path = await getPathInFile('ancestryBuilder.yml', 4, 7); + it("canGetParentPath", async () => { + const path = await getPathInFile("ancestryBuilder.yml", 4, 7); const subPath = new AncestryBuilder(path).parent().getPath(); expect(subPath) .to.be.an.instanceOf(Array) .to.have.lengthOf((path?.length || 0) - 2); }); - it('canGetKey', async () => { - const path = await getPathInFile('ancestryBuilder.yml', 4, 7); + it("canGetKey", async () => { + const path = await getPathInFile("ancestryBuilder.yml", 4, 7); const key = new AncestryBuilder(path).parent(YAMLMap).getStringKey(); - expect(key).to.be.equal('name'); + expect(key).to.be.equal("name"); }); - it('canGetKeyForValue', async () => { - const path = await getPathInFile('ancestryBuilder.yml', 4, 13); + it("canGetKeyForValue", async () => { + const path = await getPathInFile("ancestryBuilder.yml", 4, 13); const key = new AncestryBuilder(path).parent(YAMLMap).getStringKey(); - expect(key).to.be.equal('name'); + expect(key).to.be.equal("name"); }); - it('canGetKeyPath', async () => { - const path = await getPathInFile('ancestryBuilder.yml', 4, 7); + it("canGetKeyPath", async () => { + const path = await getPathInFile("ancestryBuilder.yml", 4, 7); const subPath = new AncestryBuilder(path).parent(YAMLMap).getKeyPath(); expect(subPath) .to.be.an.instanceOf(Array) @@ -97,263 +97,263 @@ describe('yaml', () => { if (subPath) expect(subPath[subPath.length - 1]) .to.be.an.instanceOf(Scalar) - .to.have.property('value', 'name'); + .to.have.property("value", "name"); }); - it('canGetAssertedParentOfKey', async () => { - const path = await getPathInFile('ancestryBuilder.yml', 4, 7); + it("canGetAssertedParentOfKey", async () => { + const path = await getPathInFile("ancestryBuilder.yml", 4, 7); const node = new AncestryBuilder(path).parentOfKey().get(); expect(node).to.be.an.instanceOf(YAMLMap); - expect(node).to.have.nested.property('items[0].key.value', 'name'); + expect(node).to.have.nested.property("items[0].key.value", "name"); }); - it('canAssertParentOfKey', async () => { - const path = await getPathInFile('ancestryBuilder.yml', 4, 13); + it("canAssertParentOfKey", async () => { + const path = await getPathInFile("ancestryBuilder.yml", 4, 13); const node = new AncestryBuilder(path).parentOfKey().get(); expect(node).to.be.null; }); - it('canGetIndentationParent', async () => { - const path = await getPathInFile('ancestryBuilder.yml', 7, 9); + it("canGetIndentationParent", async () => { + const path = await getPathInFile("ancestryBuilder.yml", 7, 9); const node = new AncestryBuilder(path) .parent(YAMLMap) .parent(YAMLMap) .getStringKey(); - expect(node).to.be.equal('lineinfile'); + expect(node).to.be.equal("lineinfile"); }); - it.skip('canGetIndentationParentAtEndOfMap', async () => { + it.skip("canGetIndentationParentAtEndOfMap", async () => { // skipped -> the YAML parser doesn't correctly interpret indentation in // otherwise empty lines; a workaround is implemented for completion // provider - const path = await getPathInFile('ancestryBuilder.yml', 9, 9); + const path = await getPathInFile("ancestryBuilder.yml", 9, 9); const node = new AncestryBuilder(path) .parent(YAMLMap) .parent(YAMLMap) .getStringKey(); - expect(node).to.be.equal('lineinfile'); + expect(node).to.be.equal("lineinfile"); }); - it.skip('canGetIndentationParentAtEOF', async () => { + it.skip("canGetIndentationParentAtEOF", async () => { // skipped -> the YAML parser doesn't correctly interpret indentation in // otherwise empty lines; a workaround is implemented for completion // provider - const path = await getPathInFile('ancestryBuilder.yml', 15, 9); + const path = await getPathInFile("ancestryBuilder.yml", 15, 9); const node = new AncestryBuilder(path) .parent(YAMLMap) .parent(YAMLMap) .getStringKey(); - expect(node).to.be.equal('lineinfile'); + expect(node).to.be.equal("lineinfile"); }); }); - describe('getDeclaredCollections', () => { - it('canGetCollections', async () => { - const path = await getPathInFile('getDeclaredCollections.yml', 13, 7); + describe("getDeclaredCollections", () => { + it("canGetCollections", async () => { + const path = await getPathInFile("getDeclaredCollections.yml", 13, 7); const collections = getDeclaredCollections(path); expect(collections).to.have.members([ - 'mynamespace.mycollection', - 'mynamespace2.mycollection2', + "mynamespace.mycollection", + "mynamespace2.mycollection2", ]); }); - it('canGetCollectionsFromPreTasks', async () => { - const path = await getPathInFile('getDeclaredCollections.yml', 9, 7); + it("canGetCollectionsFromPreTasks", async () => { + const path = await getPathInFile("getDeclaredCollections.yml", 9, 7); const collections = getDeclaredCollections(path); expect(collections).to.have.members([ - 'mynamespace.mycollection', - 'mynamespace2.mycollection2', + "mynamespace.mycollection", + "mynamespace2.mycollection2", ]); }); - it('canGetCollectionsFromBlock', async () => { - const path = await getPathInFile('getDeclaredCollections.yml', 12, 11); + it("canGetCollectionsFromBlock", async () => { + const path = await getPathInFile("getDeclaredCollections.yml", 12, 11); const collections = getDeclaredCollections(path); expect(collections).to.have.members([ - 'mynamespace.mycollection', - 'mynamespace2.mycollection2', + "mynamespace.mycollection", + "mynamespace2.mycollection2", ]); }); - it('canGetCollectionsFromNestedBlock', async () => { - const path = await getPathInFile('getDeclaredCollections.yml', 23, 15); + it("canGetCollectionsFromNestedBlock", async () => { + const path = await getPathInFile("getDeclaredCollections.yml", 23, 15); const collections = getDeclaredCollections(path); expect(collections).to.have.members([ - 'mynamespace.mycollection', - 'mynamespace2.mycollection2', + "mynamespace.mycollection", + "mynamespace2.mycollection2", ]); }); - it('canGetCollectionsFromRescue', async () => { - const path = await getPathInFile('getDeclaredCollections.yml', 27, 11); + it("canGetCollectionsFromRescue", async () => { + const path = await getPathInFile("getDeclaredCollections.yml", 27, 11); const collections = getDeclaredCollections(path); expect(collections).to.have.members([ - 'mynamespace.mycollection', - 'mynamespace2.mycollection2', + "mynamespace.mycollection", + "mynamespace2.mycollection2", ]); }); - it('canGetCollectionsFromAlways', async () => { - const path = await getPathInFile('getDeclaredCollections.yml', 31, 11); + it("canGetCollectionsFromAlways", async () => { + const path = await getPathInFile("getDeclaredCollections.yml", 31, 11); const collections = getDeclaredCollections(path); expect(collections).to.have.members([ - 'mynamespace.mycollection', - 'mynamespace2.mycollection2', + "mynamespace.mycollection", + "mynamespace2.mycollection2", ]); }); - it('canWorkWithoutCollections', async () => { - const path = await getPathInFile('getDeclaredCollections.yml', 38, 7); + it("canWorkWithoutCollections", async () => { + const path = await getPathInFile("getDeclaredCollections.yml", 38, 7); const collections = getDeclaredCollections(path); expect(collections).to.have.members([]); }); - it('canWorkWithEmptyCollections', async () => { - const path = await getPathInFile('getDeclaredCollections.yml', 46, 7); + it("canWorkWithEmptyCollections", async () => { + const path = await getPathInFile("getDeclaredCollections.yml", 46, 7); const collections = getDeclaredCollections(path); expect(collections).to.have.members([]); }); }); - describe('isTaskParam', () => { - it('canCorrectlyConfirmTaskParam', async () => { - const path = (await getPathInFile('isTaskParam.yml', 3, 3)) as Node[]; + describe("isTaskParam", () => { + it("canCorrectlyConfirmTaskParam", async () => { + const path = (await getPathInFile("isTaskParam.yml", 3, 3)) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(true); }); - it('canCorrectlyNegateTaskParam', async () => { - const path = (await getPathInFile('isTaskParam.yml', 1, 1)) as Node[]; + it("canCorrectlyNegateTaskParam", async () => { + const path = (await getPathInFile("isTaskParam.yml", 1, 1)) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(false); }); - it('canCorrectlyNegateTaskParamForValue', async () => { - const path = (await getPathInFile('isTaskParam.yml', 2, 9)) as Node[]; + it("canCorrectlyNegateTaskParamForValue", async () => { + const path = (await getPathInFile("isTaskParam.yml", 2, 9)) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(false); }); - it('canCorrectlyNegateTaskParamForPlay', async () => { - const path = (await getPathInFile('isTaskParam.yml', 7, 3)) as Node[]; + it("canCorrectlyNegateTaskParamForPlay", async () => { + const path = (await getPathInFile("isTaskParam.yml", 7, 3)) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(false); }); - it('canCorrectlyNegateTaskParamForBlock', async () => { - const path = (await getPathInFile('isTaskParam.yml', 18, 7)) as Node[]; + it("canCorrectlyNegateTaskParamForBlock", async () => { + const path = (await getPathInFile("isTaskParam.yml", 18, 7)) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(false); }); - it('canCorrectlyNegateTaskParamForRole', async () => { - const path = (await getPathInFile('isTaskParam.yml', 21, 7)) as Node[]; + it("canCorrectlyNegateTaskParamForRole", async () => { + const path = (await getPathInFile("isTaskParam.yml", 21, 7)) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(false); }); - it('canCorrectlyConfirmTaskParamInPreTasks', async () => { - const path = (await getPathInFile('isTaskParam.yml', 10, 7)) as Node[]; + it("canCorrectlyConfirmTaskParamInPreTasks", async () => { + const path = (await getPathInFile("isTaskParam.yml", 10, 7)) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(true); }); - it('canCorrectlyConfirmTaskParamInTasks', async () => { - const path = (await getPathInFile('isTaskParam.yml', 13, 7)) as Node[]; + it("canCorrectlyConfirmTaskParamInTasks", async () => { + const path = (await getPathInFile("isTaskParam.yml", 13, 7)) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(true); }); - it('canCorrectlyConfirmTaskParamInBlock', async () => { - const path = (await getPathInFile('isTaskParam.yml', 17, 11)) as Node[]; + it("canCorrectlyConfirmTaskParamInBlock", async () => { + const path = (await getPathInFile("isTaskParam.yml", 17, 11)) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(true); }); }); - describe('isPlayParam', () => { - it('canCorrectlyConfirmPlayParam', async () => { - const path = (await getPathInFile('isPlayParam.yml', 1, 3)) as Node[]; - const test = isPlayParam(path, 'file://test/isPlay.yml'); + describe("isPlayParam", () => { + it("canCorrectlyConfirmPlayParam", async () => { + const path = (await getPathInFile("isPlayParam.yml", 1, 3)) as Node[]; + const test = isPlayParam(path, "file://test/isPlay.yml"); expect(test).to.be.eq(true); }); - it('canCorrectlyConfirmPlayParamWithoutPath', async () => { - const path = (await getPathInFile('isPlayParam.yml', 1, 3)) as Node[]; + it("canCorrectlyConfirmPlayParamWithoutPath", async () => { + const path = (await getPathInFile("isPlayParam.yml", 1, 3)) as Node[]; const test = isPlayParam(path); expect(test).to.be.eq(true); }); - it('canCorrectlyConfirmPlayParamInStrangePath', async () => { - const path = (await getPathInFile('isPlayParam.yml', 1, 3)) as Node[]; - const test = isPlayParam(path, 'file:///roles/test/tasks/isPlay.yml'); + it("canCorrectlyConfirmPlayParamInStrangePath", async () => { + const path = (await getPathInFile("isPlayParam.yml", 1, 3)) as Node[]; + const test = isPlayParam(path, "file:///roles/test/tasks/isPlay.yml"); expect(test).to.be.eq(true); }); - it('canCorrectlyNegatePlayParamInRolePathWithoutPlayKeywords', async () => { - const path = (await getPathInFile('isPlayParam.yml', 7, 3)) as Node[]; - const test = isPlayParam(path, 'file:///roles/test/tasks/isPlay.yml'); + it("canCorrectlyNegatePlayParamInRolePathWithoutPlayKeywords", async () => { + const path = (await getPathInFile("isPlayParam.yml", 7, 3)) as Node[]; + const test = isPlayParam(path, "file:///roles/test/tasks/isPlay.yml"); expect(test).to.be.eq(false); }); - it('isIndecisiveWithoutPlayKeywords', async () => { - const path = (await getPathInFile('isPlayParam.yml', 7, 3)) as Node[]; - const test = isPlayParam(path, 'file://test/isPlay.yml'); + it("isIndecisiveWithoutPlayKeywords", async () => { + const path = (await getPathInFile("isPlayParam.yml", 7, 3)) as Node[]; + const test = isPlayParam(path, "file://test/isPlay.yml"); expect(test).to.be.eq(undefined); }); - it('isIndecisiveWithoutPlayKeywordsWithoutPath', async () => { - const path = (await getPathInFile('isPlayParam.yml', 7, 3)) as Node[]; + it("isIndecisiveWithoutPlayKeywordsWithoutPath", async () => { + const path = (await getPathInFile("isPlayParam.yml", 7, 3)) as Node[]; const test = isPlayParam(path); expect(test).to.be.eq(undefined); }); - it('canCorrectlyNegatePlayParamForNonRootSequence', async () => { - const path = (await getPathInFile('isPlayParam.yml', 14, 7)) as Node[]; - const test = isPlayParam(path, 'file://test/isPlay.yml'); + it("canCorrectlyNegatePlayParamForNonRootSequence", async () => { + const path = (await getPathInFile("isPlayParam.yml", 14, 7)) as Node[]; + const test = isPlayParam(path, "file://test/isPlay.yml"); expect(test).to.be.eq(false); }); - it('canCorrectlyNegatePlayParamForNonRootSequenceWithoutPath', async () => { - const path = (await getPathInFile('isPlayParam.yml', 14, 7)) as Node[]; + it("canCorrectlyNegatePlayParamForNonRootSequenceWithoutPath", async () => { + const path = (await getPathInFile("isPlayParam.yml", 14, 7)) as Node[]; const test = isPlayParam(path); expect(test).to.be.eq(false); }); - it('canCorrectlyNegatePlayParamForValue', async () => { - const path = (await getPathInFile('isPlayParam.yml', 1, 9)) as Node[]; + it("canCorrectlyNegatePlayParamForValue", async () => { + const path = (await getPathInFile("isPlayParam.yml", 1, 9)) as Node[]; const test = isPlayParam(path); expect(test).to.be.eq(false); }); }); - describe('isBlockParam', () => { - it('canCorrectlyConfirmBlockParam', async () => { - const path = (await getPathInFile('isBlockParam.yml', 2, 3)) as Node[]; + describe("isBlockParam", () => { + it("canCorrectlyConfirmBlockParam", async () => { + const path = (await getPathInFile("isBlockParam.yml", 2, 3)) as Node[]; const test = isBlockParam(path); expect(test).to.be.eq(true); }); - it('canCorrectlyNegateBlockParam', async () => { - const path = (await getPathInFile('isBlockParam.yml', 5, 3)) as Node[]; + it("canCorrectlyNegateBlockParam", async () => { + const path = (await getPathInFile("isBlockParam.yml", 5, 3)) as Node[]; const test = isBlockParam(path); expect(test).to.be.eq(false); }); - it('canCorrectlyNegateBlockParamOnValue', async () => { - const path = (await getPathInFile('isBlockParam.yml', 2, 11)) as Node[]; + it("canCorrectlyNegateBlockParamOnValue", async () => { + const path = (await getPathInFile("isBlockParam.yml", 2, 11)) as Node[]; const test = isBlockParam(path); expect(test).to.be.eq(false); }); }); - describe('isRoleParam', () => { - it('canCorrectlyConfirmRoleParam', async () => { - const path = (await getPathInFile('isRoleParam.yml', 5, 7)) as Node[]; + describe("isRoleParam", () => { + it("canCorrectlyConfirmRoleParam", async () => { + const path = (await getPathInFile("isRoleParam.yml", 5, 7)) as Node[]; const test = isRoleParam(path); expect(test).to.be.eq(true); }); - it('canCorrectlyNegateRoleParam', async () => { - const path = (await getPathInFile('isRoleParam.yml', 4, 3)) as Node[]; + it("canCorrectlyNegateRoleParam", async () => { + const path = (await getPathInFile("isRoleParam.yml", 4, 3)) as Node[]; const test = isRoleParam(path); expect(test).to.be.eq(false); }); - it('canCorrectlyNegateRoleParamOnValue', async () => { - const path = (await getPathInFile('isRoleParam.yml', 5, 13)) as Node[]; + it("canCorrectlyNegateRoleParamOnValue", async () => { + const path = (await getPathInFile("isRoleParam.yml", 5, 13)) as Node[]; const test = isRoleParam(path); expect(test).to.be.eq(false); }); From be65dfca83fdff0d4d4ae5909b92cf55f3f79e0e Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Mon, 14 Mar 2022 19:35:32 +0530 Subject: [PATCH 284/558] Fix EE intermittent issue with auto-completion (#263) * Fix EE intermittent issue with auto-completion * Wait for async function to copy plugins from within EE to local host * add changelog * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/changelog-fragments.d/263.bugfix.md | 3 +++ src/services/executionEnvironment.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 docs/changelog-fragments.d/263.bugfix.md diff --git a/docs/changelog-fragments.d/263.bugfix.md b/docs/changelog-fragments.d/263.bugfix.md new file mode 100644 index 000000000..2b8a23706 --- /dev/null +++ b/docs/changelog-fragments.d/263.bugfix.md @@ -0,0 +1,3 @@ +Fixed intermittent issue with execution environment for auto-completion and +hover by waiting for async function to copy plugins from within EE to local host +cache --{user}`ganeshrn`. diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 387eac019..74fd92afa 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -82,7 +82,7 @@ export class ExecutionEnvironment { ); return; } - this.fetchPluginDocs(); + await this.fetchPluginDocs(); } catch (error) { if (error instanceof Error) { this.connection.window.showErrorMessage(error.message); From 0d1c76e9d3e4770144ff534fd32d6b0b483beab3 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Tue, 15 Mar 2022 09:03:10 +0530 Subject: [PATCH 285/558] wip: test autocompletion --- test/fixtures/completion/tasks.yml | 7 ++ test/providers/completionProvider.test.ts | 97 +++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 test/fixtures/completion/tasks.yml create mode 100644 test/providers/completionProvider.test.ts diff --git a/test/fixtures/completion/tasks.yml b/test/fixtures/completion/tasks.yml new file mode 100644 index 000000000..89ecfcab8 --- /dev/null +++ b/test/fixtures/completion/tasks.yml @@ -0,0 +1,7 @@ +- name: Test playbook + gather_facts: False + hosts: localhost + tasks: + - name: Builtin module + ansible.builtin.debug: + msg: "Hello World" diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts new file mode 100644 index 000000000..fb16b8699 --- /dev/null +++ b/test/providers/completionProvider.test.ts @@ -0,0 +1,97 @@ +import { expect } from 'chai'; +import { tests } from 'vscode'; +import { Position } from 'vscode-languageserver'; +import { + doCompletion, + doCompletionResolve, +} from '../../src/providers/completionProvider'; +import {} from '../../src/providers/validationProvider'; +import { + createTestWorkspaceManager, + getDoc, + setFixtureAnsibleCollectionPathEnv, +} from '../helper'; + +setFixtureAnsibleCollectionPathEnv(); + +describe('doCompletion()', () => { + const workspaceManager = createTestWorkspaceManager(); + + describe('Completion for play keywords', () => { + const tests = [ + { + keyword: 'name', + position: { line: 0, character: 4 } as Position, + triggerCharacter: 'na', + }, + + { + keyword: 'hosts', + position: { line: 2, character: 5 } as Position, + triggerCharacter: 'hos', + }, + ]; + + tests.forEach(({ keyword, position, triggerCharacter }) => { + it(`should provide completion for ${keyword}`, async function () { + const textDoc = await getDoc('completion/tasks.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletion = await doCompletion(textDoc, position, context); + const filteredCompletion = actualCompletion.filter((item) => { + return item.filterText + ? item.filterText.includes(triggerCharacter) + : item.label.includes(triggerCharacter); + }); + + console.log( + 'ACTUAL -> ', + actualCompletion.sort((a, b) => a.sortText.localeCompare(b.sortText)) + ); + console.log(' *********** FILTERED -> ', filteredCompletion); + + expect(filteredCompletion).not.to.be.null; + }); + }); + }); + + // it('Testing the completion', async function () { + // const textDoc = await getDoc('completion/tasks.yml'); + // const context = workspaceManager.getContext(textDoc.uri); + + // const position = { line: 5, character: 10 } as Position; + + // // Update setting to avoid fqcn + // const docSettings = context.documentSettings.get(textDoc.uri); + // const cachedDefaultSetting = (await docSettings).ansible + // .useFullyQualifiedCollectionNames; + // (await docSettings).ansible.useFullyQualifiedCollectionNames = true; + + // const actualCompletion = await doCompletion(textDoc, position, context); + + // const actualCompletionResolve = await doCompletionResolve( + // actualCompletion[0], + // context + // ); + + // console.log('HELLO -> ', actualCompletionResolve); + + // // actualCompletion.forEach((item) => { + // // console.log('*** -> ', item.label); + // // }); + + // // const filteredCompletion = actualCompletion.filter((item) => { + // // if (item.filterText) { + // // return item.filterText.includes('prefix_list'); + // // } + // // }); + + // // filteredCompletion.forEach((item) => { + // // console.log(`*** ${item.data.moduleFqcn} -> `, item.label); + // // }); + // expect(actualCompletion).not.to.be.null; + + // (await docSettings).ansible.useFullyQualifiedCollectionNames = + // cachedDefaultSetting; + // }); +}); From 82f1c20f8bc0982c9f3e01f87a22da7d4741dbc8 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Tue, 15 Mar 2022 17:03:16 +0530 Subject: [PATCH 286/558] use fuse.js for fuzzy search --- package-lock.json | 16 +++++ package.json | 1 + test/fixtures/completion/tasks.yml | 7 ++ test/helper.ts | 31 +++++++++ test/providers/completionProvider.test.ts | 84 ++++++++--------------- 5 files changed, 84 insertions(+), 55 deletions(-) diff --git a/package-lock.json b/package-lock.json index ef5fad146..66786ff47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,6 +35,7 @@ "chai": "^4.3.6", "eslint": "^8.10.0", "eslint-config-prettier": "^8.4.0", + "fuse.js": "^6.5.3", "mocha": "^9.2.1", "npm-check-updates": "^12.5.0", "nyc": "^15.1.0", @@ -2546,6 +2547,15 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/fuse.js": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", + "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/gauge": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz", @@ -7929,6 +7939,12 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "fuse.js": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", + "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", + "dev": true + }, "gauge": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz", diff --git a/package.json b/package.json index 17fd27ab5..147dc17f6 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "chai": "^4.3.6", "eslint": "^8.10.0", "eslint-config-prettier": "^8.4.0", + "fuse.js": "^6.5.3", "mocha": "^9.2.1", "npm-check-updates": "^12.5.0", "nyc": "^15.1.0", diff --git a/test/fixtures/completion/tasks.yml b/test/fixtures/completion/tasks.yml index 89ecfcab8..1cee1c2cf 100644 --- a/test/fixtures/completion/tasks.yml +++ b/test/fixtures/completion/tasks.yml @@ -5,3 +5,10 @@ - name: Builtin module ansible.builtin.debug: msg: "Hello World" + + - vyos.vyos.vyos_prefix_lists: + config: + - afi: + prefix_lists: + + - an diff --git a/test/helper.ts b/test/helper.ts index 7ca1e1918..844d730ce 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -5,6 +5,9 @@ import { WorkspaceManager } from '../src/services/workspaceManager'; import { createConnection, TextDocuments } from 'vscode-languageserver/node'; import { ValidationManager } from '../src/services/validationManager'; +// eslint-disable-next-line @typescript-eslint/no-var-requires +const Fuse = require('fuse.js'); + const FIXTURES_BASE_PATH = path.join('test', 'fixtures'); export function setFixtureAnsibleCollectionPathEnv(): void { @@ -28,6 +31,34 @@ export function isWindows(): boolean { return process.platform === 'win32'; } +export function smartFilter(completionList, triggerCharacter) { + completionList.sort((a, b) => a.sortText.localeCompare(b.sortText)); + + const searcher = new Fuse(completionList, { + keys: ['filterText'], + threshold: 0.6, + refIndex: false, + }); + + let filteredCompletionList = triggerCharacter + ? searcher.search(triggerCharacter).slice(0, 5) + : completionList.slice(0, 5); + + if (filteredCompletionList.length === 0) { + const newSearcher = new Fuse(completionList, { + keys: ['label'], + threshold: 0.4, + refIndex: false, + }); + + filteredCompletionList = triggerCharacter + ? newSearcher.search(triggerCharacter).slice(0, 5) + : completionList.slice(0, 5); + } + + return filteredCompletionList; +} + /** * A function that initiates the connection object with ipc that can be used to create a workspace manager for testing purposes * @returns {WorkspaceManager} object to serve as a workspace manager for testing purposes diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index fb16b8699..c07fb3f71 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -1,15 +1,12 @@ import { expect } from 'chai'; -import { tests } from 'vscode'; import { Position } from 'vscode-languageserver'; -import { - doCompletion, - doCompletionResolve, -} from '../../src/providers/completionProvider'; +import { doCompletion } from '../../src/providers/completionProvider'; import {} from '../../src/providers/validationProvider'; import { createTestWorkspaceManager, getDoc, setFixtureAnsibleCollectionPathEnv, + smartFilter, } from '../helper'; setFixtureAnsibleCollectionPathEnv(); @@ -24,12 +21,21 @@ describe('doCompletion()', () => { position: { line: 0, character: 4 } as Position, triggerCharacter: 'na', }, - { keyword: 'hosts', position: { line: 2, character: 5 } as Position, triggerCharacter: 'hos', }, + { + keyword: 'module name', + position: { line: 8, character: 6 } as Position, + triggerCharacter: 'an', + }, + { + keyword: 'suboptions', + position: { line: 11, character: 12 } as Position, + triggerCharacter: '', + }, ]; tests.forEach(({ keyword, position, triggerCharacter }) => { @@ -37,61 +43,29 @@ describe('doCompletion()', () => { const textDoc = await getDoc('completion/tasks.yml'); const context = workspaceManager.getContext(textDoc.uri); + // Update setting to avoid fqcn + const docSettings = context.documentSettings.get(textDoc.uri); + const cachedDefaultSetting = (await docSettings).ansible + .useFullyQualifiedCollectionNames; + (await docSettings).ansible.useFullyQualifiedCollectionNames = false; + const actualCompletion = await doCompletion(textDoc, position, context); - const filteredCompletion = actualCompletion.filter((item) => { - return item.filterText - ? item.filterText.includes(triggerCharacter) - : item.label.includes(triggerCharacter); - }); - console.log( - 'ACTUAL -> ', - actualCompletion.sort((a, b) => a.sortText.localeCompare(b.sortText)) + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter ); - console.log(' *********** FILTERED -> ', filteredCompletion); + + filteredCompletion.forEach((item) => { + item.item ? console.log(item.item.label) : console.log(item.label); + }); + console.log('\n'); expect(filteredCompletion).not.to.be.null; + + (await docSettings).ansible.useFullyQualifiedCollectionNames = + cachedDefaultSetting; }); }); }); - - // it('Testing the completion', async function () { - // const textDoc = await getDoc('completion/tasks.yml'); - // const context = workspaceManager.getContext(textDoc.uri); - - // const position = { line: 5, character: 10 } as Position; - - // // Update setting to avoid fqcn - // const docSettings = context.documentSettings.get(textDoc.uri); - // const cachedDefaultSetting = (await docSettings).ansible - // .useFullyQualifiedCollectionNames; - // (await docSettings).ansible.useFullyQualifiedCollectionNames = true; - - // const actualCompletion = await doCompletion(textDoc, position, context); - - // const actualCompletionResolve = await doCompletionResolve( - // actualCompletion[0], - // context - // ); - - // console.log('HELLO -> ', actualCompletionResolve); - - // // actualCompletion.forEach((item) => { - // // console.log('*** -> ', item.label); - // // }); - - // // const filteredCompletion = actualCompletion.filter((item) => { - // // if (item.filterText) { - // // return item.filterText.includes('prefix_list'); - // // } - // // }); - - // // filteredCompletion.forEach((item) => { - // // console.log(`*** ${item.data.moduleFqcn} -> `, item.label); - // // }); - // expect(actualCompletion).not.to.be.null; - - // (await docSettings).ansible.useFullyQualifiedCollectionNames = - // cachedDefaultSetting; - // }); }); From 3b5fa313981dda8fe538a52103031b0eb24a5d26 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 16 Mar 2022 12:37:34 +0530 Subject: [PATCH 287/558] add dummy collections for testing --- .../org_1/coll_1/plugins/modules/module_1.py | 99 +++++++++++++++++++ .../org_1/coll_2/galaxy.yml | 9 ++ .../org_1/coll_2/plugins/modules/module_1.py | 99 +++++++++++++++++++ .../org_1/coll_2/plugins/modules/module_2.py | 99 +++++++++++++++++++ .../org_1/coll_3/galaxy.yml | 9 ++ .../org_1/coll_3/plugins/modules/module_1.py | 99 +++++++++++++++++++ .../org_1/coll_3/plugins/modules/module_2.py | 99 +++++++++++++++++++ .../org_1/coll_3/plugins/modules/module_3.py | 99 +++++++++++++++++++ .../org_1/coll_4/galaxy.yml | 9 ++ .../org_1/coll_4/plugins/modules/module_1.py | 99 +++++++++++++++++++ .../org_1/coll_4/plugins/modules/module_2.py | 99 +++++++++++++++++++ .../org_1/coll_4/plugins/modules/module_3.py | 99 +++++++++++++++++++ .../org_1/coll_4/plugins/modules/module_4.py | 99 +++++++++++++++++++ 13 files changed, 1017 insertions(+) create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py new file mode 100644 index 000000000..01e16ba11 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_1.module_1 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_1 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_1.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml new file mode 100644 index 000000000..8210c2de9 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml @@ -0,0 +1,9 @@ +--- +authors: + - "Ansible devtools team" +description: "test collection" +license_file: LICENSE +name: coll_2 +namespace: org_1 +readme: README.md +version: 1.0.0 diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py new file mode 100644 index 000000000..fd20e7851 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_2.module_1 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_1 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_2.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py new file mode 100644 index 000000000..09872555c --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_2.module_2 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_2 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_2.module_2: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml new file mode 100644 index 000000000..9b0b56461 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml @@ -0,0 +1,9 @@ +--- +authors: + - "Ansible devtools team" +description: "test collection" +license_file: LICENSE +name: coll_3 +namespace: org_1 +readme: README.md +version: 1.0.0 diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py new file mode 100644 index 000000000..9ef9999d4 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_3.module_1 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_1 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_3.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py new file mode 100644 index 000000000..5115c2eb8 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_3.module_2 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_2 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_3.module_2: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py new file mode 100644 index 000000000..3184c24d6 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_3.module_3 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_3 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_3.module_3: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml new file mode 100644 index 000000000..4c8136ca8 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml @@ -0,0 +1,9 @@ +--- +authors: + - "Ansible devtools team" +description: "test collection" +license_file: LICENSE +name: coll_4 +namespace: org_1 +readme: README.md +version: 1.0.0 diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py new file mode 100644 index 000000000..3c3c80aae --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_4.module_1 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_1 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_4.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py new file mode 100644 index 000000000..4708f3f31 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_4.module_2 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_2 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_4.module_2: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py new file mode 100644 index 000000000..ee047c2d4 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_4.module_3 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_3 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_4.module_3: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py new file mode 100644 index 000000000..dec4767c1 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_4.module_4 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_4 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_4.module_4: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" From 0b152661da89a1444af2048def9c7c49bb30ede9 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 16 Mar 2022 12:38:58 +0530 Subject: [PATCH 288/558] update galaxy.yml for dummy coll_1 with correct namespace --- .../collections/ansible_collections/org_1/coll_1/galaxy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml index 432400cae..2d098270a 100644 --- a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml @@ -4,6 +4,6 @@ authors: description: "test collection" license_file: LICENSE name: coll_1 -namespace: testorg +namespace: org_1 readme: README.md version: 1.0.0 From c082211090c6c89eae7f83992a55cf5405bf839a Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 16 Mar 2022 12:40:12 +0530 Subject: [PATCH 289/558] add test fixtures for auto-completion tests --- test/fixtures/completion/simple_tasks.yml | 30 +++++++++++++++++++++++ test/fixtures/completion/with_blocks.yml | 10 ++++++++ test/fixtures/completion/with_roles.yml | 6 +++++ 3 files changed, 46 insertions(+) create mode 100644 test/fixtures/completion/simple_tasks.yml create mode 100644 test/fixtures/completion/with_blocks.yml create mode 100644 test/fixtures/completion/with_roles.yml diff --git a/test/fixtures/completion/simple_tasks.yml b/test/fixtures/completion/simple_tasks.yml new file mode 100644 index 000000000..3ffb958ad --- /dev/null +++ b/test/fixtures/completion/simple_tasks.yml @@ -0,0 +1,30 @@ +- name: Test playbook + gather_facts: False + hosts: localhost + vars: + my_var: 'test' + tasks: + - name: Builtin module + ansible.builtin.debug: + msg: "Hello World {{ item }}" + verbosity: 3 + loop: + - one + - two + debugger: on_skipped + + - name: Collection module + org_1.coll_4.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: \ No newline at end of file diff --git a/test/fixtures/completion/with_blocks.yml b/test/fixtures/completion/with_blocks.yml new file mode 100644 index 000000000..52eb21ec8 --- /dev/null +++ b/test/fixtures/completion/with_blocks.yml @@ -0,0 +1,10 @@ +- name: Hello World + hosts: localhost + gather_facts: False + tasks: + - block: + - name: List test directory content + ansible.builtin.command: "ls -l /test/" + become: True + become_user: root + diff --git a/test/fixtures/completion/with_roles.yml b/test/fixtures/completion/with_roles.yml new file mode 100644 index 000000000..a66b3192d --- /dev/null +++ b/test/fixtures/completion/with_roles.yml @@ -0,0 +1,6 @@ +- name: Test play + hosts: localhost + gather_facts: False + roles: + - name: role + when: condition \ No newline at end of file From c75312e9760a989750c10a05ab9799d0d2d7aa0a Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 16 Mar 2022 12:40:46 +0530 Subject: [PATCH 290/558] update test fixtures --- test/fixtures/completion/tasks.yml | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 test/fixtures/completion/tasks.yml diff --git a/test/fixtures/completion/tasks.yml b/test/fixtures/completion/tasks.yml deleted file mode 100644 index 1cee1c2cf..000000000 --- a/test/fixtures/completion/tasks.yml +++ /dev/null @@ -1,14 +0,0 @@ -- name: Test playbook - gather_facts: False - hosts: localhost - tasks: - - name: Builtin module - ansible.builtin.debug: - msg: "Hello World" - - - vyos.vyos.vyos_prefix_lists: - config: - - afi: - prefix_lists: - - - an From 72b344c9d962741bff046b4ea5fea720639f08eb Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 16 Mar 2022 12:41:52 +0530 Subject: [PATCH 291/558] update threshold value in fuzzy search to have more accurate matching --- test/helper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/helper.ts b/test/helper.ts index 844d730ce..93e24b7e2 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -47,7 +47,7 @@ export function smartFilter(completionList, triggerCharacter) { if (filteredCompletionList.length === 0) { const newSearcher = new Fuse(completionList, { keys: ['label'], - threshold: 0.4, + threshold: 0.2, refIndex: false, }); From cf2fd526e4bae5a5935955657805ce293a7e8bee Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 16 Mar 2022 12:42:46 +0530 Subject: [PATCH 292/558] update tests for auto-completions --- test/providers/completionProvider.test.ts | 322 ++++++++++++++++++++-- 1 file changed, 301 insertions(+), 21 deletions(-) diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index c07fb3f71..e71d1f4c0 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -17,37 +17,115 @@ describe('doCompletion()', () => { describe('Completion for play keywords', () => { const tests = [ { - keyword: 'name', - position: { line: 0, character: 4 } as Position, - triggerCharacter: 'na', + name: 'name', + position: { line: 0, character: 2 } as Position, + triggerCharacter: '', + completion: 'name', }, { - keyword: 'hosts', + name: 'hosts', position: { line: 2, character: 5 } as Position, triggerCharacter: 'hos', + completion: 'hosts', }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const textDoc = await getDoc('completion/simple_tasks.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + filteredCompletion.forEach((item) => { + item.item ? console.log(item.item.label) : console.log(item.label); + }); + console.log('\n'); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); + }); + + describe('Completion for role keywords', () => { + const tests = [ { - keyword: 'module name', - position: { line: 8, character: 6 } as Position, - triggerCharacter: 'an', + name: 'name', + position: { line: 4, character: 6 } as Position, + triggerCharacter: '', + completion: 'name', }, { - keyword: 'suboptions', - position: { line: 11, character: 12 } as Position, - triggerCharacter: '', + name: 'when', + position: { line: 5, character: 8 } as Position, + triggerCharacter: 'wh', + completion: 'when', }, ]; - tests.forEach(({ keyword, position, triggerCharacter }) => { - it(`should provide completion for ${keyword}`, async function () { - const textDoc = await getDoc('completion/tasks.yml'); + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const textDoc = await getDoc('completion/with_roles.yml'); const context = workspaceManager.getContext(textDoc.uri); - // Update setting to avoid fqcn - const docSettings = context.documentSettings.get(textDoc.uri); - const cachedDefaultSetting = (await docSettings).ansible - .useFullyQualifiedCollectionNames; - (await docSettings).ansible.useFullyQualifiedCollectionNames = false; + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + filteredCompletion.forEach((item) => { + item.item ? console.log(item.item.label) : console.log(item.label); + }); + console.log('\n'); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); + }); + + describe('Completion for block keywords', () => { + const tests = [ + { + name: 'become_user', + position: { line: 8, character: 13 } as Position, + triggerCharacter: 'user', + completion: 'become_user', + }, + { + name: 'become', + position: { line: 7, character: 8 } as Position, + triggerCharacter: 'be', + completion: 'become', + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const textDoc = await getDoc('completion/with_blocks.yml'); + const context = workspaceManager.getContext(textDoc.uri); const actualCompletion = await doCompletion(textDoc, position, context); @@ -61,10 +139,212 @@ describe('doCompletion()', () => { }); console.log('\n'); - expect(filteredCompletion).not.to.be.null; + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); + }); + + describe('Completion for task keywords', () => { + const tests = [ + { + name: 'loop', + position: { line: 10, character: 9 } as Position, + triggerCharacter: 'loop', + completion: 'loop', + }, + { + name: 'debugger', + position: { line: 13, character: 9 } as Position, + triggerCharacter: 'deb', + completion: 'debugger', + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const textDoc = await getDoc('completion/simple_tasks.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + filteredCompletion.forEach((item) => { + item.item ? console.log(item.item.label) : console.log(item.label); + }); + console.log('\n'); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); + }); + describe('Completion for module names (with different trigger scenarios)', () => { + const tests = [ + { + name: 'with name as first option always', + position: { line: 6, character: 6 } as Position, + triggerCharacter: '', + completion: 'name', + }, + { + name: 'with `ping`', + position: { line: 7, character: 8 } as Position, + triggerCharacter: 'ping', + completion: 'ansible.builtin.ping', + }, + { + name: 'with `debu`', + position: { line: 7, character: 8 } as Position, + triggerCharacter: 'debu', + completion: 'ansible.builtin.debug', + }, + { + name: 'with `ansible.`', + position: { line: 7, character: 8 } as Position, + triggerCharacter: 'ansible.', + completion: 'ansible.', + }, + { + name: 'with `ansible.builtin.`', + position: { line: 7, character: 8 } as Position, + triggerCharacter: 'ansible.builtin.', + completion: 'ansible.builtin.', + }, + { + name: 'with `org_1.c`', + position: { line: 16, character: 13 } as Position, + triggerCharacter: 'org_1.c', + completion: 'org_1.c', + }, + { + name: 'with `org_1.coll_4.`', + position: { line: 16, character: 19 } as Position, + triggerCharacter: 'org_1.coll_4.', + completion: 'org_1.coll_4.', + }, + { + name: 'with `cli_`', + position: { line: 7, character: 8 } as Position, + triggerCharacter: 'cli_', + completion: 'cli_', + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide autocompletion ${name}`, async function () { + const textDoc = await getDoc('completion/simple_tasks.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + filteredCompletion.forEach((item) => { + item.item ? console.log(item.item.label) : console.log(item.label); + }); + console.log('\n'); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).to.contain(completion); + } else { + expect(filteredCompletion[0].item.label).to.contain(completion); + } + } + }); + }); + }); + + describe('Completion for module options and suboptions', () => { + const tests = [ + { + name: 'builtin module option (ansible.builtin.debug -> msg)', + position: { line: 8, character: 9 } as Position, + triggerCharacter: 'm', + completion: 'msg', + }, + { + name: 'collection module option (org_1.coll_4.module_1 -> opt_1)', + position: { line: 17, character: 8 } as Position, + triggerCharacter: '', + completion: 'opt_1', + }, + { + name: 'collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_1)', + position: { line: 21, character: 12 } as Position, + triggerCharacter: '1', + completion: 'sub_opt_1', + }, + { + name: 'collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_2 -> sub_sub_opt_3 -> sub_sub_sub_opt_2)', + position: { line: 26, character: 20 } as Position, + triggerCharacter: '2', + completion: 'sub_sub_sub_opt_2', + }, + { + name: 'only non repeating options', + position: { line: 9, character: 9 } as Position, + triggerCharacter: 'm', + completion: '', + }, + { + name: 'only non repeating suboptions', + position: { line: 29, character: 20 } as Position, + triggerCharacter: '1', + completion: '', + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const textDoc = await getDoc('completion/simple_tasks.yml'); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + filteredCompletion.forEach((item) => { + item.item ? console.log(item.item.label) : console.log(item.label); + }); + console.log('\n'); - (await docSettings).ansible.useFullyQualifiedCollectionNames = - cachedDefaultSetting; + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } }); }); }); From 5725b7e2e4c5b35f5c9c0eacc255cefe00475613 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Wed, 16 Mar 2022 15:37:29 +0530 Subject: [PATCH 293/558] update towncrier broken docs link (#265) * update towncrier broken docs link * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/changelog-fragments.d/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/changelog-fragments.d/README.md b/docs/changelog-fragments.d/README.md index e9f7cf056..3c4fa51cb 100644 --- a/docs/changelog-fragments.d/README.md +++ b/docs/changelog-fragments.d/README.md @@ -67,5 +67,4 @@ See `pyproject.toml` for all available categories ``` [myst-md]: https://myst-parser.rtfd.io/en/latest/syntax/syntax.html -[towncrier-philosophy]: - https://towncrier.rtfd.io/en/actual-freaking-docs/#philosophy +[towncrier-philosophy]: https://towncrier.readthedocs.io/en/latest/#philosophy From 87049785d4a40058e3f51c55ce93085f7f5365a2 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Wed, 16 Mar 2022 15:38:54 +0530 Subject: [PATCH 294/558] update test to handle new ansible-lint error report (#264) --- test/providers/validationProvider.test.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts index 395b5025d..d5e8c7a49 100644 --- a/test/providers/validationProvider.test.ts +++ b/test/providers/validationProvider.test.ts @@ -60,12 +60,11 @@ describe("doValidate()", () => { }, { severity: 1, - // eslint-disable-next-line quotes - message: "Don't compare to empty string", + message: "Use FQCN for builtin actions", range: { - start: { line: 9, character: 0 } as Position, + start: { line: 14, character: 0 } as Position, end: { - line: 9, + line: 14, character: integer.MAX_VALUE, } as Position, }, From 8b4591129904b2848e8d339aa893221f4e5c2f16 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 16 Mar 2022 10:09:50 +0000 Subject: [PATCH 295/558] Configure sphinx to always use colors on output (#266) Related: https://github.com/sphinx-doc/sphinx/pull/10260 --- tox.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 1fbfc34b9..5e53561e7 100644 --- a/tox.ini +++ b/tox.ini @@ -11,7 +11,8 @@ skipsdist = true [docs] # do not use continuation with vars, see https://github.com/tox-dev/tox/issues/2069 sphinx_common_args = - -j auto {tty:--color} -a -n -W --keep-going -T -d "{temp_dir}/.doctrees" . "{envdir}/docs_out" + # https://github.com/sphinx-doc/sphinx/pull/10260 + -j auto --color -a -n -W --keep-going -T -d "{temp_dir}/.doctrees" . "{envdir}/docs_out" [testenv] description = From 827fc0d39c0b2426049544a3f3495160c762c7d1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 16 Mar 2022 16:28:55 +0530 Subject: [PATCH 296/558] Bump version to v0.5.3 (#267) * Generate a changelog entry for v0.5.3 * Release 0.5.3 from GitHub Actions CI/CD * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- CHANGELOG.md | 30 +++++++++++++++++++++++ docs/changelog-fragments.d/243.feature.md | 9 ------- docs/changelog-fragments.d/261.feature.md | 3 --- docs/changelog-fragments.d/263.bugfix.md | 3 --- package-lock.json | 4 +-- package.json | 2 +- 6 files changed, 33 insertions(+), 18 deletions(-) delete mode 100644 docs/changelog-fragments.d/243.feature.md delete mode 100644 docs/changelog-fragments.d/261.feature.md delete mode 100644 docs/changelog-fragments.d/263.bugfix.md diff --git a/CHANGELOG.md b/CHANGELOG.md index ee8fa3c09..2e5ed4415 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,36 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag +## v0.5.3 (2022-03-16) + +### Bugfixes + +- Fixed intermittent issue with execution environment for auto-completion and + hover by waiting for async function to copy plugins from within EE to local + host cache --{user}`ganeshrn`. + + ({issue}`263`) + +### Features + +- Enhanced the logic of ansible-lint service to do the following things by + --{user}`priyamsahoo`: + + - Fallback to `--syntax-check` in every failure scenarios (for eg. in case of + wrong arguments passed, etc) and give visual feedback to the user in terms + of notification about what went wrong. + - Handle different response types sent by ansible-lint (for e.g. ansible-lint + sends failure reports as stdout and sometimes as errors) by making them + uniform in terms of structure and redirection. + + ({issue}`243`) + +- Replaced the value `2^53 - 1 (which is Number.MAX_SAFE_INTEGER)` with + `2^31 - 1 (which is integer.MAX_VALUE)` to support extension clients that do + handle 64-bit floating point IEEE 754 number by --{user}`priyamsahoo`. + + ({issue}`261`) + ## v0.5.2 (2022-03-02) ### Bugfixes diff --git a/docs/changelog-fragments.d/243.feature.md b/docs/changelog-fragments.d/243.feature.md deleted file mode 100644 index 092339043..000000000 --- a/docs/changelog-fragments.d/243.feature.md +++ /dev/null @@ -1,9 +0,0 @@ -Enhanced the logic of ansible-lint service to do the following things by ---{user}`priyamsahoo`: - -- Fallback to `--syntax-check` in every failure scenarios (for eg. in case of - wrong arguments passed, etc) and give visual feedback to the user in terms of - notification about what went wrong. -- Handle different response types sent by ansible-lint (for e.g. ansible-lint - sends failure reports as stdout and sometimes as errors) by making them - uniform in terms of structure and redirection. diff --git a/docs/changelog-fragments.d/261.feature.md b/docs/changelog-fragments.d/261.feature.md deleted file mode 100644 index c6993f2d1..000000000 --- a/docs/changelog-fragments.d/261.feature.md +++ /dev/null @@ -1,3 +0,0 @@ -Replaced the value `2^53 - 1 (which is Number.MAX_SAFE_INTEGER)` with -`2^31 - 1 (which is integer.MAX_VALUE)` to support extension clients that do -handle 64-bit floating point IEEE 754 number by --{user}`priyamsahoo`. diff --git a/docs/changelog-fragments.d/263.bugfix.md b/docs/changelog-fragments.d/263.bugfix.md deleted file mode 100644 index 2b8a23706..000000000 --- a/docs/changelog-fragments.d/263.bugfix.md +++ /dev/null @@ -1,3 +0,0 @@ -Fixed intermittent issue with execution environment for auto-completion and -hover by waiting for async function to copy plugins from within EE to local host -cache --{user}`ganeshrn`. diff --git a/package-lock.json b/package-lock.json index ef5fad146..5fe528666 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.5.2", + "version": "0.5.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.5.2", + "version": "0.5.3", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 17fd27ab5..90ebf09af 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.5.2", + "version": "0.5.3", "contributors": [ { "name": "Tomasz Maciążek", From c39bfb76f46b57812e6da259f2107b8ddccee404 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 16 Mar 2022 18:36:34 +0530 Subject: [PATCH 297/558] update test fixture --- test/fixtures/completion/simple_tasks.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/fixtures/completion/simple_tasks.yml b/test/fixtures/completion/simple_tasks.yml index 3ffb958ad..f089d6d68 100644 --- a/test/fixtures/completion/simple_tasks.yml +++ b/test/fixtures/completion/simple_tasks.yml @@ -27,4 +27,8 @@ sub_sub_sub_opt_2: - sub_sub_sub_opt_1: - sub_sub_sub_opt_2: \ No newline at end of file + sub_sub_sub_opt_2: + + - name: Netcommon module + ansible.netcommon.cli_command: + command: show version | json \ No newline at end of file From 84b1a0588e7a00036b1f7357bd4d88dd8b74dfcc Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 16 Mar 2022 18:41:09 +0530 Subject: [PATCH 298/558] update test script with double quotes --- test/providers/completionProvider.test.ts | 182 +++++++++++----------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index e71d1f4c0..351ebfce2 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -1,38 +1,38 @@ -import { expect } from 'chai'; -import { Position } from 'vscode-languageserver'; -import { doCompletion } from '../../src/providers/completionProvider'; -import {} from '../../src/providers/validationProvider'; +import { expect } from "chai"; +import { Position } from "vscode-languageserver"; +import { doCompletion } from "../../src/providers/completionProvider"; +import {} from "../../src/providers/validationProvider"; import { createTestWorkspaceManager, getDoc, setFixtureAnsibleCollectionPathEnv, smartFilter, -} from '../helper'; +} from "../helper"; setFixtureAnsibleCollectionPathEnv(); -describe('doCompletion()', () => { +describe("doCompletion()", () => { const workspaceManager = createTestWorkspaceManager(); - describe('Completion for play keywords', () => { + describe("Completion for play keywords", () => { const tests = [ { - name: 'name', + name: "name", position: { line: 0, character: 2 } as Position, - triggerCharacter: '', - completion: 'name', + triggerCharacter: "", + completion: "name", }, { - name: 'hosts', + name: "hosts", position: { line: 2, character: 5 } as Position, - triggerCharacter: 'hos', - completion: 'hosts', + triggerCharacter: "hos", + completion: "hosts", }, ]; tests.forEach(({ name, position, triggerCharacter, completion }) => { it(`should provide completion for ${name}`, async function () { - const textDoc = await getDoc('completion/simple_tasks.yml'); + const textDoc = await getDoc("completion/simple_tasks.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualCompletion = await doCompletion(textDoc, position, context); @@ -45,7 +45,7 @@ describe('doCompletion()', () => { filteredCompletion.forEach((item) => { item.item ? console.log(item.item.label) : console.log(item.label); }); - console.log('\n'); + console.log("\n"); if (!completion) { expect(filteredCompletion.length).be.equal(0); @@ -60,25 +60,25 @@ describe('doCompletion()', () => { }); }); - describe('Completion for role keywords', () => { + describe("Completion for role keywords", () => { const tests = [ { - name: 'name', + name: "name", position: { line: 4, character: 6 } as Position, - triggerCharacter: '', - completion: 'name', + triggerCharacter: "", + completion: "name", }, { - name: 'when', + name: "when", position: { line: 5, character: 8 } as Position, - triggerCharacter: 'wh', - completion: 'when', + triggerCharacter: "wh", + completion: "when", }, ]; tests.forEach(({ name, position, triggerCharacter, completion }) => { it(`should provide completion for ${name}`, async function () { - const textDoc = await getDoc('completion/with_roles.yml'); + const textDoc = await getDoc("completion/with_roles.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualCompletion = await doCompletion(textDoc, position, context); @@ -91,7 +91,7 @@ describe('doCompletion()', () => { filteredCompletion.forEach((item) => { item.item ? console.log(item.item.label) : console.log(item.label); }); - console.log('\n'); + console.log("\n"); if (!completion) { expect(filteredCompletion.length).be.equal(0); @@ -106,25 +106,25 @@ describe('doCompletion()', () => { }); }); - describe('Completion for block keywords', () => { + describe("Completion for block keywords", () => { const tests = [ { - name: 'become_user', + name: "become_user", position: { line: 8, character: 13 } as Position, - triggerCharacter: 'user', - completion: 'become_user', + triggerCharacter: "user", + completion: "become_user", }, { - name: 'become', + name: "become", position: { line: 7, character: 8 } as Position, - triggerCharacter: 'be', - completion: 'become', + triggerCharacter: "be", + completion: "become", }, ]; tests.forEach(({ name, position, triggerCharacter, completion }) => { it(`should provide completion for ${name}`, async function () { - const textDoc = await getDoc('completion/with_blocks.yml'); + const textDoc = await getDoc("completion/with_blocks.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualCompletion = await doCompletion(textDoc, position, context); @@ -137,7 +137,7 @@ describe('doCompletion()', () => { filteredCompletion.forEach((item) => { item.item ? console.log(item.item.label) : console.log(item.label); }); - console.log('\n'); + console.log("\n"); if (!completion) { expect(filteredCompletion.length).be.equal(0); @@ -152,25 +152,25 @@ describe('doCompletion()', () => { }); }); - describe('Completion for task keywords', () => { + describe("Completion for task keywords", () => { const tests = [ { - name: 'loop', + name: "loop", position: { line: 10, character: 9 } as Position, - triggerCharacter: 'loop', - completion: 'loop', + triggerCharacter: "loop", + completion: "loop", }, { - name: 'debugger', + name: "debugger", position: { line: 13, character: 9 } as Position, - triggerCharacter: 'deb', - completion: 'debugger', + triggerCharacter: "deb", + completion: "debugger", }, ]; tests.forEach(({ name, position, triggerCharacter, completion }) => { it(`should provide completion for ${name}`, async function () { - const textDoc = await getDoc('completion/simple_tasks.yml'); + const textDoc = await getDoc("completion/simple_tasks.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualCompletion = await doCompletion(textDoc, position, context); @@ -183,7 +183,7 @@ describe('doCompletion()', () => { filteredCompletion.forEach((item) => { item.item ? console.log(item.item.label) : console.log(item.label); }); - console.log('\n'); + console.log("\n"); if (!completion) { expect(filteredCompletion.length).be.equal(0); @@ -197,61 +197,61 @@ describe('doCompletion()', () => { }); }); }); - describe('Completion for module names (with different trigger scenarios)', () => { + describe("Completion for module names (with different trigger scenarios)", () => { const tests = [ { - name: 'with name as first option always', + name: "with name as first option always", position: { line: 6, character: 6 } as Position, - triggerCharacter: '', - completion: 'name', + triggerCharacter: "", + completion: "name", }, { - name: 'with `ping`', + name: "with `ping`", position: { line: 7, character: 8 } as Position, - triggerCharacter: 'ping', - completion: 'ansible.builtin.ping', + triggerCharacter: "ping", + completion: "ansible.builtin.ping", }, { - name: 'with `debu`', + name: "with `debu`", position: { line: 7, character: 8 } as Position, - triggerCharacter: 'debu', - completion: 'ansible.builtin.debug', + triggerCharacter: "debu", + completion: "ansible.builtin.debug", }, { - name: 'with `ansible.`', + name: "with `ansible.`", position: { line: 7, character: 8 } as Position, - triggerCharacter: 'ansible.', - completion: 'ansible.', + triggerCharacter: "ansible.", + completion: "ansible.", }, { - name: 'with `ansible.builtin.`', + name: "with `ansible.builtin.`", position: { line: 7, character: 8 } as Position, - triggerCharacter: 'ansible.builtin.', - completion: 'ansible.builtin.', + triggerCharacter: "ansible.builtin.", + completion: "ansible.builtin.", }, { - name: 'with `org_1.c`', + name: "with `org_1.c`", position: { line: 16, character: 13 } as Position, - triggerCharacter: 'org_1.c', - completion: 'org_1.c', + triggerCharacter: "org_1.c", + completion: "org_1.c", }, { - name: 'with `org_1.coll_4.`', + name: "with `org_1.coll_4.`", position: { line: 16, character: 19 } as Position, - triggerCharacter: 'org_1.coll_4.', - completion: 'org_1.coll_4.', + triggerCharacter: "org_1.coll_4.", + completion: "org_1.coll_4.", }, { - name: 'with `cli_`', - position: { line: 7, character: 8 } as Position, - triggerCharacter: 'cli_', - completion: 'cli_', + name: "with `cli_`", + position: { line: 32, character: 6 } as Position, + triggerCharacter: "cli_", + completion: "cli_", }, ]; tests.forEach(({ name, position, triggerCharacter, completion }) => { it(`should provide autocompletion ${name}`, async function () { - const textDoc = await getDoc('completion/simple_tasks.yml'); + const textDoc = await getDoc("completion/simple_tasks.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualCompletion = await doCompletion(textDoc, position, context); @@ -264,7 +264,7 @@ describe('doCompletion()', () => { filteredCompletion.forEach((item) => { item.item ? console.log(item.item.label) : console.log(item.label); }); - console.log('\n'); + console.log("\n"); if (!completion) { expect(filteredCompletion.length).be.equal(0); @@ -279,49 +279,49 @@ describe('doCompletion()', () => { }); }); - describe('Completion for module options and suboptions', () => { + describe("Completion for module options and suboptions", () => { const tests = [ { - name: 'builtin module option (ansible.builtin.debug -> msg)', + name: "builtin module option (ansible.builtin.debug -> msg)", position: { line: 8, character: 9 } as Position, - triggerCharacter: 'm', - completion: 'msg', + triggerCharacter: "m", + completion: "msg", }, { - name: 'collection module option (org_1.coll_4.module_1 -> opt_1)', + name: "collection module option (org_1.coll_4.module_1 -> opt_1)", position: { line: 17, character: 8 } as Position, - triggerCharacter: '', - completion: 'opt_1', + triggerCharacter: "", + completion: "opt_1", }, { - name: 'collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_1)', + name: "collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_1)", position: { line: 21, character: 12 } as Position, - triggerCharacter: '1', - completion: 'sub_opt_1', + triggerCharacter: "1", + completion: "sub_opt_1", }, { - name: 'collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_2 -> sub_sub_opt_3 -> sub_sub_sub_opt_2)', + name: "collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_2 -> sub_sub_opt_3 -> sub_sub_sub_opt_2)", position: { line: 26, character: 20 } as Position, - triggerCharacter: '2', - completion: 'sub_sub_sub_opt_2', + triggerCharacter: "2", + completion: "sub_sub_sub_opt_2", }, { - name: 'only non repeating options', + name: "only non repeating options", position: { line: 9, character: 9 } as Position, - triggerCharacter: 'm', - completion: '', + triggerCharacter: "m", + completion: "", }, { - name: 'only non repeating suboptions', + name: "only non repeating suboptions", position: { line: 29, character: 20 } as Position, - triggerCharacter: '1', - completion: '', + triggerCharacter: "1", + completion: "", }, ]; tests.forEach(({ name, position, triggerCharacter, completion }) => { it(`should provide completion for ${name}`, async function () { - const textDoc = await getDoc('completion/simple_tasks.yml'); + const textDoc = await getDoc("completion/simple_tasks.yml"); const context = workspaceManager.getContext(textDoc.uri); const actualCompletion = await doCompletion(textDoc, position, context); @@ -334,7 +334,7 @@ describe('doCompletion()', () => { filteredCompletion.forEach((item) => { item.item ? console.log(item.item.label) : console.log(item.label); }); - console.log('\n'); + console.log("\n"); if (!completion) { expect(filteredCompletion.length).be.equal(0); From 128131f915c15917d67de75cc37e9400bc63e32d Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 16 Mar 2022 13:52:19 +0000 Subject: [PATCH 299/558] Enable dependabot and pinning of test dependencies (#268) --- .config/dictionary.txt | 1 + .github/dependabot.yml | 19 +++++++++++++++++++ cspell.config.yaml | 3 ++- test-requirements.txt => requirements.in | 0 requirements.txt | 20 ++++++++++++++++++++ tox.ini | 13 +++++++++++++ 6 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 .github/dependabot.yml rename test-requirements.txt => requirements.in (100%) create mode 100644 requirements.txt diff --git a/.config/dictionary.txt b/.config/dictionary.txt index b16da021d..4cd02987d 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -7,6 +7,7 @@ autofix autoupdate backticks cacheable +chronographer codeclimate codecov commitish diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..303198d43 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,19 @@ +# https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/enabling-and-disabling-dependabot-version-updates +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "daily" + labels: + - dependencies + # as dependabot bumps only the pinned test dependencies, is safe to: + - bot:chronographer:skip + open-pull-requests-limit: 3 + allow: + # tell dependabot to update only important dependencies, not indirect ones + - dependency-name: pre-commit + - dependency-name: click + - dependency-name: lxml + - dependency-name: pre-commit + - dependency-name: pyparsing diff --git a/cspell.config.yaml b/cspell.config.yaml index 5925849ad..d9e42c99e 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -13,6 +13,7 @@ dictionaries: - "!cryptocurrencies" - "!cpp" ignorePaths: - - docs/requirements.txt - docs/requirements.in + - docs/requirements.txt + - requirements.txt - syntaxes/**/*.* diff --git a/test-requirements.txt b/requirements.in similarity index 100% rename from test-requirements.txt rename to requirements.in diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..0e59195db --- /dev/null +++ b/requirements.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with python 3.10 +# To update, run: +# +# pip-compile --no-annotate --output-file=requirements.txt requirements.in +# +cfgv==3.3.1 +click==8.0.4 +distlib==0.3.4 +filelock==3.6.0 +identify==2.4.11 +lxml==4.8.0 +nodeenv==1.6.0 +platformdirs==2.5.1 +pre-commit==2.17.0 +pyparsing==3.0.7 +pyyaml==6.0 +six==1.16.0 +toml==0.10.2 +virtualenv==20.13.3 diff --git a/tox.ini b/tox.ini index 5e53561e7..21200b4d1 100644 --- a/tox.ini +++ b/tox.ini @@ -32,6 +32,7 @@ setenv = node12: NODE_VERSION=12 node14: NODE_VERSION=14 node16: NODE_VERSION=16 + PIP_CONSTRAINTS=requirements.txt allowlist_externals = bash node @@ -56,6 +57,18 @@ description = test-node14: with node 14 test-node16: with node 16 +[testenv:deps] +description = Bump all test dependencies +# Using py310 in order to make pip-compile consistent. +basepython = python3.10 +deps = + -c requirements.txt + pip-tools >= 6.5.1 +commands = + # dependabot supports only 'requirements.txt' filename but we use it as + # a constraints files + bash -c "PIP_CONSTRAINTS= pip-compile -q --no-annotate -r requirements.in -o requirements.txt" + [testenv:docs] allowlist_externals = git From bd78366571ac0fc2d25d330f809f6a49b12ff61e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Mar 2022 14:08:47 +0000 Subject: [PATCH 300/558] Bump click from 8.0.3 to 8.0.4 (#270) Bumps [click](https://github.com/pallets/click) from 8.0.3 to 8.0.4. - [Release notes](https://github.com/pallets/click/releases) - [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/click/compare/8.0.3...8.0.4) --- updated-dependencies: - dependency-name: click dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index c02d48b54..fa17af262 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -16,7 +16,7 @@ certifi==2021.10.8 # via requests charset-normalizer==2.0.8 # via requests -click==8.0.3 +click==8.0.4 # via towncrier click-default-group==1.2.2 # via towncrier From ef31bfe11abac540c0f044aea110708d700f55a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Mar 2022 14:09:10 +0000 Subject: [PATCH 301/558] Bump pyparsing from 3.0.6 to 3.0.7 (#271) Bumps [pyparsing](https://github.com/pyparsing/pyparsing) from 3.0.6 to 3.0.7. - [Release notes](https://github.com/pyparsing/pyparsing/releases) - [Changelog](https://github.com/pyparsing/pyparsing/blob/master/CHANGES) - [Commits](https://github.com/pyparsing/pyparsing/compare/pyparsing_3.0.6...pyparsing_3.0.7) --- updated-dependencies: - dependency-name: pyparsing dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index fa17af262..099bc8d85 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -65,7 +65,7 @@ pygments==2.10.0 # via # ansible-pygments # sphinx -pyparsing==3.0.6 +pyparsing==3.0.7 # via packaging pytz==2021.3 # via babel From a3e5826108da031ae02b500e8432fd910dcde806 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 16 Mar 2022 23:15:26 +0530 Subject: [PATCH 302/558] add ConsoleOutput class with methods to capture and release console.* outputs --- test/consoleOutput.ts | 67 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 test/consoleOutput.ts diff --git a/test/consoleOutput.ts b/test/consoleOutput.ts new file mode 100644 index 000000000..d609c7a70 --- /dev/null +++ b/test/consoleOutput.ts @@ -0,0 +1,67 @@ +/** + * Captures all types of outputs from console.[log, debug, info, warn, error] functions + * by modifying their abilities and redirects them to suppress and release them appropriately + */ +export class ConsoleOutput { + private logOutput: string; + private debugOutput: string; + private infoOutput: string; + private warnOutput: string; + private errorOutput: string; + + private originalConsoleLog = console.log; + private originalConsoleDebug = console.debug; + private originalConsoleInfo = console.info; + private originalConsoleWarn = console.warn; + private originalConsoleError = console.error; + + /** + * Captures the output from console.* functions and suppresses it + */ + public capture(): void { + this.logOutput = ""; + console.log = (msg) => { + this.logOutput += msg + "\n"; + }; + + this.debugOutput = ""; + console.debug = (msg) => { + this.debugOutput += msg + "\n"; + }; + + this.infoOutput = ""; + console.info = (msg) => { + this.infoOutput += msg + "\n"; + }; + + this.warnOutput = ""; + console.warn = (msg) => { + this.warnOutput += msg + "\n"; + }; + + this.errorOutput = ""; + console.error = (msg) => { + this.errorOutput += msg + "\n"; + }; + } + + /** + * Reverts back the original ability of console.* functions and releases the captured output + */ + public release(): void { + console.log = this.originalConsoleLog; + console.log(this.logOutput); + + console.debug = this.originalConsoleDebug; + console.debug(this.debugOutput); + + console.info = this.originalConsoleInfo; + console.info(this.infoOutput); + + console.warn = this.originalConsoleWarn; + console.warn(this.warnOutput); + + console.error = this.originalConsoleError; + console.error(this.errorOutput); + } +} From 7e7151dc703ab6e76e9e816af5a626a303360c95 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 16 Mar 2022 23:17:12 +0530 Subject: [PATCH 303/558] add mocha hooks at root level to suppress the console outputs from successful tests --- test/rootMochaHooks.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 test/rootMochaHooks.ts diff --git a/test/rootMochaHooks.ts b/test/rootMochaHooks.ts new file mode 100644 index 000000000..6e4c8e62c --- /dev/null +++ b/test/rootMochaHooks.ts @@ -0,0 +1,17 @@ +import { ConsoleOutput } from "./consoleOutput"; + +export const mochaHooks = (): Mocha.RootHookObject => { + const consoleOutput = new ConsoleOutput(); + + return { + beforeEach() { + consoleOutput.capture(); + }, + + afterEach() { + if (this.currentTest.state !== "passed") { + consoleOutput.release(); + } + }, + }; +}; From e46e1aedc39b06ff59aea16d61347afc9e7b1e17 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 16 Mar 2022 23:20:04 +0530 Subject: [PATCH 304/558] update .mocharc.yml file to setup root mocha hooks --- .mocharc.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.mocharc.yml b/.mocharc.yml index ab091bf07..42f2caa64 100644 --- a/.mocharc.yml +++ b/.mocharc.yml @@ -1,3 +1,5 @@ -require: ts-node/register +require: + - ts-node/register + - test/rootMochaHooks.ts spec: './test/**/*.ts' timeout: 60000 # same as 60 seconds. This done to ensure that we have sufficient time to run tests on the CI as each test involves loading yaml files and docs library for ansible. From 744e63d72decd32760660363ed93e37494580169 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 16 Mar 2022 23:32:19 +0530 Subject: [PATCH 305/558] replace string concatenation with template --- test/consoleOutput.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/consoleOutput.ts b/test/consoleOutput.ts index d609c7a70..71634b720 100644 --- a/test/consoleOutput.ts +++ b/test/consoleOutput.ts @@ -21,27 +21,27 @@ export class ConsoleOutput { public capture(): void { this.logOutput = ""; console.log = (msg) => { - this.logOutput += msg + "\n"; + this.logOutput += `${msg}\n`; }; this.debugOutput = ""; console.debug = (msg) => { - this.debugOutput += msg + "\n"; + this.debugOutput += `${msg}\n`; }; this.infoOutput = ""; console.info = (msg) => { - this.infoOutput += msg + "\n"; + this.infoOutput += `${msg}\n`; }; this.warnOutput = ""; console.warn = (msg) => { - this.warnOutput += msg + "\n"; + this.warnOutput += `${msg}\n`; }; this.errorOutput = ""; console.error = (msg) => { - this.errorOutput += msg + "\n"; + this.errorOutput += `${msg}\n`; }; } From ddf6fae68e74afd7faaf57fb14d54427f330ccef Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 2 Mar 2022 09:28:39 +0000 Subject: [PATCH 306/558] Upgrade globby Warning: it no longer compiles, breaking mocha. NEED HELP! --- package-lock.json | 161 ++++++++++++++++++++++++++++++++-------- package.json | 4 +- src/utils/docsFinder.ts | 2 +- 3 files changed, 135 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5fe528666..1149e10a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", - "globby": "^11.0.4", + "globby": "^13.1.1", "ini": "^2.0.0", "lodash": "^4.17.21", "uuid": "^8.3.2", @@ -40,7 +40,7 @@ "nyc": "^15.1.0", "prettier": "^2.5.1", "rimraf": "^3.0.2", - "ts-node": "^10.5.0", + "ts-node": "^10.6.0", "typescript": "^4.6.2" }, "engines": { @@ -1077,6 +1077,35 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@typescript-eslint/utils": { "version": "5.13.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.13.0.tgz", @@ -1326,6 +1355,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, "engines": { "node": ">=8" } @@ -2688,19 +2718,18 @@ } }, "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz", + "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==", "dependencies": { - "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", + "fast-glob": "^3.2.11", "ignore": "^5.2.0", "merge2": "^1.4.1", - "slash": "^3.0.0" + "slash": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4065,6 +4094,26 @@ "balanced-match": "^1.0.0" } }, + "node_modules/npm-check-updates/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/npm-check-updates/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -4092,6 +4141,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npm-check-updates/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/npm-install-checks": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", @@ -5281,11 +5339,14 @@ "dev": true }, "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/smart-buffer": { @@ -5556,9 +5617,9 @@ } }, "node_modules/ts-node": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.5.0.tgz", - "integrity": "sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.6.0.tgz", + "integrity": "sha512-CJen6+dfOXolxudBQXnVjRVvYTmTWbyz7cn+xq2XTsvnaXbHqr4gXSCNbS2Jj8yTZMuGwUoBESLaOkLascVVvg==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "0.7.0", @@ -6815,6 +6876,28 @@ "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" + }, + "dependencies": { + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } } }, "@typescript-eslint/utils": { @@ -7003,7 +7086,8 @@ "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true }, "assertion-error": { "version": "1.1.0", @@ -8026,16 +8110,15 @@ } }, "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz", + "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==", "requires": { - "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", + "fast-glob": "^3.2.11", "ignore": "^5.2.0", "merge2": "^1.4.1", - "slash": "^3.0.0" + "slash": "^4.0.0" } }, "got": { @@ -9085,6 +9168,20 @@ "balanced-match": "^1.0.0" } }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -9102,6 +9199,12 @@ "requires": { "aggregate-error": "^3.0.0" } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true } } }, @@ -9995,9 +10098,9 @@ "dev": true }, "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" }, "smart-buffer": { "version": "4.2.0", @@ -10211,9 +10314,9 @@ } }, "ts-node": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.5.0.tgz", - "integrity": "sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.6.0.tgz", + "integrity": "sha512-CJen6+dfOXolxudBQXnVjRVvYTmTWbyz7cn+xq2XTsvnaXbHqr4gXSCNbS2Jj8yTZMuGwUoBESLaOkLascVVvg==", "dev": true, "requires": { "@cspotcode/source-map-support": "0.7.0", diff --git a/package.json b/package.json index 90ebf09af..d357e5fb9 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ ], "dependencies": { "@flatten-js/interval-tree": "^1.0.18", - "globby": "^11.0.4", + "globby": "^13.1.1", "ini": "^2.0.0", "lodash": "^4.17.21", "uuid": "^8.3.2", @@ -69,7 +69,7 @@ "nyc": "^15.1.0", "prettier": "^2.5.1", "rimraf": "^3.0.2", - "ts-node": "^10.5.0", + "ts-node": "^10.6.0", "typescript": "^4.6.2" }, "scripts": { diff --git a/src/utils/docsFinder.ts b/src/utils/docsFinder.ts index 35b46e108..20196f63c 100644 --- a/src/utils/docsFinder.ts +++ b/src/utils/docsFinder.ts @@ -1,7 +1,7 @@ import * as fs from "fs"; import * as path from "path"; import { parseDocument } from "yaml"; -import globby = require("globby"); +import { globby } from "globby"; import { LazyModuleDocumentation, parseRawRouting } from "./docsParser"; import { IModuleMetadata } from "../interfaces/module"; import { From 12cb87bc3d35cddd8cfa8499769d12afac17a45c Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Mon, 21 Mar 2022 22:13:29 +0530 Subject: [PATCH 307/558] Add tests for completionProvider (#273) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .config/dictionary.txt | 1 + package-lock.json | 16 + package.json | 1 + .../org_1/coll_1/galaxy.yml | 2 +- .../org_1/coll_1/plugins/modules/module_1.py | 99 +++++ .../org_1/coll_2/galaxy.yml | 9 + .../org_1/coll_2/plugins/modules/module_1.py | 99 +++++ .../org_1/coll_2/plugins/modules/module_2.py | 99 +++++ .../org_1/coll_3/galaxy.yml | 9 + .../org_1/coll_3/plugins/modules/module_1.py | 99 +++++ .../org_1/coll_3/plugins/modules/module_2.py | 99 +++++ .../org_1/coll_3/plugins/modules/module_3.py | 99 +++++ .../org_1/coll_4/galaxy.yml | 9 + .../org_1/coll_4/plugins/modules/module_1.py | 99 +++++ .../org_1/coll_4/plugins/modules/module_2.py | 99 +++++ .../org_1/coll_4/plugins/modules/module_3.py | 99 +++++ .../org_1/coll_4/plugins/modules/module_4.py | 99 +++++ test/fixtures/completion/simple_tasks.yml | 34 ++ .../completion/tasks_without_fqcn.yml | 16 + test/fixtures/completion/with_blocks.yml | 9 + test/fixtures/completion/with_roles.yml | 6 + test/helper.ts | 46 +++ test/providers/completionProvider.test.ts | 388 ++++++++++++++++++ 23 files changed, 1535 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py create mode 100644 test/fixtures/completion/simple_tasks.yml create mode 100644 test/fixtures/completion/tasks_without_fqcn.yml create mode 100644 test/fixtures/completion/with_blocks.yml create mode 100644 test/fixtures/completion/with_roles.yml create mode 100644 test/providers/completionProvider.test.ts diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 4cd02987d..dfa9ff0ff 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -41,6 +41,7 @@ monospace mycollection mymodule mynamespace +netcommon nocolor notest npmjs diff --git a/package-lock.json b/package-lock.json index 5fe528666..41affd09b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,6 +35,7 @@ "chai": "^4.3.6", "eslint": "^8.10.0", "eslint-config-prettier": "^8.4.0", + "fuse.js": "^6.5.3", "mocha": "^9.2.1", "npm-check-updates": "^12.5.0", "nyc": "^15.1.0", @@ -2546,6 +2547,15 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/fuse.js": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", + "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/gauge": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz", @@ -7929,6 +7939,12 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "fuse.js": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", + "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", + "dev": true + }, "gauge": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz", diff --git a/package.json b/package.json index 90ebf09af..c876360a3 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "chai": "^4.3.6", "eslint": "^8.10.0", "eslint-config-prettier": "^8.4.0", + "fuse.js": "^6.5.3", "mocha": "^9.2.1", "npm-check-updates": "^12.5.0", "nyc": "^15.1.0", diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml index 432400cae..2d098270a 100644 --- a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml @@ -4,6 +4,6 @@ authors: description: "test collection" license_file: LICENSE name: coll_1 -namespace: testorg +namespace: org_1 readme: README.md version: 1.0.0 diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py new file mode 100644 index 000000000..01e16ba11 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_1.module_1 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_1 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_1.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml new file mode 100644 index 000000000..8210c2de9 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml @@ -0,0 +1,9 @@ +--- +authors: + - "Ansible devtools team" +description: "test collection" +license_file: LICENSE +name: coll_2 +namespace: org_1 +readme: README.md +version: 1.0.0 diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py new file mode 100644 index 000000000..fd20e7851 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_2.module_1 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_1 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_2.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py new file mode 100644 index 000000000..09872555c --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_2.module_2 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_2 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_2.module_2: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml new file mode 100644 index 000000000..9b0b56461 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml @@ -0,0 +1,9 @@ +--- +authors: + - "Ansible devtools team" +description: "test collection" +license_file: LICENSE +name: coll_3 +namespace: org_1 +readme: README.md +version: 1.0.0 diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py new file mode 100644 index 000000000..9ef9999d4 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_3.module_1 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_1 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_3.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py new file mode 100644 index 000000000..5115c2eb8 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_3.module_2 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_2 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_3.module_2: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py new file mode 100644 index 000000000..3184c24d6 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_3.module_3 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_3 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_3.module_3: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml new file mode 100644 index 000000000..4c8136ca8 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml @@ -0,0 +1,9 @@ +--- +authors: + - "Ansible devtools team" +description: "test collection" +license_file: LICENSE +name: coll_4 +namespace: org_1 +readme: README.md +version: 1.0.0 diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py new file mode 100644 index 000000000..3c3c80aae --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_4.module_1 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_1 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_4.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py new file mode 100644 index 000000000..4708f3f31 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_4.module_2 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_2 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_4.module_2: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py new file mode 100644 index 000000000..ee047c2d4 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_4.module_3 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_3 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_4.module_3: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py new file mode 100644 index 000000000..dec4767c1 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py @@ -0,0 +1,99 @@ +""" +The module file for org_1.coll_4.module_4 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_4 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_1 +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_4.module_4: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/completion/simple_tasks.yml b/test/fixtures/completion/simple_tasks.yml new file mode 100644 index 000000000..6b1ff9002 --- /dev/null +++ b/test/fixtures/completion/simple_tasks.yml @@ -0,0 +1,34 @@ +- name: Test playbook + gather_facts: False + hosts: localhost + vars: + my_var: 'test' + tasks: + - name: Builtin module + ansible.builtin.debug: + msg: "Hello World {{ item }}" + verbosity: 3 + loop: + - one + - two + debugger: on_skipped + + - name: Collection module + org_1.coll_4.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - name: Netcommon module + ansible.netcommon.cli_command: + command: show version | json diff --git a/test/fixtures/completion/tasks_without_fqcn.yml b/test/fixtures/completion/tasks_without_fqcn.yml new file mode 100644 index 000000000..5465f981b --- /dev/null +++ b/test/fixtures/completion/tasks_without_fqcn.yml @@ -0,0 +1,16 @@ +- name: Test playbook + gather_facts: false + hosts: localhost + vars: + my_var: 'test' + tasks: + - name: Builtin module + ping: + data: crashed + + - name: Collection module + org_1.coll_3.module_3: + opt_1: + - sub_opt_2: + + opt_3: diff --git a/test/fixtures/completion/with_blocks.yml b/test/fixtures/completion/with_blocks.yml new file mode 100644 index 000000000..e6df6493d --- /dev/null +++ b/test/fixtures/completion/with_blocks.yml @@ -0,0 +1,9 @@ +- name: Hello World + hosts: localhost + gather_facts: False + tasks: + - block: + - name: List test directory content + ansible.builtin.command: "ls -l /test/" + become: True + become_user: root diff --git a/test/fixtures/completion/with_roles.yml b/test/fixtures/completion/with_roles.yml new file mode 100644 index 000000000..a391edbe9 --- /dev/null +++ b/test/fixtures/completion/with_roles.yml @@ -0,0 +1,6 @@ +- name: Test play + hosts: localhost + gather_facts: False + roles: + - name: role + when: condition diff --git a/test/helper.ts b/test/helper.ts index a7658d6de..47719c8b6 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -5,6 +5,9 @@ import { WorkspaceManager } from "../src/services/workspaceManager"; import { createConnection, TextDocuments } from "vscode-languageserver/node"; import { ValidationManager } from "../src/services/validationManager"; +// eslint-disable-next-line @typescript-eslint/no-var-requires +const Fuse = require("fuse.js"); + const FIXTURES_BASE_PATH = path.join("test", "fixtures"); export function setFixtureAnsibleCollectionPathEnv(): void { @@ -28,6 +31,49 @@ export function isWindows(): boolean { return process.platform === "win32"; } +/** + * A function that tries to imitate the filtering of the completion items done in the respective client extension + * when the user starts typing against the provided auto-completions + * @param completionList list with completion items + * @param triggerCharacter string against which fuzzy search is to be done + * @returns list after sorting and filtering + */ +export function smartFilter(completionList, triggerCharacter) { + if (!completionList) { + return []; + } + + // Sort completion list based on `sortText` property of the completion item + completionList.sort((a, b) => a.sortText.localeCompare(b.sortText)); + + // Construct a new Fuse object to do fuzzy search with key as `filterText` property of the completion item + const searcher = new Fuse(completionList, { + keys: ["filterText"], + threshold: 0.4, + refIndex: false, + }); + + let filteredCompletionList = triggerCharacter + ? searcher.search(triggerCharacter).slice(0, 5) + : completionList.slice(0, 5); + + if (filteredCompletionList.length === 0) { + // Handle the case when filterText property is not available in completion item. + // In this case, construct a new Fuse object to do fuzzy search with key as `label` property of the completion item + const newSearcher = new Fuse(completionList, { + keys: ["label"], + threshold: 0.2, + refIndex: false, + }); + + filteredCompletionList = triggerCharacter + ? newSearcher.search(triggerCharacter).slice(0, 5) + : completionList.slice(0, 5); + } + + return filteredCompletionList; +} + /** * A function that initiates the connection object with ipc that can be used to create a workspace manager for testing purposes * @returns {WorkspaceManager} object to serve as a workspace manager for testing purposes diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts new file mode 100644 index 000000000..0c0dc0b89 --- /dev/null +++ b/test/providers/completionProvider.test.ts @@ -0,0 +1,388 @@ +import { expect } from "chai"; +import { Position } from "vscode-languageserver"; +import { doCompletion } from "../../src/providers/completionProvider"; +import {} from "../../src/providers/validationProvider"; +import { + createTestWorkspaceManager, + getDoc, + setFixtureAnsibleCollectionPathEnv, + smartFilter, +} from "../helper"; + +setFixtureAnsibleCollectionPathEnv(); + +describe("doCompletion()", () => { + const workspaceManager = createTestWorkspaceManager(); + + describe("Completion for play keywords", () => { + const tests = [ + { + name: "name", + position: { line: 0, character: 2 } as Position, + triggerCharacter: "", + completion: "name", + }, + { + name: "hosts", + position: { line: 2, character: 5 } as Position, + triggerCharacter: "hos", + completion: "hosts", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const textDoc = await getDoc("completion/simple_tasks.yml"); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + // filteredCompletion.forEach((item) => { + // item.item ? console.log(item.item.label) : console.log(item.label); + // }); + // console.log("\n"); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); + }); + + describe("Completion for role keywords", () => { + const tests = [ + { + name: "name", + position: { line: 4, character: 6 } as Position, + triggerCharacter: "", + completion: "name", + }, + { + name: "when", + position: { line: 5, character: 8 } as Position, + triggerCharacter: "wh", + completion: "when", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const textDoc = await getDoc("completion/with_roles.yml"); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); + }); + + describe("Completion for block keywords", () => { + const tests = [ + { + name: "become_user", + position: { line: 8, character: 13 } as Position, + triggerCharacter: "user", + completion: "become_user", + }, + { + name: "become", + position: { line: 7, character: 8 } as Position, + triggerCharacter: "be", + completion: "become", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const textDoc = await getDoc("completion/with_blocks.yml"); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); + }); + + describe("Completion for task keywords", () => { + const tests = [ + { + name: "loop", + position: { line: 10, character: 9 } as Position, + triggerCharacter: "loop", + completion: "loop", + }, + { + name: "debugger", + position: { line: 13, character: 9 } as Position, + triggerCharacter: "deb", + completion: "debugger", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const textDoc = await getDoc("completion/simple_tasks.yml"); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); + }); + describe("Completion for module names (with different trigger scenarios)", () => { + const tests = [ + { + name: "with name as first option always", + position: { line: 6, character: 6 } as Position, + triggerCharacter: "", + completion: "name", + }, + { + name: "for `ansible.builtin.ping` with `ping`", + position: { line: 7, character: 8 } as Position, + triggerCharacter: "ping", + completion: "ansible.builtin.ping", + }, + { + name: "for `ansible.builtin.debug` with `debu`", // cspell: ignore debu + position: { line: 7, character: 8 } as Position, + triggerCharacter: "debu", + completion: "ansible.builtin.debug", + }, + { + name: "list for all modules under ansible namespace with `ansible.`", + position: { line: 7, character: 8 } as Position, + triggerCharacter: "ansible.", + completion: "ansible.", + }, + { + name: "list for all the modules under ansible.builtin with `ansible.builtin.`", + position: { line: 7, character: 8 } as Position, + triggerCharacter: "ansible.builtin.", + completion: "ansible.builtin.", + }, + { + name: "list for all the collection modules starting with `c` under org_1 namespace with `org_1.c`", + position: { line: 16, character: 13 } as Position, + triggerCharacter: "org_1.c", + completion: "org_1.c", + }, + { + name: "list for all the modules under coll_4 in org_1 with `org_1.coll_4.`", + position: { line: 16, character: 19 } as Position, + triggerCharacter: "org_1.coll_4.", + completion: "org_1.coll_4.", + }, + { + name: "list for all the modules that contain `cli_` in their name with `cli_`", + position: { line: 32, character: 6 } as Position, + triggerCharacter: "cli_", + completion: "cli_", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide autocompletion ${name}`, async function () { + const textDoc = await getDoc("completion/simple_tasks.yml"); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).to.contain(completion); + } else { + expect(filteredCompletion[0].item.label).to.contain(completion); + } + } + }); + }); + }); + + describe("Completion for module options and suboptions", () => { + const tests = [ + { + name: "builtin module option (ansible.builtin.debug -> msg)", + position: { line: 8, character: 9 } as Position, + triggerCharacter: "m", + completion: "msg", + }, + { + name: "collection module option (org_1.coll_4.module_1 -> opt_1)", + position: { line: 17, character: 8 } as Position, + triggerCharacter: "", + completion: "opt_1", + }, + { + name: "collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_1)", + position: { line: 21, character: 12 } as Position, + triggerCharacter: "1", + completion: "sub_opt_1", + }, + { + name: "collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_2 -> sub_sub_opt_3 -> sub_sub_sub_opt_2)", + position: { line: 26, character: 20 } as Position, + triggerCharacter: "2", + completion: "sub_sub_sub_opt_2", + }, + { + name: "only non repeating options", + position: { line: 9, character: 9 } as Position, + triggerCharacter: "m", + completion: "", + }, + { + name: "only non repeating suboptions", + position: { line: 29, character: 20 } as Position, + triggerCharacter: "1", + completion: "", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const textDoc = await getDoc("completion/simple_tasks.yml"); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); + }); + + describe("Completion for module name without FQCN", () => { + const tests = [ + { + name: "`ping` with `pin` (ansible.builtin.ping)", + position: { line: 7, character: 9 } as Position, + triggerCharacter: "pin", + completion: "ping", + }, + { + name: "module option for ping (ping -> data)", + position: { line: 8, character: 8 } as Position, + triggerCharacter: "", + completion: "data", + }, + { + name: "`module_3` from `org_1.coll_3` with `module_3` (org_1.coll_3.module_3)", + position: { line: 11, character: 14 } as Position, + triggerCharacter: "module_3", + completion: "module_3", + }, + { + name: "module sub option for module_3 (org_1.coll_3.module_3 -> opt_1 -> sub_opt_2)", + position: { line: 13, character: 13 } as Position, + triggerCharacter: "2", + completion: "sub_opt_2", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const textDoc = await getDoc("completion/tasks_without_fqcn.yml"); + const context = workspaceManager.getContext(textDoc.uri); + + // Update setting to stop using FQCN for module names + const docSettings = context.documentSettings.get(textDoc.uri); + const cachedDefaultSetting = (await docSettings).ansibleLint.enabled; + (await docSettings).ansible.useFullyQualifiedCollectionNames = false; + + const actualCompletion = await doCompletion(textDoc, position, context); + + // Revert back the default settings + (await docSettings).ansible.useFullyQualifiedCollectionNames = + cachedDefaultSetting; + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); + }); +}); From cd8fe474285720f9c6754b5b37423d8087eb5249 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 22 Mar 2022 12:00:20 +0000 Subject: [PATCH 308/558] Publish vsix artifact (#274) --- .github/workflows/vscode.yml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/workflows/vscode.yml b/.github/workflows/vscode.yml index 96f703123..82a0cf209 100644 --- a/.github/workflows/vscode.yml +++ b/.github/workflows/vscode.yml @@ -42,11 +42,21 @@ jobs: npm ls # npm install --save ../ansible-language-server npm run package + # we need to bring vsix artifact inside workspace + cp *.vsix ../ansible-language-server/ - - name: >- - Run test-ui with vscode-ansible + - name: Publish vsix artifact + if: ${{ github.event.number }} + uses: actions/upload-artifact@v3 + with: + name: ansible-extension-from-pr-${{ github.event.number }}.vsix + # this action cannot archive artifacts from outside workspace "../" + # https://github.com/actions/upload-artifact/issues/246 + path: ansible-*.vsix + retention-days: 15 + + - name: Run test-ui with vscode-ansible uses: GabrielBB/xvfb-action@v1 with: - run: >- - npm run test-ui + run: sh -c "npm run test-ui && cp *.vsix ../ansible-language-server/" working-directory: ../vscode-ansible From 2de15bba7c015584b5e910fc30e15feae72b6358 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo Date: Wed, 23 Mar 2022 19:21:30 +0530 Subject: [PATCH 309/558] remove duplication of smartFilter() function --- test/helper.ts | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/test/helper.ts b/test/helper.ts index 3e35790c8..47719c8b6 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -31,34 +31,6 @@ export function isWindows(): boolean { return process.platform === "win32"; } -export function smartFilter(completionList, triggerCharacter) { - completionList.sort((a, b) => a.sortText.localeCompare(b.sortText)); - - const searcher = new Fuse(completionList, { - keys: ["filterText"], - threshold: 0.6, - refIndex: false, - }); - - let filteredCompletionList = triggerCharacter - ? searcher.search(triggerCharacter).slice(0, 5) - : completionList.slice(0, 5); - - if (filteredCompletionList.length === 0) { - const newSearcher = new Fuse(completionList, { - keys: ["label"], - threshold: 0.2, - refIndex: false, - }); - - filteredCompletionList = triggerCharacter - ? newSearcher.search(triggerCharacter).slice(0, 5) - : completionList.slice(0, 5); - } - - return filteredCompletionList; -} - /** * A function that tries to imitate the filtering of the completion items done in the respective client extension * when the user starts typing against the provided auto-completions From 4861a9ae434c74877583056d5c8cf6e20f0995c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Thu, 24 Mar 2022 19:31:11 +0100 Subject: [PATCH 310/558] Fix globby import statement --- src/utils/docsFinder.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/utils/docsFinder.ts b/src/utils/docsFinder.ts index 20196f63c..ff282d865 100644 --- a/src/utils/docsFinder.ts +++ b/src/utils/docsFinder.ts @@ -1,7 +1,6 @@ import * as fs from "fs"; import * as path from "path"; import { parseDocument } from "yaml"; -import { globby } from "globby"; import { LazyModuleDocumentation, parseRawRouting } from "./docsParser"; import { IModuleMetadata } from "../interfaces/module"; import { @@ -20,6 +19,7 @@ export async function findDocumentation( if (!fs.existsSync(dir) || fs.lstatSync(dir).isFile()) { return []; } + const globby = await getGlobby(); let files; switch (kind) { case "builtin": @@ -80,6 +80,7 @@ export async function findPluginRouting( if (!fs.existsSync(dir) || fs.lstatSync(dir).isFile()) { return pluginRouting; } + const globby = await getGlobby(); let files; switch (kind) { case "builtin": @@ -111,3 +112,11 @@ export async function findPluginRouting( return pluginRouting; } + +async function getGlobby() { + return ( + await (Function('return import("globby")')() as Promise< + typeof import("globby") + >) + ).globby; +} From 041b114f4793c24f8d6eba3e6ca2fda0a36c5cda Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Mar 2022 09:41:12 +0000 Subject: [PATCH 311/558] Bump minimist from 1.2.5 to 1.2.6 Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6557457cf..52286332a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3720,9 +3720,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/minipass": { @@ -8887,9 +8887,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "minipass": { From 225dbbc0d6edef9ef302d932df6ea5327ba67851 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Mar 2022 14:32:24 +0000 Subject: [PATCH 312/558] Bump click from 8.0.4 to 8.1.0 Bumps [click](https://github.com/pallets/click) from 8.0.4 to 8.1.0. - [Release notes](https://github.com/pallets/click/releases) - [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/click/compare/8.0.4...8.1.0) --- updated-dependencies: - dependency-name: click dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- docs/requirements.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 099bc8d85..3ea901fc4 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -16,7 +16,7 @@ certifi==2021.10.8 # via requests charset-normalizer==2.0.8 # via requests -click==8.0.4 +click==8.1.0 # via towncrier click-default-group==1.2.2 # via towncrier diff --git a/requirements.txt b/requirements.txt index 0e59195db..e72e8b833 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ # pip-compile --no-annotate --output-file=requirements.txt requirements.in # cfgv==3.3.1 -click==8.0.4 +click==8.1.0 distlib==0.3.4 filelock==3.6.0 identify==2.4.11 From 85ebefc2b7465abb9deb6aaa74daa3f73809a674 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Thu, 31 Mar 2022 10:20:45 +0530 Subject: [PATCH 313/558] Fix EE auto-completion not working issue (#279) * Fix EE auto-completion not working issue * Currently fetch plugin from EE requires ansibleConfig service to be invoked to identify the path within EE that contains ansible plugins * Also docLibrary service invokes ansibleConfig service thus duplicating the call * The PR refactors the code to invoke fetching EE plugin docs from within docsLibrary service and thus avoiding multiple async invocation of ansibleConfig service * add changelog * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/changelog-fragments.d/279.bugfix.md | 4 ++++ src/services/docsLibrary.ts | 3 ++- src/services/executionEnvironment.ts | 5 ++--- 3 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 docs/changelog-fragments.d/279.bugfix.md diff --git a/docs/changelog-fragments.d/279.bugfix.md b/docs/changelog-fragments.d/279.bugfix.md new file mode 100644 index 000000000..f0962ac1b --- /dev/null +++ b/docs/changelog-fragments.d/279.bugfix.md @@ -0,0 +1,4 @@ +```md +Fix auto-completion and hover not working with execution environment issue. -- +by {user}`ganeshrn` +``` diff --git a/src/services/docsLibrary.ts b/src/services/docsLibrary.ts index 4f4eb4856..b521dcffc 100644 --- a/src/services/docsLibrary.ts +++ b/src/services/docsLibrary.ts @@ -37,7 +37,8 @@ export class DocsLibrary { const ansibleConfig = await this.context.ansibleConfig; if (settings.executionEnvironment.enabled) { // ensure plugin/module cache is established - await this.context.executionEnvironment; + const executionEnvironment = await this.context.executionEnvironment; + await executionEnvironment.fetchPluginDocs(ansibleConfig); } for (const modulesPath of ansibleConfig.module_locations) { (await findDocumentation(modulesPath, "builtin")).forEach((doc) => { diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 74fd92afa..9683224b6 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -4,6 +4,7 @@ import * as path from "path"; import { URI } from "vscode-uri"; import { Connection } from "vscode-languageserver"; import { v4 as uuidv4 } from "uuid"; +import { AnsibleConfig } from "./ansibleConfig"; import { ImagePuller } from "../utils/imagePuller"; import { asyncExec } from "../utils/misc"; import { WorkspaceFolderContext } from "./workspaceManager"; @@ -82,7 +83,6 @@ export class ExecutionEnvironment { ); return; } - await this.fetchPluginDocs(); } catch (error) { if (error instanceof Error) { this.connection.window.showErrorMessage(error.message); @@ -94,8 +94,7 @@ export class ExecutionEnvironment { } } - async fetchPluginDocs(): Promise { - const ansibleConfig = await this.context.ansibleConfig; + async fetchPluginDocs(ansibleConfig: AnsibleConfig): Promise { const containerName = `${this._container_image.replace( /[^a-z0-9]/gi, "_" From df45a1a18ae35bb53e298f6d294ecdcb313b7265 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Thu, 31 Mar 2022 10:35:07 +0530 Subject: [PATCH 314/558] Resolve completion of module options and sub options based on their type (#276) * provide '-' when option or suboption is a list * replace double quotes with single quotes after latest merge * add logic for appropriate resolution of module options and suboptions based on their types * add double tabs on resolution of dict to avoid wrong autocompletion if the first element of the list is dict * add basic structure for doResolveCompletion test * update quotations * remove ':' after option name when not found at end of line while resolution * add test fixture of doCompletionResolve() tests * update tests for doCompletionResolve() * add type for parameter in resolveSuffix function * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix linting * add change note * add ability to give default insertText when 'type' is not present for module options * add utility function to add data if an option or module name is the first element of list or not * call resolveSuffix for module name by sending type as 'dict' for them * update test script and fixture with latest changes in doCompletionResolve() Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Ganesh Nalawade --- docs/changelog-fragments.d/276.feature.md | 2 + src/providers/completionProvider.ts | 80 ++++++- .../completion/resolve_completion.yml | 24 ++ test/providers/completionResolver.test.ts | 222 ++++++++++++++++++ 4 files changed, 324 insertions(+), 4 deletions(-) create mode 100644 docs/changelog-fragments.d/276.feature.md create mode 100644 test/fixtures/completion/resolve_completion.yml create mode 100644 test/providers/completionResolver.test.ts diff --git a/docs/changelog-fragments.d/276.feature.md b/docs/changelog-fragments.d/276.feature.md new file mode 100644 index 000000000..79eeec219 --- /dev/null +++ b/docs/changelog-fragments.d/276.feature.md @@ -0,0 +1,2 @@ +Implemented type based resolution for module options and sub-options completion +-- by {user}`priyamsahoo` diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index affd8d85e..10d2592e3 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -1,3 +1,4 @@ +import { EOL } from "os"; import { CompletionItem, CompletionItemKind, @@ -118,6 +119,7 @@ export async function doCompletion( const inlineCollections = getDeclaredCollections(path); const cursorAtEndOfLine = atEndOfLine(document, position); + let textEdit: TextEdit | undefined; const nodeRange = getNodeRange(node, document); if (nodeRange) { @@ -126,6 +128,10 @@ export async function doCompletion( newText: "", // placeholder }; } + const cursorAtFirstElementOfList = firstElementOfList( + document, + nodeRange + ); // offer modules const moduleCompletionItems = [...docsLibrary.moduleFqcns].map( @@ -154,6 +160,7 @@ export async function doCompletion( moduleFqcn: moduleFqcn, inlineCollections: inlineCollections, atEndOfLine: cursorAtEndOfLine, + firstElementOfList: cursorAtFirstElementOfList, }, textEdit: textEdit, }; @@ -185,6 +192,13 @@ export async function doCompletion( const nodeRange = getNodeRange(node, document); + const cursorAtFirstElementOfList = firstElementOfList( + document, + nodeRange + ); + + const cursorAtEndOfLine = atEndOfLine(document, position); + return remainingOptions .map(([option, specs]) => { return { @@ -213,9 +227,13 @@ export async function doCompletion( ? CompletionItemKind.Reference : CompletionItemKind.Property, documentation: formatOption(option.specs), - insertText: atEndOfLine(document, position) - ? `${option.name}:` - : undefined, + data: { + documentUri: document.uri, // preserve document URI for completion request + type: option.specs.type, + range: nodeRange, + atEndOfLine: cursorAtEndOfLine, + firstElementOfList: cursorAtFirstElementOfList, + }, }; const insertText = atEndOfLine(document, position) ? `${option.name}:` @@ -342,7 +360,10 @@ export async function doCompletionResolve( const insertName = useFqcn ? completionItem.data.moduleFqcn : name; const insertText = completionItem.data.atEndOfLine - ? `${insertName}:` + ? `${insertName}:${resolveSuffix( + "dict", // since a module is always a dictionary + completionItem.data.firstElementOfList + )}` : insertName; if (completionItem.textEdit) { @@ -357,6 +378,23 @@ export async function doCompletionResolve( ); } } + + if (completionItem.data?.type) { + // resolve completion for a module option or sub-option + + const insertText = completionItem.data.atEndOfLine + ? `${completionItem.label}:${resolveSuffix( + completionItem.data.type, + completionItem.data.firstElementOfList + )}` + : `${completionItem.label}`; + + if (completionItem.textEdit) { + completionItem.textEdit.newText = insertText; + } else { + completionItem.insertText = insertText; + } + } return completionItem; } @@ -370,3 +408,37 @@ function atEndOfLine(document: TextDocument, position: Position): boolean { ]; return charAfterCursor === "\n" || charAfterCursor === "\r"; } + +/** + * A utility function to check if the item is the first element of a list or not + * @param document current document + * @param nodeRange range of the keyword in the document + * @returns {boolean} true if the key is the first element of the list, else false + */ +function firstElementOfList(document: TextDocument, nodeRange: Range): boolean { + const checkNodeRange = { + start: { line: nodeRange.start.line, character: 0 }, + end: nodeRange.start, + }; + const elementsBeforeKey = document.getText(checkNodeRange).trim(); + + return elementsBeforeKey === "-"; +} + +function resolveSuffix(optionType: string, firstElementOfList: boolean) { + let returnSuffix: string; + + switch (optionType) { + case "list": + returnSuffix = firstElementOfList ? `${EOL}\t\t- ` : `${EOL}\t- `; + break; + case "dict": + returnSuffix = firstElementOfList ? `${EOL}\t\t` : `${EOL}\t`; + break; + default: + returnSuffix = " "; + break; + } + + return returnSuffix; +} diff --git a/test/fixtures/completion/resolve_completion.yml b/test/fixtures/completion/resolve_completion.yml new file mode 100644 index 000000000..e69c8ff16 --- /dev/null +++ b/test/fixtures/completion/resolve_completion.yml @@ -0,0 +1,24 @@ +- name: Test playbook + gather_facts: false + hosts: localhost + collections: + - org_1.coll_3 + tasks: + - name: Builtin module + ansible.builtin.debug: + msg: "Hello World {{ item }}" + + - module_3: + opt_1: + - sub_opt_1: Hello-world + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + + org_1.coll_1.module_1: + opt_1: + - sub_opt_1: Hello-world-2 diff --git a/test/providers/completionResolver.test.ts b/test/providers/completionResolver.test.ts new file mode 100644 index 000000000..e63bcbed4 --- /dev/null +++ b/test/providers/completionResolver.test.ts @@ -0,0 +1,222 @@ +/** + * This is the test file for `doCompletionResolve()` function in the completion provider. + * `doCompletionResolve()` is called to resolve the selected completion item. + */ + +import { expect } from "chai"; +import { EOL } from "os"; +import { doCompletionResolve } from "../../src/providers/completionProvider"; +import {} from "../../src/providers/validationProvider"; +import { + createTestWorkspaceManager, + getDoc, + setFixtureAnsibleCollectionPathEnv, +} from "../helper"; + +setFixtureAnsibleCollectionPathEnv(); + +describe("doCompletionResolve()", () => { + const workspaceManager = createTestWorkspaceManager(); + + describe("Resolve completion for module names", () => { + describe("With useFQCN enabled", () => { + const tests = [ + { + name: "module name with full FQCN", + completionItem: { + label: "module_3", + data: { + documentUri: "dummy/url/for/resolve_completion.yml", + moduleFqcn: "org_1.coll_3.module_3", + inlineCollections: ["org_1.coll_3", "ansible.builtin"], + atEndOfLine: true, + firstElementOfList: false, + }, + }, + completionText: "org_1.coll_3.module_3", + }, + ]; + + tests.forEach(({ name, completionItem, completionText }) => { + it(`should resolve completion for ${name}`, async function () { + const textDoc = await getDoc("completion/resolve_completion.yml"); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletionResolveAtLineEnd = await doCompletionResolve( + completionItem, + context + ); + + expect(actualCompletionResolveAtLineEnd.insertText).be.equal( + `${completionText}:${EOL}\t` + ); + + // Check for completion resolution when asked in between of lines + completionItem.data.atEndOfLine = false; + const actualCompletionResolveAtInBetween = await doCompletionResolve( + completionItem, + context + ); + + expect(actualCompletionResolveAtInBetween.insertText).be.equal( + `${completionText}` + ); + }); + }); + }); + + describe("With useFQCN disabled", () => { + const tests = [ + { + name: "module name with short name since it is present in declared collections in playbook", + completionItem: { + label: "module_3", + data: { + documentUri: "dummy/uri/for/resolve_completion.yml", + moduleFqcn: "org_1.coll_3.module_3", + inlineCollections: ["org_1.coll_3", "ansible.builtin"], + atEndOfLine: true, + firstElementOfList: false, + }, + }, + completionText: "module_3", + }, + { + name: "module name with full FQCN since it is not present in declared collections in playbook", + completionItem: { + label: "module_1", + data: { + documentUri: "dummy/uri/for/resolve_completion.yml", + moduleFqcn: "org_1.coll_1.module_1", + inlineCollections: ["org_1.coll_3", "ansible.builtin"], + atEndOfLine: true, + firstElementOfList: false, + }, + }, + completionText: "org_1.coll_1.module_1", + }, + ]; + + tests.forEach(({ name, completionItem, completionText }) => { + it(`should resolve completion for ${name}`, async function () { + const textDoc = await getDoc("completion/resolve_completion.yml"); + const context = workspaceManager.getContext(textDoc.uri); + + // Update setting to stop using FQCN for module names + const docSettings = context.documentSettings.get(textDoc.uri); + const cachedDefaultSetting = (await docSettings).ansibleLint.enabled; + (await docSettings).ansible.useFullyQualifiedCollectionNames = false; + + const actualCompletionResolveAtLineEnd = await doCompletionResolve( + completionItem, + context + ); + + expect(actualCompletionResolveAtLineEnd.insertText).be.equal( + `${completionText}:${EOL}\t` + ); + + // Check for completion resolution when asked in between of lines + completionItem.data.atEndOfLine = false; + const actualCompletionResolveAtInBetween = await doCompletionResolve( + completionItem, + context + ); + + expect(actualCompletionResolveAtInBetween.insertText).be.equal( + `${completionText}` + ); + + // Revert back the default settings + (await docSettings).ansible.useFullyQualifiedCollectionNames = + cachedDefaultSetting; + }); + }); + }); + }); + + describe("Resolve completion for module options and suboptions", () => { + const tests = [ + { + name: "option expecting dictionary with `option: ${EOL}\\t\\t`", + completionItem: { + label: "opt_1", + data: { + documentUri: "dummy/uri/for/resolve_completion.yml", + type: "dict", + atEndOfLine: true, + firstElementOfList: true, + }, + }, + completionText: "opt_1", + }, + { + name: "sub option expecting list with `sub_option: ${EOL}\\t- `", + completionItem: { + label: "sub_opt_2", + data: { + documentUri: "dummy/uri/for/resolve_completion.yml", + type: "list", + atEndOfLine: true, + }, + }, + completionText: "sub_opt_2", + }, + { + name: "sub option expecting string or number or boolean with `sub_option: `", + completionItem: { + label: "sub_opt_1", + data: { + documentUri: "dummy/uri/for/resolve_completion.yml", + type: "string", + atEndOfLine: true, + }, + }, + completionText: "sub_opt_1", + }, + ]; + + tests.forEach(({ name, completionItem, completionText }) => { + it(`should resolve completion for ${name}`, async function () { + const textDoc = await getDoc("completion/resolve_completion.yml"); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletionResolveAtLineEnd = await doCompletionResolve( + completionItem, + context + ); + + let returnSuffix: string; + switch (completionItem.data.type) { + case "list": + returnSuffix = completionItem.data.firstElementOfList + ? `${EOL}\t\t- ` + : `${EOL}\t- `; + break; + case "dict": + returnSuffix = completionItem.data.firstElementOfList + ? `${EOL}\t\t` + : `${EOL}\t`; + break; + default: + returnSuffix = " "; + break; + } + expect(actualCompletionResolveAtLineEnd.insertText).be.equal( + `${completionText}:${returnSuffix}` + ); + + // Check for completion resolution when asked in between of lines + completionItem.data.atEndOfLine = false; + const actualCompletionResolveAtInBetween = await doCompletionResolve( + completionItem, + context + ); + + expect(actualCompletionResolveAtInBetween.insertText).be.equal( + `${completionText}` + ); + }); + }); + }); +}); From aa5151f7e0c08974bacb3f54d06ca2c3b57647d0 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 31 Mar 2022 10:26:23 +0100 Subject: [PATCH 315/558] Add ansible-lint to test requirements lockfile (#272) --- .config/dictionary.txt | 1 + .github/dependabot.yml | 6 +++++- .github/workflows/ci.yml | 2 +- requirements.in | 1 + requirements.txt | 24 ++++++++++++++++++++++++ tox.ini | 4 +++- 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index dfa9ff0ff..3aa94ba7f 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -12,6 +12,7 @@ codeclimate codecov commitish commitlint +compat customizer deps devel diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 303198d43..80cfcde7d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -12,8 +12,12 @@ updates: open-pull-requests-limit: 3 allow: # tell dependabot to update only important dependencies, not indirect ones - - dependency-name: pre-commit + - dependency-name: ansible-compat + - dependency-name: ansible-core + - dependency-name: ansible-lint - dependency-name: click - dependency-name: lxml - dependency-name: pre-commit - dependency-name: pyparsing + - dependency-name: subprocess-tee + - dependency-name: yamllint diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7061ae3bc..7168741dc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -508,7 +508,7 @@ jobs: - name: Install test dependencies run: | python -m pip install --user --upgrade pip - python -m pip install --user ansible-core ansible-lint + PIP_CONSTRAINTS=requirements.txt python -m pip install --user ansible-core ansible-lint echo "$HOME/.local/bin" >> $GITHUB_PATH # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#adding-a-system-path npm ci diff --git a/requirements.in b/requirements.in index 3c3e75ed6..2413b1589 100644 --- a/requirements.in +++ b/requirements.in @@ -1,3 +1,4 @@ +ansible-lint>=6.0.2 click lxml pre-commit diff --git a/requirements.txt b/requirements.txt index e72e8b833..75dc88c6c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,17 +4,41 @@ # # pip-compile --no-annotate --output-file=requirements.txt requirements.in # +ansible-compat==2.0.2 +ansible-core==2.12.3 +ansible-lint==6.0.2 +bracex==2.2.1 +cffi==1.15.0 cfgv==3.3.1 click==8.1.0 +commonmark==0.9.1 +cryptography==36.0.2 distlib==0.3.4 +enrich==1.2.7 filelock==3.6.0 identify==2.4.11 +jinja2==3.0.3 lxml==4.8.0 +markupsafe==2.1.1 nodeenv==1.6.0 +packaging==21.3 +pathspec==0.9.0 platformdirs==2.5.1 pre-commit==2.17.0 +pycparser==2.21 +pygments==2.11.2 pyparsing==3.0.7 pyyaml==6.0 +resolvelib==0.5.4 +rich==12.0.0 +ruamel-yaml==0.17.21 +ruamel-yaml-clib==0.2.6 six==1.16.0 +subprocess-tee==0.3.5 toml==0.10.2 virtualenv==20.13.3 +wcmatch==8.3 +yamllint==1.26.3 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/tox.ini b/tox.ini index 21200b4d1..2560e07d9 100644 --- a/tox.ini +++ b/tox.ini @@ -67,7 +67,9 @@ deps = commands = # dependabot supports only 'requirements.txt' filename but we use it as # a constraints files - bash -c "PIP_CONSTRAINTS= pip-compile -q --no-annotate -r requirements.in -o requirements.txt" + bash -c "PIP_CONSTRAINTS= pip-compile -q --no-annotate \ + -r requirements.in \ + -o requirements.txt" [testenv:docs] allowlist_externals = From 771787300c12fa36838dd717bfd4c971fc12138f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Mar 2022 10:35:58 +0100 Subject: [PATCH 316/558] Bump click from 8.1.0 to 8.1.1 (#281) Bumps [click](https://github.com/pallets/click) from 8.1.0 to 8.1.1. - [Release notes](https://github.com/pallets/click/releases) - [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/click/compare/8.1.0...8.1.1) --- updated-dependencies: - dependency-name: click dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/requirements.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 3ea901fc4..e5be49137 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -16,7 +16,7 @@ certifi==2021.10.8 # via requests charset-normalizer==2.0.8 # via requests -click==8.1.0 +click==8.1.1 # via towncrier click-default-group==1.2.2 # via towncrier diff --git a/requirements.txt b/requirements.txt index 75dc88c6c..0711d5d7a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,7 @@ ansible-lint==6.0.2 bracex==2.2.1 cffi==1.15.0 cfgv==3.3.1 -click==8.1.0 +click==8.1.1 commonmark==0.9.1 cryptography==36.0.2 distlib==0.3.4 From 64c43ec806892f9fe40dd1e529ae091ba9fbfd13 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Mar 2022 10:36:22 +0100 Subject: [PATCH 317/558] Bump ansible-core from 2.12.3 to 2.12.4 (#282) Bumps [ansible-core](https://github.com/ansible/ansible) from 2.12.3 to 2.12.4. - [Release notes](https://github.com/ansible/ansible/releases) - [Commits](https://github.com/ansible/ansible/compare/v2.12.3...v2.12.4) --- updated-dependencies: - dependency-name: ansible-core dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 0711d5d7a..2e7742df8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ # pip-compile --no-annotate --output-file=requirements.txt requirements.in # ansible-compat==2.0.2 -ansible-core==2.12.3 +ansible-core==2.12.4 ansible-lint==6.0.2 bracex==2.2.1 cffi==1.15.0 From 3c049b71e38b515bba9e1c01c23aa476799cc437 Mon Sep 17 00:00:00 2001 From: yaegassy Date: Fri, 1 Apr 2022 19:47:40 +0900 Subject: [PATCH 318/558] fix: add insertTextFormat to completionItem --- src/providers/completionProvider.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index 10d2592e3..39729b984 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -2,6 +2,7 @@ import { EOL } from "os"; import { CompletionItem, CompletionItemKind, + InsertTextFormat, MarkupContent, Range, TextEdit, @@ -368,8 +369,10 @@ export async function doCompletionResolve( if (completionItem.textEdit) { completionItem.textEdit.newText = insertText; + completionItem.insertTextFormat = InsertTextFormat.Snippet; } else { completionItem.insertText = insertText; + completionItem.insertTextFormat = InsertTextFormat.PlainText; } completionItem.documentation = formatModule( From b99b97790f092d7442650ea7ae1665d72928b02f Mon Sep 17 00:00:00 2001 From: yaegassy Date: Fri, 1 Apr 2022 21:43:50 +0900 Subject: [PATCH 319/558] chore: add change note (285) --- docs/changelog-fragments.d/285.bugfix.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/changelog-fragments.d/285.bugfix.md diff --git a/docs/changelog-fragments.d/285.bugfix.md b/docs/changelog-fragments.d/285.bugfix.md new file mode 100644 index 000000000..2654e3e85 --- /dev/null +++ b/docs/changelog-fragments.d/285.bugfix.md @@ -0,0 +1 @@ +Fixed indentation issue which resolving auto-completion items to support editors like vim and neovim -- by {user}`yaegassy` From 29e51b0a9e1408c9b5f795f3e7ee8cee87bb5028 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 1 Apr 2022 12:45:38 +0000 Subject: [PATCH 320/558] chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/changelog-fragments.d/285.bugfix.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/changelog-fragments.d/285.bugfix.md b/docs/changelog-fragments.d/285.bugfix.md index 2654e3e85..20eae76cf 100644 --- a/docs/changelog-fragments.d/285.bugfix.md +++ b/docs/changelog-fragments.d/285.bugfix.md @@ -1 +1,2 @@ -Fixed indentation issue which resolving auto-completion items to support editors like vim and neovim -- by {user}`yaegassy` +Fixed indentation issue which resolving auto-completion items to support editors +like vim and neovim -- by {user}`yaegassy` From 3edec674cdc0e2a9aa21b938e4c711aae870b048 Mon Sep 17 00:00:00 2001 From: yaegassy Date: Fri, 1 Apr 2022 21:57:50 +0900 Subject: [PATCH 321/558] fix: add change note (285) --- docs/changelog-fragments.d/285.bugfix.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/changelog-fragments.d/285.bugfix.md b/docs/changelog-fragments.d/285.bugfix.md index 20eae76cf..ceeabdc26 100644 --- a/docs/changelog-fragments.d/285.bugfix.md +++ b/docs/changelog-fragments.d/285.bugfix.md @@ -1,2 +1 @@ -Fixed indentation issue which resolving auto-completion items to support editors -like vim and neovim -- by {user}`yaegassy` +Fixed indentation issue while resolving auto-completion items to support editors like vim and neovim -- by {user}`yaegassy` From 445b5580a9dca8bad99b9f247184dab9a9be6039 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 1 Apr 2022 12:58:26 +0000 Subject: [PATCH 322/558] chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/changelog-fragments.d/285.bugfix.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/changelog-fragments.d/285.bugfix.md b/docs/changelog-fragments.d/285.bugfix.md index ceeabdc26..e2e166082 100644 --- a/docs/changelog-fragments.d/285.bugfix.md +++ b/docs/changelog-fragments.d/285.bugfix.md @@ -1 +1,2 @@ -Fixed indentation issue while resolving auto-completion items to support editors like vim and neovim -- by {user}`yaegassy` +Fixed indentation issue while resolving auto-completion items to support editors +like vim and neovim -- by {user}`yaegassy` From 33c358b3162b1d08a5227907a367c8d8254c15d3 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Fri, 1 Apr 2022 18:32:06 +0530 Subject: [PATCH 323/558] Add neovim to dictionary (#286) --- .config/dictionary.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 3aa94ba7f..9820f6cee 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -42,6 +42,7 @@ monospace mycollection mymodule mynamespace +neovim netcommon nocolor notest From 3e45bd2d790e9806914b704c955b403b54738119 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 4 Apr 2022 06:17:39 +0000 Subject: [PATCH 324/558] Bump version to v0.5.4 (#283) * Generate a changelog entry for v0.5.4 * Release 0.5.4 from GitHub Actions CI/CD * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- CHANGELOG.md | 18 ++++++++++++++++++ docs/changelog-fragments.d/276.feature.md | 2 -- docs/changelog-fragments.d/279.bugfix.md | 4 ---- package-lock.json | 4 ++-- package.json | 2 +- 5 files changed, 21 insertions(+), 9 deletions(-) delete mode 100644 docs/changelog-fragments.d/276.feature.md delete mode 100644 docs/changelog-fragments.d/279.bugfix.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e5ed4415..b298bc19d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,24 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag +## v0.5.4 (2022-03-31) + +### Bugfixes + +- ```md + Fix auto-completion and hover not working with execution environment issue. -- + by {user}`ganeshrn` + ``` + + ({issue}`279`) + +### Features + +- Implemented type based resolution for module options and sub-options + completion -- by {user}`priyamsahoo` + + ({issue}`276`) + ## v0.5.3 (2022-03-16) ### Bugfixes diff --git a/docs/changelog-fragments.d/276.feature.md b/docs/changelog-fragments.d/276.feature.md deleted file mode 100644 index 79eeec219..000000000 --- a/docs/changelog-fragments.d/276.feature.md +++ /dev/null @@ -1,2 +0,0 @@ -Implemented type based resolution for module options and sub-options completion --- by {user}`priyamsahoo` diff --git a/docs/changelog-fragments.d/279.bugfix.md b/docs/changelog-fragments.d/279.bugfix.md deleted file mode 100644 index f0962ac1b..000000000 --- a/docs/changelog-fragments.d/279.bugfix.md +++ /dev/null @@ -1,4 +0,0 @@ -```md -Fix auto-completion and hover not working with execution environment issue. -- -by {user}`ganeshrn` -``` diff --git a/package-lock.json b/package-lock.json index 52286332a..2156a7b8a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.5.3", + "version": "0.5.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.5.3", + "version": "0.5.4", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index b4f7895b0..5a091033f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.5.3", + "version": "0.5.4", "contributors": [ { "name": "Tomasz Maciążek", From bab8ec762b557692b3e52778c9751b1c047a9068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Maci=C4=85=C5=BCek?= Date: Mon, 4 Apr 2022 18:10:38 +0200 Subject: [PATCH 325/558] Autocomplete option and suboption choices (#288) * Autocomplete option and suboption choices * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix tests & add more * Fix tests * Add changelog fragment * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Ganesh Nalawade --- docs/changelog-fragments.d/288.feature.md | 2 + src/providers/completionProvider.ts | 77 ++++++++++++++++++- .../org_1/coll_4/plugins/modules/module_1.py | 6 +- test/fixtures/completion/simple_tasks.yml | 6 +- test/providers/completionProvider.test.ts | 63 ++++++++++++++- 5 files changed, 149 insertions(+), 5 deletions(-) create mode 100644 docs/changelog-fragments.d/288.feature.md diff --git a/docs/changelog-fragments.d/288.feature.md b/docs/changelog-fragments.d/288.feature.md new file mode 100644 index 000000000..5b37f6496 --- /dev/null +++ b/docs/changelog-fragments.d/288.feature.md @@ -0,0 +1,2 @@ +Added auto-completion for values of module options and sub-options -- by +{user}`tomaciazek` diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index 39729b984..2249d4a5c 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -44,6 +44,9 @@ const priorityMap = { requiredOption: 1, option: 2, aliasOption: 3, + // choices + defaultChoice: 1, + choice: 2, }; export async function doCompletion( @@ -172,7 +175,7 @@ export async function doCompletion( return completionItems; } - // Finally, check if we're looking for module options or sub-options + // Check if we're looking for module options or sub-options const options = await getPossibleOptionsForPath( path, document, @@ -250,6 +253,78 @@ export async function doCompletion( return completionItem; }); } + + // Now check if we're looking for option/sub-option values + let keyPath: Node[] | null; + // establish path for the key (option/sub-option name) + if (new AncestryBuilder(path).parent(YAMLMap).getValue() === null) { + keyPath = new AncestryBuilder(path) + .parent(YAMLMap) // compensates for `_:` + .parent(YAMLMap) + .getKeyPath(); + } else { + // in this case there is a character immediately after `_:`, which + // prevents formation of nested map + keyPath = new AncestryBuilder(path).parent(YAMLMap).getKeyPath(); + } + if (keyPath) { + const keyNode = keyPath[keyPath.length - 1]; + const keyOptions = await getPossibleOptionsForPath( + keyPath, + document, + docsLibrary + ); + if ( + keyOptions && + keyNode instanceof Scalar && + keyOptions.has(keyNode.value) + ) { + const nodeRange = getNodeRange(node, document); + + const option = keyOptions.get(keyNode.value); + const choices = []; + let defaultChoice = option.default; + if (option.type === "bool" && typeof option.default === "string") { + // the YAML parser does not recognize values such as 'Yes'/'no' as booleans + defaultChoice = + option.default.toLowerCase() === "yes" ? true : false; + } + if (option.choices) { + choices.push(...option.choices); + } else if (option.type === "bool") { + choices.push(true); + choices.push(false); + } else if (defaultChoice !== undefined) { + choices.push(defaultChoice); + } + return choices.map((choice, index) => { + let priority; + if (choice === defaultChoice) { + priority = priorityMap.defaultChoice; + } else { + priority = priorityMap.choice; + } + const insertValue = new String(choice).toString(); + const completionItem: CompletionItem = { + label: insertValue, + detail: choice === defaultChoice ? "default" : undefined, + // using index preserves order from the specification + // except when overridden by the priority + sortText: priority.toString() + index.toString().padStart(3), + kind: CompletionItemKind.Value, + }; + if (nodeRange) { + completionItem.textEdit = { + range: nodeRange, + newText: insertValue, + }; + } else { + completionItem.insertText = insertValue; + } + return completionItem; + }); + } + } } } return null; diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py index 3c3c80aae..2b3c14887 100644 --- a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py @@ -70,7 +70,11 @@ - choice_2 - choice_3 - choice_4 - default: choice_1 + default: choice_4 + opt_4: + description: Option 4 + type: bool + default: No """ EXAMPLES = """ diff --git a/test/fixtures/completion/simple_tasks.yml b/test/fixtures/completion/simple_tasks.yml index 6b1ff9002..3da20515b 100644 --- a/test/fixtures/completion/simple_tasks.yml +++ b/test/fixtures/completion/simple_tasks.yml @@ -2,7 +2,7 @@ gather_facts: False hosts: localhost vars: - my_var: 'test' + my_var: "test" tasks: - name: Builtin module ansible.builtin.debug: @@ -16,7 +16,7 @@ - name: Collection module org_1.coll_4.module_1: opt_1: - - sub_opt_1: + - sub_opt_1: choice_1 sub_opt_2: - sub_opt_1: @@ -28,6 +28,8 @@ - sub_sub_sub_opt_1: sub_sub_sub_opt_2: + opt_3: choice_2 + opt_4: true - name: Netcommon module ansible.netcommon.cli_command: diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index 0c0dc0b89..cd0ce8715 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -228,7 +228,7 @@ describe("doCompletion()", () => { }, { name: "list for all the modules that contain `cli_` in their name with `cli_`", - position: { line: 32, character: 6 } as Position, + position: { line: 33, character: 6 } as Position, triggerCharacter: "cli_", completion: "cli_", }, @@ -324,6 +324,67 @@ describe("doCompletion()", () => { }); }); + describe("Completion for option and suboption values", () => { + const tests = [ + { + name: "builtin module option (ansible.builtin.debug -> msg)", + position: { line: 8, character: 13 } as Position, + triggerCharacter: "", + completion: ["Hello world!"], + }, + { + name: "collection module option (org_1.coll_4.module_1 -> opt_3)", + position: { line: 30, character: 15 } as Position, + triggerCharacter: "3", + completion: ["choice_3"], + }, + { + name: "collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_1)", + position: { line: 18, character: 23 } as Position, + triggerCharacter: "1", + completion: ["choice_1"], + }, + { + name: "default first", + position: { line: 30, character: 15 } as Position, + triggerCharacter: "", + completion: ["choice_4", "choice_1", "choice_2", "choice_3"], + }, + { + name: "boolean values", + position: { line: 31, character: 15 } as Position, + triggerCharacter: "", + completion: ["false", "true"], + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const textDoc = await getDoc("completion/simple_tasks.yml"); + const context = workspaceManager.getContext(textDoc.uri); + + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ).map((completion) => { + if (!completion.item) { + return completion.label; + } else { + return completion.item.label; + } + }); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + expect(filteredCompletion).be.deep.equal(completion); + } + }); + }); + }); + describe("Completion for module name without FQCN", () => { const tests = [ { From 43aaa614ae8aec1faa0ba04199a0de7238dc9655 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Apr 2022 14:24:31 +0100 Subject: [PATCH 326/558] Bump pre-commit from 2.17.0 to 2.18.1 (#291) Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.17.0 to 2.18.1. - [Release notes](https://github.com/pre-commit/pre-commit/releases) - [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) - [Commits](https://github.com/pre-commit/pre-commit/compare/v2.17.0...v2.18.1) --- updated-dependencies: - dependency-name: pre-commit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 2e7742df8..c2085a5fb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,7 +24,7 @@ nodeenv==1.6.0 packaging==21.3 pathspec==0.9.0 platformdirs==2.5.1 -pre-commit==2.17.0 +pre-commit==2.18.1 pycparser==2.21 pygments==2.11.2 pyparsing==3.0.7 From 937df83c79973e804f67e19d5a6fe836f049429e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 7 Apr 2022 14:29:08 +0100 Subject: [PATCH 327/558] chore: pre-commit autoupdate (#292) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/streetsidesoftware/cspell-cli: v5.8.4 → v5.9.0](https://github.com/streetsidesoftware/cspell-cli/compare/v5.8.4...v5.9.0) - [github.com/pre-commit/mirrors-prettier: v2.5.1 → v2.6.2](https://github.com/pre-commit/mirrors-prettier/compare/v2.5.1...v2.6.2) - [github.com/pre-commit/mirrors-eslint: v8.10.0 → v8.12.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.10.0...v8.12.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9d01f2077..0becbbbf2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -50,7 +50,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v5.8.4 + rev: v5.9.0 hooks: - id: cspell name: Spell check with cspell @@ -84,7 +84,7 @@ repos: language_version: python3 - repo: https://github.com/pre-commit/mirrors-prettier # keep it before markdownlint and eslint - rev: "v2.5.1" + rev: "v2.6.2" hooks: - id: prettier - repo: https://github.com/igorshubovych/markdownlint-cli @@ -96,7 +96,7 @@ repos: docs/changelog-fragments\.d/\d+\.\w+\.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.10.0 + rev: v8.12.0 hooks: - id: eslint args: From a645d39380be94541d2eae31d951bc14158ae7d9 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Mon, 11 Apr 2022 15:22:37 +0530 Subject: [PATCH 328/558] Utility to update settings in readme automatically (#294) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .config/dictionary.txt | 2 + .pre-commit-config.yaml | 10 +- .prettierignore | 3 + README.md | 40 +------- docs/changelog-fragments.d/294.feature.md | 3 + docs/index.md | 1 + docs/settings.md | 61 +++++++++++ package-lock.json | 81 +++++++++++++-- package.json | 4 +- src/interfaces/extensionSettings.ts | 81 ++++++++++++++- src/services/settingsManager.ts | 96 ++++++++++++++++-- tools/settings-doc-generator.ts | 118 ++++++++++++++++++++++ 12 files changed, 438 insertions(+), 62 deletions(-) create mode 100644 docs/changelog-fragments.d/294.feature.md create mode 100644 docs/settings.md create mode 100644 tools/settings-doc-generator.ts diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 9820f6cee..752cf404b 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -17,6 +17,7 @@ customizer deps devel dirhtml +docker doctree doctrees Dpkg @@ -51,6 +52,7 @@ nvim parseable patchback pkgcache +podman prettierrc preversion pyparsing diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0becbbbf2..581d91c38 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -60,9 +60,14 @@ repos: - id: end-of-file-fixer exclude: > (?x)^( - syntaxes/.* + syntaxes/.*| + docs/settings.md )$ - id: trailing-whitespace + exclude: > + (?x)^( + docs/settings.md + )$ - id: mixed-line-ending - id: check-byte-order-marker - id: check-executables-have-shebangs @@ -93,7 +98,8 @@ repos: - id: markdownlint exclude: > (?x)^ - docs/changelog-fragments\.d/\d+\.\w+\.md + docs/changelog-fragments\.d/\d+\.\w+\.md| + docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint rev: v8.12.0 diff --git a/.prettierignore b/.prettierignore index a625356d9..a49e1bdeb 100644 --- a/.prettierignore +++ b/.prettierignore @@ -11,3 +11,6 @@ syntaxes/external/jinja.tmLanguage.json # Files temporary excluded during prettier adoption: *.yaml *.yml + +# Files excluded because they are auto generated +docs/settings.md diff --git a/README.md b/README.md index 2f05d3893..64fef19b3 100644 --- a/README.md +++ b/README.md @@ -97,44 +97,8 @@ holding `ctrl`/`cmd`. ## Language Server Settings -The following settings are supported. - -- `ansible.ansible.path`: Path to the `ansible` executable. Default is - `ansible`, which means $PATH is searched for the executable. -- `ansible.ansible.useFullyQualifiedCollectionNames`: Toggles use of fully - qualified collection names (FQCN) when inserting a module name. Disabling it - will only use FQCNs when necessary, that is when the collection is not - configured for the task. Default is `true`. -- `ansible.ansibleLint.arguments`: Optional command line arguments to be - appended to `ansible-lint` invocation. See `ansible-lint` documentation. - Default is empty string. -- `ansible.ansibleLint.enabled`: Enables/disables use of `ansible-lint`. default - is `true`. -- `ansible.ansibleLint.path`: Path to the `ansible-lint` executable. Default is - `ansible-lint`, which means $PATH is searched for the executable. -- `ansible.ansibleNavigator.path`: Path to the `ansible-navigator` executable. -- `ansible.ansiblePlaybook.path`: Path to the `ansible-playbook` executable. -- `ansible.executionEnvironment.containerEngine`: The container engine to be - used while running with execution environment. Valid values are `auto`, - `podman` and `docker`. For `auto` it will look for `podman` then `docker`. - Default is `auto`. -- `ansible.executionEnvironment.enabled`: Enable or disable the use of an - execution environment. Default is `false`. -- `ansible.executionEnvironment.image`: Specify the name of the execution - environment image. Default is `quay.io/ansible/creator-ee:latest`. -- `ansible.executionEnvironment.pullPolicy`: Specify the image pull policy. - Valid values are `always`, `missing`, `never` and `tag`. Setting `always` will - always pull the image when extension is activated or reloaded. Default is - `missing`. Setting `missing` will pull if not locally available. Setting - `never` will never pull the image and setting tag will always pull if the - image tag is 'latest', otherwise pull if not locally available. -- `ansible.python.interpreterPath`: Path to the `python`/`python3` executable. - This setting may be used to make the extension work with `ansible` and - `ansible-lint` installations in a Python virtual environment. Default is empty - string. -- `ansible.python.activationScript`: Path to a custom `activate` script, which - will be used instead of the setting above to run in a Python virtual - environment. Default is empty string. +For details on settings, their descriptions and their default values refer to +the _link_ _settings_ _doc_. ## Developer support diff --git a/docs/changelog-fragments.d/294.feature.md b/docs/changelog-fragments.d/294.feature.md new file mode 100644 index 000000000..830c8eca8 --- /dev/null +++ b/docs/changelog-fragments.d/294.feature.md @@ -0,0 +1,3 @@ +Refactored settings structure in the code to include descriptions and added +utility for updating the settings doc to keep in sync with it -- by +{user}`priyamsahoo` diff --git a/docs/index.md b/docs/index.md index c2556440e..07c36328e 100644 --- a/docs/index.md +++ b/docs/index.md @@ -23,5 +23,6 @@ changelog Code Of Conduct contributing/security contributing/guidelines +settings development ``` diff --git a/docs/settings.md b/docs/settings.md new file mode 100644 index 000000000..8d800f9e3 --- /dev/null +++ b/docs/settings.md @@ -0,0 +1,61 @@ + + +# Language Server Settings + +The following are the default values of the settings provided by the Ansible Language Server: + +- **ansible.ansible.path**: +Path to the ansible executable \ +_default value: +`ansible`_ + +- **ansible.ansible.useFullyQualifiedCollectionNames**: +Toggle usage of fully qualified collection names (FQCN) when inserting module names \ +_default value: +`true`_ + +- **ansible.ansibleLint.enabled**: +Toggle usage of ansible-lint \ +_default value: +`true`_ + +- **ansible.ansibleLint.path**: +Path to the ansible-lint executable \ +_default value: +`ansible-lint`_ + +- **ansible.ansibleLint.arguments**: +Optional command line arguments to be appended to ansible-lint invocation \ +_default value: +`""`_ + +- **ansible.python.interpreterPath**: +Path to the python/python3 executable. This settings may be used to make the extension work with ansible and ansible-lint installations in a python virtual environment \ +_default value: +`""`_ + +- **ansible.python.activationScript**: +Path to a custom activation script, which is to be used instead of te settings above to run in a python virtual environment \ +_default value: +`""`_ + +- **ansible.executionEnvironment.containerEngine**: +Container engine to be used while running with execution environment. valid values are 'auto', 'podman' and 'docker'. For 'auto', it will look for 'podman' and then for 'docker' \ +_default value: +`auto`_ + +- **ansible.executionEnvironment.enabled**: +Toggle usage of an execution environment \ +_default value: +`false`_ + +- **ansible.executionEnvironment.image**: +Name of the execution environment to be used \ +_default value: +`quay.io/ansible/creator-ee:latest`_ + +- **ansible.executionEnvironment.pullPolicy**: +Image pull policy to be used. Valid values are 'always', 'missing', 'never' and 'tag'. always will always pull the image when extension is activated or reloaded. 'missing' will pull if not locally available. 'never' will never pull the image and 'tag' will always pull if the image tag is 'latest', otherwise pull if not locally available. \ +_default value: +`missing`_ + diff --git a/package-lock.json b/package-lock.json index 2156a7b8a..bfa64148d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@flatten-js/interval-tree": "^1.0.18", "globby": "^13.1.1", + "handlebars": "^4.7.7", "ini": "^2.0.0", "lodash": "^4.17.21", "uuid": "^8.3.2", @@ -2782,6 +2783,26 @@ "node": ">=4.x" } }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3722,8 +3743,7 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/minipass": { "version": "3.1.6", @@ -3952,6 +3972,11 @@ "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, "node_modules/node-gyp": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", @@ -5401,7 +5426,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5753,6 +5777,18 @@ "node": ">=4.2.0" } }, + "node_modules/uglify-js": { + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", + "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -5971,6 +6007,11 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, "node_modules/workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", @@ -8168,6 +8209,18 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -8889,8 +8942,7 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minipass": { "version": "3.1.6", @@ -9063,6 +9115,11 @@ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, "node-gyp": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", @@ -10148,8 +10205,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { "version": "0.5.21", @@ -10409,6 +10465,12 @@ "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "dev": true }, + "uglify-js": { + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", + "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", + "optional": true + }, "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -10594,6 +10656,11 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, "workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", diff --git a/package.json b/package.json index 5a091033f..a2584be8f 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "dependencies": { "@flatten-js/interval-tree": "^1.0.18", "globby": "^13.1.1", + "handlebars": "^4.7.7", "ini": "^2.0.0", "lodash": "^4.17.21", "uuid": "^8.3.2", @@ -85,7 +86,8 @@ "preversion": "bin/version-bump-allowed", "watch": "tsc --watch -p .", "test": "nyc -s -a mocha && nyc report --check-coverage", - "check-dependencies": "node ./scripts/check-dependencies.js" + "check-dependencies": "node ./scripts/check-dependencies.js", + "generate-settings-readme": "ts-node tools/settings-doc-generator.ts" }, "all": true } diff --git a/src/interfaces/extensionSettings.ts b/src/interfaces/extensionSettings.ts index c2cd2d2c6..3087d37ff 100644 --- a/src/interfaces/extensionSettings.ts +++ b/src/interfaces/extensionSettings.ts @@ -1,17 +1,88 @@ +/** + * Guide to add settings: + * + * 1. Add appropriate setting type in the desired section (particular interface) + * 2. Add the setting(s) to `ExtensionSetting` at appropriate nested level + */ + export type IContainerEngine = "auto" | "podman" | "docker"; export type IPullPolicy = "always" | "missing" | "never" | "tag"; +export interface ExtensionSettingsWithDescription { + ansible: AnsibleSettings; + ansibleLint: AnsibleLintSettings; + executionEnvironment: ExecutionEnvironmentSettings; + python: PythonSettings; +} + export interface ExtensionSettings { ansible: { path: string; useFullyQualifiedCollectionNames: boolean }; ansibleLint: { enabled: boolean; path: string; arguments: string }; - executionEnvironment: ExecutionEnvironmentSettings; + executionEnvironment: { + enabled: boolean; + containerEngine: IContainerEngine; + image: string; + pullPolicy: IPullPolicy; + }; python: { interpreterPath: string; activationScript: string }; } +/** + * Interface for execution environment settings + */ interface ExecutionEnvironmentSettings { - containerEngine: IContainerEngine; - enabled: boolean; - image: string; - pullPolicy: IPullPolicy; + containerEngine: { + default: IContainerEngine; + description: string; + }; + enabled: { default: boolean; description: string }; + image: { default: string; description: string }; + pullPolicy: { default: IPullPolicy; description: string }; +} + +/** + * Interface for ansible settings + */ +interface AnsibleSettings { + path: { + default: string; + description: string; + }; + useFullyQualifiedCollectionNames: { + default: boolean; + description: string; + }; +} + +/** + * Interface for ansible lint settings + */ +interface AnsibleLintSettings { + enabled: { + default: boolean; + description: string; + }; + path: { + default: string; + description: string; + }; + arguments: { + default: string; + description: string; + }; +} + +/** + * Interface for python settings + */ +interface PythonSettings { + interpreterPath: { + default: string; + description: string; + }; + activationScript: { + default: string; + description: string; + }; } diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index e6d7fce5d..cd18d8321 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -1,7 +1,10 @@ import * as _ from "lodash"; import { Connection } from "vscode-languageserver"; import { DidChangeConfigurationParams } from "vscode-languageserver-protocol"; -import { ExtensionSettings } from "../interfaces/extensionSettings"; +import { + ExtensionSettingsWithDescription, + ExtensionSettings, +} from "../interfaces/extensionSettings"; export class SettingsManager { private connection: Connection; @@ -12,17 +15,71 @@ export class SettingsManager { private documentSettings: Map> = new Map(); - private defaultSettings: ExtensionSettings = { - ansible: { path: "ansible", useFullyQualifiedCollectionNames: true }, - ansibleLint: { enabled: true, path: "ansible-lint", arguments: "" }, - python: { interpreterPath: "", activationScript: "" }, + // settings with their default values and descriptions + // default values of settings to be updated here + readonly defaultSettingsWithDescription: ExtensionSettingsWithDescription = { + ansible: { + path: { + default: "ansible", + description: "Path to the ansible executable", + }, + useFullyQualifiedCollectionNames: { + default: true, + description: + "Toggle usage of fully qualified collection names (FQCN) when inserting module names", + }, + }, + ansibleLint: { + enabled: { default: true, description: "Toggle usage of ansible-lint" }, + path: { + default: "ansible-lint", + description: "Path to the ansible-lint executable", + }, + arguments: { + default: "", + description: + "Optional command line arguments to be appended to ansible-lint invocation", + }, + }, + python: { + interpreterPath: { + default: "", + description: + "Path to the python/python3 executable. This settings may be used to make the extension work with ansible and ansible-lint installations in a python virtual environment", + }, + activationScript: { + default: "", + description: + "Path to a custom activation script, which is to be used instead of te settings above to run in a python virtual environment", + }, + }, executionEnvironment: { - containerEngine: "auto", - enabled: false, - image: "quay.io/ansible/creator-ee:latest", - pullPolicy: "missing", + containerEngine: { + default: "auto", + description: + "Container engine to be used while running with execution environment. valid values are 'auto', 'podman' and 'docker'. For 'auto', it will look for 'podman' and then for 'docker'", + }, + enabled: { + default: false, + description: "Toggle usage of an execution environment", + }, + image: { + default: "quay.io/ansible/creator-ee:latest", + description: "Name of the execution environment to be used", + }, + pullPolicy: { + default: "missing", + description: + "Image pull policy to be used. Valid values are 'always', 'missing', 'never' and 'tag'. always will always pull the image when extension is activated or reloaded. 'missing' will pull if not locally available. 'never' will never pull the image and 'tag' will always pull if the image tag is 'latest', otherwise pull if not locally available.", + }, }, }; + + // Structure the settings similar to the ExtensionSettings interface for usage in the code + private defaultSettings: ExtensionSettings = this._settingsAdjustment( + _.cloneDeep(this.defaultSettingsWithDescription) + ); + private globalSettings: ExtensionSettings = this.defaultSettings; constructor(connection: Connection, clientSupportsConfigRequests: boolean) { @@ -102,4 +159,25 @@ export class SettingsManager { this.globalSettings = params.settings.ansible || this.defaultSettings; } } + + /** + * A recursive function to restructure the raw settings object similar to ExtensionSettings interface in order + * to make it work with the code + * @param settingsObject settings object with `default` and `description` as keys + * @returns settings object with a structure similar to ExtensionSettings interface + */ + private _settingsAdjustment(settingsObject) { + for (const key in settingsObject) { + const value = settingsObject[key]; + + if (value && typeof value === "object") { + if (value.default !== undefined) { + settingsObject[key] = value.default; + } else { + this._settingsAdjustment(value); + } + } + } + return settingsObject; + } } diff --git a/tools/settings-doc-generator.ts b/tools/settings-doc-generator.ts new file mode 100644 index 000000000..0ff409c7a --- /dev/null +++ b/tools/settings-doc-generator.ts @@ -0,0 +1,118 @@ +import Handlebars = require("handlebars"); +import * as fs from "fs"; +import { SettingsManager } from "../src/services/settingsManager"; +import * as path from "path"; + +// Get the default settings values from settingsManager class +const settingsManager = new SettingsManager(null, null); +const defaultSettings = { + ansible: settingsManager.defaultSettingsWithDescription, +}; + +// Convert the nested settings value to single-level object with keys in the form of dotted notations (intermediate step) +const settingsInDotNotation = toDotNotation(defaultSettings); + +// Convert the dotted settings value to single-level object with the keys as { settings, defaultValue, description } (final step) +const arrayOfDefaultSettings = structureSettings(settingsInDotNotation); + +// Use handlebars.js to generate doc file with `defaultSettings.handlebars` as template + +const TEMPLATE = ` +# Language Server Settings + +The following are the default values of the settings provided by the Ansible Language Server: + +{{#each arrayOfDefaultSettings}} +- **{{setting}}**: +{{description}} \\ +_default value: +{{#if defaultValue}} +\`{{defaultValue}}\`_ +{{else}} +{{#ifEqualsFalse defaultValue}} +\`false\`_ +{{else}} +\`""\`_ +{{/ifEqualsFalse}} +{{/if}} + +{{/each}} +`; + +const WARNING_IN_README = + ""; + +const settingsReadmeFileUri = path.join(__dirname, "..", "docs", "settings.md"); + +// Register a special function for handlebars to deal with comparison of stringed value of false +// Else, normal #if treats it as boolean, even after converting booleans to strings in typescript +Handlebars.registerHelper("ifEqualsFalse", function (arg1, options) { + // eslint-disable-next-line eqeqeq + return arg1.toString() == "false" ? options.fn(this) : options.inverse(this); +}); + +const template = Handlebars.compile(TEMPLATE); +const output = template({ arrayOfDefaultSettings }); +fs.writeFileSync(settingsReadmeFileUri, `${WARNING_IN_README}\n${output}`); + +console.log( + `Readme file for settings description and default value generated.` +); +console.log(`File: ${settingsReadmeFileUri}`); + +export function toDotNotation(obj, res = {}, current = "") { + for (const key in obj) { + const value = obj[key]; + const newKey = current ? `${current}.${key}` : key; // joined key with dot + if (value && typeof value === "object") { + toDotNotation(value, res, newKey); // it's a nested object, so do it again + } else { + res[newKey] = value; // it's not an object, so set the property + } + } + return res; +} + +export function structureSettings(settingsInDotNotation) { + // Form an appropriate structure so that it is easier to iterate over it in the template + // Structure is as follows: + // arrayOfDefaultSettings: [ + // { + // key: ansible.first.settings, + // defaultValue: some-values, + // description: 'description for setting 1' + // }, + // { + // key: ansible.second.settings, + // defaultValue: another-values, + // description: 'description for setting 2' + // } + // ] + const settingsArray = []; + for (const k in settingsInDotNotation) { + const keyArray = k.split("."); + keyArray.splice(-1, 1); + const key = keyArray.join("."); + + const obj = { + setting: key, + defaultValue: settingsInDotNotation[`${key}.default`].toString() // convert to string for showing the actual value in doc + ? settingsInDotNotation[`${key}.default`] + : "", + description: settingsInDotNotation[`${key}.description`], + }; + + settingsArray.push(obj); + } + const uniqueSettings = settingsArray.filter((value, index) => { + const _value = JSON.stringify(value); + return ( + index === + settingsArray.findIndex((obj) => { + return JSON.stringify(obj) === _value; + }) + ); + }); + + return uniqueSettings; +} From d389c4216187897c39ccf729b779614702d955ed Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 11 Apr 2022 15:54:15 +0100 Subject: [PATCH 329/558] Ensure we keep generated settings docs in sync (#296) --- .github/workflows/ci.yml | 7 +++---- .gitignore | 2 ++ README.md | 2 +- tox.ini | 15 +++++++++++++-- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7168741dc..a5db86d57 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -241,12 +241,11 @@ jobs: shell: bash - name: Generate changelog update with tox and stage it in Git run: >- - python -m - tox - --parallel auto - --parallel-live + python -m tox --skip-missing-interpreters false --skip-pkg-install + -e make-changelog + --allow-dirty -- '${{ needs.pre-setup.outputs.dist-version }}' --yes diff --git a/.gitignore b/.gitignore index 8906347e2..2f9baed40 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ vscode-ansible __pycache__ .temp UNKNOWN.egg-info +# Used on GHA to generate changelogs: +change-notes-*.md diff --git a/README.md b/README.md index 64fef19b3..4bc752507 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ holding `ctrl`/`cmd`. ## Language Server Settings For details on settings, their descriptions and their default values refer to -the _link_ _settings_ _doc_. +[settings](https://als.readthedocs.io/en/latest/settings/). ## Developer support diff --git a/tox.ini b/tox.ini index 2560e07d9..db7e4478b 100644 --- a/tox.ini +++ b/tox.ini @@ -7,6 +7,9 @@ envlist = minversion = 3.21.0 skip_install = true skipsdist = true +requires = + # ensure tox returns a non-zero exit code when git reports dirty: + tox-extra>=0.4.0 [docs] # do not use continuation with vars, see https://github.com/tox-dev/tox/issues/2069 @@ -35,7 +38,10 @@ setenv = PIP_CONSTRAINTS=requirements.txt allowlist_externals = bash + git node + npm + sh # Activation of node version is not persistent and nvm works only from # within `bash --login`, do not call nvm/npm/node without it under tox as # you might end-up using system version, if any @@ -64,6 +70,7 @@ basepython = python3.10 deps = -c requirements.txt pip-tools >= 6.5.1 +commands_pre = commands = # dependabot supports only 'requirements.txt' filename but we use it as # a constraints files @@ -72,14 +79,14 @@ commands = -o requirements.txt" [testenv:docs] -allowlist_externals = - git changedir = {toxinidir}/docs commands_pre = # Retrieve possibly missing commits: - git fetch --unshallow - git fetch --tags commands = + npm ci + npm run generate-settings-readme {envpython} -m sphinx -b html {[docs]sphinx_common_args} {envpython} -m sphinx -b linkcheck {[docs]sphinx_common_args} {envpython} -m sphinx -b spelling {[docs]sphinx_common_args} @@ -113,6 +120,7 @@ usedevelop = false description = Run all linters deps = pre-commit >= 2.17.0 +commands_pre = commands = # Commands are the same as running `npm run lint`: pre-commit run -a @@ -129,6 +137,7 @@ description = When invoking to update the changelog, pass the desired version as an argument after `--`. For example, `tox -e {envname} -- 1.3.2`. envdir = {toxworkdir}/changelog +commands_pre = commands = {envpython} -m \ towncrier.build \ @@ -144,6 +153,7 @@ skip_install = true basepython = {[testenv:make-changelog]basepython} description = Check Towncrier change notes +commands_pre = commands = {envpython} -m \ towncrier.check \ @@ -161,6 +171,7 @@ basepython = {[testenv:make-changelog]basepython} description = Print out the Towncrier-managed change notes draft for the next release to stdout +commands_pre = commands = # NOTE: `sh` invocation is required to suppress stderr from # NOTE: towncrier since it does not have own CLI flags for From 407b706ea800713cdc7f282c46bc75adbade5dc9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Apr 2022 15:54:49 +0100 Subject: [PATCH 330/558] Bump click from 8.1.1 to 8.1.2 (#287) Bumps [click](https://github.com/pallets/click) from 8.1.1 to 8.1.2. - [Release notes](https://github.com/pallets/click/releases) - [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/click/compare/8.1.1...8.1.2) --- updated-dependencies: - dependency-name: click dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/requirements.txt | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index e5be49137..74cb3975a 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -16,7 +16,7 @@ certifi==2021.10.8 # via requests charset-normalizer==2.0.8 # via requests -click==8.1.1 +click==8.1.2 # via towncrier click-default-group==1.2.2 # via towncrier diff --git a/requirements.txt b/requirements.txt index c2085a5fb..f46f07708 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,7 @@ ansible-lint==6.0.2 bracex==2.2.1 cffi==1.15.0 cfgv==3.3.1 -click==8.1.1 +click==8.1.2 commonmark==0.9.1 cryptography==36.0.2 distlib==0.3.4 From e48724a8712d1ee10e561d4edc0e7856995d0e67 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Mon, 11 Apr 2022 22:38:13 +0530 Subject: [PATCH 331/558] Replace globby with glob (#295) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/changelog-fragments.d/295.bugfix.md | 3 + package-lock.json | 185 ++++++++++++----------- package.json | 3 +- src/utils/docsFinder.ts | 89 +++++++++-- test/fixtures/utils/docsFinder/1.py | 1 + test/fixtures/utils/docsFinder/10.json | 3 + test/fixtures/utils/docsFinder/2.py | 1 + test/fixtures/utils/docsFinder/3.py | 1 + test/fixtures/utils/docsFinder/4.yml | 1 + test/fixtures/utils/docsFinder/5.yml | 1 + test/fixtures/utils/docsFinder/6.yaml | 1 + test/fixtures/utils/docsFinder/_7.py | 1 + test/fixtures/utils/docsFinder/_8.py | 1 + test/fixtures/utils/docsFinder/_9.py | 1 + test/utils/docsFinder.test.ts | 48 ++++++ 15 files changed, 236 insertions(+), 104 deletions(-) create mode 100644 docs/changelog-fragments.d/295.bugfix.md create mode 100644 test/fixtures/utils/docsFinder/1.py create mode 100644 test/fixtures/utils/docsFinder/10.json create mode 100644 test/fixtures/utils/docsFinder/2.py create mode 100644 test/fixtures/utils/docsFinder/3.py create mode 100644 test/fixtures/utils/docsFinder/4.yml create mode 100644 test/fixtures/utils/docsFinder/5.yml create mode 100644 test/fixtures/utils/docsFinder/6.yaml create mode 100644 test/fixtures/utils/docsFinder/_7.py create mode 100644 test/fixtures/utils/docsFinder/_8.py create mode 100644 test/fixtures/utils/docsFinder/_9.py create mode 100644 test/utils/docsFinder.test.ts diff --git a/docs/changelog-fragments.d/295.bugfix.md b/docs/changelog-fragments.d/295.bugfix.md new file mode 100644 index 000000000..f6e1f1cd0 --- /dev/null +++ b/docs/changelog-fragments.d/295.bugfix.md @@ -0,0 +1,3 @@ +Fixed globby issue by replacing it with glob and writing utility function to +support array of file patterns and file path exclusion patterns -- by +{user}`priyamsahoo` diff --git a/package-lock.json b/package-lock.json index bfa64148d..0545e5b3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", - "globby": "^13.1.1", + "glob": "^7.2.0", "handlebars": "^4.7.7", "ini": "^2.0.0", "lodash": "^4.17.21", @@ -25,6 +25,7 @@ }, "devDependencies": { "@types/chai": "^4.3.0", + "@types/glob": "^7.2.0", "@types/ini": "^1.3.31", "@types/lodash": "^4.14.179", "@types/mocha": "^9.1.0", @@ -708,6 +709,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -720,6 +722,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "engines": { "node": ">= 8" } @@ -728,6 +731,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -894,6 +898,16 @@ "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", "dev": true }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "node_modules/@types/ini": { "version": "1.3.31", "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.31.tgz", @@ -912,6 +926,12 @@ "integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==", "dev": true }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, "node_modules/@types/mocha": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", @@ -1374,8 +1394,7 @@ "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 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/binary-extensions": { "version": "2.2.0", @@ -1412,7 +1431,6 @@ "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" @@ -1422,6 +1440,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -1800,8 +1819,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/configstore": { "version": "5.0.1", @@ -1984,6 +2002,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -2365,6 +2384,7 @@ "version": "3.2.11", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -2398,6 +2418,7 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -2424,6 +2445,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2549,8 +2571,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { "version": "2.3.2", @@ -2671,7 +2692,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2691,6 +2711,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -2728,24 +2749,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz", - "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -2950,6 +2953,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, "engines": { "node": ">= 4" } @@ -3019,7 +3023,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3028,8 +3031,7 @@ "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 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "2.0.0", @@ -3085,6 +3087,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3102,6 +3105,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -3147,6 +3151,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -3703,6 +3708,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "engines": { "node": ">= 8" } @@ -3711,6 +3717,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, "dependencies": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -3732,7 +3739,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4532,7 +4538,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "dependencies": { "wrappy": "1" } @@ -4725,7 +4730,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -4743,6 +4747,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, "engines": { "node": ">=8" } @@ -4766,6 +4771,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -4964,6 +4970,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -5214,6 +5221,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -5238,6 +5246,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -5373,17 +5382,6 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -5643,6 +5641,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -6038,8 +6037,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -6664,6 +6662,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -6672,12 +6671,14 @@ "@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true }, "@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -6816,6 +6817,16 @@ "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", "dev": true }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "@types/ini": { "version": "1.3.31", "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.31.tgz", @@ -6834,6 +6845,12 @@ "integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==", "dev": true }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, "@types/mocha": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", @@ -7149,8 +7166,7 @@ "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 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "binary-extensions": { "version": "2.2.0", @@ -7178,7 +7194,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7188,6 +7203,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -7470,8 +7486,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "configstore": { "version": "5.0.1", @@ -7615,6 +7630,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "requires": { "path-type": "^4.0.0" } @@ -7908,6 +7924,7 @@ "version": "3.2.11", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -7938,6 +7955,7 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, "requires": { "reusify": "^1.0.4" } @@ -7961,6 +7979,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -8042,8 +8061,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.3.2", @@ -8130,7 +8148,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8144,6 +8161,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -8166,18 +8184,6 @@ "type-fest": "^0.20.2" } }, - "globby": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz", - "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -8336,7 +8342,8 @@ "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true }, "ignore-walk": { "version": "4.0.1", @@ -8385,7 +8392,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -8394,8 +8400,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "2.0.0", @@ -8438,7 +8443,8 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -8450,6 +8456,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -8479,7 +8486,8 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-obj": { "version": "2.0.0", @@ -8913,12 +8921,14 @@ "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -8934,7 +8944,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -9560,7 +9569,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -9703,8 +9711,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "3.1.1", @@ -9715,7 +9722,8 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "pathval": { "version": "1.1.1", @@ -9732,7 +9740,8 @@ "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true }, "pkg-dir": { "version": "4.2.0", @@ -9875,7 +9884,8 @@ "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true }, "randombytes": { "version": "2.1.0", @@ -10064,7 +10074,8 @@ "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true }, "rimraf": { "version": "3.0.2", @@ -10079,6 +10090,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "requires": { "queue-microtask": "^1.2.2" } @@ -10170,11 +10182,6 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -10381,6 +10388,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "requires": { "is-number": "^7.0.0" } @@ -10681,8 +10689,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "3.0.3", diff --git a/package.json b/package.json index a2584be8f..d2797c411 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ ], "dependencies": { "@flatten-js/interval-tree": "^1.0.18", - "globby": "^13.1.1", + "glob": "^7.2.0", "handlebars": "^4.7.7", "ini": "^2.0.0", "lodash": "^4.17.21", @@ -54,6 +54,7 @@ }, "devDependencies": { "@types/chai": "^4.3.0", + "@types/glob": "^7.2.0", "@types/ini": "^1.3.31", "@types/lodash": "^4.14.179", "@types/mocha": "^9.1.0", diff --git a/src/utils/docsFinder.ts b/src/utils/docsFinder.ts index ff282d865..f8fef28f3 100644 --- a/src/utils/docsFinder.ts +++ b/src/utils/docsFinder.ts @@ -7,6 +7,7 @@ import { IPluginRoutesByType, IPluginRoutingByCollection, } from "../interfaces/pluginRouting"; +import { glob } from "glob"; export async function findDocumentation( dir: string, @@ -19,29 +20,50 @@ export async function findDocumentation( if (!fs.existsSync(dir) || fs.lstatSync(dir).isFile()) { return []; } - const globby = await getGlobby(); + // const globby = await getGlobby(); let files; switch (kind) { case "builtin": - files = await globby([`${dir}/**/*.py`, "!/**/_*.py"]); + files = await globArray([`${dir}/**/*.py`, "!/**/_*.py"]); + // files2 = globArray([`${dir}/**/*.py`, "!/**/_*.py"]); + // console.log(`globby files ${files.length} -> `, files); + // console.log(`glob files ${files2.length} -> `, files2); break; case "builtin_doc_fragment": - files = await globby([ + files = await globArray([ `${path.resolve(dir, "../")}/plugins/doc_fragments/*.py`, "!/**/_*.py", ]); + // files2 = globArray([ + // `${path.resolve(dir, "../")}/plugins/doc_fragments/*.py`, + // "!/**/_*.py", + // ]); + // console.log(`globby files ${files.length} -> `, files); + // console.log(`glob files ${files2.length} -> `, files2); break; case "collection": - files = await globby([ + files = await globArray([ `${dir}/ansible_collections/*/*/plugins/modules/*.py`, `!${dir}/ansible_collections/*/*/plugins/modules/_*.py`, ]); + // files2 = globArray([ + // `${dir}/ansible_collections/*/*/plugins/modules/*.py`, + // `!${dir}/ansible_collections/*/*/plugins/modules/_*.py`, + // ]); + // console.log(`globby files ${files.length} -> `, files); + // console.log(`glob files ${files2.length} -> `, files2); break; case "collection_doc_fragment": - files = await globby([ + files = await globArray([ `${dir}/ansible_collections/*/*/plugins/doc_fragments/*.py`, `!${dir}/ansible_collections/*/*/plugins/doc_fragments/_*.py`, ]); + // files2 = globArray([ + // `${dir}/ansible_collections/*/*/plugins/doc_fragments/*.py`, + // `!${dir}/ansible_collections/*/*/plugins/doc_fragments/_*.py`, + // ]); + // console.log(`globby files ${files.length} -> `, files); + // console.log(`glob files ${files2.length} -> `, files2); break; } return files.map((file) => { @@ -80,14 +102,22 @@ export async function findPluginRouting( if (!fs.existsSync(dir) || fs.lstatSync(dir).isFile()) { return pluginRouting; } - const globby = await getGlobby(); + // const globby = await getGlobby(); let files; switch (kind) { case "builtin": - files = await globby([`${dir}/config/ansible_builtin_runtime.yml`]); + files = await globArray([`${dir}/config/ansible_builtin_runtime.yml`]); + // files2 = globArray([`${dir}/config/ansible_builtin_runtime.yml`]); + // console.log(`globby files ${files.length} -> `, files); + // console.log(`glob files ${files2.length} -> `, files2); break; case "collection": - files = await globby([`${dir}/ansible_collections/*/*/meta/runtime.yml`]); + files = await globArray([ + `${dir}/ansible_collections/*/*/meta/runtime.yml`, + ]); + // files2 = globArray([`${dir}/ansible_collections/*/*/meta/runtime.yml`]); + // console.log(`globby files ${files.length} -> `, files); + // console.log(`glob files ${files2.length} -> `, files2); break; } for (const file of files) { @@ -113,10 +143,41 @@ export async function findPluginRouting( return pluginRouting; } -async function getGlobby() { - return ( - await (Function('return import("globby")')() as Promise< - typeof import("globby") - >) - ).globby; +/** + * A glob utility function that that accepts array of patterns and also + * excludes matching patterns that begin with '!' from the returned array + * @param arrayOfPatterns array of patterns + * @returns matched files + */ +export function globArray(arrayOfPatterns: string[]): string[] { + // Patterns to be matched + const matchPatterns = arrayOfPatterns.filter( + (pattern) => !pattern.startsWith("!") + ); + + // Patterns to be excluded + const ignorePatterns = arrayOfPatterns + .filter((pattern) => pattern.startsWith("!")) + .map((item) => item.slice(1)); + + let matchFiles = []; + matchPatterns.forEach((pattern) => { + const matchedFiles = glob.sync(pattern); + matchFiles = matchFiles.concat(matchedFiles); + }); + const matchFilesSet = new Set(matchFiles); + + if (ignorePatterns.length === 0) { + return [...matchFilesSet]; + } else { + let matchFilesAfterExclusion = []; + matchPatterns.forEach((pattern) => { + const ignoredFiles = glob.sync(pattern, { + ignore: ignorePatterns, + }); + matchFilesAfterExclusion = matchFilesAfterExclusion.concat(ignoredFiles); + }); + const matchFilesAfterExclusionSet = new Set(matchFilesAfterExclusion); + return [...matchFilesAfterExclusionSet]; + } } diff --git a/test/fixtures/utils/docsFinder/1.py b/test/fixtures/utils/docsFinder/1.py new file mode 100644 index 000000000..952aada05 --- /dev/null +++ b/test/fixtures/utils/docsFinder/1.py @@ -0,0 +1 @@ +print("test file for glob") diff --git a/test/fixtures/utils/docsFinder/10.json b/test/fixtures/utils/docsFinder/10.json new file mode 100644 index 000000000..8792853f1 --- /dev/null +++ b/test/fixtures/utils/docsFinder/10.json @@ -0,0 +1,3 @@ +{ + "var": "test file for glob" +} diff --git a/test/fixtures/utils/docsFinder/2.py b/test/fixtures/utils/docsFinder/2.py new file mode 100644 index 000000000..952aada05 --- /dev/null +++ b/test/fixtures/utils/docsFinder/2.py @@ -0,0 +1 @@ +print("test file for glob") diff --git a/test/fixtures/utils/docsFinder/3.py b/test/fixtures/utils/docsFinder/3.py new file mode 100644 index 000000000..952aada05 --- /dev/null +++ b/test/fixtures/utils/docsFinder/3.py @@ -0,0 +1 @@ +print("test file for glob") diff --git a/test/fixtures/utils/docsFinder/4.yml b/test/fixtures/utils/docsFinder/4.yml new file mode 100644 index 000000000..3648c2dfc --- /dev/null +++ b/test/fixtures/utils/docsFinder/4.yml @@ -0,0 +1 @@ +var: test file for glob diff --git a/test/fixtures/utils/docsFinder/5.yml b/test/fixtures/utils/docsFinder/5.yml new file mode 100644 index 000000000..3648c2dfc --- /dev/null +++ b/test/fixtures/utils/docsFinder/5.yml @@ -0,0 +1 @@ +var: test file for glob diff --git a/test/fixtures/utils/docsFinder/6.yaml b/test/fixtures/utils/docsFinder/6.yaml new file mode 100644 index 000000000..3648c2dfc --- /dev/null +++ b/test/fixtures/utils/docsFinder/6.yaml @@ -0,0 +1 @@ +var: test file for glob diff --git a/test/fixtures/utils/docsFinder/_7.py b/test/fixtures/utils/docsFinder/_7.py new file mode 100644 index 000000000..952aada05 --- /dev/null +++ b/test/fixtures/utils/docsFinder/_7.py @@ -0,0 +1 @@ +print("test file for glob") diff --git a/test/fixtures/utils/docsFinder/_8.py b/test/fixtures/utils/docsFinder/_8.py new file mode 100644 index 000000000..952aada05 --- /dev/null +++ b/test/fixtures/utils/docsFinder/_8.py @@ -0,0 +1 @@ +print("test file for glob") diff --git a/test/fixtures/utils/docsFinder/_9.py b/test/fixtures/utils/docsFinder/_9.py new file mode 100644 index 000000000..952aada05 --- /dev/null +++ b/test/fixtures/utils/docsFinder/_9.py @@ -0,0 +1 @@ +print("test file for glob") diff --git a/test/utils/docsFinder.test.ts b/test/utils/docsFinder.test.ts new file mode 100644 index 000000000..0eedb9fad --- /dev/null +++ b/test/utils/docsFinder.test.ts @@ -0,0 +1,48 @@ +import { expect } from "chai"; +import path = require("path"); +import { globArray } from "../../src/utils/docsFinder"; + +describe("docsFinder", () => { + const dir = path.resolve(__dirname, "..", "fixtures", "utils", "docsFinder"); + describe("globArray()", () => { + const tests = [ + { + name: "multiple patterns with '{}'", + pattern: [`${dir}/*.{yaml,yml}`], + filteredFiles: [`${dir}/4.yml`, `${dir}/5.yml`, `${dir}/6.yaml`], + }, + { + name: "array of file patterns", + pattern: [`${dir}/*.yml`, `${dir}/*.json`], + filteredFiles: [`${dir}/4.yml`, `${dir}/5.yml`, `${dir}/10.json`], + }, + { + name: "exclusion files with '!'", + pattern: [`${dir}/*.py`, `!${dir}/_*.py`], + filteredFiles: [`${dir}/1.py`, `${dir}/2.py`, `${dir}/3.py`], + }, + { + name: "array of file patterns and exclusion files with '!'", + pattern: [ + `${dir}/*.py`, + `${dir}/*.{yaml,yml}`, + `!${dir}/_*.py`, + `!${dir}/*.yml`, + ], + filteredFiles: [ + `${dir}/1.py`, + `${dir}/2.py`, + `${dir}/3.py`, + `${dir}/6.yaml`, + ], + }, + ]; + + tests.forEach(({ name, pattern, filteredFiles }) => { + it(`should provide file path match for ${name}`, () => { + const actualResult = globArray(pattern); + expect(actualResult).to.have.members(filteredFiles); + }); + }); + }); +}); From 1e1876407b9c4f2076514da0f34fc67d7e1fc159 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Tue, 12 Apr 2022 08:58:49 +0530 Subject: [PATCH 332/558] Move glob utils to different utils file (#299) * Move glob utils to different utils file * Move glob utils function into a path utils file * Remove commented out code * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add changelog file * fix ci failure and rename test file Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/changelog-fragments.d/299.misc.md | 2 + src/utils/docsFinder.ts | 70 +------------------ src/utils/pathUtils.ts | 40 +++++++++++ .../{docsFinder.test.ts => pathUtils.test.ts} | 2 +- 4 files changed, 44 insertions(+), 70 deletions(-) create mode 100644 docs/changelog-fragments.d/299.misc.md create mode 100644 src/utils/pathUtils.ts rename test/utils/{docsFinder.test.ts => pathUtils.test.ts} (96%) diff --git a/docs/changelog-fragments.d/299.misc.md b/docs/changelog-fragments.d/299.misc.md new file mode 100644 index 000000000..d37bb53e4 --- /dev/null +++ b/docs/changelog-fragments.d/299.misc.md @@ -0,0 +1,2 @@ +Moved glob utils into a separate utils file and remove commented code -- by +{user}`ganeshrn` diff --git a/src/utils/docsFinder.ts b/src/utils/docsFinder.ts index f8fef28f3..e0a7afad5 100644 --- a/src/utils/docsFinder.ts +++ b/src/utils/docsFinder.ts @@ -7,7 +7,7 @@ import { IPluginRoutesByType, IPluginRoutingByCollection, } from "../interfaces/pluginRouting"; -import { glob } from "glob"; +import { globArray } from "./pathUtils"; export async function findDocumentation( dir: string, @@ -20,50 +20,28 @@ export async function findDocumentation( if (!fs.existsSync(dir) || fs.lstatSync(dir).isFile()) { return []; } - // const globby = await getGlobby(); let files; switch (kind) { case "builtin": files = await globArray([`${dir}/**/*.py`, "!/**/_*.py"]); - // files2 = globArray([`${dir}/**/*.py`, "!/**/_*.py"]); - // console.log(`globby files ${files.length} -> `, files); - // console.log(`glob files ${files2.length} -> `, files2); break; case "builtin_doc_fragment": files = await globArray([ `${path.resolve(dir, "../")}/plugins/doc_fragments/*.py`, "!/**/_*.py", ]); - // files2 = globArray([ - // `${path.resolve(dir, "../")}/plugins/doc_fragments/*.py`, - // "!/**/_*.py", - // ]); - // console.log(`globby files ${files.length} -> `, files); - // console.log(`glob files ${files2.length} -> `, files2); break; case "collection": files = await globArray([ `${dir}/ansible_collections/*/*/plugins/modules/*.py`, `!${dir}/ansible_collections/*/*/plugins/modules/_*.py`, ]); - // files2 = globArray([ - // `${dir}/ansible_collections/*/*/plugins/modules/*.py`, - // `!${dir}/ansible_collections/*/*/plugins/modules/_*.py`, - // ]); - // console.log(`globby files ${files.length} -> `, files); - // console.log(`glob files ${files2.length} -> `, files2); break; case "collection_doc_fragment": files = await globArray([ `${dir}/ansible_collections/*/*/plugins/doc_fragments/*.py`, `!${dir}/ansible_collections/*/*/plugins/doc_fragments/_*.py`, ]); - // files2 = globArray([ - // `${dir}/ansible_collections/*/*/plugins/doc_fragments/*.py`, - // `!${dir}/ansible_collections/*/*/plugins/doc_fragments/_*.py`, - // ]); - // console.log(`globby files ${files.length} -> `, files); - // console.log(`glob files ${files2.length} -> `, files2); break; } return files.map((file) => { @@ -102,22 +80,15 @@ export async function findPluginRouting( if (!fs.existsSync(dir) || fs.lstatSync(dir).isFile()) { return pluginRouting; } - // const globby = await getGlobby(); let files; switch (kind) { case "builtin": files = await globArray([`${dir}/config/ansible_builtin_runtime.yml`]); - // files2 = globArray([`${dir}/config/ansible_builtin_runtime.yml`]); - // console.log(`globby files ${files.length} -> `, files); - // console.log(`glob files ${files2.length} -> `, files2); break; case "collection": files = await globArray([ `${dir}/ansible_collections/*/*/meta/runtime.yml`, ]); - // files2 = globArray([`${dir}/ansible_collections/*/*/meta/runtime.yml`]); - // console.log(`globby files ${files.length} -> `, files); - // console.log(`glob files ${files2.length} -> `, files2); break; } for (const file of files) { @@ -142,42 +113,3 @@ export async function findPluginRouting( return pluginRouting; } - -/** - * A glob utility function that that accepts array of patterns and also - * excludes matching patterns that begin with '!' from the returned array - * @param arrayOfPatterns array of patterns - * @returns matched files - */ -export function globArray(arrayOfPatterns: string[]): string[] { - // Patterns to be matched - const matchPatterns = arrayOfPatterns.filter( - (pattern) => !pattern.startsWith("!") - ); - - // Patterns to be excluded - const ignorePatterns = arrayOfPatterns - .filter((pattern) => pattern.startsWith("!")) - .map((item) => item.slice(1)); - - let matchFiles = []; - matchPatterns.forEach((pattern) => { - const matchedFiles = glob.sync(pattern); - matchFiles = matchFiles.concat(matchedFiles); - }); - const matchFilesSet = new Set(matchFiles); - - if (ignorePatterns.length === 0) { - return [...matchFilesSet]; - } else { - let matchFilesAfterExclusion = []; - matchPatterns.forEach((pattern) => { - const ignoredFiles = glob.sync(pattern, { - ignore: ignorePatterns, - }); - matchFilesAfterExclusion = matchFilesAfterExclusion.concat(ignoredFiles); - }); - const matchFilesAfterExclusionSet = new Set(matchFilesAfterExclusion); - return [...matchFilesAfterExclusionSet]; - } -} diff --git a/src/utils/pathUtils.ts b/src/utils/pathUtils.ts new file mode 100644 index 000000000..e493ac777 --- /dev/null +++ b/src/utils/pathUtils.ts @@ -0,0 +1,40 @@ +import { glob } from "glob"; + +/** + * A glob utility function that that accepts array of patterns and also + * excludes matching patterns that begin with '!' from the returned array + * @param arrayOfPatterns array of patterns + * @returns matched files + */ +export function globArray(arrayOfPatterns: string[]): string[] { + // Patterns to be matched + const matchPatterns = arrayOfPatterns.filter( + (pattern) => !pattern.startsWith("!") + ); + + // Patterns to be excluded + const ignorePatterns = arrayOfPatterns + .filter((pattern) => pattern.startsWith("!")) + .map((item) => item.slice(1)); + + let matchFiles = []; + matchPatterns.forEach((pattern) => { + const matchedFiles = glob.sync(pattern); + matchFiles = matchFiles.concat(matchedFiles); + }); + const matchFilesSet = new Set(matchFiles); + + if (ignorePatterns.length === 0) { + return [...matchFilesSet]; + } else { + let matchFilesAfterExclusion = []; + matchPatterns.forEach((pattern) => { + const ignoredFiles = glob.sync(pattern, { + ignore: ignorePatterns, + }); + matchFilesAfterExclusion = matchFilesAfterExclusion.concat(ignoredFiles); + }); + const matchFilesAfterExclusionSet = new Set(matchFilesAfterExclusion); + return [...matchFilesAfterExclusionSet]; + } +} diff --git a/test/utils/docsFinder.test.ts b/test/utils/pathUtils.test.ts similarity index 96% rename from test/utils/docsFinder.test.ts rename to test/utils/pathUtils.test.ts index 0eedb9fad..4c1dcba8e 100644 --- a/test/utils/docsFinder.test.ts +++ b/test/utils/pathUtils.test.ts @@ -1,6 +1,6 @@ import { expect } from "chai"; import path = require("path"); -import { globArray } from "../../src/utils/docsFinder"; +import { globArray } from "../../src/utils/pathUtils"; describe("docsFinder", () => { const dir = path.resolve(__dirname, "..", "fixtures", "utils", "docsFinder"); From 50a0d41dd6fc985eadec99b7331535d8b2b38151 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Tue, 12 Apr 2022 11:00:35 +0530 Subject: [PATCH 333/558] Add vscode extension e2e test in CI (#289) * Add vscode extension e2e test in CI * Add CI job to run test-e2e suite from vscode-ansible extension to ensure changes in PR does not break vscode-ansible extension * add new line * Update vscode.yml * update vscode workflow * install ansible-language-server dependecies * install test dependecies * update test name Co-authored-by: Sorin Sbarnea Co-authored-by: Sorin Sbarnea --- .github/workflows/vscode.yml | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/.github/workflows/vscode.yml b/.github/workflows/vscode.yml index 82a0cf209..8e4e87397 100644 --- a/.github/workflows/vscode.yml +++ b/.github/workflows/vscode.yml @@ -8,10 +8,15 @@ on: jobs: ui-test: - name: >- - test:ui + name: vscode-ansible-main-branch-test-suite runs-on: ubuntu-latest steps: + - name: Install test dependencies + run: | + python -m pip install --user --upgrade pip + PIP_CONSTRAINTS=requirements.txt python -m pip install --user ansible-core ansible-lint + echo "$HOME/.local/bin" >> $GITHUB_PATH + # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#adding-a-system-path - name: Checkout ansible-language-server uses: actions/checkout@v2 @@ -37,11 +42,16 @@ jobs: mv vscode-ansible .. pushd ../vscode-ansible npm ci # Install vscode-ansible dependencies + cd ../ansible-language-server + npm ci # Install ansible-language-server dependencies + cd ../vscode-ansible rm -rf node_modules/@ansible/ansible-language-server + rm -rf out/server/src/* cp -r ../ansible-language-server node_modules/@ansible/ansible-language-server npm ls # npm install --save ../ansible-language-server - npm run package + npm run webpack + npm run vsce # we need to bring vsix artifact inside workspace cp *.vsix ../ansible-language-server/ @@ -60,3 +70,9 @@ jobs: with: run: sh -c "npm run test-ui && cp *.vsix ../ansible-language-server/" working-directory: ../vscode-ansible + + - name: Run test-e2e with vscode-ansible + uses: GabrielBB/xvfb-action@v1 + with: + run: sh -c "npm run test-e2e && cp *.vsix ../ansible-language-server/" + working-directory: ../vscode-ansible From 775f7bdcc6ab7e69565b443c7dce7703b7e31119 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 12 Apr 2022 08:08:14 +0100 Subject: [PATCH 334/558] Refactor user of python dependencies (#298) See: https://github.com/ansible/devtools/wiki/tox#dependency-pinning --- .config/dictionary.txt | 25 ++++---- .readthedocs.yml | 8 ++- docs/requirements.in | 11 ---- docs/requirements.txt | 133 ----------------------------------------- requirements.in | 5 -- requirements.txt | 49 ++++++++++++++- setup.cfg | 19 ++++++ tox.ini | 10 +--- 8 files changed, 86 insertions(+), 174 deletions(-) delete mode 100644 docs/requirements.in delete mode 100644 docs/requirements.txt delete mode 100644 requirements.in create mode 100644 setup.cfg diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 752cf404b..4c9156a6a 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -1,7 +1,17 @@ -alphanums Ansible +Dpkg +FQCN +FQCNs +HORIZONTALLINE +Jenkinsfile +PYTHONHOME +TLDR +WSLENV +YOLO +alphanums ansible ansiblefest +apidoc autocrlf autofix autoupdate @@ -20,17 +30,12 @@ dirhtml docker doctree doctrees -Dpkg dunamai endfor eqeqeq -FQCN -FQCNs globbing globby -HORIZONTALLINE installdeps -Jenkinsfile jsdoc lcov libyaml @@ -47,6 +52,7 @@ neovim netcommon nocolor notest +notfound npmjs nvim parseable @@ -56,16 +62,16 @@ podman prettierrc preversion pyparsing -PYTHONHOME pyup seealso +setuptools showcontent +sphinxcontrib stderr stdout suboption suboptions testorg -TLDR toctree todos towncrier @@ -79,11 +85,8 @@ whereis withserver wordwrap workdir -WSLENV xvfb yammlint -YOLO - # names and usernames: Ganesh Maciążek diff --git a/.readthedocs.yml b/.readthedocs.yml index 1175e8a24..3732836cf 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -32,7 +32,9 @@ build: # to build docs python: install: - - requirements: docs/requirements.txt + # We also defined PIP_CONSTRAINTS=requirements.txt on readthedocs config + - method: pip + path: . + extra_requirements: + - docs system_packages: false - -... diff --git a/docs/requirements.in b/docs/requirements.in deleted file mode 100644 index 0a061e318..000000000 --- a/docs/requirements.in +++ /dev/null @@ -1,11 +0,0 @@ -MarkupSafe<2.1.0 # https://github.com/pallets/markupsafe/issues/282 -myst-parser[linkify] >= 0.15.1 -setuptools-scm >= 6.0.1 -Sphinx >= 4.1.2, < 4.4.0 # https://github.com/sphinx-doc/sphinx/issues/10112 -sphinx-ansible-theme >= 0.8.0 -sphinx-favicon >= 0.2 -sphinx-js >= 3.1.2 -sphinx-notfound-page >= 0.7.1 -sphinxcontrib-apidoc >= 0.3.0 -sphinxcontrib-spelling >= 7.2.0 -sphinxcontrib-towncrier >= 0.2.0a0 diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index 74cb3975a..000000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,133 +0,0 @@ -# -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: -# -# pip-compile --output-file=docs/requirements.txt --strip-extras docs/requirements.in -# -alabaster==0.7.12 - # via sphinx -ansible-pygments==0.1.0 - # via sphinx-ansible-theme -attrs==21.2.0 - # via markdown-it-py -babel==2.9.1 - # via sphinx -certifi==2021.10.8 - # via requests -charset-normalizer==2.0.8 - # via requests -click==8.1.2 - # via towncrier -click-default-group==1.2.2 - # via towncrier -docutils==0.17.1 - # via - # myst-parser - # sphinx - # sphinx-rtd-theme -idna==3.3 - # via requests -imagesize==1.3.0 - # via sphinx -incremental==21.3.0 - # via towncrier -jinja2==2.11.3 - # via - # myst-parser - # sphinx - # sphinx-js - # towncrier -linkify-it-py==1.0.2 - # via myst-parser -markdown-it-py==1.1.0 - # via - # mdit-py-plugins - # myst-parser -markupsafe==2.0.1 - # via - # -r docs/requirements.in - # jinja2 -mdit-py-plugins==0.2.8 - # via myst-parser -myst-parser==0.15.2 - # via -r docs/requirements.in -packaging==21.3 - # via - # setuptools-scm - # sphinx -parsimonious==0.7.0 - # via sphinx-js -pbr==5.8.0 - # via sphinxcontrib-apidoc -pyenchant==3.2.2 - # via sphinxcontrib-spelling -pygments==2.10.0 - # via - # ansible-pygments - # sphinx -pyparsing==3.0.7 - # via packaging -pytz==2021.3 - # via babel -pyyaml==6.0 - # via myst-parser -requests==2.26.0 - # via sphinx -setuptools-scm==6.3.2 - # via -r docs/requirements.in -six==1.16.0 - # via parsimonious -snowballstemmer==2.2.0 - # via sphinx -sphinx==4.3.1 - # via - # -r docs/requirements.in - # myst-parser - # sphinx-ansible-theme - # sphinx-favicon - # sphinx-js - # sphinx-rtd-theme - # sphinxcontrib-apidoc - # sphinxcontrib-spelling - # sphinxcontrib-towncrier -sphinx-ansible-theme==0.8.0 - # via -r docs/requirements.in -sphinx-favicon==0.2 - # via -r docs/requirements.in -sphinx-js==3.1.2 - # via -r docs/requirements.in -sphinx-notfound-page==0.8 - # via -r docs/requirements.in -sphinx-rtd-theme==1.0.0 - # via sphinx-ansible-theme -sphinxcontrib-apidoc==0.3.0 - # via -r docs/requirements.in -sphinxcontrib-applehelp==1.0.2 - # via sphinx -sphinxcontrib-devhelp==1.0.2 - # via sphinx -sphinxcontrib-htmlhelp==2.0.0 - # via sphinx -sphinxcontrib-jsmath==1.0.1 - # via sphinx -sphinxcontrib-qthelp==1.0.3 - # via sphinx -sphinxcontrib-serializinghtml==1.1.5 - # via sphinx -sphinxcontrib-spelling==7.3.2 - # via -r docs/requirements.in -sphinxcontrib-towncrier==0.2.0a0 - # via -r docs/requirements.in -toml==0.10.2 - # via towncrier -tomli==1.2.2 - # via setuptools-scm -towncrier==21.3.0 - # via sphinxcontrib-towncrier -uc-micro-py==1.0.1 - # via linkify-it-py -urllib3==1.26.7 - # via requests - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/requirements.in b/requirements.in deleted file mode 100644 index 2413b1589..000000000 --- a/requirements.in +++ /dev/null @@ -1,5 +0,0 @@ -ansible-lint>=6.0.2 -click -lxml -pre-commit -pyparsing diff --git a/requirements.txt b/requirements.txt index f46f07708..99d03a607 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,40 +2,83 @@ # This file is autogenerated by pip-compile with python 3.10 # To update, run: # -# pip-compile --no-annotate --output-file=requirements.txt requirements.in +# pip-compile --extra=docs --extra=test --no-annotate --output-file=requirements.txt setup.cfg # +alabaster==0.7.12 ansible-compat==2.0.2 ansible-core==2.12.4 ansible-lint==6.0.2 +ansible-pygments==0.1.1 +attrs==21.4.0 +babel==2.9.1 bracex==2.2.1 +certifi==2021.10.8 cffi==1.15.0 cfgv==3.3.1 +charset-normalizer==2.0.12 click==8.1.2 +click-default-group==1.2.2 commonmark==0.9.1 cryptography==36.0.2 distlib==0.3.4 +docutils==0.17.1 enrich==1.2.7 filelock==3.6.0 identify==2.4.11 -jinja2==3.0.3 +idna==3.3 +imagesize==1.3.0 +incremental==21.3.0 +jinja2==2.11.3 +linkify-it-py==1.0.3 lxml==4.8.0 -markupsafe==2.1.1 +markdown-it-py==2.0.1 +markupsafe==2.0.1 +mdit-py-plugins==0.3.0 +mdurl==0.1.0 +myst-parser[linkify]==0.17.0 nodeenv==1.6.0 packaging==21.3 +parsimonious==0.7.0 pathspec==0.9.0 +pbr==5.8.1 platformdirs==2.5.1 pre-commit==2.18.1 pycparser==2.21 +pyenchant==3.2.2 pygments==2.11.2 pyparsing==3.0.7 +pytz==2022.1 pyyaml==6.0 +requests==2.27.1 resolvelib==0.5.4 rich==12.0.0 ruamel-yaml==0.17.21 ruamel-yaml-clib==0.2.6 +setuptools-scm==6.4.2 six==1.16.0 +snowballstemmer==2.2.0 +sphinx==4.3.2 +sphinx-ansible-theme==0.9.1 +sphinx-favicon==0.2 +sphinx-js==3.1.2 +sphinx-notfound-page==0.8 +sphinx-rtd-theme==1.0.0 +sphinxcontrib-apidoc==0.3.0 +sphinxcontrib-applehelp==1.0.2 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==2.0.0 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.5 +sphinxcontrib-spelling==7.3.2 +sphinxcontrib-towncrier==0.2.1a0 subprocess-tee==0.3.5 toml==0.10.2 +tomli==2.0.1 +towncrier==21.9.0 +typing-extensions==4.1.1 +uc-micro-py==1.0.1 +urllib3==1.26.9 virtualenv==20.13.3 wcmatch==8.3 yamllint==1.26.3 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 000000000..8691d1ac2 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,19 @@ +[options.extras_require] +test = + ansible-lint>=6.0.2 + click + lxml + pre-commit + pyparsing +docs = + MarkupSafe<2.1.0 # https://github.com/pallets/markupsafe/issues/282 + myst-parser[linkify] >= 0.15.1 + setuptools-scm >= 6.0.1 + Sphinx >= 4.1.2, < 4.4.0 # https://github.com/sphinx-doc/sphinx/issues/10112 + sphinx-ansible-theme >= 0.8.0 + sphinx-favicon >= 0.2 + sphinx-js >= 3.1.2 + sphinx-notfound-page >= 0.7.1 + sphinxcontrib-apidoc >= 0.3.0 + sphinxcontrib-spelling >= 7.2.0 + sphinxcontrib-towncrier >= 0.2.0a0 diff --git a/tox.ini b/tox.ini index db7e4478b..4ad0bee0f 100644 --- a/tox.ini +++ b/tox.ini @@ -74,9 +74,7 @@ commands_pre = commands = # dependabot supports only 'requirements.txt' filename but we use it as # a constraints files - bash -c "PIP_CONSTRAINTS= pip-compile -q --no-annotate \ - -r requirements.in \ - -o requirements.txt" + bash -c "PIP_CONSTRAINTS= pip-compile -q --extra docs --extra test --no-annotate setup.cfg -o requirements.txt" [testenv:docs] changedir = {toxinidir}/docs @@ -104,11 +102,7 @@ commands = "=" * 120)' deps = - -r{toxinidir}/docs/requirements.txt - # FIXME: re-enable the "-r" + "-c" paradigm once the pip bug is fixed. - # Ref: https://github.com/pypa/pip/issues/9243 - # -r{toxinidir}/docs/requirements.in - # -c{toxinidir}/docs/requirements.txt + -e .[docs] description = Build The Docs passenv = SSH_AUTH_SOCK From dfbebfb280918781e6dcf8aec8117d53dd662479 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Wed, 13 Apr 2022 16:00:57 +0530 Subject: [PATCH 335/558] Add utility to sync als version for devel CI job (#301) * Add utility to sync als version for devel CI job * Add python utility to copy ansible-language-server version to the vscode-ansible pacakage.json file for testing with main branch * fix ci failure * remove unwanted line --- .github/workflows/vscode.yml | 14 ++++++++++---- tools/version_sync.py | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 tools/version_sync.py diff --git a/.github/workflows/vscode.yml b/.github/workflows/vscode.yml index 8e4e87397..9ddae875b 100644 --- a/.github/workflows/vscode.yml +++ b/.github/workflows/vscode.yml @@ -8,7 +8,7 @@ on: jobs: ui-test: - name: vscode-ansible-main-branch-test-suite + name: devel-vscode-ansible runs-on: ubuntu-latest steps: - name: Install test dependencies @@ -40,11 +40,17 @@ jobs: run: | set -ex mv vscode-ansible .. + + # workaround to sync the latest version of ansible-language-server + # in the vscode-ansible package.json to avoid npm related failures while vsce packaging + python tools/version_sync.py + + npm install # update ansible-language-server package-lock.json + npm ci # Install ansible-language-server dependencies + pushd ../vscode-ansible + npm install # update vscode-ansible package-lock.json npm ci # Install vscode-ansible dependencies - cd ../ansible-language-server - npm ci # Install ansible-language-server dependencies - cd ../vscode-ansible rm -rf node_modules/@ansible/ansible-language-server rm -rf out/server/src/* cp -r ../ansible-language-server node_modules/@ansible/ansible-language-server diff --git a/tools/version_sync.py b/tools/version_sync.py new file mode 100644 index 000000000..0f3af1425 --- /dev/null +++ b/tools/version_sync.py @@ -0,0 +1,22 @@ +# utility to sync ansible-language-server version with vscode-ansible devel +# pylint: disable=unused-import +import json + + +def sync_als_version_in_vscode_ansible_devel(): + with open("package.json") as als_fp: + package_json_als = json.load(als_fp) + version_als = package_json_als["version"] + + with open("../vscode-ansible/package.json") as fp: + package_json_vscode_ansible = json.load(fp) + + package_json_vscode_ansible["dependencies"][ + "@ansible/ansible-language-server" + ] = version_als + with open("../vscode-ansible/package.json", "w") as fp: + json.dump(package_json_vscode_ansible, fp, indent=4) + + +if __name__ == "__main__": + sync_als_version_in_vscode_ansible_devel() From 5fa5a1e9eb6270e71ebccf25e7c1574db4e8e463 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 13 Apr 2022 12:04:09 +0100 Subject: [PATCH 336/558] Bump version to v0.6.0 (#300) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- CHANGELOG.md | 35 +++++++++++++++++++++++ docs/changelog-fragments.d/285.bugfix.md | 2 -- docs/changelog-fragments.d/288.feature.md | 2 -- docs/changelog-fragments.d/294.feature.md | 3 -- docs/changelog-fragments.d/295.bugfix.md | 3 -- docs/changelog-fragments.d/299.misc.md | 2 -- package-lock.json | 4 +-- package.json | 2 +- 8 files changed, 38 insertions(+), 15 deletions(-) delete mode 100644 docs/changelog-fragments.d/285.bugfix.md delete mode 100644 docs/changelog-fragments.d/288.feature.md delete mode 100644 docs/changelog-fragments.d/294.feature.md delete mode 100644 docs/changelog-fragments.d/295.bugfix.md delete mode 100644 docs/changelog-fragments.d/299.misc.md diff --git a/CHANGELOG.md b/CHANGELOG.md index b298bc19d..1b77cb5b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,41 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag +## v0.6.0 (2022-04-12) + +### Bugfixes + +- Fixed indentation issue while resolving auto-completion items to support + editors like vim and neovim -- by {user}`yaegassy` + + ({issue}`285`) + +- Fixed globby issue by replacing it with glob and writing utility function to + support array of file patterns and file path exclusion patterns -- by + {user}`priyamsahoo` + + ({issue}`295`) + +### Features + +- Added auto-completion for values of module options and sub-options -- by + {user}`tomaciazek` + + ({issue}`288`) + +- Refactored settings structure in the code to include descriptions and added + utility for updating the settings doc to keep in sync with it -- by + {user}`priyamsahoo` + + ({issue}`294`) + +### Miscellaneous + +- Moved glob utils into a separate utils file and remove commented code -- by + {user}`ganeshrn` + + ({issue}`299`) + ## v0.5.4 (2022-03-31) ### Bugfixes diff --git a/docs/changelog-fragments.d/285.bugfix.md b/docs/changelog-fragments.d/285.bugfix.md deleted file mode 100644 index e2e166082..000000000 --- a/docs/changelog-fragments.d/285.bugfix.md +++ /dev/null @@ -1,2 +0,0 @@ -Fixed indentation issue while resolving auto-completion items to support editors -like vim and neovim -- by {user}`yaegassy` diff --git a/docs/changelog-fragments.d/288.feature.md b/docs/changelog-fragments.d/288.feature.md deleted file mode 100644 index 5b37f6496..000000000 --- a/docs/changelog-fragments.d/288.feature.md +++ /dev/null @@ -1,2 +0,0 @@ -Added auto-completion for values of module options and sub-options -- by -{user}`tomaciazek` diff --git a/docs/changelog-fragments.d/294.feature.md b/docs/changelog-fragments.d/294.feature.md deleted file mode 100644 index 830c8eca8..000000000 --- a/docs/changelog-fragments.d/294.feature.md +++ /dev/null @@ -1,3 +0,0 @@ -Refactored settings structure in the code to include descriptions and added -utility for updating the settings doc to keep in sync with it -- by -{user}`priyamsahoo` diff --git a/docs/changelog-fragments.d/295.bugfix.md b/docs/changelog-fragments.d/295.bugfix.md deleted file mode 100644 index f6e1f1cd0..000000000 --- a/docs/changelog-fragments.d/295.bugfix.md +++ /dev/null @@ -1,3 +0,0 @@ -Fixed globby issue by replacing it with glob and writing utility function to -support array of file patterns and file path exclusion patterns -- by -{user}`priyamsahoo` diff --git a/docs/changelog-fragments.d/299.misc.md b/docs/changelog-fragments.d/299.misc.md deleted file mode 100644 index d37bb53e4..000000000 --- a/docs/changelog-fragments.d/299.misc.md +++ /dev/null @@ -1,2 +0,0 @@ -Moved glob utils into a separate utils file and remove commented code -- by -{user}`ganeshrn` diff --git a/package-lock.json b/package-lock.json index 0545e5b3c..4618f657e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.5.4", + "version": "0.6.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.5.4", + "version": "0.6.0", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index d2797c411..c5a909dfe 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.5.4", + "version": "0.6.0", "contributors": [ { "name": "Tomasz Maciążek", From 23dd56fe8a530a468f09af7874fa18418708d5c2 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 13 Apr 2022 12:34:15 +0100 Subject: [PATCH 337/558] Remove release cleanup pipeline (#302) --- .github/workflows/ci.yml | 40 ---------------------------------------- 1 file changed, 40 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a5db86d57..1ebf64ead 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -890,43 +890,3 @@ jobs: '${{ needs.github-release-pull-request.outputs.pull_request_url }}' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - clean-up-on-failure-or-cancellation: - name: Close release PR and branch on failure - # ... when publishing to Npmjs was canceled or failed - - if: >- # necessary so that the check is always performed - !success() - && fromJSON(needs.pre-setup.outputs.release-requested) - - needs: - # If these fail, there's no point in keeping the branch. - # Besides, a pre-existing PR or a branch can break workflows - # when the same version re-release is requested. - - github-release-pull-request - - pre-setup # transitive, for accessing settings - - publish-npmjs - - runs-on: Ubuntu-latest - - permissions: - contents: write # Needed to drop the branch - - steps: - - name: Check out src from Git - # ... to pre-provision the GH token in the env - uses: actions/checkout@v2.3.4 - with: - fetch-depth: 1 - - - name: Delete the release branch and the PR - # ... but only in the event of a failure to create a PR or - # make a release to Npmjs - run: >- - git push - --atomic - -d origin - 'release/${{ needs.pre-setup.outputs.dist-version }}' - || : - -... From 78a2bf482d5e594f4a5d112684ff3a7d46462828 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 13 Apr 2022 13:41:32 +0100 Subject: [PATCH 338/558] Fix execution of tox -e deps (#303) --- requirements.txt | 4 ++-- tox.ini | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/requirements.txt b/requirements.txt index 99d03a607..e23a39ed3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with python 3.10 # To update, run: # -# pip-compile --extra=docs --extra=test --no-annotate --output-file=requirements.txt setup.cfg +# pip-compile --extra=docs --extra=test --no-annotate --output-file=requirements.txt --strip-extras setup.cfg # alabaster==0.7.12 ansible-compat==2.0.2 @@ -35,7 +35,7 @@ markdown-it-py==2.0.1 markupsafe==2.0.1 mdit-py-plugins==0.3.0 mdurl==0.1.0 -myst-parser[linkify]==0.17.0 +myst-parser==0.17.0 nodeenv==1.6.0 packaging==21.3 parsimonious==0.7.0 diff --git a/tox.ini b/tox.ini index 4ad0bee0f..39b71e4b5 100644 --- a/tox.ini +++ b/tox.ini @@ -68,13 +68,12 @@ description = Bump all test dependencies # Using py310 in order to make pip-compile consistent. basepython = python3.10 deps = - -c requirements.txt pip-tools >= 6.5.1 commands_pre = commands = # dependabot supports only 'requirements.txt' filename but we use it as # a constraints files - bash -c "PIP_CONSTRAINTS= pip-compile -q --extra docs --extra test --no-annotate setup.cfg -o requirements.txt" + bash -c "PIP_CONSTRAINTS= pip-compile -q --extra docs --extra test --strip-extras --no-annotate setup.cfg -o requirements.txt" [testenv:docs] changedir = {toxinidir}/docs From 277aa8cde12fd5962a9acf8ad7439d3d12b353ba Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Thu, 14 Apr 2022 11:54:08 +0530 Subject: [PATCH 339/558] move handlebars to dev dependencies (#305) --- package-lock.json | 40 ++++++++++++++++++++++++++-------------- package.json | 2 +- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4618f657e..8b2ef568c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "@flatten-js/interval-tree": "^1.0.18", "glob": "^7.2.0", - "handlebars": "^4.7.7", "ini": "^2.0.0", "lodash": "^4.17.21", "uuid": "^8.3.2", @@ -38,6 +37,7 @@ "eslint": "^8.10.0", "eslint-config-prettier": "^8.4.0", "fuse.js": "^6.5.3", + "handlebars": "^4.7.7", "mocha": "^9.2.1", "npm-check-updates": "^12.5.0", "nyc": "^15.1.0", @@ -2790,6 +2790,7 @@ "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -3749,7 +3750,8 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "node_modules/minipass": { "version": "3.1.6", @@ -3981,7 +3983,8 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, "node_modules/node-gyp": { "version": "8.4.1", @@ -5424,6 +5427,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5777,9 +5781,10 @@ } }, "node_modules/uglify-js": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", - "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", + "version": "3.15.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", + "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", + "dev": true, "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -6009,7 +6014,8 @@ "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true }, "node_modules/workerpool": { "version": "6.2.0", @@ -8219,6 +8225,7 @@ "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -8951,7 +8958,8 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "minipass": { "version": "3.1.6", @@ -9127,7 +9135,8 @@ "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, "node-gyp": { "version": "8.4.1", @@ -10212,7 +10221,8 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "source-map-support": { "version": "0.5.21", @@ -10474,9 +10484,10 @@ "dev": true }, "uglify-js": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", - "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", + "version": "3.15.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", + "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", + "dev": true, "optional": true }, "unique-filename": { @@ -10667,7 +10678,8 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true }, "workerpool": { "version": "6.2.0", diff --git a/package.json b/package.json index c5a909dfe..3b87a69ce 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,6 @@ "dependencies": { "@flatten-js/interval-tree": "^1.0.18", "glob": "^7.2.0", - "handlebars": "^4.7.7", "ini": "^2.0.0", "lodash": "^4.17.21", "uuid": "^8.3.2", @@ -67,6 +66,7 @@ "eslint": "^8.10.0", "eslint-config-prettier": "^8.4.0", "fuse.js": "^6.5.3", + "handlebars": "^4.7.7", "mocha": "^9.2.1", "npm-check-updates": "^12.5.0", "nyc": "^15.1.0", From 08188f3a7c7cd23075326d111461ab3d33fc6ad9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 14 Apr 2022 08:38:07 +0100 Subject: [PATCH 340/558] Bump version to v0.6.1 (#306) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- CHANGELOG.md | 4 ++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b77cb5b5..94eb73913 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,10 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag +## v0.6.1 (2022-04-14) + +No significant changes. + ## v0.6.0 (2022-04-12) ### Bugfixes diff --git a/package-lock.json b/package-lock.json index 8b2ef568c..05ad419bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.6.0", + "version": "0.6.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.6.0", + "version": "0.6.1", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 3b87a69ce..4d4ebd185 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.6.0", + "version": "0.6.1", "contributors": [ { "name": "Tomasz Maciążek", From e0f05b83e4d0d6c98b1ed4d10282b4518b97e91e Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 14 Apr 2022 11:58:32 +0100 Subject: [PATCH 341/558] Bump npm dependencies (#308) --- package-lock.json | 1858 ++++++++++++++++++++++++++------------------- package.json | 32 +- tox.ini | 1 + 3 files changed, 1107 insertions(+), 784 deletions(-) diff --git a/package-lock.json b/package-lock.json index 05ad419bd..38bd88ddb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,41 +10,41 @@ "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", - "glob": "^7.2.0", - "ini": "^2.0.0", + "glob": "^8.0.1", + "ini": "^3.0.0", "lodash": "^4.17.21", "uuid": "^8.3.2", "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.4", "vscode-uri": "^3.0.3", - "yaml": "^1.10.2" + "yaml": "^1.10.2 <2.0" }, "bin": { "ansible-language-server": "bin/ansible-language-server" }, "devDependencies": { - "@types/chai": "^4.3.0", + "@types/chai": "^4.3.1", "@types/glob": "^7.2.0", "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.179", + "@types/lodash": "^4.14.181", "@types/mocha": "^9.1.0", - "@types/node": "^17.0.21", + "@types/node": "^17.0.24", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.64.0", - "@typescript-eslint/eslint-plugin": "^5.13.0", - "@typescript-eslint/parser": "^5.13.0", + "@types/vscode": "^1.66.0", + "@typescript-eslint/eslint-plugin": "^5.19.0", + "@typescript-eslint/parser": "^5.19.0", "chai": "^4.3.6", - "eslint": "^8.10.0", - "eslint-config-prettier": "^8.4.0", + "eslint": "^8.13.0", + "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.5.3", "handlebars": "^4.7.7", - "mocha": "^9.2.1", - "npm-check-updates": "^12.5.0", + "mocha": "^9.2.2", + "npm-check-updates": "^12.5.9", "nyc": "^15.1.0", - "prettier": "^2.5.1", + "prettier": "^2.6.2", "rimraf": "^3.0.2", - "ts-node": "^10.6.0", - "typescript": "^4.6.2" + "ts-node": "^10.7.0", + "typescript": "^4.6.3" }, "engines": { "node": ">=12.0", @@ -533,16 +533,16 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", - "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -558,15 +558,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -741,23 +732,26 @@ } }, "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", "dev": true, "dependencies": { - "@gar/promisify": "^1.0.1", + "@gar/promisify": "^1.1.3", "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/git": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.0.tgz", - "integrity": "sha512-xfSBJ+KBMZWWqRHFbEgIaXG/LtELHrQZMJ72Gkb3yWdHysu/7+VGOs8ME0c3td7QNQX57Ggo3kYL6ylcd70/kA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", + "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", "dev": true, "dependencies": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^7.3.1", + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", "npm-pick-manifest": "^7.0.0", "proc-log": "^2.0.0", @@ -767,13 +761,13 @@ "which": "^2.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.4.0.tgz", - "integrity": "sha512-YOfuyWa/Ee+PXbDm40j9WXyJrzQUynVbgn4Km643UYcWNcrSfRkKL0WaiUcxcIbkXcVTgNpDqSnPXntWXT75cw==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", "dev": true, "engines": { "node": ">=12" @@ -796,46 +790,52 @@ } }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", "dev": true, "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/node-gyp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", "dev": true, "dependencies": { "infer-owner": "^1.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/run-script": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.0.tgz", - "integrity": "sha512-jIdmUepw+kVP2WEE/+XrBIvrSF5miDutdGBrQ8May6uHVAvpAb0m3NRHcJ0lKWbQ1BxsRFsmTrjkdY99qTTVIw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.2.tgz", + "integrity": "sha512-vdjD/PMBl+OX9j9C9irx5sCCIKfp2PWkpPNH9zxvlJAfSZ3Qp5aU412v+O3PFJl3R1PFNwuyChCqHg4ma6ci2Q==", "dev": true, "dependencies": { - "@npmcli/node-gyp": "^1.0.3", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.4.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", "read-package-json-fast": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@sindresorhus/is": { @@ -860,12 +860,12 @@ } }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/@tsconfig/node10": { @@ -893,9 +893,9 @@ "dev": true }, "node_modules/@types/chai": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", - "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", "dev": true }, "node_modules/@types/glob": { @@ -915,15 +915,15 @@ "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.179", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz", - "integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==", + "version": "4.14.181", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", + "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==", "dev": true }, "node_modules/@types/minimatch": { @@ -939,9 +939,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", "dev": true }, "node_modules/@types/uuid": { @@ -951,20 +951,20 @@ "dev": true }, "node_modules/@types/vscode": { - "version": "1.64.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.64.0.tgz", - "integrity": "sha512-bSlAWz5WtcSL3cO9tAT/KpEH9rv5OBnm93OIIFwdCshaAiqr2bp1AUyEwW9MWeCvZBHEXc3V0fTYVdVyzDNwHA==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.66.0.tgz", + "integrity": "sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.13.0.tgz", - "integrity": "sha512-vLktb2Uec81fxm/cfz2Hd6QaWOs8qdmVAZXLdOBX6JFJDhf6oDZpMzZ4/LZ6SFM/5DgDcxIMIvy3F+O9yZBuiQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.19.0.tgz", + "integrity": "sha512-w59GpFqDYGnWFim9p6TGJz7a3qWeENJuAKCqjGSx+Hq/bwq3RZwXYqy98KIfN85yDqz9mq6QXiY5h0FjGQLyEg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.13.0", - "@typescript-eslint/type-utils": "5.13.0", - "@typescript-eslint/utils": "5.13.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/type-utils": "5.19.0", + "@typescript-eslint/utils": "5.19.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -990,14 +990,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.13.0.tgz", - "integrity": "sha512-GdrU4GvBE29tm2RqWOM0P5QfCtgCyN4hXICj/X9ibKED16136l9ZpoJvCL5pSKtmJzA+NRDzQ312wWMejCVVfg==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.19.0.tgz", + "integrity": "sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.13.0", - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/typescript-estree": "5.13.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/typescript-estree": "5.19.0", "debug": "^4.3.2" }, "engines": { @@ -1017,13 +1017,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.13.0.tgz", - "integrity": "sha512-T4N8UvKYDSfVYdmJq7g2IPJYCRzwtp74KyDZytkR4OL3NRupvswvmJQJ4CX5tDSurW2cvCc1Ia1qM7d0jpa7IA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz", + "integrity": "sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/visitor-keys": "5.13.0" + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/visitor-keys": "5.19.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1034,12 +1034,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.13.0.tgz", - "integrity": "sha512-/nz7qFizaBM1SuqAKb7GLkcNn2buRdDgZraXlkhz+vUGiN1NZ9LzkA595tHHeduAiS2MsHqMNhE2zNzGdw43Yg==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.19.0.tgz", + "integrity": "sha512-O6XQ4RI4rQcBGshTQAYBUIGsKqrKeuIOz9v8bckXZnSeXjn/1+BDZndHLe10UplQeJLXDNbaZYrAytKNQO2T4Q==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.13.0", + "@typescript-eslint/utils": "5.19.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -1060,9 +1060,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.13.0.tgz", - "integrity": "sha512-LmE/KO6DUy0nFY/OoQU0XelnmDt+V8lPQhh8MOVa7Y5k2gGRd6U9Kp3wAjhB4OHg57tUO0nOnwYQhRRyEAyOyg==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.19.0.tgz", + "integrity": "sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1073,13 +1073,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.13.0.tgz", - "integrity": "sha512-Q9cQow0DeLjnp5DuEDjLZ6JIkwGx3oYZe+BfcNuw/POhtpcxMTy18Icl6BJqTSd+3ftsrfuVb7mNHRZf7xiaNA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz", + "integrity": "sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/visitor-keys": "5.13.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/visitor-keys": "5.19.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -1099,45 +1099,16 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@typescript-eslint/utils": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.13.0.tgz", - "integrity": "sha512-+9oHlPWYNl6AwwoEt5TQryEHwiKRVjz7Vk6kaBeD3/kwHE5YqTGHtm/JZY8Bo9ITOeKutFaXnBlMgSATMJALUQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.19.0.tgz", + "integrity": "sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.13.0", - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/typescript-estree": "5.13.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/typescript-estree": "5.19.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -1153,12 +1124,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.13.0.tgz", - "integrity": "sha512-HLKEAS/qA1V7d9EzcpLFykTePmOQqOFim8oCvhY3pZgQ8Hi38hYpHd9e5GN6nQBFQNecNhws5wkS9Y5XIO0s/g==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz", + "integrity": "sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/types": "5.19.0", "eslint-visitor-keys": "^3.0.0" }, "engines": { @@ -1431,6 +1402,7 @@ "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" @@ -1484,38 +1456,70 @@ "dev": true }, "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.0.tgz", + "integrity": "sha512-aizhtbxgT1Udg0Fj6GssXshAVK+nxbtCV+1OtTrMNy67jffDFBY6CUBAkhO4owbleAx6fdbnWdpsmmcXydbzNw==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } }, "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.4.tgz", + "integrity": "sha512-U0D4wF3/W8ZgK4qDA5fTtOVSr0gaDfd5aa7tUdAV0uukVWKsAIn6SzXQCoVlg7RWZiJa+bcsM3/pXLumGaL2Ug==", "dev": true, "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", + "fs-minipass": "^2.1.0", + "glob": "^7.2.0", "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", "unique-filename": "^1.1.1" }, "engines": { - "node": ">= 10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true, + "engines": { + "node": ">=12" } }, "node_modules/cacache/node_modules/p-map": { @@ -1802,9 +1806,9 @@ } }, "node_modules/commander": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", - "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.1.0.tgz", + "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", "dev": true, "engines": { "node": "^12.20.0 || >=14" @@ -1819,7 +1823,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/configstore": { "version": "5.0.1", @@ -2123,12 +2128,12 @@ } }, "node_modules/eslint": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", - "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", + "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.2.0", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -2175,9 +2180,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", - "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -2609,12 +2614,11 @@ } }, "node_modules/gauge": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz", - "integrity": "sha512-aSPRm2CvA9R8QyU5eXMFPd+cYkyxLsXHd2l5/FOH2V/eml//M04G6KZOmTap07O1PvEwNcl2NndyLfK8g3QrKA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1", "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", "console-control-strings": "^1.1.0", @@ -2625,7 +2629,7 @@ "wide-align": "^1.1.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/gensync": { @@ -2689,19 +2693,19 @@ } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz", + "integrity": "sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^5.0.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -2719,6 +2723,25 @@ "node": ">= 6" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/global-dirs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", @@ -2734,10 +2757,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2749,6 +2781,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -2878,15 +2930,24 @@ } }, "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.5.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true, + "engines": { + "node": ">=12" } }, "node_modules/html-escaper": { @@ -2902,12 +2963,12 @@ "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "dependencies": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" }, @@ -2960,12 +3021,33 @@ } }, "node_modules/ignore-walk": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", - "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", "dev": true, "dependencies": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" @@ -3035,11 +3117,11 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", + "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/ip": { @@ -3679,30 +3761,39 @@ "dev": true }, "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==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.2.tgz", + "integrity": "sha512-GWMGiZsKVeJACQGJ1P3Z+iNec7pLsU6YW1q11eaPn3RR8nRXHppFWfP7Eu0//55JK3hSjrAQRl8sDa5uXpq1Ew==", "dev": true, "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "agentkeepalive": "^4.2.1", + "cacache": "^16.0.2", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "socks-proxy-agent": "^6.1.1", + "ssri": "^9.0.0" }, "engines": { - "node": ">= 10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true, + "engines": { + "node": ">=12" } }, "node_modules/merge2": { @@ -3740,6 +3831,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3778,20 +3870,20 @@ } }, "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, "dependencies": { - "minipass": "^3.1.0", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { - "encoding": "^0.1.12" + "encoding": "^0.1.13" } }, "node_modules/minipass-flush": { @@ -3866,9 +3958,9 @@ } }, "node_modules/mocha": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz", - "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", @@ -3884,9 +3976,9 @@ "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "3.0.4", + "minimatch": "4.2.1", "ms": "2.1.3", - "nanoid": "3.2.0", + "nanoid": "3.3.1", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -3914,6 +4006,38 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/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/mocha/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -3926,6 +4050,18 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/mocha/node_modules/minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3954,9 +4090,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -3987,15 +4123,15 @@ "dev": true }, "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==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", + "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", "dev": true, "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", + "make-fetch-happen": "^10.0.3", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", @@ -4007,7 +4143,27 @@ "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 10.12.0" + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/node-preload": { @@ -4044,18 +4200,18 @@ } }, "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", "dev": true, "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/normalize-path": { @@ -4086,32 +4242,32 @@ } }, "node_modules/npm-check-updates": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.0.tgz", - "integrity": "sha512-nrryXO9IZdJsAIXo8LdtllrsGiTDE4IMAod7fl1jd5C38tOdZZG/crNNii4IkctxltQRmK/ziZwsMDTlhszZXg==", + "version": "12.5.9", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.9.tgz", + "integrity": "sha512-l9iOvD7EsQb96gFJL45V01YG6bP8+dmobYnSguvehPuNwgdWNMrE8RC8bSfURX5iUmX4bkobN4T8XMHXN9GMHA==", "dev": true, "dependencies": { "chalk": "^4.1.2", "cint": "^8.2.1", "cli-table": "^0.3.11", - "commander": "^9.0.0", + "commander": "^9.1.0", "fast-memoize": "^2.5.2", "find-up": "5.0.0", "fp-and-or": "^0.1.3", "get-stdin": "^8.0.0", "globby": "^11.0.4", - "hosted-git-info": "^4.1.0", + "hosted-git-info": "^5.0.0", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", "libnpmconfig": "^1.2.1", "lodash": "^4.17.21", - "minimatch": "^5.0.0", + "minimatch": "^5.0.1", "p-map": "^4.0.0", - "pacote": "^13.0.2", + "pacote": "^13.0.5", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts": "^2.4.2", - "rc-config-loader": "^4.0.0", + "rc-config-loader": "^4.1.0", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", @@ -4138,26 +4294,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/npm-check-updates/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-check-updates/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -4185,25 +4321,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-check-updates/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", + "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", "dev": true, "dependencies": { "semver": "^7.1.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm-normalize-package-bin": { @@ -4213,127 +4340,88 @@ "dev": true }, "node_modules/npm-package-arg": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.0.tgz", - "integrity": "sha512-yhzXxeor+Zfhe5MGwPdDumz6HtNlj2pMekWB95IX3CC6uDNgde0oPKHDCLDPoJqQfd0HqAWt+y4Hs5m7CK1+9Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.2.tgz", + "integrity": "sha512-v/miORuX8cndiOheW8p2moNuPJ7QhcFh9WGlTorruG8hXSA23vMTEp5hTCmDxic0nD8KHhj/NQgFuySD3GYY3g==", "dev": true, "dependencies": { - "hosted-git-info": "^4.1.0", + "hosted-git-info": "^5.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm-packlist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", - "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.0.0.tgz", + "integrity": "sha512-uU20UwM4Hogfab1Q7htJbhcyafM9lGHxOrDjkKvR2S3z7Ds0uRaESk0cXctczk+ABT4DZWNwjB10xlurFdEwZg==", "dev": true, "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^4.0.1", - "npm-bundled": "^1.1.1", + "glob": "^7.2.0", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" }, "bin": { "npm-packlist": "bin/index.js" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm-pick-manifest": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.0.tgz", - "integrity": "sha512-njM1AcdioFaKd0JSGtLO09YA1WRwctjGQJbnHGmKS+u+uwP8oFvtZtOQWPYdxrnY5eJud3wn8OpH4sEIx6+GEQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", + "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", "dev": true, "dependencies": { - "npm-install-checks": "^4.0.0", + "npm-install-checks": "^5.0.0", "npm-normalize-package-bin": "^1.0.1", "npm-package-arg": "^9.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm-registry-fetch": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.0.0.tgz", - "integrity": "sha512-MmiMuV9DU5gRuAU0jia952Qq+E4h7ZoUaeltCXivhClcqfOVKqNLZEQsRUOb6a8WQY+um8x97JcUuaWFoPoBBw==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.0.tgz", + "integrity": "sha512-TIYL5X8CcwDhbFMXFDShNcpG6OMCYK6VzvSr6MUWP20tCU2DJ4ao2qQg3DT+3Pet8mO6/cgbZpon4LMh3duYLg==", "dev": true, "dependencies": { - "make-fetch-happen": "^10.0.2", + "make-fetch-happen": "^10.0.6", "minipass": "^3.1.6", - "minipass-fetch": "^1.4.1", + "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.0", + "npm-package-arg": "^9.0.1", "proc-log": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm-registry-fetch/node_modules/lru-cache": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.4.0.tgz", - "integrity": "sha512-YOfuyWa/Ee+PXbDm40j9WXyJrzQUynVbgn4Km643UYcWNcrSfRkKL0WaiUcxcIbkXcVTgNpDqSnPXntWXT75cw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.0.3.tgz", - "integrity": "sha512-CzarPHynPpHjhF5in/YapnO44rSZeYX5VCMfdXa99+gLwpbfFLh20CWa6dP/taV9Net9PWJwXNKtp/4ZTCQnag==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.0", - "cacache": "^15.3.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.3.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.4.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.1.1", - "ssri": "^8.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npmlog": { @@ -4434,6 +4522,26 @@ "node": ">=8" } }, + "node_modules/nyc/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/nyc/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -4662,38 +4770,38 @@ } }, "node_modules/pacote": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.0.3.tgz", - "integrity": "sha512-8thQ06YoO01O1k5rvSpHS/XPJZucw2DPiiT1jI+ys8QaTN6ifAyxfyoABHBa8nIt/4wPdzly4GEPqshctHFoYA==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.1.1.tgz", + "integrity": "sha512-MTT3k1OhUo+IpvoHGp25OwsRU0L+kJQM236OCywxvY4OIJ/YfloNW2/Yc3HMASH10BkfZaGMVK/pxybB7fWcLw==", "dev": true, "dependencies": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^3.0.0", - "cacache": "^15.3.0", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^3.0.1", + "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", "minipass": "^3.1.6", "mkdirp": "^1.0.4", "npm-package-arg": "^9.0.0", - "npm-packlist": "^3.0.0", + "npm-packlist": "^5.0.0", "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", + "npm-registry-fetch": "^13.0.1", "proc-log": "^2.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^4.1.1", + "read-package-json": "^5.0.0", "read-package-json-fast": "^2.0.3", "rimraf": "^3.0.2", - "ssri": "^8.0.1", + "ssri": "^9.0.0", "tar": "^6.1.11" }, "bin": { "pacote": "lib/bin.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/parent-module": { @@ -4865,24 +4973,27 @@ } }, "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/proc-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.0.tgz", - "integrity": "sha512-I/35MfCX2H8jBUhKN8JB8nmqvQo/nKdrBodBY7L3RhDSPPyvOHwLYNmPuhwuJq7a7C3vgFKWGQM+ecPStcvOHA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/process-on-spawn": { @@ -5014,9 +5125,9 @@ } }, "node_modules/rc-config-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.0.0.tgz", - "integrity": "sha512-//LRTblJEcqbmmro1GCmZ39qZXD+JqzuD8Y5/IZU3Dhp3A1Yr0Xn68ks8MQ6qKfKvYCWDveUmRDKDA40c+sCXw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.0.tgz", + "integrity": "sha512-aW+kX4qy0CiM9L4fG4Us3oEOpIrOrXzWykAn+xldD07Y9PXWjTH744oHbv0Kc9ZwWaylw3jMjxaf14RgStrNrA==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -5059,18 +5170,18 @@ } }, "node_modules/read-package-json": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.1.tgz", - "integrity": "sha512-P82sbZJ3ldDrWCOSKxJT0r/CXMWR0OR3KRh55SgKo3p91GSIEEC32v3lSHAvO/UcH3/IoL7uqhOFBduAnwdldw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.0.tgz", + "integrity": "sha512-1cjk2MV5ONDMn34uxSID3X8NY7VKsXfJnjbcVdFMvHEnJOBzU6MJ7/3yg6QFVZDq5/1yFNrKBUK9kGnonyGP2Q==", "dev": true, "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "glob": "^7.2.0", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/read-package-json-fast": { @@ -5086,6 +5197,26 @@ "node": ">=10" } }, + "node_modules/read-package-json/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -5245,6 +5376,26 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -5385,6 +5536,15 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -5507,15 +5667,15 @@ "dev": true }, "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.0.tgz", + "integrity": "sha512-Y1Z6J8UYnexKFN1R/hxUaYoY2LVdKEzziPmVAFKiKX8fiwvCJTVzn/xYE9TEWod5OVyNfIHHuVfIEuBClL/uJQ==", "dev": true, "dependencies": { "minipass": "^3.1.1" }, "engines": { - "node": ">= 8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/string_decoder": { @@ -5617,6 +5777,26 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -5654,9 +5834,9 @@ } }, "node_modules/ts-node": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.6.0.tgz", - "integrity": "sha512-CJen6+dfOXolxudBQXnVjRVvYTmTWbyz7cn+xq2XTsvnaXbHqr4gXSCNbS2Jj8yTZMuGwUoBESLaOkLascVVvg==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", + "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "0.7.0", @@ -5676,6 +5856,7 @@ "bin": { "ts-node": "dist/bin.js", "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" @@ -5768,9 +5949,9 @@ } }, "node_modules/typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -5781,9 +5962,9 @@ } }, "node_modules/uglify-js": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", - "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", + "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", "dev": true, "optional": true, "bin": { @@ -5909,12 +6090,15 @@ } }, "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, "dependencies": { - "builtins": "^1.0.3" + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/vscode-jsonrpc": { @@ -6527,16 +6711,16 @@ } }, "@eslint/eslintrc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", - "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -6549,12 +6733,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -6691,23 +6869,23 @@ } }, "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", "dev": true, "requires": { - "@gar/promisify": "^1.0.1", + "@gar/promisify": "^1.1.3", "semver": "^7.3.5" } }, "@npmcli/git": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.0.tgz", - "integrity": "sha512-xfSBJ+KBMZWWqRHFbEgIaXG/LtELHrQZMJ72Gkb3yWdHysu/7+VGOs8ME0c3td7QNQX57Ggo3kYL6ylcd70/kA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", + "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", "dev": true, "requires": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^7.3.1", + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", "npm-pick-manifest": "^7.0.0", "proc-log": "^2.0.0", @@ -6718,9 +6896,9 @@ }, "dependencies": { "lru-cache": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.4.0.tgz", - "integrity": "sha512-YOfuyWa/Ee+PXbDm40j9WXyJrzQUynVbgn4Km643UYcWNcrSfRkKL0WaiUcxcIbkXcVTgNpDqSnPXntWXT75cw==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", "dev": true } } @@ -6736,9 +6914,9 @@ } }, "@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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", "dev": true, "requires": { "mkdirp": "^1.0.4", @@ -6746,29 +6924,29 @@ } }, "@npmcli/node-gyp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", "dev": true }, "@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", "dev": true, "requires": { "infer-owner": "^1.0.4" } }, "@npmcli/run-script": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.0.tgz", - "integrity": "sha512-jIdmUepw+kVP2WEE/+XrBIvrSF5miDutdGBrQ8May6uHVAvpAb0m3NRHcJ0lKWbQ1BxsRFsmTrjkdY99qTTVIw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.2.tgz", + "integrity": "sha512-vdjD/PMBl+OX9j9C9irx5sCCIKfp2PWkpPNH9zxvlJAfSZ3Qp5aU412v+O3PFJl3R1PFNwuyChCqHg4ma6ci2Q==", "dev": true, "requires": { - "@npmcli/node-gyp": "^1.0.3", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^8.4.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", "read-package-json-fast": "^2.0.3" } }, @@ -6788,9 +6966,9 @@ } }, "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true }, "@tsconfig/node10": { @@ -6818,9 +6996,9 @@ "dev": true }, "@types/chai": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", - "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", "dev": true }, "@types/glob": { @@ -6840,15 +7018,15 @@ "dev": true }, "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "@types/lodash": { - "version": "4.14.179", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.179.tgz", - "integrity": "sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w==", + "version": "4.14.181", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", + "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==", "dev": true }, "@types/minimatch": { @@ -6864,9 +7042,9 @@ "dev": true }, "@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", "dev": true }, "@types/uuid": { @@ -6876,20 +7054,20 @@ "dev": true }, "@types/vscode": { - "version": "1.64.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.64.0.tgz", - "integrity": "sha512-bSlAWz5WtcSL3cO9tAT/KpEH9rv5OBnm93OIIFwdCshaAiqr2bp1AUyEwW9MWeCvZBHEXc3V0fTYVdVyzDNwHA==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.66.0.tgz", + "integrity": "sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.13.0.tgz", - "integrity": "sha512-vLktb2Uec81fxm/cfz2Hd6QaWOs8qdmVAZXLdOBX6JFJDhf6oDZpMzZ4/LZ6SFM/5DgDcxIMIvy3F+O9yZBuiQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.19.0.tgz", + "integrity": "sha512-w59GpFqDYGnWFim9p6TGJz7a3qWeENJuAKCqjGSx+Hq/bwq3RZwXYqy98KIfN85yDqz9mq6QXiY5h0FjGQLyEg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.13.0", - "@typescript-eslint/type-utils": "5.13.0", - "@typescript-eslint/utils": "5.13.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/type-utils": "5.19.0", + "@typescript-eslint/utils": "5.19.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -6899,102 +7077,80 @@ } }, "@typescript-eslint/parser": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.13.0.tgz", - "integrity": "sha512-GdrU4GvBE29tm2RqWOM0P5QfCtgCyN4hXICj/X9ibKED16136l9ZpoJvCL5pSKtmJzA+NRDzQ312wWMejCVVfg==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.19.0.tgz", + "integrity": "sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.13.0", - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/typescript-estree": "5.13.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/typescript-estree": "5.19.0", "debug": "^4.3.2" } }, "@typescript-eslint/scope-manager": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.13.0.tgz", - "integrity": "sha512-T4N8UvKYDSfVYdmJq7g2IPJYCRzwtp74KyDZytkR4OL3NRupvswvmJQJ4CX5tDSurW2cvCc1Ia1qM7d0jpa7IA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz", + "integrity": "sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g==", "dev": true, "requires": { - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/visitor-keys": "5.13.0" + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/visitor-keys": "5.19.0" } }, "@typescript-eslint/type-utils": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.13.0.tgz", - "integrity": "sha512-/nz7qFizaBM1SuqAKb7GLkcNn2buRdDgZraXlkhz+vUGiN1NZ9LzkA595tHHeduAiS2MsHqMNhE2zNzGdw43Yg==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.19.0.tgz", + "integrity": "sha512-O6XQ4RI4rQcBGshTQAYBUIGsKqrKeuIOz9v8bckXZnSeXjn/1+BDZndHLe10UplQeJLXDNbaZYrAytKNQO2T4Q==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.13.0", + "@typescript-eslint/utils": "5.19.0", "debug": "^4.3.2", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.13.0.tgz", - "integrity": "sha512-LmE/KO6DUy0nFY/OoQU0XelnmDt+V8lPQhh8MOVa7Y5k2gGRd6U9Kp3wAjhB4OHg57tUO0nOnwYQhRRyEAyOyg==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.19.0.tgz", + "integrity": "sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.13.0.tgz", - "integrity": "sha512-Q9cQow0DeLjnp5DuEDjLZ6JIkwGx3oYZe+BfcNuw/POhtpcxMTy18Icl6BJqTSd+3ftsrfuVb7mNHRZf7xiaNA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz", + "integrity": "sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/visitor-keys": "5.13.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/visitor-keys": "5.19.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" - }, - "dependencies": { - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } } }, "@typescript-eslint/utils": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.13.0.tgz", - "integrity": "sha512-+9oHlPWYNl6AwwoEt5TQryEHwiKRVjz7Vk6kaBeD3/kwHE5YqTGHtm/JZY8Bo9ITOeKutFaXnBlMgSATMJALUQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.19.0.tgz", + "integrity": "sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.13.0", - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/typescript-estree": "5.13.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/typescript-estree": "5.19.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.13.0.tgz", - "integrity": "sha512-HLKEAS/qA1V7d9EzcpLFykTePmOQqOFim8oCvhY3pZgQ8Hi38hYpHd9e5GN6nQBFQNecNhws5wkS9Y5XIO0s/g==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz", + "integrity": "sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.13.0", + "@typescript-eslint/types": "5.19.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -7200,6 +7356,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7240,37 +7397,60 @@ "dev": true }, "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.0.tgz", + "integrity": "sha512-aizhtbxgT1Udg0Fj6GssXshAVK+nxbtCV+1OtTrMNy67jffDFBY6CUBAkhO4owbleAx6fdbnWdpsmmcXydbzNw==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } }, "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.4.tgz", + "integrity": "sha512-U0D4wF3/W8ZgK4qDA5fTtOVSr0gaDfd5aa7tUdAV0uukVWKsAIn6SzXQCoVlg7RWZiJa+bcsM3/pXLumGaL2Ug==", "dev": true, "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", + "fs-minipass": "^2.1.0", + "glob": "^7.2.0", "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", "unique-filename": "^1.1.1" }, "dependencies": { + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + }, "p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -7478,9 +7658,9 @@ "dev": true }, "commander": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", - "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.1.0.tgz", + "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", "dev": true }, "commondir": { @@ -7492,7 +7672,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "configstore": { "version": "5.0.1", @@ -7733,12 +7914,12 @@ "dev": true }, "eslint": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", - "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", + "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.0", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -7818,9 +7999,9 @@ } }, "eslint-config-prettier": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", - "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true, "requires": {} }, @@ -8095,12 +8276,11 @@ "dev": true }, "gauge": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz", - "integrity": "sha512-aSPRm2CvA9R8QyU5eXMFPd+cYkyxLsXHd2l5/FOH2V/eml//M04G6KZOmTap07O1PvEwNcl2NndyLfK8g3QrKA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "requires": { - "ansi-regex": "^5.0.1", "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", "console-control-strings": "^1.1.0", @@ -8151,16 +8331,34 @@ } }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz", + "integrity": "sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^5.0.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "glob-parent": { @@ -8179,17 +8377,39 @@ "dev": true, "requires": { "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + } } }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -8286,12 +8506,20 @@ "dev": true }, "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + } } }, "html-escaper": { @@ -8307,12 +8535,12 @@ "dev": true }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "requires": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" } @@ -8353,12 +8581,32 @@ "dev": true }, "ignore-walk": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", - "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", "dev": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "import-fresh": { @@ -8410,9 +8658,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", + "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==" }, "ip": { "version": "1.1.5", @@ -8902,27 +9150,35 @@ "dev": true }, "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==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.2.tgz", + "integrity": "sha512-GWMGiZsKVeJACQGJ1P3Z+iNec7pLsU6YW1q11eaPn3RR8nRXHppFWfP7Eu0//55JK3hSjrAQRl8sDa5uXpq1Ew==", "dev": true, "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "agentkeepalive": "^4.2.1", + "cacache": "^16.0.2", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "socks-proxy-agent": "^6.1.1", + "ssri": "^9.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "dev": true + } } }, "merge2": { @@ -8951,6 +9207,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -8980,15 +9237,15 @@ } }, "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", + "encoding": "^0.1.13", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" } }, "minipass-flush": { @@ -9045,9 +9302,9 @@ "dev": true }, "mocha": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz", - "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -9063,9 +9320,9 @@ "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "3.0.4", + "minimatch": "4.2.1", "ms": "2.1.3", - "nanoid": "3.2.0", + "nanoid": "3.3.1", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -9082,6 +9339,31 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -9091,6 +9373,15 @@ "argparse": "^2.0.1" } }, + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -9115,9 +9406,9 @@ "dev": true }, "nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true }, "natural-compare": { @@ -9139,21 +9430,37 @@ "dev": true }, "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==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", + "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", "dev": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", + "make-fetch-happen": "^10.0.3", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.2", "which": "^2.0.2" + }, + "dependencies": { + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "node-preload": { @@ -9181,15 +9488,15 @@ } }, "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", "dev": true, "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" } }, "normalize-path": { @@ -9214,32 +9521,32 @@ } }, "npm-check-updates": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.0.tgz", - "integrity": "sha512-nrryXO9IZdJsAIXo8LdtllrsGiTDE4IMAod7fl1jd5C38tOdZZG/crNNii4IkctxltQRmK/ziZwsMDTlhszZXg==", + "version": "12.5.9", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.9.tgz", + "integrity": "sha512-l9iOvD7EsQb96gFJL45V01YG6bP8+dmobYnSguvehPuNwgdWNMrE8RC8bSfURX5iUmX4bkobN4T8XMHXN9GMHA==", "dev": true, "requires": { "chalk": "^4.1.2", "cint": "^8.2.1", "cli-table": "^0.3.11", - "commander": "^9.0.0", + "commander": "^9.1.0", "fast-memoize": "^2.5.2", "find-up": "5.0.0", "fp-and-or": "^0.1.3", "get-stdin": "^8.0.0", "globby": "^11.0.4", - "hosted-git-info": "^4.1.0", + "hosted-git-info": "^5.0.0", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", "libnpmconfig": "^1.2.1", "lodash": "^4.17.21", - "minimatch": "^5.0.0", + "minimatch": "^5.0.1", "p-map": "^4.0.0", - "pacote": "^13.0.2", + "pacote": "^13.0.5", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts": "^2.4.2", - "rc-config-loader": "^4.0.0", + "rc-config-loader": "^4.1.0", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", @@ -9259,20 +9566,6 @@ "balanced-match": "^1.0.0" } }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, "minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -9290,19 +9583,13 @@ "requires": { "aggregate-error": "^3.0.0" } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true } } }, "npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", + "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", "dev": true, "requires": { "semver": "^7.1.1" @@ -9315,102 +9602,69 @@ "dev": true }, "npm-package-arg": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.0.tgz", - "integrity": "sha512-yhzXxeor+Zfhe5MGwPdDumz6HtNlj2pMekWB95IX3CC6uDNgde0oPKHDCLDPoJqQfd0HqAWt+y4Hs5m7CK1+9Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.2.tgz", + "integrity": "sha512-v/miORuX8cndiOheW8p2moNuPJ7QhcFh9WGlTorruG8hXSA23vMTEp5hTCmDxic0nD8KHhj/NQgFuySD3GYY3g==", "dev": true, "requires": { - "hosted-git-info": "^4.1.0", + "hosted-git-info": "^5.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" } }, "npm-packlist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", - "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.0.0.tgz", + "integrity": "sha512-uU20UwM4Hogfab1Q7htJbhcyafM9lGHxOrDjkKvR2S3z7Ds0uRaESk0cXctczk+ABT4DZWNwjB10xlurFdEwZg==", "dev": true, "requires": { - "glob": "^7.1.6", - "ignore-walk": "^4.0.1", - "npm-bundled": "^1.1.1", + "glob": "^7.2.0", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" + }, + "dependencies": { + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "npm-pick-manifest": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.0.tgz", - "integrity": "sha512-njM1AcdioFaKd0JSGtLO09YA1WRwctjGQJbnHGmKS+u+uwP8oFvtZtOQWPYdxrnY5eJud3wn8OpH4sEIx6+GEQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", + "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", "dev": true, "requires": { - "npm-install-checks": "^4.0.0", + "npm-install-checks": "^5.0.0", "npm-normalize-package-bin": "^1.0.1", "npm-package-arg": "^9.0.0", "semver": "^7.3.5" } }, "npm-registry-fetch": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.0.0.tgz", - "integrity": "sha512-MmiMuV9DU5gRuAU0jia952Qq+E4h7ZoUaeltCXivhClcqfOVKqNLZEQsRUOb6a8WQY+um8x97JcUuaWFoPoBBw==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.0.tgz", + "integrity": "sha512-TIYL5X8CcwDhbFMXFDShNcpG6OMCYK6VzvSr6MUWP20tCU2DJ4ao2qQg3DT+3Pet8mO6/cgbZpon4LMh3duYLg==", "dev": true, "requires": { - "make-fetch-happen": "^10.0.2", + "make-fetch-happen": "^10.0.6", "minipass": "^3.1.6", - "minipass-fetch": "^1.4.1", + "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.0", + "npm-package-arg": "^9.0.1", "proc-log": "^2.0.0" - }, - "dependencies": { - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "lru-cache": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.4.0.tgz", - "integrity": "sha512-YOfuyWa/Ee+PXbDm40j9WXyJrzQUynVbgn4Km643UYcWNcrSfRkKL0WaiUcxcIbkXcVTgNpDqSnPXntWXT75cw==", - "dev": true - }, - "make-fetch-happen": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.0.3.tgz", - "integrity": "sha512-CzarPHynPpHjhF5in/YapnO44rSZeYX5VCMfdXa99+gLwpbfFLh20CWa6dP/taV9Net9PWJwXNKtp/4ZTCQnag==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.0", - "cacache": "^15.3.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.3.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.4.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.1.1", - "ssri": "^8.0.1" - } - } } }, "npmlog": { @@ -9493,6 +9747,20 @@ "path-exists": "^4.0.0" } }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -9668,31 +9936,31 @@ } }, "pacote": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.0.3.tgz", - "integrity": "sha512-8thQ06YoO01O1k5rvSpHS/XPJZucw2DPiiT1jI+ys8QaTN6ifAyxfyoABHBa8nIt/4wPdzly4GEPqshctHFoYA==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.1.1.tgz", + "integrity": "sha512-MTT3k1OhUo+IpvoHGp25OwsRU0L+kJQM236OCywxvY4OIJ/YfloNW2/Yc3HMASH10BkfZaGMVK/pxybB7fWcLw==", "dev": true, "requires": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^3.0.0", - "cacache": "^15.3.0", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^3.0.1", + "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", "minipass": "^3.1.6", "mkdirp": "^1.0.4", "npm-package-arg": "^9.0.0", - "npm-packlist": "^3.0.0", + "npm-packlist": "^5.0.0", "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", + "npm-registry-fetch": "^13.0.1", "proc-log": "^2.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^4.1.1", + "read-package-json": "^5.0.0", "read-package-json-fast": "^2.0.3", "rimraf": "^3.0.2", - "ssri": "^8.0.1", + "ssri": "^9.0.0", "tar": "^6.1.11" } }, @@ -9813,15 +10081,15 @@ "dev": true }, "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true }, "proc-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.0.tgz", - "integrity": "sha512-I/35MfCX2H8jBUhKN8JB8nmqvQo/nKdrBodBY7L3RhDSPPyvOHwLYNmPuhwuJq7a7C3vgFKWGQM+ecPStcvOHA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true }, "process-on-spawn": { @@ -9932,9 +10200,9 @@ } }, "rc-config-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.0.0.tgz", - "integrity": "sha512-//LRTblJEcqbmmro1GCmZ39qZXD+JqzuD8Y5/IZU3Dhp3A1Yr0Xn68ks8MQ6qKfKvYCWDveUmRDKDA40c+sCXw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.0.tgz", + "integrity": "sha512-aW+kX4qy0CiM9L4fG4Us3oEOpIrOrXzWykAn+xldD07Y9PXWjTH744oHbv0Kc9ZwWaylw3jMjxaf14RgStrNrA==", "dev": true, "requires": { "debug": "^4.1.1", @@ -9961,15 +10229,31 @@ } }, "read-package-json": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.1.tgz", - "integrity": "sha512-P82sbZJ3ldDrWCOSKxJT0r/CXMWR0OR3KRh55SgKo3p91GSIEEC32v3lSHAvO/UcH3/IoL7uqhOFBduAnwdldw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.0.tgz", + "integrity": "sha512-1cjk2MV5ONDMn34uxSID3X8NY7VKsXfJnjbcVdFMvHEnJOBzU6MJ7/3yg6QFVZDq5/1yFNrKBUK9kGnonyGP2Q==", "dev": true, "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "glob": "^7.2.0", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "dependencies": { + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "read-package-json-fast": { @@ -10093,6 +10377,22 @@ "dev": true, "requires": { "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "run-parallel": { @@ -10191,6 +10491,12 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -10293,9 +10599,9 @@ "dev": true }, "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.0.tgz", + "integrity": "sha512-Y1Z6J8UYnexKFN1R/hxUaYoY2LVdKEzziPmVAFKiKX8fiwvCJTVzn/xYE9TEWod5OVyNfIHHuVfIEuBClL/uJQ==", "dev": true, "requires": { "minipass": "^3.1.1" @@ -10374,6 +10680,22 @@ "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" + }, + "dependencies": { + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "text-table": { @@ -10404,9 +10726,9 @@ } }, "ts-node": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.6.0.tgz", - "integrity": "sha512-CJen6+dfOXolxudBQXnVjRVvYTmTWbyz7cn+xq2XTsvnaXbHqr4gXSCNbS2Jj8yTZMuGwUoBESLaOkLascVVvg==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", + "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", "dev": true, "requires": { "@cspotcode/source-map-support": "0.7.0", @@ -10478,15 +10800,15 @@ } }, "typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, "uglify-js": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", - "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", + "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", "dev": true, "optional": true }, @@ -10591,12 +10913,12 @@ } }, "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, "requires": { - "builtins": "^1.0.3" + "builtins": "^5.0.0" } }, "vscode-jsonrpc": { diff --git a/package.json b/package.json index 4d4ebd185..5812deddb 100644 --- a/package.json +++ b/package.json @@ -42,38 +42,38 @@ ], "dependencies": { "@flatten-js/interval-tree": "^1.0.18", - "glob": "^7.2.0", - "ini": "^2.0.0", + "glob": "^8.0.1", + "ini": "^3.0.0", "lodash": "^4.17.21", "uuid": "^8.3.2", "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.4", "vscode-uri": "^3.0.3", - "yaml": "^1.10.2" + "yaml": "^1.10.2 <2.0" }, "devDependencies": { - "@types/chai": "^4.3.0", + "@types/chai": "^4.3.1", "@types/glob": "^7.2.0", "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.179", + "@types/lodash": "^4.14.181", "@types/mocha": "^9.1.0", - "@types/node": "^17.0.21", + "@types/node": "^17.0.24", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.64.0", - "@typescript-eslint/eslint-plugin": "^5.13.0", - "@typescript-eslint/parser": "^5.13.0", + "@types/vscode": "^1.66.0", + "@typescript-eslint/eslint-plugin": "^5.19.0", + "@typescript-eslint/parser": "^5.19.0", "chai": "^4.3.6", - "eslint": "^8.10.0", - "eslint-config-prettier": "^8.4.0", + "eslint": "^8.13.0", + "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.5.3", "handlebars": "^4.7.7", - "mocha": "^9.2.1", - "npm-check-updates": "^12.5.0", + "mocha": "^9.2.2", + "npm-check-updates": "^12.5.9", "nyc": "^15.1.0", - "prettier": "^2.5.1", + "prettier": "^2.6.2", "rimraf": "^3.0.2", - "ts-node": "^10.6.0", - "typescript": "^4.6.2" + "ts-node": "^10.7.0", + "typescript": "^4.6.3" }, "scripts": { "clean": "rimraf out/server && rimraf lib", diff --git a/tox.ini b/tox.ini index 39b71e4b5..1cd248506 100644 --- a/tox.ini +++ b/tox.ini @@ -74,6 +74,7 @@ commands = # dependabot supports only 'requirements.txt' filename but we use it as # a constraints files bash -c "PIP_CONSTRAINTS= pip-compile -q --extra docs --extra test --strip-extras --no-annotate setup.cfg -o requirements.txt" + npm run deps [testenv:docs] changedir = {toxinidir}/docs From ff94030d4a9e0e471ff9324cc99805f61d7870cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:45:57 +0100 Subject: [PATCH 342/558] Bump ansible-core from 2.12.4 to 2.12.5 (#311) Bumps [ansible-core](https://github.com/ansible/ansible) from 2.12.4 to 2.12.5. - [Release notes](https://github.com/ansible/ansible/releases) - [Commits](https://github.com/ansible/ansible/commits) --- updated-dependencies: - dependency-name: ansible-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e23a39ed3..8bb44e8e7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ # alabaster==0.7.12 ansible-compat==2.0.2 -ansible-core==2.12.4 +ansible-core==2.12.5 ansible-lint==6.0.2 ansible-pygments==0.1.1 attrs==21.4.0 From c213ba7d66edd833efcd788bd732d1548b38f5d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 May 2022 12:36:47 +0100 Subject: [PATCH 343/558] Bump click from 8.1.2 to 8.1.3 (#313) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 8bb44e8e7..8d44cf757 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ certifi==2021.10.8 cffi==1.15.0 cfgv==3.3.1 charset-normalizer==2.0.12 -click==8.1.2 +click==8.1.3 click-default-group==1.2.2 commonmark==0.9.1 cryptography==36.0.2 From caf48d6bb225258c614f1faed32b56d8cfd152d2 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 3 May 2022 12:52:18 +0100 Subject: [PATCH 344/558] chore: avoid duplicate GHA builds (#315) --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1ebf64ead..3ed3117ea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,6 +5,8 @@ name: CI on: pull_request: push: + branches: # any integration branch but not tag + - "main" workflow_dispatch: inputs: release-version: From bfca1f4551a5b1eda77025dbce64998273b8988d Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 3 May 2022 13:22:24 +0100 Subject: [PATCH 345/558] chore: pre-commit hooks update (#316) --- .config/dictionary.txt | 16 ++++++++++++++++ .pre-commit-config.yaml | 6 +++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 4c9156a6a..8ca03dbd8 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -87,6 +87,22 @@ wordwrap workdir xvfb yammlint + +# sphinx: +pathsep +sectionauthor +moduleauthor +extlinks +intersphinx +viewcode +pageview +autoversion +deflist +smartquotes +nitpicky +topbar +opensearch + # names and usernames: Ganesh Maciążek diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 581d91c38..e40de910d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -50,12 +50,12 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v5.9.0 + rev: v5.9.1 hooks: - id: cspell name: Spell check with cspell - repo: https://github.com/pre-commit/pre-commit-hooks.git - rev: v4.1.0 + rev: v4.2.0 hooks: - id: end-of-file-fixer exclude: > @@ -102,7 +102,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.12.0 + rev: v8.14.0 hooks: - id: eslint args: From bc53939ab640eec2aa8872a95deaf6d9552c1585 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 May 2022 10:42:25 +0530 Subject: [PATCH 346/558] Bump pre-commit from 2.18.1 to 2.19.0 (#317) Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.18.1 to 2.19.0. - [Release notes](https://github.com/pre-commit/pre-commit/releases) - [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) - [Commits](https://github.com/pre-commit/pre-commit/compare/v2.18.1...v2.19.0) --- updated-dependencies: - dependency-name: pre-commit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 8d44cf757..67f322c0a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -42,7 +42,7 @@ parsimonious==0.7.0 pathspec==0.9.0 pbr==5.8.1 platformdirs==2.5.1 -pre-commit==2.18.1 +pre-commit==2.19.0 pycparser==2.21 pyenchant==3.2.2 pygments==2.11.2 From 8938c338f724b7397d7874c875a65e145619a929 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 May 2022 16:57:16 +0530 Subject: [PATCH 347/558] Bump ansible-compat from 2.0.2 to 2.0.3 (#320) Bumps [ansible-compat](https://github.com/ansible-community/ansible-compat) from 2.0.2 to 2.0.3. - [Release notes](https://github.com/ansible-community/ansible-compat/releases) - [Commits](https://github.com/ansible-community/ansible-compat/compare/v2.0.2...v2.0.3) --- updated-dependencies: - dependency-name: ansible-compat dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 67f322c0a..ce5707fbb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ # pip-compile --extra=docs --extra=test --no-annotate --output-file=requirements.txt --strip-extras setup.cfg # alabaster==0.7.12 -ansible-compat==2.0.2 +ansible-compat==2.0.3 ansible-core==2.12.5 ansible-lint==6.0.2 ansible-pygments==0.1.1 From a1591d0840abbfc31215e11f6021507caeb6f162 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 May 2022 18:19:53 +0530 Subject: [PATCH 348/558] Bump ansible-lint from 6.0.2 to 6.1.0 (#319) Bumps [ansible-lint](https://github.com/ansible-community/ansible-lint) from 6.0.2 to 6.1.0. - [Release notes](https://github.com/ansible-community/ansible-lint/releases) - [Commits](https://github.com/ansible-community/ansible-lint/compare/v6.0.2...v6.1.0) --- updated-dependencies: - dependency-name: ansible-lint dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ce5707fbb..8624e9ff8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ alabaster==0.7.12 ansible-compat==2.0.3 ansible-core==2.12.5 -ansible-lint==6.0.2 +ansible-lint==6.1.0 ansible-pygments==0.1.1 attrs==21.4.0 babel==2.9.1 From 08557b4cbe98994a050e6174e193ed763c61be40 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Wed, 11 May 2022 20:08:02 +0530 Subject: [PATCH 349/558] Add EE settings for volume mounts, container options and pull arguments (#318) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add EE settings for volume mounts, container options and pull arguments * Add settings to allow custom volume mount path eg: ``` "ansible.executionEnvironment.volumeMounts": [ { "src" : "/Users/home/common/collections", "dest": "/Users/home/common/collections" } ], ``` * Add setting to pass container options ``` "ansible.executionEnvironment.containerOptions": ["--net=host"] ``` * Add setting to pass container image pull arguments ``` "ansible.executionEnvironment.pull.arguments": ["–-tls-verify=false"] ``` * Move `execution-environment.pull-policy` setting to `execution-environment.pull.policy` * Add integration test for execution environment service and providers * add changelog * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add tmate session for debug * update tmate run * update tmate job in CI * update tmate job in CI * update tmate job in CI * Update test case with ee tags * add test scripts * fix review comments * update test matrix to run EE test based on OS * update CI workflow * update changelog * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .config/dictionary.txt | 2 + .github/workflows/ci.yml | 11 +- .github/workflows/npm.yml | 8 +- docs/changelog-fragments.d/318.feature.md | 31 + docs/settings.md | 27 +- package.json | 2 + src/interfaces/extensionSettings.ts | 36 +- src/services/ansibleConfig.ts | 9 +- src/services/executionEnvironment.ts | 245 +++-- src/services/settingsManager.ts | 39 +- src/services/workspaceManager.ts | 2 +- src/utils/imagePuller.ts | 14 +- test/fixtures/completion/simple_tasks.yml | 4 - test/helper.ts | 56 +- test/providers/completionProvider.test.ts | 1000 +++++++++++++-------- test/providers/completionResolver.test.ts | 432 +++++---- test/providers/hoverProvider.test.ts | 445 ++++++--- test/providers/validationProvider.test.ts | 950 ++++++++++++-------- 18 files changed, 2161 insertions(+), 1152 deletions(-) create mode 100644 docs/changelog-fragments.d/318.feature.md diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 8ca03dbd8..37b110b4c 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -87,6 +87,8 @@ wordwrap workdir xvfb yammlint +tls +ro # sphinx: pathsep diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3ed3117ea..8e22bce56 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -412,22 +412,28 @@ jobs: - name: test-node12-linux node-version: 12 os: ubuntu-latest + npm-target: test - name: test-node14-linux node-version: 14 os: ubuntu-latest + npm-target: test - name: test-node16-linux node-version: 16 os: ubuntu-latest + npm-target: test # macos - name: test-node12-macos node-version: 12 os: macos-11 + npm-target: test-without-ee - name: test-node14-macos node-version: 14 os: macos-11 + npm-target: test-without-ee - name: test-node16-macos node-version: 16 os: macos-11 + npm-target: test-without-ee # windows # TODO: revisit this after windows + wsl2 node # is enabled in CI @@ -516,8 +522,9 @@ jobs: - name: Log ansible-lint version if: runner.os != 'Windows' run: ansible-lint --version - - name: Run testing against the Git checkout - run: npm test + + - name: npm run ${{ matrix.npm-target }} against the Git checkout + run: npm run ${{ matrix.npm-target }} - name: Produce coverage report run: npm run coverage diff --git a/.github/workflows/npm.yml b/.github/workflows/npm.yml index 008c3e709..ad420d38e 100644 --- a/.github/workflows/npm.yml +++ b/.github/workflows/npm.yml @@ -28,7 +28,6 @@ jobs: matrix: os: - ubuntu-latest - - macos-11 npm-target: - test upload-artifact: @@ -37,10 +36,15 @@ jobs: - false include: - name: test (wsl) - npm-target: test + # runner does not support running container + npm-target: test-without-ee # https://github.com/actions/virtual-environments/issues/5151 os: windows-2019 shell: "wsl-bash {0}" + - name: test (macos) + os: macos-11 + # runner does not support running container + npm-target: test-without-ee steps: - name: Disable autocrlf diff --git a/docs/changelog-fragments.d/318.feature.md b/docs/changelog-fragments.d/318.feature.md new file mode 100644 index 000000000..32cb5636f --- /dev/null +++ b/docs/changelog-fragments.d/318.feature.md @@ -0,0 +1,31 @@ +````md +Added EE settings for volume mounts, container options and pull arguments -- by +{user}`ganeshrn` + +- Add settings to allow custom volume mount path eg: + +```code + "ansible.executionEnvironment.volumeMounts": [ + + { + "src" : "/Users/home/common/collections", + "dest": "/Users/home/common/collections" + } + ], +``` + +- Add setting to pass container options + +```code + "ansible.executionEnvironment.containerOptions": ["--net=host"] +``` + +- Add setting to pass container image pull arguments + +```code +"ansible.executionEnvironment.pull.arguments": ["–-tls-verify=false"] +``` + +- Move `execution-environment.pull-policy` setting to + `execution-environment.pull.policy` +```` diff --git a/docs/settings.md b/docs/settings.md index 8d800f9e3..5008b5def 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -54,8 +54,33 @@ Name of the execution environment to be used \ _default value: `quay.io/ansible/creator-ee:latest`_ -- **ansible.executionEnvironment.pullPolicy**: +- **ansible.executionEnvironment.pull.policy**: Image pull policy to be used. Valid values are 'always', 'missing', 'never' and 'tag'. always will always pull the image when extension is activated or reloaded. 'missing' will pull if not locally available. 'never' will never pull the image and 'tag' will always pull if the image tag is 'latest', otherwise pull if not locally available. \ _default value: `missing`_ +- **ansible.executionEnvironment.pull.arguments**: +Specify any additional parameters that should be added to the pull command when pulling an execution environment from a container registry. e.g. '-–tls-verify=false' \ +_default value: +`""`_ + +- **ansible.executionEnvironment.volumeMounts.0.src**: +The name of the local volume or path to be mounted within execution environment. \ +_default value: +`""`_ + +- **ansible.executionEnvironment.volumeMounts.0.dest**: +The path where the file or directory are mounted in the container. \ +_default value: +`""`_ + +- **ansible.executionEnvironment.volumeMounts.0.options**: +The field is optional, and is a comma-separated list of options, such as ro,Z \ +_default value: +`""`_ + +- **ansible.executionEnvironment.containerOptions**: +Extra parameters passed to the container engine command example: '--net=host' \ +_default value: +`""`_ + diff --git a/package.json b/package.json index 5812deddb..fa8a6258b 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,8 @@ "preversion": "bin/version-bump-allowed", "watch": "tsc --watch -p .", "test": "nyc -s -a mocha && nyc report --check-coverage", + "test-with-ee": "nyc -s -a mocha --grep @ee && nyc report --check-coverage", + "test-without-ee": "nyc -s -a mocha --grep @ee --invert && nyc report --check-coverage", "check-dependencies": "node ./scripts/check-dependencies.js", "generate-settings-readme": "ts-node tools/settings-doc-generator.ts" }, diff --git a/src/interfaces/extensionSettings.ts b/src/interfaces/extensionSettings.ts index 3087d37ff..c0fb894bc 100644 --- a/src/interfaces/extensionSettings.ts +++ b/src/interfaces/extensionSettings.ts @@ -10,10 +10,10 @@ export type IContainerEngine = "auto" | "podman" | "docker"; export type IPullPolicy = "always" | "missing" | "never" | "tag"; export interface ExtensionSettingsWithDescription { - ansible: AnsibleSettings; - ansibleLint: AnsibleLintSettings; - executionEnvironment: ExecutionEnvironmentSettings; - python: PythonSettings; + ansible: AnsibleSettingsWithDescription; + ansibleLint: AnsibleLintSettingsWithDescription; + executionEnvironment: ExecutionEnvironmentSettingsWithDescription; + python: PythonSettingsWithDescription; } export interface ExtensionSettings { @@ -23,7 +23,9 @@ export interface ExtensionSettings { enabled: boolean; containerEngine: IContainerEngine; image: string; - pullPolicy: IPullPolicy; + pull: { policy: IPullPolicy; arguments: string }; + volumeMounts: Array; + containerOptions: string; }; python: { interpreterPath: string; activationScript: string }; } @@ -31,20 +33,34 @@ export interface ExtensionSettings { /** * Interface for execution environment settings */ -interface ExecutionEnvironmentSettings { +interface ExecutionEnvironmentSettingsWithDescription { containerEngine: { default: IContainerEngine; description: string; }; enabled: { default: boolean; description: string }; image: { default: string; description: string }; - pullPolicy: { default: IPullPolicy; description: string }; + pull: { + policy: { default: IPullPolicy; description: string }; + arguments: { default: string; description: string }; + }; + volumeMounts: Array<{ + src: { default: string; description: string }; + dest: { default: string; description: string }; + options: { default: string; description: string }; + }>; + containerOptions: { default: string; description: string }; } +export interface IVolumeMounts { + src: string; + dest: string; + options: string | undefined; +} /** * Interface for ansible settings */ -interface AnsibleSettings { +interface AnsibleSettingsWithDescription { path: { default: string; description: string; @@ -58,7 +74,7 @@ interface AnsibleSettings { /** * Interface for ansible lint settings */ -interface AnsibleLintSettings { +interface AnsibleLintSettingsWithDescription { enabled: { default: boolean; description: string; @@ -76,7 +92,7 @@ interface AnsibleLintSettings { /** * Interface for python settings */ -interface PythonSettings { +interface PythonSettingsWithDescription { interpreterPath: { default: string; description: string; diff --git a/src/services/ansibleConfig.ts b/src/services/ansibleConfig.ts index fe5d5a297..6a9092d00 100644 --- a/src/services/ansibleConfig.ts +++ b/src/services/ansibleConfig.ts @@ -1,6 +1,7 @@ import * as ini from "ini"; import * as _ from "lodash"; import * as path from "path"; +import { URI } from "vscode-uri"; import { Connection } from "vscode-languageserver"; import { WorkspaceFolderContext } from "./workspaceManager"; import { CommandRunner } from "../utils/commandRunner"; @@ -22,7 +23,8 @@ export class AnsibleConfig { const settings = await this.context.documentSettings.get( this.context.workspaceFolder.uri ); - + const workingDirectory = URI.parse(this.context.workspaceFolder.uri).path; + const mountPaths = new Set([workingDirectory]); const commandRunner = new CommandRunner( this.connection, this.context, @@ -32,9 +34,10 @@ export class AnsibleConfig { // get Ansible configuration const ansibleConfigResult = await commandRunner.runCommand( "ansible-config", - "dump" + "dump", + workingDirectory, + mountPaths ); - let config = ini.parse(ansibleConfigResult.stdout); config = _.mapKeys( config, diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 9683224b6..8bd24d68d 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -8,16 +8,25 @@ import { AnsibleConfig } from "./ansibleConfig"; import { ImagePuller } from "../utils/imagePuller"; import { asyncExec } from "../utils/misc"; import { WorkspaceFolderContext } from "./workspaceManager"; -import { IContainerEngine } from "../interfaces/extensionSettings"; +import { + ExtensionSettings, + IContainerEngine, +} from "../interfaces/extensionSettings"; +import { IVolumeMounts } from "../interfaces/extensionSettings"; export class ExecutionEnvironment { + public isServiceInitialized: boolean; + private settings: ExtensionSettings; private connection: Connection; private context: WorkspaceFolderContext; private useProgressTracker = false; private successFileMarker = "SUCCESS"; + private settingsVolumeMounts: string[] = []; + private settingsContainerOptions: string; private _container_engine: IContainerEngine; private _container_image: string; private _container_image_id: string; + private _container_volume_mounts: Array; constructor(connection: Connection, context: WorkspaceFolderContext) { this.connection = connection; @@ -28,59 +37,31 @@ export class ExecutionEnvironment { public async initialize(): Promise { try { - const settings = await this.context.documentSettings.get( + this.settings = await this.context.documentSettings.get( this.context.workspaceFolder.uri ); - if (!settings.executionEnvironment.enabled) { + if (!this.settings.executionEnvironment.enabled) { return; } - this._container_image = settings.executionEnvironment.image; - this._container_engine = settings.executionEnvironment.containerEngine; - if (this._container_engine === "auto") { - for (const ce of ["podman", "docker"]) { - try { - child_process.execSync(`which ${ce}`, { - encoding: "utf-8", - }); - } catch (error) { - this.connection.console.info(`Container engine '${ce}' not found`); - continue; - } - this._container_engine = ce; - this.connection.console.log(`Container engine set to: '${ce}'`); - break; - } - } else { - try { - child_process.execSync(`which ${this._container_engine}`, { - encoding: "utf-8", - }); - } catch (error) { - this.connection.window.showErrorMessage( - `Container engine '${this._container_engine}' not found. Failed with error '${error}'` - ); - return; - } - } - if (!["podman", "docker"].includes(this._container_engine)) { - this.connection.window.showInformationMessage( - "No valid container engine found." - ); + this._container_image = this.settings.executionEnvironment.image; + this._container_engine = + this.settings.executionEnvironment.containerEngine; + this._container_volume_mounts = + this.settings.executionEnvironment.volumeMounts; + + const setEngineSuccess = this.setContainerEngine(); + if (setEngineSuccess === false) { + this.isServiceInitialized = false; return; } - const imagePuller = new ImagePuller( - this.connection, - this.context, - this._container_engine, - this._container_image, - settings.executionEnvironment.pullPolicy - ); - const setupDone = await imagePuller.setupImage(); - if (!setupDone) { - this.connection.window.showErrorMessage( - `Execution environment image '${this._container_image}' setup failed. - For more details check output console logs for ansible-language-server` - ); + + this.updateContainerVolumeMountFromSettings(); + this.settingsContainerOptions = + this.settings.executionEnvironment.containerOptions; + + const pullSuccess = await this.pullContainerImage(); + if (pullSuccess === false) { + this.isServiceInitialized = false; return; } } catch (error) { @@ -91,10 +72,18 @@ export class ExecutionEnvironment { `Exception in ExecutionEnvironment service: ${JSON.stringify(error)}` ); } + this.isServiceInitialized = false; } + this.isServiceInitialized = true; } - async fetchPluginDocs(ansibleConfig: AnsibleConfig): Promise { + public async fetchPluginDocs(ansibleConfig: AnsibleConfig): Promise { + if (!this.isServiceInitialized) { + this.connection.console.error( + `ExecutionEnvironment service not correctly initialized. Failed to fetch plugin docs` + ); + return; + } const containerName = `${this._container_image.replace( /[^a-z0-9]/gi, "_" @@ -177,7 +166,7 @@ export class ExecutionEnvironment { } // plugin cache successfully created fs.closeSync( - fs.openSync(path.join(hostCacheBasePath, this.successFileMarker), "w") + fs.openSync(path.join(hostCacheBasePath, this.successFileMarker), "w+") ); } catch (error) { this.connection.window.showErrorMessage( @@ -193,7 +182,16 @@ export class ExecutionEnvironment { } } - public wrapContainerArgs(command: string, mountPaths?: Set): string { + public wrapContainerArgs( + command: string, + mountPaths?: Set + ): string | undefined { + if (!this.isServiceInitialized) { + this.connection.console.error( + "ExecutionEnvironment service not correctly initialized." + ); + return undefined; + } const workspaceFolderPath = URI.parse( this.context.workspaceFolder.uri ).path; @@ -213,6 +211,25 @@ export class ExecutionEnvironment { containerCommand.push("-v", volumeMountPath); } + // handle container volume mounts setting from client + if (this.settingsVolumeMounts && this.settingsVolumeMounts.length > 0) { + this.settingsVolumeMounts.forEach((volumeMount) => { + if (containerCommand.includes(volumeMount)) { + return; + } + containerCommand.push("-v", volumeMount); + }); + } + + // handle Ansible environment variables + for (const [envVarKey, envVarValue] of Object.entries(process.env)) { + if (envVarKey.startsWith("ANSIBLE_")) { + containerCommand.push("-e", `${envVarKey}=${envVarValue}`); + } + } + // ensure output is parseable (no ANSI) + containerCommand.push("-e", "ANSIBLE_FORCE_COLOR=0"); + if (this._container_engine === "podman") { // container namespace stuff containerCommand.push("--group-add=root"); @@ -223,6 +240,20 @@ export class ExecutionEnvironment { } else { containerCommand.push(`--user=${process.getuid()}`); } + + // handle container options setting from client + if (this.settingsContainerOptions && this.settingsContainerOptions !== "") { + const containerOptions = this.settingsContainerOptions.split(" "); + containerOptions.forEach((containerOption) => { + if ( + containerOption === "" || + containerCommand.includes(containerOption) + ) { + return; + } + containerCommand.push(containerOption); + }); + } containerCommand.push(`--name ansible_language_server_${uuidv4()}`); containerCommand.push(this._container_image); containerCommand.push(command); @@ -233,7 +264,63 @@ export class ExecutionEnvironment { return generatedCommand; } - public cleanUpContainer(containerName: string): void { + private async pullContainerImage(): Promise { + const imagePuller = new ImagePuller( + this.connection, + this.context, + this._container_engine, + this._container_image, + this.settings.executionEnvironment.pull.policy, + this.settings.executionEnvironment.pull.arguments + ); + const setupDone = await imagePuller.setupImage(); + if (!setupDone) { + this.connection.window.showErrorMessage( + `Execution environment image '${this._container_image}' setup failed. + For more details check output console logs for ansible-language-server` + ); + return false; + } + return true; + } + + private setContainerEngine(): boolean { + if (this._container_engine === "auto") { + for (const ce of ["podman", "docker"]) { + try { + child_process.execSync(`which ${ce}`, { + encoding: "utf-8", + }); + } catch (error) { + this.connection.console.info(`Container engine '${ce}' not found`); + continue; + } + this._container_engine = ce; + this.connection.console.log(`Container engine set to: '${ce}'`); + break; + } + } else { + try { + child_process.execSync(`which ${this._container_engine}`, { + encoding: "utf-8", + }); + } catch (error) { + this.connection.window.showErrorMessage( + `Container engine '${this._container_engine}' not found. Failed with error '${error}'` + ); + return false; + } + } + if (!["podman", "docker"].includes(this._container_engine)) { + this.connection.window.showErrorMessage( + "Valid container engine not found. Install either 'podman' or 'docker' if you want to use execution environment, if not disable Ansible extension execution environment setting." + ); + return false; + } + return true; + } + + private cleanUpContainer(containerName: string): void { const cleanUpCommands = [ `${this._container_engine} stop ${containerName}`, `${this._container_engine} rm ${containerName}`, @@ -257,7 +344,7 @@ export class ExecutionEnvironment { } } - public doesContainerNameExist(containerName: string): boolean { + private doesContainerNameExist(containerName: string): boolean { let containerNameExist = false; try { child_process.execSync( @@ -270,6 +357,36 @@ export class ExecutionEnvironment { return containerNameExist; } + private updateContainerVolumeMountFromSettings(): void { + for (const volumeMounts of this._container_volume_mounts || []) { + const fsSrcPath = volumeMounts.src; + const fsDestPath = volumeMounts.dest; + const options = volumeMounts.options; + if (fsSrcPath === "" || !fs.existsSync(fsSrcPath)) { + this.connection.console.error( + `Volume mount source path '${fsSrcPath}' does not exist. Ignoring this volume mount entry.` + ); + continue; + } + if (fsDestPath === "") { + this.connection.console.error( + `Volume mount destination path '${fsDestPath}' not provided. Ignoring this volume mount entry.` + ); + continue; + } + + let mountPath = `${fsSrcPath}:${fsDestPath}`; + if (options && options !== "") { + mountPath += `:${options}`; + } + if (this.settingsVolumeMounts.includes(mountPath)) { + continue; + } else { + this.settingsVolumeMounts.push("-v", mountPath); + } + } + } + private isPluginInPath( containerName: string, searchPath: string, @@ -294,8 +411,28 @@ export class ExecutionEnvironment { private runContainer(containerName: string): boolean { // ensure container is not running this.cleanUpContainer(containerName); + try { - const command = `${this._container_engine} run --rm -it -d --name ${containerName} ${this._container_image} bash`; + let command = `${this._container_engine} run --rm -it -d `; + if (this.settingsVolumeMounts && this.settingsVolumeMounts.length > 0) { + command += this.settingsVolumeMounts.join(" "); + } + + // handle Ansible environment variables + for (const [envVarKey, envVarValue] of Object.entries(process.env)) { + if (envVarKey.startsWith("ANSIBLE_")) { + command += ` -e ${envVarKey}=${envVarValue} `; + } + } + command += ` -e ANSIBLE_FORCE_COLOR=0 `; // ensure output is parseable (no ANSI) + if ( + this.settingsContainerOptions && + this.settingsContainerOptions !== "" + ) { + command += ` ${this.settingsContainerOptions} `; + } + command += ` --name ${containerName} ${this._container_image} bash`; + this.connection.console.log(`run container with command '${command}'`); child_process.execSync(command, { encoding: "utf-8", diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index cd18d8321..e65a6814d 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -67,10 +67,41 @@ export class SettingsManager { default: "quay.io/ansible/creator-ee:latest", description: "Name of the execution environment to be used", }, - pullPolicy: { - default: "missing", + pull: { + policy: { + default: "missing", + description: + "Image pull policy to be used. Valid values are 'always', 'missing', 'never' and 'tag'. always will always pull the image when extension is activated or reloaded. 'missing' will pull if not locally available. 'never' will never pull the image and 'tag' will always pull if the image tag is 'latest', otherwise pull if not locally available.", + }, + arguments: { + default: "", + description: + "Specify any additional parameters that should be added to the pull command when pulling an execution environment from a container registry. e.g. '-–tls-verify=false'", + }, + }, + volumeMounts: [ + { + src: { + default: "", + description: + "The name of the local volume or path to be mounted within execution environment.", + }, + dest: { + default: "", + description: + "The path where the file or directory are mounted in the container.", + }, + options: { + default: "", + description: + "The field is optional, and is a comma-separated list of options, such as ro,Z", + }, + }, + ], + containerOptions: { + default: "", description: - "Image pull policy to be used. Valid values are 'always', 'missing', 'never' and 'tag'. always will always pull the image when extension is activated or reloaded. 'missing' will pull if not locally available. 'never' will never pull the image and 'tag' will always pull if the image tag is 'latest', otherwise pull if not locally available.", + "Extra parameters passed to the container engine command example: '--net=host'", }, }, }; @@ -80,7 +111,7 @@ export class SettingsManager { _.cloneDeep(this.defaultSettingsWithDescription) ); - private globalSettings: ExtensionSettings = this.defaultSettings; + public globalSettings: ExtensionSettings = this.defaultSettings; constructor(connection: Connection, clientSupportsConfigRequests: boolean) { this.connection = connection; diff --git a/src/services/workspaceManager.ts b/src/services/workspaceManager.ts index 46bcee726..0e8797f78 100644 --- a/src/services/workspaceManager.ts +++ b/src/services/workspaceManager.ts @@ -20,7 +20,7 @@ import { URI } from "vscode-uri"; * Holds the overall context for the whole workspace. */ export class WorkspaceManager { - private connection: Connection; + public connection: Connection; private sortedWorkspaceFolders: WorkspaceFolder[] = []; private folderContexts: Map = new Map(); public clientCapabilities: ClientCapabilities = {}; diff --git a/src/utils/imagePuller.ts b/src/utils/imagePuller.ts index 06b7860e7..78a42f83c 100644 --- a/src/utils/imagePuller.ts +++ b/src/utils/imagePuller.ts @@ -9,19 +9,22 @@ export class ImagePuller { private _containerEngine: string; private _containerImage: string; private _pullPolicy: string; + private _pullArguments: string; constructor( connection: Connection, context: WorkspaceFolderContext, containerEngine: string, containerImage: string, - pullPolicy: string + pullPolicy: string, + pullArguments: string ) { this.connection = connection; this.context = context; this._containerEngine = containerEngine; this._containerImage = containerImage; this._pullPolicy = pullPolicy; + this._pullArguments = pullArguments; this.useProgressTracker = !!context.clientCapabilities.window?.workDoneProgress; } @@ -42,7 +45,14 @@ export class ImagePuller { ); try { - const pullCommand = `${this._containerEngine} pull ${this._containerImage}`; + let pullCommand; + if (this._pullArguments && this._pullArguments !== "") { + pullCommand = `${this._containerEngine} pull ${this._containerImage} ${this._pullArguments}`; + } else { + pullCommand = `${this._containerEngine} pull ${this._containerImage}`; + } + + this.connection.console.log(`Running pull command: '${pullCommand}'`); if (progressTracker) { progressTracker.begin( "execution-environment", diff --git a/test/fixtures/completion/simple_tasks.yml b/test/fixtures/completion/simple_tasks.yml index 3da20515b..92b081f26 100644 --- a/test/fixtures/completion/simple_tasks.yml +++ b/test/fixtures/completion/simple_tasks.yml @@ -30,7 +30,3 @@ sub_sub_sub_opt_2: opt_3: choice_2 opt_4: true - - - name: Netcommon module - ansible.netcommon.cli_command: - command: show version | json diff --git a/test/helper.ts b/test/helper.ts index 47719c8b6..67eaeb206 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -1,25 +1,61 @@ import { TextDocument } from "vscode-languageserver-textdocument"; import * as path from "path"; -import { promises as fs } from "fs"; +import { readFileSync } from "fs"; import { WorkspaceManager } from "../src/services/workspaceManager"; import { createConnection, TextDocuments } from "vscode-languageserver/node"; import { ValidationManager } from "../src/services/validationManager"; +import { ExtensionSettings } from "../src/interfaces/extensionSettings"; // eslint-disable-next-line @typescript-eslint/no-var-requires const Fuse = require("fuse.js"); -const FIXTURES_BASE_PATH = path.join("test", "fixtures"); +export const FIXTURES_BASE_PATH = path.join("test", "fixtures"); +export const ANSIBLE_COLLECTIONS_FIXTURES_BASE_PATH = path.resolve( + FIXTURES_BASE_PATH, + "common", + "collections" +); + +export function setFixtureAnsibleCollectionPathEnv( + prePendPath: string | undefined = undefined +): void { + if (prePendPath) { + process.env.ANSIBLE_COLLECTIONS_PATHS = `${prePendPath}:${ANSIBLE_COLLECTIONS_FIXTURES_BASE_PATH}`; + } else { + process.env.ANSIBLE_COLLECTIONS_PATHS = + ANSIBLE_COLLECTIONS_FIXTURES_BASE_PATH; + } +} -export function setFixtureAnsibleCollectionPathEnv(): void { - process.env.ANSIBLE_COLLECTIONS_PATHS = path.resolve( - FIXTURES_BASE_PATH, - "common", - "collections" - ); +export function unSetFixtureAnsibleCollectionPathEnv(): void { + process.env.ANSIBLE_COLLECTIONS_PATHS = undefined; +} + +export async function enableExecutionEnvironmentSettings( + docSettings: Thenable +): Promise { + (await docSettings).executionEnvironment.enabled = true; + (await docSettings).executionEnvironment.volumeMounts = [ + { + src: ANSIBLE_COLLECTIONS_FIXTURES_BASE_PATH, + dest: ANSIBLE_COLLECTIONS_FIXTURES_BASE_PATH, + options: undefined, + }, + ]; +} + +export async function disableExecutionEnvironmentSettings( + docSettings: Thenable +): Promise { + (await docSettings).executionEnvironment.enabled = false; +} + +export function resolveDocUri(filename: string): string { + return path.resolve(FIXTURES_BASE_PATH, filename).toString(); } -export async function getDoc(filename: string): Promise { - const file = await fs.readFile(path.resolve(FIXTURES_BASE_PATH, filename), { +export function getDoc(filename: string): TextDocument { + const file = readFileSync(path.resolve(FIXTURES_BASE_PATH, filename), { encoding: "utf8", }); const docUri = path.resolve(FIXTURES_BASE_PATH, filename).toString(); diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index cd0ce8715..ec570e342 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -1,449 +1,687 @@ +import { TextDocument } from "vscode-languageserver-textdocument"; import { expect } from "chai"; import { Position } from "vscode-languageserver"; import { doCompletion } from "../../src/providers/completionProvider"; import {} from "../../src/providers/validationProvider"; +import { WorkspaceFolderContext } from "../../src/services/workspaceManager"; import { createTestWorkspaceManager, getDoc, - setFixtureAnsibleCollectionPathEnv, smartFilter, + resolveDocUri, + enableExecutionEnvironmentSettings, + disableExecutionEnvironmentSettings, + setFixtureAnsibleCollectionPathEnv, } from "../helper"; -setFixtureAnsibleCollectionPathEnv(); +function testPlayKeywords( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + name: "name", + position: { line: 0, character: 2 } as Position, + triggerCharacter: "", + completion: "name", + }, + { + name: "hosts", + position: { line: 2, character: 5 } as Position, + triggerCharacter: "hos", + completion: "hosts", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); +} + +function testRoleKeywords( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + name: "name", + position: { line: 4, character: 6 } as Position, + triggerCharacter: "", + completion: "name", + }, + { + name: "when", + position: { line: 5, character: 8 } as Position, + triggerCharacter: "wh", + completion: "when", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); +} + +function testBlockKeywords( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + name: "become_user", + position: { line: 8, character: 13 } as Position, + triggerCharacter: "user", + completion: "become_user", + }, + { + name: "become", + position: { line: 7, character: 8 } as Position, + triggerCharacter: "be", + completion: "become", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); +} + +function testTaskKeywords( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + name: "loop", + position: { line: 10, character: 9 } as Position, + triggerCharacter: "loop", + completion: "loop", + }, + { + name: "debugger", + position: { line: 13, character: 9 } as Position, + triggerCharacter: "deb", + completion: "debugger", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); +} + +function testModuleNames( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + name: "with name as first option always", + position: { line: 6, character: 6 } as Position, + triggerCharacter: "", + completion: "name", + }, + { + name: "for `ansible.builtin.ping` with `ping`", + position: { line: 7, character: 8 } as Position, + triggerCharacter: "ping", + completion: "ansible.builtin.ping", + }, + { + name: "for `ansible.builtin.debug` with `debu`", // cspell: ignore debu + position: { line: 7, character: 8 } as Position, + triggerCharacter: "debu", + completion: "ansible.builtin.debug", + }, + { + name: "list for all modules under ansible namespace with `ansible.`", + position: { line: 7, character: 8 } as Position, + triggerCharacter: "ansible.", + completion: "ansible.", + }, + { + name: "list for all the modules under ansible.builtin with `ansible.builtin.`", + position: { line: 7, character: 8 } as Position, + triggerCharacter: "ansible.builtin.", + completion: "ansible.builtin.", + }, + { + name: "list for all the collection modules starting with `c` under org_1 namespace with `org_1.c`", + position: { line: 16, character: 13 } as Position, + triggerCharacter: "org_1.c", + completion: "org_1.c", + }, + { + name: "list for all the modules under coll_4 in org_1 with `org_1.coll_4.`", + position: { line: 16, character: 19 } as Position, + triggerCharacter: "org_1.coll_4.", + completion: "org_1.coll_4.", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide autocompletion ${name}`, async function () { + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).to.contain(completion); + } else { + expect(filteredCompletion[0].item.label).to.contain(completion); + } + } + }); + }); +} + +function testModuleOptions( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + name: "builtin module option (ansible.builtin.debug -> msg)", + position: { line: 8, character: 9 } as Position, + triggerCharacter: "m", + completion: "msg", + }, + { + name: "collection module option (org_1.coll_4.module_1 -> opt_1)", + position: { line: 17, character: 8 } as Position, + triggerCharacter: "", + completion: "opt_1", + }, + { + name: "collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_1)", + position: { line: 21, character: 12 } as Position, + triggerCharacter: "1", + completion: "sub_opt_1", + }, + { + name: "collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_2 -> sub_sub_opt_3 -> sub_sub_sub_opt_2)", + position: { line: 26, character: 20 } as Position, + triggerCharacter: "2", + completion: "sub_sub_sub_opt_2", + }, + { + name: "only non repeating options", + position: { line: 9, character: 9 } as Position, + triggerCharacter: "m", + completion: "", + }, + { + name: "only non repeating suboptions", + position: { line: 29, character: 20 } as Position, + triggerCharacter: "1", + completion: "", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); +} + +function testModuleOptionsValues( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + name: "builtin module option (ansible.builtin.debug -> msg)", + position: { line: 8, character: 13 } as Position, + triggerCharacter: "", + completion: ["Hello world!"], + }, + { + name: "collection module option (org_1.coll_4.module_1 -> opt_3)", + position: { line: 30, character: 15 } as Position, + triggerCharacter: "3", + completion: ["choice_3"], + }, + { + name: "collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_1)", + position: { line: 18, character: 23 } as Position, + triggerCharacter: "1", + completion: ["choice_1"], + }, + { + name: "default first", + position: { line: 30, character: 15 } as Position, + triggerCharacter: "", + completion: ["choice_4", "choice_1", "choice_2", "choice_3"], + }, + { + name: "boolean values", + position: { line: 31, character: 15 } as Position, + triggerCharacter: "", + completion: ["false", "true"], + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ).map((completion) => { + if (!completion.item) { + return completion.label; + } else { + return completion.item.label; + } + }); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + expect(filteredCompletion).be.deep.equal(completion); + } + }); + }); +} + +function testModuleNamesWithoutFQCN( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + name: "`ping` with `pin` (ansible.builtin.ping)", + position: { line: 7, character: 9 } as Position, + triggerCharacter: "pin", + completion: "ping", + }, + { + name: "module option for ping (ping -> data)", + position: { line: 8, character: 8 } as Position, + triggerCharacter: "", + completion: "data", + }, + { + name: "`module_3` from `org_1.coll_3` with `module_3` (org_1.coll_3.module_3)", + position: { line: 11, character: 14 } as Position, + triggerCharacter: "module_3", + completion: "module_3", + }, + { + name: "module sub option for module_3 (org_1.coll_3.module_3 -> opt_1 -> sub_opt_2)", + position: { line: 13, character: 13 } as Position, + triggerCharacter: "2", + completion: "sub_opt_2", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + // Update setting to stop using FQCN for module names + const docSettings = context.documentSettings.get(textDoc.uri); + const cachedDefaultSetting = (await docSettings).ansibleLint.enabled; + (await docSettings).ansible.useFullyQualifiedCollectionNames = false; + + const actualCompletion = await doCompletion(textDoc, position, context); + + // Revert back the default settings + (await docSettings).ansible.useFullyQualifiedCollectionNames = + cachedDefaultSetting; + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + } + } + }); + }); +} describe("doCompletion()", () => { const workspaceManager = createTestWorkspaceManager(); + let fixtureFilePath = "completion/simple_tasks.yml"; + let fixtureFileUri = resolveDocUri(fixtureFilePath); + let context = workspaceManager.getContext(fixtureFileUri); + + let textDoc = getDoc(fixtureFilePath); + let docSettings = context.documentSettings.get(textDoc.uri); describe("Completion for play keywords", () => { - const tests = [ - { - name: "name", - position: { line: 0, character: 2 } as Position, - triggerCharacter: "", - completion: "name", - }, - { - name: "hosts", - position: { line: 2, character: 5 } as Position, - triggerCharacter: "hos", - completion: "hosts", - }, - ]; - - tests.forEach(({ name, position, triggerCharacter, completion }) => { - it(`should provide completion for ${name}`, async function () { - const textDoc = await getDoc("completion/simple_tasks.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualCompletion = await doCompletion(textDoc, position, context); - - const filteredCompletion = smartFilter( - actualCompletion, - triggerCharacter + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); + enableExecutionEnvironmentSettings(docSettings); + }); - // filteredCompletion.forEach((item) => { - // item.item ? console.log(item.item.label) : console.log(item.label); - // }); - // console.log("\n"); + testPlayKeywords(context, textDoc); - if (!completion) { - expect(filteredCompletion.length).be.equal(0); - } else { - if (!filteredCompletion[0].item) { - expect(filteredCompletion[0].label).be.equal(completion); - } else { - expect(filteredCompletion[0].item.label).to.be.equal(completion); - } - } + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + + testPlayKeywords(context, textDoc); + }); }); + fixtureFilePath = "completion/with_roles.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); describe("Completion for role keywords", () => { - const tests = [ - { - name: "name", - position: { line: 4, character: 6 } as Position, - triggerCharacter: "", - completion: "name", - }, - { - name: "when", - position: { line: 5, character: 8 } as Position, - triggerCharacter: "wh", - completion: "when", - }, - ]; - - tests.forEach(({ name, position, triggerCharacter, completion }) => { - it(`should provide completion for ${name}`, async function () { - const textDoc = await getDoc("completion/with_roles.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualCompletion = await doCompletion(textDoc, position, context); - - const filteredCompletion = smartFilter( - actualCompletion, - triggerCharacter + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); + enableExecutionEnvironmentSettings(docSettings); + }); - if (!completion) { - expect(filteredCompletion.length).be.equal(0); - } else { - if (!filteredCompletion[0].item) { - expect(filteredCompletion[0].label).be.equal(completion); - } else { - expect(filteredCompletion[0].item.label).to.be.equal(completion); - } - } + testRoleKeywords(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); + + testRoleKeywords(context, textDoc); }); }); + fixtureFilePath = "completion/with_blocks.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + describe("Completion for block keywords", () => { - const tests = [ - { - name: "become_user", - position: { line: 8, character: 13 } as Position, - triggerCharacter: "user", - completion: "become_user", - }, - { - name: "become", - position: { line: 7, character: 8 } as Position, - triggerCharacter: "be", - completion: "become", - }, - ]; - - tests.forEach(({ name, position, triggerCharacter, completion }) => { - it(`should provide completion for ${name}`, async function () { - const textDoc = await getDoc("completion/with_blocks.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualCompletion = await doCompletion(textDoc, position, context); - - const filteredCompletion = smartFilter( - actualCompletion, - triggerCharacter + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); + enableExecutionEnvironmentSettings(docSettings); + }); - if (!completion) { - expect(filteredCompletion.length).be.equal(0); - } else { - if (!filteredCompletion[0].item) { - expect(filteredCompletion[0].label).be.equal(completion); - } else { - expect(filteredCompletion[0].item.label).to.be.equal(completion); - } - } + testBlockKeywords(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + + testBlockKeywords(context, textDoc); + }); }); describe("Completion for task keywords", () => { - const tests = [ - { - name: "loop", - position: { line: 10, character: 9 } as Position, - triggerCharacter: "loop", - completion: "loop", - }, - { - name: "debugger", - position: { line: 13, character: 9 } as Position, - triggerCharacter: "deb", - completion: "debugger", - }, - ]; - - tests.forEach(({ name, position, triggerCharacter, completion }) => { - it(`should provide completion for ${name}`, async function () { - const textDoc = await getDoc("completion/simple_tasks.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualCompletion = await doCompletion(textDoc, position, context); - - const filteredCompletion = smartFilter( - actualCompletion, - triggerCharacter + fixtureFilePath = "completion/simple_tasks.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); + enableExecutionEnvironmentSettings(docSettings); + }); - if (!completion) { - expect(filteredCompletion.length).be.equal(0); - } else { - if (!filteredCompletion[0].item) { - expect(filteredCompletion[0].label).be.equal(completion); - } else { - expect(filteredCompletion[0].item.label).to.be.equal(completion); - } - } + testTaskKeywords(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + + testTaskKeywords(context, textDoc); + }); }); describe("Completion for module names (with different trigger scenarios)", () => { - const tests = [ - { - name: "with name as first option always", - position: { line: 6, character: 6 } as Position, - triggerCharacter: "", - completion: "name", - }, - { - name: "for `ansible.builtin.ping` with `ping`", - position: { line: 7, character: 8 } as Position, - triggerCharacter: "ping", - completion: "ansible.builtin.ping", - }, - { - name: "for `ansible.builtin.debug` with `debu`", // cspell: ignore debu - position: { line: 7, character: 8 } as Position, - triggerCharacter: "debu", - completion: "ansible.builtin.debug", - }, - { - name: "list for all modules under ansible namespace with `ansible.`", - position: { line: 7, character: 8 } as Position, - triggerCharacter: "ansible.", - completion: "ansible.", - }, - { - name: "list for all the modules under ansible.builtin with `ansible.builtin.`", - position: { line: 7, character: 8 } as Position, - triggerCharacter: "ansible.builtin.", - completion: "ansible.builtin.", - }, - { - name: "list for all the collection modules starting with `c` under org_1 namespace with `org_1.c`", - position: { line: 16, character: 13 } as Position, - triggerCharacter: "org_1.c", - completion: "org_1.c", - }, - { - name: "list for all the modules under coll_4 in org_1 with `org_1.coll_4.`", - position: { line: 16, character: 19 } as Position, - triggerCharacter: "org_1.coll_4.", - completion: "org_1.coll_4.", - }, - { - name: "list for all the modules that contain `cli_` in their name with `cli_`", - position: { line: 33, character: 6 } as Position, - triggerCharacter: "cli_", - completion: "cli_", - }, - ]; - - tests.forEach(({ name, position, triggerCharacter, completion }) => { - it(`should provide autocompletion ${name}`, async function () { - const textDoc = await getDoc("completion/simple_tasks.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualCompletion = await doCompletion(textDoc, position, context); - - const filteredCompletion = smartFilter( - actualCompletion, - triggerCharacter + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); + enableExecutionEnvironmentSettings(docSettings); + }); - if (!completion) { - expect(filteredCompletion.length).be.equal(0); - } else { - if (!filteredCompletion[0].item) { - expect(filteredCompletion[0].label).to.contain(completion); - } else { - expect(filteredCompletion[0].item.label).to.contain(completion); - } - } + testModuleNames(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); + + testModuleNames(context, textDoc); }); }); describe("Completion for module options and suboptions", () => { - const tests = [ - { - name: "builtin module option (ansible.builtin.debug -> msg)", - position: { line: 8, character: 9 } as Position, - triggerCharacter: "m", - completion: "msg", - }, - { - name: "collection module option (org_1.coll_4.module_1 -> opt_1)", - position: { line: 17, character: 8 } as Position, - triggerCharacter: "", - completion: "opt_1", - }, - { - name: "collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_1)", - position: { line: 21, character: 12 } as Position, - triggerCharacter: "1", - completion: "sub_opt_1", - }, - { - name: "collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_2 -> sub_sub_opt_3 -> sub_sub_sub_opt_2)", - position: { line: 26, character: 20 } as Position, - triggerCharacter: "2", - completion: "sub_sub_sub_opt_2", - }, - { - name: "only non repeating options", - position: { line: 9, character: 9 } as Position, - triggerCharacter: "m", - completion: "", - }, - { - name: "only non repeating suboptions", - position: { line: 29, character: 20 } as Position, - triggerCharacter: "1", - completion: "", - }, - ]; - - tests.forEach(({ name, position, triggerCharacter, completion }) => { - it(`should provide completion for ${name}`, async function () { - const textDoc = await getDoc("completion/simple_tasks.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualCompletion = await doCompletion(textDoc, position, context); - - const filteredCompletion = smartFilter( - actualCompletion, - triggerCharacter + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); + enableExecutionEnvironmentSettings(docSettings); + }); - if (!completion) { - expect(filteredCompletion.length).be.equal(0); - } else { - if (!filteredCompletion[0].item) { - expect(filteredCompletion[0].label).be.equal(completion); - } else { - expect(filteredCompletion[0].item.label).to.be.equal(completion); - } - } + testModuleOptions(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + + testModuleOptions(context, textDoc); + }); }); describe("Completion for option and suboption values", () => { - const tests = [ - { - name: "builtin module option (ansible.builtin.debug -> msg)", - position: { line: 8, character: 13 } as Position, - triggerCharacter: "", - completion: ["Hello world!"], - }, - { - name: "collection module option (org_1.coll_4.module_1 -> opt_3)", - position: { line: 30, character: 15 } as Position, - triggerCharacter: "3", - completion: ["choice_3"], - }, - { - name: "collection module sub option (org_1.coll_4.module_1 -> opt_1 -> sub_opt_1)", - position: { line: 18, character: 23 } as Position, - triggerCharacter: "1", - completion: ["choice_1"], - }, - { - name: "default first", - position: { line: 30, character: 15 } as Position, - triggerCharacter: "", - completion: ["choice_4", "choice_1", "choice_2", "choice_3"], - }, - { - name: "boolean values", - position: { line: 31, character: 15 } as Position, - triggerCharacter: "", - completion: ["false", "true"], - }, - ]; - - tests.forEach(({ name, position, triggerCharacter, completion }) => { - it(`should provide completion for ${name}`, async function () { - const textDoc = await getDoc("completion/simple_tasks.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualCompletion = await doCompletion(textDoc, position, context); - - const filteredCompletion = smartFilter( - actualCompletion, - triggerCharacter - ).map((completion) => { - if (!completion.item) { - return completion.label; - } else { - return completion.item.label; - } - }); - - if (!completion) { - expect(filteredCompletion.length).be.equal(0); - } else { - expect(filteredCompletion).be.deep.equal(completion); - } + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + enableExecutionEnvironmentSettings(docSettings); + }); + + testModuleOptionsValues(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + + testModuleOptionsValues(context, textDoc); + }); }); describe("Completion for module name without FQCN", () => { - const tests = [ - { - name: "`ping` with `pin` (ansible.builtin.ping)", - position: { line: 7, character: 9 } as Position, - triggerCharacter: "pin", - completion: "ping", - }, - { - name: "module option for ping (ping -> data)", - position: { line: 8, character: 8 } as Position, - triggerCharacter: "", - completion: "data", - }, - { - name: "`module_3` from `org_1.coll_3` with `module_3` (org_1.coll_3.module_3)", - position: { line: 11, character: 14 } as Position, - triggerCharacter: "module_3", - completion: "module_3", - }, - { - name: "module sub option for module_3 (org_1.coll_3.module_3 -> opt_1 -> sub_opt_2)", - position: { line: 13, character: 13 } as Position, - triggerCharacter: "2", - completion: "sub_opt_2", - }, - ]; - - tests.forEach(({ name, position, triggerCharacter, completion }) => { - it(`should provide completion for ${name}`, async function () { - const textDoc = await getDoc("completion/tasks_without_fqcn.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - // Update setting to stop using FQCN for module names - const docSettings = context.documentSettings.get(textDoc.uri); - const cachedDefaultSetting = (await docSettings).ansibleLint.enabled; - (await docSettings).ansible.useFullyQualifiedCollectionNames = false; - - const actualCompletion = await doCompletion(textDoc, position, context); - - // Revert back the default settings - (await docSettings).ansible.useFullyQualifiedCollectionNames = - cachedDefaultSetting; - - const filteredCompletion = smartFilter( - actualCompletion, - triggerCharacter + fixtureFilePath = "completion/tasks_without_fqcn.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); + enableExecutionEnvironmentSettings(docSettings); + }); - if (!completion) { - expect(filteredCompletion.length).be.equal(0); - } else { - if (!filteredCompletion[0].item) { - expect(filteredCompletion[0].label).be.equal(completion); - } else { - expect(filteredCompletion[0].item.label).to.be.equal(completion); - } - } + testModuleNamesWithoutFQCN(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); + + testModuleNamesWithoutFQCN(context, textDoc); }); }); }); diff --git a/test/providers/completionResolver.test.ts b/test/providers/completionResolver.test.ts index e63bcbed4..ef0f9d0ba 100644 --- a/test/providers/completionResolver.test.ts +++ b/test/providers/completionResolver.test.ts @@ -7,216 +7,286 @@ import { expect } from "chai"; import { EOL } from "os"; import { doCompletionResolve } from "../../src/providers/completionProvider"; import {} from "../../src/providers/validationProvider"; +import { WorkspaceFolderContext } from "../../src/services/workspaceManager"; import { createTestWorkspaceManager, - getDoc, + enableExecutionEnvironmentSettings, + disableExecutionEnvironmentSettings, setFixtureAnsibleCollectionPathEnv, + resolveDocUri, + getDoc, } from "../helper"; -setFixtureAnsibleCollectionPathEnv(); +function testFQCNEnabled(context: WorkspaceFolderContext) { + const tests = [ + { + name: "module name with full FQCN", + completionItem: { + label: "module_3", + data: { + documentUri: "dummy/url/for/resolve_completion.yml", + moduleFqcn: "org_1.coll_3.module_3", + inlineCollections: ["org_1.coll_3", "ansible.builtin"], + atEndOfLine: true, + firstElementOfList: false, + }, + }, + completionText: "org_1.coll_3.module_3", + }, + ]; -describe("doCompletionResolve()", () => { - const workspaceManager = createTestWorkspaceManager(); + tests.forEach(({ name, completionItem, completionText }) => { + it(`should resolve completion for ${name}`, async function () { + const actualCompletionResolveAtLineEnd = await doCompletionResolve( + completionItem, + context + ); - describe("Resolve completion for module names", () => { - describe("With useFQCN enabled", () => { - const tests = [ - { - name: "module name with full FQCN", - completionItem: { - label: "module_3", - data: { - documentUri: "dummy/url/for/resolve_completion.yml", - moduleFqcn: "org_1.coll_3.module_3", - inlineCollections: ["org_1.coll_3", "ansible.builtin"], - atEndOfLine: true, - firstElementOfList: false, - }, - }, - completionText: "org_1.coll_3.module_3", - }, - ]; - - tests.forEach(({ name, completionItem, completionText }) => { - it(`should resolve completion for ${name}`, async function () { - const textDoc = await getDoc("completion/resolve_completion.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualCompletionResolveAtLineEnd = await doCompletionResolve( - completionItem, - context - ); - - expect(actualCompletionResolveAtLineEnd.insertText).be.equal( - `${completionText}:${EOL}\t` - ); - - // Check for completion resolution when asked in between of lines - completionItem.data.atEndOfLine = false; - const actualCompletionResolveAtInBetween = await doCompletionResolve( - completionItem, - context - ); - - expect(actualCompletionResolveAtInBetween.insertText).be.equal( - `${completionText}` - ); - }); - }); + expect(actualCompletionResolveAtLineEnd.insertText).be.equal( + `${completionText}:${EOL}\t` + ); + + // Check for completion resolution when asked in between of lines + completionItem.data.atEndOfLine = false; + const actualCompletionResolveAtInBetween = await doCompletionResolve( + completionItem, + context + ); + + expect(actualCompletionResolveAtInBetween.insertText).be.equal( + `${completionText}` + ); }); + }); +} - describe("With useFQCN disabled", () => { - const tests = [ - { - name: "module name with short name since it is present in declared collections in playbook", - completionItem: { - label: "module_3", - data: { - documentUri: "dummy/uri/for/resolve_completion.yml", - moduleFqcn: "org_1.coll_3.module_3", - inlineCollections: ["org_1.coll_3", "ansible.builtin"], - atEndOfLine: true, - firstElementOfList: false, - }, - }, - completionText: "module_3", +function testFQCNDisabled(context: WorkspaceFolderContext) { + const tests = [ + { + name: "module name with short name since it is present in declared collections in playbook", + completionItem: { + label: "module_3", + data: { + documentUri: "dummy/uri/for/resolve_completion.yml", + moduleFqcn: "org_1.coll_3.module_3", + inlineCollections: ["org_1.coll_3", "ansible.builtin"], + atEndOfLine: true, + firstElementOfList: false, }, - { - name: "module name with full FQCN since it is not present in declared collections in playbook", - completionItem: { - label: "module_1", - data: { - documentUri: "dummy/uri/for/resolve_completion.yml", - moduleFqcn: "org_1.coll_1.module_1", - inlineCollections: ["org_1.coll_3", "ansible.builtin"], - atEndOfLine: true, - firstElementOfList: false, - }, - }, - completionText: "org_1.coll_1.module_1", + }, + completionText: "module_3", + }, + { + name: "module name with full FQCN since it is not present in declared collections in playbook", + completionItem: { + label: "module_1", + data: { + documentUri: "dummy/uri/for/resolve_completion.yml", + moduleFqcn: "org_1.coll_1.module_1", + inlineCollections: ["org_1.coll_3", "ansible.builtin"], + atEndOfLine: true, + firstElementOfList: false, }, - ]; - - tests.forEach(({ name, completionItem, completionText }) => { - it(`should resolve completion for ${name}`, async function () { - const textDoc = await getDoc("completion/resolve_completion.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - // Update setting to stop using FQCN for module names - const docSettings = context.documentSettings.get(textDoc.uri); - const cachedDefaultSetting = (await docSettings).ansibleLint.enabled; - (await docSettings).ansible.useFullyQualifiedCollectionNames = false; - - const actualCompletionResolveAtLineEnd = await doCompletionResolve( - completionItem, - context - ); - - expect(actualCompletionResolveAtLineEnd.insertText).be.equal( - `${completionText}:${EOL}\t` - ); - - // Check for completion resolution when asked in between of lines - completionItem.data.atEndOfLine = false; - const actualCompletionResolveAtInBetween = await doCompletionResolve( - completionItem, - context - ); - - expect(actualCompletionResolveAtInBetween.insertText).be.equal( - `${completionText}` - ); - - // Revert back the default settings - (await docSettings).ansible.useFullyQualifiedCollectionNames = - cachedDefaultSetting; - }); - }); + }, + completionText: "org_1.coll_1.module_1", + }, + ]; + tests.forEach(({ name, completionItem, completionText }) => { + it(`should resolve completion for ${name}`, async function () { + const actualCompletionResolveAtLineEnd = await doCompletionResolve( + completionItem, + context + ); + + expect(actualCompletionResolveAtLineEnd.insertText).be.equal( + `${completionText}:${EOL}\t` + ); + + // Check for completion resolution when asked in between of lines + completionItem.data.atEndOfLine = false; + const actualCompletionResolveAtInBetween = await doCompletionResolve( + completionItem, + context + ); + + expect(actualCompletionResolveAtInBetween.insertText).be.equal( + `${completionText}` + ); }); }); +} - describe("Resolve completion for module options and suboptions", () => { - const tests = [ - { - name: "option expecting dictionary with `option: ${EOL}\\t\\t`", - completionItem: { - label: "opt_1", - data: { - documentUri: "dummy/uri/for/resolve_completion.yml", - type: "dict", - atEndOfLine: true, - firstElementOfList: true, - }, +function testResolveModuleOptionCompletion(context: WorkspaceFolderContext) { + const tests = [ + { + name: "option expecting dictionary with `option: ${EOL}\\t\\t`", + completionItem: { + label: "opt_1", + data: { + documentUri: "dummy/uri/for/resolve_completion.yml", + type: "dict", + atEndOfLine: true, + firstElementOfList: true, }, - completionText: "opt_1", }, - { - name: "sub option expecting list with `sub_option: ${EOL}\\t- `", - completionItem: { - label: "sub_opt_2", - data: { - documentUri: "dummy/uri/for/resolve_completion.yml", - type: "list", - atEndOfLine: true, - }, + completionText: "opt_1", + }, + { + name: "sub option expecting list with `sub_option: ${EOL}\\t- `", + completionItem: { + label: "sub_opt_2", + data: { + documentUri: "dummy/uri/for/resolve_completion.yml", + type: "list", + atEndOfLine: true, }, - completionText: "sub_opt_2", }, - { - name: "sub option expecting string or number or boolean with `sub_option: `", - completionItem: { - label: "sub_opt_1", - data: { - documentUri: "dummy/uri/for/resolve_completion.yml", - type: "string", - atEndOfLine: true, - }, + completionText: "sub_opt_2", + }, + { + name: "sub option expecting string or number or boolean with `sub_option: `", + completionItem: { + label: "sub_opt_1", + data: { + documentUri: "dummy/uri/for/resolve_completion.yml", + type: "string", + atEndOfLine: true, }, - completionText: "sub_opt_1", }, - ]; + completionText: "sub_opt_1", + }, + ]; - tests.forEach(({ name, completionItem, completionText }) => { - it(`should resolve completion for ${name}`, async function () { - const textDoc = await getDoc("completion/resolve_completion.yml"); - const context = workspaceManager.getContext(textDoc.uri); + tests.forEach(({ name, completionItem, completionText }) => { + it(`should resolve completion for ${name}`, async function () { + const actualCompletionResolveAtLineEnd = await doCompletionResolve( + completionItem, + context + ); - const actualCompletionResolveAtLineEnd = await doCompletionResolve( - completionItem, - context - ); + let returnSuffix: string; + switch (completionItem.data.type) { + case "list": + returnSuffix = completionItem.data.firstElementOfList + ? `${EOL}\t\t- ` + : `${EOL}\t- `; + break; + case "dict": + returnSuffix = completionItem.data.firstElementOfList + ? `${EOL}\t\t` + : `${EOL}\t`; + break; + default: + returnSuffix = " "; + break; + } + expect(actualCompletionResolveAtLineEnd.insertText).be.equal( + `${completionText}:${returnSuffix}` + ); + + // Check for completion resolution when asked in between of lines + completionItem.data.atEndOfLine = false; + const actualCompletionResolveAtInBetween = await doCompletionResolve( + completionItem, + context + ); + + expect(actualCompletionResolveAtInBetween.insertText).be.equal( + `${completionText}` + ); + }); + }); +} + +describe("doCompletionResolve()", () => { + const workspaceManager = createTestWorkspaceManager(); + const fixtureFilePath = "completion/resolve_completion.yml"; + const fixtureFileUri = resolveDocUri(fixtureFilePath); + const context = workspaceManager.getContext(fixtureFileUri); - let returnSuffix: string; - switch (completionItem.data.type) { - case "list": - returnSuffix = completionItem.data.firstElementOfList - ? `${EOL}\t\t- ` - : `${EOL}\t- `; - break; - case "dict": - returnSuffix = completionItem.data.firstElementOfList - ? `${EOL}\t\t` - : `${EOL}\t`; - break; - default: - returnSuffix = " "; - break; - } - expect(actualCompletionResolveAtLineEnd.insertText).be.equal( - `${completionText}:${returnSuffix}` + const textDoc = getDoc(fixtureFilePath); + const docSettings = context.documentSettings.get(textDoc.uri); + + describe("Resolve completion for module names", () => { + describe("With useFQCN enabled and with EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); + enableExecutionEnvironmentSettings(docSettings); + }); + testFQCNEnabled(context); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With useFQCN enabled and with EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + testFQCNEnabled(context); + }); - // Check for completion resolution when asked in between of lines - completionItem.data.atEndOfLine = false; - const actualCompletionResolveAtInBetween = await doCompletionResolve( - completionItem, - context + describe("With useFQCN disabled and with EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); + enableExecutionEnvironmentSettings(docSettings); + (await docSettings).ansible.useFullyQualifiedCollectionNames = false; + }); + testFQCNDisabled(context); - expect(actualCompletionResolveAtInBetween.insertText).be.equal( - `${completionText}` + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + (await docSettings).ansible.useFullyQualifiedCollectionNames = true; + }); + }); + + describe("With useFQCN disabled and with EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + (await docSettings).ansible.useFullyQualifiedCollectionNames = false; + }); + testFQCNDisabled(context); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + (await docSettings).ansible.useFullyQualifiedCollectionNames = true; + }); + }); + }); + + describe("Resolve completion for module options and suboptions", () => { + describe("with EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); + enableExecutionEnvironmentSettings(docSettings); }); + + testResolveModuleOptionCompletion(context); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("with EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + + testResolveModuleOptionCompletion(context); }); }); }); diff --git a/test/providers/hoverProvider.test.ts b/test/providers/hoverProvider.test.ts index 920e96d7a..6559dda82 100644 --- a/test/providers/hoverProvider.test.ts +++ b/test/providers/hoverProvider.test.ts @@ -1,187 +1,362 @@ +import { TextDocument } from "vscode-languageserver-textdocument"; import { expect } from "chai"; import { createTestWorkspaceManager, getDoc, + resolveDocUri, + enableExecutionEnvironmentSettings, + disableExecutionEnvironmentSettings, setFixtureAnsibleCollectionPathEnv, } from "../helper"; import { doHover } from "../../src/providers/hoverProvider"; import { Position } from "vscode-languageserver"; +import { WorkspaceFolderContext } from "../../src/services/workspaceManager"; -setFixtureAnsibleCollectionPathEnv(); +function testPlayKeywords( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + word: "name", + position: { line: 0, character: 4 } as Position, + doc: "Identifier. Can be used for documentation, or in tasks/handlers.", + }, + { + word: "host", + position: { line: 1, character: 4 } as Position, + doc: "A list of groups, hosts or host pattern that translates into a list of hosts that are the play’s target.", + }, + { + word: "tasks", + position: { line: 3, character: 4 } as Position, + doc: "Main list of tasks to execute in the play, they run after roles and before post_tasks.", + }, + ]; + + tests.forEach(({ word, position, doc }) => { + it(`should provide hovering for '${word}'`, async function () { + const actualHover = await doHover( + textDoc, + position, + await context.docsLibrary + ); + expect(actualHover.contents["value"]).includes(doc); + }); + }); +} + +function testTaskKeywords( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + word: "register", + position: { line: 6, character: 8 } as Position, + doc: "Name of variable that will contain task status and module return data.", + }, + ]; + + tests.forEach(({ word, position, doc }) => { + it(`should provide hovering for '${word}'`, async function () { + const actualHover = await doHover( + textDoc, + position, + await context.docsLibrary + ); + expect(actualHover.contents["value"]).includes(doc); + }); + }); +} + +function testBlockKeywords( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + word: "become", + position: { line: 11, character: 8 } as Position, + doc: "Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin.", + }, + ]; + + tests.forEach(({ word, position, doc }) => { + it(`should provide hovering for '${word}'`, async function () { + const actualHover = await doHover( + textDoc, + position, + await context.docsLibrary + ); + expect(actualHover.contents["value"]).includes(doc); + }); + }); +} + +function testRoleKeywords( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + word: "tags", + position: { line: 6, character: 8 } as Position, + doc: "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.", + }, + ]; + + tests.forEach(({ word, position, doc }) => { + it(`should provide hovering for '${word}'`, async function () { + const actualHover = await doHover( + textDoc, + position, + await context.docsLibrary + ); + expect(actualHover.contents["value"]).includes(doc); + }); + }); +} + +function testModuleNames( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + word: "ansible.builtin.debug", + position: { line: 4, character: 8 } as Position, + doc: "Print statements during execution", + }, + { + word: "ansible.builtin.debug -> msg", + position: { line: 5, character: 10 } as Position, + doc: "The customized message that is printed. If omitted, prints a generic message.", + }, + ]; + + tests.forEach(({ word, position, doc }) => { + it(`should provide hovering for '${word}'`, async function () { + const actualHover = await doHover( + textDoc, + position, + await context.docsLibrary + ); + expect(actualHover.contents["value"]).includes(doc); + }); + }); +} + +function testNoHover(context: WorkspaceFolderContext, textDoc: TextDocument) { + it("should not provide hovering for values", async function () { + const actualHover = await doHover( + textDoc, + { line: 13, character: 24 } as Position, + await context.docsLibrary + ); + expect(actualHover).to.be.null; + }); + + it("should not provide hovering for improper module name and options", async function () { + const actualHover = await doHover( + textDoc, + { line: 13, character: 8 } as Position, + await context.docsLibrary + ); + expect(actualHover).to.be.null; + }); + + it("should not provide hovering for improper module option", async function () { + const actualHover = await doHover( + textDoc, + { line: 14, character: 10 } as Position, + await context.docsLibrary + ); + expect(actualHover).to.be.null; + }); +} describe("doHover()", () => { const workspaceManager = createTestWorkspaceManager(); + let fixtureFilePath = "hover/tasks.yml"; + let fixtureFileUri = resolveDocUri(fixtureFilePath); + let context = workspaceManager.getContext(fixtureFileUri); + + let textDoc = getDoc(fixtureFilePath); + let docSettings = context.documentSettings.get(textDoc.uri); describe("Play keywords hover", () => { - const tests = [ - { - word: "name", - position: { line: 0, character: 4 } as Position, - doc: "Identifier. Can be used for documentation, or in tasks/handlers.", - }, - { - word: "host", - position: { line: 1, character: 4 } as Position, - doc: "A list of groups, hosts or host pattern that translates into a list of hosts that are the play’s target.", - }, - { - word: "tasks", - position: { line: 3, character: 4 } as Position, - doc: "Main list of tasks to execute in the play, they run after roles and before post_tasks.", - }, - ]; - - tests.forEach(({ word, position, doc }) => { - it(`should provide hovering for '${word}'`, async function () { - const textDoc = await getDoc("hover/tasks.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualHover = await doHover( - textDoc, - position, - await context.docsLibrary + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); - expect(actualHover.contents["value"]).includes(doc); + enableExecutionEnvironmentSettings(docSettings); + }); + + testPlayKeywords(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); + + testPlayKeywords(context, textDoc); }); }); describe("Task keywords hover", () => { - const tests = [ - { - word: "register", - position: { line: 6, character: 8 } as Position, - doc: "Name of variable that will contain task status and module return data.", - }, - ]; - - tests.forEach(({ word, position, doc }) => { - it(`should provide hovering for '${word}'`, async function () { - const textDoc = await getDoc("hover/tasks.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualHover = await doHover( - textDoc, - position, - await context.docsLibrary + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); - expect(actualHover.contents["value"]).includes(doc); + enableExecutionEnvironmentSettings(docSettings); + }); + + testTaskKeywords(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + + testTaskKeywords(context, textDoc); + }); }); describe("Block keywords hover", () => { - const tests = [ - { - word: "become", - position: { line: 11, character: 8 } as Position, - doc: "Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin.", - }, - ]; - - tests.forEach(({ word, position, doc }) => { - it(`should provide hovering for '${word}'`, async function () { - const textDoc = await getDoc("hover/tasks.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualHover = await doHover( - textDoc, - position, - await context.docsLibrary + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); - expect(actualHover.contents["value"]).includes(doc); + enableExecutionEnvironmentSettings(docSettings); + }); + + testBlockKeywords(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); + + testBlockKeywords(context, textDoc); }); }); describe("Role keywords hover", () => { - const tests = [ - { - word: "tags", - position: { line: 6, character: 8 } as Position, - doc: "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.", - }, - ]; - - tests.forEach(({ word, position, doc }) => { - it(`should provide hovering for '${word}'`, async function () { - const textDoc = await getDoc("hover/roles.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualHover = await doHover( - textDoc, - position, - await context.docsLibrary + fixtureFilePath = "hover/roles.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); - expect(actualHover.contents["value"]).includes(doc); + enableExecutionEnvironmentSettings(docSettings); }); + + testRoleKeywords(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + + testRoleKeywords(context, textDoc); }); }); describe("Module name and options hover", () => { - const tests = [ - { - word: "ansible.builtin.debug", - position: { line: 4, character: 8 } as Position, - doc: "Print statements during execution", - }, - { - word: "ansible.builtin.debug -> msg", - position: { line: 5, character: 10 } as Position, - doc: "The customized message that is printed. If omitted, prints a generic message.", - }, - ]; - - tests.forEach(({ word, position, doc }) => { - it(`should provide hovering for '${word}'`, async function () { - const textDoc = await getDoc("hover/tasks.yml"); - const context = workspaceManager.getContext(textDoc.uri); - - const actualHover = await doHover( - textDoc, - position, - await context.docsLibrary + fixtureFilePath = "hover/tasks.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" ); - expect(actualHover.contents["value"]).includes(doc); + enableExecutionEnvironmentSettings(docSettings); + }); + + testModuleNames(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); }); - }); - describe("No hover", () => { - it("should not provide hovering for values", async function () { - const textDoc = await getDoc("hover/tasks.yml"); - const context = workspaceManager.getContext(textDoc.uri); + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); - const actualHover = await doHover( - textDoc, - { line: 13, character: 24 } as Position, - await context.docsLibrary - ); - expect(actualHover).to.be.null; + testModuleNames(context, textDoc); }); + }); - it("should not provide hovering for improper module name and options", async function () { - const textDoc = await getDoc("hover/tasks.yml"); - const context = workspaceManager.getContext(textDoc.uri); + describe("No hover", () => { + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + enableExecutionEnvironmentSettings(docSettings); + }); - const actualHover = await doHover( - textDoc, - { line: 13, character: 8 } as Position, - await context.docsLibrary - ); - expect(actualHover).to.be.null; + testNoHover(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); }); - it("should not provide hovering for improper module option", async function () { - const textDoc = await getDoc("hover/tasks.yml"); - const context = workspaceManager.getContext(textDoc.uri); + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); - const actualHover = await doHover( - textDoc, - { line: 14, character: 10 } as Position, - await context.docsLibrary - ); - expect(actualHover).to.be.null; + testNoHover(context, textDoc); }); }); }); diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts index d5e8c7a49..63bb13502 100644 --- a/test/providers/validationProvider.test.ts +++ b/test/providers/validationProvider.test.ts @@ -1,432 +1,658 @@ +import { TextDocument } from "vscode-languageserver-textdocument"; import { expect } from "chai"; import { Position, integer } from "vscode-languageserver"; import { doValidate, getYamlValidation, } from "../../src/providers/validationProvider"; +import { WorkspaceFolderContext } from "../../src/services/workspaceManager"; import { createTestValidationManager, createTestWorkspaceManager, getDoc, + resolveDocUri, + enableExecutionEnvironmentSettings, + disableExecutionEnvironmentSettings, setFixtureAnsibleCollectionPathEnv, } from "../helper"; +import { ValidationManager } from "../../src/services/validationManager"; -setFixtureAnsibleCollectionPathEnv(); +function testValidationFromCache( + validationManager: ValidationManager, + textDoc: TextDocument +) { + it("should provide no diagnostics", async function () { + const actualDiagnostics = await doValidate(textDoc, validationManager); + + expect(actualDiagnostics.size).to.equal(0); + }); +} + +function assertValidateTests( + tests, + context: WorkspaceFolderContext, + validationManager: ValidationManager, + textDoc: TextDocument +) { + tests.forEach((test) => { + it(`should provide diagnostics for ${test.name}`, async function () { + const actualDiagnostics = await doValidate( + textDoc, + validationManager, + false, + context + ); + + if (test.diagnosticReport.length === 0) { + expect(actualDiagnostics.has(`file://${textDoc.uri}`)).to.be.false; + } else { + expect(actualDiagnostics.get(`file://${textDoc.uri}`).length).to.equal( + test.diagnosticReport.length + ); + + actualDiagnostics.get(`file://${textDoc.uri}`).forEach((diag, i) => { + const actDiag = diag; + const expDiag = test.diagnosticReport[i]; + + expect(actDiag.message).include(expDiag.message); + expect(actDiag.range).to.deep.equal(expDiag.range); + expect(actDiag.severity).to.equal(expDiag.severity); + expect(actDiag.source).to.equal(expDiag.source); + }); + } + }); + }); +} + +function testAnsibleLintErrors( + context: WorkspaceFolderContext, + validationManager: ValidationManager, + textDoc: TextDocument +) { + const tests = [ + { + name: "specific ansible lint errors", + diagnosticReport: [ + { + severity: 1, + message: "violates variable naming standards", + range: { + start: { line: 4, character: 0 } as Position, + end: { + line: 4, + character: integer.MAX_VALUE, + } as Position, + }, + source: "Ansible", + }, + { + severity: 1, + message: "All tasks should be named", + range: { + start: { line: 6, character: 0 } as Position, + end: { + line: 6, + character: integer.MAX_VALUE, + } as Position, + }, + source: "Ansible", + }, + { + severity: 1, + message: "Use FQCN for builtin actions", + range: { + start: { line: 14, character: 0 } as Position, + end: { + line: 14, + character: integer.MAX_VALUE, + } as Position, + }, + source: "Ansible", + }, + { + severity: 1, + message: "Commands should not change things if nothing needs doing", + range: { + start: { line: 14, character: 0 } as Position, + end: { + line: 14, + character: integer.MAX_VALUE, + } as Position, + }, + source: "Ansible", + }, + ], + }, + ]; + assertValidateTests(tests, context, validationManager, textDoc); +} + +function testAnsibleSyntaxCheckNoErrors( + context: WorkspaceFolderContext, + validationManager: ValidationManager, + textDoc: TextDocument +) { + const tests = [ + { + name: "no specific ansible lint errors", + diagnosticReport: [], + }, + ]; + assertValidateTests(tests, context, validationManager, textDoc); +} + +function testAnsibleSyntaxCheckEmptyPlaybook( + context: WorkspaceFolderContext, + validationManager: ValidationManager, + textDoc: TextDocument +) { + const tests = [ + { + name: "empty playbook", + diagnosticReport: [], + }, + ]; + assertValidateTests(tests, context, validationManager, textDoc); +} + +function testAnsibleSyntaxCheckNoHost( + context: WorkspaceFolderContext, + validationManager: ValidationManager, + textDoc: TextDocument +) { + const tests = [ + { + name: "no host", + diagnosticReport: [ + { + severity: 1, + // eslint-disable-next-line quotes + message: "the field 'hosts' is required but was not set", + range: { + start: { line: 0, character: 0 } as Position, + end: { + line: 0, + character: integer.MAX_VALUE, + } as Position, + }, + source: "Ansible", + }, + ], + }, + ]; + assertValidateTests(tests, context, validationManager, textDoc); +} + +function testInvalidYamlFile( + context: WorkspaceFolderContext, + validationManager: ValidationManager, + textDoc: TextDocument +) { + const tests = [ + { + name: "invalid YAML", + file: "diagnostics/invalid_yaml.yml", + diagnosticReport: [ + { + severity: 1, + message: "Nested mappings are not allowed", + range: { + start: { line: 6, character: 13 } as Position, + end: { + line: 6, + character: 13, + } as Position, + }, + source: "Ansible [YAML]", + }, + { + severity: 1, + message: "Document contains trailing content", + range: { + start: { line: 7, character: 0 } as Position, + end: { + line: 8, + character: 0, + } as Position, + }, + source: "Ansible [YAML]", + }, + ], + }, + ]; + + tests.forEach(({ name, diagnosticReport }) => { + it(`should provide diagnostic for ${name}`, async function () { + const actualDiagnostics = getYamlValidation(textDoc); + expect(actualDiagnostics.length).to.equal(diagnosticReport.length); + + actualDiagnostics.forEach((diag, i) => { + const actDiag = diag; + const expDiag = diagnosticReport[i]; + + expect(actDiag.message).include(expDiag.message); + expect(actDiag.range).to.deep.equal(expDiag.range); + expect(actDiag.severity).to.equal(expDiag.severity); + expect(actDiag.source).to.equal(expDiag.source); + }); + }); + }); +} describe("doValidate()", () => { const workspaceManager = createTestWorkspaceManager(); const validationManager = createTestValidationManager(); + let fixtureFilePath = "diagnostics/lint_errors.yml"; + let fixtureFileUri = resolveDocUri(fixtureFilePath); + let context = workspaceManager.getContext(fixtureFileUri); + + let textDoc = getDoc(fixtureFilePath); + let docSettings = context.documentSettings.get(textDoc.uri); describe("Get validation only from cache", () => { - it("should provide no diagnostics", async function () { - const textDoc = await getDoc("diagnostics/lint_errors.yml"); + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + enableExecutionEnvironmentSettings(docSettings); + }); - const actualDiagnostics = await doValidate(textDoc, validationManager); + testValidationFromCache(validationManager, textDoc); - expect(actualDiagnostics.size).to.equal(0); + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + + testValidationFromCache(validationManager, textDoc); }); }); describe("Ansible diagnostics", () => { describe("Diagnostics using ansible-lint", () => { - const tests = [ - { - name: "specific ansible lint errors", - file: "diagnostics/lint_errors.yml", - diagnosticReport: [ - { - severity: 1, - message: "violates variable naming standards", - range: { - start: { line: 4, character: 0 } as Position, - end: { - line: 4, - character: integer.MAX_VALUE, - } as Position, - }, - source: "Ansible", - }, - { - severity: 1, - message: "All tasks should be named", - range: { - start: { line: 6, character: 0 } as Position, - end: { - line: 6, - character: integer.MAX_VALUE, - } as Position, - }, - source: "Ansible", - }, - { - severity: 1, - message: "Use FQCN for builtin actions", - range: { - start: { line: 14, character: 0 } as Position, - end: { - line: 14, - character: integer.MAX_VALUE, - } as Position, - }, - source: "Ansible", - }, - { - severity: 1, - message: - "Commands should not change things if nothing needs doing", - range: { - start: { line: 14, character: 0 } as Position, - end: { - line: 14, - character: integer.MAX_VALUE, - } as Position, - }, - source: "Ansible", - }, - ], - }, - { - name: "empty playbook", - file: "diagnostics/empty.yml", - diagnosticReport: [ - { - severity: 1, - message: "[syntax-check] Empty playbook, nothing to do", - range: { - start: { line: 0, character: 0 } as Position, - end: { - line: 0, - character: integer.MAX_VALUE, - } as Position, - }, - source: "Ansible", - }, - ], - }, - { - name: "no host", - file: "diagnostics/noHost.yml", - diagnosticReport: [ - { - severity: 1, - message: "[syntax-check] Ansible syntax check failed", - range: { - start: { line: 0, character: 0 } as Position, - end: { - line: 0, - character: integer.MAX_VALUE, - } as Position, - }, - source: "Ansible", - }, - ], - }, - ]; + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + enableExecutionEnvironmentSettings(docSettings); + }); - tests.forEach(({ name, file, diagnosticReport }) => { - it(`should provide diagnostics for ${name}`, async function () { - const textDoc = await getDoc(file); - const context = workspaceManager.getContext(textDoc.uri); + testAnsibleLintErrors(context, validationManager, textDoc); - const actualDiagnostics = await doValidate( - textDoc, - validationManager, - false, - context - ); + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); - if (diagnosticReport.length === 0) { - expect(actualDiagnostics.has(`file://${textDoc.uri}`)).to.be.false; - } else { - expect( - actualDiagnostics.get(`file://${textDoc.uri}`).length - ).to.equal(diagnosticReport.length); - - actualDiagnostics - .get(`file://${textDoc.uri}`) - .forEach((diag, i) => { - const actDiag = diag; - const expDiag = diagnosticReport[i]; - - expect(actDiag.message).include(expDiag.message); - expect(actDiag.range).to.deep.equal(expDiag.range); - expect(actDiag.severity).to.equal(expDiag.severity); - expect(actDiag.source).to.equal(expDiag.source); - }); - } + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); + + testAnsibleLintErrors(context, validationManager, textDoc); }); }); describe("Diagnostics after falling back to --syntax-check due to change in settings", () => { - const tests = [ - { - name: "no specific ansible lint errors", - file: "diagnostics/lint_errors.yml", - diagnosticReport: [], - }, - { - name: "empty playbook", - file: "diagnostics/empty.yml", - diagnosticReport: [], - }, - { - name: "no host", - file: "diagnostics/noHost.yml", - diagnosticReport: [ - { - severity: 1, - // eslint-disable-next-line quotes - message: "the field 'hosts' is required but was not set", - range: { - start: { line: 0, character: 0 } as Position, - end: { - line: 0, - character: integer.MAX_VALUE, - } as Position, - }, - source: "Ansible", - }, - ], - }, - ]; + describe("no specific ansible lint errors", () => { + describe("With EE enabled @ee", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + enableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); + + after(async () => { + (await docSettings).ansibleLint.enabled = true; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); - tests.forEach(({ name, file, diagnosticReport }) => { - it(`should provide diagnostics for ${name}`, async function () { - const textDoc = await getDoc(file); - const context = workspaceManager.getContext(textDoc.uri); + describe("With EE disabled", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); - // Update setting to disable ansible-lint - const docSettings = context.documentSettings.get(textDoc.uri); - const cachedDefaultSetting = (await docSettings).ansibleLint.enabled; - (await docSettings).ansibleLint.enabled = false; + testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); + }); + after(async () => { + (await docSettings).ansibleLint.enabled = true; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); - const actualDiagnostics = await doValidate( - textDoc, + describe("empty playbook", () => { + fixtureFilePath = "diagnostics/empty.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("With EE enabled @ee", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + enableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckEmptyPlaybook( + context, validationManager, - false, - context + textDoc ); - if (diagnosticReport.length === 0) { - expect(actualDiagnostics.has(`file://${textDoc.uri}`)).to.be.false; - } else { - expect( - actualDiagnostics.get(`file://${textDoc.uri}`).length - ).to.equal(diagnosticReport.length); - - actualDiagnostics - .get(`file://${textDoc.uri}`) - .forEach((diag, i) => { - const actDiag = diag; - const expDiag = diagnosticReport[i]; - - expect(actDiag.message).include(expDiag.message); - expect(actDiag.range).to.deep.equal(expDiag.range); - expect(actDiag.severity).to.equal(expDiag.severity); - expect(actDiag.source).to.equal(expDiag.source); - }); - } - - (await docSettings).ansibleLint.enabled = cachedDefaultSetting; + after(async () => { + (await docSettings).ansibleLint.enabled = true; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckEmptyPlaybook( + context, + validationManager, + textDoc + ); + }); + after(async () => { + (await docSettings).ansibleLint.enabled = true; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("no host", () => { + fixtureFilePath = "diagnostics/noHost.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("With EE enabled @ee", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + enableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); + + after(async () => { + (await docSettings).ansibleLint.enabled = true; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); + }); + after(async () => { + (await docSettings).ansibleLint.enabled = true; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); }); }); + describe("Diagnostics after falling back to --syntax-check due to unavailability of ansible-lint", () => { - const tests = [ - { - name: "no specific ansible lint errors", - file: "diagnostics/lint_errors.yml", - diagnosticReport: [], - }, - { - name: "no host", - file: "diagnostics/noHost.yml", - diagnosticReport: [ - { - severity: 1, - // eslint-disable-next-line quotes - message: "the field 'hosts' is required but was not set", - range: { - start: { line: 0, character: 0 } as Position, - end: { - line: 0, - character: integer.MAX_VALUE, - } as Position, - }, - source: "Ansible", - }, - ], - }, - ]; + describe("no specific ansible lint errors", () => { + fixtureFilePath = "diagnostics/lint_errors.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("With EE enabled @ee", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + enableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); + + after(async () => { + (await docSettings).ansibleLint.enabled = true; + (await docSettings).ansibleLint.path = "ansible-lint"; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); - tests.forEach(({ name, file, diagnosticReport }) => { - it(`should provide diagnostics for ${name}`, async function () { - const textDoc = await getDoc(file); - const context = workspaceManager.getContext(textDoc.uri); + describe("With EE disabled", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); - // Update setting to disable ansible-lint - const docSettings = context.documentSettings.get(textDoc.uri); - const cachedDefaultSetting = (await docSettings).ansibleLint.path; - (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; + testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); + }); + after(async () => { + (await docSettings).ansibleLint.enabled = true; + (await docSettings).ansibleLint.path = "ansible-lint"; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); - const actualDiagnostics = await doValidate( - textDoc, - validationManager, - false, - context - ); + describe("no host", () => { + fixtureFilePath = "diagnostics/noHost.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("With EE enabled @ee", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + enableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); + + after(async () => { + (await docSettings).ansibleLint.enabled = true; + (await docSettings).ansibleLint.path = "ansible-lint"; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); - if (diagnosticReport.length === 0) { - expect(actualDiagnostics.has(`file://${textDoc.uri}`)).to.be.false; - } else { - expect( - actualDiagnostics.get(`file://${textDoc.uri}`).length - ).to.equal(diagnosticReport.length); - - actualDiagnostics - .get(`file://${textDoc.uri}`) - .forEach((diag, i) => { - const actDiag = diag; - const expDiag = diagnosticReport[i]; - - expect(actDiag.message).include(expDiag.message); - expect(actDiag.range).to.deep.equal(expDiag.range); - expect(actDiag.severity).to.equal(expDiag.severity); - expect(actDiag.source).to.equal(expDiag.source); - }); - } - - // Revert setting - (await docSettings).ansibleLint.path = cachedDefaultSetting; + describe("With EE disabled", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); + }); + after(async () => { + (await docSettings).ansibleLint.enabled = true; + (await docSettings).ansibleLint.path = "ansible-lint"; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); }); }); describe("Diagnostics after falling back to --syntax-check due to failure in execution of ansible-lint command", () => { - const tests = [ - { - name: "no specific ansible lint errors", - file: "diagnostics/lint_errors.yml", - diagnosticReport: [], - }, - { - name: "no host", - file: "diagnostics/noHost.yml", - diagnosticReport: [ - { - severity: 1, - // eslint-disable-next-line quotes - message: "the field 'hosts' is required but was not set", - range: { - start: { line: 0, character: 0 } as Position, - end: { - line: 0, - character: integer.MAX_VALUE, - } as Position, - }, - source: "Ansible", - }, - ], - }, - ]; + describe("no specific ansible lint errors", () => { + fixtureFilePath = "diagnostics/lint_errors.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("With EE enabled @ee", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + (await docSettings).ansibleLint.arguments = "-f invalid_argument"; + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + enableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); + + after(async () => { + (await docSettings).ansibleLint.enabled = true; + (await docSettings).ansibleLint.arguments = undefined; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); - tests.forEach(({ name, file, diagnosticReport }) => { - it(`should provide diagnostics for ${name}`, async function () { - const textDoc = await getDoc(file); - const context = workspaceManager.getContext(textDoc.uri); + describe("With EE disabled", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + (await docSettings).ansibleLint.arguments = "-f invalid_argument"; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); - // Update setting to make the ansible-lint command fail - const docSettings = context.documentSettings.get(textDoc.uri); - const cachedDefaultSetting = (await docSettings).ansibleLint - .arguments; - (await docSettings).ansibleLint.arguments = "-f invalid_argument"; + testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); + }); + after(async () => { + (await docSettings).ansibleLint.enabled = true; + (await docSettings).ansibleLint.arguments = undefined; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); - const actualDiagnostics = await doValidate( - textDoc, - validationManager, - false, - context - ); + describe("no host", () => { + fixtureFilePath = "diagnostics/noHost.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("With EE enabled @ee", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + (await docSettings).ansibleLint.arguments = "-f invalid_argument"; + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + enableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); + + after(async () => { + (await docSettings).ansibleLint.enabled = true; + (await docSettings).ansibleLint.arguments = undefined; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + (await docSettings).ansibleLint.enabled = false; + (await docSettings).ansibleLint.arguments = "-f invalid_argument"; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); - if (diagnosticReport.length === 0) { - expect(actualDiagnostics.has(`file://${textDoc.uri}`)).to.be.false; - } else { - expect( - actualDiagnostics.get(`file://${textDoc.uri}`).length - ).to.equal(diagnosticReport.length); - - actualDiagnostics - .get(`file://${textDoc.uri}`) - .forEach((diag, i) => { - const actDiag = diag; - const expDiag = diagnosticReport[i]; - - expect(actDiag.message).include(expDiag.message); - expect(actDiag.range).to.deep.equal(expDiag.range); - expect(actDiag.severity).to.equal(expDiag.severity); - expect(actDiag.source).to.equal(expDiag.source); - }); - } - - (await docSettings).ansibleLint.arguments = cachedDefaultSetting; + testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); + }); + after(async () => { + (await docSettings).ansibleLint.enabled = true; + (await docSettings).ansibleLint.arguments = undefined; + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); }); }); }); describe("YAML diagnostics", () => { - const tests = [ - { - name: "invalid YAML", - file: "diagnostics/invalid_yaml.yml", - diagnosticReport: [ - { - severity: 1, - message: "Nested mappings are not allowed", - range: { - start: { line: 6, character: 13 } as Position, - end: { - line: 6, - character: 13, - } as Position, - }, - source: "Ansible [YAML]", - }, - { - severity: 1, - message: "Document contains trailing content", - range: { - start: { line: 7, character: 0 } as Position, - end: { - line: 8, - character: 0, - } as Position, - }, - source: "Ansible [YAML]", - }, - ], - }, - ]; - - tests.forEach(({ name, file, diagnosticReport }) => { - it(`should provide diagnostic for ${name}`, async function () { - const textDoc = await getDoc(file); - - const actualDiagnostics = getYamlValidation(textDoc); + fixtureFilePath = "diagnostics/invalid_yaml.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + enableExecutionEnvironmentSettings(docSettings); + }); - expect(actualDiagnostics.length).to.equal(diagnosticReport.length); + testInvalidYamlFile(context, validationManager, textDoc); - actualDiagnostics.forEach((diag, i) => { - const actDiag = diag; - const expDiag = diagnosticReport[i]; + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); + }); + }); - expect(actDiag.message).include(expDiag.message); - expect(actDiag.range).to.deep.equal(expDiag.range); - expect(actDiag.severity).to.equal(expDiag.severity); - expect(actDiag.source).to.equal(expDiag.source); - }); + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + disableExecutionEnvironmentSettings(docSettings); }); + + testInvalidYamlFile(context, validationManager, textDoc); }); }); }); From ddce411dc485778440e40842693e93d5be97f950 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Thu, 12 May 2022 18:18:10 +0530 Subject: [PATCH 350/558] Update settings-doc-generator script (#323) * update settings generator to support values of array types * update doc with new settings-generator * add change note for the PR --- docs/changelog-fragments.d/323.bugfix.md | 2 + docs/settings.md | 22 ++--- tools/settings-doc-generator.ts | 120 ++++++++++++++++++++--- 3 files changed, 117 insertions(+), 27 deletions(-) create mode 100644 docs/changelog-fragments.d/323.bugfix.md diff --git a/docs/changelog-fragments.d/323.bugfix.md b/docs/changelog-fragments.d/323.bugfix.md new file mode 100644 index 000000000..21cd4bfa9 --- /dev/null +++ b/docs/changelog-fragments.d/323.bugfix.md @@ -0,0 +1,2 @@ +Fixed settings-doc-generator script to support array-type values -- by +{user}`priyamsahoo` diff --git a/docs/settings.md b/docs/settings.md index 5008b5def..b46e1e912 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -64,23 +64,19 @@ Specify any additional parameters that should be added to the pull command when _default value: `""`_ -- **ansible.executionEnvironment.volumeMounts.0.src**: -The name of the local volume or path to be mounted within execution environment. \ +- **ansible.executionEnvironment.containerOptions**: +Extra parameters passed to the container engine command example: '--net=host' \ _default value: `""`_ -- **ansible.executionEnvironment.volumeMounts.0.dest**: -The path where the file or directory are mounted in the container. \ -_default value: +- **ansible.executionEnvironment.volumeMounts**: + - **src**: The name of the local volume or path to be mounted within execution environment. \ + _default value: `""`_ - -- **ansible.executionEnvironment.volumeMounts.0.options**: -The field is optional, and is a comma-separated list of options, such as ro,Z \ -_default value: + - **dest**: The path where the file or directory are mounted in the container. \ + _default value: `""`_ - -- **ansible.executionEnvironment.containerOptions**: -Extra parameters passed to the container engine command example: '--net=host' \ -_default value: + - **options**: The field is optional, and is a comma-separated list of options, such as ro,Z \ + _default value: `""`_ diff --git a/tools/settings-doc-generator.ts b/tools/settings-doc-generator.ts index 0ff409c7a..76c7e1a96 100644 --- a/tools/settings-doc-generator.ts +++ b/tools/settings-doc-generator.ts @@ -2,6 +2,7 @@ import Handlebars = require("handlebars"); import * as fs from "fs"; import { SettingsManager } from "../src/services/settingsManager"; import * as path from "path"; +import * as _ from "lodash"; // Get the default settings values from settingsManager class const settingsManager = new SettingsManager(null, null); @@ -16,7 +17,6 @@ const settingsInDotNotation = toDotNotation(defaultSettings); const arrayOfDefaultSettings = structureSettings(settingsInDotNotation); // Use handlebars.js to generate doc file with `defaultSettings.handlebars` as template - const TEMPLATE = ` # Language Server Settings @@ -24,7 +24,24 @@ The following are the default values of the settings provided by the Ansible Lan {{#each arrayOfDefaultSettings}} - **{{setting}}**: +{{#if description}} {{description}} \\ +{{/if}} +{{#ifValueArray valueType}} +{{#each this.defaultValue}} + - **{{key}}**: {{description}} \\ + _default value: +{{#if defaultValue}} +\`{{defaultValue}}\`_ +{{else}} +{{#ifEqualsFalse defaultValue}} +\`false\`_ +{{else}} +\`""\`_ +{{/ifEqualsFalse}} +{{/if}} +{{/each}} +{{else}} _default value: {{#if defaultValue}} \`{{defaultValue}}\`_ @@ -35,6 +52,7 @@ _default value: \`""\`_ {{/ifEqualsFalse}} {{/if}} +{{/ifValueArray}} {{/each}} `; @@ -48,7 +66,13 @@ const settingsReadmeFileUri = path.join(__dirname, "..", "docs", "settings.md"); // Else, normal #if treats it as boolean, even after converting booleans to strings in typescript Handlebars.registerHelper("ifEqualsFalse", function (arg1, options) { // eslint-disable-next-line eqeqeq - return arg1.toString() == "false" ? options.fn(this) : options.inverse(this); + return arg1.toString() === "false" ? options.fn(this) : options.inverse(this); +}); + +// Register a special function for handlebars to deal with the checking of "list" as value type of settings +Handlebars.registerHelper("ifValueArray", function (arg1, options) { + // eslint-disable-next-line eqeqeq + return arg1.toString() === "list" ? options.fn(this) : options.inverse(this); }); const template = Handlebars.compile(TEMPLATE); @@ -65,7 +89,11 @@ export function toDotNotation(obj, res = {}, current = "") { const value = obj[key]; const newKey = current ? `${current}.${key}` : key; // joined key with dot if (value && typeof value === "object") { - toDotNotation(value, res, newKey); // it's a nested object, so do it again + if (_.isArray(value) && value[0]) { + toDotNotation(value[0], res, `${newKey}._array`); // it's an array object, so do it again (to identify array '._array' is added) + } else { + toDotNotation(value, res, newKey); // it's a nested object, so do it again + } } else { res[newKey] = value; // it's not an object, so set the property } @@ -76,39 +104,103 @@ export function toDotNotation(obj, res = {}, current = "") { export function structureSettings(settingsInDotNotation) { // Form an appropriate structure so that it is easier to iterate over it in the template // Structure is as follows: + // // arrayOfDefaultSettings: [ // { - // key: ansible.first.settings, + // key: ansible.first.setting, // defaultValue: some-values, - // description: 'description for setting 1' + // description: 'description for setting 1', + // valueType: 'value-type-of-setting-1' // }, // { - // key: ansible.second.settings, + // key: ansible.second.setting, // defaultValue: another-values, - // description: 'description for setting 2' + // description: 'description for setting 2', + // valueType: 'value-type-of-setting-2' + // } + // { + // key: ansible.third.setting, + // defaultValue: [ + // first-sub-value: { + // defaultValue: default-sub-value-1 + // description: 'description for sub value 1' + // } + // second-sub-value: { + // defaultValue: default-sub-value-2 + // description: 'description for sub value 2' + // } + // ], + // valueType: 'list' // } // ] + const settingsArray = []; + const objWithArrayValues = []; + const keysWithArrayValues = []; // keep track of keys whose elements are array for (const k in settingsInDotNotation) { const keyArray = k.split("."); keyArray.splice(-1, 1); const key = keyArray.join("."); + // Find keys that have array elements + const arrayElementIndex = keyArray.findIndex((e) => e === "_array"); + const arrayElement = + arrayElementIndex >= 0 ? keyArray[arrayElementIndex - 1] : undefined; + + // if found, make a combined obj of such elements and group them later + if (arrayElement) { + keysWithArrayValues.push(keyArray.slice(0, arrayElementIndex).join(".")); + const arrayObj = { + parent: keyArray.slice(0, arrayElementIndex).join("."), + key: keyArray[arrayElementIndex + 1], + defaultValue: settingsInDotNotation[`${key}.default`].toString() // convert to string for showing the actual value in doc + ? settingsInDotNotation[`${key}.default`] + : "", + description: settingsInDotNotation[`${key}.description`], + }; + + objWithArrayValues.push(arrayObj); + // break; + } else { + const obj = { + setting: key, + defaultValue: settingsInDotNotation[`${key}.default`].toString() // convert to string for showing the actual value in doc + ? settingsInDotNotation[`${key}.default`] + : "", + description: settingsInDotNotation[`${key}.description`], + valueType: typeof settingsInDotNotation[`${key}.default`], + }; + + settingsArray.push(obj); + } + } + + // group the array elements based on their parent key + const arrayObjFinal = _.groupBy( + makeSettingsUnique(objWithArrayValues), + (obj) => obj.parent + ); + + // add them back to the settingsArray with appropriate structure and value + for (const k in arrayObjFinal) { const obj = { - setting: key, - defaultValue: settingsInDotNotation[`${key}.default`].toString() // convert to string for showing the actual value in doc - ? settingsInDotNotation[`${key}.default`] - : "", - description: settingsInDotNotation[`${key}.description`], + setting: k, + defaultValue: arrayObjFinal[k], + valueType: "list", }; settingsArray.push(obj); } - const uniqueSettings = settingsArray.filter((value, index) => { + + return makeSettingsUnique(settingsArray); +} + +export function makeSettingsUnique(arrayObject) { + const uniqueSettings = arrayObject.filter((value, index) => { const _value = JSON.stringify(value); return ( index === - settingsArray.findIndex((obj) => { + arrayObject.findIndex((obj) => { return JSON.stringify(obj) === _value; }) ); From e5fb4ce1ad09993c011fb387e42caebf40dd5eee Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 13 May 2022 12:21:42 +0530 Subject: [PATCH 351/558] Bump version to v0.7.0 (#324) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- CHANGELOG.md | 45 +++++++++++++++++++++++ docs/changelog-fragments.d/318.feature.md | 31 ---------------- docs/changelog-fragments.d/323.bugfix.md | 2 - package-lock.json | 4 +- package.json | 2 +- 5 files changed, 48 insertions(+), 36 deletions(-) delete mode 100644 docs/changelog-fragments.d/318.feature.md delete mode 100644 docs/changelog-fragments.d/323.bugfix.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 94eb73913..a8fba8b0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,51 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag +## v0.7.0 (2022-05-12) + +### Bugfixes + +- Fixed settings-doc-generator script to support array-type values -- by + {user}`priyamsahoo` + + ({issue}`323`) + +### Features + +- ````md + Added EE settings for volume mounts, container options and pull arguments -- + by {user}`ganeshrn` + + - Add settings to allow custom volume mount path eg: + + ```code + "ansible.executionEnvironment.volumeMounts": [ + + { + "src" : "/Users/home/common/collections", + "dest": "/Users/home/common/collections" + } + ], + ``` + + - Add setting to pass container options + + ```code + "ansible.executionEnvironment.containerOptions": ["--net=host"] + ``` + + - Add setting to pass container image pull arguments + + ```code + "ansible.executionEnvironment.pull.arguments": ["–-tls-verify=false"] + ``` + + - Move `execution-environment.pull-policy` setting to + `execution-environment.pull.policy` + ```` + + ({issue}`318`) + ## v0.6.1 (2022-04-14) No significant changes. diff --git a/docs/changelog-fragments.d/318.feature.md b/docs/changelog-fragments.d/318.feature.md deleted file mode 100644 index 32cb5636f..000000000 --- a/docs/changelog-fragments.d/318.feature.md +++ /dev/null @@ -1,31 +0,0 @@ -````md -Added EE settings for volume mounts, container options and pull arguments -- by -{user}`ganeshrn` - -- Add settings to allow custom volume mount path eg: - -```code - "ansible.executionEnvironment.volumeMounts": [ - - { - "src" : "/Users/home/common/collections", - "dest": "/Users/home/common/collections" - } - ], -``` - -- Add setting to pass container options - -```code - "ansible.executionEnvironment.containerOptions": ["--net=host"] -``` - -- Add setting to pass container image pull arguments - -```code -"ansible.executionEnvironment.pull.arguments": ["–-tls-verify=false"] -``` - -- Move `execution-environment.pull-policy` setting to - `execution-environment.pull.policy` -```` diff --git a/docs/changelog-fragments.d/323.bugfix.md b/docs/changelog-fragments.d/323.bugfix.md deleted file mode 100644 index 21cd4bfa9..000000000 --- a/docs/changelog-fragments.d/323.bugfix.md +++ /dev/null @@ -1,2 +0,0 @@ -Fixed settings-doc-generator script to support array-type values -- by -{user}`priyamsahoo` diff --git a/package-lock.json b/package-lock.json index 38bd88ddb..4c71f8e75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.6.1", + "version": "0.7.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.6.1", + "version": "0.7.0", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index fa8a6258b..88cac8cbc 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.6.1", + "version": "0.7.0", "contributors": [ { "name": "Tomasz Maciążek", From 73c0357b038d8a66465d1174116425fc8ccaa762 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 13 May 2022 13:09:37 +0530 Subject: [PATCH 352/558] Bump version to v0.7.1 (#326) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- CHANGELOG.md | 4 ++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8fba8b0b..0b375cd86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,10 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag +## v0.7.1 (2022-05-13) + +No significant changes. + ## v0.7.0 (2022-05-12) ### Bugfixes diff --git a/package-lock.json b/package-lock.json index 4c71f8e75..22437d402 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.7.0", + "version": "0.7.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.7.0", + "version": "0.7.1", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 88cac8cbc..3f26b607a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.7.0", + "version": "0.7.1", "contributors": [ { "name": "Tomasz Maciążek", From 7a98c6cfdbac20e37fb57e5230ef5acea30844bd Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Thu, 19 May 2022 15:20:32 +0530 Subject: [PATCH 353/558] add ee service plugin path logs (#331) * add ee service plugin path logs * add changelog * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * update changelog * fix typo * fix typo Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/changelog-fragments.d/331.misc.md | 2 ++ src/services/executionEnvironment.ts | 10 ++++++++++ 2 files changed, 12 insertions(+) create mode 100644 docs/changelog-fragments.d/331.misc.md diff --git a/docs/changelog-fragments.d/331.misc.md b/docs/changelog-fragments.d/331.misc.md new file mode 100644 index 000000000..7ec407aa5 --- /dev/null +++ b/docs/changelog-fragments.d/331.misc.md @@ -0,0 +1,2 @@ +Added plugin path logs in execution environment service to add information +related to copied plugins from within EE to local path. -- by {user}`ganeshrn` diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 8bd24d68d..ea62e3e59 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -116,6 +116,10 @@ export class ExecutionEnvironment { ansibleConfig.module_locations, hostCacheBasePath ); + + this.connection.console.log( + `Cached plugin paths: \n collections_paths: ${ansibleConfig.collections_paths} \n module_locations: ${ansibleConfig.module_locations}` + ); } else { if (this.useProgressTracker) { progressTracker = @@ -129,6 +133,9 @@ export class ExecutionEnvironment { true ); } + this.connection.console.log( + `Identified plugin paths by AnsibleConfig service: \n collections_paths: ${ansibleConfig.collections_paths} \n module_locations: ${ansibleConfig.module_locations}` + ); ansibleConfig.collections_paths = await this.copyPluginDocFiles( hostCacheBasePath, containerName, @@ -164,6 +171,9 @@ export class ExecutionEnvironment { "/" ); } + this.connection.console.log( + `Copied plugin paths by ExecutionEnvironment service: \n collections_paths: ${ansibleConfig.collections_paths} \n module_locations: ${ansibleConfig.module_locations}` + ); // plugin cache successfully created fs.closeSync( fs.openSync(path.join(hostCacheBasePath, this.successFileMarker), "w+") From 97e19e766330dc993e6d2e32d318c0ac76fb3c0f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 12:22:09 +0100 Subject: [PATCH 354/558] Bump ansible-compat from 2.0.3 to 2.0.4 (#328) Bumps [ansible-compat](https://github.com/ansible-community/ansible-compat) from 2.0.3 to 2.0.4. - [Release notes](https://github.com/ansible-community/ansible-compat/releases) - [Commits](https://github.com/ansible-community/ansible-compat/compare/v2.0.3...v2.0.4) --- updated-dependencies: - dependency-name: ansible-compat dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 8624e9ff8..0bf0ef159 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ # pip-compile --extra=docs --extra=test --no-annotate --output-file=requirements.txt --strip-extras setup.cfg # alabaster==0.7.12 -ansible-compat==2.0.3 +ansible-compat==2.0.4 ansible-core==2.12.5 ansible-lint==6.1.0 ansible-pygments==0.1.1 From c3990fe93512dc57d5433b6adfb36f9839c97bb8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 12:40:42 +0100 Subject: [PATCH 355/558] Bump ansible-core from 2.12.5 to 2.13.0 (#327) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 0bf0ef159..eff8a7d20 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ # alabaster==0.7.12 ansible-compat==2.0.4 -ansible-core==2.12.5 +ansible-core==2.13.0 ansible-lint==6.1.0 ansible-pygments==0.1.1 attrs==21.4.0 From 63d152b78a602aa0fcac6d9c74944e8bce46cda8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 11:46:03 +0000 Subject: [PATCH 356/558] Bump ansible-lint from 6.1.0 to 6.2.1 (#332) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index eff8a7d20..37aec4e90 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ alabaster==0.7.12 ansible-compat==2.0.4 ansible-core==2.13.0 -ansible-lint==6.1.0 +ansible-lint==6.2.1 ansible-pygments==0.1.1 attrs==21.4.0 babel==2.9.1 From 595619ab7c4dc7bba8ccc5b2d8a5a0d49a6c457b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 12:54:17 +0100 Subject: [PATCH 357/558] Bump pyparsing from 3.0.7 to 3.0.9 (#321) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 37aec4e90..e3dabaa6f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -46,7 +46,7 @@ pre-commit==2.19.0 pycparser==2.21 pyenchant==3.2.2 pygments==2.11.2 -pyparsing==3.0.7 +pyparsing==3.0.9 pytz==2022.1 pyyaml==6.0 requests==2.27.1 From 021b8a43a86805fd870fa7b370d87573f52b05f7 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 23 May 2022 16:45:01 +0100 Subject: [PATCH 358/558] Replace npm GHA pipeline with tox (#334) --- .config/dictionary.txt | 1 + .github/workflows/{npm.yml => tox.yml} | 55 +++++++++++++++++--------- .gitignore | 4 ++ tox.ini | 12 +++++- 4 files changed, 52 insertions(+), 20 deletions(-) rename .github/workflows/{npm.yml => tox.yml} (65%) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 37b110b4c..d65d9ae69 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -55,6 +55,7 @@ notest notfound npmjs nvim +nvmrc parseable patchback pkgcache diff --git a/.github/workflows/npm.yml b/.github/workflows/tox.yml similarity index 65% rename from .github/workflows/npm.yml rename to .github/workflows/tox.yml index ad420d38e..0bc1a3c05 100644 --- a/.github/workflows/npm.yml +++ b/.github/workflows/tox.yml @@ -1,5 +1,5 @@ # alternative KISS pipeline to bloated ci.yml, modeled after vscode-ansible one. -name: npm +name: tox # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the main branch @@ -17,9 +17,12 @@ env: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: test: - name: ${{ matrix.name || format('{0} ({1})', matrix.npm-target, matrix.os) }} + env: + # to expose matrix job name to steps, which is not possible with expansions + JOB_NAME: ${{ matrix.name || format('{0} ({1})', matrix.tox-target, matrix.os) }} + name: ${{ matrix.name || format('{0} ({1})', matrix.tox-target, matrix.os) }} # The type of runner that the job will run on - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.os || 'ubuntu-latest' }} defaults: run: shell: ${{ matrix.shell || 'bash'}} @@ -28,23 +31,31 @@ jobs: matrix: os: - ubuntu-latest - npm-target: - - test + node-version: + - "12" + tox-target: + - test-node12 + - test-node14 + - test-node16 upload-artifact: - false name: - false include: + - name: lint + tox-target: lint + - name: docs + tox-target: docs - name: test (wsl) # runner does not support running container - npm-target: test-without-ee + tox-target: test-without-ee # https://github.com/actions/virtual-environments/issues/5151 os: windows-2019 shell: "wsl-bash {0}" - name: test (macos) os: macos-11 # runner does not support running container - npm-target: test-without-ee + tox-target: test-without-ee steps: - name: Disable autocrlf @@ -65,22 +76,30 @@ jobs: # https://github.com/Vampire/setup-wsl#wsl-shell-command wsl-shell-command: "bash -i -euo pipefail" - - name: Use NodeJS v16 + - name: Run ./tools/test-setup.sh + run: ./tools/test-setup.sh + + - name: Install tox + run: python3 -m pip install --user tox + + - name: Dump node version into .nvmrc file + # save node version in .nvmrc file by looking for a pattern like + # node12 in job name. If pattern is not found it uses 'current' alias + run: > + python3 -c 'import os, re; + v = re.search("node(\d+)", os.environ.get("JOB_NAME", "")) or ["", "current"]; + print(v[1])' > .nvmrc + + - name: Use node # as Windows executables are exposed inside WSL at top of PATH, we # would end with broken npm script in PATH on wsl. if: "!contains(matrix.shell, 'wsl')" - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: - node-version: 16 - - - name: Run ./tools/test-setup.sh - run: ./tools/test-setup.sh - - - name: npm run compile - run: npm run compile + node-version-file: '.nvmrc' - - name: npm run ${{ matrix.npm-target }} - run: npm run ${{ matrix.npm-target }} + - name: tox -e ${{ matrix.tox-target }} + run: python3 -m tox -e ${{ matrix.tox-target }} check: # This job does nothing and is only used for the branch protection if: always() diff --git a/.gitignore b/.gitignore index 2f9baed40..990e20965 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,7 @@ __pycache__ UNKNOWN.egg-info # Used on GHA to generate changelogs: change-notes-*.md + +# Ignored because we support multiple versions and switch between them +.nvmrc +.node-version diff --git a/tox.ini b/tox.ini index 1cd248506..5ae7471c0 100644 --- a/tox.ini +++ b/tox.ini @@ -45,11 +45,13 @@ allowlist_externals = # Activation of node version is not persistent and nvm works only from # within `bash --login`, do not call nvm/npm/node without it under tox as # you might end-up using system version, if any +# On GHA we run run tox --notest, setup/node-version and tox ... after, as +# the second one will configure the version of node that we tox dumps. commands_pre = - {node12,node14,node16}: bash --login -c "nvm install --latest-npm --default {env:NODE_VERSION}" + {node12,node14,node16}: bash --login -c "echo {env:NODE_VERSION} > .nvmrc" commands_post = # restore nvm default alias to stable version - {node12,node14,node16}: bash --login -c "nvm alias default stable" + {node12,node14,node16}: bash --login -c "node --version && echo 'current' > .nvmrc" commands = bash --login -c "npm run test" @@ -63,6 +65,12 @@ description = test-node14: with node 14 test-node16: with node 16 +[testenv:test-without-ee] +description = + Run tests without execution environment ones +commands = + bash --login -c "npm run test-without-ee" + [testenv:deps] description = Bump all test dependencies # Using py310 in order to make pip-compile consistent. From 622340b7d4bf6ddfedae024d1ad9ce2bc4cf16c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Giquel?= Date: Tue, 24 May 2022 05:41:45 +0200 Subject: [PATCH 359/558] Fix auto-completion for modules when documentation is not displayed (#330) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- .config/dictionary.txt | 1 + docs/changelog-fragments.d/329.bugfix.md | 2 + src/providers/completionProvider.ts | 12 +++++- test/providers/completionProvider.test.ts | 51 +++++++++++++++++++++-- 4 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 docs/changelog-fragments.d/329.bugfix.md diff --git a/.config/dictionary.txt b/.config/dictionary.txt index d65d9ae69..fae689b84 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -113,6 +113,7 @@ Nalawade Tomasz dbaeumer esbenp +fredericgiquel ganeshrn hbenl kimbernator diff --git a/docs/changelog-fragments.d/329.bugfix.md b/docs/changelog-fragments.d/329.bugfix.md new file mode 100644 index 000000000..58e2e68b5 --- /dev/null +++ b/docs/changelog-fragments.d/329.bugfix.md @@ -0,0 +1,2 @@ +Fix auto-completion for modules when documentation is not displayed -- by +{user}`fredericgiquel` diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index 2249d4a5c..98ea830c2 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -149,6 +149,13 @@ export async function doCompletion( kind = CompletionItemKind.Class; } const [namespace, collection, name] = moduleFqcn.split("."); + const insertName = useFqcn ? moduleFqcn : name; + const insertText = cursorAtEndOfLine + ? `${insertName}:${resolveSuffix( + "dict", // since a module is always a dictionary + cursorAtFirstElementOfList + )}` + : insertName; return { label: useFqcn ? moduleFqcn : name, kind: kind, @@ -166,7 +173,10 @@ export async function doCompletion( atEndOfLine: cursorAtEndOfLine, firstElementOfList: cursorAtFirstElementOfList, }, - textEdit: textEdit, + textEdit: { + ...textEdit, + newText: insertText, + }, }; } ); diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index ec570e342..246f11b11 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -47,8 +47,12 @@ function testPlayKeywords( } else { if (!filteredCompletion[0].item) { expect(filteredCompletion[0].label).be.equal(completion); + expect(filteredCompletion[0].textEdit.newText).be.equal(completion); } else { expect(filteredCompletion[0].item.label).to.be.equal(completion); + expect(filteredCompletion[0].item.textEdit.newText).to.be.equal( + completion + ); } } }); @@ -88,8 +92,12 @@ function testRoleKeywords( } else { if (!filteredCompletion[0].item) { expect(filteredCompletion[0].label).be.equal(completion); + expect(filteredCompletion[0].textEdit.newText).be.equal(completion); } else { expect(filteredCompletion[0].item.label).to.be.equal(completion); + expect(filteredCompletion[0].item.textEdit.newText).to.be.equal( + completion + ); } } }); @@ -129,8 +137,12 @@ function testBlockKeywords( } else { if (!filteredCompletion[0].item) { expect(filteredCompletion[0].label).be.equal(completion); + expect(filteredCompletion[0].textEdit.newText).be.equal(completion); } else { expect(filteredCompletion[0].item.label).to.be.equal(completion); + expect(filteredCompletion[0].item.textEdit.newText).to.be.equal( + completion + ); } } }); @@ -170,8 +182,12 @@ function testTaskKeywords( } else { if (!filteredCompletion[0].item) { expect(filteredCompletion[0].label).be.equal(completion); + expect(filteredCompletion[0].textEdit.newText).be.equal(completion); } else { expect(filteredCompletion[0].item.label).to.be.equal(completion); + expect(filteredCompletion[0].item.textEdit.newText).to.be.equal( + completion + ); } } }); @@ -241,8 +257,12 @@ function testModuleNames( } else { if (!filteredCompletion[0].item) { expect(filteredCompletion[0].label).to.contain(completion); + expect(filteredCompletion[0].textEdit.newText).to.contain(completion); } else { expect(filteredCompletion[0].item.label).to.contain(completion); + expect(filteredCompletion[0].item.textEdit.newText).to.contain( + completion + ); } } }); @@ -306,8 +326,12 @@ function testModuleOptions( } else { if (!filteredCompletion[0].item) { expect(filteredCompletion[0].label).be.equal(completion); + expect(filteredCompletion[0].textEdit.newText).be.equal(completion); } else { expect(filteredCompletion[0].item.label).to.be.equal(completion); + expect(filteredCompletion[0].item.textEdit.newText).be.equal( + completion + ); } } }); @@ -355,7 +379,7 @@ function testModuleOptionsValues( it(`should provide completion for ${name}`, async function () { const actualCompletion = await doCompletion(textDoc, position, context); - const filteredCompletion = smartFilter( + const labelCompletion = smartFilter( actualCompletion, triggerCharacter ).map((completion) => { @@ -367,9 +391,26 @@ function testModuleOptionsValues( }); if (!completion) { - expect(filteredCompletion.length).be.equal(0); + expect(labelCompletion.length).be.equal(0); + } else { + expect(labelCompletion).be.deep.equal(completion); + } + + const newTextCompletion = smartFilter( + actualCompletion, + triggerCharacter + ).map((completion) => { + if (!completion.item) { + return completion.textEdit.newText; + } else { + return completion.item.textEdit.newText; + } + }); + + if (!completion) { + expect(newTextCompletion.length).be.equal(0); } else { - expect(filteredCompletion).be.deep.equal(completion); + expect(newTextCompletion).be.deep.equal(completion); } }); }); @@ -429,8 +470,12 @@ function testModuleNamesWithoutFQCN( } else { if (!filteredCompletion[0].item) { expect(filteredCompletion[0].label).be.equal(completion); + expect(filteredCompletion[0].textEdit.newText).be.equal(completion); } else { expect(filteredCompletion[0].item.label).to.be.equal(completion); + expect(filteredCompletion[0].item.textEdit.newText).to.be.equal( + completion + ); } } }); From 19dffcd0dec90d41f8f0d4a341f19b3cc91f09c9 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 24 May 2022 07:55:07 +0100 Subject: [PATCH 360/558] Rename ci pipeline to release (#335) Rename old "ci" pipeline to "release" and make it run only on manual triggers, as we use "tox" one for normal testing. Follow-ups will start cleaning the file and remove the testing bits. --- .github/workflows/{ci.yml => release.yml} | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) rename .github/workflows/{ci.yml => release.yml} (99%) diff --git a/.github/workflows/ci.yml b/.github/workflows/release.yml similarity index 99% rename from .github/workflows/ci.yml rename to .github/workflows/release.yml index 8e22bce56..7d6552b9b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/release.yml @@ -1,12 +1,8 @@ --- # spell-checker:ignore fregante hexdigest vsoch ncipollo ghpnr -name: CI +name: release on: - pull_request: - push: - branches: # any integration branch but not tag - - "main" workflow_dispatch: inputs: release-version: From 98e54573edfa51c613bc823d6b888fa5990b4a92 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 24 May 2022 15:59:04 +0100 Subject: [PATCH 361/558] Prepare 0.7.2 release (#336) * Prepare 0.7.2 release * Add manual publish pipeline --- .config/dictionary.txt | 1 + .github/workflows/publish.yml | 23 +++++++++++++++++++++++ CHANGELOG.md | 8 ++++++++ package-lock.json | 4 ++-- package.json | 2 +- 5 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/publish.yml diff --git a/.config/dictionary.txt b/.config/dictionary.txt index fae689b84..3b35f5f95 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -54,6 +54,7 @@ nocolor notest notfound npmjs +npmrc nvim nvmrc parseable diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 000000000..7829c9645 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,23 @@ +--- +name: publish +"on": + workflow_dispatch: + +jobs: + npmjs: + name: Publish to npmjs.com + environment: + name: release + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + # Setup .npmrc file to publish to npm + - uses: actions/setup-node@v3 + with: + node-version: '16.x' + registry-url: 'https://registry.npmjs.org' + - run: npm pack + - run: npm publish --dry-run --access public ansible-ansible-language-server-*.tgz + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b375cd86..6036fcfc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,14 @@ https://github.com/ansible/ansible-language-server/tree/main/docs/changelog-frag +## v0.7.2 (2022-05-24) + +### Bugfixes + +- Fix auto-completion for modules when documentation is not displayed (#330) + @fredericgiquel +- add ee service plugin path logs (#331) @ganeshrn + ## v0.7.1 (2022-05-13) No significant changes. diff --git a/package-lock.json b/package-lock.json index 22437d402..8c4212de2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.7.1", + "version": "0.7.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.7.1", + "version": "0.7.2", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 3f26b607a..75141630f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.7.1", + "version": "0.7.2", "contributors": [ { "name": "Tomasz Maciążek", From 052bcdede5718f267af551cd3b14ff35d3f7e34f Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 24 May 2022 16:02:27 +0100 Subject: [PATCH 362/558] Remove draft option for publish (#338) --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 7829c9645..762a9cbba 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -18,6 +18,6 @@ jobs: node-version: '16.x' registry-url: 'https://registry.npmjs.org' - run: npm pack - - run: npm publish --dry-run --access public ansible-ansible-language-server-*.tgz + - run: npm publish --access public ansible-ansible-language-server-*.tgz env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} From b4bcd5a33800a54e924809ace303d72dda3ece37 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jun 2022 20:02:27 +0530 Subject: [PATCH 363/558] Bump ansible-lint from 6.2.1 to 6.2.2 (#342) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e3dabaa6f..d42d78e88 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ alabaster==0.7.12 ansible-compat==2.0.4 ansible-core==2.13.0 -ansible-lint==6.2.1 +ansible-lint==6.2.2 ansible-pygments==0.1.1 attrs==21.4.0 babel==2.9.1 From 19c3dc6d39a2aa2878ee444eec164a7a84639671 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Tue, 7 Jun 2022 19:05:14 +0530 Subject: [PATCH 364/558] Add check to validate mount path before passing it as an arg in EE (#345) --- docs/changelog-fragments.d/345.bugfix.md | 2 ++ src/services/executionEnvironment.ts | 8 ++++++++ 2 files changed, 10 insertions(+) create mode 100644 docs/changelog-fragments.d/345.bugfix.md diff --git a/docs/changelog-fragments.d/345.bugfix.md b/docs/changelog-fragments.d/345.bugfix.md new file mode 100644 index 000000000..7e7ef8439 --- /dev/null +++ b/docs/changelog-fragments.d/345.bugfix.md @@ -0,0 +1,2 @@ +Added validation of mount path before passing it as an argument to wrap the +commands in execution environment -- by {user}`priyamsahoo` diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index ea62e3e59..25683283e 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -214,6 +214,14 @@ export class ExecutionEnvironment { ); for (const mountPath of mountPaths || []) { + // push to array only if mount path is valid + if (mountPath === "" || !fs.existsSync(mountPath)) { + this.connection.console.error( + `Volume mount source path '${mountPath}' does not exist. Ignoring this volume mount entry.` + ); + continue; + } + const volumeMountPath = `${mountPath}:${mountPath}`; if (containerCommand.includes(volumeMountPath)) { continue; From 2dd5fb5ed4d123364d6229895642b5aa423b4ce2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 16:14:05 +0100 Subject: [PATCH 365/558] Bump ansible-lint from 6.2.2 to 6.3.0 (#346) Bumps [ansible-lint](https://github.com/ansible-community/ansible-lint) from 6.2.2 to 6.3.0. - [Release notes](https://github.com/ansible-community/ansible-lint/releases) - [Commits](https://github.com/ansible-community/ansible-lint/compare/v6.2.2...v6.3.0) --- updated-dependencies: - dependency-name: ansible-lint dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d42d78e88..4bef6d448 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ alabaster==0.7.12 ansible-compat==2.0.4 ansible-core==2.13.0 -ansible-lint==6.2.2 +ansible-lint==6.3.0 ansible-pygments==0.1.1 attrs==21.4.0 babel==2.9.1 From 2f50b32b7d474aea6c5d400bbbb2ef3d7d697a84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 16:32:39 +0100 Subject: [PATCH 366/558] Bump ansible-compat from 2.0.4 to 2.1.0 (#337) Bumps [ansible-compat](https://github.com/ansible-community/ansible-compat) from 2.0.4 to 2.1.0. - [Release notes](https://github.com/ansible-community/ansible-compat/releases) - [Commits](https://github.com/ansible-community/ansible-compat/compare/v2.0.4...v2.1.0) --- updated-dependencies: - dependency-name: ansible-compat dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4bef6d448..6e040f6ec 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ # pip-compile --extra=docs --extra=test --no-annotate --output-file=requirements.txt --strip-extras setup.cfg # alabaster==0.7.12 -ansible-compat==2.0.4 +ansible-compat==2.1.0 ansible-core==2.13.0 ansible-lint==6.3.0 ansible-pygments==0.1.1 From f907ba9cad97995854fcadbb231c7c61560e31c8 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 17 Jun 2022 17:54:34 +0100 Subject: [PATCH 367/558] Update test dependencies (#351) --- docs/_ext/spelling_stub_ext.py | 27 --------------------------- docs/changelog.md | 12 ------------ docs/conf.py | 31 +++++-------------------------- docs/contributing/guidelines.md | 9 --------- docs/contributing/security.md | 4 ---- docs/index.md | 5 ----- requirements.txt | 16 +++++++++------- setup.cfg | 8 +++----- tox.ini | 1 - 9 files changed, 17 insertions(+), 96 deletions(-) delete mode 100644 docs/_ext/spelling_stub_ext.py diff --git a/docs/_ext/spelling_stub_ext.py b/docs/_ext/spelling_stub_ext.py deleted file mode 100644 index c8989dc14..000000000 --- a/docs/_ext/spelling_stub_ext.py +++ /dev/null @@ -1,27 +0,0 @@ -"""Sphinx extension for making the spelling directive noop.""" - -from typing import List - -from sphinx.application import Sphinx -from sphinx.util.docutils import SphinxDirective -from sphinx.util.nodes import nodes - - -class SpellingNoOpDirective(SphinxDirective): - """Definition of the stub spelling directive.""" - - has_content = True - - def run(self) -> List[nodes.Node]: - """Generate nothing in place of the directive.""" - return [] - - -def setup(app: Sphinx) -> None: - """Initialize the extension.""" - app.add_directive('spelling', SpellingNoOpDirective) - - return { - 'parallel_read_safe': True, - 'version': 'builtin', - } diff --git a/docs/changelog.md b/docs/changelog.md index 162b6e9c9..a6af3084b 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,17 +1,5 @@ # Changelog -```{spelling} - -Ansible -Bugfixes -Changelog -globbing -linter -Npmjs -suboptions -unhandled -``` - ```{include} ../CHANGELOG.md :end-before: :start-after: DO-NOT-REMOVE-versioning-promise-START diff --git a/docs/conf.py b/docs/conf.py index 8b56e2e46..d31082375 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -118,15 +118,6 @@ "sphinxcontrib.towncrier", # provides `towncrier-draft-entries` directive ] -# Conditional third-party extensions: -try: - import sphinxcontrib.spelling as _sphinxcontrib_spelling -except ImportError: - extensions.append("spelling_stub_ext") -else: - del _sphinxcontrib_spelling - extensions.append("sphinxcontrib.spelling") - # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # @@ -216,26 +207,14 @@ # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = True -# -- Options for sphinxcontrib.spelling extension ---------------------------- - -spelling_ignore_acronyms = True -spelling_ignore_importable_modules = True -spelling_ignore_pypi_package_names = True -spelling_ignore_python_builtins = True -spelling_ignore_wiki_words = True -spelling_show_suggestions = True -spelling_word_list_filename = [ - "../.config/dictionary.txt", -] - # -- Options for extlinks extension ------------------------------------------ extlinks = { - "issue": (f"{github_repo_url}/issues/%s", "#"), # noqa: WPS323 - "pr": (f"{github_repo_url}/pull/%s", "PR #"), # noqa: WPS323 - "commit": (f"{github_repo_url}/commit/%s", ""), # noqa: WPS323 - "gh": (f"{github_url}/%s", "GitHub: "), # noqa: WPS323 - "user": (f"{github_sponsors_url}/%s", "@"), # noqa: WPS323 + "issue": (f"{github_repo_url}/issues/%s", "#%s"), # noqa: WPS323 + "pr": (f"{github_repo_url}/pull/%s", "PR #%s"), # noqa: WPS323 + "commit": (f"{github_repo_url}/commit/%s", "%s"), # noqa: WPS323 + "gh": (f"{github_url}/%s", "GitHub: %s"), # noqa: WPS323 + "user": (f"{github_sponsors_url}/%s", "@%s"), # noqa: WPS323 } # -- Options for linkcheck builder ------------------------------------------- diff --git a/docs/contributing/guidelines.md b/docs/contributing/guidelines.md index e34faf884..24d303531 100644 --- a/docs/contributing/guidelines.md +++ b/docs/contributing/guidelines.md @@ -1,14 +1,5 @@ -```{spelling} -de -facto -linters -Pre -reStructuredText -Towncrier -``` - ```{include} ../../.github/CONTRIBUTING.md ``` diff --git a/docs/contributing/security.md b/docs/contributing/security.md index 23683d984..eb99b1dee 100644 --- a/docs/contributing/security.md +++ b/docs/contributing/security.md @@ -1,9 +1,5 @@ -```{spelling} -backport -``` - ```{include} ../../.github/SECURITY.md ``` diff --git a/docs/index.md b/docs/index.md index 07c36328e..88902ff3c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,10 +1,5 @@ -```{spelling} - -linter -``` - (\_ansible_language_server_index)= # {{ project }} Documentation diff --git a/requirements.txt b/requirements.txt index 6e040f6ec..91c633015 100644 --- a/requirements.txt +++ b/requirements.txt @@ -28,25 +28,29 @@ identify==2.4.11 idna==3.3 imagesize==1.3.0 incremental==21.3.0 -jinja2==2.11.3 +iniconfig==1.1.1 +jinja2==3.1.2 +jsonschema==4.6.0 linkify-it-py==1.0.3 lxml==4.8.0 markdown-it-py==2.0.1 markupsafe==2.0.1 mdit-py-plugins==0.3.0 mdurl==0.1.0 -myst-parser==0.17.0 +myst-parser==0.18.0 nodeenv==1.6.0 packaging==21.3 -parsimonious==0.7.0 pathspec==0.9.0 pbr==5.8.1 platformdirs==2.5.1 +pluggy==1.0.0 pre-commit==2.19.0 +py==1.11.0 pycparser==2.21 -pyenchant==3.2.2 pygments==2.11.2 pyparsing==3.0.9 +pyrsistent==0.18.1 +pytest==7.1.2 pytz==2022.1 pyyaml==6.0 requests==2.27.1 @@ -57,10 +61,9 @@ ruamel-yaml-clib==0.2.6 setuptools-scm==6.4.2 six==1.16.0 snowballstemmer==2.2.0 -sphinx==4.3.2 +sphinx==5.0.2 sphinx-ansible-theme==0.9.1 sphinx-favicon==0.2 -sphinx-js==3.1.2 sphinx-notfound-page==0.8 sphinx-rtd-theme==1.0.0 sphinxcontrib-apidoc==0.3.0 @@ -70,7 +73,6 @@ sphinxcontrib-htmlhelp==2.0.0 sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==1.0.3 sphinxcontrib-serializinghtml==1.1.5 -sphinxcontrib-spelling==7.3.2 sphinxcontrib-towncrier==0.2.1a0 subprocess-tee==0.3.5 toml==0.10.2 diff --git a/setup.cfg b/setup.cfg index 8691d1ac2..a928d966e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -6,14 +6,12 @@ test = pre-commit pyparsing docs = - MarkupSafe<2.1.0 # https://github.com/pallets/markupsafe/issues/282 - myst-parser[linkify] >= 0.15.1 + MarkupSafe<2.1 # see https://github.com/pallets/jinja/issues/1585 + myst-parser[linkify] >= 0.18.0 setuptools-scm >= 6.0.1 - Sphinx >= 4.1.2, < 4.4.0 # https://github.com/sphinx-doc/sphinx/issues/10112 + Sphinx >= 5.0.2 sphinx-ansible-theme >= 0.8.0 sphinx-favicon >= 0.2 - sphinx-js >= 3.1.2 sphinx-notfound-page >= 0.7.1 sphinxcontrib-apidoc >= 0.3.0 - sphinxcontrib-spelling >= 7.2.0 sphinxcontrib-towncrier >= 0.2.0a0 diff --git a/tox.ini b/tox.ini index 5ae7471c0..ee598e4b6 100644 --- a/tox.ini +++ b/tox.ini @@ -95,7 +95,6 @@ commands = npm run generate-settings-readme {envpython} -m sphinx -b html {[docs]sphinx_common_args} {envpython} -m sphinx -b linkcheck {[docs]sphinx_common_args} - {envpython} -m sphinx -b spelling {[docs]sphinx_common_args} # Print out the output docs dir and a way to serve html: - {envpython} -c\ From 7e2b233df00c39bd1bcba6f1885c557db2eabe90 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sat, 18 Jun 2022 10:55:24 +0100 Subject: [PATCH 368/558] Replace tox with taskfile as build tool (#349) As neither tox nor npm are really suitable as build build, especially for mixed (ts/py) projects, we start using a task. Related: https://github.com/ansible/vscode-ansible/pull/511 Related: https://github.com/ansible/schemas/pull/311 --- .config/dictionary.txt | 3 + .github/workflows/release.yml | 897 ------------------------ .github/workflows/{tox.yml => task.yml} | 39 +- .gitignore | 4 + .pre-commit-config.yaml | 8 +- Taskfile.yml | 164 +++++ docs/conf.py | 21 - docs/contributing/guidelines.md | 24 +- package.json | 2 - requirements.txt | 15 +- setup.cfg | 3 + tools/docs_summary.py | 20 + tools/test-setup.sh | 32 +- tox.ini | 189 ----- 14 files changed, 259 insertions(+), 1162 deletions(-) delete mode 100644 .github/workflows/release.yml rename .github/workflows/{tox.yml => task.yml} (76%) create mode 100644 Taskfile.yml create mode 100644 tools/docs_summary.py delete mode 100644 tox.ini diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 3b35f5f95..336969ea3 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -6,6 +6,7 @@ HORIZONTALLINE Jenkinsfile PYTHONHOME TLDR +Taskfile WSLENV YOLO alphanums @@ -18,6 +19,7 @@ autoupdate backticks cacheable chronographer +cmds codeclimate codecov commitish @@ -32,6 +34,7 @@ doctree doctrees dunamai endfor +envdir eqeqeq globbing globby diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 7d6552b9b..000000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,897 +0,0 @@ ---- -# spell-checker:ignore fregante hexdigest vsoch ncipollo ghpnr -name: release - -on: - workflow_dispatch: - inputs: - release-version: - # github.event_name == 'workflow_dispatch' - # && github.event.inputs.release-version - description: >- - Target Semver-compliant version to release. - Please, don't prepend `v`. - required: true - release-commitish: - # github.event_name == 'workflow_dispatch' - # && github.event.inputs.release-commitish - default: '' - description: >- - The commit to be released to Npmjs and tagged - in Git as `release-version`. Normally, you - should keep this empty. - YOLO: - default: false - description: >- - Flag whether test results should block the - release (true/false). Only use this under - extraordinary circumstances to ignore the - test failures and cut the release regardless. - -concurrency: - group: >- - ${{ - github.workflow - }}-${{ - github.event.pull_request.number || github.sha - }} - cancel-in-progress: true - -jobs: - - pre-setup: - name: Set up build mode - runs-on: Ubuntu-latest - defaults: - run: - shell: python - env: - PIP_DISABLE_PIP_VERSION_CHECK: "1" - outputs: - dist-version: >- - ${{ - steps.request-check.outputs.release-requested == 'true' - && github.event.inputs.release-version - || steps.scm-version.outputs.dist-version - }} - dist-public-version: >- - ${{ - steps.request-check.outputs.release-requested == 'true' - && github.event.inputs.release-version - || steps.scm-version.outputs.dist-public-version - }} - is-untagged-devel: >- - ${{ steps.untagged-check.outputs.is-untagged-devel || false }} - release-requested: >- - ${{ - steps.request-check.outputs.release-requested || false - }} - git-tag: ${{ steps.git-tag.outputs.tag }} - tarball-artifact-name: ${{ steps.artifact-name.outputs.filename }} - version-patch-name: ${{ steps.patch-name.outputs.filename }} - changelog-patch-name: ${{ steps.changelog-patch-name.outputs.filename }} - changelog-draft-name: ${{ steps.changelog-draft-name.outputs.filename }} - steps: - - name: Switch to using Python 3.10 by default - uses: actions/setup-python@v2.2.2 - with: - python-version: '3.10' - - name: >- - Mark the build as untagged '${{ - github.event.repository.default_branch - }}' branch build - id: untagged-check - if: >- - github.event_name == 'push' && - github.ref == format( - 'refs/heads/{0}', github.event.repository.default_branch - ) - run: >- - print('::set-output name=is-untagged-devel::true') - - name: Mark the build as "release request" - id: request-check - if: github.event_name == 'workflow_dispatch' - run: >- - print('::set-output name=release-requested::true') - - name: Check out src from Git - if: >- - steps.request-check.outputs.release-requested != 'true' - uses: actions/checkout@v2.3.4 - with: - fetch-depth: 0 # To have all the tags - ref: ${{ github.event.inputs.release-commitish }} - - name: Drop Git tags from HEAD for non-tag-create events - if: >- - steps.request-check.outputs.release-requested != 'true' - run: >- - git tag --points-at HEAD - | - xargs git tag --delete - shell: bash - - name: Set up versioning prerequisites - if: >- - steps.request-check.outputs.release-requested != 'true' - run: | - python -m pip install --user --upgrade pip - python -m pip install --user dunamai - shell: bash - - name: Set the current dist version - if: steps.request-check.outputs.release-requested != 'true' - id: scm-version - run: | - import dunamai - scm_ver = dunamai.Version.from_git() - ver = scm_ver.serialize(style=dunamai.Style.SemVer) - ver_no_local = scm_ver.serialize( - metadata=False, - style=dunamai.Style.SemVer, - ) - print(f'::set-output name=dist-version::{ver}') - print(f'::set-output name=dist-public-version::{ver_no_local}') - print( - '::set-output name=dist-version-for-filenames::' - f'{ver.replace("+", "-")}' - ) - - name: Set the target Git tag - id: git-tag - run: >- - print('::set-output name=tag::v${{ - steps.request-check.outputs.release-requested == 'true' - && github.event.inputs.release-version - || steps.scm-version.outputs.dist-version - }}') - - name: Set the expected tarball artifact name - id: artifact-name - run: | - print('::set-output name=filename::ansible-ansible-language-server-${{ - steps.request-check.outputs.release-requested == 'true' - && github.event.inputs.release-version - || steps.scm-version.outputs.dist-public-version - }}.tgz') - - name: Set the expected version patch filename - id: patch-name - run: | - print('::set-output name=filename::0001-Release-${{ - steps.request-check.outputs.release-requested == 'true' - && github.event.inputs.release-version - || steps.scm-version.outputs.dist-public-version - }}-from-GitHub-Actions-CI-CD.patch') - - name: Set the expected changelog patch filename - id: changelog-patch-name - run: | - print('::set-output name=filename::0001-Generate-a-changelog-entry-for-v${{ - steps.request-check.outputs.release-requested == 'true' - && github.event.inputs.release-version - || steps.scm-version.outputs.dist-version-for-filenames - }}.patch') - - name: Set the expected changelog draft filename - id: changelog-draft-name - run: | - print('::set-output name=filename::change-notes-v${{ - steps.request-check.outputs.release-requested == 'true' - && github.event.inputs.release-version - || steps.scm-version.outputs.dist-version-for-filenames - }}.md') - - build: - name: Build ${{ needs.pre-setup.outputs.git-tag }} - needs: - - pre-setup # transitive, for accessing settings - - runs-on: Ubuntu-latest - - env: - PY_COLORS: 1 - TOX_PARALLEL_NO_SPINNER: 1 - TOXENV: make-changelog - - steps: - - name: Switch to using Python v3.10 by default - uses: actions/setup-python@v2 - with: - python-version: >- - 3.10 - - name: Install tox - run: >- - python -m - pip install - --user - tox - - name: Fetch the src snapshot - uses: actions/checkout@v2 - with: - fetch-depth: 1 - ref: ${{ github.event.inputs.release-commitish }} - - name: Setup git user as [bot] - # Refs: - # * https://github.community/t/github-actions-bot-email-address/17204/6 - # * https://github.com/actions/checkout/issues/13#issuecomment-724415212 - uses: fregante/setup-git-user@v1.0.1 - - name: >- - Set up NodeJS ${{ matrix.node-version }} - with the global NPM registry - uses: actions/setup-node@v2 - - - name: Pre-populate tox env - run: >- - python -m - tox - --parallel auto - --parallel-live - --skip-missing-interpreters false - --notest - - name: Generate changelog draft to a temporary file - run: >- - 2>/dev/null - python -m - tox - --skip-missing-interpreters false - --skip-pkg-install - -e draft-changelog - -qq - | - sed - 's/{issue}`\([0-9]\+\)`/#\1/g; - s/{user}`\([-.a-zA-Z0-9]\+\)`/@\1/g' - | - tee - ${{ needs.pre-setup.outputs.changelog-draft-name }} - shell: bash - - name: Generate changelog update with tox and stage it in Git - run: >- - python -m tox - --skip-missing-interpreters false - --skip-pkg-install - -e make-changelog - --allow-dirty - -- - '${{ needs.pre-setup.outputs.dist-version }}' - --yes - - name: >- - Commit the changelog updates for release - ${{ needs.pre-setup.outputs.git-tag }} in the local Git repo - run: >- - git commit -m - 'Generate a changelog entry for ${{ - needs.pre-setup.outputs.git-tag - }}' - - name: Log the changelog commit - run: git show --color - - name: Create a changelog update patch from the last Git commit - run: >- - git format-patch - --output='${{ needs.pre-setup.outputs.changelog-patch-name }}' - -1 HEAD - - name: Verify that expected patch got created - run: ls -1 '${{ needs.pre-setup.outputs.changelog-patch-name }}' - - - name: >- - Bump the package version to ${{ - needs.pre-setup.outputs.dist-version - }} - run: >- - npm version '${{ needs.pre-setup.outputs.dist-version }}' - -m 'Release %s from GitHub Actions CI/CD' - - name: Log how the metadata has unchanged - run: git show --color=always - - name: Create a version bump patch from the last Git commit - run: git format-patch -1 HEAD - - name: Verify that expected patch got created - run: ls -1 ${{ needs.pre-setup.outputs.version-patch-name }} - - name: Save the package bump patch as a GHA artifact - uses: actions/upload-artifact@v2 - with: - name: npm-package-bump-patch - path: | - ${{ needs.pre-setup.outputs.version-patch-name }} - ${{ needs.pre-setup.outputs.changelog-patch-name }} - ${{ needs.pre-setup.outputs.changelog-draft-name }} - - - name: Build a package tarball artifact - run: npm pack - - - name: Save the package tarball as a GHA artifact - uses: actions/upload-artifact@v2 - with: - name: npm-package-tarball - path: ${{ needs.pre-setup.outputs.tarball-artifact-name }} - - tox: - name: ${{ matrix.toxenv }} - - runs-on: ${{ matrix.os }}-latest - strategy: - matrix: - os: - - Ubuntu - python-version: - - >- - 3.10 - toxenv: - - docs - - lint - fail-fast: false - - env: - PIP_DISABLE_PIP_VERSION_CHECK: "1" - PY_COLORS: 1 - TOXENV: ${{ matrix.toxenv }} - TOX_PARALLEL_NO_SPINNER: 1 - - steps: - - name: >- - Switch to using Python v${{ matrix.python-version }} - by default - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - - name: Setup node - if: contains(matrix.toxenv, 'lint') - uses: actions/setup-node@v2 - - - name: >- - Calculate Python interpreter version hash value - for use in the cache key - id: calc-cache-key-py - run: | - from hashlib import sha512 - from sys import version - - hash = sha512(version.encode()).hexdigest() - print(f'::set-output name=py-hash-key::{hash}') - shell: python - - name: Get pip cache dir - id: pip-cache - run: >- - echo "::set-output name=dir::$(pip cache dir)" - - name: Set up pip cache - uses: actions/cache@v2.1.7 - with: - path: ${{ steps.pip-cache.outputs.dir }} - key: >- - ${{ runner.os }}-pip-${{ - steps.calc-cache-key-py.outputs.py-hash-key }}-${{ - hashFiles('tox.ini', 'docs/requirements.*') }} - restore-keys: | - ${{ runner.os }}-pip-${{ - steps.calc-cache-key-py.outputs.py-hash-key - }}- - ${{ runner.os }}-pip- - - name: Install tox - run: >- - python -m - pip install - --user - tox - - - name: Grab the source from Git - uses: actions/checkout@v2 - with: - ref: ${{ github.event.inputs.release-commitish }} - - - name: >- - Pre-populate tox envs: `${{ env.TOXENV }}` - run: >- - python -m - tox - --parallel auto - --parallel-live - --skip-missing-interpreters false - --notest - - name: >- - Run tox envs: `${{ env.TOXENV }}` - run: >- - python -m - tox - --parallel auto - --parallel-live - --skip-missing-interpreters false - --skip-pkg-install - - # vscode: - # uses: .github/workflows/vscode.yml@main - - test: - needs: - - build - - pre-setup # transitive, for accessing settings - - name: ${{ matrix.name }} - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - include: - # linux - - name: test-node12-linux - node-version: 12 - os: ubuntu-latest - npm-target: test - - name: test-node14-linux - node-version: 14 - os: ubuntu-latest - npm-target: test - - name: test-node16-linux - node-version: 16 - os: ubuntu-latest - npm-target: test - # macos - - name: test-node12-macos - node-version: 12 - os: macos-11 - npm-target: test-without-ee - - name: test-node14-macos - node-version: 14 - os: macos-11 - npm-target: test-without-ee - - name: test-node16-macos - node-version: 16 - os: macos-11 - npm-target: test-without-ee - # windows - # TODO: revisit this after windows + wsl2 node - # is enabled in CI - # - name: test-node12-windows - # node-version: 12 - # os: windows-latest - # - name: test-node16-windows - # node-version: 16 - # os: windows-latest - - continue-on-error: >- - ${{ - ( - ( - needs.pre-setup.outputs.release-requested == 'true' && - !toJSON(github.event.inputs.YOLO) - ) || - matrix.experimental - ) && true || false - }} - - steps: - - name: Fetch the GHA artifact with the package tarball - uses: actions/download-artifact@v2 - with: - name: npm-package-tarball - - name: >- - Set up NodeJS ${{ matrix.node-version }} - with the global NPM registry - uses: actions/setup-node@v2 - with: - node-version: ${{ matrix.node-version }} - registry-url: https://registry.npmjs.org - - name: >- - Install the `${{ - needs.pre-setup.outputs.tarball-artifact-name - }}` package - run: npm install -g ${{ needs.pre-setup.outputs.tarball-artifact-name }} - shell: bash - - name: Uninstall the `@ansible/ansible-language-server` package - run: npm uninstall -g @ansible/ansible-language-server - shell: bash - - - name: Clean up the checkout - run: rm -rfv * - shell: bash - - - name: Fetch the src snapshot - uses: actions/checkout@v2 - with: - fetch-depth: 1 - ref: ${{ github.event.inputs.release-commitish }} - - name: Setup git user as [bot] - # Refs: - # * https://github.community/t/github-actions-bot-email-address/17204/6 - # * https://github.com/actions/checkout/issues/13#issuecomment-724415212 - uses: fregante/setup-git-user@v1.0.1 - - name: Fetch the GHA artifact with the version patch - uses: actions/download-artifact@v2 - with: - name: npm-package-bump-patch - - - name: Apply the changelog patch - run: git am '${{ needs.pre-setup.outputs.changelog-patch-name }}' - - name: Drop the changelog patch file - run: rm -fv '${{ needs.pre-setup.outputs.changelog-patch-name }}' - shell: bash - - - name: Apply the version patch - run: git am ${{ needs.pre-setup.outputs.version-patch-name }} - - name: Drop the version patch file - run: rm -fv ${{ needs.pre-setup.outputs.version-patch-name }} - shell: bash - - - name: Switch to using Python 3.10 by default - uses: actions/setup-python@v2.2.2 - with: - python-version: '3.10' - - name: Install test dependencies - run: | - python -m pip install --user --upgrade pip - PIP_CONSTRAINTS=requirements.txt python -m pip install --user ansible-core ansible-lint - echo "$HOME/.local/bin" >> $GITHUB_PATH - # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#adding-a-system-path - npm ci - - name: Log ansible-lint version - if: runner.os != 'Windows' - run: ansible-lint --version - - - name: npm run ${{ matrix.npm-target }} against the Git checkout - run: npm run ${{ matrix.npm-target }} - - - name: Produce coverage report - run: npm run coverage - - name: Upload coverage data - uses: codecov/codecov-action@v2 - with: - name: ${{ matrix.name }} - files: out/coverage.lcov - flags: >- - GHA, - ${{ runner.os }}, - ${{ matrix.os }}, - ${{ matrix.node-version }} - - check: # This job does nothing and is only used for the branch protection - if: always() - - needs: - - tox # lint, docs - - test - # - vscode - - runs-on: Ubuntu-latest - - steps: - - name: Decide whether the needed jobs succeeded or failed - uses: re-actors/alls-green@release/v1 - with: - jobs: ${{ toJSON(needs) }} - - github-release-pull-request: - name: >- - Open a GitHub Pull Request for - ${{ needs.pre-setup.outputs.git-tag }} - if: fromJSON(needs.pre-setup.outputs.release-requested) - needs: - - check - - pre-setup # transitive, for accessing settings - - runs-on: Ubuntu-latest - - environment: git-repo - - outputs: - pull_request_url: ${{ steps.pr.outputs.pull_request_url }} - - permissions: - pull-requests: write - - steps: - - name: Fetch the src - uses: actions/checkout@v2 - with: - fetch-depth: 0 # To reach the common commit w/ the repo default branch - ref: ${{ github.event.inputs.release-commitish }} - ssh-key: ${{ secrets.DEPLOYMENT_KEY }} - - name: Setup git user as [bot] - # Refs: - # * https://github.community/t/github-actions-bot-email-address/17204/6 - # * https://github.com/actions/checkout/issues/13#issuecomment-724415212 - uses: fregante/setup-git-user@v1.0.1 - - name: Fetch the GHA artifact with the version patch - uses: actions/download-artifact@v2 - with: - name: npm-package-bump-patch - - - name: Apply the changelog patch - run: git am '${{ needs.pre-setup.outputs.changelog-patch-name }}' - - name: Drop the changelog patch file - run: rm -fv '${{ needs.pre-setup.outputs.changelog-patch-name }}' - shell: bash - - - name: Apply the version patch - run: git am ${{ needs.pre-setup.outputs.version-patch-name }} - - name: Drop the version patch file - run: rm -fv ${{ needs.pre-setup.outputs.version-patch-name }} - - - name: >- - Create a local 'release/${{ - needs.pre-setup.outputs.dist-version - }}' branch - run: >- - git checkout -b 'release/${{ - needs.pre-setup.outputs.dist-version - }}' - - - name: >- - Push the `release/${{ - needs.pre-setup.outputs.dist-version - }}` release branch to GitHub - run: >- - git push --atomic origin - 'release/${{ needs.pre-setup.outputs.dist-version }}' - - - name: pull-request-action - id: pr - uses: vsoch/pull-request-action@1.0.18 - env: - BRANCH_PREFIX: '' - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PULL_REQUEST_BODY: >- - Automated metadata update with the version - ${{ needs.pre-setup.outputs.dist-version }} - preview. - PULL_REQUEST_BRANCH: ${{ github.event.repository.default_branch }} - PULL_REQUEST_FROM_BRANCH: >- - release/${{ needs.pre-setup.outputs.dist-version }} - PULL_REQUEST_TITLE: >- - Bump version to ${{ needs.pre-setup.outputs.git-tag }} - - name: Log the pull request details - run: | - echo "PR number: ${{ steps.pr.outputs.pull_request_number }}" - echo "PR URL: ${{ steps.pr.outputs.pull_request_url }}" - - - name: Prepare a combined PR description - run: | - SECTION_ANCHOR="v$(echo '${{ - needs.pre-setup.outputs.dist-version - }}' | sed 's/\./-/g')-$(date '+%Y-%m-%d')" - - echo '## Summary' > pr-description.md - echo >> pr-description.md - echo 'Automated metadata update with the version ${{ - needs.pre-setup.outputs.dist-version - }} preview.' >> pr-description.md - echo >> pr-description.md - - echo '## Approve publishing v${{ - needs.pre-setup.outputs.dist-version - }} to Npmjs 👇' >> pr-description.md - echo >> pr-description.md - echo 'To proceed with publishing this release to Npmjs, ' \ - 'follow the link below and approve the pending deployment:' \ - >> pr-description.md - echo >> pr-description.md - echo '### https://github.com/${{ - github.repository - }}/actions/runs/${{ - github.run_id - }}' >> pr-description.md - echo >> pr-description.md - echo '_**Note:** Approving this PR is not mandatory but ' \ - 'approving the pending deployment referenced above is._' \ - >> pr-description.md - echo >> pr-description.md - - echo '## Read the Docs preview' >> pr-description.md - echo >> pr-description.md - echo "https://als--${{ - steps.pr.outputs.pull_request_number - }}.org.readthedocs.build/en/${{ - steps.pr.outputs.pull_request_number - }}/changelog/#${SECTION_ANCHOR}" >> pr-description.md - echo >> pr-description.md - - echo '## v${{ - needs.pre-setup.outputs.dist-version - }} changelog /DRAFT/' >> pr-description.md - echo >> pr-description.md - cat '${{ - needs.pre-setup.outputs.changelog-draft-name - }}' >> pr-description.md - shell: bash - - - name: Append the release changelog to the PR description - run: >- - gh pr edit - '${{ steps.pr.outputs.pull_request_url }}' - --body-file=pr-description.md - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Create a merge commit with the release branch - run: | - sh -x - - git fetch origin '+refs/heads/${{ - github.event.repository.default_branch - }}:refs/remotes/origin/${{ - github.event.repository.default_branch - }}' - - git checkout '${{ github.event.repository.default_branch }}' - - git merge --no-ff -m "Merge branch 'release/${{ - needs.pre-setup.outputs.dist-version - }}' into ${{ - github.event.repository.default_branch - }}" 'release/${{ - needs.pre-setup.outputs.dist-version - }}' - - git checkout -B 'release/${{ - needs.pre-setup.outputs.dist-version - }}' - - - name: >- - Push the `release/${{ - needs.pre-setup.outputs.dist-version - }}` release branch to GitHub - # ... after PR is created so that `pull_request` `synchronize` - # originates from a non-GHA token - run: >- - git push --atomic origin - 'release/${{ needs.pre-setup.outputs.dist-version }}' - - publish-npmjs: - name: Publish ${{ needs.pre-setup.outputs.git-tag }} to Npmjs - environment: - name: release - url: >- - https://www.npmjs.com/package/@ansible/ansible-language-server/v/${{ - needs.pre-setup.outputs.dist-public-version - }} - needs: - - github-release-pull-request - - pre-setup # transitive, for accessing settings - - runs-on: Ubuntu-latest - - steps: - - name: Fetch the GHA artifact with the package tarball - uses: actions/download-artifact@v2 - with: - name: npm-package-tarball - - - name: >- - Set up NodeJS ${{ matrix.node-version }} - with the global NPM registry - uses: actions/setup-node@v2 - with: - registry-url: https://registry.npmjs.org - - - name: >- - Publish the prebuilt and tested package - `${{ needs.pre-setup.outputs.tarball-artifact-name }}` - to public NPM Registry - run: >- - npm publish - --access public - ${{ needs.pre-setup.outputs.tarball-artifact-name }} - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - publish-ghpnr: - name: Publish ${{ needs.pre-setup.outputs.git-tag }} to Github NPM Registry - if: >- - fromJSON(needs.pre-setup.outputs.is-untagged-devel) || - fromJSON(needs.pre-setup.outputs.release-requested) - needs: - - check - - pre-setup # transitive, for accessing settings - permissions: - contents: read - packages: write - - runs-on: Ubuntu-latest - - steps: - - name: Fetch the GHA artifact with the package tarball - uses: actions/download-artifact@v2 - with: - name: npm-package-tarball - - - name: Set up NodeJS with the GitHub Packages NPM registry - uses: actions/setup-node@v2 - with: - registry-url: https://npm.pkg.github.com - - - name: >- - Publish the prebuilt and tested package - `${{ needs.pre-setup.outputs.tarball-artifact-name }}` - to GitHub Packages NPM Registry - run: >- - npm publish - --access public - ${{ needs.pre-setup.outputs.tarball-artifact-name }} - env: - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - publish-github-release: - name: >- - Publish a GitHub Release for - ${{ needs.pre-setup.outputs.git-tag }} - needs: - - pre-setup # transitive, for accessing settings - - publish-npmjs - runs-on: Ubuntu-latest - - permissions: - contents: write - discussions: write - - steps: - - name: Fetch the GHA artifact with the package tarball - uses: actions/download-artifact@v2 - with: - name: npm-package-tarball - - name: Fetch the GHA artifact with the release changelog draft - uses: actions/download-artifact@v2 - with: - name: npm-package-bump-patch - - - name: >- - Publish a GitHub Release for - ${{ needs.pre-setup.outputs.git-tag }} - uses: ncipollo/release-action@v1.8.10 - with: - allowUpdates: false - artifactErrorsFailBuild: false - artifacts: | - ${{ needs.pre-setup.outputs.tarball-artifact-name }} - artifactContentType: application/gzip # .tgz / RFC 6713 - bodyFile: ${{ needs.pre-setup.outputs.changelog-draft-name }} - commit: release/${{ needs.pre-setup.outputs.dist-version }} - discussionCategory: Announcements - draft: false - name: ${{ needs.pre-setup.outputs.git-tag }} - # omitBody: false - omitBodyDuringUpdate: true - omitName: false - omitNameDuringUpdate: true - omitPrereleaseDuringUpdate: true - prerelease: false - removeArtifacts: false - replacesArtifacts: false - tag: ${{ needs.pre-setup.outputs.git-tag }} - token: ${{ secrets.GITHUB_TOKEN }} - - merge-pr: - name: Merge the release PR - # ... when it's already published - needs: - - github-release-pull-request # transitive, for accessing the PR number - - publish-github-release - runs-on: Ubuntu-latest - - permissions: - contents: write # Needed to merge or enable auto-merge - pull-requests: write - - steps: - - name: Auto-approve the PR - # ... to fulfill the branch protection requirement - run: >- - gh pr review - '${{ steps.pr.outputs.pull_request_url }}' - --approve - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Enable auto-merge for the PR - # ... so that GitHub merges it right when the branch protection - # conditions are fulfilled, this will fail if it is green already - run: >- - gh pr merge - --auto --merge - '${{ needs.github-release-pull-request.outputs.pull_request_url }}' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Attempt to merge the PR - # ... in case the branch protection is still being evaluated - # NOTE: At this point the release has already been published to Npmjs - # NOTE: and GitHub releases so human gating has already happened via - # NOTE: approving the deployment environment earlier. - # NOTE: This means that the PR must get merged no matter what, just to - # NOTE: correspond the published artifacts for traceability and transparency. - if: failure() - run: >- - gh pr merge - --merge - '${{ needs.github-release-pull-request.outputs.pull_request_url }}' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/tox.yml b/.github/workflows/task.yml similarity index 76% rename from .github/workflows/tox.yml rename to .github/workflows/task.yml index 0bc1a3c05..a62d2471f 100644 --- a/.github/workflows/tox.yml +++ b/.github/workflows/task.yml @@ -1,5 +1,5 @@ # alternative KISS pipeline to bloated ci.yml, modeled after vscode-ansible one. -name: tox +name: task # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the main branch @@ -19,8 +19,8 @@ jobs: test: env: # to expose matrix job name to steps, which is not possible with expansions - JOB_NAME: ${{ matrix.name || format('{0} ({1})', matrix.tox-target, matrix.os) }} - name: ${{ matrix.name || format('{0} ({1})', matrix.tox-target, matrix.os) }} + JOB_NAME: ${{ matrix.name || format('{0} ({1})', matrix.task-name, matrix.os) }} + name: ${{ matrix.name || format('{0} ({1})', matrix.task-name, matrix.os) }} # The type of runner that the job will run on runs-on: ${{ matrix.os || 'ubuntu-latest' }} defaults: @@ -33,7 +33,7 @@ jobs: - ubuntu-latest node-version: - "12" - tox-target: + task-name: - test-node12 - test-node14 - test-node16 @@ -43,19 +43,19 @@ jobs: - false include: - name: lint - tox-target: lint + task-name: lint - name: docs - tox-target: docs + task-name: docs - name: test (wsl) # runner does not support running container - tox-target: test-without-ee + task-name: test-without-ee # https://github.com/actions/virtual-environments/issues/5151 os: windows-2019 shell: "wsl-bash {0}" - name: test (macos) os: macos-11 # runner does not support running container - tox-target: test-without-ee + task-name: test-without-ee steps: - name: Disable autocrlf @@ -76,15 +76,24 @@ jobs: # https://github.com/Vampire/setup-wsl#wsl-shell-command wsl-shell-command: "bash -i -euo pipefail" - - name: Run ./tools/test-setup.sh - run: ./tools/test-setup.sh + - name: Install Task + if: "!contains(matrix.shell, 'wsl')" + uses: arduino/setup-task@v1 + with: + version: 3.x + repo-token: ${{ secrets.GITHUB_TOKEN }} - - name: Install tox - run: python3 -m pip install --user tox + - name: Install Task (wsl) + if: "contains(matrix.shell, 'wsl')" + run: | + sudo apt-get update && sudo apt-get install -y curl + sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin + task --version - name: Dump node version into .nvmrc file # save node version in .nvmrc file by looking for a pattern like # node12 in job name. If pattern is not found it uses 'current' alias + if: "!contains(matrix.shell, 'wsl')" run: > python3 -c 'import os, re; v = re.search("node(\d+)", os.environ.get("JOB_NAME", "")) or ["", "current"]; @@ -98,8 +107,10 @@ jobs: with: node-version-file: '.nvmrc' - - name: tox -e ${{ matrix.tox-target }} - run: python3 -m tox -e ${{ matrix.tox-target }} + - run: task setup + + - name: task ${{ matrix.task-name }} + run: task ${{ matrix.task-name }} check: # This job does nothing and is only used for the branch protection if: always() diff --git a/.gitignore b/.gitignore index 990e20965..b83c8fc74 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ node_modules *.vsix *.tgz out/server +out/.doctrees +out/docs_out tsconfig.tsbuildinfo vscode-ansible .nyc_output @@ -19,3 +21,5 @@ change-notes-*.md # Ignored because we support multiple versions and switch between them .nvmrc .node-version +.task +.venv diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e40de910d..aa0e3ee10 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -50,12 +50,12 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v5.9.1 + rev: v6.0.0 hooks: - id: cspell name: Spell check with cspell - repo: https://github.com/pre-commit/pre-commit-hooks.git - rev: v4.2.0 + rev: v4.3.0 hooks: - id: end-of-file-fixer exclude: > @@ -89,7 +89,7 @@ repos: language_version: python3 - repo: https://github.com/pre-commit/mirrors-prettier # keep it before markdownlint and eslint - rev: "v2.6.2" + rev: "v2.7.1" hooks: - id: prettier - repo: https://github.com/igorshubovych/markdownlint-cli @@ -102,7 +102,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.14.0 + rev: v8.17.0 hooks: - id: eslint args: diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 000000000..c01446de8 --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,164 @@ +--- +# see https://taskfile.dev/#/ +version: "3" +output: group +vars: + VENV_PATH: '{{default ".venv" (env "VIRTUAL_ENV")}}' + VENV_PYTHON: '{{if (eq OS "windows")}}{{.VENV_PATH}}/Scripts/python.exe{{else}}{{.VENV_PATH}}/bin/python{{end}}' + NODE_ENV: | + [ -z "$NVM_DIR" ] && export NVM_DIR="$HOME/.nvm"; + [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" --silent; + [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"; +tasks: + default: + desc: Run most commands + deps: + - lint + - package + env: + VERSION: + sh: node -p "require('./package.json').version" + cmds: + - bash -c '{{ .NODE_ENV }} nvm install' + - echo Done {{.VERSION}}! + docs: + desc: Build the documentation + vars: + sphinx_common_args: '-j auto --color -a -n -W --keep-going -T -d "../out/.doctrees" . "../out/docs_out"' + deps: + - setup + dir: docs + cmds: + # Retrieve possibly missing commits: + - $(git rev-parse --is-shallow-repository) && git fetch --unshallow > /dev/null || true + - git fetch --tags + - npm run generate-settings-readme + - > + source ../"${VENV_PATH:-.venv}/bin/activate" && + python -m sphinx -b html {{.sphinx_common_args}} && + python -m sphinx -b linkcheck {{.sphinx_common_args}} && + python ../tools/docs_summary.py + + setup: + desc: Install dependencies + run: once + env: + # used inside test-setup.sh + OS: "{{OS}}" + cmds: + - ./tools/test-setup.sh + - npm ci + sources: + - Taskfile.yml + - package.json + - requirements.txt + - setup.cfg + - tools/test-setup.sh + build: + desc: Build the project + deps: + - setup + cmds: + - npm run compile + sources: + - package-lock.json + - package.json + - src/ + - tsconfig.json + - webpack.config.js + deps: + desc: Update dependencies + deps: + - setup + cmds: + - bash -c "PIP_CONSTRAINTS= pip-compile -q --extra docs --extra test --strip-extras --no-annotate setup.cfg -o requirements.txt" + - python3 -m pre_commit autoupdate + # bumps some developments dependencies + - npx ncu -u --dep dev + # running install after ncu is needed in order to update the lock file + - npm install + lint: + desc: Lint the project + deps: + - setup + env: + PRE_COMMIT_COLOR: always + cmds: + - "{{.VENV_PATH}}/bin/python3 -m pre_commit run -a" + silent: true + sources: + - "*.*" + - .config + - .github + - .vscode + - doc + - images + - src + - syntaxes + - test + - tools + test: + desc: Run all tests + deps: + - setup + cmds: + - > + source {{.VENV_PATH}}/bin/activate && + which -a ansible-lint && + npm run test + interactive: true + test-node12: + desc: Run all tests using node 12 + cmds: + - bash -c '{{ .NODE_ENV }} nvm install 12' + - task: test + test-node14: + desc: Run all tests using node 14 + cmds: + - bash -c '{{ .NODE_ENV }} nvm install 14' + - task: test + test-node16: + desc: Run all tests using node 16 + cmds: + - bash -c '{{ .NODE_ENV }} nvm install 16' + - task: test + test-with-ee: + desc: Run only ee tests + deps: + - setup + cmds: + - > + source {{.VENV_PATH}}/bin/activate && + npm run test-with-ee + interactive: true + test-without-ee: + desc: Run only non-ee tests + deps: + - setup + cmds: + - > + source {{.VENV_PATH}}/bin/activate && + npm run test-without-ee + interactive: true + package: + desc: Package extension + deps: + - build + sources: + - CHANGELOG.md + - README.md + - package*.json + - out/ + generates: + - "*.vsix" + cmds: + - rm -f *.tgz + - npm pack + silent: false + pr: + desc: Opens a pull request using gh + deps: + - lint + cmds: + - gh pr create + interactive: true diff --git a/docs/conf.py b/docs/conf.py index d31082375..92f89af70 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,32 +12,11 @@ from setuptools_scm import get_version -# Patches for parsimonious->sphinx-js under Python 3.10/3.9: -collections.Mapping = collections.abc.Mapping - - # -- Path setup -------------------------------------------------------------- PROJECT_ROOT_DIR = Path(__file__).parents[1].resolve() # pylint: disable=no-member get_scm_version = partial(get_version, root=PROJECT_ROOT_DIR) -# Patch necessary for sphinx-js to locate the `typedoc` executable: -os.environ["PATH"] = ( - f'{PROJECT_ROOT_DIR / "node_modules" / "typedoc" / "bin"!s}' - f'{os.pathsep}{os.getenv("PATH", "")}' -) - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. - - -# Make in-tree extension importable in non-tox setups/envs, like RTD. -# Refs: -# https://github.com/readthedocs/readthedocs.org/issues/6311 -# https://github.com/readthedocs/readthedocs.org/issues/7182 -sys.path.insert(0, str((Path(__file__).parent / "_ext").resolve())) - # -- Project information ----------------------------------------------------- ansible_homepage_url = "https://www.ansible.com" diff --git a/docs/contributing/guidelines.md b/docs/contributing/guidelines.md index 24d303531..2384e6a03 100644 --- a/docs/contributing/guidelines.md +++ b/docs/contributing/guidelines.md @@ -7,29 +7,7 @@ # Contributing docs We use [Sphinx][sphinx] to generate our docs website. You can trigger the -process locally by executing: - -```shell-session -$ tox -e build-docs -build-docs create: .tox/build-docs -build-docs installdeps: -r docs/requirements.txt -... - -======================================================================================================================== - -Documentation available under: - - file://.tox/build-docs/docs_out/index.html - -To serve docs, use - - $ python3 -m http.server --directory ".tox/build-docs/docs_out" 0 - -======================================================================================================================== -_______________________________________________________ summary ________________________________________________________ - build-docs: commands succeeded - congratulations :) -``` +process locally by executing `task docs`: It is also integrated with [Read The Docs][rtd] that builds and publishes each commit to the main branch and generates live docs previews for each pull diff --git a/package.json b/package.json index 75141630f..a70b84c04 100644 --- a/package.json +++ b/package.json @@ -79,8 +79,6 @@ "clean": "rimraf out/server && rimraf lib", "compile": "tsc -p .", "coverage": "nyc report --reporter=text-lcov > out/coverage.lcov", - "deps": "ncu -u && npm install", - "lint": "pre-commit run -a", "prepack": "npm ci && npm run compile", "//prepare": "Prepare is needed for installation from source", "prepare": "npm run compile", diff --git a/requirements.txt b/requirements.txt index 91c633015..4d7c432dd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,6 +9,7 @@ ansible-compat==2.1.0 ansible-core==2.13.0 ansible-lint==6.3.0 ansible-pygments==0.1.1 +astroid==2.11.6 attrs==21.4.0 babel==2.9.1 bracex==2.2.1 @@ -20,23 +21,30 @@ click==8.1.3 click-default-group==1.2.2 commonmark==0.9.1 cryptography==36.0.2 +dill==0.3.5.1 distlib==0.3.4 docutils==0.17.1 enrich==1.2.7 filelock==3.6.0 +flake8==4.0.1 identify==2.4.11 idna==3.3 imagesize==1.3.0 incremental==21.3.0 iniconfig==1.1.1 +isort==5.10.1 jinja2==3.1.2 jsonschema==4.6.0 +lazy-object-proxy==1.7.1 linkify-it-py==1.0.3 -lxml==4.8.0 +lxml==4.9.0 markdown-it-py==2.0.1 markupsafe==2.0.1 +mccabe==0.6.1 mdit-py-plugins==0.3.0 mdurl==0.1.0 +mypy==0.961 +mypy-extensions==0.4.3 myst-parser==0.18.0 nodeenv==1.6.0 packaging==21.3 @@ -46,8 +54,11 @@ platformdirs==2.5.1 pluggy==1.0.0 pre-commit==2.19.0 py==1.11.0 +pycodestyle==2.8.0 pycparser==2.21 +pyflakes==2.4.0 pygments==2.11.2 +pylint==2.14.2 pyparsing==3.0.9 pyrsistent==0.18.1 pytest==7.1.2 @@ -77,12 +88,14 @@ sphinxcontrib-towncrier==0.2.1a0 subprocess-tee==0.3.5 toml==0.10.2 tomli==2.0.1 +tomlkit==0.11.0 towncrier==21.9.0 typing-extensions==4.1.1 uc-micro-py==1.0.1 urllib3==1.26.9 virtualenv==20.13.3 wcmatch==8.3 +wrapt==1.14.1 yamllint==1.26.3 # The following packages are considered to be unsafe in a requirements file: diff --git a/setup.cfg b/setup.cfg index a928d966e..3cde3415b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -5,6 +5,9 @@ test = lxml pre-commit pyparsing + flake8 # vscode integration + mypy # vscode integration + pylint # vscode integration docs = MarkupSafe<2.1 # see https://github.com/pallets/jinja/issues/1585 myst-parser[linkify] >= 0.18.0 diff --git a/tools/docs_summary.py b/tools/docs_summary.py new file mode 100644 index 000000000..3a91412f0 --- /dev/null +++ b/tools/docs_summary.py @@ -0,0 +1,20 @@ +"""Print summary after running docs.""" +import pathlib +import os +import sys + +if __name__ == "__main__": + docs_dir = pathlib.Path("out") / "docs_out" + index_file = (docs_dir / "index.html").absolute() + print(f""" +Documentation index: file://{index_file} +To serve docs, run: python3 -m http.server --directory "{docs_dir}" 0""") + + # when interactive, also open docs inside the default browser + if sys.stdout.isatty(): + CMD = "xdg-open" + if sys.platform == "darwin": + CMD = "open" + elif sys.platform == "win32": + CMD = "explorer" + os.system(f"{CMD} {index_file}") diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 20405a049..34eb283f6 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -2,7 +2,7 @@ # This tool is used to setup the environment for running the tests. Its name # name and location is based on Zuul CI, which can automatically run it. # (cspell: disable-next-line) -set -euxo pipefail +set -euo pipefail # User specific environment # shellcheck disable=SC2076 @@ -36,27 +36,37 @@ if [ "$(which npm)" == '/mnt/c/Program Files/nodejs/npm' ]; then sudo apt-get install -y -qq -o=Dpkg::Use-Pty=0 nodejs gcc g++ make fi -which pipx || python3 -m pip install --user pipx -which -a pipx -which pre-commit || pipx install pre-commit +if [[ ! -d "${VENV_PATH:-.venv}" ]]; then + python3 -m venv "${VENV_PATH:-.venv}" +fi -if [[ $(uname) != MINGW* ]]; then # if we are not on pure Windows - # GHA comes with ansible-core preinstalled via pipx, so we will - # inject the linter into it. MacOS does not have it. - which ansible || pipx install ansible-core +if [ -z ${VIRTUAL_ENV+x} ]; then + which -a python3 + python3 --version + # shellcheck disable=SC1091 + source "${VENV_PATH:-.venv}/bin/activate" +fi +python3 -m pip install -U pip - # we need pipx 1.0 as Ubuntu has a outdated/incompatible version - pipx inject --include-deps --include-apps ansible-core ansible-lint yamllint +if [[ $(uname) != MINGW* ]]; then # if we are not on pure Windows + python3 -m pip install -c requirements.txt ".[test,docs]" ansible --version ansible-lint --version fi +command -v nvm >/dev/null 2>&1 || { + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash + [ -z "${NVM_DIR:-}" ] && export NVM_DIR="$HOME/.nvm"; + [ -s "${NVM_DIR:-}/nvm.sh" ] && . "${NVM_DIR:-}/nvm.sh" --silent; + [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"; +} + # Log some useful info in case of unexpected failures: uname git --version python3 --version pre-commit --version -node --version +nvm --version npm --version # install npm packages diff --git a/tox.ini b/tox.ini deleted file mode 100644 index ee598e4b6..000000000 --- a/tox.ini +++ /dev/null @@ -1,189 +0,0 @@ -# spell-checker:ignore toxinidir passenv usedevelop testenv basepython envpython linkcheck changedir envdir envlist minversion toxworkdir posargs envname skipsdist setenv -[tox] -envlist = - lint - docs - test -minversion = 3.21.0 -skip_install = true -skipsdist = true -requires = - # ensure tox returns a non-zero exit code when git reports dirty: - tox-extra>=0.4.0 - -[docs] -# do not use continuation with vars, see https://github.com/tox-dev/tox/issues/2069 -sphinx_common_args = - # https://github.com/sphinx-doc/sphinx/pull/10260 - -j auto --color -a -n -W --keep-going -T -d "{temp_dir}/.doctrees" . "{envdir}/docs_out" - -[testenv] -description = - Run tests - test-node12: with node 12 - test-node14: with node 14 - test-node16: with node 16 -passenv = - CI - GITHUB_ACTIONS - HOME - SSH_AUTH_SOCK - TERM -setenv = - FORCE_COLOR=1 - NODE_VERSION=stable - node12: NODE_VERSION=12 - node14: NODE_VERSION=14 - node16: NODE_VERSION=16 - PIP_CONSTRAINTS=requirements.txt -allowlist_externals = - bash - git - node - npm - sh -# Activation of node version is not persistent and nvm works only from -# within `bash --login`, do not call nvm/npm/node without it under tox as -# you might end-up using system version, if any -# On GHA we run run tox --notest, setup/node-version and tox ... after, as -# the second one will configure the version of node that we tox dumps. -commands_pre = - {node12,node14,node16}: bash --login -c "echo {env:NODE_VERSION} > .nvmrc" -commands_post = - # restore nvm default alias to stable version - {node12,node14,node16}: bash --login -c "node --version && echo 'current' > .nvmrc" -commands = - bash --login -c "npm run test" - -skip_install = true - -# keep them, so tox 3 can lists these as additional envs: -[testenv:test-{node12,node14,node16}] -description = - Run tests - test-node12: with node 12 - test-node14: with node 14 - test-node16: with node 16 - -[testenv:test-without-ee] -description = - Run tests without execution environment ones -commands = - bash --login -c "npm run test-without-ee" - -[testenv:deps] -description = Bump all test dependencies -# Using py310 in order to make pip-compile consistent. -basepython = python3.10 -deps = - pip-tools >= 6.5.1 -commands_pre = -commands = - # dependabot supports only 'requirements.txt' filename but we use it as - # a constraints files - bash -c "PIP_CONSTRAINTS= pip-compile -q --extra docs --extra test --strip-extras --no-annotate setup.cfg -o requirements.txt" - npm run deps - -[testenv:docs] -changedir = {toxinidir}/docs -commands_pre = - # Retrieve possibly missing commits: - - git fetch --unshallow - - git fetch --tags -commands = - npm ci - npm run generate-settings-readme - {envpython} -m sphinx -b html {[docs]sphinx_common_args} - {envpython} -m sphinx -b linkcheck {[docs]sphinx_common_args} - - # Print out the output docs dir and a way to serve html: - - {envpython} -c\ - 'import pathlib;\ - docs_dir = pathlib.Path(r"{envdir}") / "docs_out";\ - index_file = docs_dir / "index.html";\ - print("\n" + "=" * 120 +\ - f"\n\nDocumentation available under:\n\n\ - \tfile://\{index_file\}\n\nTo serve docs, use\n\n\ - \t$ python3 -m http.server --directory \ - \N\{QUOTATION MARK\}\{docs_dir\}\N\{QUOTATION MARK\} 0\n\n" +\ - "=" * 120)' - -deps = - -e .[docs] -description = Build The Docs -passenv = - SSH_AUTH_SOCK -skip_install = true -usedevelop = false - - -[testenv:lint] -description = Run all linters -deps = - pre-commit >= 2.17.0 -commands_pre = -commands = - # Commands are the same as running `npm run lint`: - pre-commit run -a -skip_install = true - - -[testenv:make-changelog] -basepython = python3 -depends = - check-changelog -description = - Generate a changelog from fragments using Towncrier. Getting an - unreleased changelog preview does not require extra arguments. - When invoking to update the changelog, pass the desired version as an - argument after `--`. For example, `tox -e {envname} -- 1.3.2`. -envdir = {toxworkdir}/changelog -commands_pre = -commands = - {envpython} -m \ - towncrier.build \ - --version \ - {posargs:'[UNRELEASED DRAFT]' --draft} -deps = - towncrier == 21.3.0 -isolated_build = true -skip_install = true - - -[testenv:check-changelog] -basepython = {[testenv:make-changelog]basepython} -description = - Check Towncrier change notes -commands_pre = -commands = - {envpython} -m \ - towncrier.check \ - --compare-with origin/main \ - {posargs:} -deps = - {[testenv:make-changelog]deps} -envdir = {[testenv:make-changelog]envdir} -isolated_build = {[testenv:make-changelog]isolated_build} -skip_install = {[testenv:make-changelog]skip_install} - - -[testenv:draft-changelog] -basepython = {[testenv:make-changelog]basepython} -description = - Print out the Towncrier-managed change notes - draft for the next release to stdout -commands_pre = -commands = - # NOTE: `sh` invocation is required to suppress stderr from - # NOTE: towncrier since it does not have own CLI flags for - # NOTE: doing this. - sh -c "2>/dev/null \ - {envpython} -m \ - towncrier.build \ - --version '[UNRELEASED DRAFT]' \ - --draft" -envdir = {[testenv:make-changelog]envdir} -deps = - {[testenv:make-changelog]deps} -isolated_build = {[testenv:make-changelog]isolated_build} -skip_install = {[testenv:make-changelog]skip_install} From 9211f4abd46988b6539d0357c4f2f3809450bb39 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sat, 18 Jun 2022 11:07:19 +0100 Subject: [PATCH 369/558] Update dependencies (#352) --- .pre-commit-config.yaml | 2 +- package-lock.json | 1752 +++++++++++++++++++++------------------ package.json | 26 +- 3 files changed, 946 insertions(+), 834 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index aa0e3ee10..2d2074346 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -102,7 +102,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.17.0 + rev: v8.18.0 hooks: - id: eslint args: diff --git a/package-lock.json b/package-lock.json index 8c4212de2..422958375 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,25 +26,25 @@ "@types/chai": "^4.3.1", "@types/glob": "^7.2.0", "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.181", - "@types/mocha": "^9.1.0", - "@types/node": "^17.0.24", + "@types/lodash": "^4.14.182", + "@types/mocha": "^9.1.1", + "@types/node": "^18.0.0", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.66.0", - "@typescript-eslint/eslint-plugin": "^5.19.0", - "@typescript-eslint/parser": "^5.19.0", + "@types/vscode": "^1.68.0", + "@typescript-eslint/eslint-plugin": "^5.28.0", + "@typescript-eslint/parser": "^5.28.0", "chai": "^4.3.6", - "eslint": "^8.13.0", + "eslint": "^8.18.0", "eslint-config-prettier": "^8.5.0", - "fuse.js": "^6.5.3", + "fuse.js": "^6.6.2", "handlebars": "^4.7.7", - "mocha": "^9.2.2", - "npm-check-updates": "^12.5.9", + "mocha": "^10.0.0", + "npm-check-updates": "^14.0.1", "nyc": "^15.1.0", - "prettier": "^2.6.2", + "prettier": "^2.7.1", "rimraf": "^3.0.2", - "ts-node": "^10.7.0", - "typescript": "^4.6.3" + "ts-node": "^10.8.1", + "typescript": "^4.7.4" }, "engines": { "node": ">=12.0", @@ -511,41 +511,32 @@ "node": ">=6.9.0" } }, - "node_modules/@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, "node_modules/@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "dependencies": { - "@cspotcode/source-map-consumer": "0.8.0" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { "node": ">=12" } }, "node_modules/@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", + "espree": "^9.3.2", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { @@ -696,6 +687,31 @@ "node": ">=8" } }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -765,9 +781,9 @@ } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", - "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", + "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", "dev": true, "engines": { "node": ">=12" @@ -824,14 +840,14 @@ } }, "node_modules/@npmcli/run-script": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.2.tgz", - "integrity": "sha512-vdjD/PMBl+OX9j9C9irx5sCCIKfp2PWkpPNH9zxvlJAfSZ3Qp5aU412v+O3PFJl3R1PFNwuyChCqHg4ma6ci2Q==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", + "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", + "node-gyp": "^8.4.1", "read-package-json-fast": "^2.0.3" }, "engines": { @@ -860,12 +876,12 @@ } }, "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "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": ">= 10" + "node": ">= 6" } }, "node_modules/@tsconfig/node10": { @@ -921,9 +937,9 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.181", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", - "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==", + "version": "4.14.182", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", + "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", "dev": true }, "node_modules/@types/minimatch": { @@ -933,15 +949,15 @@ "dev": true }, "node_modules/@types/mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", "dev": true }, "node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", "dev": true }, "node_modules/@types/uuid": { @@ -951,25 +967,25 @@ "dev": true }, "node_modules/@types/vscode": { - "version": "1.66.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.66.0.tgz", - "integrity": "sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==", + "version": "1.68.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.0.tgz", + "integrity": "sha512-duBwEK5ta/eBBMJMQ7ECMEsMvlE3XJdRGh3xoS1uOO4jl2Z4LPBl5vx8WvBP10ERAgDRmIt/FaSD4RHyBGbChw==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.19.0.tgz", - "integrity": "sha512-w59GpFqDYGnWFim9p6TGJz7a3qWeENJuAKCqjGSx+Hq/bwq3RZwXYqy98KIfN85yDqz9mq6QXiY5h0FjGQLyEg==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.28.0.tgz", + "integrity": "sha512-DXVU6Cg29H2M6EybqSg2A+x8DgO9TCUBRp4QEXQHJceLS7ogVDP0g3Lkg/SZCqcvkAP/RruuQqK0gdlkgmhSUA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.19.0", - "@typescript-eslint/type-utils": "5.19.0", - "@typescript-eslint/utils": "5.19.0", - "debug": "^4.3.2", + "@typescript-eslint/scope-manager": "5.28.0", + "@typescript-eslint/type-utils": "5.28.0", + "@typescript-eslint/utils": "5.28.0", + "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", + "ignore": "^5.2.0", "regexpp": "^3.2.0", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -990,15 +1006,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.19.0.tgz", - "integrity": "sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.28.0.tgz", + "integrity": "sha512-ekqoNRNK1lAcKhZESN/PdpVsWbP9jtiNqzFWkp/yAUdZvJalw2heCYuqRmM5eUJSIYEkgq5sGOjq+ZqsLMjtRA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.19.0", - "@typescript-eslint/types": "5.19.0", - "@typescript-eslint/typescript-estree": "5.19.0", - "debug": "^4.3.2" + "@typescript-eslint/scope-manager": "5.28.0", + "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/typescript-estree": "5.28.0", + "debug": "^4.3.4" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1017,13 +1033,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz", - "integrity": "sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.28.0.tgz", + "integrity": "sha512-LeBLTqF/he1Z+boRhSqnso6YrzcKMTQ8bO/YKEe+6+O/JGof9M0g3IJlIsqfrK/6K03MlFIlycbf1uQR1IjE+w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.19.0", - "@typescript-eslint/visitor-keys": "5.19.0" + "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/visitor-keys": "5.28.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1034,13 +1050,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.19.0.tgz", - "integrity": "sha512-O6XQ4RI4rQcBGshTQAYBUIGsKqrKeuIOz9v8bckXZnSeXjn/1+BDZndHLe10UplQeJLXDNbaZYrAytKNQO2T4Q==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.28.0.tgz", + "integrity": "sha512-SyKjKh4CXPglueyC6ceAFytjYWMoPHMswPQae236zqe1YbhvCVQyIawesYywGiu98L9DwrxsBN69vGIVxJ4mQQ==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.19.0", - "debug": "^4.3.2", + "@typescript-eslint/utils": "5.28.0", + "debug": "^4.3.4", "tsutils": "^3.21.0" }, "engines": { @@ -1060,9 +1076,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.19.0.tgz", - "integrity": "sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.28.0.tgz", + "integrity": "sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1073,17 +1089,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz", - "integrity": "sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.28.0.tgz", + "integrity": "sha512-9GX+GfpV+F4hdTtYc6OV9ZkyYilGXPmQpm6AThInpBmKJEyRSIjORJd1G9+bknb7OTFYL+Vd4FBJAO6T78OVqA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.19.0", - "@typescript-eslint/visitor-keys": "5.19.0", - "debug": "^4.3.2", - "globby": "^11.0.4", + "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/visitor-keys": "5.28.0", + "debug": "^4.3.4", + "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -1100,15 +1116,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.19.0.tgz", - "integrity": "sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.28.0.tgz", + "integrity": "sha512-E60N5L0fjv7iPJV3UGc4EC+A3Lcj4jle9zzR0gW7vXhflO7/J29kwiTGITA2RlrmPokKiZbBy2DgaclCaEUs6g==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.19.0", - "@typescript-eslint/types": "5.19.0", - "@typescript-eslint/typescript-estree": "5.19.0", + "@typescript-eslint/scope-manager": "5.28.0", + "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/typescript-estree": "5.28.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -1124,13 +1140,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz", - "integrity": "sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.28.0.tgz", + "integrity": "sha512-BtfP1vCor8cWacovzzPFOoeW4kBQxzmhxGoOpt0v1SFvG+nJ0cWaVdJk7cky1ArTcFHHKNIxyo2LLr3oNkSuXA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.19.0", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "5.28.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1153,9 +1169,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1456,25 +1472,25 @@ "dev": true }, "node_modules/builtins": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.0.tgz", - "integrity": "sha512-aizhtbxgT1Udg0Fj6GssXshAVK+nxbtCV+1OtTrMNy67jffDFBY6CUBAkhO4owbleAx6fdbnWdpsmmcXydbzNw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "dependencies": { "semver": "^7.0.0" } }, "node_modules/cacache": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.4.tgz", - "integrity": "sha512-U0D4wF3/W8ZgK4qDA5fTtOVSr0gaDfd5aa7tUdAV0uukVWKsAIn6SzXQCoVlg7RWZiJa+bcsM3/pXLumGaL2Ug==", + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", "dev": true, "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", - "glob": "^7.2.0", + "glob": "^8.0.1", "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", @@ -1493,30 +1509,10 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/cacache/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/cacache/node_modules/lru-cache": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", - "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", + "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", "dev": true, "engines": { "node": ">=12" @@ -1806,9 +1802,9 @@ } }, "node_modules/commander": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.1.0.tgz", - "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", "dev": true, "engines": { "node": "^12.20.0 || >=14" @@ -1846,7 +1842,7 @@ "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": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "node_modules/convert-source-map": { @@ -1894,9 +1890,9 @@ } }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "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" @@ -1982,13 +1978,13 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { "node": ">= 0.6" @@ -2128,12 +2124,12 @@ } }, "node_modules/eslint": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", - "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.2.1", + "@eslint/eslintrc": "^1.3.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -2144,14 +2140,14 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", + "espree": "^9.3.2", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -2160,7 +2156,7 @@ "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", @@ -2293,13 +2289,13 @@ } }, "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2428,12 +2424,6 @@ "reusify": "^1.0.4" } }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2605,9 +2595,9 @@ "dev": true }, "node_modules/fuse.js": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", - "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", + "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==", "dev": true, "engines": { "node": ">=10" @@ -2767,9 +2757,9 @@ } }, "node_modules/globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2829,15 +2819,6 @@ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -2883,7 +2864,7 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "node_modules/has-yarn": { @@ -2942,9 +2923,9 @@ } }, "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", - "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", + "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", "dev": true, "engines": { "node": ">=12" @@ -2963,12 +2944,12 @@ "dev": true }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "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": "2", + "@tootallnate/once": "1", "agent-base": "6", "debug": "4" }, @@ -2977,9 +2958,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "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", @@ -2992,7 +2973,7 @@ "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "dependencies": { "ms": "^2.0.0" @@ -3042,9 +3023,9 @@ } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -3125,9 +3106,9 @@ } }, "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", "dev": true }, "node_modules/is-binary-path": { @@ -3155,9 +3136,9 @@ } }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -3215,7 +3196,7 @@ "node_modules/is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, "node_modules/is-npm": { @@ -3525,7 +3506,7 @@ "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" @@ -3574,84 +3555,6 @@ "node": ">= 0.8.0" } }, - "node_modules/libnpmconfig": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", - "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1", - "find-up": "^3.0.0", - "ini": "^1.3.5" - } - }, - "node_modules/libnpmconfig/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/libnpmconfig/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/libnpmconfig/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/libnpmconfig/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/libnpmconfig/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/libnpmconfig/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3761,39 +3664,129 @@ "dev": true }, "node_modules/make-fetch-happen": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.2.tgz", - "integrity": "sha512-GWMGiZsKVeJACQGJ1P3Z+iNec7pLsU6YW1q11eaPn3RR8nRXHppFWfP7Eu0//55JK3hSjrAQRl8sDa5uXpq1Ew==", + "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.2.1", - "cacache": "^16.0.2", + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", + "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", + "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", + "negotiator": "^0.6.2", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.1.1", - "ssri": "^9.0.0" + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 10" } }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", - "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "node_modules/make-fetch-happen/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/make-fetch-happen/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==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=12" + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/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/make-fetch-happen/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/make-fetch-happen/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/make-fetch-happen/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/merge2": { @@ -3828,9 +3821,9 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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" @@ -3870,20 +3863,20 @@ } }, "node_modules/minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "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.6", + "minipass": "^3.1.0", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" }, "optionalDependencies": { - "encoding": "^0.1.13" + "encoding": "^0.1.12" } }, "node_modules/minipass-flush": { @@ -3958,42 +3951,40 @@ } }, "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", - "debug": "4.3.3", + "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", - "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "4.2.1", + "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.1", + "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", + "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "bin": { "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 14.0.0" }, "funding": { "type": "opencollective", @@ -4051,17 +4042,26 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -4090,9 +4090,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -4123,15 +4123,15 @@ "dev": true }, "node_modules/node-gyp": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", - "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", + "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": "^10.0.3", + "make-fetch-happen": "^9.1.0", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", @@ -4143,19 +4143,19 @@ "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^12.22 || ^14.13 || >=16" + "node": ">= 10.12.0" } }, "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "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.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -4242,15 +4242,15 @@ } }, "node_modules/npm-check-updates": { - "version": "12.5.9", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.9.tgz", - "integrity": "sha512-l9iOvD7EsQb96gFJL45V01YG6bP8+dmobYnSguvehPuNwgdWNMrE8RC8bSfURX5iUmX4bkobN4T8XMHXN9GMHA==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-14.0.1.tgz", + "integrity": "sha512-CjHKxcJur/OiVc2GKBagUrzDsXL8JJC71rNVv2mC7eNA6w/ebe3POx9x46ay4p3woSxJOa7hYWNn1UwL7jgHug==", "dev": true, "dependencies": { "chalk": "^4.1.2", "cint": "^8.2.1", "cli-table": "^0.3.11", - "commander": "^9.1.0", + "commander": "^9.3.0", "fast-memoize": "^2.5.2", "find-up": "5.0.0", "fp-and-or": "^0.1.3", @@ -4259,30 +4259,29 @@ "hosted-git-info": "^5.0.0", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", - "libnpmconfig": "^1.2.1", "lodash": "^4.17.21", - "minimatch": "^5.0.1", + "minimatch": "^5.1.0", "p-map": "^4.0.0", - "pacote": "^13.0.5", + "pacote": "^13.6.0", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts": "^2.4.2", "rc-config-loader": "^4.1.0", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.5", + "semver": "^7.3.7", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^1.0.0", "update-notifier": "^5.1.0", - "yaml": "^1.10.2" + "yaml": "^2.1.1" }, "bin": { "ncu": "build/src/bin/cli.js", "npm-check-updates": "build/src/bin/cli.js" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/npm-check-updates/node_modules/brace-expansion": { @@ -4295,9 +4294,9 @@ } }, "node_modules/npm-check-updates/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -4321,6 +4320,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npm-check-updates/node_modules/yaml": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/npm-install-checks": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", @@ -4354,12 +4362,12 @@ } }, "node_modules/npm-packlist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.0.0.tgz", - "integrity": "sha512-uU20UwM4Hogfab1Q7htJbhcyafM9lGHxOrDjkKvR2S3z7Ds0uRaESk0cXctczk+ABT4DZWNwjB10xlurFdEwZg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.0.tgz", + "integrity": "sha512-a04sqF6FbkyOAFA19AA0e94gS7Et5T2/IMj3VOT9nOF2RaRdVPQ1Q17Fb/HaDRFs+gbC7HOmhVZ29adpWgmDZg==", "dev": true, "dependencies": { - "glob": "^7.2.0", + "glob": "^8.0.1", "ignore-walk": "^5.0.1", "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" @@ -4371,26 +4379,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm-packlist/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/npm-pick-manifest": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", @@ -4407,9 +4395,9 @@ } }, "node_modules/npm-registry-fetch": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.0.tgz", - "integrity": "sha512-TIYL5X8CcwDhbFMXFDShNcpG6OMCYK6VzvSr6MUWP20tCU2DJ4ao2qQg3DT+3Pet8mO6/cgbZpon4LMh3duYLg==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", + "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", "dev": true, "dependencies": { "make-fetch-happen": "^10.0.6", @@ -4424,19 +4412,109 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", + "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.7.tgz", + "integrity": "sha512-J/2xa2+7zlIUKqfyXDCXFpH3ypxO4k3rgkZHPSZkyUYcBT/hM80M3oyKLM/9dVriZFiGeGGS2Ei+0v2zfhqj3Q==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm-registry-fetch/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/npmlog": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", - "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "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.0", + "gauge": "^4.0.3", "set-blocking": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/nyc": { @@ -4770,9 +4848,9 @@ } }, "node_modules/pacote": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.1.1.tgz", - "integrity": "sha512-MTT3k1OhUo+IpvoHGp25OwsRU0L+kJQM236OCywxvY4OIJ/YfloNW2/Yc3HMASH10BkfZaGMVK/pxybB7fWcLw==", + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.0.tgz", + "integrity": "sha512-zHmuCwG4+QKnj47LFlW3LmArwKoglx2k5xtADiMCivVWPgNRP5QyLDGOIjGjwOe61lhl1rO63m/VxT16pEHLWg==", "dev": true, "dependencies": { "@npmcli/git": "^3.0.0", @@ -4786,7 +4864,7 @@ "minipass": "^3.1.6", "mkdirp": "^1.0.4", "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.0.0", + "npm-packlist": "^5.1.0", "npm-pick-manifest": "^7.0.0", "npm-registry-fetch": "^13.0.1", "proc-log": "^2.0.0", @@ -4973,9 +5051,9 @@ } }, "node_modules/prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -5020,7 +5098,7 @@ "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "dev": true }, "node_modules/promise-retry": { @@ -5170,18 +5248,18 @@ } }, "node_modules/read-package-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.0.tgz", - "integrity": "sha512-1cjk2MV5ONDMn34uxSID3X8NY7VKsXfJnjbcVdFMvHEnJOBzU6MJ7/3yg6QFVZDq5/1yFNrKBUK9kGnonyGP2Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", + "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", "dev": true, "dependencies": { - "glob": "^7.2.0", + "glob": "^8.0.1", "json-parse-even-better-errors": "^2.3.1", "normalize-package-data": "^4.0.0", "npm-normalize-package-bin": "^1.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/read-package-json-fast": { @@ -5197,26 +5275,6 @@ "node": ">=10" } }, - "node_modules/read-package-json/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -5345,7 +5403,7 @@ "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "engines": { "node": ">= 4" @@ -5447,9 +5505,9 @@ "optional": true }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -5570,14 +5628,14 @@ } }, "node_modules/socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "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.1", - "socks": "^2.6.1" + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { "node": ">= 10" @@ -5667,9 +5725,9 @@ "dev": true }, "node_modules/ssri": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.0.tgz", - "integrity": "sha512-Y1Z6J8UYnexKFN1R/hxUaYoY2LVdKEzziPmVAFKiKX8fiwvCJTVzn/xYE9TEWod5OVyNfIHHuVfIEuBClL/uJQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "dependencies": { "minipass": "^3.1.1" @@ -5834,12 +5892,12 @@ } }, "node_modules/ts-node": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", - "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", + "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", "dev": true, "dependencies": { - "@cspotcode/source-map-support": "0.7.0", + "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", @@ -5850,7 +5908,7 @@ "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.0", + "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "bin": { @@ -5949,9 +6007,9 @@ } }, "node_modules/typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -6056,7 +6114,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "node_modules/uuid": { @@ -6074,9 +6132,9 @@ "dev": true }, "node_modules/v8-compile-cache-lib": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", - "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, "node_modules/validate-npm-package-license": { @@ -6202,9 +6260,9 @@ "dev": true }, "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "node_modules/wrap-ansi": { @@ -6695,35 +6753,29 @@ "to-fast-properties": "^2.0.0" } }, - "@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true - }, "@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "requires": { - "@cspotcode/source-map-consumer": "0.8.0" + "@jridgewell/trace-mapping": "0.3.9" } }, "@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", + "espree": "^9.3.2", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "dependencies": { @@ -6842,6 +6894,28 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -6896,9 +6970,9 @@ }, "dependencies": { "lru-cache": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", - "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", + "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", "dev": true } } @@ -6939,14 +7013,14 @@ } }, "@npmcli/run-script": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.2.tgz", - "integrity": "sha512-vdjD/PMBl+OX9j9C9irx5sCCIKfp2PWkpPNH9zxvlJAfSZ3Qp5aU412v+O3PFJl3R1PFNwuyChCqHg4ma6ci2Q==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", + "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", "dev": true, "requires": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", + "node-gyp": "^8.4.1", "read-package-json-fast": "^2.0.3" } }, @@ -6966,9 +7040,9 @@ } }, "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, "@tsconfig/node10": { @@ -7024,9 +7098,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.181", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", - "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==", + "version": "4.14.182", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", + "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", "dev": true }, "@types/minimatch": { @@ -7036,15 +7110,15 @@ "dev": true }, "@types/mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", "dev": true }, "@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", "dev": true }, "@types/uuid": { @@ -7054,104 +7128,104 @@ "dev": true }, "@types/vscode": { - "version": "1.66.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.66.0.tgz", - "integrity": "sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==", + "version": "1.68.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.0.tgz", + "integrity": "sha512-duBwEK5ta/eBBMJMQ7ECMEsMvlE3XJdRGh3xoS1uOO4jl2Z4LPBl5vx8WvBP10ERAgDRmIt/FaSD4RHyBGbChw==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.19.0.tgz", - "integrity": "sha512-w59GpFqDYGnWFim9p6TGJz7a3qWeENJuAKCqjGSx+Hq/bwq3RZwXYqy98KIfN85yDqz9mq6QXiY5h0FjGQLyEg==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.28.0.tgz", + "integrity": "sha512-DXVU6Cg29H2M6EybqSg2A+x8DgO9TCUBRp4QEXQHJceLS7ogVDP0g3Lkg/SZCqcvkAP/RruuQqK0gdlkgmhSUA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.19.0", - "@typescript-eslint/type-utils": "5.19.0", - "@typescript-eslint/utils": "5.19.0", - "debug": "^4.3.2", + "@typescript-eslint/scope-manager": "5.28.0", + "@typescript-eslint/type-utils": "5.28.0", + "@typescript-eslint/utils": "5.28.0", + "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", + "ignore": "^5.2.0", "regexpp": "^3.2.0", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" } }, "@typescript-eslint/parser": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.19.0.tgz", - "integrity": "sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.28.0.tgz", + "integrity": "sha512-ekqoNRNK1lAcKhZESN/PdpVsWbP9jtiNqzFWkp/yAUdZvJalw2heCYuqRmM5eUJSIYEkgq5sGOjq+ZqsLMjtRA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.19.0", - "@typescript-eslint/types": "5.19.0", - "@typescript-eslint/typescript-estree": "5.19.0", - "debug": "^4.3.2" + "@typescript-eslint/scope-manager": "5.28.0", + "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/typescript-estree": "5.28.0", + "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz", - "integrity": "sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.28.0.tgz", + "integrity": "sha512-LeBLTqF/he1Z+boRhSqnso6YrzcKMTQ8bO/YKEe+6+O/JGof9M0g3IJlIsqfrK/6K03MlFIlycbf1uQR1IjE+w==", "dev": true, "requires": { - "@typescript-eslint/types": "5.19.0", - "@typescript-eslint/visitor-keys": "5.19.0" + "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/visitor-keys": "5.28.0" } }, "@typescript-eslint/type-utils": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.19.0.tgz", - "integrity": "sha512-O6XQ4RI4rQcBGshTQAYBUIGsKqrKeuIOz9v8bckXZnSeXjn/1+BDZndHLe10UplQeJLXDNbaZYrAytKNQO2T4Q==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.28.0.tgz", + "integrity": "sha512-SyKjKh4CXPglueyC6ceAFytjYWMoPHMswPQae236zqe1YbhvCVQyIawesYywGiu98L9DwrxsBN69vGIVxJ4mQQ==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.19.0", - "debug": "^4.3.2", + "@typescript-eslint/utils": "5.28.0", + "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.19.0.tgz", - "integrity": "sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.28.0.tgz", + "integrity": "sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz", - "integrity": "sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.28.0.tgz", + "integrity": "sha512-9GX+GfpV+F4hdTtYc6OV9ZkyYilGXPmQpm6AThInpBmKJEyRSIjORJd1G9+bknb7OTFYL+Vd4FBJAO6T78OVqA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.19.0", - "@typescript-eslint/visitor-keys": "5.19.0", - "debug": "^4.3.2", - "globby": "^11.0.4", + "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/visitor-keys": "5.28.0", + "debug": "^4.3.4", + "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" } }, "@typescript-eslint/utils": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.19.0.tgz", - "integrity": "sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.28.0.tgz", + "integrity": "sha512-E60N5L0fjv7iPJV3UGc4EC+A3Lcj4jle9zzR0gW7vXhflO7/J29kwiTGITA2RlrmPokKiZbBy2DgaclCaEUs6g==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.19.0", - "@typescript-eslint/types": "5.19.0", - "@typescript-eslint/typescript-estree": "5.19.0", + "@typescript-eslint/scope-manager": "5.28.0", + "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/typescript-estree": "5.28.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz", - "integrity": "sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.28.0.tgz", + "integrity": "sha512-BtfP1vCor8cWacovzzPFOoeW4kBQxzmhxGoOpt0v1SFvG+nJ0cWaVdJk7cky1ArTcFHHKNIxyo2LLr3oNkSuXA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.19.0", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "5.28.0", + "eslint-visitor-keys": "^3.3.0" } }, "@ungap/promise-all-settled": { @@ -7167,9 +7241,9 @@ "dev": true }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, "acorn-jsx": { @@ -7397,25 +7471,25 @@ "dev": true }, "builtins": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.0.tgz", - "integrity": "sha512-aizhtbxgT1Udg0Fj6GssXshAVK+nxbtCV+1OtTrMNy67jffDFBY6CUBAkhO4owbleAx6fdbnWdpsmmcXydbzNw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "requires": { "semver": "^7.0.0" } }, "cacache": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.4.tgz", - "integrity": "sha512-U0D4wF3/W8ZgK4qDA5fTtOVSr0gaDfd5aa7tUdAV0uukVWKsAIn6SzXQCoVlg7RWZiJa+bcsM3/pXLumGaL2Ug==", + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", "dev": true, "requires": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", - "glob": "^7.2.0", + "glob": "^8.0.1", "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", @@ -7431,24 +7505,10 @@ "unique-filename": "^1.1.1" }, "dependencies": { - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "lru-cache": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", - "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", + "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", "dev": true }, "p-map": { @@ -7658,9 +7718,9 @@ "dev": true }, "commander": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.1.0.tgz", - "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", "dev": true }, "commondir": { @@ -7692,7 +7752,7 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "convert-source-map": { @@ -7736,9 +7796,9 @@ "dev": true }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -7798,13 +7858,13 @@ "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true }, "diff": { @@ -7914,12 +7974,12 @@ "dev": true }, "eslint": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", - "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.1", + "@eslint/eslintrc": "^1.3.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -7930,14 +7990,14 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", + "espree": "^9.3.2", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -7946,7 +8006,7 @@ "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", @@ -8039,13 +8099,13 @@ "dev": true }, "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" } }, @@ -8147,12 +8207,6 @@ "reusify": "^1.0.4" } }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -8270,9 +8324,9 @@ "dev": true }, "fuse.js": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", - "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", + "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==", "dev": true }, "gauge": { @@ -8388,9 +8442,9 @@ } }, "globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -8435,12 +8489,6 @@ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -8472,7 +8520,7 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "has-yarn": { @@ -8515,9 +8563,9 @@ }, "dependencies": { "lru-cache": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", - "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", + "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", "dev": true } } @@ -8535,20 +8583,20 @@ "dev": true }, "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "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, "requires": { - "@tootallnate/once": "2", + "@tootallnate/once": "1", "agent-base": "6", "debug": "4" } }, "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "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, "requires": { "agent-base": "6", @@ -8558,7 +8606,7 @@ "humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "requires": { "ms": "^2.0.0" @@ -8599,9 +8647,9 @@ } }, "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -8663,9 +8711,9 @@ "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==" }, "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", "dev": true }, "is-binary-path": { @@ -8687,9 +8735,9 @@ } }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "requires": { "has": "^1.0.3" @@ -8729,7 +8777,7 @@ "is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, "is-npm": { @@ -8967,7 +9015,7 @@ "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, "keyv": { @@ -9004,68 +9052,6 @@ "type-check": "~0.4.0" } }, - "libnpmconfig": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", - "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "find-up": "^3.0.0", - "ini": "^1.3.5" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -9150,34 +9136,106 @@ "dev": true }, "make-fetch-happen": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.2.tgz", - "integrity": "sha512-GWMGiZsKVeJACQGJ1P3Z+iNec7pLsU6YW1q11eaPn3RR8nRXHppFWfP7Eu0//55JK3hSjrAQRl8sDa5uXpq1Ew==", + "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, "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.0.2", + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", + "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", + "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", + "negotiator": "^0.6.2", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.1.1", - "ssri": "^9.0.0" + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" }, "dependencies": { - "lru-cache": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", - "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", - "dev": true + "@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, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@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==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@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" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + }, + "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, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } } } }, @@ -9204,9 +9262,9 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -9237,15 +9295,15 @@ } }, "minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", "dev": true, "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", + "encoding": "^0.1.12", + "minipass": "^3.1.0", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^2.0.0" } }, "minipass-flush": { @@ -9302,32 +9360,30 @@ "dev": true }, "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", - "debug": "4.3.3", + "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", - "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "4.2.1", + "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.1", + "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", + "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" @@ -9374,12 +9430,23 @@ } }, "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + } } }, "ms": { @@ -9406,9 +9473,9 @@ "dev": true }, "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true }, "natural-compare": { @@ -9430,15 +9497,15 @@ "dev": true }, "node-gyp": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", - "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", + "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, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", + "make-fetch-happen": "^9.1.0", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", @@ -9448,15 +9515,15 @@ }, "dependencies": { "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -9521,15 +9588,15 @@ } }, "npm-check-updates": { - "version": "12.5.9", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.9.tgz", - "integrity": "sha512-l9iOvD7EsQb96gFJL45V01YG6bP8+dmobYnSguvehPuNwgdWNMrE8RC8bSfURX5iUmX4bkobN4T8XMHXN9GMHA==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-14.0.1.tgz", + "integrity": "sha512-CjHKxcJur/OiVc2GKBagUrzDsXL8JJC71rNVv2mC7eNA6w/ebe3POx9x46ay4p3woSxJOa7hYWNn1UwL7jgHug==", "dev": true, "requires": { "chalk": "^4.1.2", "cint": "^8.2.1", "cli-table": "^0.3.11", - "commander": "^9.1.0", + "commander": "^9.3.0", "fast-memoize": "^2.5.2", "find-up": "5.0.0", "fp-and-or": "^0.1.3", @@ -9538,23 +9605,22 @@ "hosted-git-info": "^5.0.0", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", - "libnpmconfig": "^1.2.1", "lodash": "^4.17.21", - "minimatch": "^5.0.1", + "minimatch": "^5.1.0", "p-map": "^4.0.0", - "pacote": "^13.0.5", + "pacote": "^13.6.0", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts": "^2.4.2", "rc-config-loader": "^4.1.0", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.5", + "semver": "^7.3.7", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^1.0.0", "update-notifier": "^5.1.0", - "yaml": "^1.10.2" + "yaml": "^2.1.1" }, "dependencies": { "brace-expansion": { @@ -9567,9 +9633,9 @@ } }, "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -9583,6 +9649,12 @@ "requires": { "aggregate-error": "^3.0.0" } + }, + "yaml": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "dev": true } } }, @@ -9613,31 +9685,15 @@ } }, "npm-packlist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.0.0.tgz", - "integrity": "sha512-uU20UwM4Hogfab1Q7htJbhcyafM9lGHxOrDjkKvR2S3z7Ds0uRaESk0cXctczk+ABT4DZWNwjB10xlurFdEwZg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.0.tgz", + "integrity": "sha512-a04sqF6FbkyOAFA19AA0e94gS7Et5T2/IMj3VOT9nOF2RaRdVPQ1Q17Fb/HaDRFs+gbC7HOmhVZ29adpWgmDZg==", "dev": true, "requires": { - "glob": "^7.2.0", + "glob": "^8.0.1", "ignore-walk": "^5.0.1", "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" - }, - "dependencies": { - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } } }, "npm-pick-manifest": { @@ -9653,9 +9709,9 @@ } }, "npm-registry-fetch": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.0.tgz", - "integrity": "sha512-TIYL5X8CcwDhbFMXFDShNcpG6OMCYK6VzvSr6MUWP20tCU2DJ4ao2qQg3DT+3Pet8mO6/cgbZpon4LMh3duYLg==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", + "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", "dev": true, "requires": { "make-fetch-happen": "^10.0.6", @@ -9665,17 +9721,89 @@ "minizlib": "^2.1.2", "npm-package-arg": "^9.0.1", "proc-log": "^2.0.0" + }, + "dependencies": { + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "lru-cache": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", + "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", + "dev": true + }, + "make-fetch-happen": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.7.tgz", + "integrity": "sha512-J/2xa2+7zlIUKqfyXDCXFpH3ypxO4k3rgkZHPSZkyUYcBT/hM80M3oyKLM/9dVriZFiGeGGS2Ei+0v2zfhqj3Q==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + } + }, + "minipass-fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + } } }, "npmlog": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", - "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "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, "requires": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", + "gauge": "^4.0.3", "set-blocking": "^2.0.0" } }, @@ -9936,9 +10064,9 @@ } }, "pacote": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.1.1.tgz", - "integrity": "sha512-MTT3k1OhUo+IpvoHGp25OwsRU0L+kJQM236OCywxvY4OIJ/YfloNW2/Yc3HMASH10BkfZaGMVK/pxybB7fWcLw==", + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.0.tgz", + "integrity": "sha512-zHmuCwG4+QKnj47LFlW3LmArwKoglx2k5xtADiMCivVWPgNRP5QyLDGOIjGjwOe61lhl1rO63m/VxT16pEHLWg==", "dev": true, "requires": { "@npmcli/git": "^3.0.0", @@ -9952,7 +10080,7 @@ "minipass": "^3.1.6", "mkdirp": "^1.0.4", "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.0.0", + "npm-packlist": "^5.1.0", "npm-pick-manifest": "^7.0.0", "npm-registry-fetch": "^13.0.1", "proc-log": "^2.0.0", @@ -10081,9 +10209,9 @@ "dev": true }, "prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "proc-log": { @@ -10110,7 +10238,7 @@ "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "dev": true }, "promise-retry": { @@ -10229,31 +10357,15 @@ } }, "read-package-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.0.tgz", - "integrity": "sha512-1cjk2MV5ONDMn34uxSID3X8NY7VKsXfJnjbcVdFMvHEnJOBzU6MJ7/3yg6QFVZDq5/1yFNrKBUK9kGnonyGP2Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", + "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", "dev": true, "requires": { - "glob": "^7.2.0", + "glob": "^8.0.1", "json-parse-even-better-errors": "^2.3.1", "normalize-package-data": "^4.0.0", "npm-normalize-package-bin": "^1.0.1" - }, - "dependencies": { - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } } }, "read-package-json-fast": { @@ -10361,7 +10473,7 @@ "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true }, "reusify": { @@ -10418,9 +10530,9 @@ "optional": true }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -10514,14 +10626,14 @@ } }, "socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "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, "requires": { "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" + "debug": "^4.3.3", + "socks": "^2.6.2" } }, "source-map": { @@ -10599,9 +10711,9 @@ "dev": true }, "ssri": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.0.tgz", - "integrity": "sha512-Y1Z6J8UYnexKFN1R/hxUaYoY2LVdKEzziPmVAFKiKX8fiwvCJTVzn/xYE9TEWod5OVyNfIHHuVfIEuBClL/uJQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "requires": { "minipass": "^3.1.1" @@ -10726,12 +10838,12 @@ } }, "ts-node": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", - "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", + "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", "dev": true, "requires": { - "@cspotcode/source-map-support": "0.7.0", + "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", @@ -10742,7 +10854,7 @@ "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.0", + "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "dependencies": { @@ -10800,9 +10912,9 @@ } }, "typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true }, "uglify-js": { @@ -10882,7 +10994,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "uuid": { @@ -10897,9 +11009,9 @@ "dev": true }, "v8-compile-cache-lib": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", - "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, "validate-npm-package-license": { @@ -11004,9 +11116,9 @@ "dev": true }, "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "wrap-ansi": { diff --git a/package.json b/package.json index a70b84c04..c3c79782c 100644 --- a/package.json +++ b/package.json @@ -55,25 +55,25 @@ "@types/chai": "^4.3.1", "@types/glob": "^7.2.0", "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.181", - "@types/mocha": "^9.1.0", - "@types/node": "^17.0.24", + "@types/lodash": "^4.14.182", + "@types/mocha": "^9.1.1", + "@types/node": "^18.0.0", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.66.0", - "@typescript-eslint/eslint-plugin": "^5.19.0", - "@typescript-eslint/parser": "^5.19.0", + "@types/vscode": "^1.68.0", + "@typescript-eslint/eslint-plugin": "^5.28.0", + "@typescript-eslint/parser": "^5.28.0", "chai": "^4.3.6", - "eslint": "^8.13.0", + "eslint": "^8.18.0", "eslint-config-prettier": "^8.5.0", - "fuse.js": "^6.5.3", + "fuse.js": "^6.6.2", "handlebars": "^4.7.7", - "mocha": "^9.2.2", - "npm-check-updates": "^12.5.9", + "mocha": "^10.0.0", + "npm-check-updates": "^14.0.1", "nyc": "^15.1.0", - "prettier": "^2.6.2", + "prettier": "^2.7.1", "rimraf": "^3.0.2", - "ts-node": "^10.7.0", - "typescript": "^4.6.3" + "ts-node": "^10.8.1", + "typescript": "^4.7.4" }, "scripts": { "clean": "rimraf out/server && rimraf lib", From c695ba2b65630f246afe934a7acb7f6e97d2997b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Giquel?= Date: Sat, 18 Jun 2022 12:18:07 +0200 Subject: [PATCH 370/558] Add settings for completion (#348) Co-authored-by: Sorin Sbarnea --- docs/changelog-fragments.d/348.feature.md | 15 +++++++++++++++ docs/settings.md | 10 ++++++++++ src/interfaces/extensionSettings.ts | 19 +++++++++++++++++++ src/providers/completionProvider.ts | 21 +++++++++++++++++---- src/services/settingsManager.ts | 11 +++++++++++ 5 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 docs/changelog-fragments.d/348.feature.md diff --git a/docs/changelog-fragments.d/348.feature.md b/docs/changelog-fragments.d/348.feature.md new file mode 100644 index 000000000..942ab7246 --- /dev/null +++ b/docs/changelog-fragments.d/348.feature.md @@ -0,0 +1,15 @@ +````md +Added settings for completion -- by {user}`fredericgiquel` + +- Add settings to toggle redirected module provider when completing modules + +```code + "ansible.completion.provideRedirectModules": true +``` + +- Add settings to toggle alias provider when completing module options + +```code + "ansible.completion.provideModuleOptionAliases": true +``` +```` diff --git a/docs/settings.md b/docs/settings.md index b46e1e912..412431751 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -69,6 +69,16 @@ Extra parameters passed to the container engine command example: '--net _default value: `""`_ +- **ansible.completion.provideRedirectModules**: +Toggle redirected module provider when completing modules \ +_default value: +`true`_ + +- **ansible.completion.provideModuleOptionAliases**: +Toggle alias provider when completing module options \ +_default value: +`true`_ + - **ansible.executionEnvironment.volumeMounts**: - **src**: The name of the local volume or path to be mounted within execution environment. \ _default value: diff --git a/src/interfaces/extensionSettings.ts b/src/interfaces/extensionSettings.ts index c0fb894bc..e7dd1b577 100644 --- a/src/interfaces/extensionSettings.ts +++ b/src/interfaces/extensionSettings.ts @@ -12,6 +12,7 @@ export type IPullPolicy = "always" | "missing" | "never" | "tag"; export interface ExtensionSettingsWithDescription { ansible: AnsibleSettingsWithDescription; ansibleLint: AnsibleLintSettingsWithDescription; + completion: CompletionSettingsWithDescription; executionEnvironment: ExecutionEnvironmentSettingsWithDescription; python: PythonSettingsWithDescription; } @@ -19,6 +20,10 @@ export interface ExtensionSettingsWithDescription { export interface ExtensionSettings { ansible: { path: string; useFullyQualifiedCollectionNames: boolean }; ansibleLint: { enabled: boolean; path: string; arguments: string }; + completion: { + provideRedirectModules: boolean; + provideModuleOptionAliases: boolean; + }; executionEnvironment: { enabled: boolean; containerEngine: IContainerEngine; @@ -102,3 +107,17 @@ interface PythonSettingsWithDescription { description: string; }; } + +/** + * Interface for completion settings + */ +interface CompletionSettingsWithDescription { + provideRedirectModules: { + default: boolean; + description: string; + }; + provideModuleOptionAliases: { + default: boolean; + description: string; + }; +} diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index 98ea830c2..446c55ef3 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -65,6 +65,12 @@ export async function doCompletion( const useFqcn = (await context.documentSettings.get(document.uri)).ansible .useFullyQualifiedCollectionNames; + const provideRedirectModulesCompletion = ( + await context.documentSettings.get(document.uri) + ).completion.provideRedirectModules; + const provideModuleOptionAliasesCompletion = ( + await context.documentSettings.get(document.uri) + ).completion.provideModuleOptionAliases; // We need inclusive matching, since cursor position is the position of the character right after it // NOTE: Might no longer be required due to the hack above @@ -138,8 +144,13 @@ export async function doCompletion( ); // offer modules - const moduleCompletionItems = [...docsLibrary.moduleFqcns].map( - (moduleFqcn): CompletionItem => { + const moduleCompletionItems = [...docsLibrary.moduleFqcns] + .filter( + (moduleFqcn) => + provideRedirectModulesCompletion || + !docsLibrary.getModuleRoute(moduleFqcn)?.redirect + ) + .map((moduleFqcn): CompletionItem => { let priority, kind; if (docsLibrary.getModuleRoute(moduleFqcn)?.redirect) { priority = priorityMap.redirectedModuleName; @@ -178,8 +189,7 @@ export async function doCompletion( newText: insertText, }, }; - } - ); + }); completionItems.push(...moduleCompletionItems); } return completionItems; @@ -220,6 +230,9 @@ export async function doCompletion( specs: specs, }; }) + .filter( + (option) => provideModuleOptionAliasesCompletion || !isAlias(option) + ) .map((option, index) => { // translate option documentation to CompletionItem const details = getDetails(option.specs); diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index e65a6814d..d32fef31a 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -104,6 +104,17 @@ export class SettingsManager { "Extra parameters passed to the container engine command example: '--net=host'", }, }, + completion: { + provideRedirectModules: { + default: true, + description: + "Toggle redirected module provider when completing modules", + }, + provideModuleOptionAliases: { + default: true, + description: "Toggle alias provider when completing module options", + }, + }, }; // Structure the settings similar to the ExtensionSettings interface for usage in the code From 149a61f63b2d98069438f45b4b004412ad30c34d Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 09:09:28 +0100 Subject: [PATCH 371/558] Refactor npm package (#356) - replace .npmignore with files section which only specifies what goes in (avoids accidents). - ensure we export types References: * https://docs.npmjs.com/cli/v8/configuring-npm/package-json#files * https://cameronnokes.com/blog/the-30-second-guide-to-publishing-a-typescript-package-to-npm/ * https://npm.github.io/publishing-pkgs-docs/publishing/the-npmignore-file.html --- .npmignore | 21 --------------------- package.json | 7 +++++++ 2 files changed, 7 insertions(+), 21 deletions(-) delete mode 100644 .npmignore diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 400ea9335..000000000 --- a/.npmignore +++ /dev/null @@ -1,21 +0,0 @@ -*.tgz -.editorconfig -.eslintrc.json -.gitattributes -.github/ -.nyc_output/ -.pre-commit-config.yaml -.prettierrc.json -.prettierrc.yaml -.travis.yml -.vscode/ -.vscodeignore -/coverage/ -/images/ -/out/server/test/ -/scripts/ -/src -/test/ -Jenkinsfile -test-requirements.txt -tsconfig.json diff --git a/package.json b/package.json index c3c79782c..51412d807 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,13 @@ "bin": { "ansible-language-server": "./bin/ansible-language-server" }, + "main": "./out/server/src/server.js", + "types": "./out/server/src/server.d.ts", + "files": [ + "CHANGELOG.md", + "icon.png", + "out/server/src" + ], "categories": [ "Programming Languages" ], From fed8efa7a979451b909a36593c1ad0cdef04059e Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 09:17:37 +0100 Subject: [PATCH 372/558] Remove syntaxes from ALS (#354) --- .pre-commit-config.yaml | 11 - .prettierignore | 1 - Taskfile.yml | 1 - cspell.config.yaml | 1 - scripts/build-syntaxes | 14 - syntaxes/README.md | 9 - .../ansible/generated/jinja-braces.tmLanguage | 58 - .../generated/jinja-conditionals.tmLanguage | 623 --------- .../jinja-double-quote-escape.tmLanguage | 56 - .../ansible/generated/jinja-extras.tmLanguage | 63 - .../jinja-single-quote-escape.tmLanguage | 56 - .../ansible/generated/keywords.tmLanguage | 47 - .../ansible/jinja-braces.tmLanguage.plist | 30 - .../jinja-conditionals.tmLanguage.plist | 382 ------ ...jinja-double-quote-escape.tmLanguage.plist | 33 - .../ansible/jinja-extras.tmLanguage.plist | 40 - ...jinja-single-quote-escape.tmLanguage.plist | 33 - syntaxes/ansible/keywords.tmLanguage.plist | 31 - syntaxes/external/YAML.tmLanguage | 1151 ----------------- syntaxes/external/YAML.tmLanguage.plist | 818 ------------ syntaxes/external/jinja.tmLanguage.json | 349 ----- syntaxes/plist2xml.py | 89 -- syntaxes/xml2plist.py | 90 -- 23 files changed, 3986 deletions(-) delete mode 100755 scripts/build-syntaxes delete mode 100644 syntaxes/README.md delete mode 100644 syntaxes/ansible/generated/jinja-braces.tmLanguage delete mode 100644 syntaxes/ansible/generated/jinja-conditionals.tmLanguage delete mode 100644 syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage delete mode 100644 syntaxes/ansible/generated/jinja-extras.tmLanguage delete mode 100644 syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage delete mode 100644 syntaxes/ansible/generated/keywords.tmLanguage delete mode 100644 syntaxes/ansible/jinja-braces.tmLanguage.plist delete mode 100644 syntaxes/ansible/jinja-conditionals.tmLanguage.plist delete mode 100644 syntaxes/ansible/jinja-double-quote-escape.tmLanguage.plist delete mode 100644 syntaxes/ansible/jinja-extras.tmLanguage.plist delete mode 100644 syntaxes/ansible/jinja-single-quote-escape.tmLanguage.plist delete mode 100644 syntaxes/ansible/keywords.tmLanguage.plist delete mode 100644 syntaxes/external/YAML.tmLanguage delete mode 100644 syntaxes/external/YAML.tmLanguage.plist delete mode 100644 syntaxes/external/jinja.tmLanguage.json delete mode 100644 syntaxes/plist2xml.py delete mode 100644 syntaxes/xml2plist.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2d2074346..a341b26eb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,16 +14,6 @@ ci: repos: - repo: local hooks: - - id: build-syntaxes - name: Check the syntax files are in sync - entry: python scripts/build-syntaxes - language: python - pass_filenames: false - always_run: true - additional_dependencies: - - click - - lxml - - pyparsing - id: npm-ci name: Run 'npm ci' to ensure deps and versions are correct entry: >- @@ -60,7 +50,6 @@ repos: - id: end-of-file-fixer exclude: > (?x)^( - syntaxes/.*| docs/settings.md )$ - id: trailing-whitespace diff --git a/.prettierignore b/.prettierignore index a49e1bdeb..755f7d43d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -6,7 +6,6 @@ out # Tracked but externally sourced, no reformatting wanted: jinja-language-configuration.json -syntaxes/external/jinja.tmLanguage.json # Files temporary excluded during prettier adoption: *.yaml diff --git a/Taskfile.yml b/Taskfile.yml index c01446de8..ebe7c2cc2 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -94,7 +94,6 @@ tasks: - doc - images - src - - syntaxes - test - tools test: diff --git a/cspell.config.yaml b/cspell.config.yaml index d9e42c99e..a54ab27ff 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -16,4 +16,3 @@ ignorePaths: - docs/requirements.in - docs/requirements.txt - requirements.txt - - syntaxes/**/*.* diff --git a/scripts/build-syntaxes b/scripts/build-syntaxes deleted file mode 100755 index 97304dd21..000000000 --- a/scripts/build-syntaxes +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python -import glob -import os -import sys -import subprocess - -for src in glob.glob("syntaxes/ansible/*.plist"): - dst = os.path.splitext(os.path.basename(src))[0] - cmd = [sys.executable, "syntaxes/plist2xml.py", src, f"syntaxes/ansible/generated/{dst}"] - print(f"Running: {' '.join(cmd)}") - subprocess.run( - cmd, - check=True - ) diff --git a/syntaxes/README.md b/syntaxes/README.md deleted file mode 100644 index c0a58dc0c..000000000 --- a/syntaxes/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# TextMate grammar authoring - -TextMate grammars (which VS Code uses for syntax highlighting) are authored in a -[textual property-list format](https://macromates.com/manual/en/language_grammars). -This format is much easier to work with than its XML, JSON or even YAML -representations. - -The two Python scripts `plist2xml.py` and `xml2plist.py` are provided to convert -between the textual and XML representation of the TextMate grammars. diff --git a/syntaxes/ansible/generated/jinja-braces.tmLanguage b/syntaxes/ansible/generated/jinja-braces.tmLanguage deleted file mode 100644 index 56aee299c..000000000 --- a/syntaxes/ansible/generated/jinja-braces.tmLanguage +++ /dev/null @@ -1,58 +0,0 @@ - - - - - scopeName - injection.ansible.jinja-braces - injectionSelector - L:string -meta.embedded.inline.jinja - name - Grammar for Jinja2 expressions surrounded by double curly braces - patterns - - - include - #jinja-expression - - - repository - - jinja-expression - - comment - The 'name' is used to undo highlighting as string - name - keyword.operator.ansible - begin - \{\{ - end - \}\} - beginCaptures - - 0 - - name - constant.character.escape.ansible - - - endCaptures - - 0 - - name - constant.character.escape.ansible - - - contentName - meta.embedded.inline.jinja - patterns - - - include - source.ansible-jinja#expression - - - - - - \ No newline at end of file diff --git a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage deleted file mode 100644 index c9f147ddf..000000000 --- a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage +++ /dev/null @@ -1,623 +0,0 @@ - - - - - scopeName - injection.ansible.jinja-conditionals - name - Grammar for Jinja2 expressions in Ansible conditionals - patterns - - - include - #ansible-condition - - - comment - - Flow style collections are not supported (yet) - - repository - - ansible-condition - - patterns - - - name - meta.flow-unquoted.ansible.condition - begin - (?x) - ^(\s*) # 1 - (?:(-)(\s+))? # 2, 3; in case it is first key of a list item - \b( # 4 - changed_when - | failed_when - | when - | check_mode - )\b - \s* (:) # 5 - (?=\s) (?!\s*[|>'"]|\s*$|\s*\#.*$) # starting an unquoted flow - - beginCaptures - - 2 - - name - punctuation.definition.block.sequence.item.ansible - - 4 - - name - keyword.other.special-method.ansible - - 5 - - name - punctuation.separator.key-value.mapping.ansible - - - end - (?x) - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - - patterns - - - include - source.ansible#comment - - - include - #yaml-unquoted-string - - - - - name - meta.flow.ansible.condition - begin - (?x) - ^(\s*) # 1 - (?:(-)(\s+))? # 2, 3; in case it is first key of a list item - \b( # 4 - changed_when - | failed_when - | when - | check_mode - )\b - \s* (:) # 5 - (?=\s) (?!\s*[|>]|\s*$|\s*\#.*$) # not starting a block (scalar or other) - - beginCaptures - - 2 - - name - punctuation.definition.block.sequence.item.ansible - - 4 - - name - keyword.other.special-method.ansible - - 5 - - name - punctuation.separator.key-value.mapping.ansible - - - end - (?x) - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - - patterns - - - include - source.ansible#comment - - - include - #yaml-double-quoted-string - - - include - #yaml-single-quoted-string - - - include - #yaml-unquoted-string - - - - - name - meta.block-scalar.ansible.condition - begin - (?x) - ^(\s*) # 1 - (?:(-)(\s+))? # 2, 3; in case it is first key of a list item - \b( # 4 - changed_when - | failed_when - | when - | check_mode - )\b - \s* (:) # 5 - \s+ (?: (\|) | (>) ) ([1-9])? ([-+])? # 6,7,8,9; starting a scalar block - (.*$) # comment or illegal - - beginCaptures - - 2 - - name - punctuation.definition.block.sequence.item.ansible - - 4 - - name - keyword.other.special-method.ansible - - 5 - - name - punctuation.separator.key-value.mapping.ansible - - 6 - - name - keyword.control.flow.block-scalar.literal.ansible - - 7 - - name - keyword.control.flow.block-scalar.folded.ansible - - 8 - - name - constant.numeric.indentation-indicator.ansible - - 9 - - name - storage.modifier.chomping-indicator.ansible - - 10 - - patterns - - - include - source.ansible#comment - - - match - .+ - name - invalid.illegal.expected-comment-or-newline.ansible - - - - - end - (?x) - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - - patterns - - - include - #yaml-scalar-block - - - - - name - meta.block.ansible.condition - begin - (?x) - ^(\s*) # 1 - (?:(-)(\s+))? # 2, 3; in case it is first key of a list item - \b( # 4 - changed_when - | failed_when - | when - | check_mode - )\b - \s* (:) # 5 - (.*$) # comment or illegal - - beginCaptures - - 2 - - name - punctuation.definition.block.sequence.item.ansible - - 4 - - name - keyword.other.special-method.ansible - - 5 - - name - punctuation.separator.key-value.mapping.ansible - - 6 - - patterns - - - include - source.ansible#comment - - - match - .+ - name - invalid.illegal.expected-comment-or-newline.ansible - - - - - end - (?x) - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - - patterns - - - include - #yaml-block - - - - - - yaml-block - - patterns - - - name - meta.yaml-block.ansible.condition - comment - - Well-indented block - - begin - (?x) - ^(?=(\s+)) # 1 - - end - (?x) - (?!\G) # otherwise match is found immediately - ^(?!\1\s+) # if the indentation is too small - - patterns - - - include - source.ansible#comment - - - include - #yaml-block-list-item - - - include - #yaml-double-quoted-string - - - include - #yaml-single-quoted-string - - - include - #yaml-unquoted-string-block - - - include - #yaml-unquoted-string - - - - - - yaml-block-list-item - - patterns - - - name - meta.yaml-block-list-item.ansible.condition - comment - - Well-indented list item block - - begin - (?x) - ^(\s*) # 1 - (-)(\s) # 2, 3 - - beginCaptures - - 2 - - name - punctuation.definition.block.sequence.item.ansible - - - end - (?x) - ^(?!\1\3\s+) # if the indentation is too small - - patterns - - - include - source.ansible#comment - - - include - #yaml-double-quoted-string - - - include - #yaml-single-quoted-string - - - include - #yaml-unquoted-string - - - - - - yaml-scalar-block - - patterns - - - name - meta.yaml-scalar-block.ansible.condition - comment - - Well-indented scalar block (for `>` and `|`) - - begin - (?x) - ^(\s*) # 1 - - end - (?x) - ^(?!\1\s+) # if the indentation is too small - - contentName - keyword.operator.ansible meta.embedded.inline.jinja - patterns - - - include - #yaml-unquoted-string - - - - - - yaml-single-quoted-string - - patterns - - - name - string.quoted.single.ansible.meta - begin - (?<=:\s|-\s|^)\s*' - beginCaptures - - 0 - - name - punctuation.definition.string.begin.ansible - - - end - (?x) - ('(?!')) # 1; match the starting quote - (?: (?=\s+\#) | (.*$) ) # 2; unless it is a comment anything trailing here is illegal - - endCaptures - - 1 - - name - punctuation.definition.string.end.ansible - - 2 - - name - invalid.illegal.expected-comment-or-newline.ansible - - - contentName - keyword.operator.ansible meta.embedded.inline.jinja - patterns - - - begin - '' - beginCaptures - - 0 - - name - constant.character.escape.single-quoted.ansible - - - end - '' - endCaptures - - 0 - - name - constant.character.escape.single-quoted.ansible - - - contentName - string.quoted.single.jinja - patterns - - - include - source.ansible-jinja#string - - - - - include - source.ansible-jinja#expression - - - - - - yaml-double-quoted-string - - patterns - - - name - string.quoted.double.ansible.meta - begin - (?<=:\s|-\s|^)\s*" - beginCaptures - - 0 - - name - punctuation.definition.string.begin.ansible - - - end - (?x) - (") # 1; match the starting quote - (?: (?=\s+\#) | (.*$) ) # 2; unless it is a comment anything trailing here is illegal - - endCaptures - - 1 - - name - punctuation.definition.string.end.ansible - - 2 - - name - invalid.illegal.expected-comment-or-newline.ansible - - - contentName - keyword.operator.ansible meta.embedded.inline.jinja - patterns - - - begin - \\" - beginCaptures - - 0 - - name - constant.character.escape.double-quoted.ansible - - - end - \\" - endCaptures - - 0 - - name - constant.character.escape.double-quoted.ansible - - - contentName - string.quoted.double.jinja - patterns - - - include - source.ansible-jinja#string - - - - - include - source.ansible-jinja#expression - - - - - - yaml-unquoted-string - - patterns - - - comment - Capture any non-whitespace and end as fast as possible (when inner pattern ends) - name - string.unquoted.ansible - begin - (?=\S) - end - (?!\G) - contentName - keyword.operator.ansible meta.embedded.inline.jinja - patterns - - - include - source.ansible-jinja#expression - - - - - - yaml-unquoted-string-block - - patterns - - - comment - Capture any non-whitespace at the beginning of a block - name - string.unquoted-block.ansible - begin - (?x) - ^(\s*) # 1 - (?=\S) - end - (?x) - ^(?!\1\s*) # if the indentation is too small - contentName - keyword.operator.ansible meta.embedded.inline.jinja - patterns - - - include - source.ansible-jinja#expression - - - - - - - - \ No newline at end of file diff --git a/syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage b/syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage deleted file mode 100644 index d3fccfe7e..000000000 --- a/syntaxes/ansible/generated/jinja-double-quote-escape.tmLanguage +++ /dev/null @@ -1,56 +0,0 @@ - - - - - scopeName - injection.ansible.jinja-double-quote-escape - injectionSelector - L:string.quoted.double meta.embedded.inline.jinja - name - Injection grammar for supproting double quote escapes in Jinja2 expressions - patterns - - - name - string.quoted.double.jinja - match - (\\")(.*?)(\\") - captures - - 1 - - name - constant.character.escape.double-quoted.ansible - - 2 - - patterns - - - include - source.ansible-jinja#string - - - - 3 - - name - constant.character.escape.double-quoted.ansible - - - - - name - invalid.illegal.expected-escaped-double-quote.ansible - comment - - This technique will remind the user to use quote escaping - - match - (?x) - "(?! \s+ (?=\#|$)) # we accept the quote only if the line ends or ends with a comment - - - - - \ No newline at end of file diff --git a/syntaxes/ansible/generated/jinja-extras.tmLanguage b/syntaxes/ansible/generated/jinja-extras.tmLanguage deleted file mode 100644 index f374fc8b8..000000000 --- a/syntaxes/ansible/generated/jinja-extras.tmLanguage +++ /dev/null @@ -1,63 +0,0 @@ - - - - - scopeName - injection.ansible.jinja-extras - injectionSelector - L:meta.embedded.inline.jinja -string.quoted.double.jinja -string.quoted.single.jinja - name - Grammar for Jinja2 syntax highlighting that is not provided out-of-the-box - patterns - - - include - #literals - - - repository - - literals - - match - (?x) - (none|None) - | (true|True|false|False) - | ( - [-+]? 0b [0-1_]+ # (base 2) - | [-+]? 0x [0-9a-fA-F_]+ # (base 16) - | [-+]? 0 [0-7_]+ # (base 8) - | [-+]? (?: 0|[1-9][0-9_]*) # (base 10) - | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60) - ) - | ( - [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10) - | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60) - ) - captures - - 1 - - name - constant.language.none.ansible - - 2 - - name - constant.language.boolean.ansible - - 3 - - name - constant.numeric.integer.ansible - - 4 - - name - constant.numeric.float.ansible - - - - - - \ No newline at end of file diff --git a/syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage b/syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage deleted file mode 100644 index 5a7187a00..000000000 --- a/syntaxes/ansible/generated/jinja-single-quote-escape.tmLanguage +++ /dev/null @@ -1,56 +0,0 @@ - - - - - scopeName - injection.ansible.jinja-single-quote-escape - injectionSelector - L:string.quoted.single meta.embedded.inline.jinja - name - Injection grammar for supproting single quote escapes in Jinja2 expressions - patterns - - - name - string.quoted.single.jinja - match - ('')(.*?)('') - captures - - 1 - - name - constant.character.escape.single-quoted.ansible - - 2 - - patterns - - - include - source.ansible-jinja#string - - - - 3 - - name - constant.character.escape.single-quoted.ansible - - - - - name - invalid.illegal.expected-escaped-single-quote.ansible - comment - - This technique will remind the user to use quote escaping - - match - (?x) - '(?! \s+ (?=\#|$)) # we accept the quote only if the line ends or ends with a comment - - - - - \ No newline at end of file diff --git a/syntaxes/ansible/generated/keywords.tmLanguage b/syntaxes/ansible/generated/keywords.tmLanguage deleted file mode 100644 index bbfbec0bc..000000000 --- a/syntaxes/ansible/generated/keywords.tmLanguage +++ /dev/null @@ -1,47 +0,0 @@ - - - - - scopeName - injection.ansible.keywords - injectionSelector - L:entity.name.tag.ansible - name - Grammar for detecting Ansible keywords - comment - - Extracted from: - https://docs.ansible.com/ansible/2.10/reference_appendices/playbooks_keywords.html - Added `label`, `pause`, `loop_var`, `extended` as Ansible keywords (occur in loop_control) - - patterns - - - include - #keyword - - - repository - - keyword - - name - keyword.other.ansible - match - (?x) - \b( - action | always | any_errors_fatal | args | async | become | become_exe | become_flags - | become_method | become_user | block | changed_when | check_mode | collections | connection - | debugger | delay | delegate_facts | delegate_to | diff | environment | extended | fact_path | failed_when - | force_handlers | gather_facts | gather_subset | gather_timeout | handlers | hosts - | ignore_errors | ignore_unreachable | label | local_action | loop | loop_control - | max_fail_percentage | module_defaults | name | no_log | notify | order | pause | poll | port - | post_tasks | pre_tasks | register | remote_user | rescue | retries | roles | run_once | serial - | strategy | tags | tasks | throttle | timeout | until | vars | vars_files | vars_prompt | when - | with_[a-z]+ - )\b - - - - - \ No newline at end of file diff --git a/syntaxes/ansible/jinja-braces.tmLanguage.plist b/syntaxes/ansible/jinja-braces.tmLanguage.plist deleted file mode 100644 index 0fb1f963d..000000000 --- a/syntaxes/ansible/jinja-braces.tmLanguage.plist +++ /dev/null @@ -1,30 +0,0 @@ -{ - scopeName = 'injection.ansible.jinja-braces'; - injectionSelector = 'L:string -meta.embedded.inline.jinja'; - name = 'Grammar for Jinja2 expressions surrounded by double curly braces'; - patterns = ( - { include = '#jinja-expression'; } - ); - repository = { - jinja-expression = { - comment = "The 'name' is used to undo highlighting as string"; - name = 'keyword.operator.ansible'; - begin = '\{\{'; - end = '\}\}'; - beginCaptures = { - 0 = { - name = 'constant.character.escape.ansible'; - }; - }; - endCaptures = { - 0 = { - name = 'constant.character.escape.ansible'; - }; - }; - contentName = 'meta.embedded.inline.jinja'; - patterns = ( - { include = 'source.ansible-jinja#expression'; } - ); - }; - }; -} diff --git a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist deleted file mode 100644 index 3800d4bf2..000000000 --- a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist +++ /dev/null @@ -1,382 +0,0 @@ -{ - scopeName = 'injection.ansible.jinja-conditionals'; - name = 'Grammar for Jinja2 expressions in Ansible conditionals'; - patterns = ( - { include = '#ansible-condition'; } - ); - comment = ( - 'Flow style collections are not supported (yet)' - ); - repository = { - ansible-condition = { - patterns = ( - { - name = 'meta.flow-unquoted.ansible.condition'; - begin = '(?x) - ^(\s*) # 1 - (?:(-)(\s+))? # 2, 3; in case it is first key of a list item - \b( # 4 - changed_when - | failed_when - | when - | check_mode - )\b - \s* (:) # 5 - (?=\s) (?!\s*[|>''"]|\s*$|\s*\#.*$) # starting an unquoted flow - '; - beginCaptures = { - 2 = { - name = 'punctuation.definition.block.sequence.item.ansible'; - }; - 4 = { - name = 'keyword.other.special-method.ansible'; - }; - 5 = { - name = 'punctuation.separator.key-value.mapping.ansible'; - }; - }; - end = '(?x) - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - '; - patterns = ( - { include = 'source.ansible#comment'; }, - { include = '#yaml-unquoted-string'; } - ); - }, - { - name = 'meta.flow.ansible.condition'; - begin = '(?x) - ^(\s*) # 1 - (?:(-)(\s+))? # 2, 3; in case it is first key of a list item - \b( # 4 - changed_when - | failed_when - | when - | check_mode - )\b - \s* (:) # 5 - (?=\s) (?!\s*[|>]|\s*$|\s*\#.*$) # not starting a block (scalar or other) - '; - beginCaptures = { - 2 = { - name = 'punctuation.definition.block.sequence.item.ansible'; - }; - 4 = { - name = 'keyword.other.special-method.ansible'; - }; - 5 = { - name = 'punctuation.separator.key-value.mapping.ansible'; - }; - }; - end = '(?x) - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - '; - patterns = ( - { include = 'source.ansible#comment'; }, - { include = '#yaml-double-quoted-string'; }, - { include = '#yaml-single-quoted-string'; }, - { include = '#yaml-unquoted-string'; } - ); - }, - { - name = 'meta.block-scalar.ansible.condition'; - begin = '(?x) - ^(\s*) # 1 - (?:(-)(\s+))? # 2, 3; in case it is first key of a list item - \b( # 4 - changed_when - | failed_when - | when - | check_mode - )\b - \s* (:) # 5 - \s+ (?: (\|) | (>) ) ([1-9])? ([-+])? # 6,7,8,9; starting a scalar block - (.*$) # comment or illegal - '; - beginCaptures = { - 2 = { - name = 'punctuation.definition.block.sequence.item.ansible'; - }; - 4 = { - name = 'keyword.other.special-method.ansible'; - }; - 5 = { - name = 'punctuation.separator.key-value.mapping.ansible'; - }; - 6 = { - name = 'keyword.control.flow.block-scalar.literal.ansible'; - }; - 7 = { - name = 'keyword.control.flow.block-scalar.folded.ansible'; - }; - 8 = { - name = 'constant.numeric.indentation-indicator.ansible'; - }; - 9 = { - name = 'storage.modifier.chomping-indicator.ansible'; - }; - 10 = { - patterns = ( - { - include = 'source.ansible#comment'; - }, - { - match = '.+'; - name = 'invalid.illegal.expected-comment-or-newline.ansible'; - } - ); - }; - }; - end = '(?x) - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - '; - patterns = ( - { include = '#yaml-scalar-block'; }, - ); - }, - { - name = 'meta.block.ansible.condition'; - begin = '(?x) - ^(\s*) # 1 - (?:(-)(\s+))? # 2, 3; in case it is first key of a list item - \b( # 4 - changed_when - | failed_when - | when - | check_mode - )\b - \s* (:) # 5 - (.*$) # comment or illegal - '; - beginCaptures = { - 2 = { - name = 'punctuation.definition.block.sequence.item.ansible'; - }; - 4 = { - name = 'keyword.other.special-method.ansible'; - }; - 5 = { - name = 'punctuation.separator.key-value.mapping.ansible'; - }; - 6 = { - patterns = ( - { - include = 'source.ansible#comment'; - }, - { - match = '.+'; - name = 'invalid.illegal.expected-comment-or-newline.ansible'; - } - ); - }; - }; - end = '(?x) - ^(?!\1\3\3\s+) # if the indentation is too small; HACK: \3 is used twice to match at least 2 spaces if group 2 matches - '; - patterns = ( - { include = '#yaml-block'; }, - ); - } - ); - }; - yaml-block = { - patterns = ( - { - name = 'meta.yaml-block.ansible.condition'; - comment = ( - 'Well-indented block' - ); - begin = '(?x) - ^(?=(\s+)) # 1 - '; - end = '(?x) - (?!\G) # otherwise match is found immediately - ^(?!\1\s+) # if the indentation is too small - '; - patterns = ( - { include = 'source.ansible#comment'; }, - { include = '#yaml-block-list-item'; }, - { include = '#yaml-double-quoted-string'; }, - { include = '#yaml-single-quoted-string'; }, - { include = '#yaml-unquoted-string-block'; }, - { include = '#yaml-unquoted-string'; } - ); - } - ); - }; - yaml-block-list-item = { - patterns = ( - { - name = 'meta.yaml-block-list-item.ansible.condition'; - comment = ( - 'Well-indented list item block' - ); - begin = '(?x) - ^(\s*) # 1 - (-)(\s) # 2, 3 - '; - beginCaptures = { - 2 = { - name = 'punctuation.definition.block.sequence.item.ansible'; - }; - }; - end = '(?x) - ^(?!\1\3\s+) # if the indentation is too small - '; - patterns = ( - { include = 'source.ansible#comment'; }, - { include = '#yaml-double-quoted-string'; }, - { include = '#yaml-single-quoted-string'; }, - { include = '#yaml-unquoted-string'; } - ); - } - ); - }; - yaml-scalar-block = { - patterns = ( - { - name = 'meta.yaml-scalar-block.ansible.condition'; - comment = ( - 'Well-indented scalar block (for `>` and `|`)' - ); - begin = '(?x) - ^(\s*) # 1 - '; - end = '(?x) - ^(?!\1\s+) # if the indentation is too small - '; - contentName = 'keyword.operator.ansible meta.embedded.inline.jinja'; - patterns = ( - { include = '#yaml-unquoted-string'; }, - ); - } - ); - }; - yaml-single-quoted-string = { - patterns = ( - { - name = 'string.quoted.single.ansible.meta'; - begin = '(?<=:\s|-\s|^)\s*'''; - beginCaptures = { - 0 = { - name = 'punctuation.definition.string.begin.ansible'; - }; - }; - end = '(?x) - (''(?!'')) # 1; match the starting quote - (?: (?=\s+\#) | (.*$) ) # 2; unless it is a comment anything trailing here is illegal - '; - endCaptures = { - 1 = { - name = 'punctuation.definition.string.end.ansible'; - }; - 2 = { - name = 'invalid.illegal.expected-comment-or-newline.ansible'; - }; - }; - contentName = 'keyword.operator.ansible meta.embedded.inline.jinja'; - patterns = ( - { - begin = "''"; - beginCaptures = { - 0 = { - name = 'constant.character.escape.single-quoted.ansible'; - }; - }; - end = "''"; - endCaptures = { - 0 = { - name = 'constant.character.escape.single-quoted.ansible'; - }; - }; - contentName = 'string.quoted.single.jinja'; - patterns = ( - { include = 'source.ansible-jinja#string'; } - ); - }, - { include = 'source.ansible-jinja#expression'; }, - ); - } - ); - }; - yaml-double-quoted-string = { - patterns = ( - { - name = 'string.quoted.double.ansible.meta'; - begin = '(?<=:\s|-\s|^)\s*"'; - beginCaptures = { - 0 = { - name = 'punctuation.definition.string.begin.ansible'; - }; - }; - end = '(?x) - (") # 1; match the starting quote - (?: (?=\s+\#) | (.*$) ) # 2; unless it is a comment anything trailing here is illegal - '; - endCaptures = { - 1 = { - name = 'punctuation.definition.string.end.ansible'; - }; - 2 = { - name = 'invalid.illegal.expected-comment-or-newline.ansible'; - }; - }; - contentName = 'keyword.operator.ansible meta.embedded.inline.jinja'; - patterns = ( - { - begin = '\\"'; - beginCaptures = { - 0 = { - name = 'constant.character.escape.double-quoted.ansible'; - }; - }; - end = '\\"'; - endCaptures = { - 0 = { - name = 'constant.character.escape.double-quoted.ansible'; - }; - }; - contentName = 'string.quoted.double.jinja'; - patterns = ( - { include = 'source.ansible-jinja#string'; } - ); - }, - { include = 'source.ansible-jinja#expression'; }, - ); - } - ); - }; - yaml-unquoted-string = { - patterns = ( - { - comment = 'Capture any non-whitespace and end as fast as possible (when inner pattern ends)'; - name = 'string.unquoted.ansible'; - begin = '(?=\S)'; - end = '(?!\G)'; - contentName = 'keyword.operator.ansible meta.embedded.inline.jinja'; - patterns = ( - { include = 'source.ansible-jinja#expression'; }, - ); - } - ); - }; - - yaml-unquoted-string-block = { - patterns = ( - { - comment = 'Capture any non-whitespace at the beginning of a block'; - name = 'string.unquoted-block.ansible'; - begin = '(?x) - ^(\s*) # 1 - (?=\S)'; - end = '(?x) - ^(?!\1\s*) # if the indentation is too small'; - contentName = 'keyword.operator.ansible meta.embedded.inline.jinja'; - patterns = ( - { include = 'source.ansible-jinja#expression'; }, - ); - } - ); - }; - }; -} diff --git a/syntaxes/ansible/jinja-double-quote-escape.tmLanguage.plist b/syntaxes/ansible/jinja-double-quote-escape.tmLanguage.plist deleted file mode 100644 index 70352fb1a..000000000 --- a/syntaxes/ansible/jinja-double-quote-escape.tmLanguage.plist +++ /dev/null @@ -1,33 +0,0 @@ -{ - scopeName = 'injection.ansible.jinja-double-quote-escape'; - injectionSelector = 'L:string.quoted.double meta.embedded.inline.jinja'; - name = 'Injection grammar for supproting double quote escapes in Jinja2 expressions'; - patterns = ( - { - name = 'string.quoted.double.jinja'; - match = '(\\")(.*?)(\\")'; - captures = { - 1 = { - name = 'constant.character.escape.double-quoted.ansible'; - }; - 2 = { - patterns = ( - { include = 'source.ansible-jinja#string'; } - ); - }; - 3 = { - name = 'constant.character.escape.double-quoted.ansible'; - }; - }; - }, - { - name = 'invalid.illegal.expected-escaped-double-quote.ansible'; - comment = ( - 'This technique will remind the user to use quote escaping' - ); - match = '(?x) - "(?! \s+ (?=\#|$)) # we accept the quote only if the line ends or ends with a comment - '; - } - ); -} \ No newline at end of file diff --git a/syntaxes/ansible/jinja-extras.tmLanguage.plist b/syntaxes/ansible/jinja-extras.tmLanguage.plist deleted file mode 100644 index ed6aaebca..000000000 --- a/syntaxes/ansible/jinja-extras.tmLanguage.plist +++ /dev/null @@ -1,40 +0,0 @@ -{ - scopeName = 'injection.ansible.jinja-extras'; - injectionSelector = 'L:meta.embedded.inline.jinja -string.quoted.double.jinja -string.quoted.single.jinja'; - name = 'Grammar for Jinja2 syntax highlighting that is not provided out-of-the-box'; - patterns = ( - { include = '#literals'; } - ); - repository = { - literals = { - match = '(?x) - (none|None) - | (true|True|false|False) - | ( - [-+]? 0b [0-1_]+ # (base 2) - | [-+]? 0x [0-9a-fA-F_]+ # (base 16) - | [-+]? 0 [0-7_]+ # (base 8) - | [-+]? (?: 0|[1-9][0-9_]*) # (base 10) - | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60) - ) - | ( - [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10) - | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60) - )'; - captures = { - 1 = { - name = 'constant.language.none.ansible'; - }; - 2 = { - name = 'constant.language.boolean.ansible'; - }; - 3 = { - name = 'constant.numeric.integer.ansible'; - }; - 4 = { - name = 'constant.numeric.float.ansible'; - }; - }; - }; - }; -} diff --git a/syntaxes/ansible/jinja-single-quote-escape.tmLanguage.plist b/syntaxes/ansible/jinja-single-quote-escape.tmLanguage.plist deleted file mode 100644 index a3781459e..000000000 --- a/syntaxes/ansible/jinja-single-quote-escape.tmLanguage.plist +++ /dev/null @@ -1,33 +0,0 @@ -{ - scopeName = 'injection.ansible.jinja-single-quote-escape'; - injectionSelector = 'L:string.quoted.single meta.embedded.inline.jinja'; - name = 'Injection grammar for supproting single quote escapes in Jinja2 expressions'; - patterns = ( - { - name = 'string.quoted.single.jinja'; - match = "('')(.*?)('')"; - captures = { - 1 = { - name = 'constant.character.escape.single-quoted.ansible'; - }; - 2 = { - patterns = ( - { include = 'source.ansible-jinja#string'; } - ); - }; - 3 = { - name = 'constant.character.escape.single-quoted.ansible'; - }; - }; - }, - { - name = 'invalid.illegal.expected-escaped-single-quote.ansible'; - comment = ( - 'This technique will remind the user to use quote escaping' - ); - match = '(?x) - ''(?! \s+ (?=\#|$)) # we accept the quote only if the line ends or ends with a comment - '; - } - ); -} \ No newline at end of file diff --git a/syntaxes/ansible/keywords.tmLanguage.plist b/syntaxes/ansible/keywords.tmLanguage.plist deleted file mode 100644 index 968a638c6..000000000 --- a/syntaxes/ansible/keywords.tmLanguage.plist +++ /dev/null @@ -1,31 +0,0 @@ -{ - scopeName = 'injection.ansible.keywords'; - injectionSelector = 'L:entity.name.tag.ansible'; - name = 'Grammar for detecting Ansible keywords'; - comment = ( - 'Extracted from:', - 'https://docs.ansible.com/ansible/2.10/reference_appendices/playbooks_keywords.html', - 'Added `label`, `pause`, `loop_var`, `extended` as Ansible keywords (occur in loop_control)' - ); - patterns = ( - { include = '#keyword'; } - ); - repository = { - keyword = { - name = 'keyword.other.ansible'; - match = '(?x) - \b( - action | always | any_errors_fatal | args | async | become | become_exe | become_flags - | become_method | become_user | block | changed_when | check_mode | collections | connection - | debugger | delay | delegate_facts | delegate_to | diff | environment | extended | fact_path | failed_when - | force_handlers | gather_facts | gather_subset | gather_timeout | handlers | hosts - | ignore_errors | ignore_unreachable | label | local_action | loop | loop_control - | max_fail_percentage | module_defaults | name | no_log | notify | order | pause | poll | port - | post_tasks | pre_tasks | register | remote_user | rescue | retries | roles | run_once | serial - | strategy | tags | tasks | throttle | timeout | until | vars | vars_files | vars_prompt | when - | with_[a-z]+ - )\b - '; - }; - }; -} diff --git a/syntaxes/external/YAML.tmLanguage b/syntaxes/external/YAML.tmLanguage deleted file mode 100644 index df8b49cb4..000000000 --- a/syntaxes/external/YAML.tmLanguage +++ /dev/null @@ -1,1151 +0,0 @@ - - - - - comment - - Imported from: - https://github.com/textmate/yaml.tmbundle/blob/e54ceae3b719506dba7e481a77cea4a8b576ae46/Syntaxes/YAML.tmLanguage - Applied fix for entity.name.tag, which was split on the first letter - Replaced all `.yaml` scopes with `.ansible` to avoid replacing syntax for regular YAML files. - Injected `jinja-conditionals` - - fileTypes - - yaml - yml - rviz - reek - clang-format - yaml-tmlanguage - syntax - sublime-syntax - - firstLineMatch - ^%YAML( ?1.\d+)? - keyEquivalent - ^~Y - name - YAML - patterns - - - include - injection.ansible.jinja-conditionals - - - include - #comment - - - include - #property - - - include - #directive - - - match - ^--- - name - entity.other.document.begin.ansible - - - match - ^\.{3} - name - entity.other.document.end.ansible - - - include - #node - - - repository - - block-collection - - patterns - - - include - #block-sequence - - - include - #block-mapping - - - - block-mapping - - patterns - - - include - #block-pair - - - - block-node - - patterns - - - include - #prototype - - - include - #block-scalar - - - include - #block-collection - - - include - #flow-scalar-plain-out - - - include - #flow-node - - - - block-pair - - patterns - - - begin - \? - beginCaptures - - 1 - - name - punctuation.definition.key-value.begin.ansible - - - end - (?=\?)|^ *(:)|(:) - endCaptures - - 1 - - name - punctuation.separator.key-value.mapping.ansible - - 2 - - name - invalid.illegal.expected-newline.ansible - - - name - meta.block-mapping.ansible - patterns - - - include - #block-node - - - - - begin - (?x) (?= - (?x: - [^\s[-?:,\[\]{}#&*!|>'"%@`]] - | [?:-] \S - ) - ( - [^\s:] - | : \S - | \s+ (?![#\s]) - )* - \s* - : - (\s|$) - ) - - end - (?x) (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - ) - - patterns - - - include - #flow-scalar-plain-out-implicit-type - - - begin - (?x) (?= - [^\s[-?:,\[\]{}#&*!|>'"%@`]] - | [?:-] \S - ) - - contentName - entity.name.tag.ansible - end - (?x) (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - ) - - name - string.unquoted.plain.out.ansible - - - - - match - :(?=\s|$) - name - punctuation.separator.key-value.mapping.ansible - - - - block-scalar - - begin - (?:(\|)|(>))([1-9])?([-+])?(.*\n?) - beginCaptures - - 1 - - name - keyword.control.flow.block-scalar.literal.ansible - - 2 - - name - keyword.control.flow.block-scalar.folded.ansible - - 3 - - name - constant.numeric.indentation-indicator.ansible - - 4 - - name - storage.modifier.chomping-indicator.ansible - - 5 - - patterns - - - include - #comment - - - match - .+ - name - invalid.illegal.expected-comment-or-newline.ansible - - - - - end - ^(?=\S)|(?!\G) - patterns - - - begin - ^([ ]+)(?! ) - end - ^(?!\1|\s*$) - name - string.unquoted.block.ansible - - - - block-sequence - - match - (-)(?!\S) - name - punctuation.definition.block.sequence.item.ansible - - comment - - begin - (?:(^[ \t]*)|[ \t]+)(?=#\p{Print}*$) - beginCaptures - - 1 - - name - punctuation.whitespace.comment.leading.ansible - - - end - (?!\G) - patterns - - - begin - # - beginCaptures - - 0 - - name - punctuation.definition.comment.ansible - - - end - \n - name - comment.line.number-sign.ansible - - - - directive - - begin - ^% - beginCaptures - - 0 - - name - punctuation.definition.directive.begin.ansible - - - end - (?=$|[ \t]+($|#)) - name - meta.directive.ansible - patterns - - - captures - - 1 - - name - keyword.other.directive.yaml.ansible - - 2 - - name - constant.numeric.yaml-version.ansible - - - match - \G(YAML)[ \t]+(\d+\.\d+) - - - captures - - 1 - - name - keyword.other.directive.tag.ansible - - 2 - - name - storage.type.tag-handle.ansible - - 3 - - name - support.type.tag-prefix.ansible - - - match - (?x) - \G - (TAG) - (?:[ \t]+ - ((?:!(?:[0-9A-Za-z\-]*!)?)) - (?:[ \t]+ ( - ! (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$,_.!~*'()\[\]] )* - | (?![,!\[\]{}]) (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$,_.!~*'()\[\]] )+ - ) - )? - )? - - - - captures - - 1 - - name - support.other.directive.reserved.ansible - - 2 - - name - string.unquoted.directive-name.ansible - - 3 - - name - string.unquoted.directive-parameter.ansible - - - match - (?x) \G (\w+) (?:[ \t]+ (\w+) (?:[ \t]+ (\w+))? )? - - - match - \S+ - name - invalid.illegal.unrecognized.ansible - - - - flow-alias - - captures - - 1 - - name - keyword.control.flow.alias.ansible - - 2 - - name - punctuation.definition.alias.ansible - - 3 - - name - variable.other.alias.ansible - - 4 - - name - invalid.illegal.character.anchor.ansible - - - match - ((\*))([^\s\[\]/{/},]+)([^\s\]},]\S*)? - - flow-collection - - patterns - - - include - #flow-sequence - - - include - #flow-mapping - - - - flow-mapping - - begin - \{ - beginCaptures - - 0 - - name - punctuation.definition.mapping.begin.ansible - - - end - \} - endCaptures - - 0 - - name - punctuation.definition.mapping.end.ansible - - - name - meta.flow-mapping.ansible - patterns - - - include - #prototype - - - match - , - name - punctuation.separator.mapping.ansible - - - include - #flow-pair - - - - flow-node - - patterns - - - include - #prototype - - - include - #flow-alias - - - include - #flow-collection - - - include - #flow-scalar - - - - flow-pair - - patterns - - - begin - \? - beginCaptures - - 0 - - name - punctuation.definition.key-value.begin.ansible - - - end - (?=[},\]]) - name - meta.flow-pair.explicit.ansible - patterns - - - include - #prototype - - - include - #flow-pair - - - include - #flow-node - - - begin - :(?=\s|$|[\[\]{},]) - beginCaptures - - 0 - - name - punctuation.separator.key-value.mapping.ansible - - - end - (?=[},\]]) - patterns - - - include - #flow-value - - - - - - - begin - (?x) (?= - (?: - [^\s[-?:,\[\]{}#&*!|>'"%@`]] - | [?:-] [^\s[\[\]{},]] - ) - ( - [^\s:[\[\]{},]] - | : [^\s[\[\]{},]] - | \s+ (?![#\s]) - )* - \s* - : - (\s|$) - ) - - end - (?x) (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - | \s* : [\[\]{},] - | \s* [\[\]{},] - ) - - name - meta.flow-pair.key.ansible - patterns - - - include - #flow-scalar-plain-in-implicit-type - - - begin - (?x) (?= - [^\s[-?:,\[\]{}#&*!|>'"%@`]] - | [?:-] [^\s[\[\]{},]] - ) - - contentName - entity.name.tag.ansible - end - (?x) (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - | \s* : [\[\]{},] - | \s* [\[\]{},] - ) - - name - string.unquoted.plain.in.ansible - - - - - include - #flow-node - - - begin - :(?=\s|$|[\[\]{},]) - captures - - 0 - - name - punctuation.separator.key-value.mapping.ansible - - - end - (?=[},\]]) - name - meta.flow-pair.ansible - patterns - - - include - #flow-value - - - - - - flow-scalar - - patterns - - - include - #flow-scalar-double-quoted - - - include - #flow-scalar-single-quoted - - - include - #flow-scalar-plain-in - - - - flow-scalar-double-quoted - - begin - " - beginCaptures - - 0 - - name - punctuation.definition.string.begin.ansible - - - end - " - endCaptures - - 0 - - name - punctuation.definition.string.end.ansible - - - name - string.quoted.double.ansible - patterns - - - match - \\([0abtnvfre "/\\N_Lp]|x\d\d|u\d{4}|U\d{8}) - name - constant.character.escape.ansible - - - match - \\\n - name - constant.character.escape.double-quoted.newline.ansible - - - - flow-scalar-plain-in - - patterns - - - include - #flow-scalar-plain-in-implicit-type - - - begin - (?x) - [^\s[-?:,\[\]{}#&*!|>'"%@`]] - | [?:-] [^\s[\[\]{},]] - - end - (?x) (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - | \s* : [\[\]{},] - | \s* [\[\]{},] - ) - - name - string.unquoted.plain.in.ansible - - - - flow-scalar-plain-in-implicit-type - - patterns - - - captures - - 1 - - name - constant.language.null.ansible - - 2 - - name - constant.language.boolean.ansible - - 3 - - name - constant.numeric.integer.ansible - - 4 - - name - constant.numeric.float.ansible - - 5 - - name - constant.other.timestamp.ansible - - 6 - - name - constant.language.value.ansible - - 7 - - name - constant.language.merge.ansible - - - match - (?x) - (?x: - (null|Null|NULL|~) - | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF) - | ( - (?: - [-+]? 0b [0-1_]+ # (base 2) - | [-+]? 0 [0-7_]+ # (base 8) - | [-+]? (?: 0|[1-9][0-9_]*) # (base 10) - | [-+]? 0x [0-9a-fA-F_]+ # (base 16) - | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60) - ) - ) - | ( - (?x: - [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10) - | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60) - | [-+]? \. (?: inf|Inf|INF) # (infinity) - | \. (?: nan|NaN|NAN) # (not a number) - ) - ) - | ( - (?x: - \d{4} - \d{2} - \d{2} # (y-m-d) - | \d{4} # (year) - - \d{1,2} # (month) - - \d{1,2} # (day) - (?: [Tt] | [ \t]+) \d{1,2} # (hour) - : \d{2} # (minute) - : \d{2} # (second) - (?: \.\d*)? # (fraction) - (?: - (?:[ \t]*) Z - | [-+] \d{1,2} (?: :\d{1,2})? - )? # (time zone) - ) - ) - | (=) - | (<<) - ) - (?: (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - | \s* : [\[\]{},] - | \s* [\[\]{},] - ) - ) - - - - - flow-scalar-plain-out - - patterns - - - include - #flow-scalar-plain-out-implicit-type - - - begin - (?x) - [^\s[-?:,\[\]{}#&*!|>'"%@`]] - | [?:-] \S - - end - (?x) (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - ) - - name - string.unquoted.plain.out.ansible - - - - flow-scalar-plain-out-implicit-type - - patterns - - - captures - - 1 - - name - constant.language.null.ansible - - 2 - - name - constant.language.boolean.ansible - - 3 - - name - constant.numeric.integer.ansible - - 4 - - name - constant.numeric.float.ansible - - 5 - - name - constant.other.timestamp.ansible - - 6 - - name - constant.language.value.ansible - - 7 - - name - constant.language.merge.ansible - - - match - (?x) - (?x: - (null|Null|NULL|~) - | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF) - | ( - (?: - [-+]? 0b [0-1_]+ # (base 2) - | [-+]? 0 [0-7_]+ # (base 8) - | [-+]? (?: 0|[1-9][0-9_]*) # (base 10) - | [-+]? 0x [0-9a-fA-F_]+ # (base 16) - | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60) - ) - ) - | ( - (?x: - [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10) - | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60) - | [-+]? \. (?: inf|Inf|INF) # (infinity) - | \. (?: nan|NaN|NAN) # (not a number) - ) - ) - | ( - (?x: - \d{4} - \d{2} - \d{2} # (y-m-d) - | \d{4} # (year) - - \d{1,2} # (month) - - \d{1,2} # (day) - (?: [Tt] | [ \t]+) \d{1,2} # (hour) - : \d{2} # (minute) - : \d{2} # (second) - (?: \.\d*)? # (fraction) - (?: - (?:[ \t]*) Z - | [-+] \d{1,2} (?: :\d{1,2})? - )? # (time zone) - ) - ) - | (=) - | (<<) - ) - (?x: (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - ) - ) - - - - - flow-scalar-single-quoted - - begin - ' - beginCaptures - - 0 - - name - punctuation.definition.string.begin.ansible - - - end - '(?!') - endCaptures - - 0 - - name - punctuation.definition.string.end.ansible - - - name - string.quoted.single.ansible - patterns - - - match - '' - name - constant.character.escape.single-quoted.ansible - - - - flow-sequence - - begin - \[ - beginCaptures - - 0 - - name - punctuation.definition.sequence.begin.ansible - - - end - \] - endCaptures - - 0 - - name - punctuation.definition.sequence.end.ansible - - - name - meta.flow-sequence.ansible - patterns - - - include - #prototype - - - match - , - name - punctuation.separator.sequence.ansible - - - include - #flow-pair - - - include - #flow-node - - - - flow-value - - patterns - - - begin - \G(?![},\]]) - end - (?=[},\]]) - name - meta.flow-pair.value.ansible - patterns - - - include - #flow-node - - - - - - node - - patterns - - - include - #block-node - - - - property - - begin - (?=!|&) - end - (?!\G) - name - meta.property.ansible - patterns - - - captures - - 1 - - name - keyword.control.property.anchor.ansible - - 2 - - name - punctuation.definition.anchor.ansible - - 3 - - name - entity.name.type.anchor.ansible - - 4 - - name - invalid.illegal.character.anchor.ansible - - - match - \G((&))([^\s\[\]/{/},]+)(\S+)? - - - match - (?x) - \G - (?: - ! < (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$,_.!~*'()\[\]] )+ > - | (?:!(?:[0-9A-Za-z\-]*!)?) (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$_.~*'()] )+ - | ! - ) (?=\ |\t|$) - - name - storage.type.tag-handle.ansible - - - match - \S+ - name - invalid.illegal.tag-handle.ansible - - - - prototype - - patterns - - - include - #comment - - - include - #property - - - - - scopeName - source.ansible - uuid - 686AD6AE-33F3-4493-9512-9E9FC1D5417F - - \ No newline at end of file diff --git a/syntaxes/external/YAML.tmLanguage.plist b/syntaxes/external/YAML.tmLanguage.plist deleted file mode 100644 index dd4a29d57..000000000 --- a/syntaxes/external/YAML.tmLanguage.plist +++ /dev/null @@ -1,818 +0,0 @@ -{ - comment = ( - 'Imported from:', - 'https://github.com/textmate/yaml.tmbundle/blob/e54ceae3b719506dba7e481a77cea4a8b576ae46/Syntaxes/YAML.tmLanguage', - 'Applied fix for entity.name.tag, which was split on the first letter', - 'Replaced all `.yaml` scopes with `.ansible` to avoid replacing syntax for regular YAML files.', - 'Injected `jinja-conditionals`' - ); - fileTypes = ( - yaml, - yml, - rviz, - reek, - clang-format, - yaml-tmlanguage, - syntax, - sublime-syntax - ); - firstLineMatch = '^%YAML( ?1.\d+)?'; - keyEquivalent = '^~Y'; - name = YAML; - patterns = ( - { - include = 'injection.ansible.jinja-conditionals'; - }, - { - include = '#comment'; - }, - { - include = '#property'; - }, - { - include = '#directive'; - }, - { - match = '^---'; - name = 'entity.other.document.begin.ansible'; - }, - { - match = '^\.{3}'; - name = 'entity.other.document.end.ansible'; - }, - { - include = '#node'; - } - ); - repository = { - block-collection = { - patterns = ( - { - include = '#block-sequence'; - }, - { - include = '#block-mapping'; - } - ); - }; - block-mapping = { - patterns = ( - { - include = '#block-pair'; - } - ); - }; - block-node = { - patterns = ( - { - include = '#prototype'; - }, - { - include = '#block-scalar'; - }, - { - include = '#block-collection'; - }, - { - include = '#flow-scalar-plain-out'; - }, - { - include = '#flow-node'; - } - ); - }; - block-pair = { - patterns = ( - { - begin = '\?'; - beginCaptures = { - 1 = { - name = 'punctuation.definition.key-value.begin.ansible'; - }; - }; - end = '(?=\?)|^ *(:)|(:)'; - endCaptures = { - 1 = { - name = 'punctuation.separator.key-value.mapping.ansible'; - }; - 2 = { - name = 'invalid.illegal.expected-newline.ansible'; - }; - }; - name = 'meta.block-mapping.ansible'; - patterns = ( - { - include = '#block-node'; - } - ); - }, - { - begin = '(?x) (?= - (?x: - [^\s[-?:,\[\]{}#&*!|>''"%@`]] - | [?:-] \S - ) - ( - [^\s:] - | : \S - | \s+ (?![#\s]) - )* - \s* - : - (\s|$) - ) - '; - end = '(?x) (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - ) - '; - patterns = ( - { - include = '#flow-scalar-plain-out-implicit-type'; - }, - { - begin = '(?x) (?= - [^\s[-?:,\[\]{}#&*!|>''"%@`]] - | [?:-] \S - ) - '; - contentName = 'entity.name.tag.ansible'; - end = '(?x) (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - ) - '; - name = 'string.unquoted.plain.out.ansible'; - } - ); - }, - { - match = ':(?=\s|$)'; - name = 'punctuation.separator.key-value.mapping.ansible'; - } - ); - }; - block-scalar = { - begin = '(?:(\|)|(>))([1-9])?([-+])?(.*\n?)'; - beginCaptures = { - 1 = { - name = 'keyword.control.flow.block-scalar.literal.ansible'; - }; - 2 = { - name = 'keyword.control.flow.block-scalar.folded.ansible'; - }; - 3 = { - name = 'constant.numeric.indentation-indicator.ansible'; - }; - 4 = { - name = 'storage.modifier.chomping-indicator.ansible'; - }; - 5 = { - patterns = ( - { - include = '#comment'; - }, - { - match = '.+'; - name = 'invalid.illegal.expected-comment-or-newline.ansible'; - } - ); - }; - }; - end = '^(?=\S)|(?!\G)'; - patterns = ( - { - begin = '^([ ]+)(?! )'; - end = '^(?!\1|\s*$)'; - name = 'string.unquoted.block.ansible'; - } - ); - }; - block-sequence = { - match = '(-)(?!\S)'; - name = 'punctuation.definition.block.sequence.item.ansible'; - }; - comment = { - begin = '(?:(^[ \t]*)|[ \t]+)(?=#\p{Print}*$)'; - beginCaptures = { - 1 = { - name = 'punctuation.whitespace.comment.leading.ansible'; - }; - }; - end = '(?!\G)'; - patterns = ( - { - begin = '#'; - beginCaptures = { - 0 = { - name = 'punctuation.definition.comment.ansible'; - }; - }; - end = '\n'; - name = 'comment.line.number-sign.ansible'; - } - ); - }; - directive = { - begin = '^%'; - beginCaptures = { - 0 = { - name = 'punctuation.definition.directive.begin.ansible'; - }; - }; - end = '(?=$|[ \t]+($|#))'; - name = 'meta.directive.ansible'; - patterns = ( - { - captures = { - 1 = { - name = 'keyword.other.directive.yaml.ansible'; - }; - 2 = { - name = 'constant.numeric.yaml-version.ansible'; - }; - }; - match = '\G(YAML)[ \t]+(\d+\.\d+)'; - }, - { - captures = { - 1 = { - name = 'keyword.other.directive.tag.ansible'; - }; - 2 = { - name = 'storage.type.tag-handle.ansible'; - }; - 3 = { - name = 'support.type.tag-prefix.ansible'; - }; - }; - match = '(?x) - \G - (TAG) - (?:[ \t]+ - ((?:!(?:[0-9A-Za-z\-]*!)?)) - (?:[ \t]+ ( - ! (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$,_.!~*''()\[\]] )* - | (?![,!\[\]{}]) (?x: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$,_.!~*''()\[\]] )+ - ) - )? - )? - '; - }, - { - captures = { - 1 = { - name = 'support.other.directive.reserved.ansible'; - }; - 2 = { - name = 'string.unquoted.directive-name.ansible'; - }; - 3 = { - name = 'string.unquoted.directive-parameter.ansible'; - }; - }; - match = '(?x) \G (\w+) (?:[ \t]+ (\w+) (?:[ \t]+ (\w+))? )?'; - }, - { - match = '\S+'; - name = 'invalid.illegal.unrecognized.ansible'; - } - ); - }; - flow-alias = { - captures = { - 1 = { - name = 'keyword.control.flow.alias.ansible'; - }; - 2 = { - name = 'punctuation.definition.alias.ansible'; - }; - 3 = { - name = 'variable.other.alias.ansible'; - }; - 4 = { - name = 'invalid.illegal.character.anchor.ansible'; - }; - }; - match = '((\*))([^\s\[\]/{/},]+)([^\s\]},]\S*)?'; - }; - flow-collection = { - patterns = ( - { - include = '#flow-sequence'; - }, - { - include = '#flow-mapping'; - } - ); - }; - flow-mapping = { - begin = '\{'; - beginCaptures = { - 0 = { - name = 'punctuation.definition.mapping.begin.ansible'; - }; - }; - end = '\}'; - endCaptures = { - 0 = { - name = 'punctuation.definition.mapping.end.ansible'; - }; - }; - name = 'meta.flow-mapping.ansible'; - patterns = ( - { - include = '#prototype'; - }, - { - match = ','; - name = 'punctuation.separator.mapping.ansible'; - }, - { - include = '#flow-pair'; - } - ); - }; - flow-node = { - patterns = ( - { - include = '#prototype'; - }, - { - include = '#flow-alias'; - }, - { - include = '#flow-collection'; - }, - { - include = '#flow-scalar'; - } - ); - }; - flow-pair = { - patterns = ( - { - begin = '\?'; - beginCaptures = { - 0 = { - name = 'punctuation.definition.key-value.begin.ansible'; - }; - }; - end = '(?=[},\]])'; - name = 'meta.flow-pair.explicit.ansible'; - patterns = ( - { - include = '#prototype'; - }, - { - include = '#flow-pair'; - }, - { - include = '#flow-node'; - }, - { - begin = ':(?=\s|$|[\[\]{},])'; - beginCaptures = { - 0 = { - name = 'punctuation.separator.key-value.mapping.ansible'; - }; - }; - end = '(?=[},\]])'; - patterns = ( - { - include = '#flow-value'; - } - ); - } - ); - }, - { - begin = '(?x) (?= - (?: - [^\s[-?:,\[\]{}#&*!|>''"%@`]] - | [?:-] [^\s[\[\]{},]] - ) - ( - [^\s:[\[\]{},]] - | : [^\s[\[\]{},]] - | \s+ (?![#\s]) - )* - \s* - : - (\s|$) - ) - '; - end = '(?x) (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - | \s* : [\[\]{},] - | \s* [\[\]{},] - ) - '; - name = 'meta.flow-pair.key.ansible'; - patterns = ( - { - include = '#flow-scalar-plain-in-implicit-type'; - }, - { - begin = '(?x) (?= - [^\s[-?:,\[\]{}#&*!|>''"%@`]] - | [?:-] [^\s[\[\]{},]] - ) - '; - contentName = 'entity.name.tag.ansible'; - end = '(?x) (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - | \s* : [\[\]{},] - | \s* [\[\]{},] - ) - '; - name = 'string.unquoted.plain.in.ansible'; - } - ); - }, - { - include = '#flow-node'; - }, - { - begin = ':(?=\s|$|[\[\]{},])'; - captures = { - 0 = { - name = 'punctuation.separator.key-value.mapping.ansible'; - }; - }; - end = '(?=[},\]])'; - name = 'meta.flow-pair.ansible'; - patterns = ( - { - include = '#flow-value'; - } - ); - } - ); - }; - flow-scalar = { - patterns = ( - { - include = '#flow-scalar-double-quoted'; - }, - { - include = '#flow-scalar-single-quoted'; - }, - { - include = '#flow-scalar-plain-in'; - } - ); - }; - flow-scalar-double-quoted = { - begin = '"'; - beginCaptures = { - 0 = { - name = 'punctuation.definition.string.begin.ansible'; - }; - }; - end = '"'; - endCaptures = { - 0 = { - name = 'punctuation.definition.string.end.ansible'; - }; - }; - name = 'string.quoted.double.ansible'; - patterns = ( - { - match = '\\([0abtnvfre "/\\N_Lp]|x\d\d|u\d{4}|U\d{8})'; - name = 'constant.character.escape.ansible'; - }, - { - match = '\\\n'; - name = 'constant.character.escape.double-quoted.newline.ansible'; - } - ); - }; - flow-scalar-plain-in = { - patterns = ( - { - include = '#flow-scalar-plain-in-implicit-type'; - }, - { - begin = '(?x) - [^\s[-?:,\[\]{}#&*!|>''"%@`]] - | [?:-] [^\s[\[\]{},]] - '; - end = '(?x) (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - | \s* : [\[\]{},] - | \s* [\[\]{},] - ) - '; - name = 'string.unquoted.plain.in.ansible'; - } - ); - }; - flow-scalar-plain-in-implicit-type = { - patterns = ( - { - captures = { - 1 = { - name = 'constant.language.null.ansible'; - }; - 2 = { - name = 'constant.language.boolean.ansible'; - }; - 3 = { - name = 'constant.numeric.integer.ansible'; - }; - 4 = { - name = 'constant.numeric.float.ansible'; - }; - 5 = { - name = 'constant.other.timestamp.ansible'; - }; - 6 = { - name = 'constant.language.value.ansible'; - }; - 7 = { - name = 'constant.language.merge.ansible'; - }; - }; - match = '(?x) - (?x: - (null|Null|NULL|~) - | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF) - | ( - (?: - [-+]? 0b [0-1_]+ # (base 2) - | [-+]? 0 [0-7_]+ # (base 8) - | [-+]? (?: 0|[1-9][0-9_]*) # (base 10) - | [-+]? 0x [0-9a-fA-F_]+ # (base 16) - | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60) - ) - ) - | ( - (?x: - [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10) - | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60) - | [-+]? \. (?: inf|Inf|INF) # (infinity) - | \. (?: nan|NaN|NAN) # (not a number) - ) - ) - | ( - (?x: - \d{4} - \d{2} - \d{2} # (y-m-d) - | \d{4} # (year) - - \d{1,2} # (month) - - \d{1,2} # (day) - (?: [Tt] | [ \t]+) \d{1,2} # (hour) - : \d{2} # (minute) - : \d{2} # (second) - (?: \.\d*)? # (fraction) - (?: - (?:[ \t]*) Z - | [-+] \d{1,2} (?: :\d{1,2})? - )? # (time zone) - ) - ) - | (=) - | (<<) - ) - (?: (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - | \s* : [\[\]{},] - | \s* [\[\]{},] - ) - ) - '; - } - ); - }; - flow-scalar-plain-out = { - patterns = ( - { - include = '#flow-scalar-plain-out-implicit-type'; - }, - { - begin = '(?x) - [^\s[-?:,\[\]{}#&*!|>''"%@`]] - | [?:-] \S - '; - end = '(?x) (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - ) - '; - name = 'string.unquoted.plain.out.ansible'; - } - ); - }; - flow-scalar-plain-out-implicit-type = { - patterns = ( - { - captures = { - 1 = { - name = 'constant.language.null.ansible'; - }; - 2 = { - name = 'constant.language.boolean.ansible'; - }; - 3 = { - name = 'constant.numeric.integer.ansible'; - }; - 4 = { - name = 'constant.numeric.float.ansible'; - }; - 5 = { - name = 'constant.other.timestamp.ansible'; - }; - 6 = { - name = 'constant.language.value.ansible'; - }; - 7 = { - name = 'constant.language.merge.ansible'; - }; - }; - match = '(?x) - (?x: - (null|Null|NULL|~) - | (y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF) - | ( - (?: - [-+]? 0b [0-1_]+ # (base 2) - | [-+]? 0 [0-7_]+ # (base 8) - | [-+]? (?: 0|[1-9][0-9_]*) # (base 10) - | [-+]? 0x [0-9a-fA-F_]+ # (base 16) - | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60) - ) - ) - | ( - (?x: - [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10) - | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60) - | [-+]? \. (?: inf|Inf|INF) # (infinity) - | \. (?: nan|NaN|NAN) # (not a number) - ) - ) - | ( - (?x: - \d{4} - \d{2} - \d{2} # (y-m-d) - | \d{4} # (year) - - \d{1,2} # (month) - - \d{1,2} # (day) - (?: [Tt] | [ \t]+) \d{1,2} # (hour) - : \d{2} # (minute) - : \d{2} # (second) - (?: \.\d*)? # (fraction) - (?: - (?:[ \t]*) Z - | [-+] \d{1,2} (?: :\d{1,2})? - )? # (time zone) - ) - ) - | (=) - | (<<) - ) - (?x: (?= - \s* $ - | \s+ \# - | \s* : (\s|$) - ) - ) - '; - } - ); - }; - flow-scalar-single-quoted = { - begin = ''''; - beginCaptures = { - 0 = { - name = 'punctuation.definition.string.begin.ansible'; - }; - }; - end = '''(?!'')'; - endCaptures = { - 0 = { - name = 'punctuation.definition.string.end.ansible'; - }; - }; - name = 'string.quoted.single.ansible'; - patterns = ( - { - match = ''''''; - name = 'constant.character.escape.single-quoted.ansible'; - } - ); - }; - flow-sequence = { - begin = '\['; - beginCaptures = { - 0 = { - name = 'punctuation.definition.sequence.begin.ansible'; - }; - }; - end = '\]'; - endCaptures = { - 0 = { - name = 'punctuation.definition.sequence.end.ansible'; - }; - }; - name = 'meta.flow-sequence.ansible'; - patterns = ( - { - include = '#prototype'; - }, - { - match = ','; - name = 'punctuation.separator.sequence.ansible'; - }, - { - include = '#flow-pair'; - }, - { - include = '#flow-node'; - } - ); - }; - flow-value = { - patterns = ( - { - begin = '\G(?![},\]])'; - end = '(?=[},\]])'; - name = 'meta.flow-pair.value.ansible'; - patterns = ( - { - include = '#flow-node'; - } - ); - } - ); - }; - node = { - patterns = ( - { - include = '#block-node'; - } - ); - }; - property = { - begin = '(?=!|&)'; - end = '(?!\G)'; - name = 'meta.property.ansible'; - patterns = ( - { - captures = { - 1 = { - name = 'keyword.control.property.anchor.ansible'; - }; - 2 = { - name = 'punctuation.definition.anchor.ansible'; - }; - 3 = { - name = 'entity.name.type.anchor.ansible'; - }; - 4 = { - name = 'invalid.illegal.character.anchor.ansible'; - }; - }; - match = '\G((&))([^\s\[\]/{/},]+)(\S+)?'; - }, - { - match = '(?x) - \G - (?: - ! < (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$,_.!~*''()\[\]] )+ > - | (?:!(?:[0-9A-Za-z\-]*!)?) (?: %[0-9A-Fa-f]{2} | [0-9A-Za-z\-#;/?:@&=+$_.~*''()] )+ - | ! - ) (?=\ |\t|$) - '; - name = 'storage.type.tag-handle.ansible'; - }, - { - match = '\S+'; - name = 'invalid.illegal.tag-handle.ansible'; - } - ); - }; - prototype = { - patterns = ( - { - include = '#comment'; - }, - { - include = '#property'; - } - ); - }; - }; - scopeName = 'source.ansible'; - uuid = 686AD6AE-33F3-4493-9512-9E9FC1D5417F; -} \ No newline at end of file diff --git a/syntaxes/external/jinja.tmLanguage.json b/syntaxes/external/jinja.tmLanguage.json deleted file mode 100644 index 497db2218..000000000 --- a/syntaxes/external/jinja.tmLanguage.json +++ /dev/null @@ -1,349 +0,0 @@ -{ - "name": "ansible-jinja", - "scopeName": "source.ansible-jinja", - "comment": [ - "Jinja Templates", - "Imported from:", - "https://github.com/samuelcolvin/jinjahtml-vscode/blob/b8fe444cbd838afb4962bb2446e67c85e0443675/syntaxes/jinja.tmLanguage.json" - ], - "foldingStartMarker": "({%\\s*(block|filter|for|if|macro|raw))", - "foldingStopMarker": "({%\\s*(endblock|endfilter|endfor|endif|endmacro|endraw)\\s*%})", - "patterns": [ - { - "begin": "({%)\\s*(raw)\\s*(%})", - "captures": { - "1": { - "name": "entity.other.jinja.delimiter.tag" - }, - "2": { - "name": "keyword.control.jinja" - }, - "3": { - "name": "entity.other.jinja.delimiter.tag" - } - }, - "end": "({%)\\s*(endraw)\\s*(%})", - "name": "comment.block.jinja.raw" - }, - { - "include": "#comments" - }, - { - "begin": "{{-?", - "captures": [ - { - "name": "entity.other.jinja.delimiter.variable" - } - ], - "end": "-?}}", - "name": "meta.scope.jinja.variable", - "patterns": [ - { - "include": "#expression" - } - ] - }, - { - "begin": "{%-?", - "captures": [ - { - "name": "entity.other.jinja.delimiter.tag" - } - ], - "end": "-?%}", - "name": "meta.scope.jinja.tag", - "patterns": [ - { - "include": "#expression" - } - ] - } - ], - "repository": { - "comments": { - "begin": "{#-?", - "captures": [ - { - "name": "entity.other.jinja.delimiter.comment" - } - ], - "end": "-?#}", - "name": "comment.block.jinja", - "patterns": [ - { - "include": "#comments" - } - ] - }, - "escaped_char": { - "match": "\\\\x[0-9A-F]{2}", - "name": "constant.character.escape.hex.jinja" - }, - "escaped_unicode_char": { - "captures": { - "1": { - "name": "constant.character.escape.unicode.16-bit-hex.jinja" - }, - "2": { - "name": "constant.character.escape.unicode.32-bit-hex.jinja" - }, - "3": { - "name": "constant.character.escape.unicode.name.jinja" - } - }, - "match": "(\\\\U[0-9A-Fa-f]{8})|(\\\\u[0-9A-Fa-f]{4})|(\\\\N\\{[a-zA-Z ]+\\})" - }, - "expression": { - "patterns": [ - { - "captures": { - "1": { - "name": "keyword.control.jinja" - }, - "2": { - "name": "variable.other.jinja.block" - } - }, - "match": "\\s*\\b(block)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b" - }, - { - "captures": { - "1": { - "name": "keyword.control.jinja" - }, - "2": { - "name": "variable.other.jinja.filter" - } - }, - "match": "\\s*\\b(filter)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b" - }, - { - "captures": { - "1": { - "name": "keyword.control.jinja" - }, - "2": { - "name": "variable.other.jinja.test" - } - }, - "match": "\\s*\\b(is)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b" - }, - { - "captures": { - "1": { - "name": "keyword.control.jinja" - } - }, - "match": "(?<=\\{\\%-|\\{\\%)\\s*\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b(?!\\s*[,=])" - }, - { - "match": "\\b(and|else|if|in|import|not|or|recursive|with(out)?\\s+context)\\b", - "name": "keyword.control.jinja" - }, - { - "match": "\\b(true|false|none)\\b", - "name": "constant.language.jinja" - }, - { - "match": "\\b(loop|super|self|varargs|kwargs)\\b", - "name": "variable.language.jinja" - }, - { - "match": "[a-zA-Z_][a-zA-Z0-9_]*", - "name": "variable.other.jinja" - }, - { - "match": "(\\+|\\-|\\*\\*|\\*|\/\/|\/|%)", - "name": "keyword.operator.arithmetic.jinja" - }, - { - "captures": { - "1": { - "name": "punctuation.other.jinja" - }, - "2": { - "name": "variable.other.jinja.filter" - } - }, - "match": "(\\|)([a-zA-Z_][a-zA-Z0-9_]*)" - }, - { - "captures": { - "1": { - "name": "punctuation.other.jinja" - }, - "2": { - "name": "variable.other.jinja.attribute" - } - }, - "match": "(\\.)([a-zA-Z_][a-zA-Z0-9_]*)" - }, - { - "begin": "\\[", - "captures": [ - { - "name": "punctuation.other.jinja" - } - ], - "end": "\\]", - "patterns": [ - { - "include": "#expression" - } - ] - }, - { - "begin": "\\(", - "captures": [ - { - "name": "punctuation.other.jinja" - } - ], - "end": "\\)", - "patterns": [ - { - "include": "#expression" - } - ] - }, - { - "begin": "\\{", - "captures": [ - { - "name": "punctuation.other.jinja" - } - ], - "end": "\\}", - "patterns": [ - { - "include": "#expression" - } - ] - }, - { - "match": "(\\.|:|\\||,)", - "name": "punctuation.other.jinja" - }, - { - "match": "(==|<=|=>|<|>|!=)", - "name": "keyword.operator.comparison.jinja" - }, - { - "match": "=", - "name": "keyword.operator.assignment.jinja" - }, - { - "begin": "\"", - "beginCaptures": [ - { - "name": "punctuation.definition.string.begin.jinja" - } - ], - "end": "\"", - "endCaptures": [ - { - "name": "punctuation.definition.string.end.jinja" - } - ], - "name": "string.quoted.double.jinja", - "patterns": [ - { - "include": "#string" - } - ] - }, - { - "begin": "'", - "beginCaptures": [ - { - "name": "punctuation.definition.string.begin.jinja" - } - ], - "end": "'", - "endCaptures": [ - { - "name": "punctuation.definition.string.end.jinja" - } - ], - "name": "string.quoted.single.jinja", - "patterns": [ - { - "include": "#string" - } - ] - }, - { - "begin": "@\/", - "beginCaptures": [ - { - "name": "punctuation.definition.regexp.begin.jinja" - } - ], - "end": "\/", - "endCaptures": [ - { - "name": "punctuation.definition.regexp.end.jinja" - } - ], - "name": "string.regexp.jinja", - "patterns": [ - { - "include": "#simple_escapes" - } - ] - } - ] - }, - "simple_escapes": { - "captures": { - "1": { - "name": "constant.character.escape.newline.jinja" - }, - "10": { - "name": "constant.character.escape.tab.jinja" - }, - "11": { - "name": "constant.character.escape.vertical-tab.jinja" - }, - "2": { - "name": "constant.character.escape.backlash.jinja" - }, - "3": { - "name": "constant.character.escape.double-quote.jinja" - }, - "4": { - "name": "constant.character.escape.single-quote.jinja" - }, - "5": { - "name": "constant.character.escape.bell.jinja" - }, - "6": { - "name": "constant.character.escape.backspace.jinja" - }, - "7": { - "name": "constant.character.escape.formfeed.jinja" - }, - "8": { - "name": "constant.character.escape.linefeed.jinja" - }, - "9": { - "name": "constant.character.escape.return.jinja" - } - }, - "match": "(\\\\\\n)|(\\\\\\\\)|(\\\\\\\")|(\\\\')|(\\\\a)|(\\\\b)|(\\\\f)|(\\\\n)|(\\\\r)|(\\\\t)|(\\\\v)" - }, - "string": { - "patterns": [ - { - "include": "#simple_escapes" - }, - { - "include": "#escaped_char" - }, - { - "include": "#escaped_unicode_char" - } - ] - } - } -} \ No newline at end of file diff --git a/syntaxes/plist2xml.py b/syntaxes/plist2xml.py deleted file mode 100644 index 1efb7f635..000000000 --- a/syntaxes/plist2xml.py +++ /dev/null @@ -1,89 +0,0 @@ -import re -from typing import Match -import pyparsing as pp -import lxml.etree as ET -import click - - -@click.command() -@click.argument('source', required=True) -@click.argument('dest', required=True) -def main(source, dest): - ast = parse(source) - - plist: ET.Element = ET.Element('plist', version="1.0") - generate_xml(plist, ast) - - ET.indent(plist, ' ') - xml = ET.tostring( - plist, encoding='UTF-8', xml_declaration=True, - doctype='' - ) - - with open(dest, 'wb') as f: - f.write(xml) - - -def parse(plistPath): - # https://macromates.com/manual/en/appendix#property-list-format - # https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/PropertyLists/OldStylePlists/OldStylePLists.html#//apple_ref/doc/uid/20001012-BBCBDBJE - LPAR, RPAR, LBRACE, RBRACE, EQUALS, SEMI, COL = map(pp.Suppress, "(){}=;,") - - array = pp.Forward().setName('array') - dictionary = pp.Forward().setName('dict') - string = (pp.QuotedString('"', escChar="\\", multiline=True, convertWhitespaceEscapes=True) | - pp.QuotedString("'", escQuote="''", multiline=True, convertWhitespaceEscapes=False) | - pp.Word(pp.alphanums+'_-'))('string').setName('simple string or quoted string') - - # order here is very important when using '-' - element = pp.Group(string | array | dictionary)('value') - - # that '+' is required for matching the optional colon - array_elements = element - pp.ZeroOrMore(COL + element) - pp.Optional(COL) - array << pp.Group(LPAR - pp.Optional(array_elements) - - RPAR)('array') - - dict_item = pp.Group(string('key') - EQUALS - element - SEMI) - dictionary << pp.Group(LBRACE - - pp.ZeroOrMore(dict_item) - - RBRACE)('dict') - - res = dictionary.parseFile(plistPath, parseAll=True) - return res - - -def generate_xml(parent: ET.Element, data: pp.ParseResults, level=0, indent=4): - if 'dict' in data: - dictionary = data['dict'] - parent = ET.SubElement(parent, 'dict') - for dict_item in dictionary: - key = dict_item['key'] - x_key = ET.SubElement(parent, 'key') - x_key.text = key - value = dict_item['value'] - generate_xml(parent, value, level+1, indent) - pass - elif 'array' in data: - array = data['array'] - parent = ET.SubElement(parent, 'array') - for array_item in array: - generate_xml(parent, array_item, level+1, indent) - elif 'string' in data: - string: str = data['string'] - lines = string.split('\n') - reindented_lines = [lines[0]] - for line in lines[1:]: - m: Match = re.match(f'^[ ]{{{(level-1)*indent}}}', line) - if m: - # remove plist indent - line = line[len(m.group(0)):] - # insert XML indent - line = ' '*((level)*indent) + line - reindented_lines.append(line) - - x_string = ET.SubElement(parent, 'string') - x_string.text = '\n'.join(reindented_lines) - - -if __name__ == "__main__": - main() diff --git a/syntaxes/xml2plist.py b/syntaxes/xml2plist.py deleted file mode 100644 index a9020158a..000000000 --- a/syntaxes/xml2plist.py +++ /dev/null @@ -1,90 +0,0 @@ -from typing import Match, Union -import xml.etree.ElementTree as ET -import re -import click - - -@click.command() -@click.argument('source', required=True) -@click.argument('dest', required=True) -def main(source, dest): - root = ET.parse(source).getroot() - - with open(dest, 'w') as f: - f.write(convert_to_plist(root)) - - -def to_safe_string(text: str): - if re.match(r'^[\w-]+$', text): - return text - else: - text = text.replace("'", "''") # escape single-quotes - return f"'{text}'" - - -def format(tag, value: Union[list, str], level, indent, context): - xml_indent = 4 - indentation = ' '*indent*level - if context == 'mapping': - start_indent = '' - else: - start_indent = indentation - - if type(value) is list: - if tag == 'dict': - start = '{' - end = '}' - joined_values = '\n'.join(value) - elif tag == 'array': - start = '(' - end = ')' - joined_values = ',\n'.join(value) - return f"{start_indent}{start}\n{joined_values}\n{indentation}{end}" - else: - reindented_lines = [] - lines = value.split('\n') - for line in lines: - m: Match = re.match(r'^[\t ]*', line) - # Normalize tabs to spaces - text_indentation = m.group(0).replace('\t', ' '*xml_indent) - # reindent in case indent does not match xml_indent - text_indentation = ' ' * \ - int(len(text_indentation)/xml_indent * - indent-indent) # working one level lower (plist tag is removed) - reindented_lines.append(text_indentation + line.lstrip()) - value = '\n'.join(reindented_lines) - return f"{start_indent}{value}" - - -def convert_to_plist(element: ET.Element, level=0, indent=4, context: str = ''): - if element.tag == 'dict': - # with new level, since indent is appended already here - inner_indentation = ' '*indent*(level+1) - dict_iter = iter(element) - dict_items = [] - while True: - try: - key_element = next(dict_iter) - assert key_element.tag == 'key', f"Got {key_element.tag}({key_element.text}) instead of key" - value_element = next(dict_iter, None) - assert value_element is not None, f"Got {key_element.tag}({key_element.text}) without value" - item_str = f"{inner_indentation}{to_safe_string(key_element.text)} = {convert_to_plist(value_element, level+1, indent, 'mapping')};" - dict_items.append(item_str) - except StopIteration: - break - return format(element.tag, dict_items, level, indent, context) - elif element.tag == 'array': - array_items = [] - for item_element in element: - array_items.append(convert_to_plist(item_element, level+1, indent)) - return format(element.tag, array_items, level, indent, context) - elif element.tag == 'string': - return format(element.tag, to_safe_string(element.text), level, indent, context) - elif element.tag == 'plist': - return convert_to_plist(element[0], level, indent) - else: - raise Exception(f"Unrecognized tag: {element.tag}") - - -if __name__ == "__main__": - main() From 7e1be5ce32823177e6688ebf9b105774c8e3badb Mon Sep 17 00:00:00 2001 From: Matthew Toohey Date: Mon, 20 Jun 2022 04:34:03 -0400 Subject: [PATCH 373/558] docs: add note on standalone usage (#347) * docs: add note on standalone usage * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Ganesh Nalawade --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 4bc752507..4b4856d60 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,15 @@ You may also open the implementation of any module using the standard _Go to Definition_ operation, for instance, by clicking on the module name while holding `ctrl`/`cmd`. +## Standalone Usage + +For standalone usage with a language server client, Ansible language server can +be installed from npm with the following command: + +```bash +npm install -g @ansible/ansible-language-server +``` + ## Language Server Settings For details on settings, their descriptions and their default values refer to From 0aa3ce2199353b1527095818918742136f48b7f4 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 10:03:04 +0100 Subject: [PATCH 374/558] Remove language configurations files (#358) There files are already part of the vscode-extension repository and they are not used from here. --- .pre-commit-config.yaml | 2 -- .prettierignore | 3 --- ansible-language-configuration.json | 36 ----------------------------- jinja-language-configuration.json | 32 ------------------------- 4 files changed, 73 deletions(-) delete mode 100644 ansible-language-configuration.json delete mode 100644 jinja-language-configuration.json diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a341b26eb..df6967218 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -66,8 +66,6 @@ repos: exclude: > (?x)^( .vscode/.*| - ansible-language-configuration.json| - jinja-language-configuration.json| scripts/tsconfig.json| scripts/tsconfig.esm.json| scripts/tsconfig.umd.json| diff --git a/.prettierignore b/.prettierignore index 755f7d43d..cad385c4c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,9 +4,6 @@ .tox out -# Tracked but externally sourced, no reformatting wanted: -jinja-language-configuration.json - # Files temporary excluded during prettier adoption: *.yaml *.yml diff --git a/ansible-language-configuration.json b/ansible-language-configuration.json deleted file mode 100644 index 707dd0dd0..000000000 --- a/ansible-language-configuration.json +++ /dev/null @@ -1,36 +0,0 @@ -// Imported from: -// https://github.com/samuelcolvin/jinjahtml-vscode/blob/b8fe444cbd838afb4962bb2446e67c85e0443675/language-configuration.json -{ - "comments": { - // symbols used for start and end a block comment. Remove this entry if your language does not support block comments - "lineComment": "#" - }, - // symbols used as brackets - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - // symbols that are auto closed when typing - "autoClosingPairs": [ - ["[", "]"], - ["{", "}"], - ["(", ")"], - ["\"", "\""], - ["'", "'"], - ["{{ ", " "] // curly braces are already auto-closed, this adds space at the end if one is added at the beginning - ], - // added `'` and `"` -> in Ansible this pattern is extremely common: - // `"{{ jinja_expression }}"` - // with default config, `"` gets auto-closed and with cursor in the middle (`"|"`), brace auto-closing would not work - "autoCloseBefore": "'\";:.,=}])> \n\t", - // symbols that can be used to surround a selection - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"], - [" ", " "] // for spacing Jinja (and other) expressions; this setting might be a bit controversial ;) - ] -} diff --git a/jinja-language-configuration.json b/jinja-language-configuration.json deleted file mode 100644 index a30c9802c..000000000 --- a/jinja-language-configuration.json +++ /dev/null @@ -1,32 +0,0 @@ -// Imported from: -// https://github.com/samuelcolvin/jinjahtml-vscode/blob/b8fe444cbd838afb4962bb2446e67c85e0443675/language-configuration.json -{ - "comments": { - // symbols used for start and end a block comment. Remove this entry if your language does not support block comments - "blockComment": [ "{#", "#}" ] - }, - // symbols used as brackets - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - // symbols that are auto closed when typing - "autoClosingPairs": [ - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"], - ["{#", "#}"], - ["{{", "}}"], - ["{%", "%}"] - ], - // symbols that that can be used to surround a selection - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"] - ] -} From a6db641e7917cf80b731925aaede0dbf2e345632 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 10:19:26 +0100 Subject: [PATCH 375/558] Moved images under docs (#359) --- README.md | 14 +++++++------- {images => docs/images}/ansible-lint.gif | Bin {images => docs/images}/go-to-definition.gif | Bin .../images}/hover-documentation-module.png | Bin {images => docs/images}/jinja-expression.gif | Bin {images => docs/images}/smart-completions.gif | Bin {images => docs/images}/syntax-highlighting.png | Bin {images => docs/images}/yaml-validation.gif | Bin 8 files changed, 7 insertions(+), 7 deletions(-) rename {images => docs/images}/ansible-lint.gif (100%) rename {images => docs/images}/go-to-definition.gif (100%) rename {images => docs/images}/hover-documentation-module.png (100%) rename {images => docs/images}/jinja-expression.gif (100%) rename {images => docs/images}/smart-completions.gif (100%) rename {images => docs/images}/syntax-highlighting.png (100%) rename {images => docs/images}/yaml-validation.gif (100%) diff --git a/README.md b/README.md index 4b4856d60..e19fe74fe 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ following projects: ### Syntax highlighting -![Syntax highlighting](https://github.com/ansible/ansible-language-server/raw/main/images/syntax-highlighting.png) +![Syntax highlighting](https://github.com/ansible/ansible-language-server/raw/main/docs/images/syntax-highlighting.png) **Ansible keywords**, **module names** and **module options**, as well as standard YAML elements are recognized and highlighted distinctly. Jinja @@ -28,14 +28,14 @@ curly braces. ### Validation -![YAML validation](https://github.com/ansible/ansible-language-server/raw/main/images/yaml-validation.gif) +![YAML validation](https://github.com/ansible/ansible-language-server/raw/main/docs/images/yaml-validation.gif) While you type, the syntax of your Ansible scripts is verified and any feedback is provided instantaneously. #### Integration with ansible-lint -![Linter support](https://github.com/ansible/ansible-language-server/raw/main/images/ansible-lint.gif) +![Linter support](https://github.com/ansible/ansible-language-server/raw/main/docs/images/ansible-lint.gif) On opening and saving a document, `ansible-lint` is executed in the background and any findings are presented as errors. You might find it useful that @@ -54,7 +54,7 @@ error it will fallback to `ansible --syntax-check` for validation. ### Smart auto-completion -![Autocompletion](https://github.com/ansible/ansible-language-server/raw/main/images/smart-completions.gif) +![Autocompletion](https://github.com/ansible/ansible-language-server/raw/main/docs/images/smart-completions.gif) The extension tries to detect whether the cursor is on a play, block or task etc. and provides suggestions accordingly. There are also a few other rules that @@ -72,7 +72,7 @@ improve user experience: #### Auto-closing Jinja expressions -![Easier Jinja expression typing](https://github.com/ansible/ansible-language-server/raw/main/images/jinja-expression.gif) +![Easier Jinja expression typing](https://github.com/ansible/ansible-language-server/raw/main/docs/images/jinja-expression.gif) When writing a Jinja expression, you only need to type `"{{`, and it will be mirrored behind the cursor (including the space). You can also select the @@ -81,7 +81,7 @@ expression. ### Documentation reference -![Documentation on hover](https://github.com/ansible/ansible-language-server/raw/main/images/hover-documentation-module.png) +![Documentation on hover](https://github.com/ansible/ansible-language-server/raw/main/docs/images/hover-documentation-module.png) Documentation is available on hover for Ansible keywords, modules and module options. The extension works on the same principle as `ansible-doc`, providing @@ -89,7 +89,7 @@ the documentation straight from the Python implementation of the modules. #### Jump to module code -![Go to code on Ctrl+click](https://github.com/ansible/ansible-language-server/raw/main/images/go-to-definition.gif) +![Go to code on Ctrl+click](https://github.com/ansible/ansible-language-server/raw/main/docs/images/go-to-definition.gif) You may also open the implementation of any module using the standard _Go to Definition_ operation, for instance, by clicking on the module name while diff --git a/images/ansible-lint.gif b/docs/images/ansible-lint.gif similarity index 100% rename from images/ansible-lint.gif rename to docs/images/ansible-lint.gif diff --git a/images/go-to-definition.gif b/docs/images/go-to-definition.gif similarity index 100% rename from images/go-to-definition.gif rename to docs/images/go-to-definition.gif diff --git a/images/hover-documentation-module.png b/docs/images/hover-documentation-module.png similarity index 100% rename from images/hover-documentation-module.png rename to docs/images/hover-documentation-module.png diff --git a/images/jinja-expression.gif b/docs/images/jinja-expression.gif similarity index 100% rename from images/jinja-expression.gif rename to docs/images/jinja-expression.gif diff --git a/images/smart-completions.gif b/docs/images/smart-completions.gif similarity index 100% rename from images/smart-completions.gif rename to docs/images/smart-completions.gif diff --git a/images/syntax-highlighting.png b/docs/images/syntax-highlighting.png similarity index 100% rename from images/syntax-highlighting.png rename to docs/images/syntax-highlighting.png diff --git a/images/yaml-validation.gif b/docs/images/yaml-validation.gif similarity index 100% rename from images/yaml-validation.gif rename to docs/images/yaml-validation.gif From 0f88be892a2e300d0ac51b6975f9e3aec651f1f7 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 10:28:52 +0100 Subject: [PATCH 376/558] Remove old check-dependencies script (#360) --- package.json | 1 - scripts/.eslintrc.js | 34 ---------------------------------- scripts/check-dependencies.js | 23 ----------------------- scripts/tsconfig.esm.json | 10 ---------- scripts/tsconfig.json | 14 -------------- scripts/tsconfig.umd.json | 9 --------- 6 files changed, 91 deletions(-) delete mode 100644 scripts/.eslintrc.js delete mode 100644 scripts/check-dependencies.js delete mode 100644 scripts/tsconfig.esm.json delete mode 100644 scripts/tsconfig.json delete mode 100644 scripts/tsconfig.umd.json diff --git a/package.json b/package.json index 51412d807..b592c6374 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,6 @@ "test": "nyc -s -a mocha && nyc report --check-coverage", "test-with-ee": "nyc -s -a mocha --grep @ee && nyc report --check-coverage", "test-without-ee": "nyc -s -a mocha --grep @ee --invert && nyc report --check-coverage", - "check-dependencies": "node ./scripts/check-dependencies.js", "generate-settings-readme": "ts-node tools/settings-doc-generator.ts" }, "all": true diff --git a/scripts/.eslintrc.js b/scripts/.eslintrc.js deleted file mode 100644 index ae754a1bf..000000000 --- a/scripts/.eslintrc.js +++ /dev/null @@ -1,34 +0,0 @@ -module.exports = { - root: true, - parser: "@typescript-eslint/parser", - env: { - node: true, - es6: true, - }, - parserOptions: { - sourceType: "module", - }, - plugins: ["@typescript-eslint", "prettier"], - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "prettier", - ], - rules: { - "prettier/prettier": "error", - "@typescript-eslint/no-use-before-define": [ - "error", - { functions: false, classes: false }, - ], - "@typescript-eslint/no-unused-vars": ["warn"], - "@typescript-eslint/explicit-function-return-type": [ - 1, - { allowExpressions: true }, - ], - "eol-last": ["error"], - "space-infix-ops": ["error", { int32Hint: false }], - "no-multi-spaces": ["error", { ignoreEOLComments: true }], - "keyword-spacing": ["error"], - }, -}; diff --git a/scripts/check-dependencies.js b/scripts/check-dependencies.js deleted file mode 100644 index 4460ed3de..000000000 --- a/scripts/check-dependencies.js +++ /dev/null @@ -1,23 +0,0 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Red Hat, Inc. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - * ------------------------------------------------------------------------------------------ */ - -//check package.json do not have dependency with 'next' version - -/* eslint-disable @typescript-eslint/no-var-requires */ - -const exit = require("process").exit; -const dependencies = require("../package.json").dependencies; - -for (const dep in dependencies) { - if (Object.prototype.hasOwnProperty.call(dependencies, dep)) { - const version = dependencies[dep]; - if (version === "next") { - console.error( - `Dependency ${dep} has "${version}" version, please change it to fixed version` - ); - exit(1); - } - } -} diff --git a/scripts/tsconfig.esm.json b/scripts/tsconfig.esm.json deleted file mode 100644 index f0045dcf9..000000000 --- a/scripts/tsconfig.esm.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "downlevelIteration": true, - "lib": ["dom"], - "module": "esnext", - "outDir": "./lib/esm", - }, - "exclude": ["node_modules", "out", "lib", "test"], -} diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json deleted file mode 100644 index 67cacdeee..000000000 --- a/scripts/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "alwaysStrict": true, - "declaration": true, - "forceConsistentCasingInFileNames": true, - "lib": ["es2016"], - "module": "commonjs", - "moduleResolution": "node", - "outDir": "./out/server", - "sourceMap": true, - "target": "es6", - }, - "exclude": ["node_modules", "out"], -} diff --git a/scripts/tsconfig.umd.json b/scripts/tsconfig.umd.json deleted file mode 100644 index c91a467cb..000000000 --- a/scripts/tsconfig.umd.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "lib": ["dom"], - "module": "umd", - "outDir": "./lib/umd", - }, - "exclude": ["node_modules", "out", "lib", "test"], -} From 35fe968aa77ff9e577d2165c78a09414aa91767f Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 10:42:17 +0100 Subject: [PATCH 377/558] Remove old version-bump-allowed script (#361) --- bin/version-bump-allowed | 17 ----------------- package.json | 1 - 2 files changed, 18 deletions(-) delete mode 100755 bin/version-bump-allowed diff --git a/bin/version-bump-allowed b/bin/version-bump-allowed deleted file mode 100755 index 5840ce5fc..000000000 --- a/bin/version-bump-allowed +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env node - -console.debug("Checking if it is allowed to bump the package version..."); -console.debug( - `The previous package version was ${process.env.npm_package_version}` -); - -const isGitHubActionsCiCd = - process.env.CI === "true" && process.env.GITHUB_ACTIONS === "true"; - -console.debug( - `The package bump is ${ - isGitHubActionsCiCd ? "" : "not " - }running under GitHub Actions CI/CD` -); - -process.exit(~~!isGitHubActionsCiCd); diff --git a/package.json b/package.json index b592c6374..895b9917e 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,6 @@ "prepack": "npm ci && npm run compile", "//prepare": "Prepare is needed for installation from source", "prepare": "npm run compile", - "preversion": "bin/version-bump-allowed", "watch": "tsc --watch -p .", "test": "nyc -s -a mocha && nyc report --check-coverage", "test-with-ee": "nyc -s -a mocha --grep @ee && nyc report --check-coverage", From eb69236540f4fe5cb82056148596661e8403d0f4 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 11:40:04 +0100 Subject: [PATCH 378/558] Move py related configs under .config (#362) --- .config/requirements.in | 19 +++++ requirements.txt => .config/requirements.txt | 6 +- .github/CONTRIBUTING.md | 3 +- .github/dependabot.yml | 2 +- .github/workflows/vscode.yml | 2 +- .readthedocs.yml | 7 +- Taskfile.yml | 4 +- cspell.config.yaml | 4 +- .../.CHANGELOG-TEMPLATE.md.j2 | 32 --------- docs/changelog-fragments.d/.gitignore | 25 ------- docs/changelog-fragments.d/329.bugfix.md | 2 - docs/changelog-fragments.d/331.misc.md | 2 - docs/changelog-fragments.d/345.bugfix.md | 2 - docs/changelog-fragments.d/348.feature.md | 15 ---- docs/changelog-fragments.d/README.md | 70 ------------------- docs/changelog.md | 23 +----- docs/conf.py | 10 --- docs/contributing/guidelines.md | 4 -- pyproject.toml | 46 ------------ setup.cfg | 20 ------ tools/docs_summary.py | 2 +- tools/test-setup.sh | 2 +- 22 files changed, 31 insertions(+), 271 deletions(-) create mode 100644 .config/requirements.in rename requirements.txt => .config/requirements.txt (89%) delete mode 100644 docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 delete mode 100644 docs/changelog-fragments.d/.gitignore delete mode 100644 docs/changelog-fragments.d/329.bugfix.md delete mode 100644 docs/changelog-fragments.d/331.misc.md delete mode 100644 docs/changelog-fragments.d/345.bugfix.md delete mode 100644 docs/changelog-fragments.d/348.feature.md delete mode 100644 docs/changelog-fragments.d/README.md delete mode 100644 pyproject.toml delete mode 100644 setup.cfg diff --git a/.config/requirements.in b/.config/requirements.in new file mode 100644 index 000000000..111941c1b --- /dev/null +++ b/.config/requirements.in @@ -0,0 +1,19 @@ +# testing and linting +ansible-lint>=6.0.2 +click +lxml +pre-commit +pyparsing +# vscode integration +flake8 # vscode integration +mypy # vscode integration +pylint # vscode integration +# docs +MarkupSafe<2.1 # see https://github.com/pallets/jinja/issues/1585 +myst-parser[linkify] >= 0.18.0 +setuptools-scm >= 6.0.1 +Sphinx >= 5.0.2 +sphinx-ansible-theme >= 0.8.0 +sphinx-favicon >= 0.2 +sphinx-notfound-page >= 0.7.1 +sphinxcontrib-apidoc >= 0.3.0 diff --git a/requirements.txt b/.config/requirements.txt similarity index 89% rename from requirements.txt rename to .config/requirements.txt index 4d7c432dd..d58aa2ff5 100644 --- a/requirements.txt +++ b/.config/requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with python 3.10 # To update, run: # -# pip-compile --extra=docs --extra=test --no-annotate --output-file=requirements.txt --strip-extras setup.cfg +# pip-compile --no-annotate --output-file=.config/requirements.txt --strip-extras .config/requirements.in # alabaster==0.7.12 ansible-compat==2.1.0 @@ -18,7 +18,6 @@ cffi==1.15.0 cfgv==3.3.1 charset-normalizer==2.0.12 click==8.1.3 -click-default-group==1.2.2 commonmark==0.9.1 cryptography==36.0.2 dill==0.3.5.1 @@ -30,7 +29,6 @@ flake8==4.0.1 identify==2.4.11 idna==3.3 imagesize==1.3.0 -incremental==21.3.0 iniconfig==1.1.1 isort==5.10.1 jinja2==3.1.2 @@ -84,12 +82,10 @@ sphinxcontrib-htmlhelp==2.0.0 sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==1.0.3 sphinxcontrib-serializinghtml==1.1.5 -sphinxcontrib-towncrier==0.2.1a0 subprocess-tee==0.3.5 toml==0.10.2 tomli==2.0.1 tomlkit==0.11.0 -towncrier==21.9.0 typing-extensions==4.1.1 uc-micro-py==1.0.1 urllib3==1.26.9 diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 673ad5808..863b52729 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -4,8 +4,7 @@ In order to contribute, you'll need to: 1. Fork the repository. -2. Create a branch, push your changes there. Don't forget to - {ref}`include news files for the changelog `. +2. Create a branch, push your changes there. 3. Send it to us as a PR. diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 80cfcde7d..fc859b7da 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -2,7 +2,7 @@ version: 2 updates: - package-ecosystem: "pip" - directory: "/" + directory: "/.config" schedule: interval: "daily" labels: diff --git a/.github/workflows/vscode.yml b/.github/workflows/vscode.yml index 9ddae875b..fb14f81a4 100644 --- a/.github/workflows/vscode.yml +++ b/.github/workflows/vscode.yml @@ -14,7 +14,7 @@ jobs: - name: Install test dependencies run: | python -m pip install --user --upgrade pip - PIP_CONSTRAINTS=requirements.txt python -m pip install --user ansible-core ansible-lint + PIP_CONSTRAINTS=.config/requirements.txt python -m pip install --user -r .config/requirements.in echo "$HOME/.local/bin" >> $GITHUB_PATH # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#adding-a-system-path diff --git a/.readthedocs.yml b/.readthedocs.yml index 3732836cf..b5d59c711 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -32,9 +32,6 @@ build: # to build docs python: install: - # We also defined PIP_CONSTRAINTS=requirements.txt on readthedocs config - - method: pip - path: . - extra_requirements: - - docs + # We also defined PIP_CONSTRAINTS=.config/requirements.txt on readthedocs config + - requirements: .config/requirements.in system_packages: false diff --git a/Taskfile.yml b/Taskfile.yml index ebe7c2cc2..735580155 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -51,7 +51,7 @@ tasks: sources: - Taskfile.yml - package.json - - requirements.txt + - .config/requirements.* - setup.cfg - tools/test-setup.sh build: @@ -71,7 +71,7 @@ tasks: deps: - setup cmds: - - bash -c "PIP_CONSTRAINTS= pip-compile -q --extra docs --extra test --strip-extras --no-annotate setup.cfg -o requirements.txt" + - bash -c "PIP_CONSTRAINTS= pip-compile -q --strip-extras --no-annotate .config/requirements.in -o .config/requirements.txt" - python3 -m pre_commit autoupdate # bumps some developments dependencies - npx ncu -u --dep dev diff --git a/cspell.config.yaml b/cspell.config.yaml index a54ab27ff..2819826e6 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -13,6 +13,4 @@ dictionaries: - "!cryptocurrencies" - "!cpp" ignorePaths: - - docs/requirements.in - - docs/requirements.txt - - requirements.txt + - .config/requirements.txt diff --git a/docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 b/docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 deleted file mode 100644 index bde68ed6e..000000000 --- a/docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2 +++ /dev/null @@ -1,32 +0,0 @@ - -{% for section, _ in sections.items() %} -{% set title_prefix = underlines[0] %} -{% if section %} -{{ title_prefix }} {{ section }} -{% set title_prefix = underlines[1] %} -{% endif %} - -{% if sections[section] %} -{% for category, val in definitions.items() if category in sections[section] %} -{{ title_prefix }} {{ definitions[category]['name'] }} -{% if definitions[category]['showcontent'] %} - -{% for text, values in sections[section][category].items() %} -* {{ text }} - - ({{- values | join(', ') | wordwrap(72 - 4) -}}) -{% endfor -%} - -{% else %} -* {{ sections[section][category]['']|join(', ') }} -{% endif %} - -{% if sections[section][category]|length == 0 %} -No significant changes. -{% endif %} -{% endfor %} - -{% else %} -No significant changes. -{% endif %} -{% endfor %} diff --git a/docs/changelog-fragments.d/.gitignore b/docs/changelog-fragments.d/.gitignore deleted file mode 100644 index 46978d225..000000000 --- a/docs/changelog-fragments.d/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -* -!.CHANGELOG-TEMPLATE.md.j2 -!.gitignore -!README.md -!*.bugfix -!*.bugfix.md -!*.bugfix.*.md -!*.breaking -!*.breaking.md -!*.breaking.*.md -!*.deprecation -!*.deprecation.md -!*.deprecation.*.md -!*.doc -!*.doc.md -!*.doc.*.md -!*.feature -!*.feature.md -!*.feature.*.md -!*.internal -!*.internal.md -!*.internal.*.md -!*.misc -!*.misc.md -!*.misc.*.md diff --git a/docs/changelog-fragments.d/329.bugfix.md b/docs/changelog-fragments.d/329.bugfix.md deleted file mode 100644 index 58e2e68b5..000000000 --- a/docs/changelog-fragments.d/329.bugfix.md +++ /dev/null @@ -1,2 +0,0 @@ -Fix auto-completion for modules when documentation is not displayed -- by -{user}`fredericgiquel` diff --git a/docs/changelog-fragments.d/331.misc.md b/docs/changelog-fragments.d/331.misc.md deleted file mode 100644 index 7ec407aa5..000000000 --- a/docs/changelog-fragments.d/331.misc.md +++ /dev/null @@ -1,2 +0,0 @@ -Added plugin path logs in execution environment service to add information -related to copied plugins from within EE to local path. -- by {user}`ganeshrn` diff --git a/docs/changelog-fragments.d/345.bugfix.md b/docs/changelog-fragments.d/345.bugfix.md deleted file mode 100644 index 7e7ef8439..000000000 --- a/docs/changelog-fragments.d/345.bugfix.md +++ /dev/null @@ -1,2 +0,0 @@ -Added validation of mount path before passing it as an argument to wrap the -commands in execution environment -- by {user}`priyamsahoo` diff --git a/docs/changelog-fragments.d/348.feature.md b/docs/changelog-fragments.d/348.feature.md deleted file mode 100644 index 942ab7246..000000000 --- a/docs/changelog-fragments.d/348.feature.md +++ /dev/null @@ -1,15 +0,0 @@ -````md -Added settings for completion -- by {user}`fredericgiquel` - -- Add settings to toggle redirected module provider when completing modules - -```code - "ansible.completion.provideRedirectModules": true -``` - -- Add settings to toggle alias provider when completing module options - -```code - "ansible.completion.provideModuleOptionAliases": true -``` -```` diff --git a/docs/changelog-fragments.d/README.md b/docs/changelog-fragments.d/README.md deleted file mode 100644 index 3c4fa51cb..000000000 --- a/docs/changelog-fragments.d/README.md +++ /dev/null @@ -1,70 +0,0 @@ - - -(ansible_language_server_adding_changelog_fragments)= - -## Adding change notes with your PRs - -It is very important to maintain a log for news of how updating to the new -version of the software will affect end-users. This is why we enforce collection -of the change fragment files in pull requests as per [Towncrier -philosophy][towncrier-philosophy]. - -The idea is that when somebody makes a change, they must record the bits that -would affect end-users only including information that would be useful to them. -Then, when the maintainers publish a new release, they'll automatically use -these records to compose a change log for the respective version. It is -important to understand that including unnecessary low-level implementation -related details generates noise that is not particularly useful to the end-users -most of the time. And so such details should be recorded in the Git history -rather than a changelog. - -## Alright! So how do I add a news fragment? - -To submit a change note about your PR, add a text file into the -`docs/changelog-fragments.d/` folder. It should contain an explanation of what -applying this PR will change in the way end-users interact with the project. One -sentence is usually enough but feel free to add as many details as you feel -necessary for the users to understand what it means. - -**Use the past tense** for the text in your fragment because, combined with -others, it will be a part of the "news digest" telling the readers **what -changed** in a specific version of the library _since the previous version_. You -should also use [MyST Markdown][myst-md] syntax for highlighting code (inline or -block), linking parts of the docs or external sites. At the end, sign your -change note by adding `` -- by {user}`github-username `` (replace -`github-username` with your own!). - -Finally, name your file following the convention that Towncrier understands: it -should start with the number of an issue or a PR followed by a dot, then add a -patch type, like `feature`, `bugfix`, `doc`, `misc` etc., and add `.md` as a -suffix. If you need to add more than one fragment, you may add an optional -sequence number (delimited with another period) between the type and the suffix. - -## Examples for changelog entries adding to your Pull Requests - -File `docs/changelog-fragments.d/666.doc.md`: - -```md -Added a `{user}` role to Sphinx config -- by {user}`webknjaz` -``` - -File `docs/changelog-fragments.d/116.feature.md`: - -```md -Added support for nested module options (suboptions) -- by {user}`tomaciazek` -``` - -File `docs/changelog-fragments.d/140.bugfix.md`: - -```md -Implemented opening standalone Ansible files that have no workspace associated --- by {user}`ganeshrn` -``` - -```{tip} -See `pyproject.toml` for all available categories -(`tool.towncrier.type`). -``` - -[myst-md]: https://myst-parser.rtfd.io/en/latest/syntax/syntax.html -[towncrier-philosophy]: https://towncrier.readthedocs.io/en/latest/#philosophy diff --git a/docs/changelog.md b/docs/changelog.md index a6af3084b..8100a834e 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,26 +1,5 @@ -# Changelog + ```{include} ../CHANGELOG.md -:end-before: -:start-after: DO-NOT-REMOVE-versioning-promise-START - -``` - - - -## {{ release_l }}, as of {sub-ref}`today` _{subscript}`/UNRELEASED DRAFT/`_ - - - -```{important} This version is not yet released and is under active development - -``` - -```{towncrier-draft-entries} - -``` - -```{include} ../CHANGELOG.md -:start-after: ``` diff --git a/docs/conf.py b/docs/conf.py index 92f89af70..4b771c4ec 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -92,9 +92,6 @@ # Third-party extensions: "myst_parser", # extended markdown; https://pypi.org/project/myst-parser/ "notfound.extension", - # FIXME: `sphinx-js` is not fully configured right now; TODO: change this. - # 'sphinx_js', # Support for using Sphinx on JSDoc-documented JS code - "sphinxcontrib.towncrier", # provides `towncrier-draft-entries` directive ] # The language for content autogenerated by Sphinx. Refer to documentation @@ -203,13 +200,6 @@ ] linkcheck_workers = 25 -# -- Options for towncrier_draft extension ----------------------------------- - -towncrier_draft_autoversion_mode = "draft" # or: 'sphinx-version', 'sphinx-release' -towncrier_draft_include_empty = True -towncrier_draft_working_directory = PROJECT_ROOT_DIR -# Not yet supported: towncrier_draft_config_path = 'pyproject.toml' # relative to cwd - # -- Options for myst_parser extension --------------------------------------- myst_enable_extensions = [ diff --git a/docs/contributing/guidelines.md b/docs/contributing/guidelines.md index 2384e6a03..ca8a6258c 100644 --- a/docs/contributing/guidelines.md +++ b/docs/contributing/guidelines.md @@ -22,7 +22,3 @@ roles. {ref}`Read the docs ` to learn more on how to use it. [myst]: https://pypi.org/project/myst-parser/ [rtd]: https://readthedocs.org [sphinx]: https://www.sphinx-doc.org - -```{include} ../changelog-fragments.d/README.md - -``` diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 17b4778fe..000000000 --- a/pyproject.toml +++ /dev/null @@ -1,46 +0,0 @@ -[tool.towncrier] - directory = "docs/changelog-fragments.d/" - filename = "CHANGELOG.md" - issue_format = "{{issue}}`{issue}`" - start_string = "\n\n" - template = "docs/changelog-fragments.d/.CHANGELOG-TEMPLATE.md.j2" - title_format = "## v{version} ({project_date})" - underlines = ["##", "###", "####", "#####"] - - [[tool.towncrier.section]] - path = "" - - [[tool.towncrier.type]] - directory = "bugfix" - name = "Bugfixes" - showcontent = true - - [[tool.towncrier.type]] - directory = "feature" - name = "Features" - showcontent = true - - [[tool.towncrier.type]] - directory = "deprecation" - name = "Deprecations (removal in next major release)" - showcontent = true - - [[tool.towncrier.type]] - directory = "breaking" - name = "Backward incompatible changes" - showcontent = true - - [[tool.towncrier.type]] - directory = "doc" - name = "Documentation" - showcontent = true - - [[tool.towncrier.type]] - directory = "misc" - name = "Miscellaneous" - showcontent = true - - [[tool.towncrier.type]] - directory = "internal" - name = "Contributor-facing changes" - showcontent = true diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 3cde3415b..000000000 --- a/setup.cfg +++ /dev/null @@ -1,20 +0,0 @@ -[options.extras_require] -test = - ansible-lint>=6.0.2 - click - lxml - pre-commit - pyparsing - flake8 # vscode integration - mypy # vscode integration - pylint # vscode integration -docs = - MarkupSafe<2.1 # see https://github.com/pallets/jinja/issues/1585 - myst-parser[linkify] >= 0.18.0 - setuptools-scm >= 6.0.1 - Sphinx >= 5.0.2 - sphinx-ansible-theme >= 0.8.0 - sphinx-favicon >= 0.2 - sphinx-notfound-page >= 0.7.1 - sphinxcontrib-apidoc >= 0.3.0 - sphinxcontrib-towncrier >= 0.2.0a0 diff --git a/tools/docs_summary.py b/tools/docs_summary.py index 3a91412f0..42b561c5a 100644 --- a/tools/docs_summary.py +++ b/tools/docs_summary.py @@ -4,7 +4,7 @@ import sys if __name__ == "__main__": - docs_dir = pathlib.Path("out") / "docs_out" + docs_dir = (pathlib.Path("../out") / "docs_out").resolve() index_file = (docs_dir / "index.html").absolute() print(f""" Documentation index: file://{index_file} diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 34eb283f6..3a900662b 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -49,7 +49,7 @@ fi python3 -m pip install -U pip if [[ $(uname) != MINGW* ]]; then # if we are not on pure Windows - python3 -m pip install -c requirements.txt ".[test,docs]" + python3 -m pip install -c .config/requirements.txt -r .config/requirements.in ansible --version ansible-lint --version fi From 4e856e67751bdb80dd5000a9cb506bf71eaf373d Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 11:59:18 +0100 Subject: [PATCH 379/558] Fix documentation version reading (#363) --- .config/mypy.ini | 2 ++ .vscode/settings.json | 1 + docs/conf.py | 18 ++++++------------ 3 files changed, 9 insertions(+), 12 deletions(-) create mode 100644 .config/mypy.ini diff --git a/.config/mypy.ini b/.config/mypy.ini new file mode 100644 index 000000000..01cecbf43 --- /dev/null +++ b/.config/mypy.ini @@ -0,0 +1,2 @@ +[mypy] +exclude = (out|test/fixtures) diff --git a/.vscode/settings.json b/.vscode/settings.json index 50a3e08b9..5fcf4c6ce 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -18,4 +18,5 @@ "**/node_modules": true, }, "explorerExclude.backup": null, + "mypy.configFile": ".config/mypy.ini", } diff --git a/docs/conf.py b/docs/conf.py index 4b771c4ec..75461fe81 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -5,6 +5,7 @@ import collections import os +import json import sys from functools import partial from pathlib import Path @@ -14,8 +15,10 @@ # -- Path setup -------------------------------------------------------------- -PROJECT_ROOT_DIR = Path(__file__).parents[1].resolve() # pylint: disable=no-member -get_scm_version = partial(get_version, root=PROJECT_ROOT_DIR) +# pylint: disable=no-member +PROJECT_ROOT_DIR = Path(__file__).parents[1].resolve() +with open(PROJECT_ROOT_DIR / "package.json", "r", encoding="utf-8") as pkg: + version = json.loads(pkg.read())['version'] # -- Project information ----------------------------------------------------- @@ -30,16 +33,7 @@ project = " ".join(github_repo_name.split("-")).title() author = f"{project} project contributors" copyright = author # pylint: disable=redefined-builtin - -# The short X.Y version -version = ".".join( - get_scm_version(local_scheme="no-local-version",).split( - "." - )[:3], -) - -# The full version, including alpha/beta/rc tags -release = get_scm_version() +release = version rst_epilog = f""" .. |project| replace:: {project} From 788d36c2fbb77f73c5a9df4887db54cf225329c5 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 12:07:44 +0100 Subject: [PATCH 380/558] Temporary remove vscode pipeline (#364) Temporary remove the broken vscode pipeline as we are going to replace it with a simple task inside the normal pipeline. --- .github/workflows/vscode.yml | 84 ------------------------------------ 1 file changed, 84 deletions(-) delete mode 100644 .github/workflows/vscode.yml diff --git a/.github/workflows/vscode.yml b/.github/workflows/vscode.yml deleted file mode 100644 index fb14f81a4..000000000 --- a/.github/workflows/vscode.yml +++ /dev/null @@ -1,84 +0,0 @@ -# This workflow tests if current language-server change breaks vscode-ansible -# extension by running extension tests with it. -name: vscode - -on: - pull_request: - workflow_call: - -jobs: - ui-test: - name: devel-vscode-ansible - runs-on: ubuntu-latest - steps: - - name: Install test dependencies - run: | - python -m pip install --user --upgrade pip - PIP_CONSTRAINTS=.config/requirements.txt python -m pip install --user -r .config/requirements.in - echo "$HOME/.local/bin" >> $GITHUB_PATH - # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#adding-a-system-path - - - name: Checkout ansible-language-server - uses: actions/checkout@v2 - - - name: Checkout vscode-ansible - uses: actions/checkout@v2 - with: - repository: ansible/vscode-ansible - path: vscode-ansible - # We will later move this folder to ../ due to below bug: - # https://github.com/actions/checkout/issues/197 - - - name: Configure node - uses: actions/setup-node@v2 - with: - node-version: 16 - - - name: Inject unreleased ansible-language-server into vscode-ansible extension - # do not try to use command below as vsce package is unable to work with symlinked modules: - # npm install --save ../ansible-language-server - run: | - set -ex - mv vscode-ansible .. - - # workaround to sync the latest version of ansible-language-server - # in the vscode-ansible package.json to avoid npm related failures while vsce packaging - python tools/version_sync.py - - npm install # update ansible-language-server package-lock.json - npm ci # Install ansible-language-server dependencies - - pushd ../vscode-ansible - npm install # update vscode-ansible package-lock.json - npm ci # Install vscode-ansible dependencies - rm -rf node_modules/@ansible/ansible-language-server - rm -rf out/server/src/* - cp -r ../ansible-language-server node_modules/@ansible/ansible-language-server - npm ls - # npm install --save ../ansible-language-server - npm run webpack - npm run vsce - # we need to bring vsix artifact inside workspace - cp *.vsix ../ansible-language-server/ - - - name: Publish vsix artifact - if: ${{ github.event.number }} - uses: actions/upload-artifact@v3 - with: - name: ansible-extension-from-pr-${{ github.event.number }}.vsix - # this action cannot archive artifacts from outside workspace "../" - # https://github.com/actions/upload-artifact/issues/246 - path: ansible-*.vsix - retention-days: 15 - - - name: Run test-ui with vscode-ansible - uses: GabrielBB/xvfb-action@v1 - with: - run: sh -c "npm run test-ui && cp *.vsix ../ansible-language-server/" - working-directory: ../vscode-ansible - - - name: Run test-e2e with vscode-ansible - uses: GabrielBB/xvfb-action@v1 - with: - run: sh -c "npm run test-e2e && cp *.vsix ../ansible-language-server/" - working-directory: ../vscode-ansible From 9f5ca2371c052bebf923eca284eae882dc76ab31 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 13:00:29 +0100 Subject: [PATCH 381/558] Spelling fixes (#365) * Minor cleanups * Spelling fixes --- .github/CONTRIBUTING.md | 30 ++++++---------------- .github/ISSUE_TEMPLATE/bug_report.yml | 13 +++++----- .github/ISSUE_TEMPLATE/feature_request.yml | 10 +++++--- .github/chronographer.yml | 11 -------- README.md | 17 ++++++------ docs/conf.py | 10 -------- 6 files changed, 29 insertions(+), 62 deletions(-) delete mode 100644 .github/chronographer.yml diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 863b52729..03e6057f8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,30 +1,16 @@ -# Contributing to Ansible Language Server +# Contributing -In order to contribute, you'll need to: +To contribute, you'll need to: 1. Fork the repository. -2. Create a branch, push your changes there. +2. Create a branch and push your changes there. -3. Send it to us as a PR. +3. Run [task] and ensure it does pass. -4. Iterate on your PR, incorporating the requested improvements and - participating in the discussions. - -Prerequisites: - -1. Have [npm]. - -2. Use [npm] to run the tests. +4. Send it to us as a PR. -3. Before sending a PR, make sure that the linters pass: - -```shell-session -$ npm run lint - -> @ansible/ansible-language-server@0.4.0 lint -> npm ci && pre-commit run -a -... -``` +5. Iterate on your PR, incorporating the requested improvements and + participating in the discussions. -[npm]: https://npmjs.org +[task]: https://taskfile.dev/ diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 13a2baee3..3e4f5f2cc 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -2,8 +2,8 @@ name: 🐛 Bug report description: Create a report to help us improve labels: -- bug -- new + - bug + - new body: - type: markdown @@ -12,7 +12,8 @@ body: **Thanks for taking the time to fill out this bug report!** - ⚠ Please, verify first that your issue is not [already reported][issues]. + ⚠ Please, verify first that your issue is not + [already reported][issues]. 🛈 **Tip:** If you are seeking community support, or want to ask a @@ -67,9 +68,9 @@ body: $ ansible --version ansible [core 2.11.1] config file = ~/.ansible.cfg - configured module search path = ['~/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] - ansible python module location = ~/venv/ansible4/lib/python3.6/site-packages/ansible - ansible collection location = ~/.ansible/collections:/usr/share/ansible/collections + configured module search path = ... + ansible python module location = ... + ansible collection location = ... executable location = ~/venv/ansible4/bin/ansible python version = 3.6.9 (default, Jul 17 2020, 12:50:27) [GCC 8.4.0] jinja version = 3.0.1 diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 77ca0cb4d..25eb54eb1 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -2,8 +2,8 @@ name: 💡 Feature request description: Suggest an idea for this project labels: -- enhancement -- new + - enhancement + - new body: - type: markdown @@ -12,7 +12,8 @@ body: **Thanks for taking the time to fill out this feature request!** - ⚠ Please, verify first that the feature you want is not [already requested][issues]. + ⚠ Please, verify first that the feature you want is not + [already requested][issues]. 🛈 **Tip:** If you are seeking community support, or want to ask a @@ -61,4 +62,5 @@ body: id: context attributes: label: Additional context - description: Add any other context or screenshots about the feature request. + description: > + Add any other context or screenshots about the feature request. diff --git a/.github/chronographer.yml b/.github/chronographer.yml deleted file mode 100644 index 24168796f..000000000 --- a/.github/chronographer.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -enforce_name: - suffix: .md -exclude: - bots: - - dependabot-preview - - dependabot - - patchback - humans: - - pyup-bot -... diff --git a/README.md b/README.md index e19fe74fe..b37a681fd 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ This language server adds support for Ansible and is currently used by the following projects: - [Ansible extension for vscode/codium](https://github.com/ansible/vscode-ansible) -- [Ansible extension for coc.nvim](https://github.com/yaegassy/coc-ansible) +- [Ansible extension for vim and neovim](https://github.com/yaegassy/coc-ansible) - [Ansible client for Emacs LSP](https://emacs-lsp.github.io/lsp-mode/page/lsp-ansible/) ## Features @@ -50,7 +50,7 @@ are shown as warnings instead. **_Note_** If `ansible-lint` is not installed/found or running `ansible-lint` results in -error it will fallback to `ansible --syntax-check` for validation. +errors, it will fall back to `ansible --syntax-check` for validation. ### Smart auto-completion @@ -58,7 +58,7 @@ error it will fallback to `ansible --syntax-check` for validation. The extension tries to detect whether the cursor is on a play, block or task etc. and provides suggestions accordingly. There are also a few other rules that -improve user experience: +improve the user experience: - the `name` property is always suggested first - on module options, the required properties are shown first, and aliases are @@ -97,8 +97,8 @@ holding `ctrl`/`cmd`. ## Standalone Usage -For standalone usage with a language server client, Ansible language server can -be installed from npm with the following command: +For standalone usage with a language-server client, the Ansible language server +can be installed from npm with the following command: ```bash npm install -g @ansible/ansible-language-server @@ -111,7 +111,7 @@ For details on settings, their descriptions and their default values refer to ## Developer support -For details on setting up development environment and debugging refer to the +For details on setting up the development environment and debugging refer to the [development document]. [development document]: @@ -133,9 +133,8 @@ For Windows users, this extension works perfectly well with extensions such as ## Known limitations - The shorthand syntax for module options (key=value pairs) is not supported. -- Only Jinja _expressions_ inside Ansible YAML files are supported. In order to - have syntax highlighting of Jinja template files, you'll need to install other - extension. +- Only Jinja _expressions_ inside Ansible YAML files are supported. To do syntax + highlighting of Jinja template files, you'll need to install other extensions. - Jinja _blocks_ (inside Ansible YAML files) are not supported yet. ## Credit diff --git a/docs/conf.py b/docs/conf.py index 75461fe81..39b88e42f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -3,15 +3,9 @@ # Ref: https://www.sphinx-doc.org/en/master/usage/configuration.html """Configuration for the Sphinx documentation generator.""" -import collections -import os import json -import sys -from functools import partial from pathlib import Path -from setuptools_scm import get_version - # -- Path setup -------------------------------------------------------------- @@ -217,10 +211,6 @@ # Example sphinx-js use: https://mozilla.github.io/fathom/ruleset.html js_language = "typescript" -# js_source_path = '../src' # default: '../' -# jsdoc_cache = # FIXME: think about cache invalidation? -# jsdoc_config_path = '../conf.json' -# root_for_relative_js_paths = js_source_path # -- Strict mode ------------------------------------------------------------- From 9ccdb80073c335f72da3ec5ff38108aa8247446e Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 13:09:51 +0100 Subject: [PATCH 382/558] Enable caching on GHA (#366) --- .github/workflows/task.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index a62d2471f..1b6da05df 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -76,6 +76,21 @@ jobs: # https://github.com/Vampire/setup-wsl#wsl-shell-command wsl-shell-command: "bash -i -euo pipefail" + - name: Enable caching + uses: actions/cache@v3 + with: + path: | + ~/.cache/npm + ~/.cache/pip + ~/.nvm/.cache + ~/Library/Caches/pip + key: > + ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles( + 'package.json', + 'package-lock.json', + '.config/requirements.txt' + ) }} + - name: Install Task if: "!contains(matrix.shell, 'wsl')" uses: arduino/setup-task@v1 From ce08eb8d3644efc2678e48ad78802649a3b223c9 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 15:41:25 +0100 Subject: [PATCH 383/558] Change release-drafter template (#368) --- .config/dictionary.txt | 1 + .github/release-drafter.yml | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 336969ea3..d2376ee15 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -65,6 +65,7 @@ patchback pkgcache podman prettierrc +preid preversion pyparsing pyup diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 114b5fc80..e591888f1 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -1,2 +1,19 @@ +--- # see https://github.com/ansible-community/devtools _extends: ansible-community/devtools +# We append `-next.0` to our drafted tags because we do not want to make a +# full release when we press "publish" on github releases. +# +# npm version prerelease --preid=next +# +# In our release pipeline we will create a pull-request that updates +# CHANGELOG.md and the version number. +# +# When this pull request is merged, we will: +# * publish to npm +# * create the correct tag (already present in package.json) +# * edit the release to point it the new tag instead of the -next.0 one +tag-template: 'v$RESOLVED_VERSION-next.0' +# instead of 2x# we use 3x to make the outcome ready to embed into CHANGELOG.md +category-template: '### $TITLE"' +template: '$CHANGES' From 33a5636b7599fd0b90eb6f29230c052c93248a1d Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 15:49:39 +0100 Subject: [PATCH 384/558] Fixed typo in release drafter config (#369) --- .github/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index e591888f1..226d169ce 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -15,5 +15,5 @@ _extends: ansible-community/devtools # * edit the release to point it the new tag instead of the -next.0 one tag-template: 'v$RESOLVED_VERSION-next.0' # instead of 2x# we use 3x to make the outcome ready to embed into CHANGELOG.md -category-template: '### $TITLE"' +category-template: '### $TITLE' template: '$CHANGES' From 0b251cdd31e37e09a00babc0e2ebfc6c875921e8 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 20 Jun 2022 16:35:42 +0100 Subject: [PATCH 385/558] Add release pipeline for generating changelog (#370) --- .github/workflows/release.yml | 33 ++++++++++++++++++++++++++++++ .gitignore | 1 + CHANGELOG.md | 9 +++------ Taskfile.yml | 8 ++++++++ cspell.config.yaml | 3 +++ tools/mk_changelog.sh | 38 +++++++++++++++++++++++++++++++++++ 6 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100755 tools/mk_changelog.sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..eb74df4e3 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,33 @@ +--- +# This workflow is generating a pull request with updated version and changelog +name: release +"on": + workflow_dispatch: + release: + types: [published] + +permissions: write-all + +jobs: + release: + name: Create a new release pull request + environment: + name: release + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + # Setup .npmrc file to publish to npm + - uses: actions/setup-node@v3 + with: + node-version: '16.x' + registry-url: 'https://registry.npmjs.org' + - name: Install Task + uses: arduino/setup-task@v1 + with: + version: 3.x + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - run: task release + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.gitignore b/.gitignore index b83c8fc74..055ca6ba2 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ change-notes-*.md .node-version .task .venv +out/next.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 6036fcfc4..a2dddffc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,14 +14,11 @@ Versioning](https://semver.org/spec/v2.0.0.html). ``` - + ## v0.7.2 (2022-05-24) diff --git a/Taskfile.yml b/Taskfile.yml index 735580155..537c0e585 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -161,3 +161,11 @@ tasks: cmds: - gh pr create interactive: true + release: + desc: Create a new release (used by CI) + vars: + DRAFT_RELEASE_NAME: + sh: gh api repos/{owner}/{repo}/releases --jq '.[0].name' + cmds: + - npm version {{.DRAFT_RELEASE_NAME}} --allow-same-version --no-commit-hooks --no-git-tag-version + - ./tools/mk_changelog.sh diff --git a/cspell.config.yaml b/cspell.config.yaml index 2819826e6..28f88e1b2 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -14,3 +14,6 @@ dictionaries: - "!cpp" ignorePaths: - .config/requirements.txt +ignoreRegExpList: + # ignore github usernames like @foo + - "@[\\w]+" diff --git a/tools/mk_changelog.sh b/tools/mk_changelog.sh new file mode 100755 index 000000000..7de3e0069 --- /dev/null +++ b/tools/mk_changelog.sh @@ -0,0 +1,38 @@ +#!/bin/bash +set -exo pipefail + +RELEASE_NAME=$(gh api 'repos/{owner}/{repo}/releases' --jq '.[0].name') +echo -e "\n## ${RELEASE_NAME}\n" > out/next.md +gh api "repos/{owner}/{repo}/releases" --jq '.[0].body' | \ + sed -e's/[[:space:]]*$//' \ + >> out/next.md + +# Remove last newline to avoid double newlines on injection +truncate -s -1 out/next.md + +# inject the temp nodes into the CHANGELOG.md +sed -i '' -e '//r out/next.md' CHANGELOG.md + +# use prettier to reformat the changelog, lik rewrapping long lines +npx prettier -w CHANGELOG.md + +# commit the release +git add package.json package-lock.json CHANGELOG.md + +# run 'task lint' to ensure validity +task lint + +# create new release branch +git checkout -b "release/${RELEASE_NAME}" + +# commit the changes +echo "Release ${RELEASE_NAME}" | cat - out/next.md | git commit --file - + +# do push the new branch +git push origin "release/${RELEASE_NAME}" + +# create pull request +gh pr create --fill + +# configure pr to merge to master when all conditions are met +gh pr merge --auto --squash From e2ab7a74d0ea259419643e0be9059d511b30b074 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 21 Jun 2022 10:15:35 +0100 Subject: [PATCH 386/558] Update release task (#373) --- Taskfile.yml | 7 +++---- tools/mk_changelog.sh | 20 ++++++++++++++++---- tools/test-setup.sh | 17 +++++++++++++++-- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/Taskfile.yml b/Taskfile.yml index 537c0e585..ea7cf15cd 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -163,9 +163,8 @@ tasks: interactive: true release: desc: Create a new release (used by CI) - vars: - DRAFT_RELEASE_NAME: - sh: gh api repos/{owner}/{repo}/releases --jq '.[0].name' + deps: + - setup cmds: - - npm version {{.DRAFT_RELEASE_NAME}} --allow-same-version --no-commit-hooks --no-git-tag-version - ./tools/mk_changelog.sh + interactive: true diff --git a/tools/mk_changelog.sh b/tools/mk_changelog.sh index 7de3e0069..b9dbcdc45 100755 --- a/tools/mk_changelog.sh +++ b/tools/mk_changelog.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -exo pipefail +set -eo pipefail RELEASE_NAME=$(gh api 'repos/{owner}/{repo}/releases' --jq '.[0].name') echo -e "\n## ${RELEASE_NAME}\n" > out/next.md @@ -16,23 +16,35 @@ sed -i '' -e '//r out/next.md' CHANGELOG.md # use prettier to reformat the changelog, lik rewrapping long lines npx prettier -w CHANGELOG.md +# update version +npm version "${RELEASE_NAME}" --allow-same-version --no-commit-hooks --no-git-tag-version + # commit the release git add package.json package-lock.json CHANGELOG.md # run 'task lint' to ensure validity -task lint +task lint --silent # create new release branch -git checkout -b "release/${RELEASE_NAME}" +git checkout -B "release/${RELEASE_NAME}" # commit the changes echo "Release ${RELEASE_NAME}" | cat - out/next.md | git commit --file - +# Unless, CI is defined we prompt for confirmation +if [[ -z ${CI+z} ]]; then + read -p "Are you sure you want to push and create pull-request? " -n 1 -r + echo # (optional) move to a new line + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + [[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 # handle exits from shell or function but don't exit interactive shell + fi +fi + # do push the new branch git push origin "release/${RELEASE_NAME}" # create pull request -gh pr create --fill +gh pr create --label skip-changelog --fill # configure pr to merge to master when all conditions are met gh pr merge --auto --squash diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 3a900662b..2f44399d2 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -29,6 +29,16 @@ if [ -f "/usr/bin/apt-get" ]; then curl git python3-venv python3-pip fi + +# install gh if missing +which gh 2>/dev/null || { + echo "Trying to install missing gh on $OS ..." + if [ "$OS" == "linux" ]; then + which dnf && sudo dnf install -y gh || true + fi + gh --version || echo "WARNING: gh cli not found and it might be needed for some commands." +} + # on WSL we want to avoid using Windows's npm (broken) if [ "$(which npm)" == '/mnt/c/Program Files/nodejs/npm' ]; then @@ -55,9 +65,12 @@ if [[ $(uname) != MINGW* ]]; then # if we are not on pure Windows fi command -v nvm >/dev/null 2>&1 || { - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash + # define its location (needed) [ -z "${NVM_DIR:-}" ] && export NVM_DIR="$HOME/.nvm"; - [ -s "${NVM_DIR:-}/nvm.sh" ] && . "${NVM_DIR:-}/nvm.sh" --silent; + # install if missing + [ ! -s "${NVM_DIR:-}/nvm.sh" ] && curl -s -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash + # activate vnm + . "${NVM_DIR:-}/nvm.sh" --silent; [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"; } From e7174cc42112a1ee4795db2a060792c5f8070cf5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jun 2022 09:37:08 +0000 Subject: [PATCH 387/558] Bump ansible-core from 2.13.0 to 2.13.1 in /.config (#371) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index d58aa2ff5..0ec7ad220 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -6,7 +6,7 @@ # alabaster==0.7.12 ansible-compat==2.1.0 -ansible-core==2.13.0 +ansible-core==2.13.1 ansible-lint==6.3.0 ansible-pygments==0.1.1 astroid==2.11.6 From 49c94f5a7b6c14976efa25fc46d5dd9080f683c4 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 21 Jun 2022 11:13:19 +0100 Subject: [PATCH 388/558] More release work (#374) --- .config/dictionary.txt | 1 + tools/mk_changelog.sh | 7 ++++++- tools/test-setup.sh | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index d2376ee15..625835e91 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -4,6 +4,7 @@ FQCN FQCNs HORIZONTALLINE Jenkinsfile +OSTYPE PYTHONHOME TLDR Taskfile diff --git a/tools/mk_changelog.sh b/tools/mk_changelog.sh index b9dbcdc45..eb3a3f92a 100755 --- a/tools/mk_changelog.sh +++ b/tools/mk_changelog.sh @@ -11,7 +11,12 @@ gh api "repos/{owner}/{repo}/releases" --jq '.[0].body' | \ truncate -s -1 out/next.md # inject the temp nodes into the CHANGELOG.md -sed -i '' -e '//r out/next.md' CHANGELOG.md +if [[ "$OSTYPE" == "darwin"* ]]; then + SED_OPTION='-i \x27\x27' +else + SED_OPTION='-i' +fi +sed $SED_OPTION -e '//r out/next.md' CHANGELOG.md # use prettier to reformat the changelog, lik rewrapping long lines npx prettier -w CHANGELOG.md diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 2f44399d2..0db1c68e0 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -73,6 +73,9 @@ command -v nvm >/dev/null 2>&1 || { . "${NVM_DIR:-}/nvm.sh" --silent; [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"; } +which npm >/dev/null 2>&1 || { + nvm install +} # Log some useful info in case of unexpected failures: uname From da97b8954c24eb64a5932a040c66aec1dbd7038c Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 21 Jun 2022 11:37:40 +0100 Subject: [PATCH 389/558] More release work (#375) --- .github/workflows/release.yml | 4 +--- Taskfile.yml | 2 +- tools/{mk_changelog.sh => release.sh} | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) rename tools/{mk_changelog.sh => release.sh} (96%) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index eb74df4e3..735e6d45a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,9 +10,7 @@ permissions: write-all jobs: release: - name: Create a new release pull request - environment: - name: release + name: Create release PR runs-on: ubuntu-latest steps: diff --git a/Taskfile.yml b/Taskfile.yml index ea7cf15cd..7eec5973f 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -166,5 +166,5 @@ tasks: deps: - setup cmds: - - ./tools/mk_changelog.sh + - ./tools/release.sh interactive: true diff --git a/tools/mk_changelog.sh b/tools/release.sh similarity index 96% rename from tools/mk_changelog.sh rename to tools/release.sh index eb3a3f92a..7828260df 100755 --- a/tools/mk_changelog.sh +++ b/tools/release.sh @@ -34,7 +34,7 @@ task lint --silent git checkout -B "release/${RELEASE_NAME}" # commit the changes -echo "Release ${RELEASE_NAME}" | cat - out/next.md | git commit --file - +echo "Release ${RELEASE_NAME}" | cat - out/next.md | git commit --author "Ansible DevTools " --file - # Unless, CI is defined we prompt for confirmation if [[ -z ${CI+z} ]]; then From 08c9cc6b285609e6d6cbb1e6b279fc5740c790c3 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 21 Jun 2022 14:00:08 +0100 Subject: [PATCH 390/558] More release work (#377) Co-authored-by: Sorin Sbarnea --- .gitignore | 1 + tools/release.sh | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 055ca6ba2..0fad06bd2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store .ignore/ node_modules *.vsix diff --git a/tools/release.sh b/tools/release.sh index 7828260df..66dfc71e3 100755 --- a/tools/release.sh +++ b/tools/release.sh @@ -1,6 +1,12 @@ #!/bin/bash set -eo pipefail +# Fail if repo is dirty +if [[ -n $(git status -s) ]]; then + echo 'ERROR: Release script requires a clean git repo.' + exit 1 +fi + RELEASE_NAME=$(gh api 'repos/{owner}/{repo}/releases' --jq '.[0].name') echo -e "\n## ${RELEASE_NAME}\n" > out/next.md gh api "repos/{owner}/{repo}/releases" --jq '.[0].body' | \ @@ -34,7 +40,9 @@ task lint --silent git checkout -B "release/${RELEASE_NAME}" # commit the changes -echo "Release ${RELEASE_NAME}" | cat - out/next.md | git commit --author "Ansible DevTools " --file - +git config user.email || git config user.email ansible-devtools@redhat.com +git config user.name || git config user.name "Ansible DevTools" +echo "Release ${RELEASE_NAME}" | cat - out/next.md | git commit --file - # Unless, CI is defined we prompt for confirmation if [[ -z ${CI+z} ]]; then From ac99bad4845ad2328138ab0c70236678b2514f84 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 21 Jun 2022 14:28:29 +0100 Subject: [PATCH 391/558] Release v0.8.0 (#379) ## v0.8.0 ### Minor Changes - Add settings for completion (#348) @fredericgiquel ### Bugfixes - Fix documentation version reading (#363) @ssbarnea - docs: add note on standalone usage (#347) @mtoohey31 - Refactor npm package (#356) @ssbarnea - Bump ansible-lint from 6.2.2 to 6.3.0 (#346) - Add check to validate mount path before passing it as an arg in EE (#345) @priyamsahoo Co-authored-by: Ansible DevTools --- CHANGELOG.md | 15 +++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2dddffc8..3141aa817 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,21 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v0.8.0 + +### Minor Changes + +- Add settings for completion (#348) @fredericgiquel + +### Bugfixes + +- Fix documentation version reading (#363) @ssbarnea +- docs: add note on standalone usage (#347) @mtoohey31 +- Refactor npm package (#356) @ssbarnea +- Bump ansible-lint from 6.2.2 to 6.3.0 (#346) +- Add check to validate mount path before passing it as an arg in EE (#345) + @priyamsahoo + ## v0.7.2 (2022-05-24) ### Bugfixes diff --git a/package-lock.json b/package-lock.json index 422958375..ab8a85467 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.7.2", + "version": "0.8.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.7.2", + "version": "0.8.0", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 895b9917e..fd16792ce 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.7.2", + "version": "0.8.0", "contributors": [ { "name": "Tomasz Maciążek", From b48fba120985c5573a8468f552598dc3aba1b090 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 21 Jun 2022 17:17:52 +0100 Subject: [PATCH 392/558] More release work (#380) Co-authored-by: Ansible DevTools --- .config/dictionary.txt | 1 + .github/workflows/publish.yml | 2 +- .github/workflows/release.yml | 6 +++++- Taskfile.yml | 6 +++--- tools/release.sh | 2 +- tools/test-setup.sh | 20 +++++++++++++------- 6 files changed, 24 insertions(+), 13 deletions(-) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 625835e91..4d08aa6d3 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -46,6 +46,7 @@ libyaml lineinfile linkcheck linkify +loglevel lxml markdownlint monospace diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 762a9cbba..5e25683d6 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -7,7 +7,7 @@ jobs: npmjs: name: Publish to npmjs.com environment: - name: release + name: publish runs-on: ubuntu-latest steps: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 735e6d45a..29df19297 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,6 +11,8 @@ permissions: write-all jobs: release: name: Create release PR + environment: + name: release runs-on: ubuntu-latest steps: @@ -28,4 +30,6 @@ jobs: - run: task release env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + # We cannot use GITHUB_TOKEN because, by design, actions performed by + # github-actions do not trigger workflows, so we need a bot. + GITHUB_TOKEN: ${{ secrets.BOT_PAT }} diff --git a/Taskfile.yml b/Taskfile.yml index 7eec5973f..a3db65d23 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -1,7 +1,6 @@ --- # see https://taskfile.dev/#/ version: "3" -output: group vars: VENV_PATH: '{{default ".venv" (env "VIRTUAL_ENV")}}' VENV_PYTHON: '{{if (eq OS "windows")}}{{.VENV_PATH}}/Scripts/python.exe{{else}}{{.VENV_PATH}}/bin/python{{end}}' @@ -13,13 +12,14 @@ tasks: default: desc: Run most commands deps: - - lint - - package + - setup env: VERSION: sh: node -p "require('./package.json').version" cmds: - bash -c '{{ .NODE_ENV }} nvm install' + - task: lint + - task: package - echo Done {{.VERSION}}! docs: desc: Build the documentation diff --git a/tools/release.sh b/tools/release.sh index 66dfc71e3..e5f7e599f 100755 --- a/tools/release.sh +++ b/tools/release.sh @@ -25,7 +25,7 @@ fi sed $SED_OPTION -e '//r out/next.md' CHANGELOG.md # use prettier to reformat the changelog, lik rewrapping long lines -npx prettier -w CHANGELOG.md +npx prettier --loglevel error -w CHANGELOG.md # update version npm version "${RELEASE_NAME}" --allow-same-version --no-commit-hooks --no-git-tag-version diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 0db1c68e0..08fb24e03 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -20,18 +20,26 @@ fi if [ -f "/usr/bin/apt-get" ]; then + if [ ! -f "/var/cache/apt/pkgcache.bin" ]; then sudo apt-get update # mandatory or other apt-get commands fail fi - # avoid outdated ansible and pipx - sudo apt-get remove -y ansible pipx || true - sudo apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ - curl git python3-venv python3-pip + INSTALL=0 + for CMD in curl git python3; do + command -v $CMD >/dev/null 2>&1 || INSTALL=1 + done + if [ "$INSTALL" -eq 1 ]; then + echo "We need sudo to install some package: python3, git, curl" + # avoid outdated ansible and pipx + sudo apt-get remove -y ansible pipx || true + sudo apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ + curl git python3-venv python3-pip + fi fi # install gh if missing -which gh 2>/dev/null || { +which gh >/dev/null 2>&1 || { echo "Trying to install missing gh on $OS ..." if [ "$OS" == "linux" ]; then which dnf && sudo dnf install -y gh || true @@ -51,8 +59,6 @@ if [[ ! -d "${VENV_PATH:-.venv}" ]]; then fi if [ -z ${VIRTUAL_ENV+x} ]; then - which -a python3 - python3 --version # shellcheck disable=SC1091 source "${VENV_PATH:-.venv}/bin/activate" fi From d0e099fce0e1b43668ee98bb4a2a5aca2051dfba Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 22 Jun 2022 15:20:05 +0100 Subject: [PATCH 393/558] More work on build scripts (#381) Co-authored-by: Ansible DevTools --- .config/dictionary.txt | 9 ++-- .gitignore | 1 + Taskfile.yml | 10 +++- tools/test-setup.sh | 118 +++++++++++++++++++++++++++++++++-------- 4 files changed, 109 insertions(+), 29 deletions(-) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 4d08aa6d3..1b41e6707 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -56,6 +56,7 @@ mynamespace neovim netcommon nocolor +noheading notest notfound npmjs @@ -66,20 +67,23 @@ parseable patchback pkgcache podman -prettierrc preid +prettierrc preversion pyparsing pyup +ro seealso setuptools showcontent +showformat sphinxcontrib stderr stdout suboption suboptions testorg +tls toctree todos towncrier @@ -95,9 +99,6 @@ wordwrap workdir xvfb yammlint -tls -ro - # sphinx: pathsep sectionauthor diff --git a/.gitignore b/.gitignore index 0fad06bd2..4f171ff07 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ change-notes-*.md .task .venv out/next.md +out/log diff --git a/Taskfile.yml b/Taskfile.yml index a3db65d23..51efafc7d 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -45,11 +45,11 @@ tasks: env: # used inside test-setup.sh OS: "{{OS}}" + ARCH: "{{ARCH}}" cmds: - ./tools/test-setup.sh - npm ci sources: - - Taskfile.yml - package.json - .config/requirements.* - setup.cfg @@ -98,12 +98,18 @@ tasks: - tools test: desc: Run all tests + vars: + ENGINE: + sh: bash -c "command -v podman docker | head -n 1" deps: - setup cmds: + - "{{.ENGINE}} pull quay.io/ansible/creator-ee:latest" + # Tests that container engine is functional and that we have the image: + - "{{.ENGINE}} run -it quay.io/ansible/creator-ee:latest ansible-lint --version" - > source {{.VENV_PATH}}/bin/activate && - which -a ansible-lint && + command -v ansible-lint && npm run test interactive: true test-node12: diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 08fb24e03..fe3634e75 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -3,6 +3,39 @@ # name and location is based on Zuul CI, which can automatically run it. # (cspell: disable-next-line) set -euo pipefail +export IMAGE=quay.io/ansible/creator-ee:latest +export PIP_LOG_FILE=out/log/pip.log + +mkdir -p out/log +# we do not want pip logs from previous runs +:> $PIP_LOG_FILE + +# Function to retrieve the version number for a specific command. If a second +# argument is passed, it will be used as return value when tool is missing. +get_version () { + if command -v $1 >/dev/null 2>&1; then + $1 --version | head -n1 | sed -r 's/^[^0-9]*([0-9][0-9\\w\\.]*).*$/\1/' + else + if [ $# -gt 1 ]; then + echo "$2" + else + exit 99 + fi + fi +} + +# Fail-fast if run on Windows or under WSL1/2 on /mnt/c because it is so slow +# that we do not support it at all. WSL use is ok, but not on mounts. +if [ "$OS" == "windows" ]; then + echo "ERROR: You cannot use Windows build tools for development, try WSL." + exit 1 +fi +if grep -qi microsoft /proc/version >/dev/null 2>&1; then + # resolve pwd symlinks and ensure than we do not run under /mnt (mount) + if [[ "$(pwd -P)" == /mnt/* ]]; then + echo "WARNING: Under WSL, you must avoid running from mounts (/mnt/*) due to critical performance issues." + fi +fi # User specific environment # shellcheck disable=SC2076 @@ -21,19 +54,21 @@ fi if [ -f "/usr/bin/apt-get" ]; then - if [ ! -f "/var/cache/apt/pkgcache.bin" ]; then - sudo apt-get update # mandatory or other apt-get commands fail - fi INSTALL=0 - for CMD in curl git python3; do - command -v $CMD >/dev/null 2>&1 || INSTALL=1 + # qemu-user-static is required by podman on arm64 + # python3-dev is needed for headers as some packages might need to compile + DEBS=(curl git python3-dev python3-venv python3-pip qemu-user-static) + for DEB in "${DEBS[@]}"; do + [[ "$(dpkg-query --show --showformat='${db:Status-Status}\n' $DEB)" != 'installed' ]] && INSTALL=1 done if [ "$INSTALL" -eq 1 ]; then - echo "We need sudo to install some package: python3, git, curl" + echo "We need sudo to install some packages: ${DEBS[@]}" + # mandatory or other apt-get commands fail + sudo apt-get update -qq -o=Dpkg::Use-Pty=0 # avoid outdated ansible and pipx sudo apt-get remove -y ansible pipx || true - sudo apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ - curl git python3-venv python3-pip + # install all required packages + sudo apt-get install -y --no-install-recommends --no-install-suggests -o=Dpkg::Use-Pty=0 ${DEBS[@]} fi fi @@ -51,7 +86,7 @@ which gh >/dev/null 2>&1 || { if [ "$(which npm)" == '/mnt/c/Program Files/nodejs/npm' ]; then curl -sL https://deb.nodesource.com/setup_16.x | sudo bash - sudo apt-get install -y -qq -o=Dpkg::Use-Pty=0 nodejs gcc g++ make + sudo apt-get install -y -qq -o=Dpkg::Use-Pty=0 nodejs gcc g++ make python3-dev fi if [[ ! -d "${VENV_PATH:-.venv}" ]]; then @@ -62,12 +97,10 @@ if [ -z ${VIRTUAL_ENV+x} ]; then # shellcheck disable=SC1091 source "${VENV_PATH:-.venv}/bin/activate" fi -python3 -m pip install -U pip +python3 -m pip install -q -U pip if [[ $(uname) != MINGW* ]]; then # if we are not on pure Windows - python3 -m pip install -c .config/requirements.txt -r .config/requirements.in - ansible --version - ansible-lint --version + python3 -m pip install -q -c .config/requirements.txt -r .config/requirements.in fi command -v nvm >/dev/null 2>&1 || { @@ -75,21 +108,60 @@ command -v nvm >/dev/null 2>&1 || { [ -z "${NVM_DIR:-}" ] && export NVM_DIR="$HOME/.nvm"; # install if missing [ ! -s "${NVM_DIR:-}/nvm.sh" ] && curl -s -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash - # activate vnm - . "${NVM_DIR:-}/nvm.sh" --silent; + # activate nvm + . "${NVM_DIR:-}/nvm.sh" [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"; } which npm >/dev/null 2>&1 || { - nvm install + nvm install stable } -# Log some useful info in case of unexpected failures: -uname -git --version -python3 --version -pre-commit --version -nvm --version -npm --version +# Detect podman and ensure that it is usable +PODMAN_VERSION="$(get_version podman null)" +if [ "$PODMAN_VERSION" != 'null' ]; then + if [[ "$(podman machine ls --format {{.Running}} --noheading)" == "false" ]]; then + echo -n "Starting podman machine " + podman machine start + while [[ "$(podman machine ls --format {{.Running}} --noheading)" != "true" ]]; do + sleep 1 + echo -n . + done + echo . + fi + # pull creator-ee + podman pull --quiet $IMAGE + # without running we will never be sure it works (no arm64 image yet) + podman run -it $IMAGE ansible-lint --version +fi + +# Create a build manifest so we can compare between builds and machines, this +# also has the role of ensuring that the required executables are present. +cat >out/log/manifest.yml < Date: Fri, 24 Jun 2022 16:46:46 +0100 Subject: [PATCH 394/558] More taskfile (#383) --- .config/dictionary.txt | 6 ++ .config/requirements.in | 1 + .config/requirements.txt | 11 ++-- .envrc | 12 ++++ .github/workflows/task.yml | 2 +- .pre-commit-config.yaml | 11 +++- .vscode/extensions.json | 1 + .vscode/settings.json | 9 +++ Taskfile.yml | 32 ++++++---- out/.gitignore | 1 + tools/release.sh | 6 +- tools/test-setup.sh | 124 ++++++++++++++++++++----------------- 12 files changed, 134 insertions(+), 82 deletions(-) create mode 100644 .envrc diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 1b41e6707..a46745730 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -29,6 +29,7 @@ compat customizer deps devel +direnv dirhtml docker doctree @@ -36,6 +37,7 @@ doctrees dunamai endfor envdir +envrc eqeqeq globbing globby @@ -65,6 +67,7 @@ nvim nvmrc parseable patchback +piptools pkgcache podman preid @@ -91,6 +94,7 @@ toxenv tsbuildinfo unshallow uuidv4 +venvs vscodeignore vsix whereis @@ -125,8 +129,10 @@ fredericgiquel ganeshrn hbenl kimbernator +koalaman priyamsahoo ssbarnea +timonwong tomaciazek webknjaz yaegassy diff --git a/.config/requirements.in b/.config/requirements.in index 111941c1b..4d73eb3a7 100644 --- a/.config/requirements.in +++ b/.config/requirements.in @@ -2,6 +2,7 @@ ansible-lint>=6.0.2 click lxml +pip-tools pre-commit pyparsing # vscode integration diff --git a/.config/requirements.txt b/.config/requirements.txt index 0ec7ad220..b5d7eda14 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,9 +1,3 @@ -# -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: -# -# pip-compile --no-annotate --output-file=.config/requirements.txt --strip-extras .config/requirements.in -# alabaster==0.7.12 ansible-compat==2.1.0 ansible-core==2.13.1 @@ -48,6 +42,8 @@ nodeenv==1.6.0 packaging==21.3 pathspec==0.9.0 pbr==5.8.1 +pep517==0.12.0 +pip-tools==6.6.2 platformdirs==2.5.1 pluggy==1.0.0 pre-commit==2.19.0 @@ -66,7 +62,6 @@ requests==2.27.1 resolvelib==0.5.4 rich==12.0.0 ruamel-yaml==0.17.21 -ruamel-yaml-clib==0.2.6 setuptools-scm==6.4.2 six==1.16.0 snowballstemmer==2.2.0 @@ -91,8 +86,10 @@ uc-micro-py==1.0.1 urllib3==1.26.9 virtualenv==20.13.3 wcmatch==8.3 +wheel==0.37.1 wrapt==1.14.1 yamllint==1.26.3 # The following packages are considered to be unsafe in a requirements file: +# pip # setuptools diff --git a/.envrc b/.envrc new file mode 100644 index 000000000..e578f9bb3 --- /dev/null +++ b/.envrc @@ -0,0 +1,12 @@ +#!/bin/bash +# Helps direnv 2.32.1+ auto activate virtualenv but we do not require +# developers to use it. +# https://github.com/direnv/direnv/wiki/Python + +# This VIRTUAL_ENV value is also configured inside .vscode/settings.json: +export HOSTNAME="${HOSTNAME:-localhost}" +export VIRTUAL_ENV="out/venvs/${HOSTNAME}" + +# Activate virtualenv (creates it if needed) +layout python +source_up 2>/dev/null || true diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 1b6da05df..353696a34 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -125,7 +125,7 @@ jobs: - run: task setup - name: task ${{ matrix.task-name }} - run: task ${{ matrix.task-name }} + run: task -v ${{ matrix.task-name }} check: # This job does nothing and is only used for the branch protection if: always() diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index df6967218..8e88f72bf 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,7 +11,15 @@ ci: # https://github.com/pre-commit-ci/issues/issues/55 - npm-ci - codecov + - shellcheck # docker not available on pre-commit.ci repos: + - repo: https://github.com/koalaman/shellcheck-precommit + rev: v0.8.0 + hooks: + - id: shellcheck + # cspell:disable-next-line + entry: docker.io/koalaman/shellcheck:v0.8.0 + args: ["--color=always"] - repo: local hooks: - id: npm-ci @@ -34,7 +42,8 @@ repos: # https://superuser.com/a/1587813/3004 entry: > bash -c '[ $( - curl --silent -o /dev/stderr -w "%{http_code}" -X POST --data-binary @codecov.yml https://codecov.io/validate + curl --silent -o /dev/stderr -w "%{http_code}" -X POST + --data-binary @codecov.yml https://codecov.io/validate ) -eq 200 ]' language: system files: "codecov.yml" diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 691d9cbed..628158192 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -4,5 +4,6 @@ "recommendations": [ "dbaeumer.vscode-eslint", "hbenl.vscode-mocha-test-adapter", + "timonwong.shellcheck", ], } diff --git a/.vscode/settings.json b/.vscode/settings.json index 5fcf4c6ce..3707441c1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,10 +13,19 @@ "**/.git": true, "**/.svn": true, "**/.hg": true, + "**/.task": true, "**/CVS": true, "**/.DS_Store": true, "**/node_modules": true, + "**/out/venvs": true, + "**/out/.doctrees": true, + "**/out/.nyc_output": true, + "**/out/coverage.lcov": true, + "**/out/docs_out": true, + "**/out/next.md": true, + "**/out/vscode-ansible": true, }, "explorerExclude.backup": null, + "python.defaultInterpreterPath": "${workspaceFolder}/out/venvs/${env:HOSTNAME}/bin/python", "mypy.configFile": ".config/mypy.ini", } diff --git a/Taskfile.yml b/Taskfile.yml index 51efafc7d..368ea7f6f 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -1,9 +1,13 @@ --- # see https://taskfile.dev/#/ version: "3" +env: &env + # basically the same thing from .envrc file: + VIRTUAL_ENV: # "{{.VIRTUAL_ENV}}" + sh: echo "${VIRTUAL_ENV:-out/venvs/${HOSTNAME:-localhost}}" vars: - VENV_PATH: '{{default ".venv" (env "VIRTUAL_ENV")}}' - VENV_PYTHON: '{{if (eq OS "windows")}}{{.VENV_PATH}}/Scripts/python.exe{{else}}{{.VENV_PATH}}/bin/python{{end}}' + HOSTNAME: + sh: echo ${HOSTNAME:-localhost} NODE_ENV: | [ -z "$NVM_DIR" ] && export NVM_DIR="$HOME/.nvm"; [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" --silent; @@ -20,6 +24,7 @@ tasks: - bash -c '{{ .NODE_ENV }} nvm install' - task: lint - task: package + - task: docs - echo Done {{.VERSION}}! docs: desc: Build the documentation @@ -27,14 +32,13 @@ tasks: sphinx_common_args: '-j auto --color -a -n -W --keep-going -T -d "../out/.doctrees" . "../out/docs_out"' deps: - setup - dir: docs cmds: # Retrieve possibly missing commits: - $(git rev-parse --is-shallow-repository) && git fetch --unshallow > /dev/null || true - git fetch --tags - npm run generate-settings-readme - - > - source ../"${VENV_PATH:-.venv}/bin/activate" && + - source $VIRTUAL_ENV/bin/activate && + cd docs && python -m sphinx -b html {{.sphinx_common_args}} && python -m sphinx -b linkcheck {{.sphinx_common_args}} && python ../tools/docs_summary.py @@ -48,12 +52,13 @@ tasks: ARCH: "{{ARCH}}" cmds: - ./tools/test-setup.sh - - npm ci sources: - package.json - .config/requirements.* - setup.cfg - tools/test-setup.sh + generates: + - out/log/manifest.yml build: desc: Build the project deps: @@ -71,8 +76,8 @@ tasks: deps: - setup cmds: - - bash -c "PIP_CONSTRAINTS= pip-compile -q --strip-extras --no-annotate .config/requirements.in -o .config/requirements.txt" - - python3 -m pre_commit autoupdate + - bash -c "PIP_CONSTRAINTS= $VIRTUAL_ENV/bin/python -m piptools compile -q --no-header --strip-extras --no-annotate .config/requirements.in -o .config/requirements.txt" + - $VIRTUAL_ENV/bin/python -m pre_commit autoupdate # bumps some developments dependencies - npx ncu -u --dep dev # running install after ncu is needed in order to update the lock file @@ -82,9 +87,10 @@ tasks: deps: - setup env: + <<: *env PRE_COMMIT_COLOR: always cmds: - - "{{.VENV_PATH}}/bin/python3 -m pre_commit run -a" + - $VIRTUAL_ENV/bin/python -m pre_commit run -a silent: true sources: - "*.*" @@ -106,9 +112,9 @@ tasks: cmds: - "{{.ENGINE}} pull quay.io/ansible/creator-ee:latest" # Tests that container engine is functional and that we have the image: - - "{{.ENGINE}} run -it quay.io/ansible/creator-ee:latest ansible-lint --version" + - "{{.ENGINE}} run -i quay.io/ansible/creator-ee:latest ansible-lint --version" - > - source {{.VENV_PATH}}/bin/activate && + source $VIRTUAL_ENV/bin/activate && command -v ansible-lint && npm run test interactive: true @@ -133,7 +139,7 @@ tasks: - setup cmds: - > - source {{.VENV_PATH}}/bin/activate && + source $VIRTUAL_ENV/bin/activate && npm run test-with-ee interactive: true test-without-ee: @@ -142,7 +148,7 @@ tasks: - setup cmds: - > - source {{.VENV_PATH}}/bin/activate && + source $VIRTUAL_ENV/bin/activate && npm run test-without-ee interactive: true package: diff --git a/out/.gitignore b/out/.gitignore index e69de29bb..1eaab771c 100644 --- a/out/.gitignore +++ b/out/.gitignore @@ -0,0 +1 @@ +venvs diff --git a/tools/release.sh b/tools/release.sh index e5f7e599f..f33d9acff 100755 --- a/tools/release.sh +++ b/tools/release.sh @@ -17,12 +17,12 @@ gh api "repos/{owner}/{repo}/releases" --jq '.[0].body' | \ truncate -s -1 out/next.md # inject the temp nodes into the CHANGELOG.md -if [[ "$OSTYPE" == "darwin"* ]]; then +if [[ "${OSTYPE}" == "darwin"* ]]; then SED_OPTION='-i \x27\x27' else SED_OPTION='-i' fi -sed $SED_OPTION -e '//r out/next.md' CHANGELOG.md +sed "${SED_OPTION}" -e '//r out/next.md' CHANGELOG.md # use prettier to reformat the changelog, lik rewrapping long lines npx prettier --loglevel error -w CHANGELOG.md @@ -49,7 +49,7 @@ if [[ -z ${CI+z} ]]; then read -p "Are you sure you want to push and create pull-request? " -n 1 -r echo # (optional) move to a new line if [[ ! $REPLY =~ ^[Yy]$ ]]; then - [[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 # handle exits from shell or function but don't exit interactive shell + [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 # handle exits from shell or function but don't exit interactive shell fi fi diff --git a/tools/test-setup.sh b/tools/test-setup.sh index fe3634e75..7736bf94c 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -1,168 +1,178 @@ #!/bin/bash +# # This tool is used to setup the environment for running the tests. Its name # name and location is based on Zuul CI, which can automatically run it. # (cspell: disable-next-line) set -euo pipefail -export IMAGE=quay.io/ansible/creator-ee:latest -export PIP_LOG_FILE=out/log/pip.log + +IMAGE=quay.io/ansible/creator-ee:latest +PIP_LOG_FILE=out/log/pip.log +HOSTNAME="${HOSTNAME:-localhost}" +ERR=0 +EE_ANSIBLE_VERSION=null +EE_ANSIBLE_LINT_VERSION=null mkdir -p out/log # we do not want pip logs from previous runs -:> $PIP_LOG_FILE +:> "${PIP_LOG_FILE}" # Function to retrieve the version number for a specific command. If a second # argument is passed, it will be used as return value when tool is missing. get_version () { - if command -v $1 >/dev/null 2>&1; then - $1 --version | head -n1 | sed -r 's/^[^0-9]*([0-9][0-9\\w\\.]*).*$/\1/' - else - if [ $# -gt 1 ]; then - echo "$2" - else - exit 99 + if command -v "$1" >/dev/null 2>&1; then + _cmd=("${@:1}") + # if we did not pass any arguments, we add --version ourselves: + if [[ $# -eq 1 ]]; then + _cmd+=('--version') fi + "${_cmd[@]}" | head -n1 | sed -r 's/^[^0-9]*([0-9][0-9\\w\\.]*).*$/\1/' + else + >&2 echo "ERROR $? running: $*" + return 99 fi } # Fail-fast if run on Windows or under WSL1/2 on /mnt/c because it is so slow # that we do not support it at all. WSL use is ok, but not on mounts. -if [ "$OS" == "windows" ]; then +if [[ "${OS:-}" == "windows" ]]; then echo "ERROR: You cannot use Windows build tools for development, try WSL." exit 1 fi if grep -qi microsoft /proc/version >/dev/null 2>&1; then # resolve pwd symlinks and ensure than we do not run under /mnt (mount) - if [[ "$(pwd -P)" == /mnt/* ]]; then + if [[ "$(pwd -P || true)" == /mnt/* ]]; then echo "WARNING: Under WSL, you must avoid running from mounts (/mnt/*) due to critical performance issues." fi fi # User specific environment -# shellcheck disable=SC2076 -if ! [[ "$PATH" =~ "$HOME/.local/bin" ]]; then - cat >>"$HOME/.bashrc" <>"${HOME}/.bashrc" </dev/null 2>&1 || { - echo "Trying to install missing gh on $OS ..." - if [ "$OS" == "linux" ]; then - which dnf && sudo dnf install -y gh || true +command -v gh >/dev/null 2>&1 || { + echo "Trying to install missing gh on ${OS} ..." + if [[ "${OS}" == "linux" ]]; then + command -v dnf && sudo dnf install -y gh fi gh --version || echo "WARNING: gh cli not found and it might be needed for some commands." } # on WSL we want to avoid using Windows's npm (broken) -if [ "$(which npm)" == '/mnt/c/Program Files/nodejs/npm' ]; then - +if [[ "$(command -v npm || true)" == '/mnt/c/Program Files/nodejs/npm' ]]; then curl -sL https://deb.nodesource.com/setup_16.x | sudo bash sudo apt-get install -y -qq -o=Dpkg::Use-Pty=0 nodejs gcc g++ make python3-dev fi -if [[ ! -d "${VENV_PATH:-.venv}" ]]; then - python3 -m venv "${VENV_PATH:-.venv}" -fi -if [ -z ${VIRTUAL_ENV+x} ]; then - # shellcheck disable=SC1091 - source "${VENV_PATH:-.venv}/bin/activate" +VIRTUAL_ENV=${VIRTUAL_ENV:-out/venvs/${HOSTNAME}} +if [[ ! -d "${VIRTUAL_ENV}" ]]; then + python3 -m venv "${VIRTUAL_ENV}" fi +# shellcheck disable=SC1091 +. "${VIRTUAL_ENV}/bin/activate" + python3 -m pip install -q -U pip -if [[ $(uname) != MINGW* ]]; then # if we are not on pure Windows +if [[ $(uname || true) != MINGW* ]]; then # if we are not on pure Windows python3 -m pip install -q -c .config/requirements.txt -r .config/requirements.in fi command -v nvm >/dev/null 2>&1 || { # define its location (needed) - [ -z "${NVM_DIR:-}" ] && export NVM_DIR="$HOME/.nvm"; + [[ -z "${NVM_DIR:-}" ]] && export NVM_DIR="${HOME}/.nvm"; # install if missing - [ ! -s "${NVM_DIR:-}/nvm.sh" ] && curl -s -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash + [[ ! -s "${NVM_DIR:-}/nvm.sh" ]] && curl -s -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash # activate nvm + # shellcheck disable=1091 . "${NVM_DIR:-}/nvm.sh" - [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"; + # shellcheck disable=1091 + [[ -s "/usr/local/opt/nvm/nvm.sh" ]] && . "/usr/local/opt/nvm/nvm.sh"; } -which npm >/dev/null 2>&1 || { +command -v npm >/dev/null 2>&1 || { nvm install stable } # Detect podman and ensure that it is usable -PODMAN_VERSION="$(get_version podman null)" -if [ "$PODMAN_VERSION" != 'null' ]; then - if [[ "$(podman machine ls --format {{.Running}} --noheading)" == "false" ]]; then +PODMAN_VERSION="$(get_version podman || echo null)" +if [[ "${PODMAN_VERSION}" != 'null' ]]; then + if [[ "$(podman machine ls --format '{{.Running}}' --noheading || true)" == "false" ]]; then echo -n "Starting podman machine " podman machine start - while [[ "$(podman machine ls --format {{.Running}} --noheading)" != "true" ]]; do + while [[ "$(podman machine ls --format '{{.Running}}' --noheading || true)" != "true" ]]; do sleep 1 echo -n . done echo . fi - # pull creator-ee - podman pull --quiet $IMAGE + podman pull --quiet "${IMAGE}" >/dev/null # without running we will never be sure it works (no arm64 image yet) - podman run -it $IMAGE ansible-lint --version + EE_ANSIBLE_VERSION=$(get_version podman run -i ${IMAGE} ansible --version) || ERR=$? + EE_ANSIBLE_LINT_VERSION=$(get_version podman run -i ${IMAGE} ansible-lint --version) || ERR=$? fi # Create a build manifest so we can compare between builds and machines, this # also has the role of ensuring that the required executables are present. +# cat >out/log/manifest.yml < out/log/manifest.yml and returned ${ERR} ===" +exit "${ERR}" From 9bd02ec0f1cef0df51ff1b65d486f0d19ea03a3e Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sat, 25 Jun 2022 14:44:21 +0100 Subject: [PATCH 395/558] Update dependencies (#384) --- package-lock.json | 2804 +++++++++++++++++++-------------------------- package.json | 6 +- 2 files changed, 1172 insertions(+), 1638 deletions(-) diff --git a/package-lock.json b/package-lock.json index ab8a85467..1e45b2798 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,15 +31,15 @@ "@types/node": "^18.0.0", "@types/uuid": "^8.3.4", "@types/vscode": "^1.68.0", - "@typescript-eslint/eslint-plugin": "^5.28.0", - "@typescript-eslint/parser": "^5.28.0", + "@typescript-eslint/eslint-plugin": "^5.29.0", + "@typescript-eslint/parser": "^5.29.0", "chai": "^4.3.6", "eslint": "^8.18.0", "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", "mocha": "^10.0.0", - "npm-check-updates": "^14.0.1", + "npm-check-updates": "^14.1.1", "nyc": "^15.1.0", "prettier": "^2.7.1", "rimraf": "^3.0.2", @@ -51,36 +51,61 @@ "npm": ">=7.11.2" } }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", + "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", + "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "json5": "^2.2.1", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -90,18 +115,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -111,47 +124,43 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", "semver": "^6.3.0" }, "engines": { @@ -170,177 +179,134 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "node_modules/@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "dependencies": { - "@babel/types": "^7.16.0" + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", "dev": true, "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.18.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", "dev": true, "dependencies": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -386,13 +352,13 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -401,7 +367,7 @@ "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" @@ -420,9 +386,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", - "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -432,44 +398,33 @@ } }, "node_modules/@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.16.0" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", - "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.3", - "@babel/types": "^7.16.0", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -477,18 +432,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -499,12 +442,12 @@ } }, "node_modules/@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -523,6 +466,16 @@ "node": ">=12" } }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -543,24 +496,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@flatten-js/interval-tree": { "version": "1.0.18", "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.18.tgz", @@ -608,13 +543,13 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "sprintf-js": "~1.0.2" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { @@ -630,6 +565,19 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -687,6 +635,19 @@ "node": ">=8" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", @@ -696,6 +657,15 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.13", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", @@ -703,9 +673,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -780,15 +750,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", - "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/@npmcli/installed-package-contents": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", @@ -840,14 +801,14 @@ } }, "node_modules/@npmcli/run-script": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", - "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.3.tgz", + "integrity": "sha512-xb47c2KMkn6ERw2AwPPGKIITbWoXOT1yDV5rU3SYeC1vksYOodbgN0pnOptIVnRgS2e9G8R7BVDVm8lWp92unQ==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^8.4.1", + "node-gyp": "^9.0.0", "read-package-json-fast": "^2.0.3" }, "engines": { @@ -876,36 +837,36 @@ } }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", "dev": true }, "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true }, "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true }, "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, "node_modules/@types/chai": { @@ -973,14 +934,14 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.28.0.tgz", - "integrity": "sha512-DXVU6Cg29H2M6EybqSg2A+x8DgO9TCUBRp4QEXQHJceLS7ogVDP0g3Lkg/SZCqcvkAP/RruuQqK0gdlkgmhSUA==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", + "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.28.0", - "@typescript-eslint/type-utils": "5.28.0", - "@typescript-eslint/utils": "5.28.0", + "@typescript-eslint/scope-manager": "5.29.0", + "@typescript-eslint/type-utils": "5.29.0", + "@typescript-eslint/utils": "5.29.0", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -1006,14 +967,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.28.0.tgz", - "integrity": "sha512-ekqoNRNK1lAcKhZESN/PdpVsWbP9jtiNqzFWkp/yAUdZvJalw2heCYuqRmM5eUJSIYEkgq5sGOjq+ZqsLMjtRA==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz", + "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.28.0", - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/typescript-estree": "5.28.0", + "@typescript-eslint/scope-manager": "5.29.0", + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/typescript-estree": "5.29.0", "debug": "^4.3.4" }, "engines": { @@ -1033,13 +994,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.28.0.tgz", - "integrity": "sha512-LeBLTqF/he1Z+boRhSqnso6YrzcKMTQ8bO/YKEe+6+O/JGof9M0g3IJlIsqfrK/6K03MlFIlycbf1uQR1IjE+w==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", + "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/visitor-keys": "5.28.0" + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/visitor-keys": "5.29.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1050,12 +1011,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.28.0.tgz", - "integrity": "sha512-SyKjKh4CXPglueyC6ceAFytjYWMoPHMswPQae236zqe1YbhvCVQyIawesYywGiu98L9DwrxsBN69vGIVxJ4mQQ==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz", + "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.28.0", + "@typescript-eslint/utils": "5.29.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1076,9 +1037,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.28.0.tgz", - "integrity": "sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", + "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1089,13 +1050,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.28.0.tgz", - "integrity": "sha512-9GX+GfpV+F4hdTtYc6OV9ZkyYilGXPmQpm6AThInpBmKJEyRSIjORJd1G9+bknb7OTFYL+Vd4FBJAO6T78OVqA==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", + "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/visitor-keys": "5.28.0", + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/visitor-keys": "5.29.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1116,15 +1077,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.28.0.tgz", - "integrity": "sha512-E60N5L0fjv7iPJV3UGc4EC+A3Lcj4jle9zzR0gW7vXhflO7/J29kwiTGITA2RlrmPokKiZbBy2DgaclCaEUs6g==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", + "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.28.0", - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/typescript-estree": "5.28.0", + "@typescript-eslint/scope-manager": "5.29.0", + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/typescript-estree": "5.29.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -1140,12 +1101,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.28.0.tgz", - "integrity": "sha512-BtfP1vCor8cWacovzzPFOoeW4kBQxzmhxGoOpt0v1SFvG+nJ0cWaVdJk7cky1ArTcFHHKNIxyo2LLr3oNkSuXA==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", + "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/types": "5.29.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1329,7 +1290,7 @@ "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true }, "node_modules/are-we-there-yet": { @@ -1352,13 +1313,10 @@ "dev": true }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/array-union": { "version": "2.1.0", @@ -1414,6 +1372,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1443,26 +1413,31 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", + "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001358", + "electron-to-chromium": "^1.4.164", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.0" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, "node_modules/buffer-from": { @@ -1509,30 +1484,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", - "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/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/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -1600,26 +1551,29 @@ } }, "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001282", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz", - "integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg==", + "version": "1.0.30001359", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", + "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] }, "node_modules/chai": { "version": "4.3.6", @@ -1658,7 +1612,7 @@ "node_modules/check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true, "engines": { "node": "*" @@ -1691,6 +1645,18 @@ "fsevents": "~2.3.2" } }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -1709,7 +1675,7 @@ "node_modules/cint": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/cint/-/cint-8.2.1.tgz", - "integrity": "sha1-cDhrG0jidz0NYxZqVa/5TvRFahI=", + "integrity": "sha512-gyWqJHXgDFPNx7PEyFJotutav+al92TTC3dWlMFyTETlOyKBQMZb7Cetqmj3GlrnSILHwSJRwf4mIGzc7C5lXw==", "dev": true }, "node_modules/clean-stack": { @@ -1759,7 +1725,7 @@ "node_modules/clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "dev": true, "dependencies": { "mimic-response": "^1.0.0" @@ -1795,7 +1761,7 @@ "node_modules/colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", "dev": true, "engines": { "node": ">=0.1.90" @@ -1813,13 +1779,13 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "node_modules/configstore": { @@ -1854,12 +1820,6 @@ "safe-buffer": "~5.1.1" } }, - "node_modules/convert-source-map/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/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -1907,21 +1867,18 @@ } }, "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "dependencies": { "mimic-response": "^1.0.0" @@ -2038,13 +1995,13 @@ "node_modules/duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.0.tgz", - "integrity": "sha512-+oXCt6SaIu8EmFTPx8wNGSB0tHQ5biDscnlf6Uxuz17e9CjzMRtGk9B8705aMPnj0iWr3iC74WuIkngCsLElmA==", + "version": "1.4.169", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.169.tgz", + "integrity": "sha512-Yb7UFva1sLlAaRyCkgoFF3qWvwZacFDtsGKi44rZsk8vnhL0DMhsUdhI4Dz9CCJQfftncDMGSI3AYiDtg8mD/w==", "dev": true }, "node_modules/emoji-regex": { @@ -2236,12 +2193,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", @@ -2264,30 +2215,6 @@ "node": ">=4.0" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/espree": { "version": "9.3.2", "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", @@ -2328,9 +2255,9 @@ } }, "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -2397,6 +2324,18 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2406,7 +2345,7 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "node_modules/fast-memoize": { @@ -2504,9 +2443,9 @@ } }, "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "node_modules/foreground-child": { @@ -2566,7 +2505,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", @@ -2591,7 +2530,7 @@ "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, "node_modules/fuse.js": { @@ -2643,7 +2582,7 @@ "node_modules/get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "dev": true, "engines": { "node": "*" @@ -2683,16 +2622,15 @@ } }, "node_modules/glob": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz", - "integrity": "sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "once": "^1.3.0" }, "engines": { "node": ">=12" @@ -2702,15 +2640,15 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/glob/node_modules/brace-expansion": { @@ -2722,9 +2660,9 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2814,9 +2752,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "node_modules/handlebars": { @@ -2922,15 +2860,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", - "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -2944,12 +2873,12 @@ "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "dependencies": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" }, @@ -3053,7 +2982,7 @@ "node_modules/import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "dev": true, "engines": { "node": ">=4" @@ -3062,7 +2991,7 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { "node": ">=0.8.19" @@ -3086,7 +3015,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3150,7 +3079,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3262,7 +3191,7 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, "node_modules/is-unicode-supported": { @@ -3295,7 +3224,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "node_modules/istanbul-lib-coverage": { @@ -3344,31 +3273,32 @@ } }, "node_modules/istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "dependencies": { "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", "p-map": "^3.0.0", "rimraf": "^3.0.0", - "uuid": "^3.3.3" + "uuid": "^8.3.2" }, "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-processinfo/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.", + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, - "bin": { - "uuid": "bin/uuid" + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/istanbul-lib-report": { @@ -3400,9 +3330,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -3415,7 +3345,7 @@ "node_modules/jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", "dev": true }, "node_modules/js-tokens": { @@ -3425,13 +3355,12 @@ "dev": true }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -3452,7 +3381,7 @@ "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", "dev": true }, "node_modules/json-parse-even-better-errors": { @@ -3464,7 +3393,7 @@ "node_modules/json-parse-helpfulerror": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", - "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", + "integrity": "sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==", "dev": true, "dependencies": { "jju": "^1.1.0" @@ -3479,17 +3408,14 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -3500,7 +3426,7 @@ "node_modules/jsonlines": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsonlines/-/jsonlines-0.1.1.tgz", - "integrity": "sha1-T80kbcXQ44aRkHxEqwAveC0dlMw=", + "integrity": "sha512-ekDrAGso79Cvf+dtm+mL8OBI2bmAOt3gssYs833De/C9NmIpWDWyUO4zPgB5x2/OhY366dkhgfPMYfwZF7yOZA==", "dev": true }, "node_modules/jsonparse": { @@ -3522,9 +3448,9 @@ } }, "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", + "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", "dev": true, "engines": { "node": ">=6" @@ -3578,7 +3504,7 @@ "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, "node_modules/lodash.merge": { @@ -3622,15 +3548,12 @@ } }, "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==", + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", + "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/make-dir": { @@ -3664,129 +3587,30 @@ "dev": true }, "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==", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", + "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", "dev": true, "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/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/make-fetch-happen/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==", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/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/make-fetch-happen/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/make-fetch-happen/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/make-fetch-happen/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" + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" }, "engines": { - "node": ">= 8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/merge2": { @@ -3799,13 +3623,13 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" @@ -3839,9 +3663,9 @@ "dev": true }, "node_modules/minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.3.tgz", + "integrity": "sha512-N0BOsdFAlNRfmwMhjAsLVWOk7Ljmeb39iqFlsV1At+jqRhSUP9yeof8FyJu4imaJiSUp8vQebWD/guZwGQC8iA==", "dev": true, "dependencies": { "yallist": "^4.0.0" @@ -3863,20 +3687,20 @@ } }, "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, "dependencies": { - "minipass": "^3.1.0", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { - "encoding": "^0.1.12" + "encoding": "^0.1.13" } }, "node_modules/minipass-flush": { @@ -3991,12 +3815,6 @@ "url": "https://opencollective.com/mochajs" } }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -4029,18 +3847,6 @@ "node": "*" } }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -4104,7 +3910,7 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "node_modules/negotiator": { @@ -4123,15 +3929,15 @@ "dev": true }, "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==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", + "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", "dev": true, "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", + "make-fetch-happen": "^10.0.3", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", @@ -4143,7 +3949,7 @@ "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 10.12.0" + "node": "^12.22 || ^14.13 || >=16" } }, "node_modules/node-gyp/node_modules/glob": { @@ -4179,9 +3985,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", "dev": true }, "node_modules/nopt": { @@ -4242,9 +4048,9 @@ } }, "node_modules/npm-check-updates": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-14.0.1.tgz", - "integrity": "sha512-CjHKxcJur/OiVc2GKBagUrzDsXL8JJC71rNVv2mC7eNA6w/ebe3POx9x46ay4p3woSxJOa7hYWNn1UwL7jgHug==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-14.1.1.tgz", + "integrity": "sha512-lVGckd/SR9lpCPV3WhY/LbhqQRV6V7jYkN5wSp49P+ER2xCgKGewE1i5kSCBBnNG91tcQo9CfBGhX1KY9t7DCg==", "dev": true, "dependencies": { "chalk": "^4.1.2", @@ -4265,7 +4071,7 @@ "pacote": "^13.6.0", "parse-github-url": "^1.0.2", "progress": "^2.0.3", - "prompts": "^2.4.2", + "prompts-ncu": "^2.5.0", "rc-config-loader": "^4.1.0", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", @@ -4305,21 +4111,6 @@ "node": ">=10" } }, - "node_modules/npm-check-updates/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/npm-check-updates/node_modules/yaml": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", @@ -4348,12 +4139,13 @@ "dev": true }, "node_modules/npm-package-arg": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.2.tgz", - "integrity": "sha512-v/miORuX8cndiOheW8p2moNuPJ7QhcFh9WGlTorruG8hXSA23vMTEp5hTCmDxic0nD8KHhj/NQgFuySD3GYY3g==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" }, @@ -4412,96 +4204,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm-registry-fetch/node_modules/lru-cache": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", - "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.7.tgz", - "integrity": "sha512-J/2xa2+7zlIUKqfyXDCXFpH3ypxO4k3rgkZHPSZkyUYcBT/hM80M3oyKLM/9dVriZFiGeGGS2Ei+0v2zfhqj3Q==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", - "dev": true, - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/npm-registry-fetch/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/npmlog": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", @@ -4558,15 +4260,6 @@ "node": ">=8.9" } }, - "node_modules/nyc/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/nyc/node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -4578,15 +4271,6 @@ "wrap-ansi": "^6.2.0" } }, - "node_modules/nyc/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -4601,15 +4285,15 @@ } }, "node_modules/nyc/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "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.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -4659,6 +4343,18 @@ "node": ">=8" } }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nyc/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -4726,7 +4422,7 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } @@ -4788,15 +4484,18 @@ } }, "node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "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": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -4848,15 +4547,15 @@ } }, "node_modules/pacote": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.0.tgz", - "integrity": "sha512-zHmuCwG4+QKnj47LFlW3LmArwKoglx2k5xtADiMCivVWPgNRP5QyLDGOIjGjwOe61lhl1rO63m/VxT16pEHLWg==", + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", + "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", "dev": true, "dependencies": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^3.0.1", + "@npmcli/run-script": "^4.1.0", "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", @@ -4918,7 +4617,8 @@ "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4957,9 +4657,9 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { "node": ">=8.6" @@ -5044,7 +4744,7 @@ "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true, "engines": { "node": ">=4" @@ -5114,13 +4814,13 @@ "node": ">=10" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/prompts-ncu": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-2.5.0.tgz", + "integrity": "sha512-a9WdInrG7zSlmfzDszmF3r8O4grZRI8+ChV0LtagHRT4dH7F+kxkrwFPGxeS83FZgAGBx3AXoLP+c4kGJb1P3w==", "dev": true, "dependencies": { - "kleur": "^3.0.3", + "kleur": "^4.0.1", "sisteransi": "^1.0.5" }, "engines": { @@ -5214,24 +4914,6 @@ "require-from-string": "^2.0.2" } }, - "node_modules/rc-config-loader/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/rc-config-loader/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/rc/node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", @@ -5241,7 +4923,7 @@ "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5314,12 +4996,12 @@ } }, "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dev": true, "dependencies": { - "rc": "^1.2.8" + "rc": "1.2.8" }, "engines": { "node": ">=6.0.0" @@ -5340,7 +5022,7 @@ "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, "dependencies": { "es6-error": "^4.0.1" @@ -5361,7 +5043,7 @@ "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5394,7 +5076,7 @@ "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, "dependencies": { "lowercase-keys": "^1.0.0" @@ -5435,15 +5117,15 @@ } }, "node_modules/rimraf/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "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.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -5478,24 +5160,10 @@ } }, "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "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", @@ -5546,6 +5214,18 @@ "integrity": "sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA==", "dev": true }, + "node_modules/semver/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/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -5558,7 +5238,7 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "node_modules/shebang-command": { @@ -5628,9 +5308,9 @@ } }, "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==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "dependencies": { "agent-base": "^6.0.2", @@ -5721,7 +5401,7 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "node_modules/ssri": { @@ -5745,6 +5425,26 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -5836,15 +5536,15 @@ } }, "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "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.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -5858,13 +5558,13 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, "engines": { "node": ">=4" @@ -6020,9 +5720,9 @@ } }, "node_modules/uglify-js": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", - "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.1.tgz", + "integrity": "sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ==", "dev": true, "optional": true, "bin": { @@ -6062,6 +5762,32 @@ "node": ">=8" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -6102,7 +5828,7 @@ "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "dependencies": { "prepend-http": "^2.0.0" @@ -6188,9 +5914,9 @@ } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz", - "integrity": "sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.5.tgz", + "integrity": "sha512-1ah7zyQjKBudnMiHbZmxz5bYNM9KKZYz+5VQLj+yr8l+9w3g+WAhCkUkWbhMEdC5u0ub4Ndiye/fDyS8ghIKQg==" }, "node_modules/vscode-languageserver-types": { "version": "3.16.0", @@ -6220,7 +5946,7 @@ "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, "node_modules/wide-align": { @@ -6256,7 +5982,7 @@ "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, "node_modules/workerpool": { @@ -6285,7 +6011,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -6373,6 +6099,30 @@ "node": ">=10" } }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -6396,86 +6146,95 @@ } }, "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, "@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", + "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", "dev": true }, "@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", + "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "json5": "^2.2.1", + "semver": "^6.3.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, "@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", "dev": true, "requires": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } } } }, "@babel/helper-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", "semver": "^6.3.0" }, "dependencies": { @@ -6487,138 +6246,104 @@ } } }, - "@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - } + "@babel/helper-environment-visitor": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "dev": true }, - "@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" } }, "@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" } }, "@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.18.2" } }, "@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", "dev": true }, "@babel/helpers": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", "dev": true, "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" } }, "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -6655,19 +6380,19 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { @@ -6682,59 +6407,40 @@ } }, "@babel/parser": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", - "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", "dev": true }, "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - } + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/traverse": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", - "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.3", - "@babel/types": "^7.16.0", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -6744,12 +6450,12 @@ } }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, @@ -6760,6 +6466,18 @@ "dev": true, "requires": { "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } } }, "@eslint/eslintrc": { @@ -6777,23 +6495,6 @@ "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - } } }, "@flatten-js/interval-tree": { @@ -6837,11 +6538,14 @@ "resolve-from": "^5.0.0" }, "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } }, "find-up": { "version": "4.1.0", @@ -6853,6 +6557,16 @@ "path-exists": "^4.0.0" } }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -6894,12 +6608,28 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@jridgewell/resolve-uri": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", "dev": true }, + "@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "dev": true + }, "@jridgewell/sourcemap-codec": { "version": "1.4.13", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", @@ -6907,9 +6637,9 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", @@ -6967,14 +6697,6 @@ "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^2.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", - "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", - "dev": true - } } }, "@npmcli/installed-package-contents": { @@ -7013,14 +6735,14 @@ } }, "@npmcli/run-script": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", - "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.3.tgz", + "integrity": "sha512-xb47c2KMkn6ERw2AwPPGKIITbWoXOT1yDV5rU3SYeC1vksYOodbgN0pnOptIVnRgS2e9G8R7BVDVm8lWp92unQ==", "dev": true, "requires": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^8.4.1", + "node-gyp": "^9.0.0", "read-package-json-fast": "^2.0.3" } }, @@ -7040,33 +6762,33 @@ } }, "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true }, "@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", "dev": true }, "@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true }, "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true }, "@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, "@types/chai": { @@ -7134,14 +6856,14 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.28.0.tgz", - "integrity": "sha512-DXVU6Cg29H2M6EybqSg2A+x8DgO9TCUBRp4QEXQHJceLS7ogVDP0g3Lkg/SZCqcvkAP/RruuQqK0gdlkgmhSUA==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", + "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.28.0", - "@typescript-eslint/type-utils": "5.28.0", - "@typescript-eslint/utils": "5.28.0", + "@typescript-eslint/scope-manager": "5.29.0", + "@typescript-eslint/type-utils": "5.29.0", + "@typescript-eslint/utils": "5.29.0", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -7151,52 +6873,52 @@ } }, "@typescript-eslint/parser": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.28.0.tgz", - "integrity": "sha512-ekqoNRNK1lAcKhZESN/PdpVsWbP9jtiNqzFWkp/yAUdZvJalw2heCYuqRmM5eUJSIYEkgq5sGOjq+ZqsLMjtRA==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz", + "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.28.0", - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/typescript-estree": "5.28.0", + "@typescript-eslint/scope-manager": "5.29.0", + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/typescript-estree": "5.29.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.28.0.tgz", - "integrity": "sha512-LeBLTqF/he1Z+boRhSqnso6YrzcKMTQ8bO/YKEe+6+O/JGof9M0g3IJlIsqfrK/6K03MlFIlycbf1uQR1IjE+w==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", + "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/visitor-keys": "5.28.0" + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/visitor-keys": "5.29.0" } }, "@typescript-eslint/type-utils": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.28.0.tgz", - "integrity": "sha512-SyKjKh4CXPglueyC6ceAFytjYWMoPHMswPQae236zqe1YbhvCVQyIawesYywGiu98L9DwrxsBN69vGIVxJ4mQQ==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz", + "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.28.0", + "@typescript-eslint/utils": "5.29.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.28.0.tgz", - "integrity": "sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", + "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.28.0.tgz", - "integrity": "sha512-9GX+GfpV+F4hdTtYc6OV9ZkyYilGXPmQpm6AThInpBmKJEyRSIjORJd1G9+bknb7OTFYL+Vd4FBJAO6T78OVqA==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", + "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/visitor-keys": "5.28.0", + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/visitor-keys": "5.29.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7205,26 +6927,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.28.0.tgz", - "integrity": "sha512-E60N5L0fjv7iPJV3UGc4EC+A3Lcj4jle9zzR0gW7vXhflO7/J29kwiTGITA2RlrmPokKiZbBy2DgaclCaEUs6g==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", + "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.28.0", - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/typescript-estree": "5.28.0", + "@typescript-eslint/scope-manager": "5.29.0", + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/typescript-estree": "5.29.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.28.0.tgz", - "integrity": "sha512-BtfP1vCor8cWacovzzPFOoeW4kBQxzmhxGoOpt0v1SFvG+nJ0cWaVdJk7cky1ArTcFHHKNIxyo2LLr3oNkSuXA==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", + "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/types": "5.29.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -7359,7 +7081,7 @@ "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true }, "are-we-there-yet": { @@ -7379,13 +7101,10 @@ "dev": true }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "array-union": { "version": "2.1.0", @@ -7424,6 +7143,14 @@ "type-fest": "^0.20.2", "widest-line": "^3.1.0", "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } } }, "brace-expansion": { @@ -7452,16 +7179,15 @@ "dev": true }, "browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", + "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001358", + "electron-to-chromium": "^1.4.164", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.0" } }, "buffer-from": { @@ -7503,23 +7229,6 @@ "ssri": "^9.0.0", "tar": "^6.1.11", "unique-filename": "^1.1.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", - "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", - "dev": true - }, - "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, - "requires": { - "aggregate-error": "^3.0.0" - } - } } }, "cacheable-request": { @@ -7573,15 +7282,15 @@ "dev": true }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "caniuse-lite": { - "version": "1.0.30001282", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz", - "integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg==", + "version": "1.0.30001359", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", + "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==", "dev": true }, "chai": { @@ -7612,7 +7321,7 @@ "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true }, "chokidar": { @@ -7629,6 +7338,17 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "chownr": { @@ -7646,7 +7366,7 @@ "cint": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/cint/-/cint-8.2.1.tgz", - "integrity": "sha1-cDhrG0jidz0NYxZqVa/5TvRFahI=", + "integrity": "sha512-gyWqJHXgDFPNx7PEyFJotutav+al92TTC3dWlMFyTETlOyKBQMZb7Cetqmj3GlrnSILHwSJRwf4mIGzc7C5lXw==", "dev": true }, "clean-stack": { @@ -7684,7 +7404,7 @@ "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "dev": true, "requires": { "mimic-response": "^1.0.0" @@ -7714,7 +7434,7 @@ "colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", "dev": true }, "commander": { @@ -7726,13 +7446,13 @@ "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "configstore": { @@ -7762,14 +7482,6 @@ "dev": true, "requires": { "safe-buffer": "~5.1.1" - }, - "dependencies": { - "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 - } } }, "create-require": { @@ -7805,15 +7517,15 @@ } }, "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "requires": { "mimic-response": "^1.0.0" @@ -7903,13 +7615,13 @@ "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", "dev": true }, "electron-to-chromium": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.0.tgz", - "integrity": "sha512-+oXCt6SaIu8EmFTPx8wNGSB0tHQ5biDscnlf6Uxuz17e9CjzMRtGk9B8705aMPnj0iWr3iC74WuIkngCsLElmA==", + "version": "1.4.169", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.169.tgz", + "integrity": "sha512-Yb7UFva1sLlAaRyCkgoFF3qWvwZacFDtsGKi44rZsk8vnhL0DMhsUdhI4Dz9CCJQfftncDMGSI3AYiDtg8mD/w==", "dev": true }, "emoji-regex": { @@ -8016,12 +7728,6 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", @@ -8037,24 +7743,6 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } } } }, @@ -8125,9 +7813,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -8178,6 +7866,17 @@ "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fast-json-stable-stringify": { @@ -8189,7 +7888,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "fast-memoize": { @@ -8263,9 +7962,9 @@ } }, "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "foreground-child": { @@ -8302,7 +8001,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.2", @@ -8320,7 +8019,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, "fuse.js": { @@ -8360,7 +8059,7 @@ "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "dev": true }, "get-package-type": { @@ -8385,16 +8084,15 @@ } }, "glob": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz", - "integrity": "sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "once": "^1.3.0" }, "dependencies": { "brace-expansion": { @@ -8406,9 +8104,9 @@ } }, "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "requires": { "brace-expansion": "^2.0.1" } @@ -8416,12 +8114,12 @@ } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "global-dirs": { @@ -8484,9 +8182,9 @@ } }, "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "handlebars": { @@ -8560,14 +8258,6 @@ "dev": true, "requires": { "lru-cache": "^7.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", - "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", - "dev": true - } } }, "html-escaper": { @@ -8583,12 +8273,12 @@ "dev": true }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "requires": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" } @@ -8670,13 +8360,13 @@ "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "dev": true }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "indent-string": { @@ -8694,7 +8384,7 @@ "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -8746,7 +8436,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-fullwidth-code-point": { @@ -8819,7 +8509,7 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, "is-unicode-supported": { @@ -8843,7 +8533,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "istanbul-lib-coverage": { @@ -8882,25 +8572,27 @@ } }, "istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "requires": { "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", "p-map": "^3.0.0", "rimraf": "^3.0.0", - "uuid": "^3.3.3" + "uuid": "^8.3.2" }, "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } } } }, @@ -8927,9 +8619,9 @@ } }, "istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -8939,7 +8631,7 @@ "jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", "dev": true }, "js-tokens": { @@ -8949,13 +8641,12 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "jsesc": { @@ -8967,7 +8658,7 @@ "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", "dev": true }, "json-parse-even-better-errors": { @@ -8979,7 +8670,7 @@ "json-parse-helpfulerror": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", - "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", + "integrity": "sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==", "dev": true, "requires": { "jju": "^1.1.0" @@ -8994,22 +8685,19 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true }, "jsonlines": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsonlines/-/jsonlines-0.1.1.tgz", - "integrity": "sha1-T80kbcXQ44aRkHxEqwAveC0dlMw=", + "integrity": "sha512-ekDrAGso79Cvf+dtm+mL8OBI2bmAOt3gssYs833De/C9NmIpWDWyUO4zPgB5x2/OhY366dkhgfPMYfwZF7yOZA==", "dev": true }, "jsonparse": { @@ -9028,9 +8716,9 @@ } }, "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", + "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", "dev": true }, "latest-version": { @@ -9069,7 +8757,7 @@ "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, "lodash.merge": { @@ -9104,13 +8792,10 @@ "dev": true }, "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, - "requires": { - "yallist": "^4.0.0" - } + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", + "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", + "dev": true }, "make-dir": { "version": "3.1.0", @@ -9136,107 +8821,27 @@ "dev": true }, "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==", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", + "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", "dev": true, "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "dependencies": { - "@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, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "@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==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "requires": { - "@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" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "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" - } - }, - "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, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - } + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" } }, "merge2": { @@ -9246,13 +8851,13 @@ "dev": true }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mimic-response": { @@ -9277,9 +8882,9 @@ "dev": true }, "minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.3.tgz", + "integrity": "sha512-N0BOsdFAlNRfmwMhjAsLVWOk7Ljmeb39iqFlsV1At+jqRhSUP9yeof8FyJu4imaJiSUp8vQebWD/guZwGQC8iA==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -9295,15 +8900,15 @@ } }, "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", + "encoding": "^0.1.13", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" } }, "minipass-flush": { @@ -9389,12 +8994,6 @@ "yargs-unparser": "2.0.0" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -9420,15 +9019,6 @@ } } }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -9481,7 +9071,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "negotiator": { @@ -9497,15 +9087,15 @@ "dev": true }, "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==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", + "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", "dev": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", + "make-fetch-happen": "^10.0.3", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", @@ -9540,9 +9130,9 @@ } }, "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", "dev": true }, "nopt": { @@ -9588,9 +9178,9 @@ } }, "npm-check-updates": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-14.0.1.tgz", - "integrity": "sha512-CjHKxcJur/OiVc2GKBagUrzDsXL8JJC71rNVv2mC7eNA6w/ebe3POx9x46ay4p3woSxJOa7hYWNn1UwL7jgHug==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-14.1.1.tgz", + "integrity": "sha512-lVGckd/SR9lpCPV3WhY/LbhqQRV6V7jYkN5wSp49P+ER2xCgKGewE1i5kSCBBnNG91tcQo9CfBGhX1KY9t7DCg==", "dev": true, "requires": { "chalk": "^4.1.2", @@ -9611,7 +9201,7 @@ "pacote": "^13.6.0", "parse-github-url": "^1.0.2", "progress": "^2.0.3", - "prompts": "^2.4.2", + "prompts-ncu": "^2.5.0", "rc-config-loader": "^4.1.0", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", @@ -9641,15 +9231,6 @@ "brace-expansion": "^2.0.1" } }, - "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, - "requires": { - "aggregate-error": "^3.0.0" - } - }, "yaml": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", @@ -9674,12 +9255,13 @@ "dev": true }, "npm-package-arg": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.2.tgz", - "integrity": "sha512-v/miORuX8cndiOheW8p2moNuPJ7QhcFh9WGlTorruG8hXSA23vMTEp5hTCmDxic0nD8KHhj/NQgFuySD3GYY3g==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", "dev": true, "requires": { "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } @@ -9721,78 +9303,6 @@ "minizlib": "^2.1.2", "npm-package-arg": "^9.0.1", "proc-log": "^2.0.0" - }, - "dependencies": { - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "lru-cache": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz", - "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==", - "dev": true - }, - "make-fetch-happen": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.7.tgz", - "integrity": "sha512-J/2xa2+7zlIUKqfyXDCXFpH3ypxO4k3rgkZHPSZkyUYcBT/hM80M3oyKLM/9dVriZFiGeGGS2Ei+0v2zfhqj3Q==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - } } }, "npmlog": { @@ -9842,12 +9352,6 @@ "yargs": "^15.0.2" }, "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -9859,12 +9363,6 @@ "wrap-ansi": "^6.2.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -9876,15 +9374,15 @@ } }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -9916,6 +9414,15 @@ "p-limit": "^2.2.0" } }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -9973,7 +9480,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } @@ -10017,9 +9524,9 @@ } }, "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "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, "requires": { "aggregate-error": "^3.0.0" @@ -10064,15 +9571,15 @@ } }, "pacote": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.0.tgz", - "integrity": "sha512-zHmuCwG4+QKnj47LFlW3LmArwKoglx2k5xtADiMCivVWPgNRP5QyLDGOIjGjwOe61lhl1rO63m/VxT16pEHLWg==", + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", + "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", "dev": true, "requires": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^3.0.1", + "@npmcli/run-script": "^4.1.0", "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", @@ -10116,7 +9623,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true }, "path-key": { "version": "3.1.1", @@ -10143,9 +9651,9 @@ "dev": true }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pkg-dir": { @@ -10205,7 +9713,7 @@ "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true }, "prettier": { @@ -10251,13 +9759,13 @@ "retry": "^0.12.0" } }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "prompts-ncu": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-2.5.0.tgz", + "integrity": "sha512-a9WdInrG7zSlmfzDszmF3r8O4grZRI8+ChV0LtagHRT4dH7F+kxkrwFPGxeS83FZgAGBx3AXoLP+c4kGJb1P3w==", "dev": true, "requires": { - "kleur": "^3.0.3", + "kleur": "^4.0.1", "sisteransi": "^1.0.5" } }, @@ -10322,7 +9830,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true } } @@ -10337,23 +9845,6 @@ "js-yaml": "^4.0.0", "json5": "^2.1.2", "require-from-string": "^2.0.2" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - } } }, "read-package-json": { @@ -10405,12 +9896,12 @@ "dev": true }, "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dev": true, "requires": { - "rc": "^1.2.8" + "rc": "1.2.8" } }, "registry-url": { @@ -10425,7 +9916,7 @@ "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, "requires": { "es6-error": "^4.0.1" @@ -10440,7 +9931,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, "require-from-string": { @@ -10464,7 +9955,7 @@ "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, "requires": { "lowercase-keys": "^1.0.0" @@ -10492,15 +9983,15 @@ }, "dependencies": { "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -10517,9 +10008,9 @@ } }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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 }, "safer-buffer": { @@ -10536,6 +10027,17 @@ "dev": true, "requires": { "lru-cache": "^6.0.0" + }, + "dependencies": { + "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, + "requires": { + "yallist": "^4.0.0" + } + } } }, "semver-diff": { @@ -10573,7 +10075,7 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "shebang-command": { @@ -10626,9 +10128,9 @@ } }, "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==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "requires": { "agent-base": "^6.0.2", @@ -10707,7 +10209,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "ssri": { @@ -10726,6 +10228,14 @@ "dev": true, "requires": { "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "string-width": { @@ -10795,15 +10305,15 @@ }, "dependencies": { "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -10813,13 +10323,13 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, "to-readable-stream": { @@ -10918,9 +10428,9 @@ "dev": true }, "uglify-js": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", - "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.1.tgz", + "integrity": "sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ==", "dev": true, "optional": true }, @@ -10951,6 +10461,16 @@ "crypto-random-string": "^2.0.0" } }, + "update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -10985,7 +10505,7 @@ "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "requires": { "prepend-http": "^2.0.0" @@ -11056,9 +10576,9 @@ } }, "vscode-languageserver-textdocument": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz", - "integrity": "sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.5.tgz", + "integrity": "sha512-1ah7zyQjKBudnMiHbZmxz5bYNM9KKZYz+5VQLj+yr8l+9w3g+WAhCkUkWbhMEdC5u0ub4Ndiye/fDyS8ghIKQg==" }, "vscode-languageserver-types": { "version": "3.16.0", @@ -11082,7 +10602,7 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, "wide-align": { @@ -11112,7 +10632,7 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, "workerpool": { @@ -11135,7 +10655,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "3.0.3", @@ -11203,6 +10723,20 @@ "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + } } }, "yn": { diff --git a/package.json b/package.json index fd16792ce..0e6981e23 100644 --- a/package.json +++ b/package.json @@ -67,15 +67,15 @@ "@types/node": "^18.0.0", "@types/uuid": "^8.3.4", "@types/vscode": "^1.68.0", - "@typescript-eslint/eslint-plugin": "^5.28.0", - "@typescript-eslint/parser": "^5.28.0", + "@typescript-eslint/eslint-plugin": "^5.29.0", + "@typescript-eslint/parser": "^5.29.0", "chai": "^4.3.6", "eslint": "^8.18.0", "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", "mocha": "^10.0.0", - "npm-check-updates": "^14.0.1", + "npm-check-updates": "^14.1.1", "nyc": "^15.1.0", "prettier": "^2.7.1", "rimraf": "^3.0.2", From eaff9cf0a1a97478b531a5902abfdacc573aec0f Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 27 Jun 2022 21:19:52 +0100 Subject: [PATCH 396/558] Bump deps (#385) --- package-lock.json | 160 +++++++++++++++++++++++----------------------- package.json | 4 +- 2 files changed, 82 insertions(+), 82 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1e45b2798..33e9e4ac0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,8 +31,8 @@ "@types/node": "^18.0.0", "@types/uuid": "^8.3.4", "@types/vscode": "^1.68.0", - "@typescript-eslint/eslint-plugin": "^5.29.0", - "@typescript-eslint/parser": "^5.29.0", + "@typescript-eslint/eslint-plugin": "^5.30.0", + "@typescript-eslint/parser": "^5.30.0", "chai": "^4.3.6", "eslint": "^8.18.0", "eslint-config-prettier": "^8.5.0", @@ -934,14 +934,14 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", - "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", + "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/type-utils": "5.29.0", - "@typescript-eslint/utils": "5.29.0", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/type-utils": "5.30.0", + "@typescript-eslint/utils": "5.30.0", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -967,14 +967,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz", - "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", + "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", "debug": "^4.3.4" }, "engines": { @@ -994,13 +994,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", - "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", + "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0" + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1011,12 +1011,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz", - "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", + "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.29.0", + "@typescript-eslint/utils": "5.30.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1037,9 +1037,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", - "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", + "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1050,13 +1050,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", - "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", + "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1077,15 +1077,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", - "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -1101,12 +1101,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", - "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", + "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/types": "5.30.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -6856,14 +6856,14 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", - "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", + "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/type-utils": "5.29.0", - "@typescript-eslint/utils": "5.29.0", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/type-utils": "5.30.0", + "@typescript-eslint/utils": "5.30.0", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -6873,52 +6873,52 @@ } }, "@typescript-eslint/parser": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz", - "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", + "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", - "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", + "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0" + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0" } }, "@typescript-eslint/type-utils": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz", - "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", + "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.29.0", + "@typescript-eslint/utils": "5.30.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", - "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", + "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", - "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", + "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6927,26 +6927,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", - "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", - "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", + "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/types": "5.30.0", "eslint-visitor-keys": "^3.3.0" } }, diff --git a/package.json b/package.json index 0e6981e23..51426b867 100644 --- a/package.json +++ b/package.json @@ -67,8 +67,8 @@ "@types/node": "^18.0.0", "@types/uuid": "^8.3.4", "@types/vscode": "^1.68.0", - "@typescript-eslint/eslint-plugin": "^5.29.0", - "@typescript-eslint/parser": "^5.29.0", + "@typescript-eslint/eslint-plugin": "^5.30.0", + "@typescript-eslint/parser": "^5.30.0", "chai": "^4.3.6", "eslint": "^8.18.0", "eslint-config-prettier": "^8.5.0", From 43158337eee7aed3dad745bac8c2f6c01965128e Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 30 Jun 2022 18:04:51 +0100 Subject: [PATCH 397/558] chore: restore vscode testing pipeline (#390) Co-authored-by: Ansible DevTools --- .config/dictionary.txt | 4 ++++ .github/workflows/task.yml | 24 +++++++++++++++++++++--- Taskfile.yml | 6 ++++++ tools/test-setup.sh | 2 +- tools/vscode.sh | 29 +++++++++++++++++++++++++++++ 5 files changed, 61 insertions(+), 4 deletions(-) create mode 100755 tools/vscode.sh diff --git a/.config/dictionary.txt b/.config/dictionary.txt index a46745730..140b19e64 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -6,6 +6,8 @@ HORIZONTALLINE Jenkinsfile OSTYPE PYTHONHOME +SIGINT +SIGTERM TLDR Taskfile WSLENV @@ -67,6 +69,7 @@ nvim nvmrc parseable patchback +pgrep piptools pkgcache podman @@ -77,6 +80,7 @@ pyparsing pyup ro seealso +servernum setuptools showcontent showformat diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 353696a34..0a6817956 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -19,8 +19,8 @@ jobs: test: env: # to expose matrix job name to steps, which is not possible with expansions - JOB_NAME: ${{ matrix.name || format('{0} ({1})', matrix.task-name, matrix.os) }} - name: ${{ matrix.name || format('{0} ({1})', matrix.task-name, matrix.os) }} + JOB_NAME: ${{ matrix.name || matrix.task-name }} + name: ${{ matrix.name || matrix.task-name }} # The type of runner that the job will run on runs-on: ${{ matrix.os || 'ubuntu-latest' }} defaults: @@ -34,6 +34,7 @@ jobs: node-version: - "12" task-name: + - vscode - test-node12 - test-node14 - test-node16 @@ -70,13 +71,22 @@ jobs: # https://github.com/marketplace/actions/setup-wsl - name: Activate WSL if: "contains(matrix.shell, 'wsl')" - uses: Vampire/setup-wsl@v1 + uses: Vampire/setup-wsl@v1.2.1 with: # we want to load user profile # https://github.com/Vampire/setup-wsl#wsl-shell-command wsl-shell-command: "bash -i -euo pipefail" + additional-packages: + curl + git + python3-dev + python3-pip + python3-venv + qemu-user-static + xvfb - name: Enable caching + if: "!contains(matrix.shell, 'wsl')" uses: actions/cache@v3 with: path: | @@ -122,6 +132,14 @@ jobs: with: node-version-file: '.nvmrc' + - name: Install task inside WSL + if: "contains(matrix.shell, 'wsl')" + run: | + mkdir -p ~/.local/bin + sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin + echo $PATH + command -v task + - run: task setup - name: task ${{ matrix.task-name }} diff --git a/Taskfile.yml b/Taskfile.yml index 368ea7f6f..52f1a710d 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -26,6 +26,12 @@ tasks: - task: package - task: docs - echo Done {{.VERSION}}! + vscode: + desc: Run vscode-ansible tests using current code from ALS + deps: + - setup + cmds: + - ./tools/vscode.sh docs: desc: Build the documentation vars: diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 7736bf94c..6cdcd1af4 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -62,7 +62,7 @@ if [[ -f "/usr/bin/apt-get" ]]; then INSTALL=0 # qemu-user-static is required by podman on arm64 # python3-dev is needed for headers as some packages might need to compile - DEBS=(curl git python3-dev python3-venv python3-pip qemu-user-static) + DEBS=(curl git python3-dev python3-venv python3-pip qemu-user-static xvfb) for DEB in "${DEBS[@]}"; do [[ "$(dpkg-query --show --showformat='${db:Status-Status}\n' "${DEB}" || true)" != 'installed' ]] && INSTALL=1 done diff --git a/tools/vscode.sh b/tools/vscode.sh new file mode 100755 index 000000000..dc1cb7737 --- /dev/null +++ b/tools/vscode.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# (cspell: disable-next-line) +set -euo pipefail + +# Ensure we have the our sibling ready +if [[ ! -d ../vscode-ansible ]]; then + cd .. + git clone https://github.com/ansible/vscode-ansible + cd vscode-ansible +else + cd ../vscode-ansible + git checkout main + git pull --ff-only +fi + +unset VIRTUAL_ENV + +cleanup() { + rv=$? + pgrep xvfb-run | xargs --no-run-if-empty sudo kill || true + exit $rv +} + +if [[ -f "/usr/bin/apt-get" ]]; then + trap "cleanup" SIGINT SIGTERM ERR EXIT + xvfb-run --auto-servernum task devel -- ../ansible-language-server +else + task devel -- ../ansible-language-server +fi From cb3a140826fd5e94d3b1b1758f85bcebbd4c4d54 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Thu, 30 Jun 2022 22:47:24 +0530 Subject: [PATCH 398/558] Auto-complete hosts values based on ansible inventory file (#350) Co-authored-by: Sorin Sbarnea --- .config/dictionary.txt | 13 ++ docs/changelog-fragments.d/350.feature.md | 2 + src/ansibleLanguageService.ts | 19 +++ src/providers/completionProvider.ts | 53 +++++++ src/services/ansibleConfig.ts | 18 +++ src/services/ansibleInventory.ts | 123 ++++++++++++++++ src/services/executionEnvironment.ts | 1 + src/services/workspaceManager.ts | 17 +++ test/fixtures/completion/ansible.cfg | 3 + test/fixtures/completion/dynamic_inventory.py | 69 +++++++++ .../completion/new_ansible_config.cfg | 3 + test/fixtures/completion/static_inventory.ini | 10 ++ test/helper.ts | 13 ++ test/providers/completionProvider.test.ts | 139 ++++++++++++++---- test/providers/completionResolver.test.ts | 18 +-- test/providers/hoverProvider.test.ts | 36 ++--- test/providers/validationProvider.test.ts | 74 +++++----- 17 files changed, 522 insertions(+), 89 deletions(-) create mode 100644 docs/changelog-fragments.d/350.feature.md create mode 100644 src/services/ansibleInventory.ts create mode 100644 test/fixtures/completion/ansible.cfg create mode 100755 test/fixtures/completion/dynamic_inventory.py create mode 100644 test/fixtures/completion/new_ansible_config.cfg create mode 100644 test/fixtures/completion/static_inventory.ini diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 140b19e64..4d5acaaa6 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -13,6 +13,7 @@ Taskfile WSLENV YOLO alphanums +Ansible ansible ansiblefest apidoc @@ -36,14 +37,20 @@ dirhtml docker doctree doctrees +Dpkg dunamai endfor envdir envrc eqeqeq +FQCN +FQCNs globbing globby +HORIZONTALLINE +hostvars installdeps +Jenkinsfile jsdoc lcov libyaml @@ -76,23 +83,28 @@ podman preid prettierrc preversion +projectuser pyparsing +PYTHONHOME pyup ro seealso servernum setuptools showcontent +simplejson showformat sphinxcontrib stderr stdout suboption suboptions +testhost testorg tls toctree todos +towerhost towncrier toxenv tsbuildinfo @@ -105,6 +117,7 @@ whereis withserver wordwrap workdir +WSLENV xvfb yammlint # sphinx: diff --git a/docs/changelog-fragments.d/350.feature.md b/docs/changelog-fragments.d/350.feature.md new file mode 100644 index 000000000..f729e4744 --- /dev/null +++ b/docs/changelog-fragments.d/350.feature.md @@ -0,0 +1,2 @@ +Added auto-completion feature for 'hosts' and 'ansible_host' values along with +the ability to re-sync the service through command -- by {user}`priyamsahoo` diff --git a/src/ansibleLanguageService.ts b/src/ansibleLanguageService.ts index 8f54ff0c1..19c85071f 100644 --- a/src/ansibleLanguageService.ts +++ b/src/ansibleLanguageService.ts @@ -314,6 +314,25 @@ export class AnsibleLanguageService { } return null; }); + + // Custom actions that are performed on receiving special notifications from the client + // Resync ansible inventory service by clearing the cached items + this.connection.onNotification("resync/ansible-inventory", async () => { + this.workspaceManager.forEachContext((e) => { + // Invalidate ansible inventory cache + e.clearAnsibleInventory(); + this.connection.window.showInformationMessage( + "Re-syncing ansible inventory. This might take some time." + ); + + // Run the ansible inventory service + e.ansibleInventory.then(() => { + this.connection.window.showInformationMessage( + "Ansible Inventory re-synced." + ); + }); + }); + }); } private handleError(error: unknown, contextName: string) { diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index 446c55ef3..cd4dfbb94 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -348,6 +348,46 @@ export async function doCompletion( }); } } + + // check for 'hosts' keyword and 'ansible_host keyword under vars' to provide inventory auto-completion + let keyPathForHosts: Node[] | null; + + if (new AncestryBuilder(path).parent(YAMLMap).getValue() === null) { + keyPathForHosts = new AncestryBuilder(path) + .parent(YAMLMap) // compensates for `_:` + .parent(YAMLMap) + .getKeyPath(); + } else { + keyPathForHosts = new AncestryBuilder(path) + .parent(YAMLMap) // compensates for `_:` + .getKeyPath(); + } + if (keyPathForHosts) { + const keyNodeForHosts = keyPathForHosts[keyPathForHosts.length - 1]; + + const conditionForHostsKeyword = + isPlayParam(keyPathForHosts) && keyNodeForHosts["value"] === "hosts"; + + const conditionForAnsibleHostKeyword = + keyNodeForHosts["value"] === "ansible_host" && + new AncestryBuilder(keyPathForHosts) + .parent() + .parent(YAMLMap) + .getStringKey() === "vars"; + + if (conditionForHostsKeyword || conditionForAnsibleHostKeyword) { + // const nodeRange = getNodeRange(node, document); + // nodeRange is not being passed to getHostCompletion because this will prevent + // completion for items beyond ',', ':', '!', and we know that 'hosts' keyword supports regex + + const hostsList = (await context.ansibleInventory).hostList; + + const testHostCompletion: CompletionItem[] = + getHostCompletion(hostsList); + + return testHostCompletion; + } + } } } return null; @@ -393,6 +433,19 @@ function getKeywordCompletion( }); } +function getHostCompletion(hostObjectList): CompletionItem[] { + return hostObjectList.map(({ host, priority }) => { + const completionItem: CompletionItem = { + label: host, + sortText: `${priority}_${host}`, + kind: [1, 2].includes(priority) + ? CompletionItemKind.Variable + : CompletionItemKind.Value, + }; + return completionItem; + }); +} + /** * Returns an LSP formatted range compensating for the `_:` hack, provided that * the node has range information and is a string scalar. diff --git a/src/services/ansibleConfig.ts b/src/services/ansibleConfig.ts index 6a9092d00..2b0490e53 100644 --- a/src/services/ansibleConfig.ts +++ b/src/services/ansibleConfig.ts @@ -12,6 +12,7 @@ export class AnsibleConfig { private _collection_paths: string[] = []; private _module_locations: string[] = []; private _ansible_location = ""; + private _default_host_list: string[] = []; constructor(connection: Connection, context: WorkspaceFolderContext) { this.connection = connection; @@ -51,6 +52,15 @@ export class AnsibleConfig { this._collection_paths = []; } + // get default host list from config dump + if (typeof config.DEFAULT_HOST_LIST === "string") { + this._default_host_list = parsePythonStringArray( + config.DEFAULT_HOST_LIST + ); + } else { + this._default_host_list = []; + } + // get Ansible basic information const ansibleVersionResult = await commandRunner.runCommand( "ansible", @@ -95,6 +105,14 @@ export class AnsibleConfig { return this._collection_paths; } + set default_host_list(defaultHostList: string[]) { + this._default_host_list = defaultHostList; + } + + get default_host_list(): string[] { + return this._default_host_list; + } + set module_locations(updatedModulesPath: string[]) { this._module_locations = updatedModulesPath; } diff --git a/src/services/ansibleInventory.ts b/src/services/ansibleInventory.ts new file mode 100644 index 000000000..54ad7d280 --- /dev/null +++ b/src/services/ansibleInventory.ts @@ -0,0 +1,123 @@ +import { Connection } from "vscode-languageserver"; +import { WorkspaceFolderContext } from "./workspaceManager"; +import { CommandRunner } from "../utils/commandRunner"; +import { URI } from "vscode-uri"; + +/** + * Class to extend ansible-inventory executable as a service + */ +export class AnsibleInventory { + private connection: Connection; + private context: WorkspaceFolderContext; + private _hostList = []; + + constructor(connection: Connection, context: WorkspaceFolderContext) { + this.connection = connection; + this.context = context; + } + + public async initialize() { + const settings = await this.context.documentSettings.get( + this.context.workspaceFolder.uri + ); + + const commandRunner = new CommandRunner( + this.connection, + this.context, + settings + ); + + const defaultHostListPath = new Set( + (await this.context.ansibleConfig).default_host_list + ); + + const workingDirectory = URI.parse(this.context.workspaceFolder.uri).path; + + // Get inventory hosts + const ansibleInventoryResult = await commandRunner.runCommand( + "ansible-inventory", + "--list", + workingDirectory, + defaultHostListPath + ); + + let inventoryHostsObject = []; + try { + inventoryHostsObject = JSON.parse(ansibleInventoryResult.stdout); + } catch (error) { + this.connection.console.error( + `Exception in AnsibleInventory service: ${JSON.stringify(error)}` + ); + } + + this._hostList = parseInventoryHosts(inventoryHostsObject); + } + + get hostList() { + return this._hostList; + } +} + +/** + * A utility function to parse the hosts object from ansible-inventory executable + * to a more usable structure that can be used during auto-completions + * @param hostObj nested object of hosts + * @returns an array of object with host and priority as keys + */ +function parseInventoryHosts(hostObj) { + const topLevelGroups = hostObj.all.children.filter( + (item: string) => item !== "ungrouped" + ); + + const groupsHavingChildren = topLevelGroups.filter( + (item) => hostObj[`${item}`] && hostObj[`${item}`].children + ); + + const otherGroups = getChildGroups(groupsHavingChildren, hostObj); + + // Set priorities: top level groups (1), other groups (2), ungrouped (3), hosts for groups (4), localhost (5) + const topLevelGroupsObjList = topLevelGroups.map((item) => { + return { host: item, priority: 1 }; + }); + + const otherGroupsObjList = otherGroups.map((item) => { + return { host: item, priority: 2 }; + }); + + const allGroups = [...topLevelGroupsObjList, ...otherGroupsObjList]; + + let ungroupedHostsObjList = []; + if (hostObj.ungrouped) { + ungroupedHostsObjList = hostObj.ungrouped.hosts.map((item) => { + return { host: item, priority: 3 }; + }); + } + + // Add 'localhost' and 'all' to the inventory list + const localhostObj = { host: "localhost", priority: 5 }; + const allHostObj = { host: "all", priority: 6 }; + + let allHosts = [localhostObj, allHostObj, ...ungroupedHostsObjList]; + + for (const group of allGroups) { + if (hostObj[`${group.host}`] && hostObj[`${group.host}`].hosts) { + const hostsObj = hostObj[`${group.host}`].hosts.map((item) => { + return { host: item, priority: 4 }; + }); + allHosts = [...allHosts, ...hostsObj]; + } + } + + return [...allGroups, ...allHosts]; +} + +function getChildGroups(groupList, hostObj, res = []) { + for (const host of groupList) { + if (hostObj[`${host}`].children) { + getChildGroups(hostObj[`${host}`].children, hostObj, res); + } else { + res.push(host); + } + } + return res; +} diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 25683283e..6d597bfb1 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -213,6 +213,7 @@ export class ExecutionEnvironment { ...["-v", `${workspaceFolderPath}:${workspaceFolderPath}`] ); + // TODO: add condition to check file path exists or not for (const mountPath of mountPaths || []) { // push to array only if mount path is valid if (mountPath === "" || !fs.existsSync(mountPath)) { diff --git a/src/services/workspaceManager.ts b/src/services/workspaceManager.ts index 0e8797f78..eb2d22cad 100644 --- a/src/services/workspaceManager.ts +++ b/src/services/workspaceManager.ts @@ -15,6 +15,7 @@ import { MetadataLibrary } from "./metadataLibrary"; import { SettingsManager } from "./settingsManager"; import * as path from "path"; import { URI } from "vscode-uri"; +import { AnsibleInventory } from "./ansibleInventory"; /** * Holds the overall context for the whole workspace. @@ -133,6 +134,7 @@ export class WorkspaceFolderContext { private _executionEnvironment: Thenable | undefined; private _docsLibrary: Thenable | undefined; private _ansibleConfig: Thenable | undefined; + private _ansibleInventory: Thenable | undefined; private _ansibleLint: AnsibleLint | undefined; private _ansiblePlaybook: AnsiblePlaybook | undefined; @@ -157,6 +159,7 @@ export class WorkspaceFolderContext { this._executionEnvironment = undefined; this._ansibleConfig = undefined; this._docsLibrary = undefined; + this._ansibleInventory = undefined; } ); } @@ -195,6 +198,20 @@ export class WorkspaceFolderContext { return this._ansibleConfig; } + public get ansibleInventory(): Thenable { + if (!this._ansibleInventory) { + const ansibleInventory = new AnsibleInventory(this.connection, this); + this._ansibleInventory = ansibleInventory + .initialize() + .then(() => ansibleInventory); + } + return this._ansibleInventory; + } + + public clearAnsibleInventory(): void { + this._ansibleInventory = undefined; + } + public get ansibleLint(): AnsibleLint { if (!this._ansibleLint) { this._ansibleLint = new AnsibleLint(this.connection, this); diff --git a/test/fixtures/completion/ansible.cfg b/test/fixtures/completion/ansible.cfg new file mode 100644 index 000000000..886944743 --- /dev/null +++ b/test/fixtures/completion/ansible.cfg @@ -0,0 +1,3 @@ +# This config file is used for testing extension features. +[defaults] +inventory = static_inventory.ini diff --git a/test/fixtures/completion/dynamic_inventory.py b/test/fixtures/completion/dynamic_inventory.py new file mode 100755 index 000000000..d7418230d --- /dev/null +++ b/test/fixtures/completion/dynamic_inventory.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python + +''' +Example custom dynamic inventory script for Ansible, in Python. +''' + +import argparse +from time import sleep + +try: + import json +except ImportError: + import simplejson as json + +class ExampleInventory(object): + + def __init__(self): + self.inventory = {} + self.read_cli_args() + + # Called with `--list`. + if self.args.list: + self.inventory = self.example_inventory() + # Called with `--host [hostname]`. + elif self.args.host: + # Not implemented, since we return _meta info `--list`. + self.inventory = self.empty_inventory() + # If no groups or vars are present, return an empty inventory. + else: + self.inventory = self.empty_inventory() + + print(json.dumps(self.inventory)); + + # Example inventory for testing. + def example_inventory(self): + # sleep is added to create an impression of a complex dynamic inventory file that takes time to fetch hosts + # sleep(1) + return { + 'python_hosts': { + 'hosts': ['10.220.21.24', '10.220.21.27'], + 'vars': { + 'ansible_ssh_user': 'projectuser', + } + }, + '_meta': { + 'hostvars': { + '10.220.21.24': { + 'host_specific_var': 'testhost' + }, + '10.220.21.27': { + 'host_specific_var': 'towerhost' + } + } + } + } + + # Empty inventory for testing. + def empty_inventory(self): + return {'_meta': {'hostvars': {}}} + + # Read the command line args passed to the script. + def read_cli_args(self): + parser = argparse.ArgumentParser() + parser.add_argument('--list', action = 'store_true') + parser.add_argument('--host', action = 'store') + self.args = parser.parse_args() + +# Get the inventory. +ExampleInventory() diff --git a/test/fixtures/completion/new_ansible_config.cfg b/test/fixtures/completion/new_ansible_config.cfg new file mode 100644 index 000000000..888da6b49 --- /dev/null +++ b/test/fixtures/completion/new_ansible_config.cfg @@ -0,0 +1,3 @@ +# This config file is used for testing extension features. +[defaults] +inventory = ./dynamic_inventory.py diff --git a/test/fixtures/completion/static_inventory.ini b/test/fixtures/completion/static_inventory.ini new file mode 100644 index 000000000..5b85cab7c --- /dev/null +++ b/test/fixtures/completion/static_inventory.ini @@ -0,0 +1,10 @@ +[hello-worlds] +hello.world.1 +hello.world.2 + +[test-inventories] +test.inventory.3 +test.inventory.4 + +ungrouped.host.5 +ungrouped.host.6 diff --git a/test/helper.ts b/test/helper.ts index 67eaeb206..3dce95382 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -15,6 +15,11 @@ export const ANSIBLE_COLLECTIONS_FIXTURES_BASE_PATH = path.resolve( "common", "collections" ); +export const ANSIBLE_CONFIG_FILE = path.resolve( + FIXTURES_BASE_PATH, + "completion", + "ansible.cfg" +); export function setFixtureAnsibleCollectionPathEnv( prePendPath: string | undefined = undefined @@ -31,6 +36,14 @@ export function unSetFixtureAnsibleCollectionPathEnv(): void { process.env.ANSIBLE_COLLECTIONS_PATHS = undefined; } +export function setAnsibleConfigEnv(): void { + process.env.ANSIBLE_CONFIG = ANSIBLE_CONFIG_FILE; +} + +export function unsetAnsibleConfigEnv(): void { + process.env.ANSIBLE_CONFIG = undefined; +} + export async function enableExecutionEnvironmentSettings( docSettings: Thenable ): Promise { diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index 246f11b11..4fd5bd6eb 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -12,6 +12,8 @@ import { enableExecutionEnvironmentSettings, disableExecutionEnvironmentSettings, setFixtureAnsibleCollectionPathEnv, + setAnsibleConfigEnv, + unsetAnsibleConfigEnv, } from "../helper"; function testPlayKeywords( @@ -244,7 +246,7 @@ function testModuleNames( ]; tests.forEach(({ name, position, triggerCharacter, completion }) => { - it(`should provide autocompletion ${name}`, async function () { + it(`should provide completion for ${name}`, async function () { const actualCompletion = await doCompletion(textDoc, position, context); const filteredCompletion = smartFilter( @@ -482,6 +484,61 @@ function testModuleNamesWithoutFQCN( }); } +function testHostValues( + context: WorkspaceFolderContext, + textDoc: TextDocument +) { + const tests = [ + { + name: "hello-worlds group", + position: { line: 2, character: 9 } as Position, + triggerCharacter: "hello", + completion: ["hello-worlds", "hello.world.1", "hello.world.2"], + }, + { + name: "test-inventories group", + position: { line: 2, character: 9 } as Position, + triggerCharacter: "inventor", + completion: ["test-inventories", "test.inventory.3", "test.inventory.4"], + }, + { + name: "localhost", + position: { line: 2, character: 14 } as Position, + triggerCharacter: "local", + completion: ["localhost"], + }, + { + name: "all", + position: { line: 2, character: 9 } as Position, + triggerCharacter: "all", + completion: ["all"], + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name} as hosts value`, async function () { + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter + ).map((completion) => { + if (!completion.item) { + return completion.label; + } else { + return completion.item.label; + } + }); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + expect(filteredCompletion).be.deep.equal(completion); + } + }); + }); +} + describe("doCompletion()", () => { const workspaceManager = createTestWorkspaceManager(); let fixtureFilePath = "completion/simple_tasks.yml"; @@ -491,27 +548,59 @@ describe("doCompletion()", () => { let textDoc = getDoc(fixtureFilePath); let docSettings = context.documentSettings.get(textDoc.uri); + describe("Completion for host values with static inventory file", () => { + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible" + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + + testHostValues(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + }); + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + + setAnsibleConfigEnv(); + }); + + testHostValues(context, textDoc); + + after(() => { + unsetAnsibleConfigEnv(); + }); + }); + }); + describe("Completion for play keywords", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testPlayKeywords(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testPlayKeywords(context, textDoc); @@ -530,21 +619,21 @@ describe("doCompletion()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testRoleKeywords(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testRoleKeywords(context, textDoc); @@ -563,21 +652,21 @@ describe("doCompletion()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testBlockKeywords(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testBlockKeywords(context, textDoc); @@ -596,21 +685,21 @@ describe("doCompletion()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testTaskKeywords(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testTaskKeywords(context, textDoc); @@ -622,21 +711,21 @@ describe("doCompletion()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testModuleNames(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testModuleNames(context, textDoc); @@ -649,21 +738,21 @@ describe("doCompletion()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testModuleOptions(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testModuleOptions(context, textDoc); @@ -676,21 +765,21 @@ describe("doCompletion()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testModuleOptionsValues(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testModuleOptionsValues(context, textDoc); @@ -709,21 +798,21 @@ describe("doCompletion()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testModuleNamesWithoutFQCN(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testModuleNamesWithoutFQCN(context, textDoc); diff --git a/test/providers/completionResolver.test.ts b/test/providers/completionResolver.test.ts index ef0f9d0ba..7483b2e50 100644 --- a/test/providers/completionResolver.test.ts +++ b/test/providers/completionResolver.test.ts @@ -213,20 +213,20 @@ describe("doCompletionResolve()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testFQCNEnabled(context); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With useFQCN enabled and with EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testFQCNEnabled(context); }); @@ -236,14 +236,14 @@ describe("doCompletionResolve()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); (await docSettings).ansible.useFullyQualifiedCollectionNames = false; }); testFQCNDisabled(context); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); (await docSettings).ansible.useFullyQualifiedCollectionNames = true; }); }); @@ -251,7 +251,7 @@ describe("doCompletionResolve()", () => { describe("With useFQCN disabled and with EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); (await docSettings).ansible.useFullyQualifiedCollectionNames = false; }); testFQCNDisabled(context); @@ -269,21 +269,21 @@ describe("doCompletionResolve()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testResolveModuleOptionCompletion(context); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("with EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testResolveModuleOptionCompletion(context); diff --git a/test/providers/hoverProvider.test.ts b/test/providers/hoverProvider.test.ts index 6559dda82..727d950fc 100644 --- a/test/providers/hoverProvider.test.ts +++ b/test/providers/hoverProvider.test.ts @@ -191,21 +191,21 @@ describe("doHover()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testPlayKeywords(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testPlayKeywords(context, textDoc); @@ -218,21 +218,21 @@ describe("doHover()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testTaskKeywords(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testTaskKeywords(context, textDoc); @@ -245,21 +245,21 @@ describe("doHover()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testBlockKeywords(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testBlockKeywords(context, textDoc); @@ -279,21 +279,21 @@ describe("doHover()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testRoleKeywords(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testRoleKeywords(context, textDoc); @@ -312,21 +312,21 @@ describe("doHover()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testModuleNames(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testModuleNames(context, textDoc); @@ -339,21 +339,21 @@ describe("doHover()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testNoHover(context, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testNoHover(context, textDoc); diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts index 63bb13502..e36d7f801 100644 --- a/test/providers/validationProvider.test.ts +++ b/test/providers/validationProvider.test.ts @@ -255,21 +255,21 @@ describe("doValidate()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testValidationFromCache(validationManager, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testValidationFromCache(validationManager, textDoc); @@ -283,21 +283,21 @@ describe("doValidate()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testAnsibleLintErrors(context, validationManager, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testAnsibleLintErrors(context, validationManager, textDoc); @@ -312,7 +312,7 @@ describe("doValidate()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); @@ -320,7 +320,7 @@ describe("doValidate()", () => { after(async () => { (await docSettings).ansibleLint.enabled = true; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); @@ -328,7 +328,7 @@ describe("doValidate()", () => { before(async () => { (await docSettings).ansibleLint.enabled = false; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); @@ -336,7 +336,7 @@ describe("doValidate()", () => { after(async () => { (await docSettings).ansibleLint.enabled = true; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); @@ -354,7 +354,7 @@ describe("doValidate()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckEmptyPlaybook( @@ -366,7 +366,7 @@ describe("doValidate()", () => { after(async () => { (await docSettings).ansibleLint.enabled = true; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); @@ -374,7 +374,7 @@ describe("doValidate()", () => { before(async () => { (await docSettings).ansibleLint.enabled = false; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckEmptyPlaybook( @@ -386,7 +386,7 @@ describe("doValidate()", () => { after(async () => { (await docSettings).ansibleLint.enabled = true; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); @@ -404,7 +404,7 @@ describe("doValidate()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); @@ -412,7 +412,7 @@ describe("doValidate()", () => { after(async () => { (await docSettings).ansibleLint.enabled = true; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); @@ -420,7 +420,7 @@ describe("doValidate()", () => { before(async () => { (await docSettings).ansibleLint.enabled = false; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); @@ -428,7 +428,7 @@ describe("doValidate()", () => { after(async () => { (await docSettings).ansibleLint.enabled = true; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); }); @@ -449,7 +449,7 @@ describe("doValidate()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); @@ -458,7 +458,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = true; (await docSettings).ansibleLint.path = "ansible-lint"; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); @@ -467,7 +467,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = false; (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); @@ -476,7 +476,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = true; (await docSettings).ansibleLint.path = "ansible-lint"; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); @@ -495,7 +495,7 @@ describe("doValidate()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); @@ -504,7 +504,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = true; (await docSettings).ansibleLint.path = "ansible-lint"; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); @@ -513,7 +513,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = false; (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); @@ -522,7 +522,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = true; (await docSettings).ansibleLint.path = "ansible-lint"; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); }); @@ -543,7 +543,7 @@ describe("doValidate()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); @@ -552,7 +552,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = true; (await docSettings).ansibleLint.arguments = undefined; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); @@ -561,7 +561,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = false; (await docSettings).ansibleLint.arguments = "-f invalid_argument"; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); @@ -570,7 +570,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = true; (await docSettings).ansibleLint.arguments = undefined; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); @@ -589,7 +589,7 @@ describe("doValidate()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); @@ -598,7 +598,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = true; (await docSettings).ansibleLint.arguments = undefined; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); @@ -607,7 +607,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = false; (await docSettings).ansibleLint.arguments = "-f invalid_argument"; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); @@ -616,7 +616,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = true; (await docSettings).ansibleLint.arguments = undefined; setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); }); @@ -635,21 +635,21 @@ describe("doValidate()", () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible" ); - enableExecutionEnvironmentSettings(docSettings); + await enableExecutionEnvironmentSettings(docSettings); }); testInvalidYamlFile(context, validationManager, textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); }); describe("With EE disabled", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); - disableExecutionEnvironmentSettings(docSettings); + await disableExecutionEnvironmentSettings(docSettings); }); testInvalidYamlFile(context, validationManager, textDoc); From cae75dd49ad50b467cdce7395084b3a31929382f Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 1 Jul 2022 15:11:12 +0100 Subject: [PATCH 399/558] Polished test-setup.sh (#393) Co-authored-by: Ansible DevTools --- .github/workflows/task.yml | 3 +- tools/test-setup.sh | 237 +++++++++++++++++++++++++++---------- 2 files changed, 178 insertions(+), 62 deletions(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 0a6817956..928593629 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -11,8 +11,9 @@ on: env: FORCE_COLOR: "1" # make mocha output colorful + # https://docs.github.com/en/actions/learn-github-actions/environment-variables # https://devblogs.microsoft.com/commandline/share-environment-vars-between-wsl-and-windows/ - WSLENV: FORCE_COLOR:GITHUB_PATH/p + WSLENV: CI:FORCE_COLOR:GITHUB_ACTION:GITHUB_ACTION_PATH/p:GITHUB_ACTION_REPOSITORY:GITHUB_WORKFLOW:GITHUB_WORKSPACE/p:GITHUB_PATH/p # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 6cdcd1af4..d9e6069b1 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -11,6 +11,7 @@ HOSTNAME="${HOSTNAME:-localhost}" ERR=0 EE_ANSIBLE_VERSION=null EE_ANSIBLE_LINT_VERSION=null +NC='\033[0m' # No Color mkdir -p out/log # we do not want pip logs from previous runs @@ -19,35 +20,102 @@ mkdir -p out/log # Function to retrieve the version number for a specific command. If a second # argument is passed, it will be used as return value when tool is missing. get_version () { - if command -v "$1" >/dev/null 2>&1; then - _cmd=("${@:1}") - # if we did not pass any arguments, we add --version ourselves: - if [[ $# -eq 1 ]]; then - _cmd+=('--version') + if command -v "${1:-}" >/dev/null 2>&1; then + _cmd=("${@:1}") + # if we did not pass any arguments, we add --version ourselves: + if [[ $# -eq 1 ]]; then + _cmd+=('--version') + fi + "${_cmd[@]}" | head -n1 | sed -r 's/^[^0-9]*([0-9][0-9\\w\\.]*).*$/\1/' + else + log error "$? running: $*" + return 99 fi - "${_cmd[@]}" | head -n1 | sed -r 's/^[^0-9]*([0-9][0-9\\w\\.]*).*$/\1/' - else - >&2 echo "ERROR $? running: $*" - return 99 - fi } +# Use "log [notice|warning|error] message" to print a colored message to +# stderr, with colors. +log () { + local prefix + if [ "$#" -ne 2 ]; then + log error "Incorrect call ($*), use: log [notice|warning|error] 'message'." + exit 2 + fi + case $1 in + notice) prefix='\033[0;36mNOTICE: ';; + warning) prefix='\033[0;33mWARNING: ';; + error) prefix='\033[0;31mERROR: ';; + *) log error "log first argument must be 'notice', 'warning' or 'error', not $1."; exit 2;; + esac + >&2 echo -e "${prefix}${2}${NC}" +} + +if [[ -f "/usr/bin/apt-get" ]]; then + INSTALL=0 + # qemu-user-static is required by podman on arm64 + # python3-dev is needed for headers as some packages might need to compile + DEBS=(curl git python3-dev python3-venv python3-pip qemu-user-static) + for DEB in "${DEBS[@]}"; do + [[ "$(dpkg-query --show --showformat='${db:Status-Status}\n' \ + "${DEB}" || true)" != 'installed' ]] && INSTALL=1 + done + if [[ "${INSTALL}" -eq 1 ]]; then + printf '%s\n' "We need sudo to install some packages: ${DEBS[*]}" + # mandatory or other apt-get commands fail + sudo apt-get update -qq -o=Dpkg::Use-Pty=0 + # avoid outdated ansible and pipx + sudo apt-get remove -y ansible pipx || true + # install all required packages + sudo apt-get -qq install -y \ + --no-install-recommends \ + --no-install-suggests \ + -o=Dpkg::Use-Pty=0 "${DEBS[@]}" + fi +fi + +# Ensure that git is configured properly to allow unattended commits, something +# that is needed by some tasks, like devel or deps. +git config user.email >/dev/null 2>&1 || GIT_NOT_CONFIGURED=1 +git config user.name >/dev/null 2>&1 || GIT_NOT_CONFIGURED=1 +if [[ "${GIT_NOT_CONFIGURED:-}" == "1" ]]; then + echo CI="${CI:-}" + if [ -z "${CI:-}" ]; then + log error "git config user.email or user.name are not configured." + exit 40 + else + git config user.email ansible-devtools@redhat.com + git config user.name "Ansible DevTools" + fi +fi + +# macos specific +if [[ "${OS:-}" == "darwin" && "${SKIP_PODMAN:-}" != '1' ]]; then + command -v podman >/dev/null 2>&1 || { + HOMEBREW_NO_ENV_HINTS=1 time brew install podman + time podman machine init + time podman machine start + podman info + podman run hello-world + } +fi + # Fail-fast if run on Windows or under WSL1/2 on /mnt/c because it is so slow # that we do not support it at all. WSL use is ok, but not on mounts. if [[ "${OS:-}" == "windows" ]]; then - echo "ERROR: You cannot use Windows build tools for development, try WSL." + log error "You cannot use Windows build tools for development, try WSL." exit 1 fi if grep -qi microsoft /proc/version >/dev/null 2>&1; then # resolve pwd symlinks and ensure than we do not run under /mnt (mount) if [[ "$(pwd -P || true)" == /mnt/* ]]; then - echo "WARNING: Under WSL, you must avoid running from mounts (/mnt/*) due to critical performance issues." + log warning "Under WSL, you must avoid running from mounts (/mnt/*) due to critical performance issues." fi fi # User specific environment if ! [[ "${PATH}" == *"${HOME}/.local/bin"* ]]; then - echo "WARN: ~/.local/bin was not found in PATH, attempting to add it." + # shellcheck disable=SC2088 + log warning "~/.local/bin was not found in PATH, attempting to add it." cat >>"${HOME}/.bashrc" </dev/null 2>&1 || { - echo "Trying to install missing gh on ${OS} ..." + log notice "Trying to install missing gh on ${OS} ..." if [[ "${OS}" == "linux" ]]; then - command -v dnf && sudo dnf install -y gh + command -v dnf && sudo dnf install -y gh fi - gh --version || echo "WARNING: gh cli not found and it might be needed for some commands." + gh --version || log warning "gh cli not found and it might be needed for some commands." } # on WSL we want to avoid using Windows's npm (broken) if [[ "$(command -v npm || true)" == '/mnt/c/Program Files/nodejs/npm' ]]; then + log notice "Installing npm ..." curl -sL https://deb.nodesource.com/setup_16.x | sudo bash - sudo apt-get install -y -qq -o=Dpkg::Use-Pty=0 nodejs gcc g++ make python3-dev + sudo apt-get install -y -qq -o=Dpkg::Use-Pty=0 \ + nodejs gcc g++ make python3-dev fi - VIRTUAL_ENV=${VIRTUAL_ENV:-out/venvs/${HOSTNAME}} if [[ ! -d "${VIRTUAL_ENV}" ]]; then + log notice "Creating virtualenv ..." python3 -m venv "${VIRTUAL_ENV}" fi # shellcheck disable=SC1091 @@ -104,14 +154,54 @@ fi python3 -m pip install -q -U pip if [[ $(uname || true) != MINGW* ]]; then # if we are not on pure Windows - python3 -m pip install -q -c .config/requirements.txt -r .config/requirements.in + python3 -m pip install -q \ + -c .config/requirements.txt -r .config/requirements.in fi +# GHA failsafe only: ensure ansible and ansible-lint cannot be found anywhere +# other than our own virtualenv. (test isolation) +if [[ -n "${CI:-}" ]]; then + command -v ansible >/dev/null 2>&1 || { + log warning "Attempting to remove pre-installed ansible on CI ..." + pipx uninstall --verbose ansible || true + if [[ "$(which -a ansible | wc -l | tr -d ' ')" != "1" ]]; then + log error "Please ensure there is no preinstalled copy of ansible on CI.\n$(which -a ansible)" + exit 66 + fi + } + command -v ansible-lint >/dev/null 2>&1 || { + log warning "Attempting to remove pre-installed ansible-lint on CI ..." + pipx uninstall --verbose ansible-lint || true + if [[ "$(which -a ansible-lint | wc -l | tr -d ' ')" != "1" ]]; then + log error "Please ensure there is no preinstalled copy of ansible-lint on CI.\n$(which -a ansible-lint)" + exit 67 + fi + } + if [[ -d "${HOME}/.ansible" ]]; then + log warning "Removing unexpected ~/.ansible folder found on CI to avoid test contamination." + rm -rf "${HOME}/.ansible" + fi +fi + +# Fail if detected tool paths are not from inside out out/ folder +for CMD in ansible ansible-lint; do + CMD=$(command -v $CMD 2>/dev/null) + [[ "${CMD%%/out*}" == "$(pwd -P)" ]] || { + log error "${CMD} executable is not from our own virtualenv:\n${CMD}" + exit 68 + } +done +unset CMD + command -v nvm >/dev/null 2>&1 || { # define its location (needed) [[ -z "${NVM_DIR:-}" ]] && export NVM_DIR="${HOME}/.nvm"; # install if missing - [[ ! -s "${NVM_DIR:-}/nvm.sh" ]] && curl -s -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash + [[ ! -s "${NVM_DIR:-}/nvm.sh" ]] && { + log warning "Installing missing nvm" + curl -s -o- \ + https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash + } # activate nvm # shellcheck disable=1091 . "${NVM_DIR:-}/nvm.sh" @@ -119,25 +209,45 @@ command -v nvm >/dev/null 2>&1 || { [[ -s "/usr/local/opt/nvm/nvm.sh" ]] && . "/usr/local/opt/nvm/nvm.sh"; } command -v npm >/dev/null 2>&1 || { + log notice "Installing nodejs stable." nvm install stable } +# Check if npm has permissions to install packages (system installed does not) +# Share https://stackoverflow.com/a/59227497/99834 +test -w "$(npm config get prefix)" || { + log warning "Your npm is not allowed to write to $(npm config get prefix), we will reconfigure its prefix" + npm config set prefix "${HOME}/.local/" +} + +if [[ -f yarn.lock ]]; then + command -v yarn >/dev/null 2>&1 || { + log warning "Installing missing yarn" + npm install -g yarn + yarn --version + } +fi -# Detect podman and ensure that it is usable +# Detect podman and ensure that it is usable (unless SKIP_PODMAN) PODMAN_VERSION="$(get_version podman || echo null)" -if [[ "${PODMAN_VERSION}" != 'null' ]]; then - if [[ "$(podman machine ls --format '{{.Running}}' --noheading || true)" == "false" ]]; then - echo -n "Starting podman machine " - podman machine start - while [[ "$(podman machine ls --format '{{.Running}}' --noheading || true)" != "true" ]]; do - sleep 1 - echo -n . - done - echo . - fi - podman pull --quiet "${IMAGE}" >/dev/null - # without running we will never be sure it works (no arm64 image yet) - EE_ANSIBLE_VERSION=$(get_version podman run -i ${IMAGE} ansible --version) || ERR=$? - EE_ANSIBLE_LINT_VERSION=$(get_version podman run -i ${IMAGE} ansible-lint --version) || ERR=$? +if [[ "${PODMAN_VERSION}" != 'null' ]] && [[ "${SKIP_PODMAN:-}" != '1' ]]; then + if [[ "$(podman machine ls --format '{{.Running}}' --noheading || true)" \ + == "false" ]]; then + log notice "Starting podman machine" + podman machine start + while [[ "$(podman machine ls --format '{{.Running}}' \ + --noheading || true)" != "true" ]]; do + sleep 1 + echo -n . + done + echo . + fi + log notice "Pull our test container image." + podman pull --quiet "${IMAGE}" >/dev/null + # without running we will never be sure it works (no arm64 image yet) + EE_ANSIBLE_VERSION=$(get_version \ + podman run -i ${IMAGE} ansible --version) || ERR=$? + EE_ANSIBLE_LINT_VERSION=$(get_version \ + podman run -i ${IMAGE} ansible-lint --version) || ERR=$? fi # Create a build manifest so we can compare between builds and machines, this @@ -151,17 +261,18 @@ env: OS: ${OS:-null} # taskfile OSTYPE: ${OSTYPE} tools: - ansible: $(get_version ansible) ansible-lint: $(get_version ansible-lint) + ansible: $(get_version ansible) bash: $(get_version bash) - git: $(get_version git) gh: $(get_version gh || echo null) + git: $(get_version git) node: $(get_version node) npm: $(get_version npm) nvm: $(get_version nvm || echo null) pre-commit: $(get_version pre-commit) python: $(get_version python) task: $(get_version task) + yarn: $(get_version yarn || echo null) containers: podman: ${PODMAN_VERSION} docker: $(get_version docker || echo null) @@ -170,9 +281,13 @@ creator-ee: ansible-lint: ${EE_ANSIBLE_LINT_VERSION} EOF -# install npm packages -npm config set fund false -npm ci +log notice "Install node deps using either yarn or npm" +if [[ -f yarn.lock ]]; then + yarn install +else + npm ci --no-audit +fi -echo "=== ${0##*/} -> out/log/manifest.yml and returned ${ERR} ===" +[[ $ERR -eq 0 ]] && level=notice || level=error +log "${level}" "${0##*/} -> out/log/manifest.yml and returned ${ERR}" exit "${ERR}" From a0025938d37640338a259f7ca3fecf55c81e83de Mon Sep 17 00:00:00 2001 From: yaegassy Date: Sat, 2 Jul 2022 00:43:44 +0900 Subject: [PATCH 400/558] Add --version flag for ansible-language-server (#392) * feat: add --version flag for ansible-language-server * chore: add test for --version flag in ALS --- bin/ansible-language-server | 7 ++++++- test/utils/runCommand.test.ts | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/bin/ansible-language-server b/bin/ansible-language-server index 0d646de30..e503bab04 100755 --- a/bin/ansible-language-server +++ b/bin/ansible-language-server @@ -1,3 +1,8 @@ #!/usr/bin/env node -require("../out/server/src/server.js"); +if (process.argv.includes("--version")) { + const pkgJSON = require("../package.json"); + console.log(`${pkgJSON["version"]}`); +} else { + require("../out/server/src/server.js"); +} diff --git a/test/utils/runCommand.test.ts b/test/utils/runCommand.test.ts index b6d72fe3c..2ff8f3d3a 100644 --- a/test/utils/runCommand.test.ts +++ b/test/utils/runCommand.test.ts @@ -3,9 +3,26 @@ import { AssertionError, expect } from "chai"; import { WorkspaceManager } from "../../src/services/workspaceManager"; import { createConnection } from "vscode-languageserver/node"; import { getDoc } from "../helper"; +import * as path from "path"; describe("commandRunner", () => { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const pkgJSON = require(path.resolve(__dirname, "..", "..", "package.json")); + const tests = [ + { + args: [ + path.join( + path.resolve(__dirname, "..", ".."), + "bin", + "ansible-language-server" + ), + "--version", + ], + rc: 0, + stdout: `${pkgJSON["version"]}`, + stderr: "", + }, { args: ["ansible-config", "dump"], rc: 0, From 34ca625cbfb2a89c129e3378f366d8d0a0e14115 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 1 Jul 2022 16:54:17 +0100 Subject: [PATCH 401/558] chore: enable dependabot for actions (#395) Co-authored-by: Ansible DevTools --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index fc859b7da..6400f383e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,6 +1,14 @@ # https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/enabling-and-disabling-dependabot-version-updates version: 2 updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: daily + open-pull-requests-limit: 3 + labels: + - "dependencies" + - "skip-changelog" - package-ecosystem: "pip" directory: "/.config" schedule: From e35524cd65eca37fd4d2a8295d394c033633e407 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 08:41:23 +0100 Subject: [PATCH 402/558] Bump Vampire/setup-wsl from 1.2.1 to 1.3.0 (#396) Bumps [Vampire/setup-wsl](https://github.com/Vampire/setup-wsl) from 1.2.1 to 1.3.0. - [Release notes](https://github.com/Vampire/setup-wsl/releases) - [Commits](https://github.com/Vampire/setup-wsl/compare/v1.2.1...v1.3.0) --- updated-dependencies: - dependency-name: Vampire/setup-wsl dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/task.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 928593629..4e0da8bdd 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -72,7 +72,7 @@ jobs: # https://github.com/marketplace/actions/setup-wsl - name: Activate WSL if: "contains(matrix.shell, 'wsl')" - uses: Vampire/setup-wsl@v1.2.1 + uses: Vampire/setup-wsl@v1.3.0 with: # we want to load user profile # https://github.com/Vampire/setup-wsl#wsl-shell-command From c3ed1e638af3bd5363b31697cbc2e4aa11743c3b Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 4 Jul 2022 13:41:09 +0100 Subject: [PATCH 403/558] wsl: ensure o+w is not present on source code (#394) Co-authored-by: Ansible DevTools --- .config/dictionary.txt | 13 ++++--------- .github/workflows/task.yml | 21 +++++++++++++++++---- Taskfile.yml | 8 ++++---- tools/test-setup.sh | 26 ++++++++++++++++++++------ 4 files changed, 45 insertions(+), 23 deletions(-) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 4d5acaaa6..95ae032ed 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -13,12 +13,12 @@ Taskfile WSLENV YOLO alphanums -Ansible ansible ansiblefest apidoc autocrlf autofix +automount autoupdate backticks cacheable @@ -37,21 +37,18 @@ dirhtml docker doctree doctrees -Dpkg dunamai endfor envdir envrc eqeqeq -FQCN -FQCNs +githubcli globbing globby -HORIZONTALLINE hostvars installdeps -Jenkinsfile jsdoc +keyrings lcov libyaml lineinfile @@ -85,15 +82,14 @@ prettierrc preversion projectuser pyparsing -PYTHONHOME pyup ro seealso servernum setuptools showcontent -simplejson showformat +simplejson sphinxcontrib stderr stdout @@ -117,7 +113,6 @@ whereis withserver wordwrap workdir -WSLENV xvfb yammlint # sphinx: diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 4e0da8bdd..3caf03a23 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -48,13 +48,13 @@ jobs: task-name: lint - name: docs task-name: docs - - name: test (wsl) + - name: test-without-ee (wsl) # runner does not support running container task-name: test-without-ee # https://github.com/actions/virtual-environments/issues/5151 os: windows-2019 shell: "wsl-bash {0}" - - name: test (macos) + - name: test-without-ee (macos) os: macos-11 # runner does not support running container task-name: test-without-ee @@ -72,14 +72,27 @@ jobs: # https://github.com/marketplace/actions/setup-wsl - name: Activate WSL if: "contains(matrix.shell, 'wsl')" - uses: Vampire/setup-wsl@v1.3.0 + uses: Vampire/setup-wsl@v1.3.1 with: + set-as-default: 'true' # we want to load user profile # https://github.com/Vampire/setup-wsl#wsl-shell-command - wsl-shell-command: "bash -i -euo pipefail" + wsl-shell-command: "bash -euo pipefail" + # https://github.com/MicrosoftDocs/WSL/blob/main/WSL/wsl-config.md#L159 + wsl-conf: | + [automount] + enabled = true + root = / + options = "metadata,umask=077" + [interop] + enabled = false + appendWindowsPath = false + [network] + hostname = wsl additional-packages: curl git + make python3-dev python3-pip python3-venv diff --git a/Taskfile.yml b/Taskfile.yml index 52f1a710d..10381c624 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -122,7 +122,7 @@ tasks: - > source $VIRTUAL_ENV/bin/activate && command -v ansible-lint && - npm run test + bash -c '{{ .NODE_ENV }} npm run test' interactive: true test-node12: desc: Run all tests using node 12 @@ -146,7 +146,7 @@ tasks: cmds: - > source $VIRTUAL_ENV/bin/activate && - npm run test-with-ee + bash -c '{{ .NODE_ENV }} npm run test-with-ee' interactive: true test-without-ee: desc: Run only non-ee tests @@ -155,7 +155,7 @@ tasks: cmds: - > source $VIRTUAL_ENV/bin/activate && - npm run test-without-ee + bash -c '{{ .NODE_ENV }} npm run test-without-ee' interactive: true package: desc: Package extension @@ -170,7 +170,7 @@ tasks: - "*.vsix" cmds: - rm -f *.tgz - - npm pack + - bash -c '{{ .NODE_ENV }} npm pack' silent: false pr: desc: Opens a pull request using gh diff --git a/tools/test-setup.sh b/tools/test-setup.sh index d9e6069b1..1f021ca64 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -28,7 +28,7 @@ get_version () { fi "${_cmd[@]}" | head -n1 | sed -r 's/^[^0-9]*([0-9][0-9\\w\\.]*).*$/\1/' else - log error "$? running: $*" + log error "Got $? while trying to retrieve ${1:-} version" return 99 fi } @@ -126,11 +126,26 @@ EOF PATH="${HOME}/.local/bin:${PATH}" fi +# fail-fast if we detect incompatible filesystem (o-w) +# https://github.com/ansible/ansible/pull/42070 +python3 -c "import os, stat, sys; sys.exit(os.stat('.').st_mode & stat.S_IWOTH)" || { + log error "Cannot run from world-writable filesystem, try moving code to a secured location and read https://github.com/ansible/devtools/wiki/permissions#ansible-filesystem-requirements" + exit 100 +} + # install gh if missing command -v gh >/dev/null 2>&1 || { log notice "Trying to install missing gh on ${OS} ..." - if [[ "${OS}" == "linux" ]]; then - command -v dnf && sudo dnf install -y gh + # https://github.com/cli/cli/blob/trunk/docs/install_linux.md + if [[ -f "/usr/bin/apt-get" ]]; then + curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | \ + sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg + sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null + sudo apt update + sudo apt install gh + else + command -v dnf >/dev/null 2>&1 && sudo dnf install -y gh fi gh --version || log warning "gh cli not found and it might be needed for some commands." } @@ -199,12 +214,11 @@ command -v nvm >/dev/null 2>&1 || { # install if missing [[ ! -s "${NVM_DIR:-}/nvm.sh" ]] && { log warning "Installing missing nvm" - curl -s -o- \ - https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash + curl -s -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash } # activate nvm # shellcheck disable=1091 - . "${NVM_DIR:-}/nvm.sh" + . "${NVM_DIR:-${HOME}/.nvm}/nvm.sh" # shellcheck disable=1091 [[ -s "/usr/local/opt/nvm/nvm.sh" ]] && . "/usr/local/opt/nvm/nvm.sh"; } From 92e9a3d4f488493be6a4b75b2b79e077b0623a78 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 10:01:28 +0100 Subject: [PATCH 404/558] chore: pre-commit autoupdate (#398) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8e88f72bf..ee54942c9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -98,7 +98,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.18.0 + rev: v8.19.0 hooks: - id: eslint args: From 77f6b28bc73b50de4389eec46410225e65b8e3d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Jul 2022 14:18:26 +0100 Subject: [PATCH 405/558] Bump lxml from 4.9.0 to 4.9.1 in /.config (#397) * Bump lxml from 4.9.0 to 4.9.1 in /.config Bumps [lxml](https://github.com/lxml/lxml) from 4.9.0 to 4.9.1. - [Release notes](https://github.com/lxml/lxml/releases) - [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt) - [Commits](https://github.com/lxml/lxml/compare/lxml-4.9.0...lxml-4.9.1) --- updated-dependencies: - dependency-name: lxml dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Update requirements.txt Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ganesh Nalawade Co-authored-by: Sorin Sbarnea --- .config/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index b5d7eda14..f2a1cd26a 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -29,7 +29,7 @@ jinja2==3.1.2 jsonschema==4.6.0 lazy-object-proxy==1.7.1 linkify-it-py==1.0.3 -lxml==4.9.0 +lxml==4.9.1 markdown-it-py==2.0.1 markupsafe==2.0.1 mccabe==0.6.1 @@ -62,6 +62,7 @@ requests==2.27.1 resolvelib==0.5.4 rich==12.0.0 ruamel-yaml==0.17.21 +ruamel-yaml-clib==0.2.6 setuptools-scm==6.4.2 six==1.16.0 snowballstemmer==2.2.0 From ff871cb77d8a8e9e3a875328e70e8f1649b7e7c7 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 7 Jul 2022 14:40:46 +0100 Subject: [PATCH 406/558] Bump dependencies (#399) Co-authored-by: Ansible DevTools --- .config/requirements.txt | 1 - .pre-commit-config.yaml | 2 +- package-lock.json | 1778 +++++++++++++++++++++++++------------- package.json | 14 +- 4 files changed, 1189 insertions(+), 606 deletions(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index f2a1cd26a..88576a586 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -62,7 +62,6 @@ requests==2.27.1 resolvelib==0.5.4 rich==12.0.0 ruamel-yaml==0.17.21 -ruamel-yaml-clib==0.2.6 setuptools-scm==6.4.2 six==1.16.0 snowballstemmer==2.2.0 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ee54942c9..3692427bf 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.0.0 + rev: v6.1.5 hooks: - id: cspell name: Spell check with cspell diff --git a/package-lock.json b/package-lock.json index 33e9e4ac0..b77d4ab2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,22 +28,22 @@ "@types/ini": "^1.3.31", "@types/lodash": "^4.14.182", "@types/mocha": "^9.1.1", - "@types/node": "^18.0.0", + "@types/node": "^18.0.3", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.68.0", - "@typescript-eslint/eslint-plugin": "^5.30.0", - "@typescript-eslint/parser": "^5.30.0", + "@types/vscode": "^1.68.1", + "@typescript-eslint/eslint-plugin": "^5.30.5", + "@typescript-eslint/parser": "^5.30.5", "chai": "^4.3.6", - "eslint": "^8.18.0", + "eslint": "^8.19.0", "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", "mocha": "^10.0.0", - "npm-check-updates": "^14.1.1", + "npm-check-updates": "^15.2.0", "nyc": "^15.1.0", "prettier": "^2.7.1", "rimraf": "^3.0.2", - "ts-node": "^10.8.1", + "ts-node": "^10.8.2", "typescript": "^4.7.4" }, "engines": { @@ -815,25 +815,53 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.1.tgz", + "integrity": "sha512-gkINruT2KUhZLTaiHxwCOh1O4NVnFT0wLjWFBHmTz9vpKag/C/noIMJXBxFe4F0mYpUVX2puLwAieLYFg2NvoA==", + "dev": true, + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/npm-conf": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.4.tgz", + "integrity": "sha512-o5YFq/+ksEJMbSzzkaQDHlp00aonLDU5xNPVTRL12hTWBbVSSeWXxPukq75h+mvXnoOWT95vV2u1HSTw2C4XOw==", + "dev": true, + "dependencies": { + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, "dependencies": { - "defer-to-connect": "^1.0.1" + "defer-to-connect": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=14.16" } }, "node_modules/@tootallnate/once": { @@ -869,6 +897,18 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "node_modules/@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, "node_modules/@types/chai": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", @@ -885,18 +925,39 @@ "@types/node": "*" } }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "node_modules/@types/ini": { "version": "1.3.31", "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.31.tgz", "integrity": "sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w==", "dev": true }, + "node_modules/@types/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/lodash": { "version": "4.14.182", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", @@ -916,11 +977,20 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz", + "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ==", "dev": true }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -928,20 +998,20 @@ "dev": true }, "node_modules/@types/vscode": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.0.tgz", - "integrity": "sha512-duBwEK5ta/eBBMJMQ7ECMEsMvlE3XJdRGh3xoS1uOO4jl2Z4LPBl5vx8WvBP10ERAgDRmIt/FaSD4RHyBGbChw==", + "version": "1.68.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.1.tgz", + "integrity": "sha512-fXlaq13NT5yHh6yZ3c+UxXloTSk34mIvsNFYyQCeO5Po2BLFAwz7EZT4kQ43B64/aPcnAenyWy3QasrTofBOnQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", - "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz", + "integrity": "sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/type-utils": "5.30.0", - "@typescript-eslint/utils": "5.30.0", + "@typescript-eslint/scope-manager": "5.30.5", + "@typescript-eslint/type-utils": "5.30.5", + "@typescript-eslint/utils": "5.30.5", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -967,14 +1037,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", - "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.5.tgz", + "integrity": "sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", + "@typescript-eslint/scope-manager": "5.30.5", + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/typescript-estree": "5.30.5", "debug": "^4.3.4" }, "engines": { @@ -994,13 +1064,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", - "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz", + "integrity": "sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0" + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/visitor-keys": "5.30.5" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1011,12 +1081,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", - "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz", + "integrity": "sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.30.0", + "@typescript-eslint/utils": "5.30.5", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1037,9 +1107,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", - "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.5.tgz", + "integrity": "sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1050,13 +1120,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", - "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz", + "integrity": "sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0", + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/visitor-keys": "5.30.5", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1077,15 +1147,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.5.tgz", + "integrity": "sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", + "@typescript-eslint/scope-manager": "5.30.5", + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/typescript-estree": "5.30.5", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -1101,12 +1171,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", - "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz", + "integrity": "sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/types": "5.30.5", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1351,39 +1421,142 @@ } }, "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", + "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", "dev": true, "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" + "ansi-align": "^3.0.1", + "camelcase": "^7.0.0", + "chalk": "^5.0.1", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/boxen/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/boxen/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", + "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/boxen/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/boxen/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.16.0.tgz", + "integrity": "sha512-qpaThT2HQkFb83gMOrdKVsfCN7LKxP26Yq+smPzY1FqoHRjqmjqHXA7n5Gkxi8efirtbeEUxzfEdePthQWCuHw==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/wrap-ansi": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1484,19 +1657,28 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/cacheable-lookup": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz", + "integrity": "sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", + "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, "engines": { "node": ">=8" @@ -1667,9 +1849,9 @@ } }, "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", "dev": true }, "node_modules/cint": { @@ -1688,12 +1870,12 @@ } }, "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1782,27 +1964,58 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "node_modules/compress-brotli": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", + "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", + "dev": true, + "dependencies": { + "@types/json-buffer": "~3.0.0", + "json-buffer": "~3.0.1" + }, + "engines": { + "node": ">= 12" + } + }, "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/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", + "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", "dev": true, "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "dot-prop": "^6.0.1", + "graceful-fs": "^4.2.6", + "unique-string": "^3.0.0", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^5.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" } }, "node_modules/console-control-strings": { @@ -1841,12 +2054,30 @@ } }, "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "dev": true, + "dependencies": { + "type-fest": "^1.0.1" + }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/debug": { @@ -1876,15 +2107,30 @@ } }, "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "dependencies": { - "mimic-response": "^1.0.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/deep-eql": { @@ -1927,10 +2173,13 @@ } }, "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } }, "node_modules/delegates": { "version": "1.0.0", @@ -1981,21 +2230,24 @@ } }, "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dev": true, "dependencies": { "is-obj": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, "node_modules/electron-to-chromium": { @@ -2060,12 +2312,15 @@ } }, "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escape-string-regexp": { @@ -2081,9 +2336,9 @@ } }, "node_modules/eslint": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", - "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", + "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", "dev": true, "dependencies": { "@eslint/eslintrc": "^1.3.0", @@ -2461,6 +2716,12 @@ "node": ">=8.0.0" } }, + "node_modules/form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", + "dev": true + }, "node_modules/fp-and-or": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/fp-and-or/-/fp-and-or-0.1.3.tgz", @@ -2610,15 +2871,15 @@ } }, "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/glob": { @@ -2730,25 +2991,30 @@ } }, "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", "dev": true, "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "@sindresorhus/is": "^4.6.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, "node_modules/graceful-fs": { @@ -2806,12 +3072,15 @@ "dev": true }, "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", + "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", "dev": true, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/hasha": { @@ -2886,6 +3155,19 @@ "node": ">= 6" } }, + "node_modules/http2-wrapper": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz", + "integrity": "sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -2980,12 +3262,12 @@ } }, "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/imurmurhash": { @@ -3053,12 +3335,12 @@ } }, "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "dependencies": { - "ci-info": "^2.0.0" + "ci-info": "^3.2.0" }, "bin": { "is-ci": "bin.js" @@ -3129,12 +3411,12 @@ "dev": true }, "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", + "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", "dev": true, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3216,10 +3498,13 @@ } }, "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.0.tgz", + "integrity": "sha512-HneQBCrXGBy15QnaDfcn6OLoU8AQPAa0Qn0IeJR/QCo4E8dNZaGGwxpCwWyEBQC5QvFonP8d6t60iGpAHVAfNA==", + "dev": true, + "engines": { + "node": ">=12" + } }, "node_modules/isexe": { "version": "2.0.0", @@ -3379,9 +3664,9 @@ } }, "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, "node_modules/json-parse-even-better-errors": { @@ -3439,33 +3724,37 @@ ] }, "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz", + "integrity": "sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw==", "dev": true, "dependencies": { - "json-buffer": "3.0.0" + "compress-brotli": "^1.3.8", + "json-buffer": "3.0.1" } }, "node_modules/kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", "dev": true, "dependencies": { - "package-json": "^6.3.0" + "package-json": "^8.1.0" }, "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/levn": { @@ -3539,12 +3828,15 @@ } }, "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lru-cache": { @@ -4030,12 +4322,15 @@ } }, "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm-bundled": { @@ -4048,9 +4343,9 @@ } }, "node_modules/npm-check-updates": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-14.1.1.tgz", - "integrity": "sha512-lVGckd/SR9lpCPV3WhY/LbhqQRV6V7jYkN5wSp49P+ER2xCgKGewE1i5kSCBBnNG91tcQo9CfBGhX1KY9t7DCg==", + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-15.2.0.tgz", + "integrity": "sha512-QcNQE3FyOsolWD1Nc+DRryffuBf68fXqVDvN5gBMk3BSaRQ+urZCTfm9By0VuPPA2vrDBRPVgYZB+8L9UN4Avw==", "dev": true, "dependencies": { "chalk": "^4.1.2", @@ -4068,10 +4363,10 @@ "lodash": "^4.17.21", "minimatch": "^5.1.0", "p-map": "^4.0.0", - "pacote": "^13.6.0", + "pacote": "^13.6.1", "parse-github-url": "^1.0.2", "progress": "^2.0.3", - "prompts-ncu": "^2.5.0", + "prompts-ncu": "^2.5.1", "rc-config-loader": "^4.1.0", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", @@ -4079,7 +4374,7 @@ "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^1.0.0", - "update-notifier": "^5.1.0", + "update-notifier": "^6.0.2", "yaml": "^2.1.1" }, "bin": { @@ -4087,7 +4382,7 @@ "npm-check-updates": "build/src/bin/cli.js" }, "engines": { - "node": ">=14" + "node": ">=14.14" } }, "node_modules/npm-check-updates/node_modules/brace-expansion": { @@ -4445,12 +4740,12 @@ } }, "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true, "engines": { - "node": ">=6" + "node": ">=12.20" } }, "node_modules/p-limit": { @@ -4523,27 +4818,21 @@ } }, "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.0.tgz", + "integrity": "sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg==", "dev": true, "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" }, "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pacote": { @@ -4741,15 +5030,6 @@ "node": ">= 0.8.0" } }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", @@ -4815,9 +5095,9 @@ } }, "node_modules/prompts-ncu": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-2.5.0.tgz", - "integrity": "sha512-a9WdInrG7zSlmfzDszmF3r8O4grZRI8+ChV0LtagHRT4dH7F+kxkrwFPGxeS83FZgAGBx3AXoLP+c4kGJb1P3w==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-2.5.1.tgz", + "integrity": "sha512-Hdd7GgV7b76Yh9FP9HL1D9xqtJCJdVPpiM2vDtuoc8W1KfweJe15gutFYmxkq83ViFaagFM8K0UcPCQ/tZq8bA==", "dev": true, "dependencies": { "kleur": "^4.0.1", @@ -4827,6 +5107,12 @@ "node": ">= 6" } }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -4847,15 +5133,18 @@ } }, "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", + "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", "dev": true, "dependencies": { - "escape-goat": "^2.0.0" + "escape-goat": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/queue-microtask": { @@ -4878,6 +5167,18 @@ } ] }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -4996,27 +5297,30 @@ } }, "node_modules/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.1.tgz", + "integrity": "sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA==", "dev": true, "dependencies": { - "rc": "1.2.8" + "@pnpm/npm-conf": "^1.0.4" }, "engines": { - "node": ">=6.0.0" + "node": ">=14" } }, "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", "dev": true, "dependencies": { - "rc": "^1.2.8" + "rc": "1.2.8" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/release-zalgo": { @@ -5064,6 +5368,12 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -5074,12 +5384,21 @@ } }, "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", "dev": true, "dependencies": { - "lowercase-keys": "^1.0.0" + "lowercase-keys": "^2.0.0" + } + }, + "node_modules/responselike/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/retry": { @@ -5188,24 +5507,18 @@ } }, "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "dev": true, "dependencies": { - "semver": "^6.3.0" + "semver": "^7.3.5" }, "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/semver-utils": { @@ -5570,15 +5883,6 @@ "node": ">=4" } }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5592,9 +5896,9 @@ } }, "node_modules/ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.2.tgz", + "integrity": "sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -5751,15 +6055,18 @@ } }, "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "dev": true, "dependencies": { - "crypto-random-string": "^2.0.0" + "crypto-random-string": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/update-browserslist-db": { @@ -5789,33 +6096,45 @@ } }, "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", + "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", "dev": true, "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", + "boxen": "^7.0.0", + "chalk": "^5.0.1", + "configstore": "^6.0.0", + "has-yarn": "^3.0.0", + "import-lazy": "^4.0.0", + "is-ci": "^3.0.1", "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" + "is-npm": "^6.0.0", + "is-yarn-global": "^0.4.0", + "latest-version": "^7.0.0", + "pupa": "^3.1.0", + "semver": "^7.3.7", + "semver-diff": "^4.0.0", + "xdg-basedir": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -5825,18 +6144,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -5959,15 +6266,68 @@ } }, "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "dev": true, "dependencies": { - "string-width": "^4.0.0" + "string-width": "^5.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/widest-line/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/word-wrap": { @@ -6026,12 +6386,15 @@ } }, "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/y18n": { @@ -6746,19 +7109,38 @@ "read-package-json-fast": "^2.0.3" } }, + "@pnpm/network.ca-file": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.1.tgz", + "integrity": "sha512-gkINruT2KUhZLTaiHxwCOh1O4NVnFT0wLjWFBHmTz9vpKag/C/noIMJXBxFe4F0mYpUVX2puLwAieLYFg2NvoA==", + "dev": true, + "requires": { + "graceful-fs": "4.2.10" + } + }, + "@pnpm/npm-conf": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.4.tgz", + "integrity": "sha512-o5YFq/+ksEJMbSzzkaQDHlp00aonLDU5xNPVTRL12hTWBbVSSeWXxPukq75h+mvXnoOWT95vV2u1HSTw2C4XOw==", + "dev": true, + "requires": { + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + } + }, "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true }, "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, "requires": { - "defer-to-connect": "^1.0.1" + "defer-to-connect": "^2.0.1" } }, "@tootallnate/once": { @@ -6791,6 +7173,18 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, "@types/chai": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", @@ -6807,18 +7201,39 @@ "@types/node": "*" } }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "@types/ini": { "version": "1.3.31", "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.31.tgz", "integrity": "sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w==", "dev": true }, + "@types/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", + "dev": true + }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/lodash": { "version": "4.14.182", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", @@ -6838,11 +7253,20 @@ "dev": true }, "@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz", + "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ==", "dev": true }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -6850,20 +7274,20 @@ "dev": true }, "@types/vscode": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.0.tgz", - "integrity": "sha512-duBwEK5ta/eBBMJMQ7ECMEsMvlE3XJdRGh3xoS1uOO4jl2Z4LPBl5vx8WvBP10ERAgDRmIt/FaSD4RHyBGbChw==", + "version": "1.68.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.1.tgz", + "integrity": "sha512-fXlaq13NT5yHh6yZ3c+UxXloTSk34mIvsNFYyQCeO5Po2BLFAwz7EZT4kQ43B64/aPcnAenyWy3QasrTofBOnQ==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", - "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz", + "integrity": "sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/type-utils": "5.30.0", - "@typescript-eslint/utils": "5.30.0", + "@typescript-eslint/scope-manager": "5.30.5", + "@typescript-eslint/type-utils": "5.30.5", + "@typescript-eslint/utils": "5.30.5", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -6873,52 +7297,52 @@ } }, "@typescript-eslint/parser": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", - "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.5.tgz", + "integrity": "sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", + "@typescript-eslint/scope-manager": "5.30.5", + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/typescript-estree": "5.30.5", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", - "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz", + "integrity": "sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0" + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/visitor-keys": "5.30.5" } }, "@typescript-eslint/type-utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", - "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz", + "integrity": "sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.30.0", + "@typescript-eslint/utils": "5.30.5", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", - "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.5.tgz", + "integrity": "sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", - "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz", + "integrity": "sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0", + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/visitor-keys": "5.30.5", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6927,26 +7351,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.5.tgz", + "integrity": "sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", + "@typescript-eslint/scope-manager": "5.30.5", + "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/typescript-estree": "5.30.5", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", - "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz", + "integrity": "sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/types": "5.30.5", "eslint-visitor-keys": "^3.3.0" } }, @@ -7130,26 +7554,87 @@ "dev": true }, "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", + "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", "dev": true, "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" + "ansi-align": "^3.0.1", + "camelcase": "^7.0.0", + "chalk": "^5.0.1", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" }, "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true + }, "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", + "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==", + "dev": true + }, + "chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "type-fest": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.16.0.tgz", + "integrity": "sha512-qpaThT2HQkFb83gMOrdKVsfCN7LKxP26Yq+smPzY1FqoHRjqmjqHXA7n5Gkxi8efirtbeEUxzfEdePthQWCuHw==", "dev": true + }, + "wrap-ansi": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } } } }, @@ -7231,19 +7716,25 @@ "unique-filename": "^1.1.1" } }, + "cacheable-lookup": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz", + "integrity": "sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==", + "dev": true + }, "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", + "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, "dependencies": { "get-stream": { @@ -7358,9 +7849,9 @@ "dev": true }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", "dev": true }, "cint": { @@ -7376,9 +7867,9 @@ "dev": true }, "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "dev": true }, "cli-table": { @@ -7449,24 +7940,51 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "compress-brotli": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", + "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", + "dev": true, + "requires": { + "@types/json-buffer": "~3.0.0", + "json-buffer": "~3.0.1" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + }, + "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + } + } + }, "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", + "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", "dev": true, "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "dot-prop": "^6.0.1", + "graceful-fs": "^4.2.6", + "unique-string": "^3.0.0", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^5.0.1" } }, "console-control-strings": { @@ -7502,10 +8020,21 @@ } }, "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "dev": true, + "requires": { + "type-fest": "^1.0.1" + }, + "dependencies": { + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } + } }, "debug": { "version": "4.3.4", @@ -7523,12 +8052,20 @@ "dev": true }, "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "requires": { - "mimic-response": "^1.0.0" + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } } }, "deep-eql": { @@ -7562,9 +8099,9 @@ } }, "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true }, "delegates": { @@ -7604,18 +8141,18 @@ } }, "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dev": true, "requires": { "is-obj": "^2.0.0" } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, "electron-to-chromium": { @@ -7674,9 +8211,9 @@ "dev": true }, "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", "dev": true }, "escape-string-regexp": { @@ -7686,9 +8223,9 @@ "dev": true }, "eslint": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", - "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", + "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", "dev": true, "requires": { "@eslint/eslintrc": "^1.3.0", @@ -7977,6 +8514,12 @@ "signal-exit": "^3.0.2" } }, + "form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", + "dev": true + }, "fp-and-or": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/fp-and-or/-/fp-and-or-0.1.3.tgz", @@ -8075,13 +8618,10 @@ "dev": true }, "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true }, "glob": { "version": "8.0.3", @@ -8163,22 +8703,24 @@ } }, "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", + "dev": true, + "requires": { + "@sindresorhus/is": "^4.6.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" } }, "graceful-fs": { @@ -8222,9 +8764,9 @@ "dev": true }, "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", + "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", "dev": true }, "hasha": { @@ -8283,6 +8825,16 @@ "debug": "4" } }, + "http2-wrapper": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz", + "integrity": "sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + } + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -8358,9 +8910,9 @@ } }, "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true }, "imurmurhash": { @@ -8416,12 +8968,12 @@ } }, "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "requires": { - "ci-info": "^2.0.0" + "ci-info": "^3.2.0" } }, "is-core-module": { @@ -8471,9 +9023,9 @@ "dev": true }, "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", + "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", "dev": true }, "is-number": { @@ -8525,9 +9077,9 @@ "dev": true }, "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.0.tgz", + "integrity": "sha512-HneQBCrXGBy15QnaDfcn6OLoU8AQPAa0Qn0IeJR/QCo4E8dNZaGGwxpCwWyEBQC5QvFonP8d6t60iGpAHVAfNA==", "dev": true }, "isexe": { @@ -8656,9 +9208,9 @@ "dev": true }, "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, "json-parse-even-better-errors": { @@ -8707,27 +9259,28 @@ "dev": true }, "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz", + "integrity": "sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw==", "dev": true, "requires": { - "json-buffer": "3.0.0" + "compress-brotli": "^1.3.8", + "json-buffer": "3.0.1" } }, "kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true }, "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", "dev": true, "requires": { - "package-json": "^6.3.0" + "package-json": "^8.1.0" } }, "levn": { @@ -8786,9 +9339,9 @@ } }, "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true }, "lru-cache": { @@ -9163,9 +9716,9 @@ "dev": true }, "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true }, "npm-bundled": { @@ -9178,9 +9731,9 @@ } }, "npm-check-updates": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-14.1.1.tgz", - "integrity": "sha512-lVGckd/SR9lpCPV3WhY/LbhqQRV6V7jYkN5wSp49P+ER2xCgKGewE1i5kSCBBnNG91tcQo9CfBGhX1KY9t7DCg==", + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-15.2.0.tgz", + "integrity": "sha512-QcNQE3FyOsolWD1Nc+DRryffuBf68fXqVDvN5gBMk3BSaRQ+urZCTfm9By0VuPPA2vrDBRPVgYZB+8L9UN4Avw==", "dev": true, "requires": { "chalk": "^4.1.2", @@ -9198,10 +9751,10 @@ "lodash": "^4.17.21", "minimatch": "^5.1.0", "p-map": "^4.0.0", - "pacote": "^13.6.0", + "pacote": "^13.6.1", "parse-github-url": "^1.0.2", "progress": "^2.0.3", - "prompts-ncu": "^2.5.0", + "prompts-ncu": "^2.5.1", "rc-config-loader": "^4.1.0", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", @@ -9209,7 +9762,7 @@ "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^1.0.0", - "update-notifier": "^5.1.0", + "update-notifier": "^6.0.2", "yaml": "^2.1.1" }, "dependencies": { @@ -9500,9 +10053,9 @@ } }, "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true }, "p-limit": { @@ -9551,23 +10104,15 @@ } }, "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.0.tgz", + "integrity": "sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg==", "dev": true, "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" } }, "pacote": { @@ -9710,12 +10255,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true - }, "prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", @@ -9760,15 +10299,21 @@ } }, "prompts-ncu": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-2.5.0.tgz", - "integrity": "sha512-a9WdInrG7zSlmfzDszmF3r8O4grZRI8+ChV0LtagHRT4dH7F+kxkrwFPGxeS83FZgAGBx3AXoLP+c4kGJb1P3w==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-2.5.1.tgz", + "integrity": "sha512-Hdd7GgV7b76Yh9FP9HL1D9xqtJCJdVPpiM2vDtuoc8W1KfweJe15gutFYmxkq83ViFaagFM8K0UcPCQ/tZq8bA==", "dev": true, "requires": { "kleur": "^4.0.1", "sisteransi": "^1.0.5" } }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -9786,12 +10331,12 @@ "dev": true }, "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", + "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", "dev": true, "requires": { - "escape-goat": "^2.0.0" + "escape-goat": "^4.0.0" } }, "queue-microtask": { @@ -9800,6 +10345,12 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -9896,21 +10447,21 @@ "dev": true }, "registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.1.tgz", + "integrity": "sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA==", "dev": true, "requires": { - "rc": "1.2.8" + "@pnpm/npm-conf": "^1.0.4" } }, "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", "dev": true, "requires": { - "rc": "^1.2.8" + "rc": "1.2.8" } }, "release-zalgo": { @@ -9946,6 +10497,12 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -9953,12 +10510,20 @@ "dev": true }, "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", "dev": true, "requires": { - "lowercase-keys": "^1.0.0" + "lowercase-keys": "^2.0.0" + }, + "dependencies": { + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } } }, "retry": { @@ -10041,20 +10606,12 @@ } }, "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "dev": true, "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "semver": "^7.3.5" } }, "semver-utils": { @@ -10332,12 +10889,6 @@ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -10348,9 +10899,9 @@ } }, "ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.2.tgz", + "integrity": "sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==", "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", @@ -10453,12 +11004,12 @@ } }, "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "dev": true, "requires": { - "crypto-random-string": "^2.0.0" + "crypto-random-string": "^4.0.0" } }, "update-browserslist-db": { @@ -10472,25 +11023,33 @@ } }, "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", + "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", "dev": true, "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", + "boxen": "^7.0.0", + "chalk": "^5.0.1", + "configstore": "^6.0.0", + "has-yarn": "^3.0.0", + "import-lazy": "^4.0.0", + "is-ci": "^3.0.1", "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" + "is-npm": "^6.0.0", + "is-yarn-global": "^0.4.0", + "latest-version": "^7.0.0", + "pupa": "^3.1.0", + "semver": "^7.3.7", + "semver-diff": "^4.0.0", + "xdg-basedir": "^5.1.0" + }, + "dependencies": { + "chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true + } } }, "uri-js": { @@ -10502,15 +11061,6 @@ "punycode": "^2.1.0" } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -10615,12 +11165,46 @@ } }, "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "dev": true, "requires": { - "string-width": "^4.0.0" + "string-width": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } } }, "word-wrap": { @@ -10670,9 +11254,9 @@ } }, "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "dev": true }, "y18n": { diff --git a/package.json b/package.json index 51426b867..129705e5e 100644 --- a/package.json +++ b/package.json @@ -64,22 +64,22 @@ "@types/ini": "^1.3.31", "@types/lodash": "^4.14.182", "@types/mocha": "^9.1.1", - "@types/node": "^18.0.0", + "@types/node": "^18.0.3", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.68.0", - "@typescript-eslint/eslint-plugin": "^5.30.0", - "@typescript-eslint/parser": "^5.30.0", + "@types/vscode": "^1.68.1", + "@typescript-eslint/eslint-plugin": "^5.30.5", + "@typescript-eslint/parser": "^5.30.5", "chai": "^4.3.6", - "eslint": "^8.18.0", + "eslint": "^8.19.0", "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", "mocha": "^10.0.0", - "npm-check-updates": "^14.1.1", + "npm-check-updates": "^15.2.0", "nyc": "^15.1.0", "prettier": "^2.7.1", "rimraf": "^3.0.2", - "ts-node": "^10.8.1", + "ts-node": "^10.8.2", "typescript": "^4.7.4" }, "scripts": { From 7bb03b0563cbe77813ff330d553ba3d1cc34747c Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 7 Jul 2022 15:20:59 +0100 Subject: [PATCH 407/558] Release v0.9.0 (#402) ## v0.9.0 ### Minor Changes - Add --version flag for ansible-language-server (#392) @yaegassy - Auto-complete hosts values based on ansible inventory file (#350) @priyamsahoo Co-authored-by: Ansible DevTools --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3141aa817..f1d204b6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,13 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v0.9.0 + +### Minor Changes + +- Add --version flag for ansible-language-server (#392) @yaegassy +- Auto-complete hosts values based on ansible inventory file (#350) @priyamsahoo + ## v0.8.0 ### Minor Changes diff --git a/package-lock.json b/package-lock.json index b77d4ab2a..9caf8833f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.8.0", + "version": "0.9.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.8.0", + "version": "0.9.0", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 129705e5e..be9b4c1d4 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.8.0", + "version": "0.9.0", "contributors": [ { "name": "Tomasz Maciążek", From b85edfaebba919afd8496679e022118f25827b15 Mon Sep 17 00:00:00 2001 From: yaegassy Date: Wed, 13 Jul 2022 18:46:23 +0900 Subject: [PATCH 408/558] Add handling of cases where lsp clients do not send required settings (#405) --- src/providers/completionProvider.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index cd4dfbb94..498fd43ad 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -63,14 +63,14 @@ export async function doCompletion( preparedText = insert(preparedText, offset, "_:"); const yamlDocs = parseAllDocuments(preparedText); - const useFqcn = (await context.documentSettings.get(document.uri)).ansible - .useFullyQualifiedCollectionNames; - const provideRedirectModulesCompletion = ( - await context.documentSettings.get(document.uri) - ).completion.provideRedirectModules; - const provideModuleOptionAliasesCompletion = ( - await context.documentSettings.get(document.uri) - ).completion.provideModuleOptionAliases; + const extensionSettings = await context.documentSettings.get(document.uri); + + const useFqcn = + extensionSettings.ansible?.useFullyQualifiedCollectionNames ?? true; + const provideRedirectModulesCompletion = + extensionSettings.completion?.provideRedirectModules ?? true; + const provideModuleOptionAliasesCompletion = + extensionSettings.completion?.provideModuleOptionAliases ?? true; // We need inclusive matching, since cursor position is the position of the character right after it // NOTE: Might no longer be required due to the hack above From 88cf7352220b0e7cc7b3d1119526b8433471cc0c Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 13 Jul 2022 13:33:55 +0100 Subject: [PATCH 409/558] Fix pr creation on release (#407) Reference https://github.com/cli/cli/issues/5896#issuecomment-1183059758 --- .github/workflows/release.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 29df19297..88f5cafbf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,6 +17,9 @@ jobs: steps: - uses: actions/checkout@v3 + with: + # needed by "gh pr create" + fetch-depth: 0 # Setup .npmrc file to publish to npm - uses: actions/setup-node@v3 with: From bef4433f758730e7e4b5ca807a1f21c7a51edb04 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 13 Jul 2022 13:37:31 +0100 Subject: [PATCH 410/558] Bump linkify-it-py (#406) Co-authored-by: Ansible DevTools --- .config/requirements.in | 3 ++- .config/requirements.txt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.config/requirements.in b/.config/requirements.in index 4d73eb3a7..dfb39eddc 100644 --- a/.config/requirements.in +++ b/.config/requirements.in @@ -10,8 +10,9 @@ flake8 # vscode integration mypy # vscode integration pylint # vscode integration # docs +linkify-it-py>=2.0.0 # myst-parser extra MarkupSafe<2.1 # see https://github.com/pallets/jinja/issues/1585 -myst-parser[linkify] >= 0.18.0 +myst-parser >= 0.18.0 setuptools-scm >= 6.0.1 Sphinx >= 5.0.2 sphinx-ansible-theme >= 0.8.0 diff --git a/.config/requirements.txt b/.config/requirements.txt index 88576a586..5de68d5a7 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -28,7 +28,7 @@ isort==5.10.1 jinja2==3.1.2 jsonschema==4.6.0 lazy-object-proxy==1.7.1 -linkify-it-py==1.0.3 +linkify-it-py==2.0.0 lxml==4.9.1 markdown-it-py==2.0.1 markupsafe==2.0.1 From fdba3b3d73e9099650da7b0a88abdf1c66a62242 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 31 Jul 2022 00:09:03 +0530 Subject: [PATCH 411/558] Bump ansible-compat from 2.1.0 to 2.2.0 in /.config (#408) Bumps [ansible-compat](https://github.com/ansible-community/ansible-compat) from 2.1.0 to 2.2.0. - [Release notes](https://github.com/ansible-community/ansible-compat/releases) - [Commits](https://github.com/ansible-community/ansible-compat/compare/v2.1.0...v2.2.0) --- updated-dependencies: - dependency-name: ansible-compat dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 5de68d5a7..c7726b3ce 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,5 +1,5 @@ alabaster==0.7.12 -ansible-compat==2.1.0 +ansible-compat==2.2.0 ansible-core==2.13.1 ansible-lint==6.3.0 ansible-pygments==0.1.1 @@ -62,6 +62,7 @@ requests==2.27.1 resolvelib==0.5.4 rich==12.0.0 ruamel-yaml==0.17.21 +ruamel-yaml-clib==0.2.6 setuptools-scm==6.4.2 six==1.16.0 snowballstemmer==2.2.0 From b27d4504ff1af80f42e9472809b64604ed937794 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 16:47:16 +0100 Subject: [PATCH 412/558] Bump ansible-core from 2.13.1 to 2.13.2 in /.config (#410) Bumps [ansible-core](https://github.com/ansible/ansible) from 2.13.1 to 2.13.2. - [Release notes](https://github.com/ansible/ansible/releases) - [Commits](https://github.com/ansible/ansible/compare/v2.13.1...v2.13.2) --- updated-dependencies: - dependency-name: ansible-core dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index c7726b3ce..19c0f3b6b 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,6 +1,6 @@ alabaster==0.7.12 ansible-compat==2.2.0 -ansible-core==2.13.1 +ansible-core==2.13.2 ansible-lint==6.3.0 ansible-pygments==0.1.1 astroid==2.11.6 From c11a46df58773b0b6aabbd71213104acb97de549 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 16:48:06 +0100 Subject: [PATCH 413/558] Bump pre-commit from 2.19.0 to 2.20.0 in /.config (#404) Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.19.0 to 2.20.0. - [Release notes](https://github.com/pre-commit/pre-commit/releases) - [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) - [Commits](https://github.com/pre-commit/pre-commit/compare/v2.19.0...v2.20.0) --- updated-dependencies: - dependency-name: pre-commit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 19c0f3b6b..4babe5e04 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -46,7 +46,7 @@ pep517==0.12.0 pip-tools==6.6.2 platformdirs==2.5.1 pluggy==1.0.0 -pre-commit==2.19.0 +pre-commit==2.20.0 py==1.11.0 pycodestyle==2.8.0 pycparser==2.21 From f84bf0f2eb00b563b93ffea9b629e338099c6e8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 16:48:19 +0100 Subject: [PATCH 414/558] Bump yamllint from 1.26.3 to 1.27.1 in /.config (#403) Bumps [yamllint](https://github.com/adrienverge/yamllint) from 1.26.3 to 1.27.1. - [Release notes](https://github.com/adrienverge/yamllint/releases) - [Changelog](https://github.com/adrienverge/yamllint/blob/master/CHANGELOG.rst) - [Commits](https://github.com/adrienverge/yamllint/compare/v1.26.3...v1.27.1) --- updated-dependencies: - dependency-name: yamllint dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 4babe5e04..7e8fcb1b7 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -89,7 +89,7 @@ virtualenv==20.13.3 wcmatch==8.3 wheel==0.37.1 wrapt==1.14.1 -yamllint==1.26.3 +yamllint==1.27.1 # The following packages are considered to be unsafe in a requirements file: # pip From 75dddc330a15e97038c363b2117dcfa051e29e71 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 1 Aug 2022 16:49:23 +0100 Subject: [PATCH 415/558] Update dependabot.yml --- .github/dependabot.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6400f383e..01ed73ad4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -14,9 +14,8 @@ updates: schedule: interval: "daily" labels: - - dependencies - # as dependabot bumps only the pinned test dependencies, is safe to: - - bot:chronographer:skip + - "dependencies" + - "skip-changelog" open-pull-requests-limit: 3 allow: # tell dependabot to update only important dependencies, not indirect ones From 36d44824c2e46d3d4566a178ca0d59e0bda881bd Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Tue, 9 Aug 2022 20:22:49 +0530 Subject: [PATCH 416/558] Expose metadata about environment to the client (#413) * add getter for ansible --version output * fix file uri parsing bug * add functionality to receive request and send ansible metadata to the client * remove unused imports * add utility to gather and structure ansible metat data before sending to client * support ee info in ansible meta data * update syntax of function to make argument optional * add ansible-lint location in details * update function to support tests * add tests for getAnsibleMetaData() * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix lint * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * remove commented console logs Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/ansibleLanguageService.ts | 16 + src/services/ansibleConfig.ts | 6 + src/services/executionEnvironment.ts | 9 + src/services/workspaceManager.ts | 4 +- src/utils/getAnsibleMetaData.ts | 192 ++++++++++++ .../utils/getAnsibleMetaData/ansible.cfg | 4 + .../utils/getAnsibleMetaData/inventory | 0 .../utils/getAnsibleMetaData/plays.yml | 20 ++ test/helper.ts | 4 +- test/utils/getAnsibleMetaData.test.ts | 274 ++++++++++++++++++ 10 files changed, 524 insertions(+), 5 deletions(-) create mode 100644 src/utils/getAnsibleMetaData.ts create mode 100644 test/fixtures/utils/getAnsibleMetaData/ansible.cfg create mode 100644 test/fixtures/utils/getAnsibleMetaData/inventory create mode 100644 test/fixtures/utils/getAnsibleMetaData/plays.yml create mode 100644 test/utils/getAnsibleMetaData.test.ts diff --git a/src/ansibleLanguageService.ts b/src/ansibleLanguageService.ts index 19c85071f..5b3032f4c 100644 --- a/src/ansibleLanguageService.ts +++ b/src/ansibleLanguageService.ts @@ -22,6 +22,7 @@ import { import { doValidate } from "./providers/validationProvider"; import { ValidationManager } from "./services/validationManager"; import { WorkspaceManager } from "./services/workspaceManager"; +import { getAnsibleMetaData } from "./utils/getAnsibleMetaData"; /** * Initializes the connection and registers all lifecycle event handlers. @@ -333,6 +334,21 @@ export class AnsibleLanguageService { }); }); }); + + // Send ansible info to client on receive of notification + this.connection.onNotification( + "update/ansible-metadata", + async (activeFileUri) => { + const ansibleMetaData = await getAnsibleMetaData( + this.workspaceManager.getContext(activeFileUri), + this.connection + ); + + this.connection.sendNotification("update/ansible-metadata", [ + ansibleMetaData, + ]); + } + ); } private handleError(error: unknown, contextName: string) { diff --git a/src/services/ansibleConfig.ts b/src/services/ansibleConfig.ts index 2b0490e53..6f11b8336 100644 --- a/src/services/ansibleConfig.ts +++ b/src/services/ansibleConfig.ts @@ -13,6 +13,7 @@ export class AnsibleConfig { private _module_locations: string[] = []; private _ansible_location = ""; private _default_host_list: string[] = []; + private _ansible_meta_data = {}; constructor(connection: Connection, context: WorkspaceFolderContext) { this.connection = connection; @@ -68,6 +69,7 @@ export class AnsibleConfig { ); const versionInfo = ini.parse(ansibleVersionResult.stdout); + this._ansible_meta_data = versionInfo; this._module_locations = parsePythonStringArray( versionInfo["configured module search path"] ); @@ -124,6 +126,10 @@ export class AnsibleConfig { public get ansible_location(): string { return this._ansible_location; } + + public get ansible_meta_data(): object { + return this._ansible_meta_data; + } } function parsePythonStringArray(string_list: string): string[] { diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 6d597bfb1..bd36126c3 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -522,4 +522,13 @@ export class ExecutionEnvironment { const markerFilePath = path.join(hostCacheBasePath, this.successFileMarker); return true ? fs.existsSync(markerFilePath) : false; } + + public get getBasicContainerAndImageDetails() { + return { + containerEngine: this._container_engine, + containerImage: this._container_image, + containerImageId: this._container_image_id, + containerVolumeMounts: this._container_volume_mounts, + }; + } } diff --git a/src/services/workspaceManager.ts b/src/services/workspaceManager.ts index eb2d22cad..ecd5b2f9a 100644 --- a/src/services/workspaceManager.ts +++ b/src/services/workspaceManager.ts @@ -72,7 +72,7 @@ export class WorkspaceManager { */ public getWorkspaceFolder(uri: string): WorkspaceFolder | undefined { for (const workspaceFolder of this.sortedWorkspaceFolders) { - if (uri.startsWith(workspaceFolder.uri)) { + if (URI.parse(uri).toString().startsWith(workspaceFolder.uri)) { return workspaceFolder; } } @@ -81,7 +81,7 @@ export class WorkspaceManager { * opened in client without any workspace. * Set the workspace to directory of the file pointed by uri. */ - const documentFolderPathParts = uri.split(path.sep); + const documentFolderPathParts = URI.parse(uri).toString().split(path.sep); documentFolderPathParts.pop(); const workspaceFolder: WorkspaceFolder = { uri: documentFolderPathParts.join(path.sep), diff --git a/src/utils/getAnsibleMetaData.ts b/src/utils/getAnsibleMetaData.ts new file mode 100644 index 000000000..423fa1244 --- /dev/null +++ b/src/utils/getAnsibleMetaData.ts @@ -0,0 +1,192 @@ +import { Connection } from "vscode-languageserver"; +import { URI } from "vscode-uri"; +import { WorkspaceFolderContext } from "../services/workspaceManager"; +import { CommandRunner } from "./commandRunner"; +import * as child_process from "child_process"; + +let context: WorkspaceFolderContext; +let connection: Connection; + +export async function getAnsibleMetaData( + contextLocal: WorkspaceFolderContext, + connectionLocal: Connection +) { + context = contextLocal; + connection = connectionLocal; + + const ansibleMetaData = {}; + + ansibleMetaData["ansible information"] = await getAnsibleInfo(); + ansibleMetaData["python information"] = await getPythonInfo(); + ansibleMetaData["ansible-lint information"] = await getAnsibleLintInfo(); + + const settings = await context.documentSettings.get( + context.workspaceFolder.uri + ); + + if (settings.executionEnvironment.enabled) { + ansibleMetaData["execution environment information"] = + await getExecutionEnvironmentInfo(); + } + + return ansibleMetaData; +} + +export async function getResultsThroughCommandRunner(cmd, arg) { + const settings = await context.documentSettings.get( + context.workspaceFolder.uri + ); + const commandRunner = new CommandRunner(connection, context, settings); + const workingDirectory = URI.parse(context.workspaceFolder.uri).path; + const mountPaths = new Set([workingDirectory]); + + let result; + try { + result = await commandRunner.runCommand( + cmd, + arg, + workingDirectory, + mountPaths + ); + + if (result.stderr) { + console.log( + `cmd '${cmd} ${arg}' has the following error: ${result.stderr}` + ); + return undefined; + } + } catch (error) { + console.log( + `cmd '${cmd} ${arg}' was not executed with the following error: ' ${error.toString()}` + ); + return undefined; + } + + return result; +} + +async function getAnsibleInfo() { + const ansibleInfo = {}; + + const ansibleVersionObj = (await context.ansibleConfig).ansible_meta_data; + const ansibleVersionObjKeys = Object.keys(ansibleVersionObj); + + // return empty if ansible --version fails to execute + if (ansibleVersionObjKeys.length === 0) { + return ansibleInfo; + } + + let ansibleVersion; + if (ansibleVersionObjKeys[0].includes(" [")) { + ansibleVersion = ansibleVersionObjKeys[0].split(" ["); + } else { + ansibleVersion = ansibleVersionObjKeys[0].split(" "); + } + ansibleInfo["ansible version"] = `Ansible ${ansibleVersion[1].slice(0, -1)}`; + + ansibleInfo["ansible location"] = ( + await context.ansibleConfig + ).ansible_location; + + ansibleInfo["config file path"] = [ansibleVersionObj["config file"]]; + + ansibleInfo["ansible collections location"] = ( + await context.ansibleConfig + ).collections_paths; + + ansibleInfo["ansible module location"] = ( + await context.ansibleConfig + ).module_locations; + + ansibleInfo["ansible default host list path"] = ( + await context.ansibleConfig + ).default_host_list; + + return ansibleInfo; +} + +async function getPythonInfo() { + const pythonInfo = {}; + + const pythonVersionResult = await getResultsThroughCommandRunner( + "python", + "--version" + ); + if (pythonVersionResult === undefined) { + return pythonInfo; + } + + pythonInfo["python version"] = pythonVersionResult.stdout.trim(); + + const pythonPathResult = await getResultsThroughCommandRunner( + "python", + '-c "import sys; print(sys.executable)"' + ); + pythonInfo["python location"] = pythonPathResult.stdout.trim(); + + return pythonInfo; +} + +async function getAnsibleLintInfo() { + const ansibleLintInfo = {}; + + const ansibleLintVersionResult = await getResultsThroughCommandRunner( + "ansible-lint", + "--version" + ); + + if (ansibleLintVersionResult === undefined) { + return ansibleLintInfo; + } + + const ansibleLintPathResult = await getResultsThroughCommandRunner( + "which", + "ansible-lint" + ); + + ansibleLintInfo["ansible-lint version"] = + ansibleLintVersionResult.stdout.trim(); + + ansibleLintInfo["ansible-lint location"] = + ansibleLintPathResult.stdout.trim(); + + return ansibleLintInfo; +} + +async function getExecutionEnvironmentInfo() { + const eeInfo = {}; + + const basicDetails = (await context.executionEnvironment) + .getBasicContainerAndImageDetails; + + eeInfo["container engine"] = basicDetails.containerEngine; + eeInfo["container image"] = basicDetails.containerImage; + eeInfo["container image ID"] = basicDetails.containerImageId; + eeInfo["container volume mounts"] = basicDetails.containerVolumeMounts; + + let eeServiceWorking = false; + let inspectResult; + try { + inspectResult = JSON.parse( + child_process + .execSync( + `${basicDetails.containerEngine} inspect --format='{{json .Config}}' ${basicDetails.containerImage}`, + { + encoding: "utf-8", + } + ) + .toString() + ); + eeServiceWorking = true; + } catch (error) { + eeServiceWorking = false; + console.log(error); + } + + if (eeServiceWorking) { + eeInfo["env"] = inspectResult["Env"]; + eeInfo["working directory"] = inspectResult["WorkingDir"]; + } + + return eeInfo; +} diff --git a/test/fixtures/utils/getAnsibleMetaData/ansible.cfg b/test/fixtures/utils/getAnsibleMetaData/ansible.cfg new file mode 100644 index 000000000..8da969ccb --- /dev/null +++ b/test/fixtures/utils/getAnsibleMetaData/ansible.cfg @@ -0,0 +1,4 @@ +# This config file is used for testing extension features. +[defaults] +inventory = inventory +collections_paths = ../../common/collections diff --git a/test/fixtures/utils/getAnsibleMetaData/inventory b/test/fixtures/utils/getAnsibleMetaData/inventory new file mode 100644 index 000000000..e69de29bb diff --git a/test/fixtures/utils/getAnsibleMetaData/plays.yml b/test/fixtures/utils/getAnsibleMetaData/plays.yml new file mode 100644 index 000000000..915d781cf --- /dev/null +++ b/test/fixtures/utils/getAnsibleMetaData/plays.yml @@ -0,0 +1,20 @@ +- name: Test playbook + gather_facts: False + hosts: localhost + vars: + my_var: "test" + tasks: + - name: Builtin module + ansible.builtin.debug: + msg: "Hello World {{ item }}" + verbosity: 3 + loop: + - one + - two + debugger: on_skipped + + - name: Collection module + org_1.coll_4.module_1: + opt_1: + - sub_opt_1: choice_1 + sub_opt_2: diff --git a/test/helper.ts b/test/helper.ts index 3dce95382..cf829de26 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -21,9 +21,7 @@ export const ANSIBLE_CONFIG_FILE = path.resolve( "ansible.cfg" ); -export function setFixtureAnsibleCollectionPathEnv( - prePendPath: string | undefined = undefined -): void { +export function setFixtureAnsibleCollectionPathEnv(prePendPath?: string): void { if (prePendPath) { process.env.ANSIBLE_COLLECTIONS_PATHS = `${prePendPath}:${ANSIBLE_COLLECTIONS_FIXTURES_BASE_PATH}`; } else { diff --git a/test/utils/getAnsibleMetaData.test.ts b/test/utils/getAnsibleMetaData.test.ts new file mode 100644 index 000000000..1dae17665 --- /dev/null +++ b/test/utils/getAnsibleMetaData.test.ts @@ -0,0 +1,274 @@ +import { expect } from "chai"; +import path = require("path"); +import { + getAnsibleMetaData, + getResultsThroughCommandRunner, +} from "../../src/utils/getAnsibleMetaData"; +import { + createTestWorkspaceManager, + disableExecutionEnvironmentSettings, + enableExecutionEnvironmentSettings, + getDoc, + resolveDocUri, +} from "../helper"; + +function getAnsibleTestInfo() { + const ansibleInfo = {}; + ansibleInfo["ansible version"] = "Ansible"; + ansibleInfo["ansible location"] = "/ansible"; + ansibleInfo["config file path"] = [ + path.resolve( + __dirname, + "..", + "fixtures", + "utils", + "getAnsibleMetaData", + "ansible.cfg" + ), + ]; + ansibleInfo["ansible collections location"] = [ + path.resolve(__dirname, "..", "fixtures", "common", "collections"), + ]; + ansibleInfo["ansible module location"] = ["/modules"]; + ansibleInfo["ansible default host list path"] = [ + path.resolve( + __dirname, + "..", + "fixtures", + "utils", + "getAnsibleMetaData", + "inventory" + ), + ]; + return ansibleInfo; +} + +function getPythonTestInfo() { + const pythonInfo = {}; + pythonInfo["python version"] = "Python"; + pythonInfo["python location"] = "/python"; + return pythonInfo; +} + +function getAnsibleLintTestInfo() { + const ansibleLintInfo = {}; + ansibleLintInfo["ansible-lint version"] = "ansible-lint"; + ansibleLintInfo["ansible-lint location"] = "/ansible-lint"; + return ansibleLintInfo; +} + +function getExecutionEnvironmentTestInfo() { + const eeInfo = {}; + eeInfo["container engine"] = ["docker", "podman"]; + eeInfo["container image"] = "quay.io/"; + eeInfo["container volume mounts"] = [ + { + src: "/fixtures/common/collections", + dest: "/fixtures/common/collections", + }, + ]; + console.log("test data ->", eeInfo); + return eeInfo; +} + +function testCommands() { + describe("Verify the working of command executions", () => { + const tests = [ + { + args: ["ansible", "--version"], + result: "configured module search path", + }, + { + args: ["python", "--version"], + result: "Python", + }, + { + args: ["ansible-lint", "--version"], + result: "using ansible", + }, + { + args: ["ansible-playbook", "missing-file"], + result: undefined, + }, + ]; + + tests.forEach(({ args, result }) => { + it(`should return result for '${args.join(" ")}'`, async function () { + const output = await getResultsThroughCommandRunner(args[0], args[1]); + if (result === undefined) { + expect(output).to.be.undefined; + } else { + expect(output.stdout).contains(result); + } + }); + }); + }); +} + +describe("getAnsibleMetaData()", () => { + const workspaceManager = createTestWorkspaceManager(); + const fixtureFilePath = "utils/getAnsibleMetaData/plays.yml"; + const fixtureFileUri = resolveDocUri(fixtureFilePath); + const context = workspaceManager.getContext(fixtureFileUri); + + const textDoc = getDoc(fixtureFilePath); + const docSettings = context.documentSettings.get(textDoc.uri); + + let actualAnsibleMetaData = {}; + let ansibleInfoForTest = {}; + let pythonInfoForTest = {}; + let ansibleLintInfoForTest = {}; + let executionEnvironmentInfoForTest = {}; + + describe("With EE disabled", () => { + before(async () => { + actualAnsibleMetaData = await getAnsibleMetaData(context, null); + ansibleInfoForTest = getAnsibleTestInfo(); + pythonInfoForTest = getPythonTestInfo(); + ansibleLintInfoForTest = getAnsibleLintTestInfo(); + }); + + testCommands(); + + describe("Verify ansible details", () => { + it("should contain all the keys for ansible information", function () { + expect(Object.keys(ansibleInfoForTest).length).equals( + Object.keys(actualAnsibleMetaData["ansible information"]).length + ); + }); + + it("should have information about ansible version used", function () { + expect( + actualAnsibleMetaData["ansible information"]["ansible version"] + ).includes(ansibleInfoForTest["ansible version"]); + }); + + it("should have a valid ansible location", function () { + expect( + actualAnsibleMetaData["ansible information"]["ansible location"] + ).include(ansibleInfoForTest["ansible location"]); + }); + + it("should have a valid config file location", function () { + expect( + actualAnsibleMetaData["ansible information"]["config file path"] + ).to.include.members(ansibleInfoForTest["config file path"]); + }); + + it("should have a valid collections location", function () { + expect( + actualAnsibleMetaData["ansible information"][ + "ansible collections location" + ] + ).to.include.members( + ansibleInfoForTest["ansible collections location"] + ); + }); + + it("should have a valid inventory file path", function () { + expect( + actualAnsibleMetaData["ansible information"][ + "ansible default host list path" + ] + ).to.include.members( + ansibleInfoForTest["ansible default host list path"] + ); + }); + }); + + describe("Verify python details", () => { + it("should contain all the keys for python information", function () { + expect(Object.keys(pythonInfoForTest).length).equals( + Object.keys(actualAnsibleMetaData["python information"]).length + ); + }); + it("should have information about python version used", function () { + expect( + actualAnsibleMetaData["python information"]["python version"] + ).includes(pythonInfoForTest["python version"]); + }); + + it("should have a valid python location", function () { + expect( + actualAnsibleMetaData["python information"]["python location"] + ).include(pythonInfoForTest["python location"]); + }); + }); + + describe("Verify ansible-lint details", () => { + it("should contain all the keys for ansible-lint information", function () { + expect(Object.keys(ansibleLintInfoForTest).length).equals( + Object.keys(actualAnsibleMetaData["ansible-lint information"]).length + ); + }); + it("should have information about ansible-lint version used", function () { + expect( + actualAnsibleMetaData["ansible-lint information"][ + "ansible-lint version" + ] + ).includes(ansibleLintInfoForTest["ansible-lint version"]); + }); + + it("should have a valid ansible-lint location", function () { + expect( + actualAnsibleMetaData["ansible-lint information"][ + "ansible-lint location" + ] + ).include(ansibleLintInfoForTest["ansible-lint location"]); + }); + }); + + describe("Verify the absence of execution environment details", () => { + it("should not contain execution environment details", function () { + expect(actualAnsibleMetaData["execution environment information"]).to.be + .undefined; + }); + }); + }); + + describe("With EE enabled @ee", () => { + before(async () => { + await enableExecutionEnvironmentSettings(docSettings); + + actualAnsibleMetaData = await getAnsibleMetaData(context, null); + ansibleInfoForTest = getAnsibleTestInfo(); + pythonInfoForTest = getPythonTestInfo(); + ansibleLintInfoForTest = getAnsibleLintTestInfo(); + executionEnvironmentInfoForTest = getExecutionEnvironmentTestInfo(); + }); + + testCommands(); + + describe("Verify the presence of execution environment details", () => { + it("should have a valid container engine", function () { + expect(executionEnvironmentInfoForTest["container engine"]).to.include( + actualAnsibleMetaData["execution environment information"][ + "container engine" + ] + ); + }); + + it("should have a valid container image", function () { + expect( + actualAnsibleMetaData["execution environment information"][ + "container image" + ] + ).to.include(executionEnvironmentInfoForTest["container image"]); + }); + + it("should have valid container volume mount information", function () { + expect( + actualAnsibleMetaData["execution environment information"][ + "container volume mounts" + ][0]["src"] + ).to.include( + executionEnvironmentInfoForTest["container volume mounts"][0]["src"] + ); + }); + + after(async () => { + await disableExecutionEnvironmentSettings(docSettings); + }); + }); + }); +}); From 7aeb1084e48a5580feb76dc5c9c40fe790b2b507 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 9 Aug 2022 15:58:37 +0100 Subject: [PATCH 417/558] chore: pre-commit autoupdate (#411) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: pre-commit autoupdate updates: - [github.com/streetsidesoftware/cspell-cli: v6.1.5 → v6.5.0](https://github.com/streetsidesoftware/cspell-cli/compare/v6.1.5...v6.5.0) - [github.com/igorshubovych/markdownlint-cli: v0.31.1 → v0.32.1](https://github.com/igorshubovych/markdownlint-cli/compare/v0.31.1...v0.32.1) - [github.com/pre-commit/mirrors-eslint: v8.19.0 → v8.21.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.19.0...v8.21.0) * Update .pre-commit-config.yaml Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3692427bf..4d44426b9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.1.5 + rev: v6.5.0 hooks: - id: cspell name: Spell check with cspell @@ -98,7 +98,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.19.0 + rev: v8.21.0 hooks: - id: eslint args: From 8e09cf40a8f5954d89b89dcb191abb9d713dea14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Giquel?= Date: Tue, 9 Aug 2022 17:26:20 +0200 Subject: [PATCH 418/558] Fallback to default value if setting is not provided by client (#409) * Fallback to default value if setting is not provided by client * Remove useless conditions * Add tests Co-authored-by: Sorin Sbarnea --- src/providers/completionProvider.ts | 7 ++-- src/services/settingsManager.ts | 9 +++- test/providers/settingsManager.test.ts | 57 ++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 test/providers/settingsManager.test.ts diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index 498fd43ad..e43e21478 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -65,12 +65,11 @@ export async function doCompletion( const extensionSettings = await context.documentSettings.get(document.uri); - const useFqcn = - extensionSettings.ansible?.useFullyQualifiedCollectionNames ?? true; + const useFqcn = extensionSettings.ansible.useFullyQualifiedCollectionNames; const provideRedirectModulesCompletion = - extensionSettings.completion?.provideRedirectModules ?? true; + extensionSettings.completion.provideRedirectModules; const provideModuleOptionAliasesCompletion = - extensionSettings.completion?.provideModuleOptionAliases ?? true; + extensionSettings.completion.provideModuleOptionAliases; // We need inclusive matching, since cursor position is the position of the character right after it // NOTE: Might no longer be required due to the hack above diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index d32fef31a..3cf2e5a7f 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -139,16 +139,21 @@ export class SettingsManager { this.configurationChangeHandlers.set(uri, handler); } - public get(uri: string): Thenable { + public async get(uri: string): Promise { if (!this.clientSupportsConfigRequests) { return Promise.resolve(this.globalSettings); } let result = this.documentSettings.get(uri); if (!result) { - result = this.connection.workspace.getConfiguration({ + const clientSettings = await this.connection.workspace.getConfiguration({ scopeUri: uri, section: "ansible", }); + // Recursively merge globalSettings with clientSettings to use: + // - setting from client when provided + // - default value of setting otherwise + const mergedSettings = _.merge(this.globalSettings, clientSettings); + result = Promise.resolve(mergedSettings); this.documentSettings.set(uri, result); } return result; diff --git a/test/providers/settingsManager.test.ts b/test/providers/settingsManager.test.ts new file mode 100644 index 000000000..01e7223c5 --- /dev/null +++ b/test/providers/settingsManager.test.ts @@ -0,0 +1,57 @@ +import { expect } from "chai"; +import { + WorkspaceFolderContext, + WorkspaceManager, +} from "../../src/services/workspaceManager"; +import { createTestWorkspaceManager } from "../helper"; +import { ExtensionSettings } from "../../src/interfaces/extensionSettings"; + +function simulateClientSettings(workspaceManager: WorkspaceManager, settings) { + workspaceManager.clientCapabilities.workspace = { + configuration: true, + }; + workspaceManager.connection.workspace.getConfiguration = function () { + return Promise.resolve(settings); + }; +} + +describe("get()", () => { + describe("Merge settings from client", () => { + describe("When client provides empty settings", () => { + let context: WorkspaceFolderContext; + let mergedSettings: ExtensionSettings; + before(async () => { + const workspaceManager = createTestWorkspaceManager(); + simulateClientSettings(workspaceManager, {}); + context = workspaceManager.getContext(""); + mergedSettings = await context.documentSettings.get(""); + }); + it("should return default value for all settings", () => { + expect(mergedSettings).to.deep.equal( + context.documentSettings.globalSettings + ); + }); + }); + + describe("When client provides partial settings", () => { + let context: WorkspaceFolderContext; + let mergedSettings: ExtensionSettings; + before(async () => { + const workspaceManager = createTestWorkspaceManager(); + simulateClientSettings(workspaceManager, { + ansibleLint: { enabled: false }, + }); + context = workspaceManager.getContext(""); + mergedSettings = await context.documentSettings.get(""); + }); + it("should return setting from client when defined", () => { + expect(mergedSettings.ansibleLint.enabled).to.equal(false); + }); + it("should return default value otherwise", () => { + expect(mergedSettings.ansibleLint.path).to.equal( + context.documentSettings.globalSettings.ansibleLint.path + ); + }); + }); + }); +}); From c1c2c22ba4ae7f989abae27b6af88dcf0786a04f Mon Sep 17 00:00:00 2001 From: ansibot Date: Tue, 9 Aug 2022 18:06:33 +0200 Subject: [PATCH 419/558] Release v0.10.0 (#415) ## v0.10.0 ### Minor Changes - Expose metadata about environment to the client (#413) @priyamsahoo ### Bugfixes - Fallback to default value if setting is not provided by client (#409) @fredericgiquel - Bump ansible-compat from 2.1.0 to 2.2.0 in /.config (#408) - Add handling of cases where lsp clients do not send required settings (#405) @yaegassy Co-authored-by: Ansible DevTools --- CHANGELOG.md | 14 ++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1d204b6f..4ee406584 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,20 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v0.10.0 + +### Minor Changes + +- Expose metadata about environment to the client (#413) @priyamsahoo + +### Bugfixes + +- Fallback to default value if setting is not provided by client (#409) + @fredericgiquel +- Bump ansible-compat from 2.1.0 to 2.2.0 in /.config (#408) +- Add handling of cases where lsp clients do not send required settings (#405) + @yaegassy + ## v0.9.0 ### Minor Changes diff --git a/package-lock.json b/package-lock.json index 9caf8833f..5c8ed6fc6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.9.0", + "version": "0.10.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.9.0", + "version": "0.10.0", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index be9b4c1d4..0bb6e1f31 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.9.0", + "version": "0.10.0", "contributors": [ { "name": "Tomasz Maciążek", From 25d45f544c3de2ae20499958f9b74c7181164bc1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 21:27:46 +0530 Subject: [PATCH 420/558] Bump ansible-core from 2.13.2 to 2.13.3 in /.config (#419) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 7e8fcb1b7..2c7abd17e 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,6 +1,6 @@ alabaster==0.7.12 ansible-compat==2.2.0 -ansible-core==2.13.2 +ansible-core==2.13.3 ansible-lint==6.3.0 ansible-pygments==0.1.1 astroid==2.11.6 From 0e08cafbd1a728245b1495d1de847b9d27a795fb Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 23 Aug 2022 17:37:49 +0100 Subject: [PATCH 421/558] Disable python debugger when running external commands (#420) In order to avoid triggering the debugger when an breakpoint() is found in one of the called Python tools, we just disable it. --- .config/dictionary.txt | 1 + src/utils/misc.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 95ae032ed..4e9af7f8c 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -5,6 +5,7 @@ FQCNs HORIZONTALLINE Jenkinsfile OSTYPE +PYTHONBREAKPOINT PYTHONHOME SIGINT SIGTERM diff --git a/src/utils/misc.ts b/src/utils/misc.ts index ba621d872..4ed48627b 100644 --- a/src/utils/misc.ts +++ b/src/utils/misc.ts @@ -51,6 +51,9 @@ export function withInterpreter( const newEnv = Object.assign({}, process.env, { ANSIBLE_FORCE_COLOR: "0", // ensure output is parseable (no ANSI) + PYTHONBREAKPOINT: "0", // We want to be sure that python debugger is never + // triggered, even if we mistakenly left a breakpoint() there while + // debugging ansible- lint, or another tool we call. }); if (activationScript) { From 97fe2415ae45e8a54b17b2e0e72c96eec1715743 Mon Sep 17 00:00:00 2001 From: ansibot Date: Tue, 23 Aug 2022 19:05:19 +0200 Subject: [PATCH 422/558] Release v0.10.1 (#421) ## v0.10.1 ### Bugfixes - Disable python debugger when running external commands (#420) @ssbarnea Co-authored-by: Ansible DevTools --- CHANGELOG.md | 6 ++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ee406584..91c64f3ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,12 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v0.10.1 + +### Bugfixes + +- Disable python debugger when running external commands (#420) @ssbarnea + ## v0.10.0 ### Minor Changes diff --git a/package-lock.json b/package-lock.json index 5c8ed6fc6..757a3006f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.10.0", + "version": "0.10.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.10.0", + "version": "0.10.1", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 0bb6e1f31..0bf1c2002 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.10.0", + "version": "0.10.1", "contributors": [ { "name": "Tomasz Maciążek", From a8d2299fee29c8a001fb047a5ca588f324d2f9bc Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 23 Aug 2022 21:11:01 +0100 Subject: [PATCH 423/558] Update GHA release (#424) - ensure publish is called when we release from web interface - rename release to prepare-release to make it less confusing --- .github/workflows/{release.yml => prepare-release.yml} | 4 +--- .github/workflows/publish.yml | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) rename .github/workflows/{release.yml => prepare-release.yml} (95%) diff --git a/.github/workflows/release.yml b/.github/workflows/prepare-release.yml similarity index 95% rename from .github/workflows/release.yml rename to .github/workflows/prepare-release.yml index 88f5cafbf..f493cad40 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/prepare-release.yml @@ -1,10 +1,8 @@ --- # This workflow is generating a pull request with updated version and changelog -name: release +name: prepare-release "on": workflow_dispatch: - release: - types: [published] permissions: write-all diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 5e25683d6..d26b3090d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -2,6 +2,8 @@ name: publish "on": workflow_dispatch: + release: + types: [published] jobs: npmjs: From e086452bfc97dede801188eb8c6b85c18edd991f Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 23 Aug 2022 22:31:04 +0100 Subject: [PATCH 424/558] Enable caching of podman image on macos (#425) --- .github/workflows/task.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 3caf03a23..73ab2846b 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -9,6 +9,10 @@ on: pull_request: branches: [main] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + env: FORCE_COLOR: "1" # make mocha output colorful # https://docs.github.com/en/actions/learn-github-actions/environment-variables @@ -106,8 +110,10 @@ jobs: path: | ~/.cache/npm ~/.cache/pip + ~/.cache/yarn ~/.nvm/.cache ~/Library/Caches/pip + ~/.local/share/containers/podman/machine/qemu key: > ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles( 'package.json', @@ -159,6 +165,21 @@ jobs: - name: task ${{ matrix.task-name }} run: task -v ${{ matrix.task-name }} + - name: Stop services + if: "contains(matrix.os, 'macos')" + # Stopping podman machine is needed or caching it will fail + run: | + command -v podman && { + podman machine stop + while [[ "$(podman machine ls --format '{{.Running}}' \ + --noheading || true)" != "false" ]]; do + sleep 1 + echo -n . + done + echo . + } + continue-on-error: true + check: # This job does nothing and is only used for the branch protection if: always() runs-on: ubuntu-latest From 47f78bb7c2356d5542561c1dfea4c63e7e1b15b5 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 23 Aug 2022 23:19:35 +0100 Subject: [PATCH 425/558] Bump dependencies (#426) --- .config/requirements.txt | 1 - .pre-commit-config.yaml | 6 +- package-lock.json | 397 ++++++++++++++++++++++----------------- package.json | 18 +- 4 files changed, 232 insertions(+), 190 deletions(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 2c7abd17e..61217b2d6 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -62,7 +62,6 @@ requests==2.27.1 resolvelib==0.5.4 rich==12.0.0 ruamel-yaml==0.17.21 -ruamel-yaml-clib==0.2.6 setuptools-scm==6.4.2 six==1.16.0 snowballstemmer==2.2.0 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4d44426b9..9a586e454 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.5.0 + rev: v6.8.0 hooks: - id: cspell name: Spell check with cspell @@ -89,7 +89,7 @@ repos: hooks: - id: prettier - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.31.1 + rev: v0.32.2 hooks: - id: markdownlint exclude: > @@ -98,7 +98,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.21.0 + rev: v8.22.0 hooks: - id: eslint args: diff --git a/package-lock.json b/package-lock.json index 757a3006f..4b78395de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,27 +23,27 @@ "ansible-language-server": "bin/ansible-language-server" }, "devDependencies": { - "@types/chai": "^4.3.1", + "@types/chai": "^4.3.3", "@types/glob": "^7.2.0", "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.182", + "@types/lodash": "^4.14.184", "@types/mocha": "^9.1.1", - "@types/node": "^18.0.3", + "@types/node": "^18.7.11", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.68.1", - "@typescript-eslint/eslint-plugin": "^5.30.5", - "@typescript-eslint/parser": "^5.30.5", + "@types/vscode": "^1.70.0", + "@typescript-eslint/eslint-plugin": "^5.34.0", + "@typescript-eslint/parser": "^5.34.0", "chai": "^4.3.6", - "eslint": "^8.19.0", + "eslint": "^8.22.0", "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", "mocha": "^10.0.0", - "npm-check-updates": "^15.2.0", + "npm-check-updates": "^16.0.5", "nyc": "^15.1.0", "prettier": "^2.7.1", "rimraf": "^3.0.2", - "ts-node": "^10.8.2", + "ts-node": "^10.9.1", "typescript": "^4.7.4" }, "engines": { @@ -508,9 +508,9 @@ "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -521,6 +521,16 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -910,9 +920,9 @@ } }, "node_modules/@types/chai": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", - "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", "dev": true }, "node_modules/@types/glob": { @@ -959,9 +969,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.14.182", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", - "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", + "version": "4.14.184", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", + "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==", "dev": true }, "node_modules/@types/minimatch": { @@ -977,9 +987,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz", - "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ==", + "version": "18.7.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.11.tgz", + "integrity": "sha512-KZhFpSLlmK/sdocfSAjqPETTMd0ug6HIMIAwkwUpU79olnZdQtMxpQP+G1wDzCH7na+FltSIhbaZuKdwZ8RDrw==", "dev": true }, "node_modules/@types/responselike": { @@ -998,20 +1008,20 @@ "dev": true }, "node_modules/@types/vscode": { - "version": "1.68.1", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.1.tgz", - "integrity": "sha512-fXlaq13NT5yHh6yZ3c+UxXloTSk34mIvsNFYyQCeO5Po2BLFAwz7EZT4kQ43B64/aPcnAenyWy3QasrTofBOnQ==", + "version": "1.70.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.70.0.tgz", + "integrity": "sha512-3/9Fz0F2eBgwciazc94Ien+9u1elnjFg9YAhvAb3qDy/WeFWD9VrOPU7CIytryOVUdbxus8uzL4VZYONA0gDtA==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz", - "integrity": "sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.34.0.tgz", + "integrity": "sha512-eRfPPcasO39iwjlUAMtjeueRGuIrW3TQ9WseIDl7i5UWuFbf83yYaU7YPs4j8+4CxUMIsj1k+4kV+E+G+6ypDQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.30.5", - "@typescript-eslint/type-utils": "5.30.5", - "@typescript-eslint/utils": "5.30.5", + "@typescript-eslint/scope-manager": "5.34.0", + "@typescript-eslint/type-utils": "5.34.0", + "@typescript-eslint/utils": "5.34.0", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -1037,14 +1047,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.5.tgz", - "integrity": "sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.34.0.tgz", + "integrity": "sha512-SZ3NEnK4usd2CXkoV3jPa/vo1mWX1fqRyIVUQZR4As1vyp4fneknBNJj+OFtV8WAVgGf+rOHMSqQbs2Qn3nFZQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.30.5", - "@typescript-eslint/types": "5.30.5", - "@typescript-eslint/typescript-estree": "5.30.5", + "@typescript-eslint/scope-manager": "5.34.0", + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/typescript-estree": "5.34.0", "debug": "^4.3.4" }, "engines": { @@ -1064,13 +1074,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz", - "integrity": "sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.34.0.tgz", + "integrity": "sha512-HNvASMQlah5RsBW6L6c7IJ0vsm+8Sope/wu5sEAf7joJYWNb1LDbJipzmdhdUOnfrDFE6LR1j57x1EYVxrY4ow==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.5", - "@typescript-eslint/visitor-keys": "5.30.5" + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/visitor-keys": "5.34.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1081,12 +1091,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz", - "integrity": "sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.34.0.tgz", + "integrity": "sha512-Pxlno9bjsQ7hs1pdWRUv9aJijGYPYsHpwMeCQ/Inavhym3/XaKt1ZKAA8FIw4odTBfowBdZJDMxf2aavyMDkLg==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.30.5", + "@typescript-eslint/utils": "5.34.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1107,9 +1117,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.5.tgz", - "integrity": "sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.34.0.tgz", + "integrity": "sha512-49fm3xbbUPuzBIOcy2CDpYWqy/X7VBkxVN+DC21e0zIm3+61Z0NZi6J9mqPmSW1BDVk9FIOvuCFyUPjXz93sjA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1120,13 +1130,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz", - "integrity": "sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.34.0.tgz", + "integrity": "sha512-mXHAqapJJDVzxauEkfJI96j3D10sd567LlqroyCeJaHnu42sDbjxotGb3XFtGPYKPD9IyLjhsoULML1oI3M86A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.5", - "@typescript-eslint/visitor-keys": "5.30.5", + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/visitor-keys": "5.34.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1147,15 +1157,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.5.tgz", - "integrity": "sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.34.0.tgz", + "integrity": "sha512-kWRYybU4Rn++7lm9yu8pbuydRyQsHRoBDIo11k7eqBWTldN4xUdVUMCsHBiE7aoEkFzrUEaZy3iH477vr4xHAQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.5", - "@typescript-eslint/types": "5.30.5", - "@typescript-eslint/typescript-estree": "5.30.5", + "@typescript-eslint/scope-manager": "5.34.0", + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/typescript-estree": "5.34.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -1171,12 +1181,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz", - "integrity": "sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.34.0.tgz", + "integrity": "sha512-O1moYjOSrab0a2fUvFpsJe0QHtvTC+cR+ovYpgKrAVXzqQyc74mv76TgY6z+aEtjQE2vgZux3CQVtGryqdcOAw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/types": "5.34.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1200,9 +1210,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1854,12 +1864,6 @@ "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", "dev": true }, - "node_modules/cint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/cint/-/cint-8.2.1.tgz", - "integrity": "sha512-gyWqJHXgDFPNx7PEyFJotutav+al92TTC3dWlMFyTETlOyKBQMZb7Cetqmj3GlrnSILHwSJRwf4mIGzc7C5lXw==", - "dev": true - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -1950,9 +1954,9 @@ } }, "node_modules/commander": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", - "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", + "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", "dev": true, "engines": { "node": "^12.20.0 || >=14" @@ -2336,13 +2340,14 @@ } }, "node_modules/eslint": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", - "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", "dev": true, "dependencies": { "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -2352,14 +2357,17 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.3.3", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -2471,17 +2479,20 @@ } }, "node_modules/espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", "dev": true, "dependencies": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -3023,6 +3034,12 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -4343,15 +4360,14 @@ } }, "node_modules/npm-check-updates": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-15.2.0.tgz", - "integrity": "sha512-QcNQE3FyOsolWD1Nc+DRryffuBf68fXqVDvN5gBMk3BSaRQ+urZCTfm9By0VuPPA2vrDBRPVgYZB+8L9UN4Avw==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.0.5.tgz", + "integrity": "sha512-0qK6NTmgbq8y39xm4y1tKW5ghEGtWWyiUzSPSQEaqb9elqOfZogV4GQVvBYw3xJlt6igJVXgBUyjNqtPv/j7Yw==", "dev": true, "dependencies": { - "chalk": "^4.1.2", - "cint": "^8.2.1", + "chalk": "^5.0.1", "cli-table": "^0.3.11", - "commander": "^9.3.0", + "commander": "^9.4.0", "fast-memoize": "^2.5.2", "find-up": "5.0.0", "fp-and-or": "^0.1.3", @@ -4394,6 +4410,18 @@ "balanced-match": "^1.0.0" } }, + "node_modules/npm-check-updates/node_modules/chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/npm-check-updates/node_modules/minimatch": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", @@ -5896,9 +5924,9 @@ } }, "node_modules/ts-node": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.2.tgz", - "integrity": "sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -6872,9 +6900,9 @@ "dev": true }, "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -6882,6 +6910,12 @@ "minimatch": "^3.0.4" } }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -7186,9 +7220,9 @@ } }, "@types/chai": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", - "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", "dev": true }, "@types/glob": { @@ -7235,9 +7269,9 @@ } }, "@types/lodash": { - "version": "4.14.182", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", - "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", + "version": "4.14.184", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", + "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==", "dev": true }, "@types/minimatch": { @@ -7253,9 +7287,9 @@ "dev": true }, "@types/node": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz", - "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ==", + "version": "18.7.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.11.tgz", + "integrity": "sha512-KZhFpSLlmK/sdocfSAjqPETTMd0ug6HIMIAwkwUpU79olnZdQtMxpQP+G1wDzCH7na+FltSIhbaZuKdwZ8RDrw==", "dev": true }, "@types/responselike": { @@ -7274,20 +7308,20 @@ "dev": true }, "@types/vscode": { - "version": "1.68.1", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.1.tgz", - "integrity": "sha512-fXlaq13NT5yHh6yZ3c+UxXloTSk34mIvsNFYyQCeO5Po2BLFAwz7EZT4kQ43B64/aPcnAenyWy3QasrTofBOnQ==", + "version": "1.70.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.70.0.tgz", + "integrity": "sha512-3/9Fz0F2eBgwciazc94Ien+9u1elnjFg9YAhvAb3qDy/WeFWD9VrOPU7CIytryOVUdbxus8uzL4VZYONA0gDtA==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz", - "integrity": "sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.34.0.tgz", + "integrity": "sha512-eRfPPcasO39iwjlUAMtjeueRGuIrW3TQ9WseIDl7i5UWuFbf83yYaU7YPs4j8+4CxUMIsj1k+4kV+E+G+6ypDQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.30.5", - "@typescript-eslint/type-utils": "5.30.5", - "@typescript-eslint/utils": "5.30.5", + "@typescript-eslint/scope-manager": "5.34.0", + "@typescript-eslint/type-utils": "5.34.0", + "@typescript-eslint/utils": "5.34.0", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -7297,52 +7331,52 @@ } }, "@typescript-eslint/parser": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.5.tgz", - "integrity": "sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.34.0.tgz", + "integrity": "sha512-SZ3NEnK4usd2CXkoV3jPa/vo1mWX1fqRyIVUQZR4As1vyp4fneknBNJj+OFtV8WAVgGf+rOHMSqQbs2Qn3nFZQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.30.5", - "@typescript-eslint/types": "5.30.5", - "@typescript-eslint/typescript-estree": "5.30.5", + "@typescript-eslint/scope-manager": "5.34.0", + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/typescript-estree": "5.34.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz", - "integrity": "sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.34.0.tgz", + "integrity": "sha512-HNvASMQlah5RsBW6L6c7IJ0vsm+8Sope/wu5sEAf7joJYWNb1LDbJipzmdhdUOnfrDFE6LR1j57x1EYVxrY4ow==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.5", - "@typescript-eslint/visitor-keys": "5.30.5" + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/visitor-keys": "5.34.0" } }, "@typescript-eslint/type-utils": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz", - "integrity": "sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.34.0.tgz", + "integrity": "sha512-Pxlno9bjsQ7hs1pdWRUv9aJijGYPYsHpwMeCQ/Inavhym3/XaKt1ZKAA8FIw4odTBfowBdZJDMxf2aavyMDkLg==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.30.5", + "@typescript-eslint/utils": "5.34.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.5.tgz", - "integrity": "sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.34.0.tgz", + "integrity": "sha512-49fm3xbbUPuzBIOcy2CDpYWqy/X7VBkxVN+DC21e0zIm3+61Z0NZi6J9mqPmSW1BDVk9FIOvuCFyUPjXz93sjA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz", - "integrity": "sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.34.0.tgz", + "integrity": "sha512-mXHAqapJJDVzxauEkfJI96j3D10sd567LlqroyCeJaHnu42sDbjxotGb3XFtGPYKPD9IyLjhsoULML1oI3M86A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.5", - "@typescript-eslint/visitor-keys": "5.30.5", + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/visitor-keys": "5.34.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7351,26 +7385,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.5.tgz", - "integrity": "sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.34.0.tgz", + "integrity": "sha512-kWRYybU4Rn++7lm9yu8pbuydRyQsHRoBDIo11k7eqBWTldN4xUdVUMCsHBiE7aoEkFzrUEaZy3iH477vr4xHAQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.5", - "@typescript-eslint/types": "5.30.5", - "@typescript-eslint/typescript-estree": "5.30.5", + "@typescript-eslint/scope-manager": "5.34.0", + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/typescript-estree": "5.34.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz", - "integrity": "sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA==", + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.34.0.tgz", + "integrity": "sha512-O1moYjOSrab0a2fUvFpsJe0QHtvTC+cR+ovYpgKrAVXzqQyc74mv76TgY6z+aEtjQE2vgZux3CQVtGryqdcOAw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.5", + "@typescript-eslint/types": "5.34.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -7387,9 +7421,9 @@ "dev": true }, "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true }, "acorn-jsx": { @@ -7854,12 +7888,6 @@ "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", "dev": true }, - "cint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/cint/-/cint-8.2.1.tgz", - "integrity": "sha512-gyWqJHXgDFPNx7PEyFJotutav+al92TTC3dWlMFyTETlOyKBQMZb7Cetqmj3GlrnSILHwSJRwf4mIGzc7C5lXw==", - "dev": true - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -7929,9 +7957,9 @@ "dev": true }, "commander": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", - "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", + "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", "dev": true }, "commondir": { @@ -8223,13 +8251,14 @@ "dev": true }, "eslint": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", - "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", "dev": true, "requires": { "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -8239,14 +8268,17 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.3.3", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -8324,12 +8356,12 @@ "dev": true }, "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", "dev": true, "requires": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" } @@ -8729,6 +8761,12 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -9731,15 +9769,14 @@ } }, "npm-check-updates": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-15.2.0.tgz", - "integrity": "sha512-QcNQE3FyOsolWD1Nc+DRryffuBf68fXqVDvN5gBMk3BSaRQ+urZCTfm9By0VuPPA2vrDBRPVgYZB+8L9UN4Avw==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.0.5.tgz", + "integrity": "sha512-0qK6NTmgbq8y39xm4y1tKW5ghEGtWWyiUzSPSQEaqb9elqOfZogV4GQVvBYw3xJlt6igJVXgBUyjNqtPv/j7Yw==", "dev": true, "requires": { - "chalk": "^4.1.2", - "cint": "^8.2.1", + "chalk": "^5.0.1", "cli-table": "^0.3.11", - "commander": "^9.3.0", + "commander": "^9.4.0", "fast-memoize": "^2.5.2", "find-up": "5.0.0", "fp-and-or": "^0.1.3", @@ -9775,6 +9812,12 @@ "balanced-match": "^1.0.0" } }, + "chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true + }, "minimatch": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", @@ -10899,9 +10942,9 @@ } }, "ts-node": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.2.tgz", - "integrity": "sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", diff --git a/package.json b/package.json index 0bf1c2002..7afedaba1 100644 --- a/package.json +++ b/package.json @@ -59,27 +59,27 @@ "yaml": "^1.10.2 <2.0" }, "devDependencies": { - "@types/chai": "^4.3.1", + "@types/chai": "^4.3.3", "@types/glob": "^7.2.0", "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.182", + "@types/lodash": "^4.14.184", "@types/mocha": "^9.1.1", - "@types/node": "^18.0.3", + "@types/node": "^18.7.11", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.68.1", - "@typescript-eslint/eslint-plugin": "^5.30.5", - "@typescript-eslint/parser": "^5.30.5", + "@types/vscode": "^1.70.0", + "@typescript-eslint/eslint-plugin": "^5.34.0", + "@typescript-eslint/parser": "^5.34.0", "chai": "^4.3.6", - "eslint": "^8.19.0", + "eslint": "^8.22.0", "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", "mocha": "^10.0.0", - "npm-check-updates": "^15.2.0", + "npm-check-updates": "^16.0.5", "nyc": "^15.1.0", "prettier": "^2.7.1", "rimraf": "^3.0.2", - "ts-node": "^10.8.2", + "ts-node": "^10.9.1", "typescript": "^4.7.4" }, "scripts": { From ce9dc504099953e39e3b56fbdca0ed7209653e58 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Mon, 12 Sep 2022 16:18:53 +0530 Subject: [PATCH 426/558] Replace `python` with `python3` in command execution (#430) * replace python with python3 in command execution * fix tests --- src/utils/getAnsibleMetaData.ts | 2 +- test/fixtures/diagnostics/lint_errors.yml | 2 +- test/utils/getAnsibleMetaData.test.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/utils/getAnsibleMetaData.ts b/src/utils/getAnsibleMetaData.ts index 423fa1244..0319df2be 100644 --- a/src/utils/getAnsibleMetaData.ts +++ b/src/utils/getAnsibleMetaData.ts @@ -109,7 +109,7 @@ async function getPythonInfo() { const pythonInfo = {}; const pythonVersionResult = await getResultsThroughCommandRunner( - "python", + "python3", "--version" ); if (pythonVersionResult === undefined) { diff --git a/test/fixtures/diagnostics/lint_errors.yml b/test/fixtures/diagnostics/lint_errors.yml index e99660773..467d5083c 100644 --- a/test/fixtures/diagnostics/lint_errors.yml +++ b/test/fixtures/diagnostics/lint_errors.yml @@ -12,5 +12,5 @@ data: 10101 when: MY_VAR != '' - - name: this would typically fire deprecated-command-syntax + - name: This would typically fire deprecated-command-syntax command: warn=no chmod 644 X diff --git a/test/utils/getAnsibleMetaData.test.ts b/test/utils/getAnsibleMetaData.test.ts index 1dae17665..95826cc03 100644 --- a/test/utils/getAnsibleMetaData.test.ts +++ b/test/utils/getAnsibleMetaData.test.ts @@ -79,7 +79,7 @@ function testCommands() { result: "configured module search path", }, { - args: ["python", "--version"], + args: ["python3", "--version"], result: "Python", }, { From cb092a203cb16aab380fdbbbe49aa9330db09a2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 11:49:26 +0100 Subject: [PATCH 427/558] Bump actions/checkout from 2 to 3 (#433) Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/task.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 73ab2846b..2a3469b63 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -71,7 +71,7 @@ jobs: git config --global core.eol lf shell: bash # <-- keep it here to avoid using default shell - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 # https://github.com/marketplace/actions/setup-wsl - name: Activate WSL From 1eac729b2cdb19dfa694c4b44f3293d20a16b258 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 11:57:00 +0100 Subject: [PATCH 428/558] chore: pre-commit autoupdate (#432) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: pre-commit autoupdate updates: - [github.com/streetsidesoftware/cspell-cli: v6.8.0 → v6.8.1](https://github.com/streetsidesoftware/cspell-cli/compare/v6.8.0...v6.8.1) - [github.com/pre-commit/mirrors-prettier: v2.7.1 → v3.0.0-alpha.0](https://github.com/pre-commit/mirrors-prettier/compare/v2.7.1...v3.0.0-alpha.0) - [github.com/pre-commit/mirrors-eslint: v8.22.0 → v8.23.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.22.0...v8.23.0) * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- .pre-commit-config.yaml | 6 +- src/ansibleLanguageService.ts | 38 ++-- src/providers/completionProvider.ts | 47 ++--- src/providers/definitionProvider.ts | 8 +- src/providers/hoverProvider.ts | 10 +- src/providers/semanticTokenProvider.ts | 42 ++--- src/providers/validationProvider.ts | 18 +- src/services/ansibleConfig.ts | 24 +-- src/services/ansibleInventory.ts | 14 +- src/services/ansibleLint.ts | 40 ++-- src/services/ansiblePlaybook.ts | 22 +-- src/services/docsLibrary.ts | 24 +-- src/services/executionEnvironment.ts | 72 ++++---- src/services/metadataLibrary.ts | 4 +- src/services/settingsManager.ts | 4 +- src/services/validationManager.ts | 18 +- src/services/workspaceManager.ts | 20 +- src/utils/ansible.ts | 216 +++++++++++----------- src/utils/commandRunner.ts | 10 +- src/utils/docsFinder.ts | 6 +- src/utils/docsFormatter.ts | 10 +- src/utils/docsParser.ts | 20 +- src/utils/execPath.ts | 2 +- src/utils/getAnsibleMetaData.ts | 24 +-- src/utils/imagePuller.ts | 12 +- src/utils/misc.ts | 6 +- src/utils/pathUtils.ts | 2 +- src/utils/yaml.ts | 42 ++--- test/helper.ts | 10 +- test/index.ts | 2 +- test/providers/completionProvider.test.ts | 70 +++---- test/providers/completionResolver.test.ts | 30 +-- test/providers/hoverProvider.test.ts | 38 ++-- test/providers/settingsManager.test.ts | 4 +- test/providers/validationProvider.test.ts | 42 ++--- test/utils/getAnsibleMetaData.test.ts | 40 ++-- test/utils/runCommand.test.ts | 4 +- test/utils/yaml.test.ts | 4 +- tools/settings-doc-generator.ts | 4 +- 39 files changed, 506 insertions(+), 503 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9a586e454..b655266b2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.8.0 + rev: v6.8.1 hooks: - id: cspell name: Spell check with cspell @@ -85,7 +85,7 @@ repos: language_version: python3 - repo: https://github.com/pre-commit/mirrors-prettier # keep it before markdownlint and eslint - rev: "v2.7.1" + rev: "v3.0.0-alpha.0" hooks: - id: prettier - repo: https://github.com/igorshubovych/markdownlint-cli @@ -98,7 +98,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.22.0 + rev: v8.23.0 hooks: - id: eslint args: diff --git a/src/ansibleLanguageService.ts b/src/ansibleLanguageService.ts index 5b3032f4c..8ae236400 100644 --- a/src/ansibleLanguageService.ts +++ b/src/ansibleLanguageService.ts @@ -99,7 +99,7 @@ export class AnsibleLanguageService { DidChangeConfigurationNotification.type, { section: "ansible", - } + }, ); } if ( @@ -132,7 +132,7 @@ export class AnsibleLanguageService { this.connection.onDidChangeConfiguration(async (params) => { try { await this.workspaceManager.forEachContext((context) => - context.documentSettings.handleConfigurationChanged(params) + context.documentSettings.handleConfigurationChanged(params), ); } catch (error) { this.handleError(error, "onDidChangeConfiguration"); @@ -149,7 +149,7 @@ export class AnsibleLanguageService { this.validationManager, false, context, - this.connection + this.connection, ); } } catch (error) { @@ -172,7 +172,7 @@ export class AnsibleLanguageService { this.connection.onDidChangeWatchedFiles((params) => { try { this.workspaceManager.forEachContext((context) => - context.handleWatchedDocumentChange(params) + context.handleWatchedDocumentChange(params), ); } catch (error) { this.handleError(error, "onDidChangeWatchedFiles"); @@ -189,7 +189,7 @@ export class AnsibleLanguageService { this.validationManager, false, context, - this.connection + this.connection, ); } } catch (error) { @@ -201,7 +201,7 @@ export class AnsibleLanguageService { try { this.validationManager.reconcileCacheItems( e.textDocument.uri, - e.contentChanges + e.contentChanges, ); } catch (error) { this.handleError(error, "onDidChangeTextDocument"); @@ -215,7 +215,7 @@ export class AnsibleLanguageService { this.validationManager, true, this.workspaceManager.getContext(e.document.uri), - this.connection + this.connection, ); } catch (error) { this.handleError(error, "onDidChangeContent"); @@ -227,7 +227,7 @@ export class AnsibleLanguageService { const document = this.documents.get(params.textDocument.uri); if (document) { const context = this.workspaceManager.getContext( - params.textDocument.uri + params.textDocument.uri, ); if (context) { return await doSemanticTokens(document, await context.docsLibrary); @@ -246,13 +246,13 @@ export class AnsibleLanguageService { const document = this.documents.get(params.textDocument.uri); if (document) { const context = this.workspaceManager.getContext( - params.textDocument.uri + params.textDocument.uri, ); if (context) { return await doHover( document, params.position, - await context.docsLibrary + await context.docsLibrary, ); } } @@ -267,7 +267,7 @@ export class AnsibleLanguageService { const document = this.documents.get(params.textDocument.uri); if (document) { const context = this.workspaceManager.getContext( - params.textDocument.uri + params.textDocument.uri, ); if (context) { return await doCompletion(document, params.position, context); @@ -283,7 +283,7 @@ export class AnsibleLanguageService { try { if (completionItem.data?.documentUri) { const context = this.workspaceManager.getContext( - completionItem.data?.documentUri + completionItem.data?.documentUri, ); if (context) { return await doCompletionResolve(completionItem, context); @@ -300,13 +300,13 @@ export class AnsibleLanguageService { const document = this.documents.get(params.textDocument.uri); if (document) { const context = this.workspaceManager.getContext( - params.textDocument.uri + params.textDocument.uri, ); if (context) { return await getDefinition( document, params.position, - await context.docsLibrary + await context.docsLibrary, ); } } @@ -323,13 +323,13 @@ export class AnsibleLanguageService { // Invalidate ansible inventory cache e.clearAnsibleInventory(); this.connection.window.showInformationMessage( - "Re-syncing ansible inventory. This might take some time." + "Re-syncing ansible inventory. This might take some time.", ); // Run the ansible inventory service e.ansibleInventory.then(() => { this.connection.window.showInformationMessage( - "Ansible Inventory re-synced." + "Ansible Inventory re-synced.", ); }); }); @@ -341,13 +341,13 @@ export class AnsibleLanguageService { async (activeFileUri) => { const ansibleMetaData = await getAnsibleMetaData( this.workspaceManager.getContext(activeFileUri), - this.connection + this.connection, ); this.connection.sendNotification("update/ansible-metadata", [ ansibleMetaData, ]); - } + }, ); } @@ -356,7 +356,7 @@ export class AnsibleLanguageService { if (error instanceof Error) { const stack = error.stack ? `\n${error.stack}` : ""; this.connection.console.error( - `${leadMessage}[${error.name}] ${error.message}${stack}` + `${leadMessage}[${error.name}] ${error.message}${stack}`, ); } else { this.connection.console.error(leadMessage + JSON.stringify(error)); diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index e43e21478..05a457445 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -52,7 +52,7 @@ const priorityMap = { export async function doCompletion( document: TextDocument, position: Position, - context: WorkspaceFolderContext + context: WorkspaceFolderContext, ): Promise { let preparedText = document.getText(); const offset = document.offsetAt(position); @@ -98,7 +98,7 @@ export async function doCompletion( document, position, path, - taskKeywords + taskKeywords, ); if (isPlay === undefined) { // this can still turn into a play, so we should offer those keywords too @@ -107,8 +107,8 @@ export async function doCompletion( document, position, path, - playWithoutTaskKeywords - ) + playWithoutTaskKeywords, + ), ); } @@ -122,8 +122,8 @@ export async function doCompletion( document, position, path, - new Map([["block", blockKeywords.get("block") as string]]) - ) + new Map([["block", blockKeywords.get("block") as string]]), + ), ); const inlineCollections = getDeclaredCollections(path); @@ -139,7 +139,7 @@ export async function doCompletion( } const cursorAtFirstElementOfList = firstElementOfList( document, - nodeRange + nodeRange, ); // offer modules @@ -147,7 +147,7 @@ export async function doCompletion( .filter( (moduleFqcn) => provideRedirectModulesCompletion || - !docsLibrary.getModuleRoute(moduleFqcn)?.redirect + !docsLibrary.getModuleRoute(moduleFqcn)?.redirect, ) .map((moduleFqcn): CompletionItem => { let priority, kind; @@ -163,7 +163,7 @@ export async function doCompletion( const insertText = cursorAtEndOfLine ? `${insertName}:${resolveSuffix( "dict", // since a module is always a dictionary - cursorAtFirstElementOfList + cursorAtFirstElementOfList, )}` : insertName; return { @@ -198,7 +198,7 @@ export async function doCompletion( const options = await getPossibleOptionsForPath( path, document, - docsLibrary + docsLibrary, ); if (options) { @@ -210,14 +210,14 @@ export async function doCompletion( const providedOptions = new Set(getYamlMapKeys(optionMap)); const remainingOptions = [...options.entries()].filter( - ([, specs]) => !providedOptions.has(specs.name) + ([, specs]) => !providedOptions.has(specs.name), ); const nodeRange = getNodeRange(node, document); const cursorAtFirstElementOfList = firstElementOfList( document, - nodeRange + nodeRange, ); const cursorAtEndOfLine = atEndOfLine(document, position); @@ -230,7 +230,8 @@ export async function doCompletion( }; }) .filter( - (option) => provideModuleOptionAliasesCompletion || !isAlias(option) + (option) => + provideModuleOptionAliasesCompletion || !isAlias(option), ) .map((option, index) => { // translate option documentation to CompletionItem @@ -294,7 +295,7 @@ export async function doCompletion( const keyOptions = await getPossibleOptionsForPath( keyPath, document, - docsLibrary + docsLibrary, ); if ( keyOptions && @@ -396,7 +397,7 @@ function getKeywordCompletion( document: TextDocument, position: Position, path: Node[], - keywords: Map + keywords: Map, ): CompletionItem[] { const parameterMap = new AncestryBuilder(path) .parent(YAMLMap) @@ -405,7 +406,7 @@ function getKeywordCompletion( const providedParams = new Set(getYamlMapKeys(parameterMap)); const remainingParams = [...keywords.entries()].filter( - ([keyword]) => !providedParams.has(keyword) + ([keyword]) => !providedParams.has(keyword), ); const nodeRange = getNodeRange(path[path.length - 1], document); return remainingParams.map(([keyword, description]) => { @@ -467,14 +468,14 @@ function getNodeRange(node: Node, document: TextDocument): Range | undefined { export async function doCompletionResolve( completionItem: CompletionItem, - context: WorkspaceFolderContext + context: WorkspaceFolderContext, ): Promise { if (completionItem.data?.moduleFqcn && completionItem.data?.documentUri) { // resolve completion for a module const docsLibrary = await context.docsLibrary; const [module] = await docsLibrary.findModule( - completionItem.data.moduleFqcn + completionItem.data.moduleFqcn, ); if (module && module.documentation) { @@ -493,14 +494,14 @@ export async function doCompletionResolve( declaredCollections.push("ansible.builtin"); const metadata = await context.documentMetadata.get( - completionItem.data.documentUri + completionItem.data.documentUri, ); if (metadata) { declaredCollections.push(...metadata.collections); } const canUseShortName = declaredCollections.some( - (c) => c === `${namespace}.${collection}` + (c) => c === `${namespace}.${collection}`, ); if (!canUseShortName) { // not an Ansible built-in module, and not part of the declared @@ -513,7 +514,7 @@ export async function doCompletionResolve( const insertText = completionItem.data.atEndOfLine ? `${insertName}:${resolveSuffix( "dict", // since a module is always a dictionary - completionItem.data.firstElementOfList + completionItem.data.firstElementOfList, )}` : insertName; @@ -527,7 +528,7 @@ export async function doCompletionResolve( completionItem.documentation = formatModule( module.documentation, - docsLibrary.getModuleRoute(completionItem.data.moduleFqcn) + docsLibrary.getModuleRoute(completionItem.data.moduleFqcn), ); } } @@ -538,7 +539,7 @@ export async function doCompletionResolve( const insertText = completionItem.data.atEndOfLine ? `${completionItem.label}:${resolveSuffix( completionItem.data.type, - completionItem.data.firstElementOfList + completionItem.data.firstElementOfList, )}` : `${completionItem.label}`; diff --git a/src/providers/definitionProvider.ts b/src/providers/definitionProvider.ts index 24a590792..5a26c91b7 100644 --- a/src/providers/definitionProvider.ts +++ b/src/providers/definitionProvider.ts @@ -14,7 +14,7 @@ import { export async function getDefinition( document: TextDocument, position: Position, - docsLibrary: DocsLibrary + docsLibrary: DocsLibrary, ): Promise { const yamlDocs = parseAllDocuments(document.getText()); const path = getPathAt(document, position, yamlDocs); @@ -28,7 +28,7 @@ export async function getDefinition( const [module] = await docsLibrary.findModule( node.value, path, - document.uri + document.uri, ); if (module) { const range = getOrigRange(node); @@ -42,13 +42,13 @@ export async function getDefinition( module.sourceLineRange[0], 0, module.sourceLineRange[1], - 0 + 0, ), targetSelectionRange: Range.create( module.sourceLineRange[0], 0, module.sourceLineRange[1], - 0 + 0, ), }, ]; diff --git a/src/providers/hoverProvider.ts b/src/providers/hoverProvider.ts index 8754d6ce1..60fb0eef5 100644 --- a/src/providers/hoverProvider.ts +++ b/src/providers/hoverProvider.ts @@ -30,7 +30,7 @@ import { export async function doHover( document: TextDocument, position: Position, - docsLibrary: DocsLibrary + docsLibrary: DocsLibrary, ): Promise { const yamlDocs = parseAllDocuments(document.getText()); const path = getPathAt(document, position, yamlDocs); @@ -59,14 +59,14 @@ export async function doHover( const [module, hitFqcn] = await docsLibrary.findModule( node.value, path, - document.uri + document.uri, ); const range = getOrigRange(node); if (module && module.documentation) { return { contents: formatModule( module.documentation, - docsLibrary.getModuleRoute(hitFqcn || node.value) + docsLibrary.getModuleRoute(hitFqcn || node.value), ), range: range ? toLspRange(range, document) : undefined, }; @@ -87,7 +87,7 @@ export async function doHover( const options = await getPossibleOptionsForPath( path, document, - docsLibrary + docsLibrary, ); if (options) { @@ -106,7 +106,7 @@ export async function doHover( function getKeywordHover( document: TextDocument, node: Scalar, - keywords: Map + keywords: Map, ): Hover | null { const keywordDocumentation = keywords.get(node.value); const markupDoc = diff --git a/src/providers/semanticTokenProvider.ts b/src/providers/semanticTokenProvider.ts index 8bd366d7b..873d4699d 100644 --- a/src/providers/semanticTokenProvider.ts +++ b/src/providers/semanticTokenProvider.ts @@ -32,18 +32,18 @@ export const tokenTypes = [ ]; const tokenTypesLegend = new Map( - tokenTypes.map((value, index) => [value, index]) + tokenTypes.map((value, index) => [value, index]), ); export const tokenModifiers = [SemanticTokenModifiers.definition]; const tokenModifiersLegend = new Map( - tokenModifiers.map((value, index) => [value, index]) + tokenModifiers.map((value, index) => [value, index]), ); export async function doSemanticTokens( document: TextDocument, - docsLibrary: DocsLibrary + docsLibrary: DocsLibrary, ): Promise { const builder = new SemanticTokensBuilder(); const yDocuments = parseAllDocuments(document.getText()); @@ -59,7 +59,7 @@ async function markSemanticTokens( path: Node[], builder: SemanticTokensBuilder, document: TextDocument, - docsLibrary: DocsLibrary + docsLibrary: DocsLibrary, ): Promise { const node = path[path.length - 1]; if (node instanceof YAMLMap) { @@ -85,7 +85,7 @@ async function markSemanticTokens( const module = await findProvidedModule( path.concat(pair, pair.key), document, - docsLibrary + docsLibrary, ); if (module && pair.value instanceof YAMLMap) { // highlight module parameters @@ -93,7 +93,7 @@ async function markSemanticTokens( pair.value, module.documentation?.options, builder, - document + document, ); } } @@ -101,7 +101,7 @@ async function markSemanticTokens( const [module] = await docsLibrary.findModule( pair.key.value, keyPath, - document.uri + document.uri, ); if (module) { // highlight module name @@ -110,7 +110,7 @@ async function markSemanticTokens( SemanticTokenTypes.class, [], builder, - document + document, ); if (pair.value instanceof YAMLMap) { // highlight module parameters @@ -118,7 +118,7 @@ async function markSemanticTokens( pair.value, module.documentation?.options, builder, - document + document, ); } } else { @@ -141,7 +141,7 @@ async function markSemanticTokens( path.concat(pair, pair.value), builder, document, - docsLibrary + docsLibrary, ); } } @@ -154,7 +154,7 @@ async function markSemanticTokens( path.concat(item), builder, document, - docsLibrary + docsLibrary, ); } } @@ -165,7 +165,7 @@ function markModuleParameters( moduleParamMap: YAMLMap, options: Map | undefined, builder: SemanticTokensBuilder, - document: TextDocument + document: TextDocument, ) { for (const moduleParamPair of moduleParamMap.items) { if (moduleParamPair.key instanceof Scalar) { @@ -176,7 +176,7 @@ function markModuleParameters( SemanticTokenTypes.method, [], builder, - document + document, ); if ( option.type === "dict" && @@ -187,7 +187,7 @@ function markModuleParameters( moduleParamPair.value, option.suboptions, builder, - document + document, ); } else if ( option.type === "list" && @@ -216,7 +216,7 @@ function markModuleParameters( function markAllNestedKeysAsOrdinary( node: Node, builder: SemanticTokensBuilder, - document: TextDocument + document: TextDocument, ) { if (node instanceof Pair) { if (node.key instanceof Scalar) { @@ -241,7 +241,7 @@ function markAllNestedKeysAsOrdinary( function markKeyword( node: Scalar, builder: SemanticTokensBuilder, - document: TextDocument + document: TextDocument, ) { markNode(node, SemanticTokenTypes.keyword, [], builder, document); } @@ -249,14 +249,14 @@ function markKeyword( function markOrdinaryKey( node: Scalar, builder: SemanticTokensBuilder, - document: TextDocument + document: TextDocument, ) { markNode( node, SemanticTokenTypes.property, [SemanticTokenModifiers.definition], builder, - document + document, ); } @@ -265,7 +265,7 @@ function markNode( tokenType: SemanticTokenTypes, tokenModifiers: SemanticTokenModifiers[], builder: SemanticTokensBuilder, - document: TextDocument + document: TextDocument, ) { const range = getOrigRange(node); if (range) { @@ -276,7 +276,7 @@ function markNode( startPosition.character, length, encodeTokenType(tokenType), - encodeTokenModifiers(tokenModifiers) + encodeTokenModifiers(tokenModifiers), ); } } @@ -290,7 +290,7 @@ function encodeTokenType(tokenType: SemanticTokenTypes) { } function encodeTokenModifiers( - tokenModifiers: SemanticTokenModifiers[] + tokenModifiers: SemanticTokenModifiers[], ): number { let encodedModifiers = 0; for (const tokenModifier of tokenModifiers) { diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts index ed3d38f7d..ee2034221 100644 --- a/src/providers/validationProvider.ts +++ b/src/providers/validationProvider.ts @@ -26,7 +26,7 @@ export async function doValidate( validationManager: ValidationManager, quick = true, context?: WorkspaceFolderContext, - connection?: Connection + connection?: Connection, ): Promise> { let diagnosticsByFile; if (quick || !context) { @@ -43,7 +43,7 @@ export async function doValidate( ? "ansible-lint" : settings.ansibleLint.path; const lintAvailability = await commandRunner.getExecutablePath( - lintExecutable + lintExecutable, ); console.debug("Path for lint: ", lintAvailability); @@ -56,10 +56,10 @@ export async function doValidate( // Notifying the user about the failed ansible-lint command and falling back to ansible syntax-check in this scenario if (diagnosticsByFile === -1) { console.debug( - "Ansible-lint command execution failed. Falling back to ansible syntax-check" + "Ansible-lint command execution failed. Falling back to ansible syntax-check", ); connection?.window.showInformationMessage( - "Falling back to ansible syntax-check." + "Falling back to ansible syntax-check.", ); } console.debug("Validating using ansible syntax-check"); @@ -67,7 +67,7 @@ export async function doValidate( if (isPlaybook(textDocument)) { console.log("is playbook..."); diagnosticsByFile = await context.ansiblePlaybook.doValidate( - textDocument + textDocument, ); } else { console.log("not a playbook..."); @@ -107,10 +107,12 @@ export function getYamlValidation(textDocument: TextDocument): Diagnostic[] { const start = textDocument.positionAt( errorRange.origStart !== undefined ? errorRange.origStart - : errorRange.start + : errorRange.start, ); const end = textDocument.positionAt( - errorRange.origEnd !== undefined ? errorRange.origEnd : errorRange.end + errorRange.origEnd !== undefined + ? errorRange.origEnd + : errorRange.end, ); range = Range.create(start, end); @@ -157,7 +159,7 @@ export function getYamlValidation(textDocument: TextDocument): Diagnostic[] { start: range.end, end: range.end, }), - "the scope of this error ends here" + "the scope of this error ends here", ), ]; // collapse the range diff --git a/src/services/ansibleConfig.ts b/src/services/ansibleConfig.ts index 6f11b8336..aafc782bf 100644 --- a/src/services/ansibleConfig.ts +++ b/src/services/ansibleConfig.ts @@ -23,14 +23,14 @@ export class AnsibleConfig { public async initialize(): Promise { try { const settings = await this.context.documentSettings.get( - this.context.workspaceFolder.uri + this.context.workspaceFolder.uri, ); const workingDirectory = URI.parse(this.context.workspaceFolder.uri).path; const mountPaths = new Set([workingDirectory]); const commandRunner = new CommandRunner( this.connection, this.context, - settings + settings, ); // get Ansible configuration @@ -38,16 +38,16 @@ export class AnsibleConfig { "ansible-config", "dump", workingDirectory, - mountPaths + mountPaths, ); let config = ini.parse(ansibleConfigResult.stdout); config = _.mapKeys( config, - (_, key) => key.substring(0, key.indexOf("(")) // remove config source in parenthesis + (_, key) => key.substring(0, key.indexOf("(")), // remove config source in parenthesis ); if (typeof config.COLLECTIONS_PATHS === "string") { this._collection_paths = parsePythonStringArray( - config.COLLECTIONS_PATHS + config.COLLECTIONS_PATHS, ); } else { this._collection_paths = []; @@ -56,7 +56,7 @@ export class AnsibleConfig { // get default host list from config dump if (typeof config.DEFAULT_HOST_LIST === "string") { this._default_host_list = parsePythonStringArray( - config.DEFAULT_HOST_LIST + config.DEFAULT_HOST_LIST, ); } else { this._default_host_list = []; @@ -65,16 +65,16 @@ export class AnsibleConfig { // get Ansible basic information const ansibleVersionResult = await commandRunner.runCommand( "ansible", - "--version" + "--version", ); const versionInfo = ini.parse(ansibleVersionResult.stdout); this._ansible_meta_data = versionInfo; this._module_locations = parsePythonStringArray( - versionInfo["configured module search path"] + versionInfo["configured module search path"], ); this._module_locations.push( - path.resolve(versionInfo["ansible python module location"], "modules") + path.resolve(versionInfo["ansible python module location"], "modules"), ); this._ansible_location = versionInfo["ansible python module location"]; @@ -83,17 +83,17 @@ export class AnsibleConfig { // this is needed to get the pre-installed collections to work const pythonPathResult = await commandRunner.runCommand( "python3", - ' -c "import sys; print(sys.path, end=\\"\\")"' + ' -c "import sys; print(sys.path, end=\\"\\")"', ); this._collection_paths.push( - ...parsePythonStringArray(pythonPathResult.stdout) + ...parsePythonStringArray(pythonPathResult.stdout), ); } catch (error) { if (error instanceof Error) { this.connection.window.showErrorMessage(error.message); } else { this.connection.console.error( - `Exception in AnsibleConfig service: ${JSON.stringify(error)}` + `Exception in AnsibleConfig service: ${JSON.stringify(error)}`, ); } } diff --git a/src/services/ansibleInventory.ts b/src/services/ansibleInventory.ts index 54ad7d280..464d0b104 100644 --- a/src/services/ansibleInventory.ts +++ b/src/services/ansibleInventory.ts @@ -18,17 +18,17 @@ export class AnsibleInventory { public async initialize() { const settings = await this.context.documentSettings.get( - this.context.workspaceFolder.uri + this.context.workspaceFolder.uri, ); const commandRunner = new CommandRunner( this.connection, this.context, - settings + settings, ); const defaultHostListPath = new Set( - (await this.context.ansibleConfig).default_host_list + (await this.context.ansibleConfig).default_host_list, ); const workingDirectory = URI.parse(this.context.workspaceFolder.uri).path; @@ -38,7 +38,7 @@ export class AnsibleInventory { "ansible-inventory", "--list", workingDirectory, - defaultHostListPath + defaultHostListPath, ); let inventoryHostsObject = []; @@ -46,7 +46,7 @@ export class AnsibleInventory { inventoryHostsObject = JSON.parse(ansibleInventoryResult.stdout); } catch (error) { this.connection.console.error( - `Exception in AnsibleInventory service: ${JSON.stringify(error)}` + `Exception in AnsibleInventory service: ${JSON.stringify(error)}`, ); } @@ -66,11 +66,11 @@ export class AnsibleInventory { */ function parseInventoryHosts(hostObj) { const topLevelGroups = hostObj.all.children.filter( - (item: string) => item !== "ungrouped" + (item: string) => item !== "ungrouped", ); const groupsHavingChildren = topLevelGroups.filter( - (item) => hostObj[`${item}`] && hostObj[`${item}`].children + (item) => hostObj[`${item}`] && hostObj[`${item}`].children, ); const otherGroups = getChildGroups(groupsHavingChildren, hostObj); diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts index 5e434752c..20e172a75 100644 --- a/src/services/ansibleLint.ts +++ b/src/services/ansibleLint.ts @@ -48,7 +48,7 @@ export class AnsibleLint { * reported in other files. */ public async doValidate( - textDocument: TextDocument + textDocument: TextDocument, ): Promise | -1> { let diagnostics: Map = new Map(); @@ -58,7 +58,7 @@ export class AnsibleLint { if (!settings.ansibleLint.enabled) { console.debug( - "Ansible-lint is disabled. Falling back to ansible syntax-check" + "Ansible-lint is disabled. Falling back to ansible syntax-check", ); return; } else { @@ -66,13 +66,13 @@ export class AnsibleLint { // Determine linter config file let ansibleLintConfigPath = linterArguments.match( - /(?:^|\s)-c\s*(?[\s'"])(?.+?)(?:\k|$)/ + /(?:^|\s)-c\s*(?[\s'"])(?.+?)(?:\k|$)/, )?.groups?.conf; if (!ansibleLintConfigPath) { // Config file not provided in arguments -> search for one mimicking the // way ansible-lint looks for it, going up the directory structure const ansibleLintConfigFile = await this.findAnsibleLintConfigFile( - textDocument.uri + textDocument.uri, ); if (ansibleLintConfigFile) { ansibleLintConfigPath = URI.parse(ansibleLintConfigFile).path; @@ -94,7 +94,7 @@ export class AnsibleLint { const ansibleLintConfigPromise = this.getAnsibleLintConfig( workingDirectory, - ansibleLintConfigPath + ansibleLintConfigPath, ); progressTracker.begin("ansible-lint", undefined, "Processing files..."); @@ -102,7 +102,7 @@ export class AnsibleLint { const commandRunner = new CommandRunner( this.connection, this.context, - settings + settings, ); try { @@ -111,13 +111,13 @@ export class AnsibleLint { "ansible-lint", `${linterArguments} "${docPath}"`, workingDirectory, - mountPaths + mountPaths, ); diagnostics = this.processReport( result.stdout, await ansibleLintConfigPromise, - workingDirectory + workingDirectory, ); if (result.stderr) { @@ -135,12 +135,12 @@ export class AnsibleLint { diagnostics = this.processReport( execError.stdout, await ansibleLintConfigPromise, - workingDirectory + workingDirectory, ); } else { if (execError.stderr) { this.connection.console.info( - `[ansible-lint] ${execError.stderr}` + `[ansible-lint] ${execError.stderr}`, ); } @@ -150,7 +150,7 @@ export class AnsibleLint { } } else { const exceptionString = `Exception in AnsibleLint service: ${JSON.stringify( - error + error, )}`; progressTracker.done(); @@ -168,12 +168,12 @@ export class AnsibleLint { private processReport( result: string, ansibleLintConfig: IAnsibleLintConfig | undefined, - workingDirectory: string + workingDirectory: string, ): Map { const diagnostics: Map = new Map(); if (!result) { this.connection.console.warn( - "Standard output from ansible-lint is suspiciously empty." + "Standard output from ansible-lint is suspiciously empty.", ); return diagnostics; } @@ -208,7 +208,7 @@ export class AnsibleLint { let severity: DiagnosticSeverity = DiagnosticSeverity.Error; if (ansibleLintConfig) { const lintRuleName = (item.check_name as string).match( - /\[(?[a-z\-]+)\].*/ + /\[(?[a-z\-]+)\].*/, )?.groups?.name; if ( @@ -249,7 +249,7 @@ export class AnsibleLint { } catch (error) { this.connection.window.showErrorMessage( "Could not parse ansible-lint output. Please check your ansible-lint installation & configuration." + - " More info in `Ansible Server` output." + " More info in `Ansible Server` output.", ); let message: string; if (error instanceof Error) { @@ -259,14 +259,14 @@ export class AnsibleLint { } this.connection.console.error( `Exception while parsing ansible-lint output: ${message}` + - `\nTried to parse the following:\n${result}` + `\nTried to parse the following:\n${result}`, ); } return diagnostics; } public handleWatchedDocumentChange( - params: DidChangeWatchedFilesParams + params: DidChangeWatchedFilesParams, ): void { for (const fileEvent of params.changes) { // remove from cache on any change @@ -276,7 +276,7 @@ export class AnsibleLint { private async getAnsibleLintConfig( workingDirectory: string, - configPath: string | undefined + configPath: string | undefined, ): Promise { if (configPath) { const absConfigPath = path.resolve(workingDirectory, configPath); @@ -290,7 +290,7 @@ export class AnsibleLint { } private async readAnsibleLintConfig( - configPath: string + configPath: string, ): Promise { const config = { warnList: new Set(), @@ -319,7 +319,7 @@ export class AnsibleLint { } private async findAnsibleLintConfigFile( - uri: string + uri: string, ): Promise { // find configuration path let configPath; diff --git a/src/services/ansiblePlaybook.ts b/src/services/ansiblePlaybook.ts index dbde600ff..80b0b3154 100644 --- a/src/services/ansiblePlaybook.ts +++ b/src/services/ansiblePlaybook.ts @@ -27,7 +27,7 @@ export class AnsiblePlaybook { constructor( private connection: Connection, - private context: WorkspaceFolderContext + private context: WorkspaceFolderContext, ) { this.useProgressTracker = !!context.clientCapabilities.window?.workDoneProgress; @@ -41,7 +41,7 @@ export class AnsiblePlaybook { * Perform ansible syntax-check for the given document. */ public async doValidate( - textDocument: TextDocument + textDocument: TextDocument, ): Promise> { const docPath = URI.parse(textDocument.uri).path; let diagnostics: Map = new Map(); @@ -59,13 +59,13 @@ export class AnsiblePlaybook { progressTracker.begin( "ansible syntax-check", undefined, - "Processing files..." + "Processing files...", ); const commandRunner = new CommandRunner( this.connection, this.context, - settings + settings, ); try { // run ansible playbook syntax-check @@ -73,7 +73,7 @@ export class AnsiblePlaybook { "ansible-playbook", `${docPath} --syntax-check`, workingDirectory, - mountPaths + mountPaths, ); } catch (error) { if (error instanceof Error) { @@ -88,7 +88,7 @@ export class AnsiblePlaybook { /The error appears to be in '(?.*)': line (?\d+), column (?\d+)/; const filteredErrorMessage = ansibleSyntaxCheckRegex.exec( - execError.stderr + execError.stderr, ); diagnostics = filteredErrorMessage @@ -96,18 +96,18 @@ export class AnsiblePlaybook { execError.message, filteredErrorMessage.groups.filename, parseInt(filteredErrorMessage.groups.line), - parseInt(filteredErrorMessage.groups.column) + parseInt(filteredErrorMessage.groups.column), ) : this.processReport(execError.message, docPath, 1, 1); if (execError.stderr) { this.connection.console.info( - `[ansible syntax-check] ${execError.stderr}` + `[ansible syntax-check] ${execError.stderr}`, ); } } else { this.connection.console.error( - `Exception in AnsibleSyntaxCheck service: ${JSON.stringify(error)}` + `Exception in AnsibleSyntaxCheck service: ${JSON.stringify(error)}`, ); } } @@ -120,12 +120,12 @@ export class AnsiblePlaybook { result: string, fileName: string, line: number, - column: number + column: number, ): Map { const diagnostics: Map = new Map(); if (!result) { this.connection.console.warn( - "Standard output from ansible syntax-check is suspiciously empty." + "Standard output from ansible syntax-check is suspiciously empty.", ); return diagnostics; } diff --git a/src/services/docsLibrary.ts b/src/services/docsLibrary.ts index b521dcffc..db4bf7b6c 100644 --- a/src/services/docsLibrary.ts +++ b/src/services/docsLibrary.ts @@ -32,7 +32,7 @@ export class DocsLibrary { public async initialize(): Promise { try { const settings = await this.context.documentSettings.get( - this.context.workspaceFolder.uri + this.context.workspaceFolder.uri, ); const ansibleConfig = await this.context.ansibleConfig; if (settings.executionEnvironment.enabled) { @@ -49,7 +49,7 @@ export class DocsLibrary { (await findDocumentation(modulesPath, "builtin_doc_fragment")).forEach( (doc) => { this.docFragments.set(doc.fqcn, doc); - } + }, ); } @@ -62,7 +62,7 @@ export class DocsLibrary { (doc) => { this.modules.set(doc.fqcn, doc); this.moduleFqcns.add(doc.fqcn); - } + }, ); ( @@ -72,7 +72,7 @@ export class DocsLibrary { }); (await findPluginRouting(collectionsPath, "collection")).forEach( - (r, collection) => this.pluginRouting.set(collection, r) + (r, collection) => this.pluginRouting.set(collection, r), ); // add all valid redirect routes as possible FQCNs @@ -89,7 +89,7 @@ export class DocsLibrary { this.connection.window.showErrorMessage(error.message); } else { this.connection.console.error( - `Exception in DocsLibrary service: ${JSON.stringify(error)}` + `Exception in DocsLibrary service: ${JSON.stringify(error)}`, ); } } @@ -108,13 +108,13 @@ export class DocsLibrary { public async findModule( searchText: string, contextPath?: Node[], - documentUri?: string + documentUri?: string, ): Promise<[IModuleMetadata | undefined, string | undefined]> { let hitFqcn; const candidateFqcns = await this.getCandidateFqcns( searchText, documentUri, - contextPath + contextPath, ); // check routing @@ -151,7 +151,7 @@ export class DocsLibrary { if (!module.documentation) { // translate raw documentation into a typed structure module.documentation = processRawDocumentation( - module.rawDocumentationFragments + module.rawDocumentationFragments, ); } } @@ -161,7 +161,7 @@ export class DocsLibrary { private async getCandidateFqcns( searchText: string, documentUri: string | undefined, - contextPath: Node[] | undefined + contextPath: Node[] | undefined, ) { const candidateFqcns = []; if (searchText.split(".").length === 3) { @@ -174,7 +174,7 @@ export class DocsLibrary { if (metadata) { // try searching declared collections candidateFqcns.push( - ...metadata.collections.map((c) => `${c}.${searchText}`) + ...metadata.collections.map((c) => `${c}.${searchText}`), ); } } @@ -182,8 +182,8 @@ export class DocsLibrary { if (contextPath) { candidateFqcns.push( ...getDeclaredCollections(contextPath).map( - (c) => `${c}.${searchText}` - ) + (c) => `${c}.${searchText}`, + ), ); } } diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index bd36126c3..754b12d2d 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -38,7 +38,7 @@ export class ExecutionEnvironment { public async initialize(): Promise { try { this.settings = await this.context.documentSettings.get( - this.context.workspaceFolder.uri + this.context.workspaceFolder.uri, ); if (!this.settings.executionEnvironment.enabled) { return; @@ -69,7 +69,7 @@ export class ExecutionEnvironment { this.connection.window.showErrorMessage(error.message); } else { this.connection.console.error( - `Exception in ExecutionEnvironment service: ${JSON.stringify(error)}` + `Exception in ExecutionEnvironment service: ${JSON.stringify(error)}`, ); } this.isServiceInitialized = false; @@ -80,13 +80,13 @@ export class ExecutionEnvironment { public async fetchPluginDocs(ansibleConfig: AnsibleConfig): Promise { if (!this.isServiceInitialized) { this.connection.console.error( - `ExecutionEnvironment service not correctly initialized. Failed to fetch plugin docs` + `ExecutionEnvironment service not correctly initialized. Failed to fetch plugin docs`, ); return; } const containerName = `${this._container_image.replace( /[^a-z0-9]/gi, - "_" + "_", )}`; let progressTracker; @@ -99,7 +99,7 @@ export class ExecutionEnvironment { }) .trim(); const hostCacheBasePath = path.resolve( - `${process.env.HOME}/.cache/ansible-language-server/${containerName}/${this._container_image_id}` + `${process.env.HOME}/.cache/ansible-language-server/${containerName}/${this._container_image_id}`, ); const isContainerRunning = this.runContainer(containerName); @@ -110,15 +110,15 @@ export class ExecutionEnvironment { if (this.isPluginDocCacheValid(hostCacheBasePath)) { ansibleConfig.collections_paths = this.updateCachePaths( ansibleConfig.collections_paths, - hostCacheBasePath + hostCacheBasePath, ); ansibleConfig.module_locations = this.updateCachePaths( ansibleConfig.module_locations, - hostCacheBasePath + hostCacheBasePath, ); this.connection.console.log( - `Cached plugin paths: \n collections_paths: ${ansibleConfig.collections_paths} \n module_locations: ${ansibleConfig.module_locations}` + `Cached plugin paths: \n collections_paths: ${ansibleConfig.collections_paths} \n module_locations: ${ansibleConfig.module_locations}`, ); } else { if (this.useProgressTracker) { @@ -130,17 +130,17 @@ export class ExecutionEnvironment { "execution-environment", undefined, `Copy plugin docs from '${this._container_image} to host cache path`, - true + true, ); } this.connection.console.log( - `Identified plugin paths by AnsibleConfig service: \n collections_paths: ${ansibleConfig.collections_paths} \n module_locations: ${ansibleConfig.module_locations}` + `Identified plugin paths by AnsibleConfig service: \n collections_paths: ${ansibleConfig.collections_paths} \n module_locations: ${ansibleConfig.module_locations}`, ); ansibleConfig.collections_paths = await this.copyPluginDocFiles( hostCacheBasePath, containerName, ansibleConfig.collections_paths, - "ansible_collections" + "ansible_collections", ); const builtin_plugin_locations: string[] = []; @@ -160,7 +160,7 @@ export class ExecutionEnvironment { hostCacheBasePath, containerName, builtin_plugin_locations, - "/" + "/", ); // Copy builtin modules @@ -168,21 +168,21 @@ export class ExecutionEnvironment { hostCacheBasePath, containerName, ansibleConfig.module_locations, - "/" + "/", ); } this.connection.console.log( - `Copied plugin paths by ExecutionEnvironment service: \n collections_paths: ${ansibleConfig.collections_paths} \n module_locations: ${ansibleConfig.module_locations}` + `Copied plugin paths by ExecutionEnvironment service: \n collections_paths: ${ansibleConfig.collections_paths} \n module_locations: ${ansibleConfig.module_locations}`, ); // plugin cache successfully created fs.closeSync( - fs.openSync(path.join(hostCacheBasePath, this.successFileMarker), "w+") + fs.openSync(path.join(hostCacheBasePath, this.successFileMarker), "w+"), ); } catch (error) { this.connection.window.showErrorMessage( `Exception in ExecutionEnvironment service while fetching docs: ${JSON.stringify( - error - )}` + error, + )}`, ); } finally { if (progressTracker) { @@ -194,23 +194,23 @@ export class ExecutionEnvironment { public wrapContainerArgs( command: string, - mountPaths?: Set + mountPaths?: Set, ): string | undefined { if (!this.isServiceInitialized) { this.connection.console.error( - "ExecutionEnvironment service not correctly initialized." + "ExecutionEnvironment service not correctly initialized.", ); return undefined; } const workspaceFolderPath = URI.parse( - this.context.workspaceFolder.uri + this.context.workspaceFolder.uri, ).path; const containerCommand: Array = [this._container_engine]; containerCommand.push(...["run", "--rm"]); containerCommand.push(...["--workdir", workspaceFolderPath]); containerCommand.push( - ...["-v", `${workspaceFolderPath}:${workspaceFolderPath}`] + ...["-v", `${workspaceFolderPath}:${workspaceFolderPath}`], ); // TODO: add condition to check file path exists or not @@ -218,7 +218,7 @@ export class ExecutionEnvironment { // push to array only if mount path is valid if (mountPath === "" || !fs.existsSync(mountPath)) { this.connection.console.error( - `Volume mount source path '${mountPath}' does not exist. Ignoring this volume mount entry.` + `Volume mount source path '${mountPath}' does not exist. Ignoring this volume mount entry.`, ); continue; } @@ -278,7 +278,7 @@ export class ExecutionEnvironment { containerCommand.push(command); const generatedCommand = containerCommand.join(" "); this.connection.console.log( - `container engine invocation: ${generatedCommand}` + `container engine invocation: ${generatedCommand}`, ); return generatedCommand; } @@ -290,13 +290,13 @@ export class ExecutionEnvironment { this._container_engine, this._container_image, this.settings.executionEnvironment.pull.policy, - this.settings.executionEnvironment.pull.arguments + this.settings.executionEnvironment.pull.arguments, ); const setupDone = await imagePuller.setupImage(); if (!setupDone) { this.connection.window.showErrorMessage( `Execution environment image '${this._container_image}' setup failed. - For more details check output console logs for ansible-language-server` + For more details check output console logs for ansible-language-server`, ); return false; } @@ -325,14 +325,14 @@ export class ExecutionEnvironment { }); } catch (error) { this.connection.window.showErrorMessage( - `Container engine '${this._container_engine}' not found. Failed with error '${error}'` + `Container engine '${this._container_engine}' not found. Failed with error '${error}'`, ); return false; } } if (!["podman", "docker"].includes(this._container_engine)) { this.connection.window.showErrorMessage( - "Valid container engine not found. Install either 'podman' or 'docker' if you want to use execution environment, if not disable Ansible extension execution environment setting." + "Valid container engine not found. Install either 'podman' or 'docker' if you want to use execution environment, if not disable Ansible extension execution environment setting.", ); return false; } @@ -347,7 +347,7 @@ export class ExecutionEnvironment { if (!this.doesContainerNameExist(containerName)) { console.log( - `clean up container not required as container with name ${containerName} does not exist` + `clean up container not required as container with name ${containerName} does not exist`, ); return; } @@ -367,7 +367,7 @@ export class ExecutionEnvironment { let containerNameExist = false; try { child_process.execSync( - `${this._container_engine} inspect ${containerName}` + `${this._container_engine} inspect ${containerName}`, ); containerNameExist = true; } catch (error) { @@ -383,13 +383,13 @@ export class ExecutionEnvironment { const options = volumeMounts.options; if (fsSrcPath === "" || !fs.existsSync(fsSrcPath)) { this.connection.console.error( - `Volume mount source path '${fsSrcPath}' does not exist. Ignoring this volume mount entry.` + `Volume mount source path '${fsSrcPath}' does not exist. Ignoring this volume mount entry.`, ); continue; } if (fsDestPath === "") { this.connection.console.error( - `Volume mount destination path '${fsDestPath}' not provided. Ignoring this volume mount entry.` + `Volume mount destination path '${fsDestPath}' not provided. Ignoring this volume mount entry.`, ); continue; } @@ -409,7 +409,7 @@ export class ExecutionEnvironment { private isPluginInPath( containerName: string, searchPath: string, - pluginFolderPath: string + pluginFolderPath: string, ): boolean { const completeSearchPath = path.join(searchPath, pluginFolderPath); const command = `${this._container_engine} exec ${containerName} ls ${completeSearchPath}`; @@ -458,7 +458,7 @@ export class ExecutionEnvironment { }); } catch (error) { this.connection.window.showErrorMessage( - `Failed to initialize execution environment '${this._container_image}': ${error}` + `Failed to initialize execution environment '${this._container_image}': ${error}`, ); return false; } @@ -469,7 +469,7 @@ export class ExecutionEnvironment { hostPluginDocCacheBasePath: string, containerName: string, containerPluginPaths: string[], - searchKind: string + searchKind: string, ): Promise { const updatedHostDocPath: string[] = []; @@ -491,7 +491,7 @@ export class ExecutionEnvironment { fs.mkdirSync(destPath, { recursive: true }); const copyCommand = `${this._container_engine} cp ${containerName}:${srcPath} ${destPathFolder}`; this.connection.console.log( - `Copying plugins from container to local cache path ${copyCommand}` + `Copying plugins from container to local cache path ${copyCommand}`, ); asyncExec(copyCommand, { encoding: "utf-8", @@ -506,7 +506,7 @@ export class ExecutionEnvironment { private updateCachePaths( pluginPaths: string[], - cacheBasePath: string + cacheBasePath: string, ): string[] { const localCachePaths: string[] = []; pluginPaths.forEach((srcPath) => { diff --git a/src/services/metadataLibrary.ts b/src/services/metadataLibrary.ts index 2cd503f48..43ab0f611 100644 --- a/src/services/metadataLibrary.ts +++ b/src/services/metadataLibrary.ts @@ -28,7 +28,7 @@ export class MetadataLibrary { } public handleWatchedDocumentChange( - params: DidChangeWatchedFilesParams + params: DidChangeWatchedFilesParams, ): void { for (const fileEvent of params.changes) { // remove from cache on any change @@ -58,7 +58,7 @@ export class MetadataLibrary { } private async readAnsibleMetadata( - metadataUri: string + metadataUri: string, ): Promise { const metadata = { source: metadataUri, diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index 3cf2e5a7f..fcb2506d6 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -119,7 +119,7 @@ export class SettingsManager { // Structure the settings similar to the ExtensionSettings interface for usage in the code private defaultSettings: ExtensionSettings = this._settingsAdjustment( - _.cloneDeep(this.defaultSettingsWithDescription) + _.cloneDeep(this.defaultSettingsWithDescription), ); public globalSettings: ExtensionSettings = this.defaultSettings; @@ -164,7 +164,7 @@ export class SettingsManager { } public async handleConfigurationChanged( - params: DidChangeConfigurationParams + params: DidChangeConfigurationParams, ): Promise { if (this.clientSupportsConfigRequests) { // find configuration change handlers to fire diff --git a/src/services/validationManager.ts b/src/services/validationManager.ts index 9c9504ead..a7236e559 100644 --- a/src/services/validationManager.ts +++ b/src/services/validationManager.ts @@ -44,7 +44,7 @@ export class ValidationManager { */ public processDiagnostics( originFileUri: string, - diagnosticsByFile: Map + diagnosticsByFile: Map, ): void { if (!this.documents.get(originFileUri)) { // the origin file has been closed before the diagnostics were delivered @@ -57,7 +57,7 @@ export class ValidationManager { } const unreferencedFiles = [...referencedFiles].filter( - (f) => !diagnosticsByFile.has(f) + (f) => !diagnosticsByFile.has(f), ); for (const fileUri of unreferencedFiles) { @@ -88,7 +88,7 @@ export class ValidationManager { */ public cacheDiagnostics( originFileUri: string, - cacheableDiagnostics: Map + cacheableDiagnostics: Map, ): void { if (!this.documents.get(originFileUri)) { // the origin file has been closed before the diagnostics were delivered @@ -102,7 +102,7 @@ export class ValidationManager { for (const diagnostic of fileDiagnostics) { diagnosticTree.insert( [diagnostic.range.start.line, diagnostic.range.end.line], - diagnostic + diagnostic, ); } } @@ -110,7 +110,7 @@ export class ValidationManager { public reconcileCacheItems( fileUri: string, - changes: TextDocumentContentChangeEvent[] + changes: TextDocumentContentChangeEvent[], ): void { const diagnosticTree = this.validationCache.get(fileUri); if (diagnosticTree) { @@ -124,7 +124,7 @@ export class ValidationManager { for (const diagnostic of invalidatedDiagnostics as Array) { diagnosticTree.remove( [diagnostic.range.start.line, diagnostic.range.end.line], - diagnostic + diagnostic, ); } } @@ -143,13 +143,13 @@ export class ValidationManager { for (const diagnostic of displacedDiagnostics as Array) { diagnosticTree.remove( [diagnostic.range.start.line, diagnostic.range.end.line], - diagnostic + diagnostic, ); diagnostic.range.start.line += displacement; diagnostic.range.end.line += displacement; diagnosticTree.insert( [diagnostic.range.start.line, diagnostic.range.end.line], - diagnostic + diagnostic, ); } } @@ -160,7 +160,7 @@ export class ValidationManager { } public getValidationFromCache( - fileUri: string + fileUri: string, ): Map | undefined { const referencedFiles = this.referencedFilesByOrigin.get(fileUri); if (referencedFiles) { diff --git a/src/services/workspaceManager.ts b/src/services/workspaceManager.ts index ecd5b2f9a..a2d8093cf 100644 --- a/src/services/workspaceManager.ts +++ b/src/services/workspaceManager.ts @@ -49,7 +49,7 @@ export class WorkspaceManager { context = new WorkspaceFolderContext( this.connection, workspaceFolder, - this + this, ); this.folderContexts.set(workspaceFolder.uri, context); } @@ -58,12 +58,12 @@ export class WorkspaceManager { } public async forEachContext( - callbackfn: (value: WorkspaceFolderContext) => Promise | void + callbackfn: (value: WorkspaceFolderContext) => Promise | void, ): Promise { await Promise.all( _.map(Array.from(this.folderContexts.values()), (folder) => - callbackfn(folder) - ) + callbackfn(folder), + ), ); } @@ -91,7 +91,7 @@ export class WorkspaceManager { this.connection.console.log( `workspace folder explicitly set to ${ URI.parse(workspaceFolder.uri).path - }` + }`, ); return workspaceFolder; } @@ -141,7 +141,7 @@ export class WorkspaceFolderContext { constructor( connection: Connection, workspaceFolder: WorkspaceFolder, - workspaceManager: WorkspaceManager + workspaceManager: WorkspaceManager, ) { this.connection = connection; this.clientCapabilities = workspaceManager.clientCapabilities; @@ -149,7 +149,7 @@ export class WorkspaceFolderContext { this.documentMetadata = new MetadataLibrary(connection); this.documentSettings = new SettingsManager( connection, - !!this.clientCapabilities.workspace?.configuration + !!this.clientCapabilities.workspace?.configuration, ); this.documentSettings.onConfigurationChanged( this.workspaceFolder.uri, @@ -160,12 +160,12 @@ export class WorkspaceFolderContext { this._ansibleConfig = undefined; this._docsLibrary = undefined; this._ansibleInventory = undefined; - } + }, ); } public handleWatchedDocumentChange( - params: DidChangeWatchedFilesParams + params: DidChangeWatchedFilesParams, ): void { this.documentMetadata.handleWatchedDocumentChange(params); this.ansibleLint.handleWatchedDocumentChange(params); @@ -230,7 +230,7 @@ export class WorkspaceFolderContext { if (!this._executionEnvironment) { const executionEnvironment = new ExecutionEnvironment( this.connection, - this + this, ); this._executionEnvironment = executionEnvironment .initialize() diff --git a/src/utils/ansible.ts b/src/utils/ansible.ts index 5fdd4e7cf..dfe43f363 100644 --- a/src/utils/ansible.ts +++ b/src/utils/ansible.ts @@ -2,12 +2,12 @@ import { MarkupContent, MarkupKind } from "vscode-languageserver"; export const playKeywords = new Map(); playKeywords.set( "any_errors_fatal", - "Force any un-handled task errors on any host to propagate to all hosts and end the play." + "Force any un-handled task errors on any host to propagate to all hosts and end the play.", ); playKeywords.set( "become", - "Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin." + "Boolean that controls if privilege escalation is used or not on Task execution. Implemented by the become plugin.", ); playKeywords.set("become_exe", { @@ -18,17 +18,17 @@ playKeywords.set("become_exe", { playKeywords.set( "become_flags", - "A string of flag(s) to pass to the privilege escalation program when become is True." + "A string of flag(s) to pass to the privilege escalation program when become is True.", ); playKeywords.set( "become_method", - "Which method of privilege escalation to use (such as sudo or su)." + "Which method of privilege escalation to use (such as sudo or su).", ); playKeywords.set( "become_user", - "User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user." + "User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user.", ); playKeywords.set("check_mode", { @@ -59,140 +59,140 @@ playKeywords.set("debugger", { playKeywords.set( "diff", - "Toggle to make tasks return ‘diff’ information or not." + "Toggle to make tasks return ‘diff’ information or not.", ); playKeywords.set( "environment", - "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data." + "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data.", ); playKeywords.set( "fact_path", - "Set the fact path option for the fact gathering plugin controlled by gather_facts." + "Set the fact path option for the fact gathering plugin controlled by gather_facts.", ); playKeywords.set( "force_handlers", - "Will force notified handler execution for hosts even if they failed during the play. Will not trigger if the play itself fails." + "Will force notified handler execution for hosts even if they failed during the play. Will not trigger if the play itself fails.", ); playKeywords.set( "gather_facts", - "A boolean that controls if the play will automatically run the ‘setup’ task to gather facts for the hosts." + "A boolean that controls if the play will automatically run the ‘setup’ task to gather facts for the hosts.", ); playKeywords.set( "gather_subset", - "Allows you to pass subset options to the fact gathering plugin controlled by gather_facts." + "Allows you to pass subset options to the fact gathering plugin controlled by gather_facts.", ); playKeywords.set( "gather_timeout", - "Allows you to set the timeout for the fact gathering plugin controlled by gather_facts." + "Allows you to set the timeout for the fact gathering plugin controlled by gather_facts.", ); playKeywords.set( "handlers", - "A section with tasks that are treated as handlers, these won’t get executed normally, only when notified after each section of tasks is complete. A handler’s listen field cannot use templates." + "A section with tasks that are treated as handlers, these won’t get executed normally, only when notified after each section of tasks is complete. A handler’s listen field cannot use templates.", ); playKeywords.set( "hosts", - "A list of groups, hosts or host pattern that translates into a list of hosts that are the play’s target." + "A list of groups, hosts or host pattern that translates into a list of hosts that are the play’s target.", ); playKeywords.set( "ignore_errors", - "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors." + "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.", ); playKeywords.set( "ignore_unreachable", - "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts." + "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts.", ); playKeywords.set( "max_fail_percentage", - "Can be used to abort the run after a given percentage of hosts in the current batch has failed. This only works on linear or linear derived strategies." + "Can be used to abort the run after a given percentage of hosts in the current batch has failed. This only works on linear or linear derived strategies.", ); playKeywords.set( "module_defaults", - "Specifies default parameter values for modules." + "Specifies default parameter values for modules.", ); playKeywords.set( "name", - "Identifier. Can be used for documentation, or in tasks/handlers." + "Identifier. Can be used for documentation, or in tasks/handlers.", ); playKeywords.set("no_log", "Boolean that controls information disclosure."); playKeywords.set( "order", - "Controls the sorting of hosts as they are used for executing the play. Possible values are inventory (default), sorted, reverse_sorted, reverse_inventory and shuffle." + "Controls the sorting of hosts as they are used for executing the play. Possible values are inventory (default), sorted, reverse_sorted, reverse_inventory and shuffle.", ); playKeywords.set( "port", - "Used to override the default port used in a connection." + "Used to override the default port used in a connection.", ); playKeywords.set( "post_tasks", - "A list of tasks to execute after the tasks section." + "A list of tasks to execute after the tasks section.", ); playKeywords.set("pre_tasks", "A list of tasks to execute before roles."); playKeywords.set( "remote_user", - "User used to log into the target via the connection plugin." + "User used to log into the target via the connection plugin.", ); playKeywords.set("roles", "List of roles to be imported into the play"); playKeywords.set( "run_once", - "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch." + "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch.", ); playKeywords.set( "serial", - "Explicitly define how Ansible batches the execution of the current play on the play’s target" + "Explicitly define how Ansible batches the execution of the current play on the play’s target", ); playKeywords.set( "strategy", - "Allows you to choose the connection plugin to use for the play." + "Allows you to choose the connection plugin to use for the play.", ); playKeywords.set( "tags", - "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line." + "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.", ); playKeywords.set( "tasks", - "Main list of tasks to execute in the play, they run after roles and before post_tasks." + "Main list of tasks to execute in the play, they run after roles and before post_tasks.", ); playKeywords.set( "throttle", - "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel." + "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel.", ); playKeywords.set( "timeout", - "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task." + "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task.", ); playKeywords.set("vars", "Dictionary/map of variables"); playKeywords.set( "vars_files", - "List of files that contain vars to include in the play." + "List of files that contain vars to include in the play.", ); playKeywords.set("vars_prompt", "List of variables to prompt for."); @@ -200,7 +200,7 @@ playKeywords.set("vars_prompt", "List of variables to prompt for."); export const roleKeywords = new Map(); roleKeywords.set( "any_errors_fatal", - "Force any un-handled task errors on any host to propagate to all hosts and end the play." + "Force any un-handled task errors on any host to propagate to all hosts and end the play.", ); roleKeywords.set("become", { @@ -217,17 +217,17 @@ roleKeywords.set("become_exe", { roleKeywords.set( "become_flags", - "A string of flag(s) to pass to the privilege escalation program when become is True." + "A string of flag(s) to pass to the privilege escalation program when become is True.", ); roleKeywords.set( "become_method", - "Which method of privilege escalation to use (such as sudo or su)." + "Which method of privilege escalation to use (such as sudo or su).", ); roleKeywords.set( "become_user", - "User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user." + "User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user.", ); roleKeywords.set("check_mode", { @@ -258,92 +258,92 @@ roleKeywords.set("debugger", { roleKeywords.set( "delegate_facts", - "Boolean that allows you to apply facts to a delegated host instead of inventory_hostname." + "Boolean that allows you to apply facts to a delegated host instead of inventory_hostname.", ); roleKeywords.set( "delegate_to", - "Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task." + "Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task.", ); roleKeywords.set( "diff", - "Toggle to make tasks return ‘diff’ information or not." + "Toggle to make tasks return ‘diff’ information or not.", ); roleKeywords.set( "environment", - "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data." + "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data.", ); roleKeywords.set( "ignore_errors", - "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors." + "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.", ); roleKeywords.set( "ignore_unreachable", - "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts." + "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts.", ); roleKeywords.set( "module_defaults", - "Specifies default parameter values for modules." + "Specifies default parameter values for modules.", ); roleKeywords.set( "name", - "Identifier. Can be used for documentation, or in tasks/handlers." + "Identifier. Can be used for documentation, or in tasks/handlers.", ); roleKeywords.set("no_log", "Boolean that controls information disclosure."); roleKeywords.set( "port", - "Used to override the default port used in a connection." + "Used to override the default port used in a connection.", ); roleKeywords.set( "remote_user", - "User used to log into the target via the connection plugin." + "User used to log into the target via the connection plugin.", ); roleKeywords.set( "run_once", - "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch." + "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch.", ); roleKeywords.set( "tags", - "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line." + "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.", ); roleKeywords.set( "throttle", - "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel." + "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel.", ); roleKeywords.set( "timeout", - "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task." + "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task.", ); roleKeywords.set("vars", "Dictionary/map of variables"); roleKeywords.set( "when", - "Conditional expression, determines if an iteration of a task is run or not." + "Conditional expression, determines if an iteration of a task is run or not.", ); export const blockKeywords = new Map(); blockKeywords.set( "always", - "List of tasks, in a block, that execute no matter if there is an error in the block or not." + "List of tasks, in a block, that execute no matter if there is an error in the block or not.", ); blockKeywords.set( "any_errors_fatal", - "Force any un-handled task errors on any host to propagate to all hosts and end the play." + "Force any un-handled task errors on any host to propagate to all hosts and end the play.", ); blockKeywords.set("become", { @@ -360,17 +360,17 @@ blockKeywords.set("become_exe", { blockKeywords.set( "become_flags", - "A string of flag(s) to pass to the privilege escalation program when become is True." + "A string of flag(s) to pass to the privilege escalation program when become is True.", ); blockKeywords.set( "become_method", - "Which method of privilege escalation to use (such as sudo or su)." + "Which method of privilege escalation to use (such as sudo or su).", ); blockKeywords.set( "become_user", - "User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user." + "User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user.", ); blockKeywords.set("block", "List of tasks in a block."); @@ -403,112 +403,112 @@ blockKeywords.set("debugger", { blockKeywords.set( "delegate_facts", - "Boolean that allows you to apply facts to a delegated host instead of inventory_hostname." + "Boolean that allows you to apply facts to a delegated host instead of inventory_hostname.", ); blockKeywords.set( "delegate_to", - "Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task." + "Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task.", ); blockKeywords.set( "diff", - "Toggle to make tasks return ‘diff’ information or not." + "Toggle to make tasks return ‘diff’ information or not.", ); blockKeywords.set( "environment", - "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data." + "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data.", ); blockKeywords.set( "ignore_errors", - "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors." + "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.", ); blockKeywords.set( "ignore_unreachable", - "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts." + "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts.", ); blockKeywords.set( "module_defaults", - "Specifies default parameter values for modules." + "Specifies default parameter values for modules.", ); blockKeywords.set( "name", - "Identifier. Can be used for documentation, or in tasks/handlers." + "Identifier. Can be used for documentation, or in tasks/handlers.", ); blockKeywords.set("no_log", "Boolean that controls information disclosure."); blockKeywords.set( "notify", - "List of handlers to notify when the task returns a ‘changed=True’ status." + "List of handlers to notify when the task returns a ‘changed=True’ status.", ); blockKeywords.set( "port", - "Used to override the default port used in a connection." + "Used to override the default port used in a connection.", ); blockKeywords.set( "remote_user", - "User used to log into the target via the connection plugin." + "User used to log into the target via the connection plugin.", ); blockKeywords.set( "rescue", - "List of tasks in a block that run if there is a task error in the main block list." + "List of tasks in a block that run if there is a task error in the main block list.", ); blockKeywords.set( "run_once", - "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch." + "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch.", ); blockKeywords.set( "tags", - "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line." + "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.", ); blockKeywords.set( "throttle", - "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel." + "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel.", ); blockKeywords.set( "timeout", - "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task." + "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task.", ); blockKeywords.set("vars", "Dictionary/map of variables"); blockKeywords.set( "when", - "Conditional expression, determines if an iteration of a task is run or not." + "Conditional expression, determines if an iteration of a task is run or not.", ); export const taskKeywords = new Map(); taskKeywords.set( "action", - "The ‘action’ to execute for a task, it normally translates into a C(module) or action plugin." + "The ‘action’ to execute for a task, it normally translates into a C(module) or action plugin.", ); taskKeywords.set( "any_errors_fatal", - "Force any un-handled task errors on any host to propagate to all hosts and end the play." + "Force any un-handled task errors on any host to propagate to all hosts and end the play.", ); taskKeywords.set( "args", - "A secondary way to add arguments into a task. Takes a dictionary in which keys map to options and values." + "A secondary way to add arguments into a task. Takes a dictionary in which keys map to options and values.", ); taskKeywords.set( "async", - "Run a task asynchronously if the C(action) supports this; value is maximum runtime in seconds." + "Run a task asynchronously if the C(action) supports this; value is maximum runtime in seconds.", ); taskKeywords.set("become", { @@ -525,22 +525,22 @@ taskKeywords.set("become_exe", { taskKeywords.set( "become_flags", - "A string of flag(s) to pass to the privilege escalation program when become is True." + "A string of flag(s) to pass to the privilege escalation program when become is True.", ); taskKeywords.set( "become_method", - "Which method of privilege escalation to use (such as sudo or su)." + "Which method of privilege escalation to use (such as sudo or su).", ); taskKeywords.set( "become_user", - "User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user." + "User that you ‘become’ after using privilege escalation. The remote/login user must have permissions to become this user.", ); taskKeywords.set( "changed_when", - "Conditional expression that overrides the task’s normal ‘changed’ status." + "Conditional expression that overrides the task’s normal ‘changed’ status.", ); taskKeywords.set("check_mode", { @@ -571,142 +571,142 @@ taskKeywords.set("debugger", { taskKeywords.set( "delay", - "Number of seconds to delay between retries. This setting is only used in combination with until." + "Number of seconds to delay between retries. This setting is only used in combination with until.", ); taskKeywords.set( "delegate_facts", - "Boolean that allows you to apply facts to a delegated host instead of inventory_hostname." + "Boolean that allows you to apply facts to a delegated host instead of inventory_hostname.", ); taskKeywords.set( "delegate_to", - "Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task." + "Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task.", ); taskKeywords.set( "diff", - "Toggle to make tasks return ‘diff’ information or not." + "Toggle to make tasks return ‘diff’ information or not.", ); taskKeywords.set( "environment", - "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data." + "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn’t supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data.", ); taskKeywords.set( "failed_when", - "Conditional expression that overrides the task’s normal ‘failed’ status." + "Conditional expression that overrides the task’s normal ‘failed’ status.", ); taskKeywords.set( "ignore_errors", - "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors." + "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors.", ); taskKeywords.set( "ignore_unreachable", - "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts." + "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see ignore_errors) but is useful for groups of volatile/ephemeral hosts.", ); taskKeywords.set( "local_action", - "Same as action but also implies delegate_to: localhost" + "Same as action but also implies delegate_to: localhost", ); taskKeywords.set( "loop", - "Takes a list for the task to iterate over, saving each list element into the item variable (configurable via loop_control)" + "Takes a list for the task to iterate over, saving each list element into the item variable (configurable via loop_control)", ); taskKeywords.set( "loop_control", - "Several keys here allow you to modify/set loop behavior in a task." + "Several keys here allow you to modify/set loop behavior in a task.", ); taskKeywords.set( "module_defaults", - "Specifies default parameter values for modules." + "Specifies default parameter values for modules.", ); taskKeywords.set( "name", - "Identifier. Can be used for documentation, or in tasks/handlers." + "Identifier. Can be used for documentation, or in tasks/handlers.", ); taskKeywords.set("no_log", "Boolean that controls information disclosure."); taskKeywords.set( "notify", - "List of handlers to notify when the task returns a ‘changed=True’ status." + "List of handlers to notify when the task returns a ‘changed=True’ status.", ); taskKeywords.set( "poll", - "Sets the polling interval in seconds for async tasks (default 10s)." + "Sets the polling interval in seconds for async tasks (default 10s).", ); taskKeywords.set( "port", - "Used to override the default port used in a connection." + "Used to override the default port used in a connection.", ); taskKeywords.set( "register", - "Name of variable that will contain task status and module return data." + "Name of variable that will contain task status and module return data.", ); taskKeywords.set( "remote_user", - "User used to log into the target via the connection plugin." + "User used to log into the target via the connection plugin.", ); taskKeywords.set( "retries", - "Number of retries before giving up in a until loop. This setting is only used in combination with until." + "Number of retries before giving up in a until loop. This setting is only used in combination with until.", ); taskKeywords.set( "run_once", - "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch." + "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch.", ); taskKeywords.set( "tags", - "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line." + "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line.", ); taskKeywords.set( "throttle", - "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel." + "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel.", ); taskKeywords.set( "timeout", - "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task." + "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task.", ); taskKeywords.set( "until", - "This keyword implies a ‘retries loop’ that will go on until the condition supplied here is met or we hit the retries limit." + "This keyword implies a ‘retries loop’ that will go on until the condition supplied here is met or we hit the retries limit.", ); taskKeywords.set("vars", "Dictionary/map of variables"); taskKeywords.set( "when", - "Conditional expression, determines if an iteration of a task is run or not." + "Conditional expression, determines if an iteration of a task is run or not.", ); export const playExclusiveKeywords = new Map( [...playKeywords].filter( ([k]) => - !taskKeywords.has(k) && !roleKeywords.has(k) && !blockKeywords.has(k) - ) + !taskKeywords.has(k) && !roleKeywords.has(k) && !blockKeywords.has(k), + ), ); export const playWithoutTaskKeywords = new Map( - [...playKeywords].filter(([k]) => !taskKeywords.has(k)) + [...playKeywords].filter(([k]) => !taskKeywords.has(k)), ); export function isTaskKeyword(value: string): boolean { diff --git a/src/utils/commandRunner.ts b/src/utils/commandRunner.ts index 8de56336c..7e44cb574 100644 --- a/src/utils/commandRunner.ts +++ b/src/utils/commandRunner.ts @@ -13,7 +13,7 @@ export class CommandRunner { constructor( connection: Connection, context: WorkspaceFolderContext, - settings: ExtensionSettings + settings: ExtensionSettings, ) { this.connection = connection; this.context = context; @@ -24,7 +24,7 @@ export class CommandRunner { executable: string, args: string, workingDirectory?: string, - mountPaths?: Set + mountPaths?: Set, ): Promise<{ stdout: string; stderr: string; @@ -50,14 +50,14 @@ export class CommandRunner { executablePath, args, interpreterPath, - this.settings.python.activationScript + this.settings.python.activationScript, ); } else { // prepare command and env for execution environment run const executionEnvironment = await this.context.executionEnvironment; command = executionEnvironment.wrapContainerArgs( `${executable} ${args}`, - mountPaths + mountPaths, ); runEnv = undefined; } @@ -80,7 +80,7 @@ export class CommandRunner { * @returns Complete path of the executable (string) or undefined depending upon the presence of the executable */ public async getExecutablePath( - executable: string + executable: string, ): Promise | undefined { try { const executablePath = await this.runCommand("which", executable); diff --git a/src/utils/docsFinder.ts b/src/utils/docsFinder.ts index e0a7afad5..1598b1664 100644 --- a/src/utils/docsFinder.ts +++ b/src/utils/docsFinder.ts @@ -15,7 +15,7 @@ export async function findDocumentation( | "builtin" | "collection" | "builtin_doc_fragment" - | "collection_doc_fragment" + | "collection_doc_fragment", ): Promise { if (!fs.existsSync(dir) || fs.lstatSync(dir).isFile()) { return []; @@ -67,14 +67,14 @@ export async function findDocumentation( `${namespace}.${collection}.${name}`, namespace, collection, - name + name, ); }); } export async function findPluginRouting( dir: string, - kind: "builtin" | "collection" + kind: "builtin" | "collection", ): Promise { const pluginRouting = new Map(); if (!fs.existsSync(dir) || fs.lstatSync(dir).isFile()) { diff --git a/src/utils/docsFormatter.ts b/src/utils/docsFormatter.ts index 0d21564a7..c621e1a84 100644 --- a/src/utils/docsFormatter.ts +++ b/src/utils/docsFormatter.ts @@ -9,7 +9,7 @@ import { IPluginRoute } from "../interfaces/pluginRouting"; export function formatModule( module: IModuleDocumentation, - route?: IPluginRoute + route?: IPluginRoute, ): MarkupContent { const sections: string[] = []; if (module.deprecated || route?.deprecation) { @@ -19,7 +19,7 @@ export function formatModule( sections.push(`${route.deprecation.warningText}`); } sections.push( - `Removal date: ${route.deprecation.removalDate}, removal version: ${route.deprecation.removalVersion}` + `Removal date: ${route.deprecation.removalDate}, removal version: ${route.deprecation.removalVersion}`, ); } } @@ -55,7 +55,7 @@ export function formatTombstone(route: IPluginRoute): MarkupContent { sections.push(`${route.tombstone.warningText}`); } sections.push( - `Removal date: ${route.tombstone.removalDate}, removal version: ${route.tombstone.removalVersion}` + `Removal date: ${route.tombstone.removalDate}, removal version: ${route.tombstone.removalVersion}`, ); } if (route?.redirect) { @@ -69,7 +69,7 @@ export function formatTombstone(route: IPluginRoute): MarkupContent { export function formatOption( option: IOption, - with_details = false + with_details = false, ): MarkupContent { const sections: string[] = []; if (with_details) { @@ -83,7 +83,7 @@ export function formatOption( } if (option.default !== undefined) { sections.push( - `*Default*:\n \`\`\`javascript\n${format(option.default)}\n\`\`\`` + `*Default*:\n \`\`\`javascript\n${format(option.default)}\n\`\`\``, ); } if (option.choices) { diff --git a/src/utils/docsParser.ts b/src/utils/docsParser.ts index 13842546c..ebd02267a 100644 --- a/src/utils/docsParser.ts +++ b/src/utils/docsParser.ts @@ -20,7 +20,7 @@ const DOCUMENTATION = "DOCUMENTATION"; export function processDocumentationFragments( module: IModuleMetadata, - docFragments: Map + docFragments: Map, ): void { module.fragments = []; const mainDocumentationFragment = @@ -54,14 +54,14 @@ export function processDocumentationFragments( _.mergeWith( resultContents, docFragment.rawDocumentationFragments.get(fragmentPartName), - docFragmentMergeCustomizer + docFragmentMergeCustomizer, ); } } _.mergeWith( resultContents, mainDocumentationFragment, - docFragmentMergeCustomizer + docFragmentMergeCustomizer, ); module.rawDocumentationFragments.set(DOCUMENTATION, resultContents); } @@ -70,7 +70,7 @@ export function processDocumentationFragments( function docFragmentMergeCustomizer( objValue: unknown, srcValue: unknown, - key: string + key: string, ): Record[] | undefined { if ( ["notes", "requirements", "seealso"].includes(key) && @@ -81,7 +81,7 @@ function docFragmentMergeCustomizer( } export function processRawDocumentation( - moduleDocParts: Map> + moduleDocParts: Map>, ): IModuleDocumentation | undefined { // currently processing only the main documentation const rawDoc = moduleDocParts.get(DOCUMENTATION); @@ -155,7 +155,7 @@ export function parseRawRouting(rawDoc: unknown): IPluginRoutesByType { isObject(rawDoc.plugin_routing) ) { for (const [pluginType, rawRoutesByName] of Object.entries( - rawDoc.plugin_routing + rawDoc.plugin_routing, )) { if (pluginType === "modules" && isObject(rawRoutesByName)) { routesByType.set(pluginType, parseRawRoutesByName(rawRoutesByName)); @@ -166,7 +166,7 @@ export function parseRawRouting(rawDoc: unknown): IPluginRoutesByType { } function parseRawRoutesByName( - rawRoutesByName: Record + rawRoutesByName: Record, ): IPluginRoutesByName { const routesByName = new Map(); for (const [moduleName, rawRoute] of Object.entries(rawRoutesByName)) { @@ -191,7 +191,7 @@ function parseRawRoute(rawRoute: Record): IPluginRoute { } function parseRawDeprecationOrTombstone( - rawInfo: Record + rawInfo: Record, ): { removalVersion?: string; removalDate?: string; @@ -235,7 +235,7 @@ export class LazyModuleDocumentation implements IModuleMetadata { fqcn: string, namespace: string, collection: string, - name: string + name: string, ) { this.source = source; this.fqcn = fqcn; @@ -273,7 +273,7 @@ export class LazyModuleDocumentation implements IModuleMetadata { } public set rawDocumentationFragments( - value: Map> + value: Map>, ) { this._contents = value; } diff --git a/src/utils/execPath.ts b/src/utils/execPath.ts index cc942a81b..0707d945e 100644 --- a/src/utils/execPath.ts +++ b/src/utils/execPath.ts @@ -10,7 +10,7 @@ import { ExtensionSettings } from "../interfaces/extensionSettings"; */ export function getAnsibleCommandExecPath( name: string, - settings: ExtensionSettings + settings: ExtensionSettings, ): string { return name === "ansible-lint" ? settings.ansibleLint.path diff --git a/src/utils/getAnsibleMetaData.ts b/src/utils/getAnsibleMetaData.ts index 0319df2be..07cb19840 100644 --- a/src/utils/getAnsibleMetaData.ts +++ b/src/utils/getAnsibleMetaData.ts @@ -9,7 +9,7 @@ let connection: Connection; export async function getAnsibleMetaData( contextLocal: WorkspaceFolderContext, - connectionLocal: Connection + connectionLocal: Connection, ) { context = contextLocal; connection = connectionLocal; @@ -21,7 +21,7 @@ export async function getAnsibleMetaData( ansibleMetaData["ansible-lint information"] = await getAnsibleLintInfo(); const settings = await context.documentSettings.get( - context.workspaceFolder.uri + context.workspaceFolder.uri, ); if (settings.executionEnvironment.enabled) { @@ -34,7 +34,7 @@ export async function getAnsibleMetaData( export async function getResultsThroughCommandRunner(cmd, arg) { const settings = await context.documentSettings.get( - context.workspaceFolder.uri + context.workspaceFolder.uri, ); const commandRunner = new CommandRunner(connection, context, settings); const workingDirectory = URI.parse(context.workspaceFolder.uri).path; @@ -46,18 +46,18 @@ export async function getResultsThroughCommandRunner(cmd, arg) { cmd, arg, workingDirectory, - mountPaths + mountPaths, ); if (result.stderr) { console.log( - `cmd '${cmd} ${arg}' has the following error: ${result.stderr}` + `cmd '${cmd} ${arg}' has the following error: ${result.stderr}`, ); return undefined; } } catch (error) { console.log( - `cmd '${cmd} ${arg}' was not executed with the following error: ' ${error.toString()}` + `cmd '${cmd} ${arg}' was not executed with the following error: ' ${error.toString()}`, ); return undefined; } @@ -110,7 +110,7 @@ async function getPythonInfo() { const pythonVersionResult = await getResultsThroughCommandRunner( "python3", - "--version" + "--version", ); if (pythonVersionResult === undefined) { return pythonInfo; @@ -120,7 +120,7 @@ async function getPythonInfo() { const pythonPathResult = await getResultsThroughCommandRunner( "python", - '-c "import sys; print(sys.executable)"' + '-c "import sys; print(sys.executable)"', ); pythonInfo["python location"] = pythonPathResult.stdout.trim(); @@ -132,7 +132,7 @@ async function getAnsibleLintInfo() { const ansibleLintVersionResult = await getResultsThroughCommandRunner( "ansible-lint", - "--version" + "--version", ); if (ansibleLintVersionResult === undefined) { @@ -141,7 +141,7 @@ async function getAnsibleLintInfo() { const ansibleLintPathResult = await getResultsThroughCommandRunner( "which", - "ansible-lint" + "ansible-lint", ); ansibleLintInfo["ansible-lint version"] = @@ -173,9 +173,9 @@ async function getExecutionEnvironmentInfo() { `${basicDetails.containerEngine} inspect --format='{{json .Config}}' ${basicDetails.containerImage}`, { encoding: "utf-8", - } + }, ) - .toString() + .toString(), ); eeServiceWorking = true; } catch (error) { diff --git a/src/utils/imagePuller.ts b/src/utils/imagePuller.ts index 78a42f83c..90264efca 100644 --- a/src/utils/imagePuller.ts +++ b/src/utils/imagePuller.ts @@ -17,7 +17,7 @@ export class ImagePuller { containerEngine: string, containerImage: string, pullPolicy: string, - pullArguments: string + pullArguments: string, ) { this.connection = connection; this.context = context; @@ -41,7 +41,7 @@ export class ImagePuller { } if (pullRequired) { this.connection.console.log( - `Pulling image '${this._containerImage}' with pull-policy '${this._pullPolicy}' and image-tag '${imageTag}'` + `Pulling image '${this._containerImage}' with pull-policy '${this._pullPolicy}' and image-tag '${imageTag}'`, ); try { @@ -57,14 +57,14 @@ export class ImagePuller { progressTracker.begin( "execution-environment", undefined, - "Pulling Ansible execution environment image..." + "Pulling Ansible execution environment image...", ); } child_process.execSync(pullCommand, { encoding: "utf-8", }); this.connection.console.info( - `Container image '${this._containerImage}' pull successful` + `Container image '${this._containerImage}' pull successful`, ); setupComplete = true; } catch (error) { @@ -104,7 +104,7 @@ export class ImagePuller { try { const command = `${this._containerEngine} image inspect ${this._containerImage}`; this.connection.console.log( - `check for container image with command: '${command}'` + `check for container image with command: '${command}'`, ); child_process.execSync(command, { encoding: "utf-8", @@ -112,7 +112,7 @@ export class ImagePuller { return true; } catch (error) { this.connection.console.log( - `'${this._containerImage}' image inspection failed, image assumed to be corrupted or missing` + `'${this._containerImage}' image inspection failed, image assumed to be corrupted or missing`, ); return false; } diff --git a/src/utils/misc.ts b/src/utils/misc.ts index 4ed48627b..2ec74fb13 100644 --- a/src/utils/misc.ts +++ b/src/utils/misc.ts @@ -13,7 +13,7 @@ export const asyncExec = promisify(child_process.exec); export function toLspRange( range: [number, number], - textDocument: TextDocument + textDocument: TextDocument, ): Range { const start = textDocument.positionAt(range[0]); const end = textDocument.positionAt(range[1]); @@ -22,7 +22,7 @@ export function toLspRange( export function hasOwnProperty( obj: X, - prop: Y + prop: Y, ): obj is X & Record { return isObject(obj) && obj.hasOwnProperty(prop); } @@ -45,7 +45,7 @@ export function withInterpreter( executable: string, args: string, interpreterPath: string, - activationScript: string + activationScript: string, ): [string, NodeJS.ProcessEnv | undefined] { let command = `${executable} ${args}`; // base case diff --git a/src/utils/pathUtils.ts b/src/utils/pathUtils.ts index e493ac777..2cdecb640 100644 --- a/src/utils/pathUtils.ts +++ b/src/utils/pathUtils.ts @@ -9,7 +9,7 @@ import { glob } from "glob"; export function globArray(arrayOfPatterns: string[]): string[] { // Patterns to be matched const matchPatterns = arrayOfPatterns.filter( - (pattern) => !pattern.startsWith("!") + (pattern) => !pattern.startsWith("!"), ); // Patterns to be excluded diff --git a/src/utils/yaml.ts b/src/utils/yaml.ts index 1f6bfd018..954ebd504 100644 --- a/src/utils/yaml.ts +++ b/src/utils/yaml.ts @@ -29,7 +29,7 @@ export class AncestryBuilder { * up. */ parent( - type?: new (...args: unknown[]) => X + type?: new (...args: unknown[]) => X, ): AncestryBuilder { this._index--; if (this.get() instanceof Pair) { @@ -133,7 +133,7 @@ export function getPathAt( document: TextDocument, position: Position, docs: Document[], - inclusive = false + inclusive = false, ): Node[] | null { const offset = document.offsetAt(position); const doc = _.find(docs, (d) => contains(d.contents, offset, inclusive)); @@ -146,7 +146,7 @@ export function getPathAt( export function contains( node: Node | null, offset: number, - inclusive: boolean + inclusive: boolean, ): boolean { const range = getOrigRange(node); return !!( @@ -159,25 +159,25 @@ export function contains( export function getPathAtOffset( path: Node[], offset: number, - inclusive: boolean + inclusive: boolean, ): Node[] | null { if (path) { const currentNode = path[path.length - 1]; if (currentNode instanceof YAMLMap) { let pair = _.find(currentNode.items, (p) => - contains(p.key, offset, inclusive) + contains(p.key, offset, inclusive), ); if (pair) { return getPathAtOffset(path.concat(pair, pair.key), offset, inclusive); } pair = _.find(currentNode.items, (p) => - contains(p.value, offset, inclusive) + contains(p.value, offset, inclusive), ); if (pair) { return getPathAtOffset( path.concat(pair, pair.value), offset, - inclusive + inclusive, ); } pair = _.find(currentNode.items, (p) => { @@ -194,7 +194,7 @@ export function getPathAtOffset( } } else if (currentNode instanceof YAMLSeq) { const item = _.find(currentNode.items, (n) => - contains(n, offset, inclusive) + contains(n, offset, inclusive), ); if (item) { return getPathAtOffset(path.concat(item), offset, inclusive); @@ -274,7 +274,7 @@ function getDeclaredCollectionsForMap(playNode: YAMLMap | null): string[] { const declaredCollections: string[] = []; const collectionsPair = _.find( playNode?.items, - (pair) => pair.key instanceof Scalar && pair.key.value === "collections" + (pair) => pair.key instanceof Scalar && pair.key.value === "collections", ); if (collectionsPair) { @@ -299,7 +299,7 @@ function getDeclaredCollectionsForMap(playNode: YAMLMap | null): string[] { */ export function isPlayParam( path: Node[], - fileUri?: string + fileUri?: string, ): boolean | undefined { const isAtRoot = new AncestryBuilder(path).parentOfKey().parent(YAMLSeq).getPath() @@ -308,7 +308,7 @@ export function isPlayParam( const mapNode = new AncestryBuilder(path).parentOfKey().get() as YAMLMap; const providedKeys = getYamlMapKeys(mapNode); const containsPlayKeyword = providedKeys.some((p) => - playExclusiveKeywords.has(p) + playExclusiveKeywords.has(p), ); if (containsPlayKeyword) { return true; @@ -359,7 +359,7 @@ export function isRoleParam(path: Node[]): boolean { export async function getPossibleOptionsForPath( path: Node[], document: TextDocument, - docsLibrary: DocsLibrary + docsLibrary: DocsLibrary, ): Promise | null> { const [taskParamPath, suboptionTrace] = getTaskParamPathWithTrace(path); if (!taskParamPath) return null; @@ -383,7 +383,7 @@ export async function getPossibleOptionsForPath( [module] = await docsLibrary.findModule( taskParamNode.value, taskParamPath, - document.uri + document.uri, ); } if (!module || !module.documentation) return null; @@ -409,7 +409,7 @@ export async function getPossibleOptionsForPath( * alongside. */ export function getTaskParamPathWithTrace( - path: Node[] + path: Node[], ): [Node[], [string, "list" | "dict"][]] { const trace: [string, "list" | "dict"][] = []; while (!isTaskParam(path)) { @@ -456,7 +456,7 @@ export function getTaskParamPathWithTrace( export async function findProvidedModule( taskParamPath: Node[], document: TextDocument, - docsLibrary: DocsLibrary + docsLibrary: DocsLibrary, ): Promise { const taskParameterMap = new AncestryBuilder(taskParamPath) .parent(YAMLMap) @@ -466,7 +466,7 @@ export async function findProvidedModule( const providedParameters = new Set(getYamlMapKeys(taskParameterMap)); // should usually be 0 or 1 const providedModuleNames = [...providedParameters].filter( - (x) => !x || !isTaskKeyword(x) + (x) => !x || !isTaskKeyword(x), ); // find the module if it has been provided @@ -474,7 +474,7 @@ export async function findProvidedModule( const [module] = await docsLibrary.findModule( m, taskParamPath, - document.uri + document.uri, ); if (module) { return module; @@ -492,7 +492,7 @@ export function getYamlMapKeys(mapNode: YAMLMap): Array { } export function getOrigRange( - node: Node | null | undefined + node: Node | null | undefined, ): [number, number] | null | undefined { if (node?.cstNode?.range) { const range = node.cstNode.range; @@ -513,7 +513,7 @@ export function parseAllDocuments(str: string, options?: Options): Document[] { const parsedDocuments: Document[] = []; for (const cstDoc of cst) { const parsedDocument = new Document( - Object.assign({ keepCstNodes: true }, options) + Object.assign({ keepCstNodes: true }, options), ); parsedDocument.parse(cstDoc); parsedDocuments.push(parsedDocument); @@ -559,14 +559,14 @@ export function isPlaybook(textDocument: TextDocument): boolean { // Filters out all play keywords that are task keywords const filteredList = playKeywordsList.filter( - (value) => !taskKeywordsList.includes(value) + (value) => !taskKeywordsList.includes(value), ); // Check if any top-level key of the ansible file is a part of filtered list // If it is: The file is a playbook // Else: The file is not a playbook const isPlaybookValue = playbookKeys.some((r: string) => - filteredList.includes(r) + filteredList.includes(r), ); return isPlaybookValue; diff --git a/test/helper.ts b/test/helper.ts index cf829de26..a443ff17f 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -13,12 +13,12 @@ export const FIXTURES_BASE_PATH = path.join("test", "fixtures"); export const ANSIBLE_COLLECTIONS_FIXTURES_BASE_PATH = path.resolve( FIXTURES_BASE_PATH, "common", - "collections" + "collections", ); export const ANSIBLE_CONFIG_FILE = path.resolve( FIXTURES_BASE_PATH, "completion", - "ansible.cfg" + "ansible.cfg", ); export function setFixtureAnsibleCollectionPathEnv(prePendPath?: string): void { @@ -43,7 +43,7 @@ export function unsetAnsibleConfigEnv(): void { } export async function enableExecutionEnvironmentSettings( - docSettings: Thenable + docSettings: Thenable, ): Promise { (await docSettings).executionEnvironment.enabled = true; (await docSettings).executionEnvironment.volumeMounts = [ @@ -56,7 +56,7 @@ export async function enableExecutionEnvironmentSettings( } export async function disableExecutionEnvironmentSettings( - docSettings: Thenable + docSettings: Thenable, ): Promise { (await docSettings).executionEnvironment.enabled = false; } @@ -145,7 +145,7 @@ export function createTestValidationManager(): ValidationManager { const connection = createConnection(); const documents: TextDocuments = new TextDocuments( - TextDocument + TextDocument, ); const validationManager = new ValidationManager(connection, documents); diff --git a/test/index.ts b/test/index.ts index f92a073dc..c29fa00e5 100644 --- a/test/index.ts +++ b/test/index.ts @@ -8,7 +8,7 @@ const PRETEST_ERR_RC = 2; // isWindows returns false under WSL if (isWindows()) { console.error( - "ERROR: This project does not support pure Windows, try under WSL2." + "ERROR: This project does not support pure Windows, try under WSL2.", ); process.exit(PRETEST_ERR_RC); } diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index 4fd5bd6eb..1f8244ee7 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -18,7 +18,7 @@ import { function testPlayKeywords( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -41,7 +41,7 @@ function testPlayKeywords( const filteredCompletion = smartFilter( actualCompletion, - triggerCharacter + triggerCharacter, ); if (!completion) { @@ -53,7 +53,7 @@ function testPlayKeywords( } else { expect(filteredCompletion[0].item.label).to.be.equal(completion); expect(filteredCompletion[0].item.textEdit.newText).to.be.equal( - completion + completion, ); } } @@ -63,7 +63,7 @@ function testPlayKeywords( function testRoleKeywords( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -86,7 +86,7 @@ function testRoleKeywords( const filteredCompletion = smartFilter( actualCompletion, - triggerCharacter + triggerCharacter, ); if (!completion) { @@ -98,7 +98,7 @@ function testRoleKeywords( } else { expect(filteredCompletion[0].item.label).to.be.equal(completion); expect(filteredCompletion[0].item.textEdit.newText).to.be.equal( - completion + completion, ); } } @@ -108,7 +108,7 @@ function testRoleKeywords( function testBlockKeywords( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -131,7 +131,7 @@ function testBlockKeywords( const filteredCompletion = smartFilter( actualCompletion, - triggerCharacter + triggerCharacter, ); if (!completion) { @@ -143,7 +143,7 @@ function testBlockKeywords( } else { expect(filteredCompletion[0].item.label).to.be.equal(completion); expect(filteredCompletion[0].item.textEdit.newText).to.be.equal( - completion + completion, ); } } @@ -153,7 +153,7 @@ function testBlockKeywords( function testTaskKeywords( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -176,7 +176,7 @@ function testTaskKeywords( const filteredCompletion = smartFilter( actualCompletion, - triggerCharacter + triggerCharacter, ); if (!completion) { @@ -188,7 +188,7 @@ function testTaskKeywords( } else { expect(filteredCompletion[0].item.label).to.be.equal(completion); expect(filteredCompletion[0].item.textEdit.newText).to.be.equal( - completion + completion, ); } } @@ -198,7 +198,7 @@ function testTaskKeywords( function testModuleNames( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -251,7 +251,7 @@ function testModuleNames( const filteredCompletion = smartFilter( actualCompletion, - triggerCharacter + triggerCharacter, ); if (!completion) { @@ -263,7 +263,7 @@ function testModuleNames( } else { expect(filteredCompletion[0].item.label).to.contain(completion); expect(filteredCompletion[0].item.textEdit.newText).to.contain( - completion + completion, ); } } @@ -273,7 +273,7 @@ function testModuleNames( function testModuleOptions( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -320,7 +320,7 @@ function testModuleOptions( const filteredCompletion = smartFilter( actualCompletion, - triggerCharacter + triggerCharacter, ); if (!completion) { @@ -332,7 +332,7 @@ function testModuleOptions( } else { expect(filteredCompletion[0].item.label).to.be.equal(completion); expect(filteredCompletion[0].item.textEdit.newText).be.equal( - completion + completion, ); } } @@ -342,7 +342,7 @@ function testModuleOptions( function testModuleOptionsValues( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -383,7 +383,7 @@ function testModuleOptionsValues( const labelCompletion = smartFilter( actualCompletion, - triggerCharacter + triggerCharacter, ).map((completion) => { if (!completion.item) { return completion.label; @@ -400,7 +400,7 @@ function testModuleOptionsValues( const newTextCompletion = smartFilter( actualCompletion, - triggerCharacter + triggerCharacter, ).map((completion) => { if (!completion.item) { return completion.textEdit.newText; @@ -420,7 +420,7 @@ function testModuleOptionsValues( function testModuleNamesWithoutFQCN( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -464,7 +464,7 @@ function testModuleNamesWithoutFQCN( const filteredCompletion = smartFilter( actualCompletion, - triggerCharacter + triggerCharacter, ); if (!completion) { @@ -476,7 +476,7 @@ function testModuleNamesWithoutFQCN( } else { expect(filteredCompletion[0].item.label).to.be.equal(completion); expect(filteredCompletion[0].item.textEdit.newText).to.be.equal( - completion + completion, ); } } @@ -486,7 +486,7 @@ function testModuleNamesWithoutFQCN( function testHostValues( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -521,7 +521,7 @@ function testHostValues( const filteredCompletion = smartFilter( actualCompletion, - triggerCharacter + triggerCharacter, ).map((completion) => { if (!completion.item) { return completion.label; @@ -552,7 +552,7 @@ describe("doCompletion()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -584,7 +584,7 @@ describe("doCompletion()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -617,7 +617,7 @@ describe("doCompletion()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -650,7 +650,7 @@ describe("doCompletion()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -683,7 +683,7 @@ describe("doCompletion()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -709,7 +709,7 @@ describe("doCompletion()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -736,7 +736,7 @@ describe("doCompletion()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -763,7 +763,7 @@ describe("doCompletion()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -796,7 +796,7 @@ describe("doCompletion()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); diff --git a/test/providers/completionResolver.test.ts b/test/providers/completionResolver.test.ts index 7483b2e50..4403f6eb8 100644 --- a/test/providers/completionResolver.test.ts +++ b/test/providers/completionResolver.test.ts @@ -39,22 +39,22 @@ function testFQCNEnabled(context: WorkspaceFolderContext) { it(`should resolve completion for ${name}`, async function () { const actualCompletionResolveAtLineEnd = await doCompletionResolve( completionItem, - context + context, ); expect(actualCompletionResolveAtLineEnd.insertText).be.equal( - `${completionText}:${EOL}\t` + `${completionText}:${EOL}\t`, ); // Check for completion resolution when asked in between of lines completionItem.data.atEndOfLine = false; const actualCompletionResolveAtInBetween = await doCompletionResolve( completionItem, - context + context, ); expect(actualCompletionResolveAtInBetween.insertText).be.equal( - `${completionText}` + `${completionText}`, ); }); }); @@ -95,22 +95,22 @@ function testFQCNDisabled(context: WorkspaceFolderContext) { it(`should resolve completion for ${name}`, async function () { const actualCompletionResolveAtLineEnd = await doCompletionResolve( completionItem, - context + context, ); expect(actualCompletionResolveAtLineEnd.insertText).be.equal( - `${completionText}:${EOL}\t` + `${completionText}:${EOL}\t`, ); // Check for completion resolution when asked in between of lines completionItem.data.atEndOfLine = false; const actualCompletionResolveAtInBetween = await doCompletionResolve( completionItem, - context + context, ); expect(actualCompletionResolveAtInBetween.insertText).be.equal( - `${completionText}` + `${completionText}`, ); }); }); @@ -161,7 +161,7 @@ function testResolveModuleOptionCompletion(context: WorkspaceFolderContext) { it(`should resolve completion for ${name}`, async function () { const actualCompletionResolveAtLineEnd = await doCompletionResolve( completionItem, - context + context, ); let returnSuffix: string; @@ -181,18 +181,18 @@ function testResolveModuleOptionCompletion(context: WorkspaceFolderContext) { break; } expect(actualCompletionResolveAtLineEnd.insertText).be.equal( - `${completionText}:${returnSuffix}` + `${completionText}:${returnSuffix}`, ); // Check for completion resolution when asked in between of lines completionItem.data.atEndOfLine = false; const actualCompletionResolveAtInBetween = await doCompletionResolve( completionItem, - context + context, ); expect(actualCompletionResolveAtInBetween.insertText).be.equal( - `${completionText}` + `${completionText}`, ); }); }); @@ -211,7 +211,7 @@ describe("doCompletionResolve()", () => { describe("With useFQCN enabled and with EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -234,7 +234,7 @@ describe("doCompletionResolve()", () => { describe("With useFQCN disabled and with EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); (await docSettings).ansible.useFullyQualifiedCollectionNames = false; @@ -267,7 +267,7 @@ describe("doCompletionResolve()", () => { describe("with EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); diff --git a/test/providers/hoverProvider.test.ts b/test/providers/hoverProvider.test.ts index 727d950fc..c227ac0c0 100644 --- a/test/providers/hoverProvider.test.ts +++ b/test/providers/hoverProvider.test.ts @@ -14,7 +14,7 @@ import { WorkspaceFolderContext } from "../../src/services/workspaceManager"; function testPlayKeywords( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -39,7 +39,7 @@ function testPlayKeywords( const actualHover = await doHover( textDoc, position, - await context.docsLibrary + await context.docsLibrary, ); expect(actualHover.contents["value"]).includes(doc); }); @@ -48,7 +48,7 @@ function testPlayKeywords( function testTaskKeywords( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -63,7 +63,7 @@ function testTaskKeywords( const actualHover = await doHover( textDoc, position, - await context.docsLibrary + await context.docsLibrary, ); expect(actualHover.contents["value"]).includes(doc); }); @@ -72,7 +72,7 @@ function testTaskKeywords( function testBlockKeywords( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -87,7 +87,7 @@ function testBlockKeywords( const actualHover = await doHover( textDoc, position, - await context.docsLibrary + await context.docsLibrary, ); expect(actualHover.contents["value"]).includes(doc); }); @@ -96,7 +96,7 @@ function testBlockKeywords( function testRoleKeywords( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -111,7 +111,7 @@ function testRoleKeywords( const actualHover = await doHover( textDoc, position, - await context.docsLibrary + await context.docsLibrary, ); expect(actualHover.contents["value"]).includes(doc); }); @@ -120,7 +120,7 @@ function testRoleKeywords( function testModuleNames( context: WorkspaceFolderContext, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -140,7 +140,7 @@ function testModuleNames( const actualHover = await doHover( textDoc, position, - await context.docsLibrary + await context.docsLibrary, ); expect(actualHover.contents["value"]).includes(doc); }); @@ -152,7 +152,7 @@ function testNoHover(context: WorkspaceFolderContext, textDoc: TextDocument) { const actualHover = await doHover( textDoc, { line: 13, character: 24 } as Position, - await context.docsLibrary + await context.docsLibrary, ); expect(actualHover).to.be.null; }); @@ -161,7 +161,7 @@ function testNoHover(context: WorkspaceFolderContext, textDoc: TextDocument) { const actualHover = await doHover( textDoc, { line: 13, character: 8 } as Position, - await context.docsLibrary + await context.docsLibrary, ); expect(actualHover).to.be.null; }); @@ -170,7 +170,7 @@ function testNoHover(context: WorkspaceFolderContext, textDoc: TextDocument) { const actualHover = await doHover( textDoc, { line: 14, character: 10 } as Position, - await context.docsLibrary + await context.docsLibrary, ); expect(actualHover).to.be.null; }); @@ -189,7 +189,7 @@ describe("doHover()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -216,7 +216,7 @@ describe("doHover()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -243,7 +243,7 @@ describe("doHover()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -277,7 +277,7 @@ describe("doHover()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -310,7 +310,7 @@ describe("doHover()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -337,7 +337,7 @@ describe("doHover()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); diff --git a/test/providers/settingsManager.test.ts b/test/providers/settingsManager.test.ts index 01e7223c5..97d4c5fbd 100644 --- a/test/providers/settingsManager.test.ts +++ b/test/providers/settingsManager.test.ts @@ -28,7 +28,7 @@ describe("get()", () => { }); it("should return default value for all settings", () => { expect(mergedSettings).to.deep.equal( - context.documentSettings.globalSettings + context.documentSettings.globalSettings, ); }); }); @@ -49,7 +49,7 @@ describe("get()", () => { }); it("should return default value otherwise", () => { expect(mergedSettings.ansibleLint.path).to.equal( - context.documentSettings.globalSettings.ansibleLint.path + context.documentSettings.globalSettings.ansibleLint.path, ); }); }); diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts index e36d7f801..b6403997b 100644 --- a/test/providers/validationProvider.test.ts +++ b/test/providers/validationProvider.test.ts @@ -19,7 +19,7 @@ import { ValidationManager } from "../../src/services/validationManager"; function testValidationFromCache( validationManager: ValidationManager, - textDoc: TextDocument + textDoc: TextDocument, ) { it("should provide no diagnostics", async function () { const actualDiagnostics = await doValidate(textDoc, validationManager); @@ -32,7 +32,7 @@ function assertValidateTests( tests, context: WorkspaceFolderContext, validationManager: ValidationManager, - textDoc: TextDocument + textDoc: TextDocument, ) { tests.forEach((test) => { it(`should provide diagnostics for ${test.name}`, async function () { @@ -40,14 +40,14 @@ function assertValidateTests( textDoc, validationManager, false, - context + context, ); if (test.diagnosticReport.length === 0) { expect(actualDiagnostics.has(`file://${textDoc.uri}`)).to.be.false; } else { expect(actualDiagnostics.get(`file://${textDoc.uri}`).length).to.equal( - test.diagnosticReport.length + test.diagnosticReport.length, ); actualDiagnostics.get(`file://${textDoc.uri}`).forEach((diag, i) => { @@ -67,7 +67,7 @@ function assertValidateTests( function testAnsibleLintErrors( context: WorkspaceFolderContext, validationManager: ValidationManager, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -130,7 +130,7 @@ function testAnsibleLintErrors( function testAnsibleSyntaxCheckNoErrors( context: WorkspaceFolderContext, validationManager: ValidationManager, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -144,7 +144,7 @@ function testAnsibleSyntaxCheckNoErrors( function testAnsibleSyntaxCheckEmptyPlaybook( context: WorkspaceFolderContext, validationManager: ValidationManager, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -158,7 +158,7 @@ function testAnsibleSyntaxCheckEmptyPlaybook( function testAnsibleSyntaxCheckNoHost( context: WorkspaceFolderContext, validationManager: ValidationManager, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -186,7 +186,7 @@ function testAnsibleSyntaxCheckNoHost( function testInvalidYamlFile( context: WorkspaceFolderContext, validationManager: ValidationManager, - textDoc: TextDocument + textDoc: TextDocument, ) { const tests = [ { @@ -253,7 +253,7 @@ describe("doValidate()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -281,7 +281,7 @@ describe("doValidate()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -310,7 +310,7 @@ describe("doValidate()", () => { before(async () => { (await docSettings).ansibleLint.enabled = false; setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -352,7 +352,7 @@ describe("doValidate()", () => { before(async () => { (await docSettings).ansibleLint.enabled = false; setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -360,7 +360,7 @@ describe("doValidate()", () => { testAnsibleSyntaxCheckEmptyPlaybook( context, validationManager, - textDoc + textDoc, ); after(async () => { @@ -380,7 +380,7 @@ describe("doValidate()", () => { testAnsibleSyntaxCheckEmptyPlaybook( context, validationManager, - textDoc + textDoc, ); }); after(async () => { @@ -402,7 +402,7 @@ describe("doValidate()", () => { before(async () => { (await docSettings).ansibleLint.enabled = false; setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -447,7 +447,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = false; (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -493,7 +493,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = false; (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -541,7 +541,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = false; (await docSettings).ansibleLint.arguments = "-f invalid_argument"; setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -587,7 +587,7 @@ describe("doValidate()", () => { (await docSettings).ansibleLint.enabled = false; (await docSettings).ansibleLint.arguments = "-f invalid_argument"; setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); @@ -633,7 +633,7 @@ describe("doValidate()", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible" + "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); diff --git a/test/utils/getAnsibleMetaData.test.ts b/test/utils/getAnsibleMetaData.test.ts index 95826cc03..e68570176 100644 --- a/test/utils/getAnsibleMetaData.test.ts +++ b/test/utils/getAnsibleMetaData.test.ts @@ -23,7 +23,7 @@ function getAnsibleTestInfo() { "fixtures", "utils", "getAnsibleMetaData", - "ansible.cfg" + "ansible.cfg", ), ]; ansibleInfo["ansible collections location"] = [ @@ -37,7 +37,7 @@ function getAnsibleTestInfo() { "fixtures", "utils", "getAnsibleMetaData", - "inventory" + "inventory", ), ]; return ansibleInfo; @@ -133,25 +133,25 @@ describe("getAnsibleMetaData()", () => { describe("Verify ansible details", () => { it("should contain all the keys for ansible information", function () { expect(Object.keys(ansibleInfoForTest).length).equals( - Object.keys(actualAnsibleMetaData["ansible information"]).length + Object.keys(actualAnsibleMetaData["ansible information"]).length, ); }); it("should have information about ansible version used", function () { expect( - actualAnsibleMetaData["ansible information"]["ansible version"] + actualAnsibleMetaData["ansible information"]["ansible version"], ).includes(ansibleInfoForTest["ansible version"]); }); it("should have a valid ansible location", function () { expect( - actualAnsibleMetaData["ansible information"]["ansible location"] + actualAnsibleMetaData["ansible information"]["ansible location"], ).include(ansibleInfoForTest["ansible location"]); }); it("should have a valid config file location", function () { expect( - actualAnsibleMetaData["ansible information"]["config file path"] + actualAnsibleMetaData["ansible information"]["config file path"], ).to.include.members(ansibleInfoForTest["config file path"]); }); @@ -159,9 +159,9 @@ describe("getAnsibleMetaData()", () => { expect( actualAnsibleMetaData["ansible information"][ "ansible collections location" - ] + ], ).to.include.members( - ansibleInfoForTest["ansible collections location"] + ansibleInfoForTest["ansible collections location"], ); }); @@ -169,9 +169,9 @@ describe("getAnsibleMetaData()", () => { expect( actualAnsibleMetaData["ansible information"][ "ansible default host list path" - ] + ], ).to.include.members( - ansibleInfoForTest["ansible default host list path"] + ansibleInfoForTest["ansible default host list path"], ); }); }); @@ -179,18 +179,18 @@ describe("getAnsibleMetaData()", () => { describe("Verify python details", () => { it("should contain all the keys for python information", function () { expect(Object.keys(pythonInfoForTest).length).equals( - Object.keys(actualAnsibleMetaData["python information"]).length + Object.keys(actualAnsibleMetaData["python information"]).length, ); }); it("should have information about python version used", function () { expect( - actualAnsibleMetaData["python information"]["python version"] + actualAnsibleMetaData["python information"]["python version"], ).includes(pythonInfoForTest["python version"]); }); it("should have a valid python location", function () { expect( - actualAnsibleMetaData["python information"]["python location"] + actualAnsibleMetaData["python information"]["python location"], ).include(pythonInfoForTest["python location"]); }); }); @@ -198,14 +198,14 @@ describe("getAnsibleMetaData()", () => { describe("Verify ansible-lint details", () => { it("should contain all the keys for ansible-lint information", function () { expect(Object.keys(ansibleLintInfoForTest).length).equals( - Object.keys(actualAnsibleMetaData["ansible-lint information"]).length + Object.keys(actualAnsibleMetaData["ansible-lint information"]).length, ); }); it("should have information about ansible-lint version used", function () { expect( actualAnsibleMetaData["ansible-lint information"][ "ansible-lint version" - ] + ], ).includes(ansibleLintInfoForTest["ansible-lint version"]); }); @@ -213,7 +213,7 @@ describe("getAnsibleMetaData()", () => { expect( actualAnsibleMetaData["ansible-lint information"][ "ansible-lint location" - ] + ], ).include(ansibleLintInfoForTest["ansible-lint location"]); }); }); @@ -244,7 +244,7 @@ describe("getAnsibleMetaData()", () => { expect(executionEnvironmentInfoForTest["container engine"]).to.include( actualAnsibleMetaData["execution environment information"][ "container engine" - ] + ], ); }); @@ -252,7 +252,7 @@ describe("getAnsibleMetaData()", () => { expect( actualAnsibleMetaData["execution environment information"][ "container image" - ] + ], ).to.include(executionEnvironmentInfoForTest["container image"]); }); @@ -260,9 +260,9 @@ describe("getAnsibleMetaData()", () => { expect( actualAnsibleMetaData["execution environment information"][ "container volume mounts" - ][0]["src"] + ][0]["src"], ).to.include( - executionEnvironmentInfoForTest["container volume mounts"][0]["src"] + executionEnvironmentInfoForTest["container volume mounts"][0]["src"], ); }); diff --git a/test/utils/runCommand.test.ts b/test/utils/runCommand.test.ts index 2ff8f3d3a..f709b51eb 100644 --- a/test/utils/runCommand.test.ts +++ b/test/utils/runCommand.test.ts @@ -15,7 +15,7 @@ describe("commandRunner", () => { path.join( path.resolve(__dirname, "..", ".."), "bin", - "ansible-language-server" + "ansible-language-server", ), "--version", ], @@ -68,7 +68,7 @@ describe("commandRunner", () => { try { const proc = await commandRunner.runCommand( args[0], - args.slice(1).join(" ") + args.slice(1).join(" "), ); expect(proc.stdout, proc.stderr).contains(stdout); expect(proc.stderr, proc.stdout).contains(stderr); diff --git a/test/utils/yaml.test.ts b/test/utils/yaml.test.ts index 37c7d26ca..81fae7836 100644 --- a/test/utils/yaml.test.ts +++ b/test/utils/yaml.test.ts @@ -15,14 +15,14 @@ import { getDoc, isWindows } from "../helper"; async function getPathInFile( yamlFile: string, line: number, - character: number + character: number, ) { const textDoc = await getDoc(`yaml/${yamlFile}`); const parsedDocs = parseAllDocuments(textDoc.getText()); return getPathAt( textDoc, { line: line - 1, character: character - 1 }, - parsedDocs + parsedDocs, ); } diff --git a/tools/settings-doc-generator.ts b/tools/settings-doc-generator.ts index 76c7e1a96..de5232d94 100644 --- a/tools/settings-doc-generator.ts +++ b/tools/settings-doc-generator.ts @@ -80,7 +80,7 @@ const output = template({ arrayOfDefaultSettings }); fs.writeFileSync(settingsReadmeFileUri, `${WARNING_IN_README}\n${output}`); console.log( - `Readme file for settings description and default value generated.` + `Readme file for settings description and default value generated.`, ); console.log(`File: ${settingsReadmeFileUri}`); @@ -178,7 +178,7 @@ export function structureSettings(settingsInDotNotation) { // group the array elements based on their parent key const arrayObjFinal = _.groupBy( makeSettingsUnique(objWithArrayValues), - (obj) => obj.parent + (obj) => obj.parent, ); // add them back to the settingsArray with appropriate structure and value From ec32b6341aa4a99d355425294dc559a5791e25c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 17:39:16 +0100 Subject: [PATCH 429/558] Bump yamllint from 1.27.1 to 1.28.0 in /.config (#435) Bumps [yamllint](https://github.com/adrienverge/yamllint) from 1.27.1 to 1.28.0. - [Release notes](https://github.com/adrienverge/yamllint/releases) - [Changelog](https://github.com/adrienverge/yamllint/blob/master/CHANGELOG.rst) - [Commits](https://github.com/adrienverge/yamllint/compare/v1.27.1...v1.28.0) --- updated-dependencies: - dependency-name: yamllint dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 61217b2d6..289ecf28c 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -62,6 +62,7 @@ requests==2.27.1 resolvelib==0.5.4 rich==12.0.0 ruamel-yaml==0.17.21 +ruamel-yaml-clib==0.2.6 setuptools-scm==6.4.2 six==1.16.0 snowballstemmer==2.2.0 @@ -88,7 +89,7 @@ virtualenv==20.13.3 wcmatch==8.3 wheel==0.37.1 wrapt==1.14.1 -yamllint==1.27.1 +yamllint==1.28.0 # The following packages are considered to be unsafe in a requirements file: # pip From 3e2f5a9c65adc0f513a503696a4acb60d1f420cb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 17:39:29 +0100 Subject: [PATCH 430/558] Bump ansible-core from 2.13.3 to 2.13.4 in /.config (#436) Bumps [ansible-core](https://github.com/ansible/ansible) from 2.13.3 to 2.13.4. - [Release notes](https://github.com/ansible/ansible/releases) - [Commits](https://github.com/ansible/ansible/compare/v2.13.3...v2.13.4) --- updated-dependencies: - dependency-name: ansible-core dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 289ecf28c..8a94b2846 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,6 +1,6 @@ alabaster==0.7.12 ansible-compat==2.2.0 -ansible-core==2.13.3 +ansible-core==2.13.4 ansible-lint==6.3.0 ansible-pygments==0.1.1 astroid==2.11.6 From 6ad8981cb78828c28695feb702e7688bac49fffb Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Wed, 21 Sep 2022 16:48:25 +0530 Subject: [PATCH 431/558] Fix missing ansible-lint warning (#438) * avoid treating ansible-lint warnings as errors * fix linting --- src/utils/getAnsibleMetaData.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/getAnsibleMetaData.ts b/src/utils/getAnsibleMetaData.ts index 07cb19840..50ed8be47 100644 --- a/src/utils/getAnsibleMetaData.ts +++ b/src/utils/getAnsibleMetaData.ts @@ -51,9 +51,9 @@ export async function getResultsThroughCommandRunner(cmd, arg) { if (result.stderr) { console.log( - `cmd '${cmd} ${arg}' has the following error: ${result.stderr}`, + `cmd '${cmd} ${arg}' has the following error/warning: ${result.stderr}`, ); - return undefined; + return result; } } catch (error) { console.log( From e080eb16a9fb630c48156bccf04a3c9fe5ff992d Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Thu, 22 Sep 2022 18:07:18 +0530 Subject: [PATCH 432/558] Fix 'handlers' keyword syntax highlighting and auto-completion (#440) * add 'handlers' to the tasksKey regex * add 'handlers' to the tasksKey regex * add listen as task keyword * fix linting --- src/utils/ansible.ts | 8 ++++++++ src/utils/yaml.ts | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/utils/ansible.ts b/src/utils/ansible.ts index dfe43f363..00b4a76db 100644 --- a/src/utils/ansible.ts +++ b/src/utils/ansible.ts @@ -698,6 +698,14 @@ taskKeywords.set( "Conditional expression, determines if an iteration of a task is run or not.", ); +taskKeywords.set( + "listen", + `Allows handlers to listen on topics that can group multiple handlers. + + NOTE: + Applies only to handlers. See [listen](https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#handlers-running-when-notified)`, +); + export const playExclusiveKeywords = new Map( [...playKeywords].filter( ([k]) => diff --git a/src/utils/yaml.ts b/src/utils/yaml.ts index 954ebd504..2f4d22dde 100644 --- a/src/utils/yaml.ts +++ b/src/utils/yaml.ts @@ -207,7 +207,8 @@ export function getPathAtOffset( return null; } -export const tasksKey = /^(tasks|pre_tasks|post_tasks|block|rescue|always)$/; +export const tasksKey = + /^(tasks|pre_tasks|post_tasks|block|rescue|always|handlers)$/; /** * Determines whether the path points at a parameter key of an Ansible task. From 0b20ec2e7eca96f4c13933cfe8987d05ce419c9d Mon Sep 17 00:00:00 2001 From: ansibot Date: Thu, 22 Sep 2022 15:24:36 +0200 Subject: [PATCH 433/558] Release v0.10.2 (#441) ## v0.10.2 ### Bugfixes - Fix 'handlers' keyword syntax highlighting and auto-completion (#440) @priyamsahoo - Fix missing ansible-lint warning (#438) @priyamsahoo - Replace `python` with `python3` in command execution (#430) @priyamsahoo Co-authored-by: Ansible DevTools --- CHANGELOG.md | 9 +++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91c64f3ad..a7ee03d8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,15 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v0.10.2 + +### Bugfixes + +- Fix 'handlers' keyword syntax highlighting and auto-completion (#440) + @priyamsahoo +- Fix missing ansible-lint warning (#438) @priyamsahoo +- Replace `python` with `python3` in command execution (#430) @priyamsahoo + ## v0.10.1 ### Bugfixes diff --git a/package-lock.json b/package-lock.json index 4b78395de..5d81f4dd0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.10.1", + "version": "0.10.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.10.1", + "version": "0.10.2", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 7afedaba1..db03ca7ae 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.10.1", + "version": "0.10.2", "contributors": [ { "name": "Tomasz Maciążek", From f35a2acc820f20ed49a4d70c546980a2cd6adc43 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 24 Sep 2022 09:22:57 +0530 Subject: [PATCH 434/558] Bump ansible-compat from 2.2.0 to 2.2.1 in /.config (#444) Bumps [ansible-compat](https://github.com/ansible-community/ansible-compat) from 2.2.0 to 2.2.1. - [Release notes](https://github.com/ansible-community/ansible-compat/releases) - [Commits](https://github.com/ansible-community/ansible-compat/compare/v2.2.0...v2.2.1) --- updated-dependencies: - dependency-name: ansible-compat dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 8a94b2846..e0df794be 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,5 +1,5 @@ alabaster==0.7.12 -ansible-compat==2.2.0 +ansible-compat==2.2.1 ansible-core==2.13.4 ansible-lint==6.3.0 ansible-pygments==0.1.1 From ca8271e1da760dae2eceacd97fc1d619910e1be5 Mon Sep 17 00:00:00 2001 From: Seena Fallah Date: Mon, 26 Sep 2022 20:11:20 +0200 Subject: [PATCH 435/558] pythonInfo: use python3 instead of python (#445) Follow up: #428 Fixes: #443 Signed-off-by: Seena Fallah Signed-off-by: Seena Fallah --- src/utils/getAnsibleMetaData.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/getAnsibleMetaData.ts b/src/utils/getAnsibleMetaData.ts index 50ed8be47..387ec5a2a 100644 --- a/src/utils/getAnsibleMetaData.ts +++ b/src/utils/getAnsibleMetaData.ts @@ -119,7 +119,7 @@ async function getPythonInfo() { pythonInfo["python version"] = pythonVersionResult.stdout.trim(); const pythonPathResult = await getResultsThroughCommandRunner( - "python", + "python3", '-c "import sys; print(sys.executable)"', ); pythonInfo["python location"] = pythonPathResult.stdout.trim(); From b0d5f5449067e3fe93dd28376cf2755b85949ea4 Mon Sep 17 00:00:00 2001 From: ansibot Date: Mon, 26 Sep 2022 20:35:25 +0200 Subject: [PATCH 436/558] Release v0.10.3 (#446) ## v0.10.3 ### Bugfixes - pythonInfo: use python3 instead of python (#445) @clwluvw Co-authored-by: Ansible DevTools --- CHANGELOG.md | 6 ++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7ee03d8c..fdf50124a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,12 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v0.10.3 + +### Bugfixes + +- pythonInfo: use python3 instead of python (#445) @clwluvw + ## v0.10.2 ### Bugfixes diff --git a/package-lock.json b/package-lock.json index 5d81f4dd0..15245a9a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.10.2", + "version": "0.10.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.10.2", + "version": "0.10.3", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index db03ca7ae..166765d8a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.10.2", + "version": "0.10.3", "contributors": [ { "name": "Tomasz Maciążek", From c4f80b296384af69fda2df1b9f44827f51c81f14 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Mon, 3 Oct 2022 16:16:25 +0530 Subject: [PATCH 437/558] Update settings to disable validation (#448) * add setting to disable validation * update tests with new settings * update settings.md * fix linting * remove commented code --- docs/settings.md | 53 +++-- src/interfaces/extensionSettings.ts | 55 +++-- src/providers/validationProvider.ts | 53 +++-- src/services/ansibleLint.ts | 171 +++++++------- src/services/settingsManager.ts | 34 ++- src/utils/execPath.ts | 2 +- test/providers/completionProvider.test.ts | 2 +- test/providers/settingsManager.test.ts | 8 +- test/providers/validationProvider.test.ts | 270 +++++++++++----------- 9 files changed, 334 insertions(+), 314 deletions(-) diff --git a/docs/settings.md b/docs/settings.md index 412431751..960484bfa 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -14,21 +14,6 @@ Toggle usage of fully qualified collection names (FQCN) when inserting module na _default value: `true`_ -- **ansible.ansibleLint.enabled**: -Toggle usage of ansible-lint \ -_default value: -`true`_ - -- **ansible.ansibleLint.path**: -Path to the ansible-lint executable \ -_default value: -`ansible-lint`_ - -- **ansible.ansibleLint.arguments**: -Optional command line arguments to be appended to ansible-lint invocation \ -_default value: -`""`_ - - **ansible.python.interpreterPath**: Path to the python/python3 executable. This settings may be used to make the extension work with ansible and ansible-lint installations in a python virtual environment \ _default value: @@ -68,6 +53,16 @@ _default value: Extra parameters passed to the container engine command example: '--net=host' \ _default value: `""`_ +- **ansible.executionEnvironment.volumeMounts**: + - **src**: The name of the local volume or path to be mounted within execution environment. \ + _default value: +`""`_ + - **dest**: The path where the file or directory are mounted in the container. \ + _default value: +`""`_ + - **options**: The field is optional, and is a comma-separated list of options, such as ro,Z \ + _default value: +`""`_ - **ansible.completion.provideRedirectModules**: Toggle redirected module provider when completing modules \ @@ -79,14 +74,22 @@ Toggle alias provider when completing module options \ _default value: `true`_ -- **ansible.executionEnvironment.volumeMounts**: - - **src**: The name of the local volume or path to be mounted within execution environment. \ - _default value: -`""`_ - - **dest**: The path where the file or directory are mounted in the container. \ - _default value: -`""`_ - - **options**: The field is optional, and is a comma-separated list of options, such as ro,Z \ - _default value: -`""`_ +- **ansible.validation.enabled**: +Toggle validation provider. If enabled and ansible-lint is disabled, validation falls back to ansible-playbook --syntax-check \ +_default value: +`true`_ +- **ansible.validation.lint.enabled**: +Toggle usage of ansible-lint \ +_default value: +`true`_ + +- **ansible.validation.lint.path**: +Path to the ansible-lint executable \ +_default value: +`ansible-lint`_ + +- **ansible.validation.lint.arguments**: +Optional command line arguments to be appended to ansible-lint invocation \ +_default value: +`""`_ diff --git a/src/interfaces/extensionSettings.ts b/src/interfaces/extensionSettings.ts index e7dd1b577..37c5b35a9 100644 --- a/src/interfaces/extensionSettings.ts +++ b/src/interfaces/extensionSettings.ts @@ -11,19 +11,25 @@ export type IPullPolicy = "always" | "missing" | "never" | "tag"; export interface ExtensionSettingsWithDescription { ansible: AnsibleSettingsWithDescription; - ansibleLint: AnsibleLintSettingsWithDescription; completion: CompletionSettingsWithDescription; + validation: ValidationSettingsWithDescription; executionEnvironment: ExecutionEnvironmentSettingsWithDescription; python: PythonSettingsWithDescription; } export interface ExtensionSettings { - ansible: { path: string; useFullyQualifiedCollectionNames: boolean }; - ansibleLint: { enabled: boolean; path: string; arguments: string }; + ansible: { + path: string; + useFullyQualifiedCollectionNames: boolean; + }; completion: { provideRedirectModules: boolean; provideModuleOptionAliases: boolean; }; + validation: { + enabled: boolean; + lint: { enabled: boolean; path: string; arguments: string }; + }; executionEnvironment: { enabled: boolean; containerEngine: IContainerEngine; @@ -62,6 +68,7 @@ export interface IVolumeMounts { dest: string; options: string | undefined; } + /** * Interface for ansible settings */ @@ -76,24 +83,6 @@ interface AnsibleSettingsWithDescription { }; } -/** - * Interface for ansible lint settings - */ -interface AnsibleLintSettingsWithDescription { - enabled: { - default: boolean; - description: string; - }; - path: { - default: string; - description: string; - }; - arguments: { - default: string; - description: string; - }; -} - /** * Interface for python settings */ @@ -121,3 +110,27 @@ interface CompletionSettingsWithDescription { description: string; }; } + +/** + * Interface for validation settings + */ +interface ValidationSettingsWithDescription { + enabled: { + default: boolean; + description: string; + }; + lint: { + enabled: { + default: boolean; + description: string; + }; + path: { + default: string; + description: string; + }; + arguments: { + default: string; + description: string; + }; + }; +} diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts index ee2034221..b87498254 100644 --- a/src/providers/validationProvider.ts +++ b/src/providers/validationProvider.ts @@ -38,40 +38,49 @@ export async function doValidate( // full validation with ansible-lint or ansible syntax-check (if ansible-lint is not installed or disabled) const settings = await context.documentSettings.get(textDocument.uri); - const commandRunner = new CommandRunner(connection, context, settings); - const lintExecutable = settings.executionEnvironment.enabled - ? "ansible-lint" - : settings.ansibleLint.path; - const lintAvailability = await commandRunner.getExecutablePath( - lintExecutable, - ); - console.debug("Path for lint: ", lintAvailability); + if (!settings.validation.enabled) { + console.log("Validation disabled"); - if (lintAvailability) { - console.debug("Validating using ansible-lint"); - diagnosticsByFile = await context.ansibleLint.doValidate(textDocument); + // this is done to remove the cache as well + const blankDiagnostics = new Map(); + blankDiagnostics.set(textDocument.uri, []); + validationManager.processDiagnostics(textDocument.uri, blankDiagnostics); + return blankDiagnostics; } - if (!diagnosticsByFile || !lintAvailability || diagnosticsByFile === -1) { - // Notifying the user about the failed ansible-lint command and falling back to ansible syntax-check in this scenario - if (diagnosticsByFile === -1) { - console.debug( - "Ansible-lint command execution failed. Falling back to ansible syntax-check", - ); - connection?.window.showInformationMessage( - "Falling back to ansible syntax-check.", + // validation using ansible-lint + if (settings.validation.lint.enabled) { + const commandRunner = new CommandRunner(connection, context, settings); + const lintExecutable = settings.executionEnvironment.enabled + ? "ansible-lint" + : settings.validation.lint.path; + const lintAvailability = await commandRunner.getExecutablePath( + lintExecutable, + ); + console.debug("Path for lint: ", lintAvailability); + + if (lintAvailability) { + console.debug("Validating using ansible-lint"); + diagnosticsByFile = await context.ansibleLint.doValidate(textDocument); + } else { + connection?.window.showErrorMessage( + "Ansible-lint is not available. Kindly check the path or disable validation using ansible-lint", ); } + } + + // validate using ansible-playbook --syntax-check + else { console.debug("Validating using ansible syntax-check"); if (isPlaybook(textDocument)) { - console.log("is playbook..."); + console.debug("playbook file"); diagnosticsByFile = await context.ansiblePlaybook.doValidate( textDocument, ); } else { - console.log("not a playbook..."); - diagnosticsByFile = new Map(); + console.debug("non-playbook file"); + diagnosticsByFile = new Map(); } } diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts index 20e172a75..658060b33 100644 --- a/src/services/ansibleLint.ts +++ b/src/services/ansibleLint.ts @@ -49,119 +49,110 @@ export class AnsibleLint { */ public async doValidate( textDocument: TextDocument, - ): Promise | -1> { + ): Promise> { let diagnostics: Map = new Map(); const workingDirectory = URI.parse(this.context.workspaceFolder.uri).path; const mountPaths = new Set([workingDirectory]); const settings = await this.context.documentSettings.get(textDocument.uri); - if (!settings.ansibleLint.enabled) { - console.debug( - "Ansible-lint is disabled. Falling back to ansible syntax-check", - ); - return; - } else { - let linterArguments = settings.ansibleLint.arguments ?? ""; + let linterArguments = settings.validation.lint.arguments ?? ""; - // Determine linter config file - let ansibleLintConfigPath = linterArguments.match( - /(?:^|\s)-c\s*(?[\s'"])(?.+?)(?:\k|$)/, - )?.groups?.conf; - if (!ansibleLintConfigPath) { - // Config file not provided in arguments -> search for one mimicking the - // way ansible-lint looks for it, going up the directory structure - const ansibleLintConfigFile = await this.findAnsibleLintConfigFile( - textDocument.uri, - ); - if (ansibleLintConfigFile) { - ansibleLintConfigPath = URI.parse(ansibleLintConfigFile).path; - linterArguments = `${linterArguments} -c "${ansibleLintConfigPath}"`; - mountPaths.add(path.dirname(ansibleLintConfigPath)); - } + // Determine linter config file + let ansibleLintConfigPath = linterArguments.match( + /(?:^|\s)-c\s*(?[\s'"])(?.+?)(?:\k|$)/, + )?.groups?.conf; + if (!ansibleLintConfigPath) { + // Config file not provided in arguments -> search for one mimicking the + // way ansible-lint looks for it, going up the directory structure + const ansibleLintConfigFile = await this.findAnsibleLintConfigFile( + textDocument.uri, + ); + if (ansibleLintConfigFile) { + ansibleLintConfigPath = URI.parse(ansibleLintConfigFile).path; + linterArguments = `${linterArguments} -c "${ansibleLintConfigPath}"`; + mountPaths.add(path.dirname(ansibleLintConfigPath)); } - linterArguments = `${linterArguments} --offline --nocolor -f codeclimate`; - - const docPath = URI.parse(textDocument.uri).path; - mountPaths.add(path.dirname(docPath)); + } + linterArguments = `${linterArguments} --offline --nocolor -f codeclimate`; - const progressTracker = this.useProgressTracker - ? await this.connection.window.createWorkDoneProgress() - : { - begin: () => {}, // eslint-disable-line @typescript-eslint/no-empty-function - done: () => {}, // eslint-disable-line @typescript-eslint/no-empty-function - }; + const docPath = URI.parse(textDocument.uri).path; + mountPaths.add(path.dirname(docPath)); - const ansibleLintConfigPromise = this.getAnsibleLintConfig( - workingDirectory, - ansibleLintConfigPath, - ); + const progressTracker = this.useProgressTracker + ? await this.connection.window.createWorkDoneProgress() + : { + begin: () => {}, // eslint-disable-line @typescript-eslint/no-empty-function + done: () => {}, // eslint-disable-line @typescript-eslint/no-empty-function + }; - progressTracker.begin("ansible-lint", undefined, "Processing files..."); + const ansibleLintConfigPromise = this.getAnsibleLintConfig( + workingDirectory, + ansibleLintConfigPath, + ); - const commandRunner = new CommandRunner( - this.connection, - this.context, - settings, - ); + progressTracker.begin("ansible-lint", undefined, "Processing files..."); - try { - // get Ansible configuration - const result = await commandRunner.runCommand( - "ansible-lint", - `${linterArguments} "${docPath}"`, - workingDirectory, - mountPaths, - ); + const commandRunner = new CommandRunner( + this.connection, + this.context, + settings, + ); - diagnostics = this.processReport( - result.stdout, - await ansibleLintConfigPromise, - workingDirectory, - ); + try { + // get Ansible configuration + const result = await commandRunner.runCommand( + "ansible-lint", + `${linterArguments} "${docPath}"`, + workingDirectory, + mountPaths, + ); - if (result.stderr) { - this.connection.console.info(`[ansible-lint] ${result.stderr}`); - } - } catch (error) { - if (error instanceof Error) { - const execError = error as ExecException & { - // according to the docs, these are always available - stdout: string; - stderr: string; - }; + diagnostics = this.processReport( + result.stdout, + await ansibleLintConfigPromise, + workingDirectory, + ); - if (execError.stdout) { - diagnostics = this.processReport( - execError.stdout, - await ansibleLintConfigPromise, - workingDirectory, - ); - } else { - if (execError.stderr) { - this.connection.console.info( - `[ansible-lint] ${execError.stderr}`, - ); - } + if (result.stderr) { + this.connection.console.info(`[ansible-lint] ${result.stderr}`); + } + } catch (error) { + if (error instanceof Error) { + const execError = error as ExecException & { + // according to the docs, these are always available + stdout: string; + stderr: string; + }; - progressTracker.done(); - this.connection.window.showErrorMessage(execError.message); - return -1; - } + if (execError.stdout) { + diagnostics = this.processReport( + execError.stdout, + await ansibleLintConfigPromise, + workingDirectory, + ); } else { - const exceptionString = `Exception in AnsibleLint service: ${JSON.stringify( - error, - )}`; + if (execError.stderr) { + this.connection.console.info(`[ansible-lint] ${execError.stderr}`); + } progressTracker.done(); - this.connection.console.error(exceptionString); - this.connection.window.showErrorMessage(exceptionString); - return -1; + this.connection.window.showErrorMessage(execError.message); + return; } - } + } else { + const exceptionString = `Exception in AnsibleLint service: ${JSON.stringify( + error, + )}`; - progressTracker.done(); + progressTracker.done(); + this.connection.console.error(exceptionString); + this.connection.window.showErrorMessage(exceptionString); + return; + } } + + progressTracker.done(); return diagnostics; } diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index fcb2506d6..5e011897b 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -29,18 +29,6 @@ export class SettingsManager { "Toggle usage of fully qualified collection names (FQCN) when inserting module names", }, }, - ansibleLint: { - enabled: { default: true, description: "Toggle usage of ansible-lint" }, - path: { - default: "ansible-lint", - description: "Path to the ansible-lint executable", - }, - arguments: { - default: "", - description: - "Optional command line arguments to be appended to ansible-lint invocation", - }, - }, python: { interpreterPath: { default: "", @@ -115,6 +103,28 @@ export class SettingsManager { description: "Toggle alias provider when completing module options", }, }, + validation: { + enabled: { + default: true, + description: + "Toggle validation provider. If enabled and ansible-lint is disabled, validation falls back to ansible-playbook --syntax-check", + }, + lint: { + enabled: { + default: true, + description: "Toggle usage of ansible-lint", + }, + path: { + default: "ansible-lint", + description: "Path to the ansible-lint executable", + }, + arguments: { + default: "", + description: + "Optional command line arguments to be appended to ansible-lint invocation", + }, + }, + }, }; // Structure the settings similar to the ExtensionSettings interface for usage in the code diff --git a/src/utils/execPath.ts b/src/utils/execPath.ts index 0707d945e..212a94582 100644 --- a/src/utils/execPath.ts +++ b/src/utils/execPath.ts @@ -13,6 +13,6 @@ export function getAnsibleCommandExecPath( settings: ExtensionSettings, ): string { return name === "ansible-lint" - ? settings.ansibleLint.path + ? settings.validation.lint.path : path.join(path.dirname(settings.ansible.path), name); } diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index 1f8244ee7..35980e84d 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -453,7 +453,7 @@ function testModuleNamesWithoutFQCN( it(`should provide completion for ${name}`, async function () { // Update setting to stop using FQCN for module names const docSettings = context.documentSettings.get(textDoc.uri); - const cachedDefaultSetting = (await docSettings).ansibleLint.enabled; + const cachedDefaultSetting = (await docSettings).validation.lint.enabled; (await docSettings).ansible.useFullyQualifiedCollectionNames = false; const actualCompletion = await doCompletion(textDoc, position, context); diff --git a/test/providers/settingsManager.test.ts b/test/providers/settingsManager.test.ts index 97d4c5fbd..0ba5385cf 100644 --- a/test/providers/settingsManager.test.ts +++ b/test/providers/settingsManager.test.ts @@ -39,17 +39,17 @@ describe("get()", () => { before(async () => { const workspaceManager = createTestWorkspaceManager(); simulateClientSettings(workspaceManager, { - ansibleLint: { enabled: false }, + validation: { lint: { enabled: false } }, }); context = workspaceManager.getContext(""); mergedSettings = await context.documentSettings.get(""); }); it("should return setting from client when defined", () => { - expect(mergedSettings.ansibleLint.enabled).to.equal(false); + expect(mergedSettings.validation.lint.enabled).to.equal(false); }); it("should return default value otherwise", () => { - expect(mergedSettings.ansibleLint.path).to.equal( - context.documentSettings.globalSettings.ansibleLint.path, + expect(mergedSettings.validation.lint.path).to.equal( + context.documentSettings.globalSettings.validation.lint.path, ); }); }); diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts index b6403997b..a619176e8 100644 --- a/test/providers/validationProvider.test.ts +++ b/test/providers/validationProvider.test.ts @@ -33,6 +33,7 @@ function assertValidateTests( context: WorkspaceFolderContext, validationManager: ValidationManager, textDoc: TextDocument, + validationEnabled: boolean, ) { tests.forEach((test) => { it(`should provide diagnostics for ${test.name}`, async function () { @@ -43,6 +44,11 @@ function assertValidateTests( context, ); + if (!validationEnabled) { + expect(actualDiagnostics.has(`file://${textDoc.uri}`)).to.be.false; + return; + } + if (test.diagnosticReport.length === 0) { expect(actualDiagnostics.has(`file://${textDoc.uri}`)).to.be.false; } else { @@ -68,6 +74,7 @@ function testAnsibleLintErrors( context: WorkspaceFolderContext, validationManager: ValidationManager, textDoc: TextDocument, + validationEnabled: boolean, ) { const tests = [ { @@ -124,13 +131,20 @@ function testAnsibleLintErrors( ], }, ]; - assertValidateTests(tests, context, validationManager, textDoc); + assertValidateTests( + tests, + context, + validationManager, + textDoc, + validationEnabled, + ); } function testAnsibleSyntaxCheckNoErrors( context: WorkspaceFolderContext, validationManager: ValidationManager, textDoc: TextDocument, + validationEnabled: boolean, ) { const tests = [ { @@ -138,13 +152,20 @@ function testAnsibleSyntaxCheckNoErrors( diagnosticReport: [], }, ]; - assertValidateTests(tests, context, validationManager, textDoc); + assertValidateTests( + tests, + context, + validationManager, + textDoc, + validationEnabled, + ); } function testAnsibleSyntaxCheckEmptyPlaybook( context: WorkspaceFolderContext, validationManager: ValidationManager, textDoc: TextDocument, + validationEnabled: boolean, ) { const tests = [ { @@ -152,13 +173,20 @@ function testAnsibleSyntaxCheckEmptyPlaybook( diagnosticReport: [], }, ]; - assertValidateTests(tests, context, validationManager, textDoc); + assertValidateTests( + tests, + context, + validationManager, + textDoc, + validationEnabled, + ); } function testAnsibleSyntaxCheckNoHost( context: WorkspaceFolderContext, validationManager: ValidationManager, textDoc: TextDocument, + validationEnabled: boolean, ) { const tests = [ { @@ -180,7 +208,13 @@ function testAnsibleSyntaxCheckNoHost( ], }, ]; - assertValidateTests(tests, context, validationManager, textDoc); + assertValidateTests( + tests, + context, + validationManager, + textDoc, + validationEnabled, + ); } function testInvalidYamlFile( @@ -286,7 +320,7 @@ describe("doValidate()", () => { await enableExecutionEnvironmentSettings(docSettings); }); - testAnsibleLintErrors(context, validationManager, textDoc); + testAnsibleLintErrors(context, validationManager, textDoc, true); after(async () => { setFixtureAnsibleCollectionPathEnv(); @@ -300,25 +334,30 @@ describe("doValidate()", () => { await disableExecutionEnvironmentSettings(docSettings); }); - testAnsibleLintErrors(context, validationManager, textDoc); + testAnsibleLintErrors(context, validationManager, textDoc, true); }); }); - describe("Diagnostics after falling back to --syntax-check due to change in settings", () => { + describe("Diagnostics using ansible-playbook --syntax-check", () => { describe("no specific ansible lint errors", () => { describe("With EE enabled @ee", () => { before(async () => { - (await docSettings).ansibleLint.enabled = false; + (await docSettings).validation.lint.enabled = false; setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); - testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); + testAnsibleSyntaxCheckNoErrors( + context, + validationManager, + textDoc, + true, + ); after(async () => { - (await docSettings).ansibleLint.enabled = true; + (await docSettings).validation.lint.enabled = true; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); @@ -326,15 +365,20 @@ describe("doValidate()", () => { describe("With EE disabled", () => { before(async () => { - (await docSettings).ansibleLint.enabled = false; + (await docSettings).validation.lint.enabled = false; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); - testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); + testAnsibleSyntaxCheckNoErrors( + context, + validationManager, + textDoc, + true, + ); }); after(async () => { - (await docSettings).ansibleLint.enabled = true; + (await docSettings).validation.lint.enabled = true; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); @@ -350,7 +394,7 @@ describe("doValidate()", () => { describe("With EE enabled @ee", () => { before(async () => { - (await docSettings).ansibleLint.enabled = false; + (await docSettings).validation.lint.enabled = false; setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible", ); @@ -361,10 +405,11 @@ describe("doValidate()", () => { context, validationManager, textDoc, + true, ); after(async () => { - (await docSettings).ansibleLint.enabled = true; + (await docSettings).validation.lint.enabled = true; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); @@ -372,7 +417,7 @@ describe("doValidate()", () => { describe("With EE disabled", () => { before(async () => { - (await docSettings).ansibleLint.enabled = false; + (await docSettings).validation.lint.enabled = false; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); @@ -381,100 +426,11 @@ describe("doValidate()", () => { context, validationManager, textDoc, + true, ); }); after(async () => { - (await docSettings).ansibleLint.enabled = true; - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); - }); - - describe("no host", () => { - fixtureFilePath = "diagnostics/noHost.yml"; - fixtureFileUri = resolveDocUri(fixtureFilePath); - context = workspaceManager.getContext(fixtureFileUri); - - textDoc = getDoc(fixtureFilePath); - docSettings = context.documentSettings.get(textDoc.uri); - - describe("With EE enabled @ee", () => { - before(async () => { - (await docSettings).ansibleLint.enabled = false; - setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible", - ); - await enableExecutionEnvironmentSettings(docSettings); - }); - - testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); - - after(async () => { - (await docSettings).ansibleLint.enabled = true; - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); - }); - - describe("With EE disabled", () => { - before(async () => { - (await docSettings).ansibleLint.enabled = false; - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); - - testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); - }); - after(async () => { - (await docSettings).ansibleLint.enabled = true; - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); - }); - }); - - describe("Diagnostics after falling back to --syntax-check due to unavailability of ansible-lint", () => { - describe("no specific ansible lint errors", () => { - fixtureFilePath = "diagnostics/lint_errors.yml"; - fixtureFileUri = resolveDocUri(fixtureFilePath); - context = workspaceManager.getContext(fixtureFileUri); - - textDoc = getDoc(fixtureFilePath); - docSettings = context.documentSettings.get(textDoc.uri); - - describe("With EE enabled @ee", () => { - before(async () => { - (await docSettings).ansibleLint.enabled = false; - (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; - setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible", - ); - await enableExecutionEnvironmentSettings(docSettings); - }); - - testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); - - after(async () => { - (await docSettings).ansibleLint.enabled = true; - (await docSettings).ansibleLint.path = "ansible-lint"; - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); - }); - - describe("With EE disabled", () => { - before(async () => { - (await docSettings).ansibleLint.enabled = false; - (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); - - testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); - }); - after(async () => { - (await docSettings).ansibleLint.enabled = true; - (await docSettings).ansibleLint.path = "ansible-lint"; + (await docSettings).validation.lint.enabled = true; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); @@ -490,19 +446,22 @@ describe("doValidate()", () => { describe("With EE enabled @ee", () => { before(async () => { - (await docSettings).ansibleLint.enabled = false; - (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; + (await docSettings).validation.lint.enabled = false; setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); - testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); + testAnsibleSyntaxCheckNoHost( + context, + validationManager, + textDoc, + true, + ); after(async () => { - (await docSettings).ansibleLint.enabled = true; - (await docSettings).ansibleLint.path = "ansible-lint"; + (await docSettings).validation.lint.enabled = true; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); @@ -510,24 +469,27 @@ describe("doValidate()", () => { describe("With EE disabled", () => { before(async () => { - (await docSettings).ansibleLint.enabled = false; - (await docSettings).ansibleLint.path = "invalid-ansible-lint-path"; + (await docSettings).validation.lint.enabled = false; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); - testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); + testAnsibleSyntaxCheckNoHost( + context, + validationManager, + textDoc, + true, + ); }); after(async () => { - (await docSettings).ansibleLint.enabled = true; - (await docSettings).ansibleLint.path = "ansible-lint"; + (await docSettings).validation.lint.enabled = true; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); }); }); - describe("Diagnostics after falling back to --syntax-check due to failure in execution of ansible-lint command", () => { + describe("Diagnostics when validation is disabled", () => { describe("no specific ansible lint errors", () => { fixtureFilePath = "diagnostics/lint_errors.yml"; fixtureFileUri = resolveDocUri(fixtureFilePath); @@ -538,19 +500,27 @@ describe("doValidate()", () => { describe("With EE enabled @ee", () => { before(async () => { - (await docSettings).ansibleLint.enabled = false; - (await docSettings).ansibleLint.arguments = "-f invalid_argument"; + // (await docSettings).validation.lint.enabled = false; + // (await docSettings).validation.lint.path = + // "invalid-ansible-lint-path"; + (await docSettings).validation.enabled = false; setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); - testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); + testAnsibleSyntaxCheckNoErrors( + context, + validationManager, + textDoc, + false, + ); after(async () => { - (await docSettings).ansibleLint.enabled = true; - (await docSettings).ansibleLint.arguments = undefined; + // (await docSettings).validation.lint.enabled = true; + // (await docSettings).validation.lint.path = "ansible-lint"; + (await docSettings).validation.enabled = true; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); @@ -558,17 +528,25 @@ describe("doValidate()", () => { describe("With EE disabled", () => { before(async () => { - (await docSettings).ansibleLint.enabled = false; - (await docSettings).ansibleLint.arguments = "-f invalid_argument"; + // (await docSettings).validation.lint.enabled = false; + // (await docSettings).validation.lint.path = + // "invalid-ansible-lint-path"; + (await docSettings).validation.enabled = false; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); - testAnsibleSyntaxCheckNoErrors(context, validationManager, textDoc); + testAnsibleSyntaxCheckNoErrors( + context, + validationManager, + textDoc, + false, + ); }); after(async () => { - (await docSettings).ansibleLint.enabled = true; - (await docSettings).ansibleLint.arguments = undefined; + // (await docSettings).validation.lint.enabled = true; + // (await docSettings).validation.lint.path = "ansible-lint"; + (await docSettings).validation.enabled = true; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); @@ -584,19 +562,27 @@ describe("doValidate()", () => { describe("With EE enabled @ee", () => { before(async () => { - (await docSettings).ansibleLint.enabled = false; - (await docSettings).ansibleLint.arguments = "-f invalid_argument"; + // (await docSettings).validation.lint.enabled = false; + // (await docSettings).validation.lint.path = + // "invalid-ansible-lint-path"; + (await docSettings).validation.enabled = false; setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); }); - testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); + testAnsibleSyntaxCheckNoHost( + context, + validationManager, + textDoc, + false, + ); after(async () => { - (await docSettings).ansibleLint.enabled = true; - (await docSettings).ansibleLint.arguments = undefined; + // (await docSettings).validation.lint.enabled = true; + // (await docSettings).validation.lint.path = "ansible-lint"; + (await docSettings).validation.enabled = true; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); @@ -604,17 +590,25 @@ describe("doValidate()", () => { describe("With EE disabled", () => { before(async () => { - (await docSettings).ansibleLint.enabled = false; - (await docSettings).ansibleLint.arguments = "-f invalid_argument"; + // (await docSettings).validation.lint.enabled = false; + // (await docSettings).validation.lint.path = + // "invalid-ansible-lint-path"; + (await docSettings).validation.enabled = false; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); - testAnsibleSyntaxCheckNoHost(context, validationManager, textDoc); + testAnsibleSyntaxCheckNoHost( + context, + validationManager, + textDoc, + false, + ); }); after(async () => { - (await docSettings).ansibleLint.enabled = true; - (await docSettings).ansibleLint.arguments = undefined; + // (await docSettings).validation.lint.enabled = true; + // (await docSettings).validation.lint.path = "ansible-lint"; + (await docSettings).validation.enabled = true; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); From 5b965f9b7ca903202f70b7059d3f957ad69c2ffc Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 4 Oct 2022 09:37:27 +0100 Subject: [PATCH 438/558] Minor build script fixes (#453) --- .pre-commit-config.yaml | 4 ++-- Taskfile.yml | 1 + tools/test-setup.sh | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b655266b2..1687cf0c5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.8.1 + rev: v6.12.0 hooks: - id: cspell name: Spell check with cspell @@ -98,7 +98,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.23.0 + rev: v8.24.0 hooks: - id: eslint args: diff --git a/Taskfile.yml b/Taskfile.yml index 10381c624..468dfba24 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -63,6 +63,7 @@ tasks: - .config/requirements.* - setup.cfg - tools/test-setup.sh + - .config/ generates: - out/log/manifest.yml build: diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 1f021ca64..9bd6fcc5b 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -166,7 +166,7 @@ fi # shellcheck disable=SC1091 . "${VIRTUAL_ENV}/bin/activate" -python3 -m pip install -q -U pip +python3 -m pip install -q -U pip pip-tools if [[ $(uname || true) != MINGW* ]]; then # if we are not on pure Windows python3 -m pip install -q \ From a086ee67616ac00c708c11da154a009bedb8cb16 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 4 Oct 2022 11:22:26 +0100 Subject: [PATCH 439/558] Update ansible and ansible-lint (#454) Also configures dependency for ansible-lint to enable detection of pre-releases. --- .config/requirements.in | 6 ++++-- .config/requirements.txt | 10 +++------- tools/test-setup.sh | 4 ++-- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/.config/requirements.in b/.config/requirements.in index dfb39eddc..d95bd067e 100644 --- a/.config/requirements.in +++ b/.config/requirements.in @@ -1,5 +1,7 @@ # testing and linting -ansible-lint>=6.0.2 +ansible-core>=2.13 +ansible-lint>=6.8.0.dev0 +# end-of dependencies for which we allow pre-releases click lxml pip-tools @@ -11,7 +13,7 @@ mypy # vscode integration pylint # vscode integration # docs linkify-it-py>=2.0.0 # myst-parser extra -MarkupSafe<2.1 # see https://github.com/pallets/jinja/issues/1585 +MarkupSafe myst-parser >= 0.18.0 setuptools-scm >= 6.0.1 Sphinx >= 5.0.2 diff --git a/.config/requirements.txt b/.config/requirements.txt index e0df794be..98b0cb090 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,11 +1,12 @@ alabaster==0.7.12 ansible-compat==2.2.1 ansible-core==2.13.4 -ansible-lint==6.3.0 +ansible-lint==6.8.0b3 ansible-pygments==0.1.1 astroid==2.11.6 attrs==21.4.0 babel==2.9.1 +black==22.8.0 bracex==2.2.1 certifi==2021.10.8 cffi==1.15.0 @@ -23,10 +24,9 @@ flake8==4.0.1 identify==2.4.11 idna==3.3 imagesize==1.3.0 -iniconfig==1.1.1 isort==5.10.1 jinja2==3.1.2 -jsonschema==4.6.0 +jsonschema==4.16.0 lazy-object-proxy==1.7.1 linkify-it-py==2.0.0 lxml==4.9.1 @@ -45,9 +45,7 @@ pbr==5.8.1 pep517==0.12.0 pip-tools==6.6.2 platformdirs==2.5.1 -pluggy==1.0.0 pre-commit==2.20.0 -py==1.11.0 pycodestyle==2.8.0 pycparser==2.21 pyflakes==2.4.0 @@ -55,14 +53,12 @@ pygments==2.11.2 pylint==2.14.2 pyparsing==3.0.9 pyrsistent==0.18.1 -pytest==7.1.2 pytz==2022.1 pyyaml==6.0 requests==2.27.1 resolvelib==0.5.4 rich==12.0.0 ruamel-yaml==0.17.21 -ruamel-yaml-clib==0.2.6 setuptools-scm==6.4.2 six==1.16.0 snowballstemmer==2.2.0 diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 9bd6fcc5b..dbc0b3b5f 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -166,10 +166,10 @@ fi # shellcheck disable=SC1091 . "${VIRTUAL_ENV}/bin/activate" -python3 -m pip install -q -U pip pip-tools +python3 -m pip install -q -U pip pip-tools setuptools wheel if [[ $(uname || true) != MINGW* ]]; then # if we are not on pure Windows - python3 -m pip install -q \ + python3 -m pip install \ -c .config/requirements.txt -r .config/requirements.in fi From 30fd958beb4cd8f625fd5f9302390ede55011155 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Tue, 4 Oct 2022 20:17:35 +0530 Subject: [PATCH 440/558] Fix bug related to diagnostics caching when validation is disabled (#451) * fix diagnostics caching related bug * update tests for latest ansible-lint diagnostics Co-authored-by: Sorin Sbarnea --- src/providers/validationProvider.ts | 1 + test/providers/validationProvider.test.ts | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts index b87498254..36e0daf3a 100644 --- a/src/providers/validationProvider.ts +++ b/src/providers/validationProvider.ts @@ -45,6 +45,7 @@ export async function doValidate( const blankDiagnostics = new Map(); blankDiagnostics.set(textDocument.uri, []); validationManager.processDiagnostics(textDocument.uri, blankDiagnostics); + validationManager.cacheDiagnostics(textDocument.uri, blankDiagnostics); return blankDiagnostics; } diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts index a619176e8..f896f7a95 100644 --- a/test/providers/validationProvider.test.ts +++ b/test/providers/validationProvider.test.ts @@ -106,7 +106,7 @@ function testAnsibleLintErrors( }, { severity: 1, - message: "Use FQCN for builtin actions", + message: "Use FQCN for builtin module actions", range: { start: { line: 14, character: 0 } as Position, end: { @@ -128,6 +128,18 @@ function testAnsibleLintErrors( }, source: "Ansible", }, + { + severity: 1, + message: "Avoid using free-form", + range: { + start: { line: 14, character: 0 } as Position, + end: { + line: 14, + character: integer.MAX_VALUE, + } as Position, + }, + source: "Ansible", + }, ], }, ]; From 3d2e10f81378124c0a4684b79b65ec0cd274f236 Mon Sep 17 00:00:00 2001 From: ansibot Date: Tue, 4 Oct 2022 16:55:06 +0200 Subject: [PATCH 441/558] Release v1.0.0 (#456) ## v1.0.0 ### Minor Changes - Update settings to disable validation (#448) @priyamsahoo ### Bugfixes - Fix bug related to diagnostics caching when validation is disabled (#451) @priyamsahoo Co-authored-by: Ansible DevTools --- CHANGELOG.md | 11 +++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fdf50124a..51d3bebcb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,17 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v1.0.0 + +### Minor Changes + +- Update settings to disable validation (#448) @priyamsahoo + +### Bugfixes + +- Fix bug related to diagnostics caching when validation is disabled (#451) + @priyamsahoo + ## v0.10.3 ### Bugfixes diff --git a/package-lock.json b/package-lock.json index 15245a9a0..d13e1f83b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "0.10.3", + "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "0.10.3", + "version": "1.0.0", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 166765d8a..3b9ee43f6 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "0.10.3", + "version": "1.0.0", "contributors": [ { "name": "Tomasz Maciążek", From 5f64ac649877c8ee678f8ad91e96df1f31a23cf0 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 4 Oct 2022 17:12:08 +0100 Subject: [PATCH 442/558] Update dependencies (#458) --- package-lock.json | 891 ++++++++++++++++++++++++++-------------------- package.json | 20 +- 2 files changed, 509 insertions(+), 402 deletions(-) diff --git a/package-lock.json b/package-lock.json index d13e1f83b..32e4abe75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,27 +24,27 @@ }, "devDependencies": { "@types/chai": "^4.3.3", - "@types/glob": "^7.2.0", + "@types/glob": "^8.0.0", "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.184", - "@types/mocha": "^9.1.1", - "@types/node": "^18.7.11", + "@types/lodash": "^4.14.186", + "@types/mocha": "^10.0.0", + "@types/node": "^18.8.1", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.70.0", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", + "@types/vscode": "^1.71.0", + "@typescript-eslint/eslint-plugin": "^5.39.0", + "@typescript-eslint/parser": "^5.39.0", "chai": "^4.3.6", - "eslint": "^8.22.0", + "eslint": "^8.24.0", "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", "mocha": "^10.0.0", - "npm-check-updates": "^16.0.5", + "npm-check-updates": "^16.3.8", "nyc": "^15.1.0", "prettier": "^2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1", - "typescript": "^4.7.4" + "typescript": "^4.8.4" }, "engines": { "node": ">=12.0", @@ -477,14 +477,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", + "espree": "^9.4.0", "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -494,6 +494,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@flatten-js/interval-tree": { @@ -508,9 +511,9 @@ "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -531,6 +534,19 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -728,9 +744,9 @@ } }, "node_modules/@npmcli/fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", - "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dev": true, "dependencies": { "@gar/promisify": "^1.1.3", @@ -741,9 +757,9 @@ } }, "node_modules/@npmcli/git": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", - "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", + "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", "dev": true, "dependencies": { "@npmcli/promise-spawn": "^3.0.0", @@ -777,9 +793,9 @@ } }, "node_modules/@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", "dev": true, "dependencies": { "mkdirp": "^1.0.4", @@ -811,15 +827,16 @@ } }, "node_modules/@npmcli/run-script": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.3.tgz", - "integrity": "sha512-xb47c2KMkn6ERw2AwPPGKIITbWoXOT1yDV5rU3SYeC1vksYOodbgN0pnOptIVnRgS2e9G8R7BVDVm8lWp92unQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", + "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3" + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" @@ -926,9 +943,9 @@ "dev": true }, "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", + "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", "dev": true, "dependencies": { "@types/minimatch": "*", @@ -969,9 +986,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.14.184", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", - "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==", + "version": "4.14.186", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", + "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", "dev": true }, "node_modules/@types/minimatch": { @@ -981,15 +998,15 @@ "dev": true }, "node_modules/@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-rADY+HtTOA52l9VZWtgQfn4p+UDVM2eDVkMZT1I6syp0YKxW2F9v+0pbRZLsvskhQv/vMb6ZfCay81GHbz5SHg==", "dev": true }, "node_modules/@types/node": { - "version": "18.7.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.11.tgz", - "integrity": "sha512-KZhFpSLlmK/sdocfSAjqPETTMd0ug6HIMIAwkwUpU79olnZdQtMxpQP+G1wDzCH7na+FltSIhbaZuKdwZ8RDrw==", + "version": "18.8.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.1.tgz", + "integrity": "sha512-vuYaNuEIbOYLTLUAJh50ezEbvxrD43iby+lpUA2aa148Nh5kX/AVO/9m1Ahmbux2iU5uxJTNF9g2Y+31uml7RQ==", "dev": true }, "node_modules/@types/responselike": { @@ -1008,22 +1025,21 @@ "dev": true }, "node_modules/@types/vscode": { - "version": "1.70.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.70.0.tgz", - "integrity": "sha512-3/9Fz0F2eBgwciazc94Ien+9u1elnjFg9YAhvAb3qDy/WeFWD9VrOPU7CIytryOVUdbxus8uzL4VZYONA0gDtA==", + "version": "1.71.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.71.0.tgz", + "integrity": "sha512-nB50bBC9H/x2CpwW9FzRRRDrTZ7G0/POttJojvN/LiVfzTGfLyQIje1L1QRMdFXK9G41k5UJN/1B9S4of7CSzA==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.34.0.tgz", - "integrity": "sha512-eRfPPcasO39iwjlUAMtjeueRGuIrW3TQ9WseIDl7i5UWuFbf83yYaU7YPs4j8+4CxUMIsj1k+4kV+E+G+6ypDQ==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz", + "integrity": "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.34.0", - "@typescript-eslint/type-utils": "5.34.0", - "@typescript-eslint/utils": "5.34.0", + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/type-utils": "5.39.0", + "@typescript-eslint/utils": "5.39.0", "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", "regexpp": "^3.2.0", "semver": "^7.3.7", @@ -1047,14 +1063,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.34.0.tgz", - "integrity": "sha512-SZ3NEnK4usd2CXkoV3jPa/vo1mWX1fqRyIVUQZR4As1vyp4fneknBNJj+OFtV8WAVgGf+rOHMSqQbs2Qn3nFZQ==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz", + "integrity": "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.34.0", - "@typescript-eslint/types": "5.34.0", - "@typescript-eslint/typescript-estree": "5.34.0", + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/typescript-estree": "5.39.0", "debug": "^4.3.4" }, "engines": { @@ -1074,13 +1090,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.34.0.tgz", - "integrity": "sha512-HNvASMQlah5RsBW6L6c7IJ0vsm+8Sope/wu5sEAf7joJYWNb1LDbJipzmdhdUOnfrDFE6LR1j57x1EYVxrY4ow==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz", + "integrity": "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.34.0", - "@typescript-eslint/visitor-keys": "5.34.0" + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/visitor-keys": "5.39.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1091,12 +1107,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.34.0.tgz", - "integrity": "sha512-Pxlno9bjsQ7hs1pdWRUv9aJijGYPYsHpwMeCQ/Inavhym3/XaKt1ZKAA8FIw4odTBfowBdZJDMxf2aavyMDkLg==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz", + "integrity": "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.34.0", + "@typescript-eslint/typescript-estree": "5.39.0", + "@typescript-eslint/utils": "5.39.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1117,9 +1134,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.34.0.tgz", - "integrity": "sha512-49fm3xbbUPuzBIOcy2CDpYWqy/X7VBkxVN+DC21e0zIm3+61Z0NZi6J9mqPmSW1BDVk9FIOvuCFyUPjXz93sjA==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz", + "integrity": "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1130,13 +1147,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.34.0.tgz", - "integrity": "sha512-mXHAqapJJDVzxauEkfJI96j3D10sd567LlqroyCeJaHnu42sDbjxotGb3XFtGPYKPD9IyLjhsoULML1oI3M86A==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz", + "integrity": "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.34.0", - "@typescript-eslint/visitor-keys": "5.34.0", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/visitor-keys": "5.39.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1157,15 +1174,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.34.0.tgz", - "integrity": "sha512-kWRYybU4Rn++7lm9yu8pbuydRyQsHRoBDIo11k7eqBWTldN4xUdVUMCsHBiE7aoEkFzrUEaZy3iH477vr4xHAQ==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz", + "integrity": "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.34.0", - "@typescript-eslint/types": "5.34.0", - "@typescript-eslint/typescript-estree": "5.34.0", + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/typescript-estree": "5.39.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -1181,12 +1198,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.34.0.tgz", - "integrity": "sha512-O1moYjOSrab0a2fUvFpsJe0QHtvTC+cR+ovYpgKrAVXzqQyc74mv76TgY6z+aEtjQE2vgZux3CQVtGryqdcOAw==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz", + "integrity": "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/types": "5.39.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1374,16 +1391,16 @@ "dev": true }, "node_modules/are-we-there-yet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", - "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "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" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/arg": { @@ -1639,9 +1656,9 @@ } }, "node_modules/cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "dev": true, "dependencies": { "@npmcli/fs": "^2.1.0", @@ -1661,7 +1678,7 @@ "rimraf": "^3.0.2", "ssri": "^9.0.0", "tar": "^6.1.11", - "unique-filename": "^1.1.1" + "unique-filename": "^2.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" @@ -1954,9 +1971,9 @@ } }, "node_modules/commander": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", - "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", "dev": true, "engines": { "node": "^12.20.0 || >=14" @@ -2340,14 +2357,15 @@ } }, "node_modules/eslint": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", - "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", + "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.5", "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -2357,13 +2375,12 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", "globby": "^11.1.0", @@ -2372,6 +2389,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -2382,8 +2400,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -2479,9 +2496,9 @@ } }, "node_modules/espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -2799,12 +2816,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "node_modules/fuse.js": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", @@ -2967,9 +2978,9 @@ } }, "node_modules/globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3135,15 +3146,15 @@ } }, "node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", + "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/html-escaper": { @@ -3334,9 +3345,9 @@ } }, "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "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-binary-path": { @@ -3364,9 +3375,9 @@ } }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -3650,6 +3661,12 @@ "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", "dev": true }, + "node_modules/js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3857,9 +3874,9 @@ } }, "node_modules/lru-cache": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", - "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", "dev": true, "engines": { "node": ">=12" @@ -3896,9 +3913,9 @@ "dev": true }, "node_modules/make-fetch-happen": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", - "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", @@ -3972,9 +3989,9 @@ "dev": true }, "node_modules/minipass": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.3.tgz", - "integrity": "sha512-N0BOsdFAlNRfmwMhjAsLVWOk7Ljmeb39iqFlsV1At+jqRhSUP9yeof8FyJu4imaJiSUp8vQebWD/guZwGQC8iA==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "dev": true, "dependencies": { "yallist": "^4.0.0" @@ -3996,9 +4013,9 @@ } }, "node_modules/minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, "dependencies": { "minipass": "^3.1.6", @@ -4238,16 +4255,16 @@ "dev": true }, "node_modules/node-gyp": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", - "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.2.0.tgz", + "integrity": "sha512-/+/YxGfIJOh/fnMsr4Ep0v6oOIjnO1BgLd2dcDspBX1spTkQU7xSIox5RdRE/2/Uq3ZwK8Z5swRIbMUmPlslmg==", "dev": true, "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", + "nopt": "^6.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", @@ -4300,24 +4317,24 @@ "dev": true }, "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, "dependencies": { - "abbrev": "1" + "abbrev": "^1.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": ">=6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", @@ -4326,7 +4343,7 @@ "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/normalize-path": { @@ -4360,26 +4377,26 @@ } }, "node_modules/npm-check-updates": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.0.5.tgz", - "integrity": "sha512-0qK6NTmgbq8y39xm4y1tKW5ghEGtWWyiUzSPSQEaqb9elqOfZogV4GQVvBYw3xJlt6igJVXgBUyjNqtPv/j7Yw==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.8.tgz", + "integrity": "sha512-2CUeCWEs+arWQUJH2IEkiZU/Ak2fLBqGkMyM5JDkfnGhz1VHNe3yyGiXD+0JeVmjbXTEpgZ0t6C9VK52atGuAw==", "dev": true, "dependencies": { "chalk": "^5.0.1", "cli-table": "^0.3.11", - "commander": "^9.4.0", + "commander": "^9.4.1", "fast-memoize": "^2.5.2", "find-up": "5.0.0", "fp-and-or": "^0.1.3", "get-stdin": "^8.0.0", "globby": "^11.0.4", - "hosted-git-info": "^5.0.0", + "hosted-git-info": "^5.1.0", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", "lodash": "^4.17.21", "minimatch": "^5.1.0", "p-map": "^4.0.0", - "pacote": "^13.6.1", + "pacote": "^13.6.2", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts-ncu": "^2.5.1", @@ -4390,6 +4407,7 @@ "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^1.0.0", + "untildify": "^4.0.0", "update-notifier": "^6.0.2", "yaml": "^2.1.1" }, @@ -4462,9 +4480,9 @@ "dev": true }, "node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", @@ -4477,15 +4495,15 @@ } }, "node_modules/npm-packlist": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.0.tgz", - "integrity": "sha512-a04sqF6FbkyOAFA19AA0e94gS7Et5T2/IMj3VOT9nOF2RaRdVPQ1Q17Fb/HaDRFs+gbC7HOmhVZ29adpWgmDZg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", + "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", "dev": true, "dependencies": { "glob": "^8.0.1", "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" }, "bin": { "npm-packlist": "bin/index.js" @@ -4494,14 +4512,35 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/npm-packlist/node_modules/npm-bundled": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", + "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", + "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", "dev": true, "dependencies": { "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", + "npm-normalize-package-bin": "^2.0.0", "npm-package-arg": "^9.0.0", "semver": "^7.3.5" }, @@ -4509,10 +4548,19 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm-registry-fetch": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", - "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", + "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", "dev": true, "dependencies": { "make-fetch-happen": "^10.0.6", @@ -4864,9 +4912,9 @@ } }, "node_modules/pacote": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", - "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", + "version": "13.6.2", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", + "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", "dev": true, "dependencies": { "@npmcli/git": "^3.0.0", @@ -5259,15 +5307,15 @@ } }, "node_modules/read-package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", - "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", + "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", "dev": true, "dependencies": { "glob": "^8.0.1", "json-parse-even-better-errors": "^2.3.1", "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^2.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" @@ -5286,6 +5334,15 @@ "node": ">=10" } }, + "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -5635,12 +5692,12 @@ } }, "node_modules/socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, "dependencies": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" }, "engines": { @@ -5734,9 +5791,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, "node_modules/sprintf-js": { @@ -6039,9 +6096,9 @@ } }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -6065,21 +6122,27 @@ } }, "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, "dependencies": { - "unique-slug": "^2.0.0" + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.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==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/unique-string": { @@ -6097,6 +6160,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", @@ -6186,12 +6258,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -6872,14 +6938,14 @@ } }, "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", + "espree": "^9.4.0", "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -6900,9 +6966,9 @@ "dev": true }, "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -6916,6 +6982,12 @@ "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", "dev": true }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -7070,9 +7142,9 @@ } }, "@npmcli/fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", - "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dev": true, "requires": { "@gar/promisify": "^1.1.3", @@ -7080,9 +7152,9 @@ } }, "@npmcli/git": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", - "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", + "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", "dev": true, "requires": { "@npmcli/promise-spawn": "^3.0.0", @@ -7107,9 +7179,9 @@ } }, "@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", "dev": true, "requires": { "mkdirp": "^1.0.4", @@ -7132,15 +7204,16 @@ } }, "@npmcli/run-script": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.3.tgz", - "integrity": "sha512-xb47c2KMkn6ERw2AwPPGKIITbWoXOT1yDV5rU3SYeC1vksYOodbgN0pnOptIVnRgS2e9G8R7BVDVm8lWp92unQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", + "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", "dev": true, "requires": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3" + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" } }, "@pnpm/network.ca-file": { @@ -7226,9 +7299,9 @@ "dev": true }, "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", + "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", "dev": true, "requires": { "@types/minimatch": "*", @@ -7269,9 +7342,9 @@ } }, "@types/lodash": { - "version": "4.14.184", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", - "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==", + "version": "4.14.186", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", + "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", "dev": true }, "@types/minimatch": { @@ -7281,15 +7354,15 @@ "dev": true }, "@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-rADY+HtTOA52l9VZWtgQfn4p+UDVM2eDVkMZT1I6syp0YKxW2F9v+0pbRZLsvskhQv/vMb6ZfCay81GHbz5SHg==", "dev": true }, "@types/node": { - "version": "18.7.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.11.tgz", - "integrity": "sha512-KZhFpSLlmK/sdocfSAjqPETTMd0ug6HIMIAwkwUpU79olnZdQtMxpQP+G1wDzCH7na+FltSIhbaZuKdwZ8RDrw==", + "version": "18.8.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.1.tgz", + "integrity": "sha512-vuYaNuEIbOYLTLUAJh50ezEbvxrD43iby+lpUA2aa148Nh5kX/AVO/9m1Ahmbux2iU5uxJTNF9g2Y+31uml7RQ==", "dev": true }, "@types/responselike": { @@ -7308,22 +7381,21 @@ "dev": true }, "@types/vscode": { - "version": "1.70.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.70.0.tgz", - "integrity": "sha512-3/9Fz0F2eBgwciazc94Ien+9u1elnjFg9YAhvAb3qDy/WeFWD9VrOPU7CIytryOVUdbxus8uzL4VZYONA0gDtA==", + "version": "1.71.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.71.0.tgz", + "integrity": "sha512-nB50bBC9H/x2CpwW9FzRRRDrTZ7G0/POttJojvN/LiVfzTGfLyQIje1L1QRMdFXK9G41k5UJN/1B9S4of7CSzA==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.34.0.tgz", - "integrity": "sha512-eRfPPcasO39iwjlUAMtjeueRGuIrW3TQ9WseIDl7i5UWuFbf83yYaU7YPs4j8+4CxUMIsj1k+4kV+E+G+6ypDQ==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz", + "integrity": "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.34.0", - "@typescript-eslint/type-utils": "5.34.0", - "@typescript-eslint/utils": "5.34.0", + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/type-utils": "5.39.0", + "@typescript-eslint/utils": "5.39.0", "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", "regexpp": "^3.2.0", "semver": "^7.3.7", @@ -7331,52 +7403,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.34.0.tgz", - "integrity": "sha512-SZ3NEnK4usd2CXkoV3jPa/vo1mWX1fqRyIVUQZR4As1vyp4fneknBNJj+OFtV8WAVgGf+rOHMSqQbs2Qn3nFZQ==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz", + "integrity": "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.34.0", - "@typescript-eslint/types": "5.34.0", - "@typescript-eslint/typescript-estree": "5.34.0", + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/typescript-estree": "5.39.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.34.0.tgz", - "integrity": "sha512-HNvASMQlah5RsBW6L6c7IJ0vsm+8Sope/wu5sEAf7joJYWNb1LDbJipzmdhdUOnfrDFE6LR1j57x1EYVxrY4ow==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz", + "integrity": "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.34.0", - "@typescript-eslint/visitor-keys": "5.34.0" + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/visitor-keys": "5.39.0" } }, "@typescript-eslint/type-utils": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.34.0.tgz", - "integrity": "sha512-Pxlno9bjsQ7hs1pdWRUv9aJijGYPYsHpwMeCQ/Inavhym3/XaKt1ZKAA8FIw4odTBfowBdZJDMxf2aavyMDkLg==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz", + "integrity": "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.34.0", + "@typescript-eslint/typescript-estree": "5.39.0", + "@typescript-eslint/utils": "5.39.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.34.0.tgz", - "integrity": "sha512-49fm3xbbUPuzBIOcy2CDpYWqy/X7VBkxVN+DC21e0zIm3+61Z0NZi6J9mqPmSW1BDVk9FIOvuCFyUPjXz93sjA==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz", + "integrity": "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.34.0.tgz", - "integrity": "sha512-mXHAqapJJDVzxauEkfJI96j3D10sd567LlqroyCeJaHnu42sDbjxotGb3XFtGPYKPD9IyLjhsoULML1oI3M86A==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz", + "integrity": "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.34.0", - "@typescript-eslint/visitor-keys": "5.34.0", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/visitor-keys": "5.39.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7385,26 +7458,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.34.0.tgz", - "integrity": "sha512-kWRYybU4Rn++7lm9yu8pbuydRyQsHRoBDIo11k7eqBWTldN4xUdVUMCsHBiE7aoEkFzrUEaZy3iH477vr4xHAQ==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz", + "integrity": "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.34.0", - "@typescript-eslint/types": "5.34.0", - "@typescript-eslint/typescript-estree": "5.34.0", + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/typescript-estree": "5.39.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.34.0.tgz", - "integrity": "sha512-O1moYjOSrab0a2fUvFpsJe0QHtvTC+cR+ovYpgKrAVXzqQyc74mv76TgY6z+aEtjQE2vgZux3CQVtGryqdcOAw==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz", + "integrity": "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/types": "5.39.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -7543,9 +7616,9 @@ "dev": true }, "are-we-there-yet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", - "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "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, "requires": { "delegates": "^1.0.0", @@ -7725,9 +7798,9 @@ } }, "cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "dev": true, "requires": { "@npmcli/fs": "^2.1.0", @@ -7747,7 +7820,7 @@ "rimraf": "^3.0.2", "ssri": "^9.0.0", "tar": "^6.1.11", - "unique-filename": "^1.1.1" + "unique-filename": "^2.0.0" } }, "cacheable-lookup": { @@ -7957,9 +8030,9 @@ "dev": true }, "commander": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", - "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", "dev": true }, "commondir": { @@ -8251,14 +8324,15 @@ "dev": true }, "eslint": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", - "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", + "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.5", "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -8268,13 +8342,12 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", "globby": "^11.1.0", @@ -8283,6 +8356,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -8293,8 +8367,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { "eslint-scope": { @@ -8356,9 +8429,9 @@ "dev": true }, "espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -8591,12 +8664,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "fuse.js": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", @@ -8712,9 +8779,9 @@ } }, "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -8832,9 +8899,9 @@ "dev": true }, "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", + "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", "dev": true, "requires": { "lru-cache": "^7.5.1" @@ -8991,9 +9058,9 @@ "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==" }, "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "is-binary-path": { @@ -9015,9 +9082,9 @@ } }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "requires": { "has": "^1.0.3" @@ -9224,6 +9291,12 @@ "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", "dev": true }, + "js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -9383,9 +9456,9 @@ "dev": true }, "lru-cache": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", - "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", "dev": true }, "make-dir": { @@ -9412,9 +9485,9 @@ "dev": true }, "make-fetch-happen": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", - "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, "requires": { "agentkeepalive": "^4.2.1", @@ -9473,9 +9546,9 @@ "dev": true }, "minipass": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.3.tgz", - "integrity": "sha512-N0BOsdFAlNRfmwMhjAsLVWOk7Ljmeb39iqFlsV1At+jqRhSUP9yeof8FyJu4imaJiSUp8vQebWD/guZwGQC8iA==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -9491,9 +9564,9 @@ } }, "minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, "requires": { "encoding": "^0.1.13", @@ -9678,16 +9751,16 @@ "dev": true }, "node-gyp": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", - "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.2.0.tgz", + "integrity": "sha512-/+/YxGfIJOh/fnMsr4Ep0v6oOIjnO1BgLd2dcDspBX1spTkQU7xSIox5RdRE/2/Uq3ZwK8Z5swRIbMUmPlslmg==", "dev": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", + "nopt": "^6.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", @@ -9727,18 +9800,18 @@ "dev": true }, "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, "requires": { - "abbrev": "1" + "abbrev": "^1.0.0" } }, "normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", "dev": true, "requires": { "hosted-git-info": "^5.0.0", @@ -9769,26 +9842,26 @@ } }, "npm-check-updates": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.0.5.tgz", - "integrity": "sha512-0qK6NTmgbq8y39xm4y1tKW5ghEGtWWyiUzSPSQEaqb9elqOfZogV4GQVvBYw3xJlt6igJVXgBUyjNqtPv/j7Yw==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.8.tgz", + "integrity": "sha512-2CUeCWEs+arWQUJH2IEkiZU/Ak2fLBqGkMyM5JDkfnGhz1VHNe3yyGiXD+0JeVmjbXTEpgZ0t6C9VK52atGuAw==", "dev": true, "requires": { "chalk": "^5.0.1", "cli-table": "^0.3.11", - "commander": "^9.4.0", + "commander": "^9.4.1", "fast-memoize": "^2.5.2", "find-up": "5.0.0", "fp-and-or": "^0.1.3", "get-stdin": "^8.0.0", "globby": "^11.0.4", - "hosted-git-info": "^5.0.0", + "hosted-git-info": "^5.1.0", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", "lodash": "^4.17.21", "minimatch": "^5.1.0", "p-map": "^4.0.0", - "pacote": "^13.6.1", + "pacote": "^13.6.2", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts-ncu": "^2.5.1", @@ -9799,6 +9872,7 @@ "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^1.0.0", + "untildify": "^4.0.0", "update-notifier": "^6.0.2", "yaml": "^2.1.1" }, @@ -9851,9 +9925,9 @@ "dev": true }, "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, "requires": { "hosted-git-info": "^5.0.0", @@ -9863,33 +9937,58 @@ } }, "npm-packlist": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.0.tgz", - "integrity": "sha512-a04sqF6FbkyOAFA19AA0e94gS7Et5T2/IMj3VOT9nOF2RaRdVPQ1Q17Fb/HaDRFs+gbC7HOmhVZ29adpWgmDZg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", + "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", "dev": true, "requires": { "glob": "^8.0.1", "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "npm-bundled": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", + "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^2.0.0" + } + }, + "npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true + } } }, "npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", + "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", "dev": true, "requires": { "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", + "npm-normalize-package-bin": "^2.0.0", "npm-package-arg": "^9.0.0", "semver": "^7.3.5" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true + } } }, "npm-registry-fetch": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", - "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", + "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", "dev": true, "requires": { "make-fetch-happen": "^10.0.6", @@ -10159,9 +10258,9 @@ } }, "pacote": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", - "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", + "version": "13.6.2", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", + "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", "dev": true, "requires": { "@npmcli/git": "^3.0.0", @@ -10442,15 +10541,23 @@ } }, "read-package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", - "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", + "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", "dev": true, "requires": { "glob": "^8.0.1", "json-parse-even-better-errors": "^2.3.1", "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true + } } }, "read-package-json-fast": { @@ -10718,12 +10825,12 @@ "dev": true }, "socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, "requires": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" } }, @@ -10801,9 +10908,9 @@ } }, "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, "sprintf-js": { @@ -11016,9 +11123,9 @@ } }, "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "dev": true }, "uglify-js": { @@ -11029,18 +11136,18 @@ "optional": true }, "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "unique-slug": "^3.0.0" } }, "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, "requires": { "imurmurhash": "^0.1.4" @@ -11055,6 +11162,12 @@ "crypto-random-string": "^4.0.0" } }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, "update-browserslist-db": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", @@ -11115,12 +11228,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", diff --git a/package.json b/package.json index 3b9ee43f6..50a57f465 100644 --- a/package.json +++ b/package.json @@ -60,27 +60,27 @@ }, "devDependencies": { "@types/chai": "^4.3.3", - "@types/glob": "^7.2.0", + "@types/glob": "^8.0.0", "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.184", - "@types/mocha": "^9.1.1", - "@types/node": "^18.7.11", + "@types/lodash": "^4.14.186", + "@types/mocha": "^10.0.0", + "@types/node": "^18.8.1", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.70.0", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", + "@types/vscode": "^1.71.0", + "@typescript-eslint/eslint-plugin": "^5.39.0", + "@typescript-eslint/parser": "^5.39.0", "chai": "^4.3.6", - "eslint": "^8.22.0", + "eslint": "^8.24.0", "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", "mocha": "^10.0.0", - "npm-check-updates": "^16.0.5", + "npm-check-updates": "^16.3.8", "nyc": "^15.1.0", "prettier": "^2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1", - "typescript": "^4.7.4" + "typescript": "^4.8.4" }, "scripts": { "clean": "rimraf out/server && rimraf lib", From ccd8b2b6aac10b806e9ff45c3051ef3d1f4e1a17 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 4 Oct 2022 18:28:26 +0100 Subject: [PATCH 443/558] Start testing with ansible-core 2.14 pre-releases (#459) --- .config/requirements.in | 2 +- .config/requirements.txt | 2 +- .github/workflows/task.yml | 6 +++--- tools/test-setup.sh | 1 + 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.config/requirements.in b/.config/requirements.in index d95bd067e..d18737f11 100644 --- a/.config/requirements.in +++ b/.config/requirements.in @@ -1,5 +1,5 @@ # testing and linting -ansible-core>=2.13 +ansible-core>=2.14.0.dev0 ansible-lint>=6.8.0.dev0 # end-of dependencies for which we allow pre-releases click diff --git a/.config/requirements.txt b/.config/requirements.txt index 98b0cb090..af8855d91 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,6 +1,6 @@ alabaster==0.7.12 ansible-compat==2.2.1 -ansible-core==2.13.4 +ansible-core==2.14.0b2 ansible-lint==6.8.0b3 ansible-pygments==0.1.1 astroid==2.11.6 diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 2a3469b63..477ea3b09 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -27,7 +27,7 @@ jobs: JOB_NAME: ${{ matrix.name || matrix.task-name }} name: ${{ matrix.name || matrix.task-name }} # The type of runner that the job will run on - runs-on: ${{ matrix.os || 'ubuntu-latest' }} + runs-on: ${{ matrix.os || 'ubuntu-22.04' }} defaults: run: shell: ${{ matrix.shell || 'bash'}} @@ -35,7 +35,7 @@ jobs: fail-fast: false matrix: os: - - ubuntu-latest + - ubuntu-22.04 node-version: - "12" task-name: @@ -182,7 +182,7 @@ jobs: check: # This job does nothing and is only used for the branch protection if: always() - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: - test steps: diff --git a/tools/test-setup.sh b/tools/test-setup.sh index dbc0b3b5f..baa5a39b2 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -72,6 +72,7 @@ if [[ -f "/usr/bin/apt-get" ]]; then -o=Dpkg::Use-Pty=0 "${DEBS[@]}" fi fi +python3 --version # Ensure that git is configured properly to allow unattended commits, something # that is needed by some tasks, like devel or deps. From cdf95c8f677cae642cdb3df3d68a8b8944211978 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Tue, 11 Oct 2022 15:35:41 +0530 Subject: [PATCH 444/558] Add default tmp location for ansible (#462) * Add default tmp location for ansible * Pass temp location variable within container pointing with the workdir so that ansible can create and write the temp files. * add docs * update command * add new line at end of file --- src/services/executionEnvironment.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 754b12d2d..bcfd22fe4 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -249,6 +249,9 @@ export class ExecutionEnvironment { // ensure output is parseable (no ANSI) containerCommand.push("-e", "ANSIBLE_FORCE_COLOR=0"); + // pass temporary location for ansible to use within the container. + containerCommand.push("-e", "ANSIBLE_LOCAL_TEMP=./.ansible/tmp"); + if (this._container_engine === "podman") { // container namespace stuff containerCommand.push("--group-add=root"); @@ -444,6 +447,7 @@ export class ExecutionEnvironment { } } command += ` -e ANSIBLE_FORCE_COLOR=0 `; // ensure output is parseable (no ANSI) + command += ` -e ANSIBLE_LOCAL_TEMP=./.ansible/tmp `; // ensure temp location for ansible if ( this.settingsContainerOptions && this.settingsContainerOptions !== "" From fd5699c2fc7eb4670f89def0c689615395d85046 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Tue, 11 Oct 2022 16:56:07 +0530 Subject: [PATCH 445/558] Revert "Add default tmp location for ansible (#462)" (#464) This reverts commit cdf95c8f677cae642cdb3df3d68a8b8944211978. --- src/services/executionEnvironment.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index bcfd22fe4..754b12d2d 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -249,9 +249,6 @@ export class ExecutionEnvironment { // ensure output is parseable (no ANSI) containerCommand.push("-e", "ANSIBLE_FORCE_COLOR=0"); - // pass temporary location for ansible to use within the container. - containerCommand.push("-e", "ANSIBLE_LOCAL_TEMP=./.ansible/tmp"); - if (this._container_engine === "podman") { // container namespace stuff containerCommand.push("--group-add=root"); @@ -447,7 +444,6 @@ export class ExecutionEnvironment { } } command += ` -e ANSIBLE_FORCE_COLOR=0 `; // ensure output is parseable (no ANSI) - command += ` -e ANSIBLE_LOCAL_TEMP=./.ansible/tmp `; // ensure temp location for ansible if ( this.settingsContainerOptions && this.settingsContainerOptions !== "" From 23d62488a55d35791aaeb03d393f54b16ca0b94e Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Wed, 12 Oct 2022 20:36:18 +0530 Subject: [PATCH 446/558] Replace `which` with `command -v` (#463) Co-authored-by: Sorin Sbarnea --- .config/dictionary.txt | 1 + .config/requirements.in | 4 ++-- .config/requirements.txt | 4 ++-- .github/workflows/task.yml | 26 +++++++++++++++++++++++--- Taskfile.yml | 4 ++-- src/services/executionEnvironment.ts | 4 ++-- src/services/settingsManager.ts | 2 +- src/utils/commandRunner.ts | 5 ++++- src/utils/getAnsibleMetaData.ts | 2 +- tools/test-setup.sh | 2 +- 10 files changed, 39 insertions(+), 15 deletions(-) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 4e9af7f8c..3977cad17 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -106,6 +106,7 @@ towncrier toxenv tsbuildinfo unshallow +userdata uuidv4 venvs vscodeignore diff --git a/.config/requirements.in b/.config/requirements.in index d18737f11..ec24a3ac1 100644 --- a/.config/requirements.in +++ b/.config/requirements.in @@ -1,6 +1,6 @@ # testing and linting -ansible-core>=2.14.0.dev0 -ansible-lint>=6.8.0.dev0 +ansible-core>=2.13.0b2 +ansible-lint>=6.8.1 # end-of dependencies for which we allow pre-releases click lxml diff --git a/.config/requirements.txt b/.config/requirements.txt index af8855d91..6c4a5c7ac 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,7 +1,7 @@ alabaster==0.7.12 ansible-compat==2.2.1 -ansible-core==2.14.0b2 -ansible-lint==6.8.0b3 +ansible-core==2.13.5 +ansible-lint==6.8.1 ansible-pygments==0.1.1 astroid==2.11.6 attrs==21.4.0 diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 477ea3b09..649879cb9 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -27,7 +27,7 @@ jobs: JOB_NAME: ${{ matrix.name || matrix.task-name }} name: ${{ matrix.name || matrix.task-name }} # The type of runner that the job will run on - runs-on: ${{ matrix.os || 'ubuntu-22.04' }} + runs-on: ${{ matrix.os || 'ubuntu-20.04' }} defaults: run: shell: ${{ matrix.shell || 'bash'}} @@ -35,7 +35,7 @@ jobs: fail-fast: false matrix: os: - - ubuntu-22.04 + - ubuntu-20.04 node-version: - "12" task-name: @@ -165,6 +165,26 @@ jobs: - name: task ${{ matrix.task-name }} run: task -v ${{ matrix.task-name }} + - name: Gather logs + if: ${{ always() }} + run: | + mkdir -p out/vscode + cp -r ../vscode-ansible/out/userdata/logs/* out/vscode || true + + - name: Upload test logs + if: ${{ always() }} + uses: actions/upload-artifact@v3 + with: + name: logs-${{ matrix.os }}-${{ matrix.task-name }}.zip + path: | + out/vscode + out/e2eTestReport + out/log + out/test-resources/settings/logs + out/userdata/logs + if-no-files-found: ignore + retention-days: 15 + - name: Stop services if: "contains(matrix.os, 'macos')" # Stopping podman machine is needed or caching it will fail @@ -182,7 +202,7 @@ jobs: check: # This job does nothing and is only used for the branch protection if: always() - runs-on: ubuntu-22.04 + runs-on: ubuntu-20.04 needs: - test steps: diff --git a/Taskfile.yml b/Taskfile.yml index 468dfba24..d6790eb61 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -117,9 +117,9 @@ tasks: deps: - setup cmds: - - "{{.ENGINE}} pull quay.io/ansible/creator-ee:latest" + - "{{.ENGINE}} pull quay.io/ansible/creator-ee:v0.9.2" # Tests that container engine is functional and that we have the image: - - "{{.ENGINE}} run -i quay.io/ansible/creator-ee:latest ansible-lint --version" + - "{{.ENGINE}} run -i quay.io/ansible/creator-ee:v0.9.2 ansible-lint --version" - > source $VIRTUAL_ENV/bin/activate && command -v ansible-lint && diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 754b12d2d..1d348c3a1 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -307,7 +307,7 @@ export class ExecutionEnvironment { if (this._container_engine === "auto") { for (const ce of ["podman", "docker"]) { try { - child_process.execSync(`which ${ce}`, { + child_process.execSync(`command -v ${ce}`, { encoding: "utf-8", }); } catch (error) { @@ -320,7 +320,7 @@ export class ExecutionEnvironment { } } else { try { - child_process.execSync(`which ${this._container_engine}`, { + child_process.execSync(`command -v ${this._container_engine}`, { encoding: "utf-8", }); } catch (error) { diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index 5e011897b..b86af073c 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -52,7 +52,7 @@ export class SettingsManager { description: "Toggle usage of an execution environment", }, image: { - default: "quay.io/ansible/creator-ee:latest", + default: "quay.io/ansible/creator-ee:v0.9.2", description: "Name of the execution environment to be used", }, pull: { diff --git a/src/utils/commandRunner.ts b/src/utils/commandRunner.ts index 7e44cb574..08d86d7ef 100644 --- a/src/utils/commandRunner.ts +++ b/src/utils/commandRunner.ts @@ -83,7 +83,10 @@ export class CommandRunner { executable: string, ): Promise | undefined { try { - const executablePath = await this.runCommand("which", executable); + const executablePath = await this.runCommand( + "command", + `-v ${executable}`, + ); return executablePath.stdout.trim(); } catch (error) { console.log(error); diff --git a/src/utils/getAnsibleMetaData.ts b/src/utils/getAnsibleMetaData.ts index 387ec5a2a..af087fcad 100644 --- a/src/utils/getAnsibleMetaData.ts +++ b/src/utils/getAnsibleMetaData.ts @@ -140,7 +140,7 @@ async function getAnsibleLintInfo() { } const ansibleLintPathResult = await getResultsThroughCommandRunner( - "which", + "command -v", "ansible-lint", ); diff --git a/tools/test-setup.sh b/tools/test-setup.sh index baa5a39b2..2224813d7 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -5,7 +5,7 @@ # (cspell: disable-next-line) set -euo pipefail -IMAGE=quay.io/ansible/creator-ee:latest +IMAGE=quay.io/ansible/creator-ee:v0.9.2 PIP_LOG_FILE=out/log/pip.log HOSTNAME="${HOSTNAME:-localhost}" ERR=0 From e661621cc6c3bbd0d66e712ff96492b6ab770ea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Giquel?= Date: Wed, 12 Oct 2022 17:12:01 +0200 Subject: [PATCH 447/558] Support for FQCN with more than 3 elements (#449) * Add support for FQCN with more than 3 elements * Add a test for completion with a long FQCN * Filter symlink for collection search Co-authored-by: Sorin Sbarnea --- src/services/docsLibrary.ts | 2 +- src/utils/docsFinder.ts | 16 ++- .../org_1/coll_5/galaxy.yml | 9 ++ .../plugins/modules/sub_coll_1/module_1.py | 102 ++++++++++++++++++ test/fixtures/completion/simple_tasks.yml | 4 + test/providers/completionProvider.test.ts | 6 ++ 6 files changed, 135 insertions(+), 4 deletions(-) create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_5/galaxy.yml create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_5/plugins/modules/sub_coll_1/module_1.py diff --git a/src/services/docsLibrary.ts b/src/services/docsLibrary.ts index db4bf7b6c..6d939d6e8 100644 --- a/src/services/docsLibrary.ts +++ b/src/services/docsLibrary.ts @@ -164,7 +164,7 @@ export class DocsLibrary { contextPath: Node[] | undefined, ) { const candidateFqcns = []; - if (searchText.split(".").length === 3) { + if (searchText.split(".").length >= 3) { candidateFqcns.push(searchText); // try searching as-is (FQCN match) } else { candidateFqcns.push(`ansible.builtin.${searchText}`); // try searching built-in diff --git a/src/utils/docsFinder.ts b/src/utils/docsFinder.ts index 1598b1664..ce4a7dc20 100644 --- a/src/utils/docsFinder.ts +++ b/src/utils/docsFinder.ts @@ -34,8 +34,10 @@ export async function findDocumentation( case "collection": files = await globArray([ `${dir}/ansible_collections/*/*/plugins/modules/*.py`, + `${dir}/ansible_collections/*/*/plugins/modules/**/*.py`, `!${dir}/ansible_collections/*/*/plugins/modules/_*.py`, - ]); + `!${dir}/ansible_collections/*/*/plugins/modules/**/_*.py`, + ]).filter((item) => !fs.lstatSync(item).isSymbolicLink()); break; case "collection_doc_fragment": files = await globArray([ @@ -57,8 +59,16 @@ export async function findDocumentation( case "collection": case "collection_doc_fragment": const pathArray = file.split(path.sep); - namespace = pathArray[pathArray.length - 5]; - collection = pathArray[pathArray.length - 4]; + const pluginsDirIndex = pathArray.indexOf("plugins"); + namespace = pathArray[pluginsDirIndex - 2]; + collection = pathArray[pluginsDirIndex - 1]; + if (pathArray.length > pluginsDirIndex + 3) { + const subCollectionArray = pathArray.slice( + pluginsDirIndex + 2, + pathArray.length - 1, + ); + collection = `${collection}.${subCollectionArray.join(".")}`; + } break; } diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_5/galaxy.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_5/galaxy.yml new file mode 100644 index 000000000..ccccaa7f4 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_5/galaxy.yml @@ -0,0 +1,9 @@ +--- +authors: + - "Ansible devtools team" +description: "test collection" +license_file: LICENSE +name: coll_5 +namespace: org_1 +readme: README.md +version: 1.0.0 diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_5/plugins/modules/sub_coll_1/module_1.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_5/plugins/modules/sub_coll_1/module_1.py new file mode 100644 index 000000000..d8e015f4e --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_5/plugins/modules/sub_coll_1/module_1.py @@ -0,0 +1,102 @@ +""" +The module file for org_1.coll_5.sub_coll_1.module_1 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +DOCUMENTATION = """ +module: module_1 +short_description: Test module +description: + - This is a test module +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_4 + opt_4: + description: Option 4 + type: bool + default: No +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_5.sub_coll_1.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/completion/simple_tasks.yml b/test/fixtures/completion/simple_tasks.yml index 92b081f26..f93522432 100644 --- a/test/fixtures/completion/simple_tasks.yml +++ b/test/fixtures/completion/simple_tasks.yml @@ -30,3 +30,7 @@ sub_sub_sub_opt_2: opt_3: choice_2 opt_4: true + + - name: Collection module with long FQCN + org_1.coll_5.sub_coll_1.module_1: + opt_2: choice_3 diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index 35980e84d..ed345ab5a 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -243,6 +243,12 @@ function testModuleNames( triggerCharacter: "org_1.coll_4.", completion: "org_1.coll_4.", }, + { + name: "list for all the modules under coll_5 in org_1 with `org_1.coll_5.`", + position: { line: 34, character: 19 } as Position, + triggerCharacter: "org_1.coll_5.", + completion: "org_1.coll_5.sub_coll_1.module_1", + }, ]; tests.forEach(({ name, position, triggerCharacter, completion }) => { From 337c4268d1d9893e82ee31b04c7a2e451d86953c Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Wed, 12 Oct 2022 20:51:33 +0530 Subject: [PATCH 448/558] Add documentation link for violated ansible-lint rules (#461) * update code to add help uri for violated ansible-lint rules * update tests * remove Description tag from ansible-lint message * replace which with command -v * remove console.log()s * beautify message and link in ansible-lint message * update source text to lower case ansible-lint --- src/services/ansibleLint.ts | 9 +++++++-- test/providers/validationProvider.test.ts | 10 +++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts index 658060b33..56ab9007d 100644 --- a/src/services/ansibleLint.ts +++ b/src/services/ansibleLint.ts @@ -219,6 +219,9 @@ export class AnsibleLint { const path = `${workingDirectory}/${item.location.path}`; const locationUri = URI.file(path).toString(); + const helpUri: string = item.url ? item.url : undefined; + const helpUrlName: string = helpUri ? item.check_name : undefined; + let fileDiagnostics = diagnostics.get(locationUri); if (!fileDiagnostics) { fileDiagnostics = []; @@ -226,13 +229,15 @@ export class AnsibleLint { } let message: string = item.check_name; if (item.description) { - message += `\nDescription: ${item.description}`; + message = item.description; } fileDiagnostics.push({ message: message, range: range || Range.create(0, 0, 0, 0), severity: severity, - source: "Ansible", + source: "ansible-lint", + code: helpUrlName, + codeDescription: { href: helpUri }, }); } } diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts index f896f7a95..eb8f26564 100644 --- a/test/providers/validationProvider.test.ts +++ b/test/providers/validationProvider.test.ts @@ -90,7 +90,7 @@ function testAnsibleLintErrors( character: integer.MAX_VALUE, } as Position, }, - source: "Ansible", + source: "ansible-lint", }, { severity: 1, @@ -102,7 +102,7 @@ function testAnsibleLintErrors( character: integer.MAX_VALUE, } as Position, }, - source: "Ansible", + source: "ansible-lint", }, { severity: 1, @@ -114,7 +114,7 @@ function testAnsibleLintErrors( character: integer.MAX_VALUE, } as Position, }, - source: "Ansible", + source: "ansible-lint", }, { severity: 1, @@ -126,7 +126,7 @@ function testAnsibleLintErrors( character: integer.MAX_VALUE, } as Position, }, - source: "Ansible", + source: "ansible-lint", }, { severity: 1, @@ -138,7 +138,7 @@ function testAnsibleLintErrors( character: integer.MAX_VALUE, } as Position, }, - source: "Ansible", + source: "ansible-lint", }, ], }, From edcb8ed5e796d3580c0e5d7a07683281bc45c9dc Mon Sep 17 00:00:00 2001 From: ansibot Date: Wed, 12 Oct 2022 17:27:18 +0200 Subject: [PATCH 449/558] Release v1.0.1 (#466) ## v1.0.1 ### Bugfixes - Add documentation link for violated ansible-lint rules (#461) @priyamsahoo - Support for FQCN with more than 3 elements (#449) @fredericgiquel - Replace `which` with `command -v` (#463) @priyamsahoo Co-authored-by: Ansible DevTools --- CHANGELOG.md | 8 ++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51d3bebcb..77f0e25f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,14 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v1.0.1 + +### Bugfixes + +- Add documentation link for violated ansible-lint rules (#461) @priyamsahoo +- Support for FQCN with more than 3 elements (#449) @fredericgiquel +- Replace `which` with `command -v` (#463) @priyamsahoo + ## v1.0.0 ### Minor Changes diff --git a/package-lock.json b/package-lock.json index 32e4abe75..f65ed517e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "1.0.0", + "version": "1.0.1", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 50a57f465..2952981ff 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "1.0.0", + "version": "1.0.1", "contributors": [ { "name": "Tomasz Maciążek", From bd449349eff2dc4ebb6e71ab932612e721624d84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 11:06:06 +0530 Subject: [PATCH 450/558] Bump ansible-lint from 6.8.1 to 6.8.2 in /.config (#470) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 6c4a5c7ac..4031590c3 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,7 +1,7 @@ alabaster==0.7.12 ansible-compat==2.2.1 ansible-core==2.13.5 -ansible-lint==6.8.1 +ansible-lint==6.8.2 ansible-pygments==0.1.1 astroid==2.11.6 attrs==21.4.0 @@ -18,7 +18,6 @@ cryptography==36.0.2 dill==0.3.5.1 distlib==0.3.4 docutils==0.17.1 -enrich==1.2.7 filelock==3.6.0 flake8==4.0.1 identify==2.4.11 @@ -59,6 +58,7 @@ requests==2.27.1 resolvelib==0.5.4 rich==12.0.0 ruamel-yaml==0.17.21 +ruamel-yaml-clib==0.2.6 setuptools-scm==6.4.2 six==1.16.0 snowballstemmer==2.2.0 From a12dcb081f1f4540353cae6deafbb70173519d3a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 21:32:43 +0100 Subject: [PATCH 451/558] Bump Vampire/setup-wsl from 1.3.1 to 1.3.2 (#471) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/task.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 649879cb9..a075a9d41 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -76,7 +76,7 @@ jobs: # https://github.com/marketplace/actions/setup-wsl - name: Activate WSL if: "contains(matrix.shell, 'wsl')" - uses: Vampire/setup-wsl@v1.3.1 + uses: Vampire/setup-wsl@v1.3.2 with: set-as-default: 'true' # we want to load user profile From 110810391833ed0694334bab6857cb63b2355ddf Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Fri, 28 Oct 2022 13:20:17 +0530 Subject: [PATCH 452/558] Add support for ansible-lint config file (#474) And additionally adds a feature to segregate ansible-lint errors and warnings --- src/services/ansibleLint.ts | 45 +++++++++++++---------- src/utils/getAnsibleMetaData.ts | 5 ++- test/fixtures/diagnostics/.ansible-lint | 7 ++++ test/fixtures/diagnostics/lint_errors.yml | 10 +++++ test/providers/validationProvider.test.ts | 16 +++++++- test/utils/getAnsibleMetaData.test.ts | 35 +++++++++--------- 6 files changed, 78 insertions(+), 40 deletions(-) create mode 100644 test/fixtures/diagnostics/.ansible-lint diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts index 56ab9007d..acac65251 100644 --- a/src/services/ansibleLint.ts +++ b/src/services/ansibleLint.ts @@ -1,5 +1,5 @@ import { ExecException } from "child_process"; -import { promises as fs } from "fs"; +import { readFileSync } from "fs"; import * as path from "path"; import { URI } from "vscode-uri"; import { @@ -28,6 +28,7 @@ export class AnsibleLint { private connection: Connection; private context: WorkspaceFolderContext; private useProgressTracker = false; + private _ansibleLintConfigFilePath: string; private configCache: Map = new Map(); @@ -74,6 +75,7 @@ export class AnsibleLint { mountPaths.add(path.dirname(ansibleLintConfigPath)); } } + linterArguments = `${linterArguments} --offline --nocolor -f codeclimate`; const docPath = URI.parse(textDocument.uri).path; @@ -100,7 +102,7 @@ export class AnsibleLint { ); try { - // get Ansible configuration + // get ansible-lint result on the doc const result = await commandRunner.runCommand( "ansible-lint", `${linterArguments} "${docPath}"`, @@ -110,7 +112,7 @@ export class AnsibleLint { diagnostics = this.processReport( result.stdout, - await ansibleLintConfigPromise, + ansibleLintConfigPromise, workingDirectory, ); @@ -199,8 +201,8 @@ export class AnsibleLint { let severity: DiagnosticSeverity = DiagnosticSeverity.Error; if (ansibleLintConfig) { const lintRuleName = (item.check_name as string).match( - /\[(?[a-z\-]+)\].*/, - )?.groups?.name; + /(?[a-z\-]+).*/, + )[0]; if ( lintRuleName && @@ -270,29 +272,25 @@ export class AnsibleLint { } } - private async getAnsibleLintConfig( + private getAnsibleLintConfig( workingDirectory: string, configPath: string | undefined, - ): Promise { + ): IAnsibleLintConfig | undefined { if (configPath) { const absConfigPath = path.resolve(workingDirectory, configPath); - let config = this.configCache.get(absConfigPath); - if (!config) { - config = await this.readAnsibleLintConfig(absConfigPath); - this.configCache.set(absConfigPath, config); - } + + // let config = this.configCache.get(absConfigPath); + const config = this.readAnsibleLintConfig(absConfigPath); return config; } } - private async readAnsibleLintConfig( - configPath: string, - ): Promise { + private readAnsibleLintConfig(configPath: string): IAnsibleLintConfig { const config = { warnList: new Set(), }; try { - const configContents = await fs.readFile(configPath, { + const configContents = readFileSync(configPath, { encoding: "utf8", }); parseAllDocuments(configContents).forEach((configDoc) => { @@ -311,6 +309,7 @@ export class AnsibleLint { } catch (error) { this.connection.window.showErrorMessage(error); } + this._ansibleLintConfigFilePath = configPath; return config; } @@ -323,19 +322,27 @@ export class AnsibleLint { // Find first configuration file going up until workspace root for (let index = pathArray.length - 1; index >= 0; index--) { - const candidatePath = pathArray + let candidatePath = pathArray .slice(0, index) .concat(".ansible-lint") .join("/"); - if (!candidatePath.startsWith(this.context.workspaceFolder.uri)) { + + const workspacePath = URI.parse(this.context.workspaceFolder.uri).path; + candidatePath = URI.parse(candidatePath).path; + + if (!candidatePath.startsWith(workspacePath)) { // we've gone out of the workspace folder break; } if (await fileExists(candidatePath)) { - configPath = candidatePath; + configPath = URI.parse(candidatePath).path; break; } } return configPath; } + + get ansibleLintConfigFilePath(): string { + return this._ansibleLintConfigFilePath; + } } diff --git a/src/utils/getAnsibleMetaData.ts b/src/utils/getAnsibleMetaData.ts index af087fcad..91cea2d44 100644 --- a/src/utils/getAnsibleMetaData.ts +++ b/src/utils/getAnsibleMetaData.ts @@ -88,7 +88,7 @@ async function getAnsibleInfo() { await context.ansibleConfig ).ansible_location; - ansibleInfo["config file path"] = [ansibleVersionObj["config file"]]; + ansibleInfo["config file path"] = ansibleVersionObj["config file"]; ansibleInfo["ansible collections location"] = ( await context.ansibleConfig @@ -150,6 +150,9 @@ async function getAnsibleLintInfo() { ansibleLintInfo["ansible-lint location"] = ansibleLintPathResult.stdout.trim(); + ansibleLintInfo["config file path"] = + context.ansibleLint.ansibleLintConfigFilePath; + return ansibleLintInfo; } diff --git a/test/fixtures/diagnostics/.ansible-lint b/test/fixtures/diagnostics/.ansible-lint new file mode 100644 index 000000000..9562101d3 --- /dev/null +++ b/test/fixtures/diagnostics/.ansible-lint @@ -0,0 +1,7 @@ +--- +use_default_rules: true +skip_list: + - yaml[new-line-at-end-of-file] +warn_list: + - no-free-form + - no-relative-paths diff --git a/test/fixtures/diagnostics/lint_errors.yml b/test/fixtures/diagnostics/lint_errors.yml index 467d5083c..36894f3a6 100644 --- a/test/fixtures/diagnostics/lint_errors.yml +++ b/test/fixtures/diagnostics/lint_errors.yml @@ -14,3 +14,13 @@ - name: This would typically fire deprecated-command-syntax command: warn=no chmod 644 X + + - name: Copy the CA certificate + ansible.builtin.copy: + src: ../../files/certs/ca.crt + dest: /root/ca.crt + owner: root + group: root + mode: "0644" + tags: + - certs diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts index eb8f26564..6cf568223 100644 --- a/test/providers/validationProvider.test.ts +++ b/test/providers/validationProvider.test.ts @@ -78,7 +78,7 @@ function testAnsibleLintErrors( ) { const tests = [ { - name: "specific ansible lint errors", + name: "specific ansible lint errors and warnings (Warnings come from warn_list in ansible-lint config)", diagnosticReport: [ { severity: 1, @@ -129,7 +129,7 @@ function testAnsibleLintErrors( source: "ansible-lint", }, { - severity: 1, + severity: 2, message: "Avoid using free-form", range: { start: { line: 14, character: 0 } as Position, @@ -140,6 +140,18 @@ function testAnsibleLintErrors( }, source: "ansible-lint", }, + { + severity: 2, + message: "should not use a relative path", + range: { + start: { line: 17, character: 0 } as Position, + end: { + line: 17, + character: integer.MAX_VALUE, + } as Position, + }, + source: "ansible-lint", + }, ], }, ]; diff --git a/test/utils/getAnsibleMetaData.test.ts b/test/utils/getAnsibleMetaData.test.ts index e68570176..2d8bff4c8 100644 --- a/test/utils/getAnsibleMetaData.test.ts +++ b/test/utils/getAnsibleMetaData.test.ts @@ -16,19 +16,17 @@ function getAnsibleTestInfo() { const ansibleInfo = {}; ansibleInfo["ansible version"] = "Ansible"; ansibleInfo["ansible location"] = "/ansible"; - ansibleInfo["config file path"] = [ - path.resolve( - __dirname, - "..", - "fixtures", - "utils", - "getAnsibleMetaData", - "ansible.cfg", - ), - ]; - ansibleInfo["ansible collections location"] = [ - path.resolve(__dirname, "..", "fixtures", "common", "collections"), - ]; + (ansibleInfo["config file path"] = path.resolve( + __dirname, + "..", + "fixtures", + "utils", + "getAnsibleMetaData", + "ansible.cfg", + )), + (ansibleInfo["ansible collections location"] = [ + path.resolve(__dirname, "..", "fixtures", "common", "collections"), + ]); ansibleInfo["ansible module location"] = ["/modules"]; ansibleInfo["ansible default host list path"] = [ path.resolve( @@ -54,6 +52,7 @@ function getAnsibleLintTestInfo() { const ansibleLintInfo = {}; ansibleLintInfo["ansible-lint version"] = "ansible-lint"; ansibleLintInfo["ansible-lint location"] = "/ansible-lint"; + ansibleLintInfo["config file path"] = "/.ansible-lint"; // this key will be undefined (but the key will be present) because the value only gets updated when validation in run return ansibleLintInfo; } @@ -128,8 +127,6 @@ describe("getAnsibleMetaData()", () => { ansibleLintInfoForTest = getAnsibleLintTestInfo(); }); - testCommands(); - describe("Verify ansible details", () => { it("should contain all the keys for ansible information", function () { expect(Object.keys(ansibleInfoForTest).length).equals( @@ -152,7 +149,7 @@ describe("getAnsibleMetaData()", () => { it("should have a valid config file location", function () { expect( actualAnsibleMetaData["ansible information"]["config file path"], - ).to.include.members(ansibleInfoForTest["config file path"]); + ).to.include(ansibleInfoForTest["config file path"]); }); it("should have a valid collections location", function () { @@ -224,6 +221,8 @@ describe("getAnsibleMetaData()", () => { .undefined; }); }); + + testCommands(); }); describe("With EE enabled @ee", () => { @@ -237,8 +236,6 @@ describe("getAnsibleMetaData()", () => { executionEnvironmentInfoForTest = getExecutionEnvironmentTestInfo(); }); - testCommands(); - describe("Verify the presence of execution environment details", () => { it("should have a valid container engine", function () { expect(executionEnvironmentInfoForTest["container engine"]).to.include( @@ -270,5 +267,7 @@ describe("getAnsibleMetaData()", () => { await disableExecutionEnvironmentSettings(docSettings); }); }); + + testCommands(); }); }); From 52e0255cda6102e162120f1f0d24910d865aed52 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Fri, 28 Oct 2022 14:27:23 +0530 Subject: [PATCH 453/558] Enhance ansible meta-data (#475) --- .prettierrc.yaml | 1 + src/utils/getAnsibleMetaData.ts | 23 ++++----- test/utils/getAnsibleMetaData.test.ts | 74 ++++++++++----------------- 3 files changed, 37 insertions(+), 61 deletions(-) diff --git a/.prettierrc.yaml b/.prettierrc.yaml index 87b7971a1..d4be7e1ed 100644 --- a/.prettierrc.yaml +++ b/.prettierrc.yaml @@ -21,3 +21,4 @@ overrides: # compatibility with markdownlint proseWrap: always semi: true +trailingComma: all # needed to force prettier 3.x to use 2.x settings and avoid conflict with eslint diff --git a/src/utils/getAnsibleMetaData.ts b/src/utils/getAnsibleMetaData.ts index 91cea2d44..c4abe07a6 100644 --- a/src/utils/getAnsibleMetaData.ts +++ b/src/utils/getAnsibleMetaData.ts @@ -82,23 +82,21 @@ async function getAnsibleInfo() { } else { ansibleVersion = ansibleVersionObjKeys[0].split(" "); } - ansibleInfo["ansible version"] = `Ansible ${ansibleVersion[1].slice(0, -1)}`; + ansibleInfo["version"] = `Ansible ${ansibleVersion[1].slice(0, -1)}`; - ansibleInfo["ansible location"] = ( - await context.ansibleConfig - ).ansible_location; + ansibleInfo["location"] = (await context.ansibleConfig).ansible_location; ansibleInfo["config file path"] = ansibleVersionObj["config file"]; - ansibleInfo["ansible collections location"] = ( + ansibleInfo["collections location"] = ( await context.ansibleConfig ).collections_paths; - ansibleInfo["ansible module location"] = ( + ansibleInfo["modules location"] = ( await context.ansibleConfig ).module_locations; - ansibleInfo["ansible default host list path"] = ( + ansibleInfo["default host list path"] = ( await context.ansibleConfig ).default_host_list; @@ -116,13 +114,13 @@ async function getPythonInfo() { return pythonInfo; } - pythonInfo["python version"] = pythonVersionResult.stdout.trim(); + pythonInfo["version"] = pythonVersionResult.stdout.trim(); const pythonPathResult = await getResultsThroughCommandRunner( "python3", '-c "import sys; print(sys.executable)"', ); - pythonInfo["python location"] = pythonPathResult.stdout.trim(); + pythonInfo["location"] = pythonPathResult.stdout.trim(); return pythonInfo; } @@ -144,11 +142,9 @@ async function getAnsibleLintInfo() { "ansible-lint", ); - ansibleLintInfo["ansible-lint version"] = - ansibleLintVersionResult.stdout.trim(); + ansibleLintInfo["version"] = ansibleLintVersionResult.stdout.trim(); - ansibleLintInfo["ansible-lint location"] = - ansibleLintPathResult.stdout.trim(); + ansibleLintInfo["location"] = ansibleLintPathResult.stdout.trim(); ansibleLintInfo["config file path"] = context.ansibleLint.ansibleLintConfigFilePath; @@ -165,7 +161,6 @@ async function getExecutionEnvironmentInfo() { eeInfo["container engine"] = basicDetails.containerEngine; eeInfo["container image"] = basicDetails.containerImage; eeInfo["container image ID"] = basicDetails.containerImageId; - eeInfo["container volume mounts"] = basicDetails.containerVolumeMounts; let eeServiceWorking = false; let inspectResult; diff --git a/test/utils/getAnsibleMetaData.test.ts b/test/utils/getAnsibleMetaData.test.ts index 2d8bff4c8..12256b04e 100644 --- a/test/utils/getAnsibleMetaData.test.ts +++ b/test/utils/getAnsibleMetaData.test.ts @@ -14,8 +14,8 @@ import { function getAnsibleTestInfo() { const ansibleInfo = {}; - ansibleInfo["ansible version"] = "Ansible"; - ansibleInfo["ansible location"] = "/ansible"; + ansibleInfo["version"] = "Ansible"; + ansibleInfo["location"] = "/ansible"; (ansibleInfo["config file path"] = path.resolve( __dirname, "..", @@ -24,11 +24,11 @@ function getAnsibleTestInfo() { "getAnsibleMetaData", "ansible.cfg", )), - (ansibleInfo["ansible collections location"] = [ + (ansibleInfo["collections location"] = [ path.resolve(__dirname, "..", "fixtures", "common", "collections"), ]); - ansibleInfo["ansible module location"] = ["/modules"]; - ansibleInfo["ansible default host list path"] = [ + ansibleInfo["module location"] = ["/modules"]; + ansibleInfo["default host list path"] = [ path.resolve( __dirname, "..", @@ -43,15 +43,15 @@ function getAnsibleTestInfo() { function getPythonTestInfo() { const pythonInfo = {}; - pythonInfo["python version"] = "Python"; - pythonInfo["python location"] = "/python"; + pythonInfo["version"] = "Python"; + pythonInfo["location"] = "/python"; return pythonInfo; } function getAnsibleLintTestInfo() { const ansibleLintInfo = {}; - ansibleLintInfo["ansible-lint version"] = "ansible-lint"; - ansibleLintInfo["ansible-lint location"] = "/ansible-lint"; + ansibleLintInfo["version"] = "ansible-lint"; + ansibleLintInfo["location"] = "/ansible-lint"; ansibleLintInfo["config file path"] = "/.ansible-lint"; // this key will be undefined (but the key will be present) because the value only gets updated when validation in run return ansibleLintInfo; } @@ -136,14 +136,14 @@ describe("getAnsibleMetaData()", () => { it("should have information about ansible version used", function () { expect( - actualAnsibleMetaData["ansible information"]["ansible version"], - ).includes(ansibleInfoForTest["ansible version"]); + actualAnsibleMetaData["ansible information"]["version"], + ).includes(ansibleInfoForTest["version"]); }); it("should have a valid ansible location", function () { expect( - actualAnsibleMetaData["ansible information"]["ansible location"], - ).include(ansibleInfoForTest["ansible location"]); + actualAnsibleMetaData["ansible information"]["location"], + ).include(ansibleInfoForTest["location"]); }); it("should have a valid config file location", function () { @@ -154,22 +154,16 @@ describe("getAnsibleMetaData()", () => { it("should have a valid collections location", function () { expect( - actualAnsibleMetaData["ansible information"][ - "ansible collections location" - ], - ).to.include.members( - ansibleInfoForTest["ansible collections location"], - ); + actualAnsibleMetaData["ansible information"]["collections location"], + ).to.include.members(ansibleInfoForTest["collections location"]); }); it("should have a valid inventory file path", function () { expect( actualAnsibleMetaData["ansible information"][ - "ansible default host list path" + "default host list path" ], - ).to.include.members( - ansibleInfoForTest["ansible default host list path"], - ); + ).to.include.members(ansibleInfoForTest["default host list path"]); }); }); @@ -180,15 +174,15 @@ describe("getAnsibleMetaData()", () => { ); }); it("should have information about python version used", function () { - expect( - actualAnsibleMetaData["python information"]["python version"], - ).includes(pythonInfoForTest["python version"]); + expect(actualAnsibleMetaData["python information"]["version"]).includes( + pythonInfoForTest["version"], + ); }); it("should have a valid python location", function () { - expect( - actualAnsibleMetaData["python information"]["python location"], - ).include(pythonInfoForTest["python location"]); + expect(actualAnsibleMetaData["python information"]["location"]).include( + pythonInfoForTest["location"], + ); }); }); @@ -200,18 +194,14 @@ describe("getAnsibleMetaData()", () => { }); it("should have information about ansible-lint version used", function () { expect( - actualAnsibleMetaData["ansible-lint information"][ - "ansible-lint version" - ], - ).includes(ansibleLintInfoForTest["ansible-lint version"]); + actualAnsibleMetaData["ansible-lint information"]["version"], + ).includes(ansibleLintInfoForTest["version"]); }); it("should have a valid ansible-lint location", function () { expect( - actualAnsibleMetaData["ansible-lint information"][ - "ansible-lint location" - ], - ).include(ansibleLintInfoForTest["ansible-lint location"]); + actualAnsibleMetaData["ansible-lint information"]["location"], + ).include(ansibleLintInfoForTest["location"]); }); }); @@ -253,16 +243,6 @@ describe("getAnsibleMetaData()", () => { ).to.include(executionEnvironmentInfoForTest["container image"]); }); - it("should have valid container volume mount information", function () { - expect( - actualAnsibleMetaData["execution environment information"][ - "container volume mounts" - ][0]["src"], - ).to.include( - executionEnvironmentInfoForTest["container volume mounts"][0]["src"], - ); - }); - after(async () => { await disableExecutionEnvironmentSettings(docSettings); }); From bdec762affa5ddaf3d5c2fe4564e128a09cc2111 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Nov 2022 18:32:06 +0000 Subject: [PATCH 454/558] Bump ansible-compat from 2.2.1 to 2.2.3 in /.config (#477) Bumps [ansible-compat](https://github.com/ansible-community/ansible-compat) from 2.2.1 to 2.2.3. - [Release notes](https://github.com/ansible-community/ansible-compat/releases) - [Commits](https://github.com/ansible-community/ansible-compat/compare/v2.2.1...v2.2.3) --- updated-dependencies: - dependency-name: ansible-compat dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 4031590c3..022569a0c 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,5 +1,5 @@ alabaster==0.7.12 -ansible-compat==2.2.1 +ansible-compat==2.2.3 ansible-core==2.13.5 ansible-lint==6.8.2 ansible-pygments==0.1.1 From a39f9a29c6703d3c1e7c42d818e279172e2a7825 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Nov 2022 18:32:22 +0000 Subject: [PATCH 455/558] Bump ansible-lint from 6.8.2 to 6.8.4 in /.config (#476) Bumps [ansible-lint](https://github.com/ansible-community/ansible-lint) from 6.8.2 to 6.8.4. - [Release notes](https://github.com/ansible-community/ansible-lint/releases) - [Commits](https://github.com/ansible-community/ansible-lint/compare/v6.8.2...v6.8.4) --- updated-dependencies: - dependency-name: ansible-lint dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 022569a0c..3606031c9 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,7 +1,7 @@ alabaster==0.7.12 ansible-compat==2.2.3 ansible-core==2.13.5 -ansible-lint==6.8.2 +ansible-lint==6.8.4 ansible-pygments==0.1.1 astroid==2.11.6 attrs==21.4.0 From 012870ddea96c66c3ad0011e538e894b52042736 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Wed, 2 Nov 2022 19:36:22 +0530 Subject: [PATCH 456/558] Bump ansible-lint version from 6.8.4 to 6.8.6 (#479) --- .config/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 3606031c9..d6cdbd799 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,7 +1,7 @@ alabaster==0.7.12 -ansible-compat==2.2.3 +ansible-compat==2.2.4 ansible-core==2.13.5 -ansible-lint==6.8.4 +ansible-lint==6.8.6 ansible-pygments==0.1.1 astroid==2.11.6 attrs==21.4.0 From 748bd6fc958d334cc5e3da90b5490c82b55c476e Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Wed, 2 Nov 2022 20:50:34 +0530 Subject: [PATCH 457/558] Update code to use latest tag of creator-ee (#480) --- Taskfile.yml | 4 ++-- src/services/settingsManager.ts | 2 +- tools/test-setup.sh | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Taskfile.yml b/Taskfile.yml index d6790eb61..468dfba24 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -117,9 +117,9 @@ tasks: deps: - setup cmds: - - "{{.ENGINE}} pull quay.io/ansible/creator-ee:v0.9.2" + - "{{.ENGINE}} pull quay.io/ansible/creator-ee:latest" # Tests that container engine is functional and that we have the image: - - "{{.ENGINE}} run -i quay.io/ansible/creator-ee:v0.9.2 ansible-lint --version" + - "{{.ENGINE}} run -i quay.io/ansible/creator-ee:latest ansible-lint --version" - > source $VIRTUAL_ENV/bin/activate && command -v ansible-lint && diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index b86af073c..5e011897b 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -52,7 +52,7 @@ export class SettingsManager { description: "Toggle usage of an execution environment", }, image: { - default: "quay.io/ansible/creator-ee:v0.9.2", + default: "quay.io/ansible/creator-ee:latest", description: "Name of the execution environment to be used", }, pull: { diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 2224813d7..baa5a39b2 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -5,7 +5,7 @@ # (cspell: disable-next-line) set -euo pipefail -IMAGE=quay.io/ansible/creator-ee:v0.9.2 +IMAGE=quay.io/ansible/creator-ee:latest PIP_LOG_FILE=out/log/pip.log HOSTNAME="${HOSTNAME:-localhost}" ERR=0 From c2b0cbcd39e3ba205d052da871da2a489c46362c Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Thu, 3 Nov 2022 23:20:24 +0530 Subject: [PATCH 458/558] Avoid parsing ansible-lint config file (#478) * update code to avoid reading ansible-lint config file The code change encorporates the latest changes from ansible-lint which sends 'level' as one of the key in the json output. The 'level' key tells the level of rule violation, i.e., error or warning. In this way, ALS segregates errors and warnings. * resolve compilation error --- src/interfaces/ansibleLintConfig.ts | 3 - src/services/ansibleLint.ts | 98 +++-------------------------- src/services/workspaceManager.ts | 1 - 3 files changed, 9 insertions(+), 93 deletions(-) delete mode 100644 src/interfaces/ansibleLintConfig.ts diff --git a/src/interfaces/ansibleLintConfig.ts b/src/interfaces/ansibleLintConfig.ts deleted file mode 100644 index b493bbfcf..000000000 --- a/src/interfaces/ansibleLintConfig.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IAnsibleLintConfig { - warnList: Set; -} diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts index acac65251..805407208 100644 --- a/src/services/ansibleLint.ts +++ b/src/services/ansibleLint.ts @@ -1,20 +1,16 @@ import { ExecException } from "child_process"; -import { readFileSync } from "fs"; import * as path from "path"; import { URI } from "vscode-uri"; import { Connection, Diagnostic, DiagnosticSeverity, - DidChangeWatchedFilesParams, integer, Position, Range, } from "vscode-languageserver"; import { TextDocument } from "vscode-languageserver-textdocument"; -import { parseAllDocuments } from "yaml"; -import { IAnsibleLintConfig } from "../interfaces/ansibleLintConfig"; -import { fileExists, hasOwnProperty } from "../utils/misc"; +import { fileExists } from "../utils/misc"; import { WorkspaceFolderContext } from "./workspaceManager"; import { CommandRunner } from "../utils/commandRunner"; @@ -30,8 +26,6 @@ export class AnsibleLint { private useProgressTracker = false; private _ansibleLintConfigFilePath: string; - private configCache: Map = new Map(); - constructor(connection: Connection, context: WorkspaceFolderContext) { this.connection = connection; this.context = context; @@ -76,6 +70,7 @@ export class AnsibleLint { } } + this._ansibleLintConfigFilePath = ansibleLintConfigPath; linterArguments = `${linterArguments} --offline --nocolor -f codeclimate`; const docPath = URI.parse(textDocument.uri).path; @@ -88,11 +83,6 @@ export class AnsibleLint { done: () => {}, // eslint-disable-line @typescript-eslint/no-empty-function }; - const ansibleLintConfigPromise = this.getAnsibleLintConfig( - workingDirectory, - ansibleLintConfigPath, - ); - progressTracker.begin("ansible-lint", undefined, "Processing files..."); const commandRunner = new CommandRunner( @@ -110,11 +100,7 @@ export class AnsibleLint { mountPaths, ); - diagnostics = this.processReport( - result.stdout, - ansibleLintConfigPromise, - workingDirectory, - ); + diagnostics = this.processReport(result.stdout, workingDirectory); if (result.stderr) { this.connection.console.info(`[ansible-lint] ${result.stderr}`); @@ -128,11 +114,7 @@ export class AnsibleLint { }; if (execError.stdout) { - diagnostics = this.processReport( - execError.stdout, - await ansibleLintConfigPromise, - workingDirectory, - ); + diagnostics = this.processReport(execError.stdout, workingDirectory); } else { if (execError.stderr) { this.connection.console.info(`[ansible-lint] ${execError.stderr}`); @@ -160,7 +142,6 @@ export class AnsibleLint { private processReport( result: string, - ansibleLintConfig: IAnsibleLintConfig | undefined, workingDirectory: string, ): Map { const diagnostics: Map = new Map(); @@ -199,25 +180,14 @@ export class AnsibleLint { }; let severity: DiagnosticSeverity = DiagnosticSeverity.Error; - if (ansibleLintConfig) { - const lintRuleName = (item.check_name as string).match( - /(?[a-z\-]+).*/, - )[0]; - - if ( - lintRuleName && - ansibleLintConfig.warnList.has(lintRuleName) - ) { + if (item.level) { + if (item.level === "error") { + severity = DiagnosticSeverity.Error; + } else if (item.level === "warning") { severity = DiagnosticSeverity.Warning; } - - const categories = item.categories; - if (categories instanceof Array) { - if (categories.some((c) => ansibleLintConfig.warnList.has(c))) { - severity = DiagnosticSeverity.Warning; - } - } } + const path = `${workingDirectory}/${item.location.path}`; const locationUri = URI.file(path).toString(); @@ -263,56 +233,6 @@ export class AnsibleLint { return diagnostics; } - public handleWatchedDocumentChange( - params: DidChangeWatchedFilesParams, - ): void { - for (const fileEvent of params.changes) { - // remove from cache on any change - this.configCache.delete(fileEvent.uri); - } - } - - private getAnsibleLintConfig( - workingDirectory: string, - configPath: string | undefined, - ): IAnsibleLintConfig | undefined { - if (configPath) { - const absConfigPath = path.resolve(workingDirectory, configPath); - - // let config = this.configCache.get(absConfigPath); - const config = this.readAnsibleLintConfig(absConfigPath); - return config; - } - } - - private readAnsibleLintConfig(configPath: string): IAnsibleLintConfig { - const config = { - warnList: new Set(), - }; - try { - const configContents = readFileSync(configPath, { - encoding: "utf8", - }); - parseAllDocuments(configContents).forEach((configDoc) => { - const configObject: unknown = configDoc.toJSON(); - if ( - hasOwnProperty(configObject, "warn_list") && - configObject.warn_list instanceof Array - ) { - for (const warn_item of configObject.warn_list) { - if (typeof warn_item === "string") { - config.warnList.add(warn_item); - } - } - } - }); - } catch (error) { - this.connection.window.showErrorMessage(error); - } - this._ansibleLintConfigFilePath = configPath; - return config; - } - private async findAnsibleLintConfigFile( uri: string, ): Promise { diff --git a/src/services/workspaceManager.ts b/src/services/workspaceManager.ts index a2d8093cf..0bf0accdf 100644 --- a/src/services/workspaceManager.ts +++ b/src/services/workspaceManager.ts @@ -168,7 +168,6 @@ export class WorkspaceFolderContext { params: DidChangeWatchedFilesParams, ): void { this.documentMetadata.handleWatchedDocumentChange(params); - this.ansibleLint.handleWatchedDocumentChange(params); for (const fileEvent of params.changes) { if (fileEvent.uri.startsWith(this.workspaceFolder.uri)) { // in case the configuration changes for this folder, we should From 5e6c1e4f408d853a1751c39c5e2588a9194a4372 Mon Sep 17 00:00:00 2001 From: ansibot Date: Fri, 4 Nov 2022 06:49:00 +0100 Subject: [PATCH 459/558] Release v1.0.2 (#481) ## v1.0.2 ### Bugfixes - Avoid parsing ansible-lint config file (#478) @priyamsahoo - Enhance ansible meta-data (#475) @priyamsahoo - Add support for ansible-lint config file (#474) @priyamsahoo Co-authored-by: Ansible DevTools --- CHANGELOG.md | 8 ++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77f0e25f0..361764f28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,14 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v1.0.2 + +### Bugfixes + +- Avoid parsing ansible-lint config file (#478) @priyamsahoo +- Enhance ansible meta-data (#475) @priyamsahoo +- Add support for ansible-lint config file (#474) @priyamsahoo + ## v1.0.1 ### Bugfixes diff --git a/package-lock.json b/package-lock.json index f65ed517e..414db1b59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "1.0.1", + "version": "1.0.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "1.0.1", + "version": "1.0.2", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 2952981ff..96a0214ae 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "1.0.1", + "version": "1.0.2", "contributors": [ { "name": "Tomasz Maciążek", From 934c47c3b077bef97508fc4d45cf4167b6e3279d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 14 Nov 2022 09:58:20 +0530 Subject: [PATCH 460/558] chore: pre-commit autoupdate (#483) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/streetsidesoftware/cspell-cli: v6.12.0 → v6.14.0](https://github.com/streetsidesoftware/cspell-cli/compare/v6.12.0...v6.14.0) - [github.com/pre-commit/mirrors-prettier: v3.0.0-alpha.0 → v3.0.0-alpha.4](https://github.com/pre-commit/mirrors-prettier/compare/v3.0.0-alpha.0...v3.0.0-alpha.4) - [github.com/pre-commit/mirrors-eslint: v8.24.0 → v8.27.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.24.0...v8.27.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1687cf0c5..295c4e68f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -49,7 +49,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.12.0 + rev: v6.14.0 hooks: - id: cspell name: Spell check with cspell @@ -85,7 +85,7 @@ repos: language_version: python3 - repo: https://github.com/pre-commit/mirrors-prettier # keep it before markdownlint and eslint - rev: "v3.0.0-alpha.0" + rev: "v3.0.0-alpha.4" hooks: - id: prettier - repo: https://github.com/igorshubovych/markdownlint-cli @@ -98,7 +98,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.24.0 + rev: v8.27.0 hooks: - id: eslint args: From ca834fc267860fa8140b56a56aa532aed043bd2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 11:35:24 +0530 Subject: [PATCH 461/558] Bump ansible-compat from 2.2.4 to 2.2.5 in /.config (#487) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index d6cdbd799..91135e89e 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,5 +1,5 @@ alabaster==0.7.12 -ansible-compat==2.2.4 +ansible-compat==2.2.5 ansible-core==2.13.5 ansible-lint==6.8.6 ansible-pygments==0.1.1 @@ -58,7 +58,6 @@ requests==2.27.1 resolvelib==0.5.4 rich==12.0.0 ruamel-yaml==0.17.21 -ruamel-yaml-clib==0.2.6 setuptools-scm==6.4.2 six==1.16.0 snowballstemmer==2.2.0 From f2c79f569753cc0bed73983c182d439ef3c1eef1 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 21 Nov 2022 06:12:04 -0800 Subject: [PATCH 462/558] Update pre-commit (#488) --- .pre-commit-config.yaml | 16 +-- package-lock.json | 300 +++++++++++++++++++++------------------- package.json | 6 +- 3 files changed, 167 insertions(+), 155 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 295c4e68f..5c12b89d0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,15 +11,13 @@ ci: # https://github.com/pre-commit-ci/issues/issues/55 - npm-ci - codecov - - shellcheck # docker not available on pre-commit.ci repos: - - repo: https://github.com/koalaman/shellcheck-precommit - rev: v0.8.0 + - repo: https://github.com/shellcheck-py/shellcheck-py + rev: v0.8.0.4 hooks: - id: shellcheck - # cspell:disable-next-line - entry: docker.io/koalaman/shellcheck:v0.8.0 - args: ["--color=always"] + args: + - --color=always - repo: local hooks: - id: npm-ci @@ -49,7 +47,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.14.0 + rev: v6.14.1 hooks: - id: cspell name: Spell check with cspell @@ -98,7 +96,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.27.0 + rev: v8.28.0 hooks: - id: eslint args: @@ -108,7 +106,7 @@ repos: additional_dependencies: - "@typescript-eslint/eslint-plugin" - "@typescript-eslint/parser" - - eslint@v8.2.0 + - eslint@v8.28.0 - eslint-plugin-prettier - eslint-config-prettier - prettier diff --git a/package-lock.json b/package-lock.json index 414db1b59..35c362b95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,10 +31,10 @@ "@types/node": "^18.8.1", "@types/uuid": "^8.3.4", "@types/vscode": "^1.71.0", - "@typescript-eslint/eslint-plugin": "^5.39.0", - "@typescript-eslint/parser": "^5.39.0", + "@typescript-eslint/eslint-plugin": "^5.43.0", + "@typescript-eslint/parser": "^5.43.0", "chai": "^4.3.6", - "eslint": "^8.24.0", + "eslint": "^8.28.0", "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", @@ -477,9 +477,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", - "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -511,29 +511,19 @@ "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -1018,6 +1008,12 @@ "@types/node": "*" } }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "node_modules/@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -1031,16 +1027,17 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz", - "integrity": "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/type-utils": "5.39.0", - "@typescript-eslint/utils": "5.39.0", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", "debug": "^4.3.4", "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" @@ -1063,14 +1060,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz", - "integrity": "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/typescript-estree": "5.39.0", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", "debug": "^4.3.4" }, "engines": { @@ -1090,13 +1087,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz", - "integrity": "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/visitor-keys": "5.39.0" + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1107,13 +1104,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz", - "integrity": "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.39.0", - "@typescript-eslint/utils": "5.39.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1134,9 +1131,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz", - "integrity": "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1147,13 +1144,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz", - "integrity": "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/visitor-keys": "5.39.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1174,17 +1171,19 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz", - "integrity": "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/typescript-estree": "5.39.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1198,12 +1197,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz", - "integrity": "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/types": "5.43.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2357,15 +2356,15 @@ } }, "node_modules/eslint": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", - "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", + "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.2", - "@humanwhocodes/config-array": "^0.10.5", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -2381,14 +2380,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", + "glob-parent": "^6.0.2", "globals": "^13.15.0", - "globby": "^11.1.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -2496,9 +2495,9 @@ } }, "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -2978,9 +2977,9 @@ } }, "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4239,6 +4238,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -6938,9 +6943,9 @@ } }, "@eslint/eslintrc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", - "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -6966,22 +6971,16 @@ "dev": true }, "@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true - }, "@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -7374,6 +7373,12 @@ "@types/node": "*" } }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -7387,69 +7392,70 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz", - "integrity": "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", + "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/type-utils": "5.39.0", - "@typescript-eslint/utils": "5.39.0", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", "debug": "^4.3.4", "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" } }, "@typescript-eslint/parser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz", - "integrity": "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", + "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/typescript-estree": "5.39.0", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz", - "integrity": "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", + "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/visitor-keys": "5.39.0" + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" } }, "@typescript-eslint/type-utils": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz", - "integrity": "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", + "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.39.0", - "@typescript-eslint/utils": "5.39.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz", - "integrity": "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", + "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz", - "integrity": "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", + "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/visitor-keys": "5.39.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7458,26 +7464,28 @@ } }, "@typescript-eslint/utils": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz", - "integrity": "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", + "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/typescript-estree": "5.39.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" } }, "@typescript-eslint/visitor-keys": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz", - "integrity": "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", + "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/types": "5.43.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -8324,15 +8332,15 @@ "dev": true }, "eslint": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", - "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", + "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.2", - "@humanwhocodes/config-array": "^0.10.5", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -8348,14 +8356,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", + "glob-parent": "^6.0.2", "globals": "^13.15.0", - "globby": "^11.1.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -8429,9 +8437,9 @@ "dev": true }, "espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -8779,9 +8787,9 @@ } }, "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -9738,6 +9746,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", diff --git a/package.json b/package.json index 96a0214ae..51e41bb5e 100644 --- a/package.json +++ b/package.json @@ -67,10 +67,10 @@ "@types/node": "^18.8.1", "@types/uuid": "^8.3.4", "@types/vscode": "^1.71.0", - "@typescript-eslint/eslint-plugin": "^5.39.0", - "@typescript-eslint/parser": "^5.39.0", + "@typescript-eslint/eslint-plugin": "^5.43.0", + "@typescript-eslint/parser": "^5.43.0", "chai": "^4.3.6", - "eslint": "^8.24.0", + "eslint": "^8.28.0", "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", From 18f25fd3fadfb75f62d60bbf40a0eb0dcd4bc9db Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 21 Nov 2022 06:39:29 -0800 Subject: [PATCH 463/558] Use ghcr.io instead of quay.io as default registry (#489) As most of our runs are from inside Azure, we prefer using ghcr.io as primary registry. That affects only default settings. --- Taskfile.yml | 4 ++-- docs/settings.md | 2 +- src/services/settingsManager.ts | 2 +- test/utils/getAnsibleMetaData.test.ts | 2 +- tools/test-setup.sh | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Taskfile.yml b/Taskfile.yml index 468dfba24..0ab590ed3 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -117,9 +117,9 @@ tasks: deps: - setup cmds: - - "{{.ENGINE}} pull quay.io/ansible/creator-ee:latest" + - "{{.ENGINE}} pull ghcr.io/ansible/creator-ee:latest" # Tests that container engine is functional and that we have the image: - - "{{.ENGINE}} run -i quay.io/ansible/creator-ee:latest ansible-lint --version" + - "{{.ENGINE}} run -i ghcr.io/ansible/creator-ee:latest ansible-lint --version" - > source $VIRTUAL_ENV/bin/activate && command -v ansible-lint && diff --git a/docs/settings.md b/docs/settings.md index 960484bfa..d9088ac9f 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -37,7 +37,7 @@ _default value: - **ansible.executionEnvironment.image**: Name of the execution environment to be used \ _default value: -`quay.io/ansible/creator-ee:latest`_ +`ghcr.io/ansible/creator-ee:latest`_ - **ansible.executionEnvironment.pull.policy**: Image pull policy to be used. Valid values are 'always', 'missing', 'never' and 'tag'. always will always pull the image when extension is activated or reloaded. 'missing' will pull if not locally available. 'never' will never pull the image and 'tag' will always pull if the image tag is 'latest', otherwise pull if not locally available. \ diff --git a/src/services/settingsManager.ts b/src/services/settingsManager.ts index 5e011897b..3f8b4d34c 100644 --- a/src/services/settingsManager.ts +++ b/src/services/settingsManager.ts @@ -52,7 +52,7 @@ export class SettingsManager { description: "Toggle usage of an execution environment", }, image: { - default: "quay.io/ansible/creator-ee:latest", + default: "ghcr.io/ansible/creator-ee:latest", description: "Name of the execution environment to be used", }, pull: { diff --git a/test/utils/getAnsibleMetaData.test.ts b/test/utils/getAnsibleMetaData.test.ts index 12256b04e..2cb74066c 100644 --- a/test/utils/getAnsibleMetaData.test.ts +++ b/test/utils/getAnsibleMetaData.test.ts @@ -59,7 +59,7 @@ function getAnsibleLintTestInfo() { function getExecutionEnvironmentTestInfo() { const eeInfo = {}; eeInfo["container engine"] = ["docker", "podman"]; - eeInfo["container image"] = "quay.io/"; + eeInfo["container image"] = "ghcr.io/"; eeInfo["container volume mounts"] = [ { src: "/fixtures/common/collections", diff --git a/tools/test-setup.sh b/tools/test-setup.sh index baa5a39b2..1845b1638 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -5,7 +5,7 @@ # (cspell: disable-next-line) set -euo pipefail -IMAGE=quay.io/ansible/creator-ee:latest +IMAGE=ghcr.io/ansible/creator-ee:latest PIP_LOG_FILE=out/log/pip.log HOSTNAME="${HOSTNAME:-localhost}" ERR=0 From e0af5b5834512940cab7c8493107decd4e5ea775 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 14:52:11 +0000 Subject: [PATCH 464/558] Bump Vampire/setup-wsl from 1.3.2 to 1.3.4 (#486) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- .github/workflows/task.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index a075a9d41..e561a2ac4 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -76,7 +76,7 @@ jobs: # https://github.com/marketplace/actions/setup-wsl - name: Activate WSL if: "contains(matrix.shell, 'wsl')" - uses: Vampire/setup-wsl@v1.3.2 + uses: Vampire/setup-wsl@v1.3.4 with: set-as-default: 'true' # we want to load user profile From 78c9dc0ca64e898259f503d9a5b598669d107b94 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 21 Nov 2022 08:34:24 -0800 Subject: [PATCH 465/558] Make node 14 minimal version required (#491) --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/task.yml | 3 +-- Taskfile.yml | 5 ----- package.json | 2 +- 5 files changed, 4 insertions(+), 10 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index f493cad40..c2b264be9 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -21,7 +21,7 @@ jobs: # Setup .npmrc file to publish to npm - uses: actions/setup-node@v3 with: - node-version: '16.x' + node-version: 16.x registry-url: 'https://registry.npmjs.org' - name: Install Task uses: arduino/setup-task@v1 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d26b3090d..4644e159b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -17,7 +17,7 @@ jobs: # Setup .npmrc file to publish to npm - uses: actions/setup-node@v3 with: - node-version: '16.x' + node-version: 16.x registry-url: 'https://registry.npmjs.org' - run: npm pack - run: npm publish --access public ansible-ansible-language-server-*.tgz diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index e561a2ac4..d5aa0115c 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -37,10 +37,9 @@ jobs: os: - ubuntu-20.04 node-version: - - "12" + - "16" task-name: - vscode - - test-node12 - test-node14 - test-node16 upload-artifact: diff --git a/Taskfile.yml b/Taskfile.yml index 0ab590ed3..330ab4365 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -125,11 +125,6 @@ tasks: command -v ansible-lint && bash -c '{{ .NODE_ENV }} npm run test' interactive: true - test-node12: - desc: Run all tests using node 12 - cmds: - - bash -c '{{ .NODE_ENV }} nvm install 12' - - task: test test-node14: desc: Run all tests using node 14 cmds: diff --git a/package.json b/package.json index 51e41bb5e..aba4391c5 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ }, "icon": "icon.png", "engines": { - "node": ">=12.0", + "node": ">=14.0", "npm": ">=7.11.2" }, "bin": { From 4db6dc23f9074ea70ba3a968ad3b3dca37b99355 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 25 Nov 2022 11:54:08 +0000 Subject: [PATCH 466/558] Fix broken pipe caused by head -n (#493) Related: https://github.com/containers/podman/issues/13778#issuecomment-1327328929 --- tools/test-setup.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 1845b1638..ae07533c0 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -3,7 +3,7 @@ # This tool is used to setup the environment for running the tests. Its name # name and location is based on Zuul CI, which can automatically run it. # (cspell: disable-next-line) -set -euo pipefail +set -exuo pipefail IMAGE=ghcr.io/ansible/creator-ee:latest PIP_LOG_FILE=out/log/pip.log @@ -26,7 +26,11 @@ get_version () { if [[ $# -eq 1 ]]; then _cmd+=('--version') fi - "${_cmd[@]}" | head -n1 | sed -r 's/^[^0-9]*([0-9][0-9\\w\\.]*).*$/\1/' + # Keep the `cat` and the silencing of 141 error code because otherwise + # the called tool might fail due to premature closure of /dev/stdout + # made by `--head n1` + "${_cmd[@]}" | cat | head -n1 | sed -r 's/^[^0-9]*([0-9][0-9\\w\\.]*).*$/\1/' \ + || (ec=$? ; if [ "$ec" -eq 141 ]; then exit 0; else exit "$ec"; fi) else log error "Got $? while trying to retrieve ${1:-} version" return 99 @@ -167,7 +171,7 @@ fi # shellcheck disable=SC1091 . "${VIRTUAL_ENV}/bin/activate" -python3 -m pip install -q -U pip pip-tools setuptools wheel +python3 -m pip install -q pip pip-tools setuptools wheel if [[ $(uname || true) != MINGW* ]]; then # if we are not on pure Windows python3 -m pip install \ @@ -260,9 +264,9 @@ if [[ "${PODMAN_VERSION}" != 'null' ]] && [[ "${SKIP_PODMAN:-}" != '1' ]]; then podman pull --quiet "${IMAGE}" >/dev/null # without running we will never be sure it works (no arm64 image yet) EE_ANSIBLE_VERSION=$(get_version \ - podman run -i ${IMAGE} ansible --version) || ERR=$? + podman run -i ${IMAGE} ansible --version) EE_ANSIBLE_LINT_VERSION=$(get_version \ - podman run -i ${IMAGE} ansible-lint --version) || ERR=$? + podman run -i ${IMAGE} ansible-lint --version) fi # Create a build manifest so we can compare between builds and machines, this From a4dbaca1593ac18477fdb2983d9aae678184584d Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 25 Nov 2022 11:58:19 +0000 Subject: [PATCH 467/558] Update docs url (#494) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b37a681fd..05a3caad0 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ improve the user experience: behavior can be disabled in extension settings. [`collections` keyword]: - https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#simplifying-module-names-with-the-collections-keyword + https://docs.ansible.com/ansible/latest/collections_guide/collections_using_playbooks.html#simplifying-module-names-with-the-collections-keyword #### Auto-closing Jinja expressions From 8b5016fa34d736e11259bab78bb3363575790a88 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 25 Nov 2022 12:05:47 +0000 Subject: [PATCH 468/558] Isolate container caching from others (#492) --- .github/workflows/task.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index d5aa0115c..e175ffdac 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -112,7 +112,6 @@ jobs: ~/.cache/yarn ~/.nvm/.cache ~/Library/Caches/pip - ~/.local/share/containers/podman/machine/qemu key: > ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles( 'package.json', @@ -120,6 +119,14 @@ jobs: '.config/requirements.txt' ) }} + - name: Enable caching for podman-machine + uses: actions/cache@v3 + with: + path: | + ~/.local/share/containers + ~/.config/containers + key: ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles('package.json', 'yarn.lock', '.config/requirements.txt', '**/Taskfile.yml', 'tools/*.*') }} + - name: Install Task if: "!contains(matrix.shell, 'wsl')" uses: arduino/setup-task@v1 From 0005873ef70481dca1277a128452fee8179022c1 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 29 Nov 2022 00:09:32 +0000 Subject: [PATCH 469/558] Resume podman machine (#498) --- .github/workflows/task.yml | 1 + tools/test-setup.sh | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index e175ffdac..846702646 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -121,6 +121,7 @@ jobs: - name: Enable caching for podman-machine uses: actions/cache@v3 + if: "contains(matrix.os, 'macos')" with: path: | ~/.local/share/containers diff --git a/tools/test-setup.sh b/tools/test-setup.sh index ae07533c0..a756226c3 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -97,8 +97,13 @@ fi if [[ "${OS:-}" == "darwin" && "${SKIP_PODMAN:-}" != '1' ]]; then command -v podman >/dev/null 2>&1 || { HOMEBREW_NO_ENV_HINTS=1 time brew install podman - time podman machine init - time podman machine start + podman machine ls --noheading | grep '\*' || time podman machine init + podman machine ls --noheading | grep "Currently running" || { + # do not use full path as it varies based on architecture + # https://github.com/containers/podman/issues/10824#issuecomment-1162392833 + "qemu-system-${MACHTYPE}" -machine q35,accel=hvf:tcg -cpu host -display none INVALID_OPTION || true + time podman machine start + } podman info podman run hello-world } @@ -171,7 +176,7 @@ fi # shellcheck disable=SC1091 . "${VIRTUAL_ENV}/bin/activate" -python3 -m pip install -q pip pip-tools setuptools wheel +python3 -m pip install -q -U pip if [[ $(uname || true) != MINGW* ]]; then # if we are not on pure Windows python3 -m pip install \ From 8ab11112185eb54c76a33d5aff7512d41e2d6876 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 29 Nov 2022 00:27:24 +0000 Subject: [PATCH 470/558] GHA use ubuntu 22.04 (#499) --- .github/workflows/task.yml | 6 +++--- .readthedocs.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 846702646..4b8048429 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -27,7 +27,7 @@ jobs: JOB_NAME: ${{ matrix.name || matrix.task-name }} name: ${{ matrix.name || matrix.task-name }} # The type of runner that the job will run on - runs-on: ${{ matrix.os || 'ubuntu-20.04' }} + runs-on: ${{ matrix.os || 'ubuntu-22.04' }} defaults: run: shell: ${{ matrix.shell || 'bash'}} @@ -35,7 +35,7 @@ jobs: fail-fast: false matrix: os: - - ubuntu-20.04 + - ubuntu-22.04 node-version: - "16" task-name: @@ -209,7 +209,7 @@ jobs: check: # This job does nothing and is only used for the branch protection if: always() - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: - test steps: diff --git a/.readthedocs.yml b/.readthedocs.yml index b5d59c711..02df7d732 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -23,7 +23,7 @@ submodules: recursive: true build: - os: ubuntu-20.04 + os: ubuntu-22.04 tools: python: >- # PyYAML parses it as float `3.1` it it's not an explicit string 3.10 From ec541633cb8da65019954d697ee039805e891e1a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Nov 2022 09:30:04 +0000 Subject: [PATCH 471/558] Bump subprocess-tee from 0.3.5 to 0.4.0 in /.config (#495) Bumps [subprocess-tee](https://github.com/pycontribs/subprocess-tee) from 0.3.5 to 0.4.0. - [Release notes](https://github.com/pycontribs/subprocess-tee/releases) - [Commits](https://github.com/pycontribs/subprocess-tee/compare/0.3.5...v0.4.0) --- updated-dependencies: - dependency-name: subprocess-tee dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 91135e89e..ae82552e6 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -73,7 +73,7 @@ sphinxcontrib-htmlhelp==2.0.0 sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==1.0.3 sphinxcontrib-serializinghtml==1.1.5 -subprocess-tee==0.3.5 +subprocess-tee==0.4.0 toml==0.10.2 tomli==2.0.1 tomlkit==0.11.0 From 500452f4895da127a7c67a44b7b17e0ba2cee0b8 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 29 Nov 2022 10:24:20 +0000 Subject: [PATCH 472/558] Update dependencies (#500) --- .pre-commit-config.yaml | 4 +- package-lock.json | 1506 +++++++++++++++++++++++---------------- package.json | 24 +- 3 files changed, 893 insertions(+), 641 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5c12b89d0..b74cbd44e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,12 +47,12 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.14.1 + rev: v6.15.0 hooks: - id: cspell name: Spell check with cspell - repo: https://github.com/pre-commit/pre-commit-hooks.git - rev: v4.3.0 + rev: v4.4.0 hooks: - id: end-of-file-fixer exclude: > diff --git a/package-lock.json b/package-lock.json index 35c362b95..ccd4639c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,31 +23,31 @@ "ansible-language-server": "bin/ansible-language-server" }, "devDependencies": { - "@types/chai": "^4.3.3", + "@types/chai": "^4.3.4", "@types/glob": "^8.0.0", "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.186", - "@types/mocha": "^10.0.0", - "@types/node": "^18.8.1", + "@types/lodash": "^4.14.190", + "@types/mocha": "^10.0.1", + "@types/node": "^18.11.9", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.71.0", - "@typescript-eslint/eslint-plugin": "^5.43.0", - "@typescript-eslint/parser": "^5.43.0", - "chai": "^4.3.6", + "@types/vscode": "^1.73.1", + "@typescript-eslint/eslint-plugin": "^5.45.0", + "@typescript-eslint/parser": "^5.45.0", + "chai": "^4.3.7", "eslint": "^8.28.0", "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", - "mocha": "^10.0.0", - "npm-check-updates": "^16.3.8", + "mocha": "^10.1.0", + "npm-check-updates": "^16.4.3", "nyc": "^15.1.0", - "prettier": "^2.7.1", + "prettier": "^2.8.0", "rimraf": "^3.0.2", "ts-node": "^10.9.1", - "typescript": "^4.8.4" + "typescript": "^4.9.3" }, "engines": { - "node": ">=12.0", + "node": ">=14.0", "npm": ">=7.11.2" } }, @@ -734,58 +734,73 @@ } }, "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dev": true, "dependencies": { - "@gar/promisify": "^1.1.3", "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/git": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", - "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.3.tgz", + "integrity": "sha512-8cXNkDIbnXPVbhXMmQ7/bklCAjtmPaXfI9aEM4iH+xSuEHINLMHhlfESvVwdqmHJRJkR48vNJTSUvoF6GRPSFA==", "dev": true, "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^2.0.2" + "which": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.1.tgz", + "integrity": "sha512-GIykAFdOVK31Q1/zAtT5MbxqQL2vyl9mvFJv+OGu01zxbhL3p0xc8gJjdNGX1mWmUT43aEKVO2L6V/2j4TOsAA==", "dev": true, "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "bin": { - "installed-package-contents": "index.js" + "installed-package-contents": "lib/index.js" }, "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/move-file": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "dependencies": { "mkdirp": "^1.0.4", @@ -796,40 +811,70 @@ } }, "node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/promise-spawn": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.1.tgz", + "integrity": "sha512-+hcUpxgx0vEpDJI9Cn+lkTdKLoqKBXFCVps5H7FujEU2vLOp6KwqjLlxbnz8Wzgm8oEqW/u5FeNAXSFjLdCD0A==", + "dev": true, + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", "dev": true, "dependencies": { - "infer-owner": "^1.0.4" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/run-script": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", - "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.0.tgz", + "integrity": "sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ==", "dev": true, "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@pnpm/network.ca-file": { @@ -927,9 +972,9 @@ } }, "node_modules/@types/chai": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", "dev": true }, "node_modules/@types/glob": { @@ -976,9 +1021,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.14.186", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", - "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", + "version": "4.14.190", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.190.tgz", + "integrity": "sha512-5iJ3FBJBvQHQ8sFhEhJfjUP+G+LalhavTkYyrAYqz5MEJG+erSv0k9KJLb6q7++17Lafk1scaTIFXcMJlwK8Mw==", "dev": true }, "node_modules/@types/minimatch": { @@ -988,15 +1033,15 @@ "dev": true }, "node_modules/@types/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-rADY+HtTOA52l9VZWtgQfn4p+UDVM2eDVkMZT1I6syp0YKxW2F9v+0pbRZLsvskhQv/vMb6ZfCay81GHbz5SHg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", "dev": true }, "node_modules/@types/node": { - "version": "18.8.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.1.tgz", - "integrity": "sha512-vuYaNuEIbOYLTLUAJh50ezEbvxrD43iby+lpUA2aa148Nh5kX/AVO/9m1Ahmbux2iU5uxJTNF9g2Y+31uml7RQ==", + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", "dev": true }, "node_modules/@types/responselike": { @@ -1021,20 +1066,20 @@ "dev": true }, "node_modules/@types/vscode": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.71.0.tgz", - "integrity": "sha512-nB50bBC9H/x2CpwW9FzRRRDrTZ7G0/POttJojvN/LiVfzTGfLyQIje1L1QRMdFXK9G41k5UJN/1B9S4of7CSzA==", + "version": "1.73.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.73.1.tgz", + "integrity": "sha512-eArfOrAoZVV+Ao9zQOCaFNaeXj4kTCD+bGS2gyNgIFZH9xVMuLMlRrEkhb22NyxycFWKV1UyTh03vhaVHmqVMg==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", - "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.0.tgz", + "integrity": "sha512-CXXHNlf0oL+Yg021cxgOdMHNTXD17rHkq7iW6RFHoybdFgQBjU3yIXhhcPpGwr1CjZlo6ET8C6tzX5juQoXeGA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/type-utils": "5.43.0", - "@typescript-eslint/utils": "5.43.0", + "@typescript-eslint/scope-manager": "5.45.0", + "@typescript-eslint/type-utils": "5.45.0", + "@typescript-eslint/utils": "5.45.0", "debug": "^4.3.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", @@ -1060,14 +1105,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", - "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.45.0.tgz", + "integrity": "sha512-brvs/WSM4fKUmF5Ot/gEve6qYiCMjm6w4HkHPfS6ZNmxTS0m0iNN4yOChImaCkqc1hRwFGqUyanMXuGal6oyyQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/scope-manager": "5.45.0", + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/typescript-estree": "5.45.0", "debug": "^4.3.4" }, "engines": { @@ -1087,13 +1132,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.45.0.tgz", + "integrity": "sha512-noDMjr87Arp/PuVrtvN3dXiJstQR1+XlQ4R1EvzG+NMgXi8CuMCXpb8JqNtFHKceVSQ985BZhfRdowJzbv4yKw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/visitor-keys": "5.45.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1104,13 +1149,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", - "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.45.0.tgz", + "integrity": "sha512-DY7BXVFSIGRGFZ574hTEyLPRiQIvI/9oGcN8t1A7f6zIs6ftbrU0nhyV26ZW//6f85avkwrLag424n+fkuoJ1Q==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.43.0", - "@typescript-eslint/utils": "5.43.0", + "@typescript-eslint/typescript-estree": "5.45.0", + "@typescript-eslint/utils": "5.45.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1131,9 +1176,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.45.0.tgz", + "integrity": "sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1144,13 +1189,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz", + "integrity": "sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/visitor-keys": "5.45.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1171,16 +1216,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", - "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.45.0.tgz", + "integrity": "sha512-OUg2JvsVI1oIee/SwiejTot2OxwU8a7UfTFMOdlhD2y+Hl6memUSL4s98bpUTo8EpVEr0lmwlU7JSu/p2QpSvA==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/scope-manager": "5.45.0", + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/typescript-estree": "5.45.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -1197,12 +1242,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz", + "integrity": "sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/types": "5.45.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1213,12 +1258,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1655,32 +1694,27 @@ } }, "node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.2.tgz", + "integrity": "sha512-rYUs2x4OjSgCQND7nTrh21AHIBFgd7s/ctAYvU3a8u+nK+R5YaX/SFPDYz4Azz7SGL6+6L9ZZWI4Kawpb7grzQ==", "dev": true, "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", + "@npmcli/fs": "^3.1.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", - "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "unique-filename": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/cacheable-lookup": { @@ -1784,14 +1818,14 @@ ] }, "node_modules/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^3.0.1", + "deep-eql": "^4.1.2", "get-func-name": "^2.0.0", "loupe": "^2.3.1", "pathval": "^1.1.1", @@ -2154,15 +2188,15 @@ } }, "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", + "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", "dev": true, "dependencies": { "type-detect": "^4.0.0" }, "engines": { - "node": ">=0.12" + "node": ">=6" } }, "node_modules/deep-extend": { @@ -3145,9 +3179,9 @@ } }, "node_modules/hosted-git-info": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", - "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "dependencies": { "lru-cache": "^7.5.1" @@ -3240,15 +3274,15 @@ } }, "node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.0.tgz", + "integrity": "sha512-bTf9UWe/UP1yxG3QUrj/KOvEhTAUWPcv+WvbFZ28LcqznXabp7Xu6o9y1JEC18+oqODuS7VhTpekV5XvFwsxJg==", "dev": true, "dependencies": { "minimatch": "^5.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/ignore-walk/node_modules/brace-expansion": { @@ -3336,9 +3370,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", - "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", + "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -3374,9 +3408,9 @@ } }, "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -3703,10 +3737,13 @@ "dev": true }, "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/json-parse-helpfulerror": { "version": "1.0.3", @@ -3873,9 +3910,9 @@ } }, "node_modules/lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", + "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", "dev": true, "engines": { "node": ">=12" @@ -3938,6 +3975,84 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -3988,9 +4103,9 @@ "dev": true }, "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "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" @@ -4100,12 +4215,11 @@ } }, "node_modules/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", + "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dev": true, "dependencies": { - "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", @@ -4260,9 +4374,9 @@ "dev": true }, "node_modules/node-gyp": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.2.0.tgz", - "integrity": "sha512-/+/YxGfIJOh/fnMsr4Ep0v6oOIjnO1BgLd2dcDspBX1spTkQU7xSIox5RdRE/2/Uq3ZwK8Z5swRIbMUmPlslmg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", + "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", "dev": true, "dependencies": { "env-paths": "^2.2.0", @@ -4337,18 +4451,30 @@ } }, "node_modules/normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "dependencies": { - "hosted-git-info": "^5.0.0", + "hosted-git-info": "^6.0.0", "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/normalize-path": { @@ -4373,21 +4499,24 @@ } }, "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-check-updates": { - "version": "16.3.8", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.8.tgz", - "integrity": "sha512-2CUeCWEs+arWQUJH2IEkiZU/Ak2fLBqGkMyM5JDkfnGhz1VHNe3yyGiXD+0JeVmjbXTEpgZ0t6C9VK52atGuAw==", + "version": "16.4.3", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.4.3.tgz", + "integrity": "sha512-kuTErUSd9DkJKU5Kf5nitkN4Yf8k41OJL/hudtRR+Rf9YaKJasLHHnQboQdEtbf6DFrqMzwxrPSX8p1engLLbQ==", "dev": true, "dependencies": { - "chalk": "^5.0.1", + "chalk": "^5.1.2", "cli-table": "^0.3.11", "commander": "^9.4.1", "fast-memoize": "^2.5.2", @@ -4396,25 +4525,26 @@ "get-stdin": "^8.0.0", "globby": "^11.0.4", "hosted-git-info": "^5.1.0", + "ini": "^3.0.1", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", "lodash": "^4.17.21", "minimatch": "^5.1.0", "p-map": "^4.0.0", - "pacote": "^13.6.2", + "pacote": "15.0.6", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts-ncu": "^2.5.1", - "rc-config-loader": "^4.1.0", + "rc-config-loader": "^4.1.1", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.7", + "semver": "^7.3.8", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", - "spawn-please": "^1.0.0", + "spawn-please": "^2.0.1", "untildify": "^4.0.0", "update-notifier": "^6.0.2", - "yaml": "^2.1.1" + "yaml": "^2.1.3" }, "bin": { "ncu": "build/src/bin/cli.js", @@ -4434,9 +4564,9 @@ } }, "node_modules/npm-check-updates/node_modules/chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -4458,126 +4588,149 @@ } }, "node_modules/npm-check-updates/node_modules/yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", "dev": true, "engines": { "node": ">= 14" } }, "node_modules/npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.0.0.tgz", + "integrity": "sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==", "dev": true, "dependencies": { "semver": "^7.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz", + "integrity": "sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/npm-package-arg": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", - "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.0.0.tgz", + "integrity": "sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==", "dev": true, "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-packlist": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "dev": true, "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "bin": { - "npm-packlist": "bin/index.js" + "lru-cache": "^7.5.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-packlist/node_modules/npm-bundled": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", + "node_modules/npm-packlist": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.2.tgz", + "integrity": "sha512-d2+7RMySjVXssww23rV5NuIq1NzGvM04OlI5kwnvtYKfFTAPVs6Zxmxns2HRtJEA1oNj7D/BbFXeVAOLmW3N3Q==", "dev": true, "dependencies": { - "npm-normalize-package-bin": "^2.0.0" + "ignore-walk": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-pick-manifest": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", - "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", + "node_modules/npm-registry-fetch": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.2.tgz", + "integrity": "sha512-TMenrMagFA9KF81E2bkS5XRyzERK4KXu70vgXt5+i8FcrFeLNgNsc6e5hekTqjDwPDkL3HGn/holWcXDMfnFgw==", "dev": true, "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" + "make-fetch-happen": "^11.0.0", + "minipass": "^3.1.6", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.1.tgz", + "integrity": "sha512-clv3IblugXn2CDUmqFhNzii3rjKa46u5wNeivc+QlLXkGI5FjLX3rGboo+y2kwf1pd8W0iDiC384cemeDtw9kw==", "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-registry-fetch": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", - "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.0.tgz", + "integrity": "sha512-NSx3k5gR4Q5Ts2poCM/19d45VwhVLBtJZ6ypYcthj2BwmDx/e7lW8Aadnyt3edd2W0ecb+b0o7FYLRYE2AGcQg==", "dev": true, "dependencies": { - "make-fetch-happen": "^10.0.6", "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, "node_modules/npmlog": { @@ -4917,38 +5070,34 @@ } }, "node_modules/pacote": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", - "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", + "version": "15.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.6.tgz", + "integrity": "sha512-dQwcz/sME7QIL+cdrw/jftQfMMXxSo17i2kJ/gnhBhUvvBAsxoBu1lw9B5IzCH/Ce8CvEkG/QYZ6txzKfn0bTw==", "dev": true, "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11" }, "bin": { "pacote": "lib/bin.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/parent-module": { @@ -5112,9 +5261,9 @@ } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", + "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -5127,12 +5276,12 @@ } }, "node_modules/proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/process-on-spawn": { @@ -5285,14 +5434,14 @@ } }, "node_modules/rc-config-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.0.tgz", - "integrity": "sha512-aW+kX4qy0CiM9L4fG4Us3oEOpIrOrXzWykAn+xldD07Y9PXWjTH744oHbv0Kc9ZwWaylw3jMjxaf14RgStrNrA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.1.tgz", + "integrity": "sha512-S10o85x/szboh7FOxUyU+KuED+gr9V7SEnUBOzSn+vd1K8J2MtkP1RCPWg8Sw5kkuZKr7976bFzacCM6QtAApQ==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "js-yaml": "^4.0.0", - "json5": "^2.1.2", + "debug": "^4.3.4", + "js-yaml": "^4.1.0", + "json5": "^2.2.1", "require-from-string": "^2.0.2" } }, @@ -5312,40 +5461,31 @@ } }, "node_modules/read-package-json": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", - "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.0.tgz", + "integrity": "sha512-b/9jxWJ8EwogJPpv99ma+QwtqB7FSl3+V6UXS7Aaay8/5VwMY50oIFooY1UKXMWpfNCM6T/PoGqa5GD1g9xf9w==", "dev": true, "dependencies": { "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.1.tgz", + "integrity": "sha512-8+HW7Yo+cjfF+md8DqsZHgats2mxf7gGYow/+2JjxrftoHFZz9v4dzd0EubzYbkNaLxrTVcnllHwklXN2+7aTQ==", "dev": true, "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/readable-stream": { @@ -5582,9 +5722,9 @@ "optional": true }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -5744,12 +5884,15 @@ } }, "node_modules/spawn-please": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-1.0.0.tgz", - "integrity": "sha512-Kz33ip6NRNKuyTRo3aDWyWxeGeM0ORDO552Fs6E1nj4pLWPkl37SrRtTnq+MEopVaqgmaO6bAvVS+v64BJ5M/A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-2.0.1.tgz", + "integrity": "sha512-W+cFbZR2q2mMTfjz5ZGvhBAiX+e/zczFCNlbS9mxiSdYswBXwUuBUT+a0urH+xZZa8f/bs0mXHyZsZHR9hKogA==", "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3" + }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/spawn-wrap": { @@ -5808,15 +5951,15 @@ "dev": true }, "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.0.tgz", + "integrity": "sha512-64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw==", "dev": true, "dependencies": { "minipass": "^3.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/string_decoder": { @@ -5908,9 +6051,9 @@ } }, "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.1.12", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", + "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", "dev": true, "dependencies": { "chownr": "^2.0.0", @@ -5921,7 +6064,7 @@ "yallist": "^4.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" } }, "node_modules/test-exclude": { @@ -6101,9 +6244,9 @@ } }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -6127,27 +6270,27 @@ } }, "node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "dependencies": { - "unique-slug": "^3.0.0" + "unique-slug": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-string": { @@ -6280,15 +6423,15 @@ } }, "node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { "builtins": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/vscode-jsonrpc": { @@ -7141,40 +7284,50 @@ } }, "@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dev": true, "requires": { - "@gar/promisify": "^1.1.3", "semver": "^7.3.5" } }, "@npmcli/git": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", - "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.3.tgz", + "integrity": "sha512-8cXNkDIbnXPVbhXMmQ7/bklCAjtmPaXfI9aEM4iH+xSuEHINLMHhlfESvVwdqmHJRJkR48vNJTSUvoF6GRPSFA==", "dev": true, "requires": { - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^2.0.2" + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.1.tgz", + "integrity": "sha512-GIykAFdOVK31Q1/zAtT5MbxqQL2vyl9mvFJv+OGu01zxbhL3p0xc8gJjdNGX1mWmUT43aEKVO2L6V/2j4TOsAA==", "dev": true, "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" } }, "@npmcli/move-file": { @@ -7188,31 +7341,53 @@ } }, "@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true }, "@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.1.tgz", + "integrity": "sha512-+hcUpxgx0vEpDJI9Cn+lkTdKLoqKBXFCVps5H7FujEU2vLOp6KwqjLlxbnz8Wzgm8oEqW/u5FeNAXSFjLdCD0A==", "dev": true, "requires": { - "infer-owner": "^1.0.4" + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "@npmcli/run-script": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", - "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.0.tgz", + "integrity": "sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ==", "dev": true, "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "@pnpm/network.ca-file": { @@ -7292,9 +7467,9 @@ } }, "@types/chai": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", "dev": true }, "@types/glob": { @@ -7341,9 +7516,9 @@ } }, "@types/lodash": { - "version": "4.14.186", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", - "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", + "version": "4.14.190", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.190.tgz", + "integrity": "sha512-5iJ3FBJBvQHQ8sFhEhJfjUP+G+LalhavTkYyrAYqz5MEJG+erSv0k9KJLb6q7++17Lafk1scaTIFXcMJlwK8Mw==", "dev": true }, "@types/minimatch": { @@ -7353,15 +7528,15 @@ "dev": true }, "@types/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-rADY+HtTOA52l9VZWtgQfn4p+UDVM2eDVkMZT1I6syp0YKxW2F9v+0pbRZLsvskhQv/vMb6ZfCay81GHbz5SHg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", "dev": true }, "@types/node": { - "version": "18.8.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.1.tgz", - "integrity": "sha512-vuYaNuEIbOYLTLUAJh50ezEbvxrD43iby+lpUA2aa148Nh5kX/AVO/9m1Ahmbux2iU5uxJTNF9g2Y+31uml7RQ==", + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", "dev": true }, "@types/responselike": { @@ -7386,20 +7561,20 @@ "dev": true }, "@types/vscode": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.71.0.tgz", - "integrity": "sha512-nB50bBC9H/x2CpwW9FzRRRDrTZ7G0/POttJojvN/LiVfzTGfLyQIje1L1QRMdFXK9G41k5UJN/1B9S4of7CSzA==", + "version": "1.73.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.73.1.tgz", + "integrity": "sha512-eArfOrAoZVV+Ao9zQOCaFNaeXj4kTCD+bGS2gyNgIFZH9xVMuLMlRrEkhb22NyxycFWKV1UyTh03vhaVHmqVMg==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", - "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.0.tgz", + "integrity": "sha512-CXXHNlf0oL+Yg021cxgOdMHNTXD17rHkq7iW6RFHoybdFgQBjU3yIXhhcPpGwr1CjZlo6ET8C6tzX5juQoXeGA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/type-utils": "5.43.0", - "@typescript-eslint/utils": "5.43.0", + "@typescript-eslint/scope-manager": "5.45.0", + "@typescript-eslint/type-utils": "5.45.0", + "@typescript-eslint/utils": "5.45.0", "debug": "^4.3.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", @@ -7409,53 +7584,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", - "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.45.0.tgz", + "integrity": "sha512-brvs/WSM4fKUmF5Ot/gEve6qYiCMjm6w4HkHPfS6ZNmxTS0m0iNN4yOChImaCkqc1hRwFGqUyanMXuGal6oyyQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/scope-manager": "5.45.0", + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/typescript-estree": "5.45.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.45.0.tgz", + "integrity": "sha512-noDMjr87Arp/PuVrtvN3dXiJstQR1+XlQ4R1EvzG+NMgXi8CuMCXpb8JqNtFHKceVSQ985BZhfRdowJzbv4yKw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/visitor-keys": "5.45.0" } }, "@typescript-eslint/type-utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", - "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.45.0.tgz", + "integrity": "sha512-DY7BXVFSIGRGFZ574hTEyLPRiQIvI/9oGcN8t1A7f6zIs6ftbrU0nhyV26ZW//6f85avkwrLag424n+fkuoJ1Q==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.43.0", - "@typescript-eslint/utils": "5.43.0", + "@typescript-eslint/typescript-estree": "5.45.0", + "@typescript-eslint/utils": "5.45.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.45.0.tgz", + "integrity": "sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz", + "integrity": "sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/visitor-keys": "5.45.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7464,37 +7639,31 @@ } }, "@typescript-eslint/utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", - "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.45.0.tgz", + "integrity": "sha512-OUg2JvsVI1oIee/SwiejTot2OxwU8a7UfTFMOdlhD2y+Hl6memUSL4s98bpUTo8EpVEr0lmwlU7JSu/p2QpSvA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/scope-manager": "5.45.0", + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/typescript-estree": "5.45.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" } }, "@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "version": "5.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz", + "integrity": "sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/types": "5.45.0", "eslint-visitor-keys": "^3.3.0" } }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -7806,29 +7975,24 @@ } }, "cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.2.tgz", + "integrity": "sha512-rYUs2x4OjSgCQND7nTrh21AHIBFgd7s/ctAYvU3a8u+nK+R5YaX/SFPDYz4Azz7SGL6+6L9ZZWI4Kawpb7grzQ==", "dev": true, "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", + "@npmcli/fs": "^3.1.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", - "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "unique-filename": "^3.0.0" } }, "cacheable-lookup": { @@ -7900,14 +8064,14 @@ "dev": true }, "chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^3.0.1", + "deep-eql": "^4.1.2", "get-func-name": "^2.0.0", "loupe": "^2.3.1", "pathval": "^1.1.1", @@ -8178,9 +8342,9 @@ } }, "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", + "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -8907,9 +9071,9 @@ "dev": true }, "hosted-git-info": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", - "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "requires": { "lru-cache": "^7.5.1" @@ -8984,9 +9148,9 @@ "dev": true }, "ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.0.tgz", + "integrity": "sha512-bTf9UWe/UP1yxG3QUrj/KOvEhTAUWPcv+WvbFZ28LcqznXabp7Xu6o9y1JEC18+oqODuS7VhTpekV5XvFwsxJg==", "dev": true, "requires": { "minimatch": "^5.0.1" @@ -9061,9 +9225,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", - "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", + "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==" }, "ip": { "version": "2.0.0", @@ -9090,9 +9254,9 @@ } }, "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "requires": { "has": "^1.0.3" @@ -9333,9 +9497,9 @@ "dev": true }, "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true }, "json-parse-helpfulerror": { @@ -9464,9 +9628,9 @@ "dev": true }, "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", + "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", "dev": true }, "make-dir": { @@ -9514,6 +9678,71 @@ "promise-retry": "^2.0.1", "socks-proxy-agent": "^7.0.0", "ssri": "^9.0.0" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + } } }, "merge2": { @@ -9554,9 +9783,9 @@ "dev": true }, "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -9637,12 +9866,11 @@ "dev": true }, "mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", + "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dev": true, "requires": { - "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", @@ -9765,9 +9993,9 @@ "dev": true }, "node-gyp": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.2.0.tgz", - "integrity": "sha512-/+/YxGfIJOh/fnMsr4Ep0v6oOIjnO1BgLd2dcDspBX1spTkQU7xSIox5RdRE/2/Uq3ZwK8Z5swRIbMUmPlslmg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", + "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", "dev": true, "requires": { "env-paths": "^2.2.0", @@ -9823,15 +10051,26 @@ } }, "normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "requires": { - "hosted-git-info": "^5.0.0", + "hosted-git-info": "^6.0.0", "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" + }, + "dependencies": { + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + } } }, "normalize-path": { @@ -9847,21 +10086,21 @@ "dev": true }, "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, "requires": { - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^3.0.0" } }, "npm-check-updates": { - "version": "16.3.8", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.8.tgz", - "integrity": "sha512-2CUeCWEs+arWQUJH2IEkiZU/Ak2fLBqGkMyM5JDkfnGhz1VHNe3yyGiXD+0JeVmjbXTEpgZ0t6C9VK52atGuAw==", + "version": "16.4.3", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.4.3.tgz", + "integrity": "sha512-kuTErUSd9DkJKU5Kf5nitkN4Yf8k41OJL/hudtRR+Rf9YaKJasLHHnQboQdEtbf6DFrqMzwxrPSX8p1engLLbQ==", "dev": true, "requires": { - "chalk": "^5.0.1", + "chalk": "^5.1.2", "cli-table": "^0.3.11", "commander": "^9.4.1", "fast-memoize": "^2.5.2", @@ -9870,25 +10109,26 @@ "get-stdin": "^8.0.0", "globby": "^11.0.4", "hosted-git-info": "^5.1.0", + "ini": "^3.0.1", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", "lodash": "^4.17.21", "minimatch": "^5.1.0", "p-map": "^4.0.0", - "pacote": "^13.6.2", + "pacote": "15.0.6", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts-ncu": "^2.5.1", - "rc-config-loader": "^4.1.0", + "rc-config-loader": "^4.1.1", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.7", + "semver": "^7.3.8", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", - "spawn-please": "^1.0.0", + "spawn-please": "^2.0.1", "untildify": "^4.0.0", "update-notifier": "^6.0.2", - "yaml": "^2.1.1" + "yaml": "^2.1.3" }, "dependencies": { "brace-expansion": { @@ -9901,9 +10141,9 @@ } }, "chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", "dev": true }, "minimatch": { @@ -9916,102 +10156,123 @@ } }, "yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", "dev": true } } }, "npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.0.0.tgz", + "integrity": "sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==", "dev": true, "requires": { "semver": "^7.1.1" } }, "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz", + "integrity": "sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==", "dev": true }, "npm-package-arg": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", - "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.0.0.tgz", + "integrity": "sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==", "dev": true, "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "npm-packlist": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" + "validate-npm-package-name": "^5.0.0" }, "dependencies": { - "npm-bundled": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "dev": true, "requires": { - "npm-normalize-package-bin": "^2.0.0" + "lru-cache": "^7.5.1" } - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true } } }, - "npm-pick-manifest": { + "npm-packlist": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", - "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.2.tgz", + "integrity": "sha512-d2+7RMySjVXssww23rV5NuIq1NzGvM04OlI5kwnvtYKfFTAPVs6Zxmxns2HRtJEA1oNj7D/BbFXeVAOLmW3N3Q==", "dev": true, "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", "semver": "^7.3.5" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } } }, "npm-registry-fetch": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", - "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.2.tgz", + "integrity": "sha512-TMenrMagFA9KF81E2bkS5XRyzERK4KXu70vgXt5+i8FcrFeLNgNsc6e5hekTqjDwPDkL3HGn/holWcXDMfnFgw==", "dev": true, "requires": { - "make-fetch-happen": "^10.0.6", + "make-fetch-happen": "^11.0.0", "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", + "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "dependencies": { + "make-fetch-happen": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.1.tgz", + "integrity": "sha512-clv3IblugXn2CDUmqFhNzii3rjKa46u5wNeivc+QlLXkGI5FjLX3rGboo+y2kwf1pd8W0iDiC384cemeDtw9kw==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.0.tgz", + "integrity": "sha512-NSx3k5gR4Q5Ts2poCM/19d45VwhVLBtJZ6ypYcthj2BwmDx/e7lW8Aadnyt3edd2W0ecb+b0o7FYLRYE2AGcQg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + } } }, "npmlog": { @@ -10272,31 +10533,27 @@ } }, "pacote": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", - "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", + "version": "15.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.6.tgz", + "integrity": "sha512-dQwcz/sME7QIL+cdrw/jftQfMMXxSo17i2kJ/gnhBhUvvBAsxoBu1lw9B5IzCH/Ce8CvEkG/QYZ6txzKfn0bTw==", "dev": true, "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11" } }, @@ -10412,15 +10669,15 @@ "dev": true }, "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", + "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==", "dev": true }, "proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true }, "process-on-spawn": { @@ -10543,45 +10800,37 @@ } }, "rc-config-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.0.tgz", - "integrity": "sha512-aW+kX4qy0CiM9L4fG4Us3oEOpIrOrXzWykAn+xldD07Y9PXWjTH744oHbv0Kc9ZwWaylw3jMjxaf14RgStrNrA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.1.tgz", + "integrity": "sha512-S10o85x/szboh7FOxUyU+KuED+gr9V7SEnUBOzSn+vd1K8J2MtkP1RCPWg8Sw5kkuZKr7976bFzacCM6QtAApQ==", "dev": true, "requires": { - "debug": "^4.1.1", - "js-yaml": "^4.0.0", - "json5": "^2.1.2", + "debug": "^4.3.4", + "js-yaml": "^4.1.0", + "json5": "^2.2.1", "require-from-string": "^2.0.2" } }, "read-package-json": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", - "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.0.tgz", + "integrity": "sha512-b/9jxWJ8EwogJPpv99ma+QwtqB7FSl3+V6UXS7Aaay8/5VwMY50oIFooY1UKXMWpfNCM6T/PoGqa5GD1g9xf9w==", "dev": true, "requires": { "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" } }, "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.1.tgz", + "integrity": "sha512-8+HW7Yo+cjfF+md8DqsZHgats2mxf7gGYow/+2JjxrftoHFZz9v4dzd0EubzYbkNaLxrTVcnllHwklXN2+7aTQ==", "dev": true, "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" } }, "readable-stream": { @@ -10750,9 +10999,9 @@ "optional": true }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -10876,10 +11125,13 @@ } }, "spawn-please": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-1.0.0.tgz", - "integrity": "sha512-Kz33ip6NRNKuyTRo3aDWyWxeGeM0ORDO552Fs6E1nj4pLWPkl37SrRtTnq+MEopVaqgmaO6bAvVS+v64BJ5M/A==", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-2.0.1.tgz", + "integrity": "sha512-W+cFbZR2q2mMTfjz5ZGvhBAiX+e/zczFCNlbS9mxiSdYswBXwUuBUT+a0urH+xZZa8f/bs0mXHyZsZHR9hKogA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3" + } }, "spawn-wrap": { "version": "2.0.0", @@ -10934,9 +11186,9 @@ "dev": true }, "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.0.tgz", + "integrity": "sha512-64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw==", "dev": true, "requires": { "minipass": "^3.1.1" @@ -11001,9 +11253,9 @@ } }, "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.1.12", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", + "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -11137,9 +11389,9 @@ } }, "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", "dev": true }, "uglify-js": { @@ -11150,18 +11402,18 @@ "optional": true }, "unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "requires": { - "unique-slug": "^3.0.0" + "unique-slug": "^4.0.0" } }, "unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, "requires": { "imurmurhash": "^0.1.4" @@ -11259,9 +11511,9 @@ } }, "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "requires": { "builtins": "^5.0.0" diff --git a/package.json b/package.json index aba4391c5..ab4fefb9f 100644 --- a/package.json +++ b/package.json @@ -59,28 +59,28 @@ "yaml": "^1.10.2 <2.0" }, "devDependencies": { - "@types/chai": "^4.3.3", + "@types/chai": "^4.3.4", "@types/glob": "^8.0.0", "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.186", - "@types/mocha": "^10.0.0", - "@types/node": "^18.8.1", + "@types/lodash": "^4.14.190", + "@types/mocha": "^10.0.1", + "@types/node": "^18.11.9", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.71.0", - "@typescript-eslint/eslint-plugin": "^5.43.0", - "@typescript-eslint/parser": "^5.43.0", - "chai": "^4.3.6", + "@types/vscode": "^1.73.1", + "@typescript-eslint/eslint-plugin": "^5.45.0", + "@typescript-eslint/parser": "^5.45.0", + "chai": "^4.3.7", "eslint": "^8.28.0", "eslint-config-prettier": "^8.5.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", - "mocha": "^10.0.0", - "npm-check-updates": "^16.3.8", + "mocha": "^10.1.0", + "npm-check-updates": "^16.4.3", "nyc": "^15.1.0", - "prettier": "^2.7.1", + "prettier": "^2.8.0", "rimraf": "^3.0.2", "ts-node": "^10.9.1", - "typescript": "^4.8.4" + "typescript": "^4.9.3" }, "scripts": { "clean": "rimraf out/server && rimraf lib", From 13e1ebbfec9293e3a21e2e45062b1f8e51d0d10f Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 29 Nov 2022 10:39:04 +0000 Subject: [PATCH 473/558] Improve testing output (#501) - disable chai truncation (ellipsis) - use tap reporter instead of default one because it includes total number of passed and failed tests and is flatter --- .mocharc.yml | 1 + test/rootMochaHooks.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.mocharc.yml b/.mocharc.yml index 42f2caa64..1042bc361 100644 --- a/.mocharc.yml +++ b/.mocharc.yml @@ -1,5 +1,6 @@ require: - ts-node/register - test/rootMochaHooks.ts +reporter: tap # more flat, also the only one that mentions totals for found, skipped and passed spec: './test/**/*.ts' timeout: 60000 # same as 60 seconds. This done to ensure that we have sufficient time to run tests on the CI as each test involves loading yaml files and docs library for ansible. diff --git a/test/rootMochaHooks.ts b/test/rootMochaHooks.ts index 6e4c8e62c..170560e5f 100644 --- a/test/rootMochaHooks.ts +++ b/test/rootMochaHooks.ts @@ -1,5 +1,8 @@ +import * as chai from "chai"; import { ConsoleOutput } from "./consoleOutput"; +chai.config.truncateThreshold = 0; // disable truncating + export const mochaHooks = (): Mocha.RootHookObject => { const consoleOutput = new ConsoleOutput(); From fac8acf906b21db0ef7aacf0ec096b4cb47e58a0 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 29 Nov 2022 11:32:08 +0000 Subject: [PATCH 474/558] Update CODEOWNERS (#505) --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ed325fcd2..01f2f8481 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,2 @@ # Global Owners -* @ansible/devtools @tomaciazek +* @ansible/devtools From ea4f819f7a57fa8b0b3d66d5df152ec5421d98da Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 29 Nov 2022 11:33:02 +0000 Subject: [PATCH 475/558] Reduce container name length (#504) This should make it easier to debug. --- .config/dictionary.txt | 1 - package-lock.json | 5 +++-- package.json | 1 - src/services/executionEnvironment.ts | 7 +++++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 3977cad17..3359b9eef 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -107,7 +107,6 @@ toxenv tsbuildinfo unshallow userdata -uuidv4 venvs vscodeignore vsix diff --git a/package-lock.json b/package-lock.json index ccd4639c5..138fe5de4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,6 @@ "glob": "^8.0.1", "ini": "^3.0.0", "lodash": "^4.17.21", - "uuid": "^8.3.2", "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.4", "vscode-uri": "^3.0.3", @@ -6402,6 +6401,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -11492,7 +11492,8 @@ "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true }, "v8-compile-cache-lib": { "version": "3.0.1", diff --git a/package.json b/package.json index ab4fefb9f..49d1afaea 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,6 @@ "glob": "^8.0.1", "ini": "^3.0.0", "lodash": "^4.17.21", - "uuid": "^8.3.2", "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.4", "vscode-uri": "^3.0.3", diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 1d348c3a1..92a088303 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -1,9 +1,9 @@ import * as child_process from "child_process"; +import * as crypto from "crypto"; import * as fs from "fs"; import * as path from "path"; import { URI } from "vscode-uri"; import { Connection } from "vscode-languageserver"; -import { v4 as uuidv4 } from "uuid"; import { AnsibleConfig } from "./ansibleConfig"; import { ImagePuller } from "../utils/imagePuller"; import { asyncExec } from "../utils/misc"; @@ -273,7 +273,10 @@ export class ExecutionEnvironment { containerCommand.push(containerOption); }); } - containerCommand.push(`--name ansible_language_server_${uuidv4()}`); + // lets minimize the container name to reduce the length of the command + // while keeping it legal https://stackoverflow.com/questions/27791913/ + const id = crypto.randomBytes(4).toString("ascii"); + containerCommand.push(`--name als_${id}`); containerCommand.push(this._container_image); containerCommand.push(command); const generatedCommand = containerCommand.join(" "); From f9aa8fdf139e62633aa21b9a63d19e6cbb742074 Mon Sep 17 00:00:00 2001 From: Sandra McCann Date: Tue, 29 Nov 2022 15:50:01 -0500 Subject: [PATCH 476/558] Remove als acronym from docs website title (#507) * remove ALS from docs title * remove line entirely * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 39b88e42f..0fb0bafb3 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -140,7 +140,7 @@ html_title = f"{project} Documentation" # A shorter title for the navigation bar. Default is the same as html_title. -html_short_title = "ALS Documentation" +# html_short_title = # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. From 79467078eb8356421125c405eefba41615c1ba2a Mon Sep 17 00:00:00 2001 From: Sandra McCann Date: Tue, 29 Nov 2022 16:38:18 -0500 Subject: [PATCH 477/558] Add note about task vs go-task (#509) * add note about task vs go-task * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/CONTRIBUTING.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 03e6057f8..ebfd1748c 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -6,11 +6,14 @@ To contribute, you'll need to: 2. Create a branch and push your changes there. -3. Run [task] and ensure it does pass. +3. Install and run [task] and ensure it does pass. 4. Send it to us as a PR. 5. Iterate on your PR, incorporating the requested improvements and participating in the discussions. +**_NOTE:_** On some operating systems, `task` may be another command, such as +`go-task`. + [task]: https://taskfile.dev/ From f5edbbdc2e5514e756404bc4da3ea7fa6ce664fb Mon Sep 17 00:00:00 2001 From: Sandra McCann Date: Sun, 4 Dec 2022 05:49:01 -0500 Subject: [PATCH 478/558] Make community projects use Ansible teal (#508) --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 0fb0bafb3..bb8e39b09 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -110,7 +110,7 @@ html_theme_options = { "collapse_navigation": False, "analytics_id": "", - "style_nav_header_background": "#ff5850", # #5bbdbf + "style_nav_header_background": "#5bbdbf", "style_external_links": True, "canonical_url": f"https://{github_repo_name}.readthedocs.io/en/latest/", "vcs_pageview_mode": "edit", From 5b913737bd455f6fa1351bceeee228eea576b718 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 7 Dec 2022 15:20:12 +0000 Subject: [PATCH 479/558] Correct rebuild file patterns (#514) --- Taskfile.yml | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/Taskfile.yml b/Taskfile.yml index 330ab4365..c634e433e 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -63,7 +63,7 @@ tasks: - .config/requirements.* - setup.cfg - tools/test-setup.sh - - .config/ + - .config/**/*.* generates: - out/log/manifest.yml build: @@ -75,7 +75,8 @@ tasks: sources: - package-lock.json - package.json - - src/ + - src/**/*.* + - test/**/*.* - tsconfig.json - webpack.config.js deps: @@ -101,21 +102,21 @@ tasks: silent: true sources: - "*.*" - - .config - - .github - - .vscode - - doc - - images - - src - - test - - tools + - .config/**/*.* + - .github/**/*.* + - .vscode/**/*.* + - doc/**/*.* + - images/**/*.* + - src/**/*.* + - test/**/*.* + - tools/**/*.* test: desc: Run all tests vars: ENGINE: - sh: bash -c "command -v podman docker | head -n 1" + sh: bash -c "command -v docker | head -n 1" deps: - - setup + - build cmds: - "{{.ENGINE}} pull ghcr.io/ansible/creator-ee:latest" # Tests that container engine is functional and that we have the image: @@ -161,7 +162,7 @@ tasks: - CHANGELOG.md - README.md - package*.json - - out/ + - out/**/*.* generates: - "*.vsix" cmds: From b7dbdb4d4292681d3c9717d18a034397d9c378ac Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 7 Dec 2022 15:34:19 +0000 Subject: [PATCH 480/558] Correct container name (#515) --- src/services/executionEnvironment.ts | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 92a088303..a675a7402 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -24,6 +24,7 @@ export class ExecutionEnvironment { private settingsVolumeMounts: string[] = []; private settingsContainerOptions: string; private _container_engine: IContainerEngine; + private _container_name: string; private _container_image: string; private _container_image_id: string; private _container_volume_mounts: Array; @@ -44,6 +45,10 @@ export class ExecutionEnvironment { return; } this._container_image = this.settings.executionEnvironment.image; + // We minimize the container name to reduce the length of the command + // while keeping it legal https://stackoverflow.com/questions/27791913/ + // note that both base64 and ascii do not produce valid names. + this._container_name = `als-${crypto.randomBytes(2).toString("hex")}`; this._container_engine = this.settings.executionEnvironment.containerEngine; this._container_volume_mounts = @@ -84,10 +89,6 @@ export class ExecutionEnvironment { ); return; } - const containerName = `${this._container_image.replace( - /[^a-z0-9]/gi, - "_", - )}`; let progressTracker; try { @@ -99,10 +100,10 @@ export class ExecutionEnvironment { }) .trim(); const hostCacheBasePath = path.resolve( - `${process.env.HOME}/.cache/ansible-language-server/${containerName}/${this._container_image_id}`, + `${process.env.HOME}/.cache/ansible-language-server/${this._container_name}/${this._container_image_id}`, ); - const isContainerRunning = this.runContainer(containerName); + const isContainerRunning = this.runContainer(this._container_name); if (!isContainerRunning) { return; } @@ -138,7 +139,7 @@ export class ExecutionEnvironment { ); ansibleConfig.collections_paths = await this.copyPluginDocFiles( hostCacheBasePath, - containerName, + this._container_name, ansibleConfig.collections_paths, "ansible_collections", ); @@ -158,7 +159,7 @@ export class ExecutionEnvironment { // Copy builtin plugins await this.copyPluginDocFiles( hostCacheBasePath, - containerName, + this._container_name, builtin_plugin_locations, "/", ); @@ -166,7 +167,7 @@ export class ExecutionEnvironment { // Copy builtin modules ansibleConfig.module_locations = await this.copyPluginDocFiles( hostCacheBasePath, - containerName, + this._container_name, ansibleConfig.module_locations, "/", ); @@ -188,7 +189,7 @@ export class ExecutionEnvironment { if (progressTracker) { progressTracker.done(); } - this.cleanUpContainer(containerName); + this.cleanUpContainer(this._container_name); } } @@ -273,10 +274,7 @@ export class ExecutionEnvironment { containerCommand.push(containerOption); }); } - // lets minimize the container name to reduce the length of the command - // while keeping it legal https://stackoverflow.com/questions/27791913/ - const id = crypto.randomBytes(4).toString("ascii"); - containerCommand.push(`--name als_${id}`); + containerCommand.push(`--name=${this._container_name}`); containerCommand.push(this._container_image); containerCommand.push(command); const generatedCommand = containerCommand.join(" "); From b0f2eb7c7dbc49f5148b19418399d851d435a89d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Dec 2022 17:20:35 +0000 Subject: [PATCH 481/558] Bump ansible-core from 2.13.5 to 2.14.0 in /.config (#485) Bumps [ansible-core](https://github.com/ansible/ansible) from 2.13.5 to 2.14.0. - [Release notes](https://github.com/ansible/ansible/releases) - [Commits](https://github.com/ansible/ansible/compare/v2.13.5...v2.14.0) --- updated-dependencies: - dependency-name: ansible-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index ae82552e6..e86e114e5 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,6 +1,6 @@ alabaster==0.7.12 ansible-compat==2.2.5 -ansible-core==2.13.5 +ansible-core==2.14.0 ansible-lint==6.8.6 ansible-pygments==0.1.1 astroid==2.11.6 From 0c4b5cf264856ddb5f9bdea0f45346b09b245bad Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 7 Dec 2022 17:26:03 +0000 Subject: [PATCH 482/558] chore: pre-commit autoupdate (#512) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/streetsidesoftware/cspell-cli: v6.15.0 → v6.16.0](https://github.com/streetsidesoftware/cspell-cli/compare/v6.15.0...v6.16.0) - [github.com/pre-commit/mirrors-eslint: v8.28.0 → v8.29.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.28.0...v8.29.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b74cbd44e..12647572b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,7 +47,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.15.0 + rev: v6.16.0 hooks: - id: cspell name: Spell check with cspell @@ -96,7 +96,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.28.0 + rev: v8.29.0 hooks: - id: eslint args: From 067c677104dfc4bb3e39dbf63878bf1ea80195ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Dec 2022 17:26:31 +0000 Subject: [PATCH 483/558] Bump ansible-compat from 2.2.5 to 2.2.6 in /.config (#510) Bumps [ansible-compat](https://github.com/ansible/ansible-compat) from 2.2.5 to 2.2.6. - [Release notes](https://github.com/ansible/ansible-compat/releases) - [Commits](https://github.com/ansible/ansible-compat/compare/v2.2.5...v2.2.6) --- updated-dependencies: - dependency-name: ansible-compat dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index e86e114e5..09fdd5905 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,5 +1,5 @@ alabaster==0.7.12 -ansible-compat==2.2.5 +ansible-compat==2.2.6 ansible-core==2.14.0 ansible-lint==6.8.6 ansible-pygments==0.1.1 From 15d4b251c50e6b591e0211a46e7d77a7c25f7fdf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Dec 2022 17:44:37 +0000 Subject: [PATCH 484/558] Bump ansible-core from 2.14.0 to 2.14.1 in /.config (#516) Bumps [ansible-core](https://github.com/ansible/ansible) from 2.14.0 to 2.14.1. - [Release notes](https://github.com/ansible/ansible/releases) - [Commits](https://github.com/ansible/ansible/compare/v2.14.0...v2.14.1) --- updated-dependencies: - dependency-name: ansible-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 09fdd5905..659b7f9a5 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,6 +1,6 @@ alabaster==0.7.12 ansible-compat==2.2.6 -ansible-core==2.14.0 +ansible-core==2.14.1 ansible-lint==6.8.6 ansible-pygments==0.1.1 astroid==2.11.6 From fe2f8e27bc272f5a2a457c76b9c6a7e47b2e0e6c Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 19 Dec 2022 15:47:55 +0000 Subject: [PATCH 485/558] Use specific OS versions during testing (#524) --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/task.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index c2b264be9..f1d9e82f7 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -11,7 +11,7 @@ jobs: name: Create release PR environment: name: release - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4644e159b..fef740041 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -10,7 +10,7 @@ jobs: name: Publish to npmjs.com environment: name: publish - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 4b8048429..2353ac0de 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -55,7 +55,7 @@ jobs: # runner does not support running container task-name: test-without-ee # https://github.com/actions/virtual-environments/issues/5151 - os: windows-2019 + os: windows-2022 shell: "wsl-bash {0}" - name: test-without-ee (macos) os: macos-11 From 196fcbe518c532896a312c63a6deb1c56a1de205 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Dec 2022 17:36:35 +0000 Subject: [PATCH 486/558] Bump lxml from 4.9.1 to 4.9.2 in /.config (#520) Bumps [lxml](https://github.com/lxml/lxml) from 4.9.1 to 4.9.2. - [Release notes](https://github.com/lxml/lxml/releases) - [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt) - [Commits](https://github.com/lxml/lxml/compare/lxml-4.9.1...lxml-4.9.2) --- updated-dependencies: - dependency-name: lxml dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .config/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/requirements.txt b/.config/requirements.txt index 659b7f9a5..d4d727051 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -28,7 +28,7 @@ jinja2==3.1.2 jsonschema==4.16.0 lazy-object-proxy==1.7.1 linkify-it-py==2.0.0 -lxml==4.9.1 +lxml==4.9.2 markdown-it-py==2.0.1 markupsafe==2.0.1 mccabe==0.6.1 From 4231be15c02117baa5da77900a8f43c305256201 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 20 Dec 2022 09:13:12 +0000 Subject: [PATCH 487/558] Replace internal constraint file with the one from creator-ee (#525) --- .config/Containerfile | 5 +++ .config/dictionary.txt | 1 + .config/requirements.in | 2 +- .config/requirements.txt | 91 -------------------------------------- .github/dependabot.yml | 24 +++------- .github/workflows/task.yml | 4 +- Taskfile.yml | 7 +-- cspell.config.yaml | 2 - tools/get-image-version | 9 ++++ tools/test-setup.sh | 9 ++-- 10 files changed, 34 insertions(+), 120 deletions(-) create mode 100644 .config/Containerfile delete mode 100644 .config/requirements.txt create mode 100755 tools/get-image-version diff --git a/.config/Containerfile b/.config/Containerfile new file mode 100644 index 000000000..ad9bad2d4 --- /dev/null +++ b/.config/Containerfile @@ -0,0 +1,5 @@ +FROM quay.io/ansible/creator-ee:v0.11.0 as DEFAULT_EE +# This file is updated by dependabot and used to determine not only which +# version of creator-ee we are supposed to use for testing execution +# environments but also to dynamically retrieve the same set of constraints +# for testing outside execution environments. diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 3359b9eef..f5e17658d 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -1,4 +1,5 @@ Ansible +Containerfile Dpkg FQCN FQCNs diff --git a/.config/requirements.in b/.config/requirements.in index ec24a3ac1..5df337e6a 100644 --- a/.config/requirements.in +++ b/.config/requirements.in @@ -1,5 +1,5 @@ # testing and linting -ansible-core>=2.13.0b2 +ansible-core>=2.13.0 ansible-lint>=6.8.1 # end-of dependencies for which we allow pre-releases click diff --git a/.config/requirements.txt b/.config/requirements.txt deleted file mode 100644 index d4d727051..000000000 --- a/.config/requirements.txt +++ /dev/null @@ -1,91 +0,0 @@ -alabaster==0.7.12 -ansible-compat==2.2.6 -ansible-core==2.14.1 -ansible-lint==6.8.6 -ansible-pygments==0.1.1 -astroid==2.11.6 -attrs==21.4.0 -babel==2.9.1 -black==22.8.0 -bracex==2.2.1 -certifi==2021.10.8 -cffi==1.15.0 -cfgv==3.3.1 -charset-normalizer==2.0.12 -click==8.1.3 -commonmark==0.9.1 -cryptography==36.0.2 -dill==0.3.5.1 -distlib==0.3.4 -docutils==0.17.1 -filelock==3.6.0 -flake8==4.0.1 -identify==2.4.11 -idna==3.3 -imagesize==1.3.0 -isort==5.10.1 -jinja2==3.1.2 -jsonschema==4.16.0 -lazy-object-proxy==1.7.1 -linkify-it-py==2.0.0 -lxml==4.9.2 -markdown-it-py==2.0.1 -markupsafe==2.0.1 -mccabe==0.6.1 -mdit-py-plugins==0.3.0 -mdurl==0.1.0 -mypy==0.961 -mypy-extensions==0.4.3 -myst-parser==0.18.0 -nodeenv==1.6.0 -packaging==21.3 -pathspec==0.9.0 -pbr==5.8.1 -pep517==0.12.0 -pip-tools==6.6.2 -platformdirs==2.5.1 -pre-commit==2.20.0 -pycodestyle==2.8.0 -pycparser==2.21 -pyflakes==2.4.0 -pygments==2.11.2 -pylint==2.14.2 -pyparsing==3.0.9 -pyrsistent==0.18.1 -pytz==2022.1 -pyyaml==6.0 -requests==2.27.1 -resolvelib==0.5.4 -rich==12.0.0 -ruamel-yaml==0.17.21 -setuptools-scm==6.4.2 -six==1.16.0 -snowballstemmer==2.2.0 -sphinx==5.0.2 -sphinx-ansible-theme==0.9.1 -sphinx-favicon==0.2 -sphinx-notfound-page==0.8 -sphinx-rtd-theme==1.0.0 -sphinxcontrib-apidoc==0.3.0 -sphinxcontrib-applehelp==1.0.2 -sphinxcontrib-devhelp==1.0.2 -sphinxcontrib-htmlhelp==2.0.0 -sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.3 -sphinxcontrib-serializinghtml==1.1.5 -subprocess-tee==0.4.0 -toml==0.10.2 -tomli==2.0.1 -tomlkit==0.11.0 -typing-extensions==4.1.1 -uc-micro-py==1.0.1 -urllib3==1.26.9 -virtualenv==20.13.3 -wcmatch==8.3 -wheel==0.37.1 -wrapt==1.14.1 -yamllint==1.28.0 - -# The following packages are considered to be unsafe in a requirements file: -# pip -# setuptools diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 01ed73ad4..a34ffad5a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,22 +9,12 @@ updates: labels: - "dependencies" - "skip-changelog" - - package-ecosystem: "pip" - directory: "/.config" + - package-ecosystem: docker + # We use this file to load the last known good versions of creator-ee and + # constraints. + directory: .config/ schedule: - interval: "daily" + interval: daily labels: - - "dependencies" - - "skip-changelog" - open-pull-requests-limit: 3 - allow: - # tell dependabot to update only important dependencies, not indirect ones - - dependency-name: ansible-compat - - dependency-name: ansible-core - - dependency-name: ansible-lint - - dependency-name: click - - dependency-name: lxml - - dependency-name: pre-commit - - dependency-name: pyparsing - - dependency-name: subprocess-tee - - dependency-name: yamllint + - dependencies + - skip-changelog diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 2353ac0de..236d30237 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -116,7 +116,7 @@ jobs: ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles( 'package.json', 'package-lock.json', - '.config/requirements.txt' + '.config/Containerfile' ) }} - name: Enable caching for podman-machine @@ -126,7 +126,7 @@ jobs: path: | ~/.local/share/containers ~/.config/containers - key: ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles('package.json', 'yarn.lock', '.config/requirements.txt', '**/Taskfile.yml', 'tools/*.*') }} + key: ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles('package.json', 'yarn.lock', '.config/Containerfile', '**/Taskfile.yml', 'tools/*.*') }} - name: Install Task if: "!contains(matrix.shell, 'wsl')" diff --git a/Taskfile.yml b/Taskfile.yml index c634e433e..f1450d33d 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -12,6 +12,8 @@ vars: [ -z "$NVM_DIR" ] && export NVM_DIR="$HOME/.nvm"; [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" --silent; [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"; + EE_VERSION: + sh: ./tools/get-image-version tasks: default: desc: Run most commands @@ -84,7 +86,6 @@ tasks: deps: - setup cmds: - - bash -c "PIP_CONSTRAINTS= $VIRTUAL_ENV/bin/python -m piptools compile -q --no-header --strip-extras --no-annotate .config/requirements.in -o .config/requirements.txt" - $VIRTUAL_ENV/bin/python -m pre_commit autoupdate # bumps some developments dependencies - npx ncu -u --dep dev @@ -118,9 +119,9 @@ tasks: deps: - build cmds: - - "{{.ENGINE}} pull ghcr.io/ansible/creator-ee:latest" + - "{{.ENGINE}} pull ghcr.io/ansible/creator-ee:{{ .EE_VERSION }}" # Tests that container engine is functional and that we have the image: - - "{{.ENGINE}} run -i ghcr.io/ansible/creator-ee:latest ansible-lint --version" + - "{{.ENGINE}} run -i ghcr.io/ansible/creator-ee:{{ .EE_VERSION }} ansible-lint --version" - > source $VIRTUAL_ENV/bin/activate && command -v ansible-lint && diff --git a/cspell.config.yaml b/cspell.config.yaml index 28f88e1b2..cc013279e 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -12,8 +12,6 @@ dictionaries: - "!backwards-compatibility" - "!cryptocurrencies" - "!cpp" -ignorePaths: - - .config/requirements.txt ignoreRegExpList: # ignore github usernames like @foo - "@[\\w]+" diff --git a/tools/get-image-version b/tools/get-image-version new file mode 100755 index 000000000..8a754d882 --- /dev/null +++ b/tools/get-image-version @@ -0,0 +1,9 @@ +#!/usr/bin/env python3 +version = "latest" +# read image version from dockerfile +with open(".config/Containerfile", "r") as f: + for line in f: + if line.startswith("FROM"): + version = line.split()[1].split()[0].split(":")[1] + break +print(version, end="") diff --git a/tools/test-setup.sh b/tools/test-setup.sh index a756226c3..105239426 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -5,7 +5,7 @@ # (cspell: disable-next-line) set -exuo pipefail -IMAGE=ghcr.io/ansible/creator-ee:latest +IMAGE=ghcr.io/ansible/creator-ee:$(./tools/get-image-version) PIP_LOG_FILE=out/log/pip.log HOSTNAME="${HOSTNAME:-localhost}" ERR=0 @@ -178,9 +178,10 @@ fi python3 -m pip install -q -U pip +EE_VERSION=$(./tools/get-image-version) if [[ $(uname || true) != MINGW* ]]; then # if we are not on pure Windows python3 -m pip install \ - -c .config/requirements.txt -r .config/requirements.in + -c "https://raw.githubusercontent.com/ansible/creator-ee/${EE_VERSION}/_build/requirements.txt" -r .config/requirements.in fi # GHA failsafe only: ensure ansible and ansible-lint cannot be found anywhere @@ -269,9 +270,9 @@ if [[ "${PODMAN_VERSION}" != 'null' ]] && [[ "${SKIP_PODMAN:-}" != '1' ]]; then podman pull --quiet "${IMAGE}" >/dev/null # without running we will never be sure it works (no arm64 image yet) EE_ANSIBLE_VERSION=$(get_version \ - podman run -i ${IMAGE} ansible --version) + podman run -i "${IMAGE}" ansible --version) EE_ANSIBLE_LINT_VERSION=$(get_version \ - podman run -i ${IMAGE} ansible-lint --version) + podman run -i "${IMAGE}" ansible-lint --version) fi # Create a build manifest so we can compare between builds and machines, this From c778792bca54116eae3f9a71b6a51663c8e2c96b Mon Sep 17 00:00:00 2001 From: ansibot Date: Tue, 20 Dec 2022 12:51:58 +0100 Subject: [PATCH 488/558] Release v1.0.3 (#526) ## v1.0.3 ### Bugfixes - Correct container name (#515) @ssbarnea - Add note about task vs go-task (#509) @samccann - Remove als acronym from docs website title (#507) @samccann - Isolate container caching from others (#492) @ssbarnea - Update docs url (#494) @ssbarnea - Make node 14 minimal version required (#491) @ssbarnea - Use ghcr.io instead of quay.io as default registry (#489) @ssbarnea Co-authored-by: Ansible DevTools --- CHANGELOG.md | 12 ++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 361764f28..0333c459a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,18 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v1.0.3 + +### Bugfixes + +- Correct container name (#515) @ssbarnea +- Add note about task vs go-task (#509) @samccann +- Remove als acronym from docs website title (#507) @samccann +- Isolate container caching from others (#492) @ssbarnea +- Update docs url (#494) @ssbarnea +- Make node 14 minimal version required (#491) @ssbarnea +- Use ghcr.io instead of quay.io as default registry (#489) @ssbarnea + ## v1.0.2 ### Bugfixes diff --git a/package-lock.json b/package-lock.json index 138fe5de4..bb82adefb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "1.0.2", + "version": "1.0.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "1.0.2", + "version": "1.0.3", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 49d1afaea..07d58fb12 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "1.0.2", + "version": "1.0.3", "contributors": [ { "name": "Tomasz Maciążek", From eedcb0471b81ef91f9d3c1540dd74cd57bd9d2f2 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 20 Dec 2022 12:03:08 +0000 Subject: [PATCH 489/558] Reconfigure release drafter version prefix (#527) --- .github/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 226d169ce..8d4243541 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -13,7 +13,7 @@ _extends: ansible-community/devtools # * publish to npm # * create the correct tag (already present in package.json) # * edit the release to point it the new tag instead of the -next.0 one -tag-template: 'v$RESOLVED_VERSION-next.0' +tag-template: 'v$RESOLVED_VERSION' # instead of 2x# we use 3x to make the outcome ready to embed into CHANGELOG.md category-template: '### $TITLE' template: '$CHANGES' From b98e9b2a4f4875181c08e732d16f372fdd42754f Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 27 Dec 2022 11:26:14 +0000 Subject: [PATCH 490/558] Avoid installing podman/docker on macos (#531) --- .github/workflows/task.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 236d30237..724007d21 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -25,6 +25,8 @@ jobs: env: # to expose matrix job name to steps, which is not possible with expansions JOB_NAME: ${{ matrix.name || matrix.task-name }} + SKIP_PODMAN: ${{ matrix.skip_podman || '0' }} + SKIP_DOCKER: ${{ matrix.skip_docker || '0' }} name: ${{ matrix.name || matrix.task-name }} # The type of runner that the job will run on runs-on: ${{ matrix.os || 'ubuntu-22.04' }} @@ -61,6 +63,8 @@ jobs: os: macos-11 # runner does not support running container task-name: test-without-ee + skip_docker: "1" + skip_podman: "1" steps: - name: Disable autocrlf From ea64ac92799d9037464ebbece23dc9e5489970b5 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Tue, 27 Dec 2022 22:25:52 +0530 Subject: [PATCH 491/558] Fix intermittent EE test failures (#533) * Fix intermittent EE test failures * Add debug command output in CI * More logs * add tmate on failure * Revert the partial changes in previous commit * Revert https://github.com/ansible/ansible-language-server/pull/515 * Revert https://github.com/ansible/ansible-language-server/pull/504 * fix lint issue * update package.json --- .config/dictionary.txt | 2 ++ .github/workflows/task.yml | 6 ++++++ package-lock.json | 5 ++--- package.json | 1 + src/services/executionEnvironment.ts | 25 ++++++++++++------------- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index f5e17658d..9226a9dea 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -108,6 +108,7 @@ toxenv tsbuildinfo unshallow userdata +uuidv4 venvs vscodeignore vsix @@ -144,6 +145,7 @@ ganeshrn hbenl kimbernator koalaman +mxschmitt priyamsahoo ssbarnea timonwong diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 724007d21..4fa84875e 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -176,6 +176,12 @@ jobs: - name: task ${{ matrix.task-name }} run: task -v ${{ matrix.task-name }} + ### Uncomment to hold the runner node for debugging + # - uses: actions/checkout@v2 + # - name: Setup tmate session + # if: ${{ failure() }} + # uses: mxschmitt/action-tmate@v3 + - name: Gather logs if: ${{ always() }} run: | diff --git a/package-lock.json b/package-lock.json index bb82adefb..f131541d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "glob": "^8.0.1", "ini": "^3.0.0", "lodash": "^4.17.21", + "uuid": "^8.3.2", "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.4", "vscode-uri": "^3.0.3", @@ -6401,7 +6402,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -11492,8 +11492,7 @@ "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache-lib": { "version": "3.0.1", diff --git a/package.json b/package.json index 07d58fb12..4eacc4333 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "glob": "^8.0.1", "ini": "^3.0.0", "lodash": "^4.17.21", + "uuid": "^8.3.2", "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.4", "vscode-uri": "^3.0.3", diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index a675a7402..0fee3ac4e 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -1,9 +1,9 @@ import * as child_process from "child_process"; -import * as crypto from "crypto"; import * as fs from "fs"; import * as path from "path"; import { URI } from "vscode-uri"; import { Connection } from "vscode-languageserver"; +import { v4 as uuidv4 } from "uuid"; import { AnsibleConfig } from "./ansibleConfig"; import { ImagePuller } from "../utils/imagePuller"; import { asyncExec } from "../utils/misc"; @@ -24,7 +24,6 @@ export class ExecutionEnvironment { private settingsVolumeMounts: string[] = []; private settingsContainerOptions: string; private _container_engine: IContainerEngine; - private _container_name: string; private _container_image: string; private _container_image_id: string; private _container_volume_mounts: Array; @@ -45,10 +44,6 @@ export class ExecutionEnvironment { return; } this._container_image = this.settings.executionEnvironment.image; - // We minimize the container name to reduce the length of the command - // while keeping it legal https://stackoverflow.com/questions/27791913/ - // note that both base64 and ascii do not produce valid names. - this._container_name = `als-${crypto.randomBytes(2).toString("hex")}`; this._container_engine = this.settings.executionEnvironment.containerEngine; this._container_volume_mounts = @@ -89,6 +84,10 @@ export class ExecutionEnvironment { ); return; } + const containerName = `${this._container_image.replace( + /[^a-z0-9]/gi, + "_", + )}`; let progressTracker; try { @@ -100,10 +99,10 @@ export class ExecutionEnvironment { }) .trim(); const hostCacheBasePath = path.resolve( - `${process.env.HOME}/.cache/ansible-language-server/${this._container_name}/${this._container_image_id}`, + `${process.env.HOME}/.cache/ansible-language-server/${containerName}/${this._container_image_id}`, ); - const isContainerRunning = this.runContainer(this._container_name); + const isContainerRunning = this.runContainer(containerName); if (!isContainerRunning) { return; } @@ -139,7 +138,7 @@ export class ExecutionEnvironment { ); ansibleConfig.collections_paths = await this.copyPluginDocFiles( hostCacheBasePath, - this._container_name, + containerName, ansibleConfig.collections_paths, "ansible_collections", ); @@ -159,7 +158,7 @@ export class ExecutionEnvironment { // Copy builtin plugins await this.copyPluginDocFiles( hostCacheBasePath, - this._container_name, + containerName, builtin_plugin_locations, "/", ); @@ -167,7 +166,7 @@ export class ExecutionEnvironment { // Copy builtin modules ansibleConfig.module_locations = await this.copyPluginDocFiles( hostCacheBasePath, - this._container_name, + containerName, ansibleConfig.module_locations, "/", ); @@ -189,7 +188,7 @@ export class ExecutionEnvironment { if (progressTracker) { progressTracker.done(); } - this.cleanUpContainer(this._container_name); + this.cleanUpContainer(containerName); } } @@ -274,7 +273,7 @@ export class ExecutionEnvironment { containerCommand.push(containerOption); }); } - containerCommand.push(`--name=${this._container_name}`); + containerCommand.push(`--name als_${uuidv4()}`); containerCommand.push(this._container_image); containerCommand.push(command); const generatedCommand = containerCommand.join(" "); From e204ebf551065aa2ac4e34f219e6deb0143d2b09 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Tue, 27 Dec 2022 23:22:05 +0530 Subject: [PATCH 492/558] Modify package version info in meta-data (#530) * segregate ansible-lint version info * remove prefixes in the version values * add debug statements to investigate CI failures * add debug statement in the workflow code * remove debug logs --- src/utils/getAnsibleMetaData.ts | 37 ++++++++++++++++++++++----- test/utils/getAnsibleMetaData.test.ts | 11 ++++---- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/utils/getAnsibleMetaData.ts b/src/utils/getAnsibleMetaData.ts index c4abe07a6..fef235172 100644 --- a/src/utils/getAnsibleMetaData.ts +++ b/src/utils/getAnsibleMetaData.ts @@ -76,13 +76,17 @@ async function getAnsibleInfo() { return ansibleInfo; } - let ansibleVersion; + let ansibleCoreVersion; if (ansibleVersionObjKeys[0].includes(" [")) { - ansibleVersion = ansibleVersionObjKeys[0].split(" ["); + ansibleCoreVersion = ansibleVersionObjKeys[0].split(" ["); } else { - ansibleVersion = ansibleVersionObjKeys[0].split(" "); + ansibleCoreVersion = ansibleVersionObjKeys[0].split(" "); } - ansibleInfo["version"] = `Ansible ${ansibleVersion[1].slice(0, -1)}`; + ansibleInfo["core version"] = ansibleCoreVersion[1] + .slice(0, -1) + .split(" ") + .pop() + .trim(); ansibleInfo["location"] = (await context.ansibleConfig).ansible_location; @@ -114,7 +118,11 @@ async function getPythonInfo() { return pythonInfo; } - pythonInfo["version"] = pythonVersionResult.stdout.trim(); + pythonInfo["version"] = pythonVersionResult.stdout + .trim() + .split(" ") + .pop() + .trim(); const pythonPathResult = await getResultsThroughCommandRunner( "python3", @@ -128,7 +136,7 @@ async function getPythonInfo() { async function getAnsibleLintInfo() { const ansibleLintInfo = {}; - const ansibleLintVersionResult = await getResultsThroughCommandRunner( + let ansibleLintVersionResult = await getResultsThroughCommandRunner( "ansible-lint", "--version", ); @@ -142,7 +150,22 @@ async function getAnsibleLintInfo() { "ansible-lint", ); - ansibleLintInfo["version"] = ansibleLintVersionResult.stdout.trim(); + // ansible-lint version reports if a newer version of the ansible-lint is available or not + // along with the current version itself + // so the following lines of code are to segregate the two information into to keys + ansibleLintVersionResult = ansibleLintVersionResult.stdout.trim().split("\n"); + const ansibleLintVersion = ansibleLintVersionResult[0]; + const ansibleLintUpgradeStatus = ansibleLintVersionResult[1] + ? ansibleLintVersionResult[1] + : undefined; + + ansibleLintInfo["version"] = ansibleLintVersion + .split("using")[0] + .trim() + .split(" ") + .pop() + .trim(); + ansibleLintInfo["upgrade status"] = ansibleLintUpgradeStatus; ansibleLintInfo["location"] = ansibleLintPathResult.stdout.trim(); diff --git a/test/utils/getAnsibleMetaData.test.ts b/test/utils/getAnsibleMetaData.test.ts index 2cb74066c..7b2bf6a5a 100644 --- a/test/utils/getAnsibleMetaData.test.ts +++ b/test/utils/getAnsibleMetaData.test.ts @@ -14,7 +14,7 @@ import { function getAnsibleTestInfo() { const ansibleInfo = {}; - ansibleInfo["version"] = "Ansible"; + ansibleInfo["core version"] = "."; ansibleInfo["location"] = "/ansible"; (ansibleInfo["config file path"] = path.resolve( __dirname, @@ -43,14 +43,15 @@ function getAnsibleTestInfo() { function getPythonTestInfo() { const pythonInfo = {}; - pythonInfo["version"] = "Python"; + pythonInfo["version"] = "."; pythonInfo["location"] = "/python"; return pythonInfo; } function getAnsibleLintTestInfo() { const ansibleLintInfo = {}; - ansibleLintInfo["version"] = "ansible-lint"; + ansibleLintInfo["version"] = "."; + ansibleLintInfo["upgrade status"] = "A new version"; // this key will be undefined (but the key will be present) because the value only gets updated based on the ansible-lint version used ansibleLintInfo["location"] = "/ansible-lint"; ansibleLintInfo["config file path"] = "/.ansible-lint"; // this key will be undefined (but the key will be present) because the value only gets updated when validation in run return ansibleLintInfo; @@ -136,8 +137,8 @@ describe("getAnsibleMetaData()", () => { it("should have information about ansible version used", function () { expect( - actualAnsibleMetaData["ansible information"]["version"], - ).includes(ansibleInfoForTest["version"]); + actualAnsibleMetaData["ansible information"]["core version"], + ).includes(ansibleInfoForTest["core version"]); }); it("should have a valid ansible location", function () { From 975f3a662a96d4c70581f17abc86cefca73a9093 Mon Sep 17 00:00:00 2001 From: ansibot Date: Wed, 28 Dec 2022 10:55:04 +0100 Subject: [PATCH 493/558] Release v1.0.4 (#535) ## v1.0.4 ### Bugfixes - Fix intermittent EE test failures (#533) @ganeshrn - Modify package version info in meta-data (#530) @priyamsahoo Co-authored-by: Ansible DevTools --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0333c459a..355072040 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,13 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v1.0.4 + +### Bugfixes + +- Fix intermittent EE test failures (#533) @ganeshrn +- Modify package version info in meta-data (#530) @priyamsahoo + ## v1.0.3 ### Bugfixes diff --git a/package-lock.json b/package-lock.json index f131541d2..308275a6e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "1.0.3", + "version": "1.0.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "1.0.3", + "version": "1.0.4", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.18", diff --git a/package.json b/package.json index 4eacc4333..6f1c99373 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "1.0.3", + "version": "1.0.4", "contributors": [ { "name": "Tomasz Maciążek", From 2ac89d7e9c49807f2310aa52d88785d73380cbfc Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 18 Jan 2023 17:55:18 +0000 Subject: [PATCH 494/558] Replace sphinx with mkdocs (#544) --- .config/dictionary.txt | 16 +- .config/requirements.in | 23 ++- .gitignore | 2 + .pre-commit-config.yaml | 4 + .readthedocs.yml | 5 +- CHANGELOG.md | 209 +++++++------------- README.md | 2 - Taskfile.yml | 7 +- docs/changelog-fragments.d/350.feature.md | 2 +- docs/changelog.md | 4 +- docs/conf.py | 230 ---------------------- docs/contributing/code_of_conduct.md | 4 +- docs/contributing/guidelines.md | 15 +- docs/contributing/security.md | 4 +- docs/index.md | 22 +-- docs/settings.md | 54 ++--- mkdocs.yml | 50 +++++ tools/docs_summary.py | 20 -- tools/settings-doc-generator.ts | 2 +- tools/test-setup.sh | 2 +- 20 files changed, 176 insertions(+), 501 deletions(-) delete mode 100644 docs/conf.py create mode 100644 mkdocs.yml delete mode 100644 tools/docs_summary.py diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 9226a9dea..2c048846a 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -92,7 +92,6 @@ setuptools showcontent showformat simplejson -sphinxcontrib stderr stdout suboption @@ -118,20 +117,7 @@ wordwrap workdir xvfb yammlint -# sphinx: -pathsep -sectionauthor -moduleauthor -extlinks -intersphinx -viewcode -pageview -autoversion -deflist -smartquotes -nitpicky -topbar -opensearch +mkdocs # names and usernames: Ganesh diff --git a/.config/requirements.in b/.config/requirements.in index 5df337e6a..c3120bada 100644 --- a/.config/requirements.in +++ b/.config/requirements.in @@ -12,12 +12,17 @@ flake8 # vscode integration mypy # vscode integration pylint # vscode integration # docs -linkify-it-py>=2.0.0 # myst-parser extra -MarkupSafe -myst-parser >= 0.18.0 -setuptools-scm >= 6.0.1 -Sphinx >= 5.0.2 -sphinx-ansible-theme >= 0.8.0 -sphinx-favicon >= 0.2 -sphinx-notfound-page >= 0.7.1 -sphinxcontrib-apidoc >= 0.3.0 +argparse-manpage +cairosvg +markdown-include +mkdocs +mkdocs-exclude +mkdocs-git-revision-date-localized-plugin +mkdocs-material +mkdocs-material-extensions +mkdocs-multirepo-plugin +mkdocstrings +mkdocstrings-python +pillow +pymdown-extensions +slugify diff --git a/.gitignore b/.gitignore index 4f171ff07..e564d6624 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,5 @@ change-notes-*.md .venv out/next.md out/log +site +.cache diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 12647572b..2f000109e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,6 +11,10 @@ ci: # https://github.com/pre-commit-ci/issues/issues/55 - npm-ci - codecov +exclude: > + (?x)^( + .config/requirements.in + )$ repos: - repo: https://github.com/shellcheck-py/shellcheck-py rev: v0.8.0.4 diff --git a/.readthedocs.yml b/.readthedocs.yml index 02df7d732..7c8672ae2 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -7,10 +7,7 @@ # Required version: 2 -# Build documentation in the docs/ directory with Sphinx -sphinx: - builder: dirhtml - configuration: docs/conf.py +mkdocs: fail_on_warning: true # Optionally build your docs in additional formats diff --git a/CHANGELOG.md b/CHANGELOG.md index 355072040..d2e85c1c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,13 +5,12 @@ All notable changes to the Ansible VS Code extension will be documented in this file. -[//]: # DO-NOT-REMOVE-versioning-promise-START +!!! note -```{note} -The change notes follow [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -except for the title formatting, and this project adheres to [Semantic -Versioning](https://semver.org/spec/v2.0.0.html). -``` + The change notes follow + [Keep a Changelog](https://keepachangelog.com), except for the title + formatting, and this project adheres to + [Semantic Versioning](https://semver.org). -```{include} ../CHANGELOG.md - -``` +{!../CHANGELOG.md!} diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index bb8e39b09..000000000 --- a/docs/conf.py +++ /dev/null @@ -1,230 +0,0 @@ -# pylint: disable=invalid-name -# Requires Python 3.6+ -# Ref: https://www.sphinx-doc.org/en/master/usage/configuration.html -"""Configuration for the Sphinx documentation generator.""" - -import json -from pathlib import Path - - -# -- Path setup -------------------------------------------------------------- - -# pylint: disable=no-member -PROJECT_ROOT_DIR = Path(__file__).parents[1].resolve() -with open(PROJECT_ROOT_DIR / "package.json", "r", encoding="utf-8") as pkg: - version = json.loads(pkg.read())['version'] - -# -- Project information ----------------------------------------------------- - -ansible_homepage_url = "https://www.ansible.com" -github_url = "https://github.com" -github_repo_org = "ansible" -github_repo_name = "ansible-language-server" -github_repo_slug = f"{github_repo_org}/{github_repo_name}" -github_repo_url = f"{github_url}/{github_repo_slug}" -github_sponsors_url = f"{github_url}/sponsors" - -project = " ".join(github_repo_name.split("-")).title() -author = f"{project} project contributors" -copyright = author # pylint: disable=redefined-builtin -release = version - -rst_epilog = f""" -.. |project| replace:: {project} -.. |release_l| replace:: ``v{release}`` -""" - - -# -- General configuration --------------------------------------------------- - - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# today = '' -# Else, today_fmt is used as the format for a strftime call. -today_fmt = "%B %d, %Y" - -# If true, '()' will be appended to :func: etc. cross-reference text. -add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -show_authors = True - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "ansible" - -# Default domain -# Tell sphinx what the primary language being documented is. -primary_domain = "js" - -# Tell sphinx what the pygments highlight language should be. -highlight_language = "js" - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - # stdlib-party extensions: - "sphinx.ext.autodoc", - "sphinx.ext.doctest", - "sphinx.ext.extlinks", - "sphinx.ext.intersphinx", - "sphinx.ext.todo", - "sphinx.ext.coverage", - "sphinx.ext.viewcode", - # Third-party extensions: - "myst_parser", # extended markdown; https://pypi.org/project/myst-parser/ - "notfound.extension", -] - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = "en" - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = [ - "changelog-fragments.d/**", # Towncrier-managed change notes -] - -primary_domain = "js" - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = "sphinx_ansible_theme" - -html_show_sphinx = True - -html_theme_options = { - "collapse_navigation": False, - "analytics_id": "", - "style_nav_header_background": "#5bbdbf", - "style_external_links": True, - "canonical_url": f"https://{github_repo_name}.readthedocs.io/en/latest/", - "vcs_pageview_mode": "edit", - "topbar_links": { - "AnsibleFest": f"{ansible_homepage_url}/ansiblefest", - "Products": f"{ansible_homepage_url}/tower", - "Community": f"{ansible_homepage_url}/community", - "Webinars & Training": f"{ansible_homepage_url}/webinars-training", - "Blog": f"{ansible_homepage_url}/blog", - }, - "navigation_depth": 3, -} - -html_context = { - "display_github": True, - "github_user": github_repo_org, - "github_repo": github_repo_name, - "github_version": "main/docs/", - "current_version": version, - "latest_version": "latest", - "available_versions": ("latest",), -} - - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -html_title = f"{project} Documentation" - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -html_last_updated_fmt = "%b %d, %Y" - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -html_use_opensearch = f"https://{github_repo_name}.readthedocs.io/en/latest/" - -# The master toctree document. -root_doc = master_doc = "index" # Sphinx 4+ / 3- # noqa: WPS429 - - -# -- Extension configuration ------------------------------------------------- - -# -- Options for intersphinx extension --------------------------------------- - -intersphinx_mapping = { - "ansible-runner": ("https://ansible-runner.rtfd.io/en/latest", None), - "myst": ("https://myst-parser.rtfd.io/en/latest", None), - "python": ("https://docs.python.org/3", None), - "python2": ("https://docs.python.org/2", None), -} - -# -- Options for todo extension ---------------------------------------------- - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True - -# -- Options for extlinks extension ------------------------------------------ - -extlinks = { - "issue": (f"{github_repo_url}/issues/%s", "#%s"), # noqa: WPS323 - "pr": (f"{github_repo_url}/pull/%s", "PR #%s"), # noqa: WPS323 - "commit": (f"{github_repo_url}/commit/%s", "%s"), # noqa: WPS323 - "gh": (f"{github_url}/%s", "GitHub: %s"), # noqa: WPS323 - "user": (f"{github_sponsors_url}/%s", "@%s"), # noqa: WPS323 -} - -# -- Options for linkcheck builder ------------------------------------------- - -linkcheck_ignore = [ - r"http://localhost:\d+/", # local URLs -] -linkcheck_workers = 25 - -# -- Options for myst_parser extension --------------------------------------- - -myst_enable_extensions = [ - "colon_fence", # allow to optionally use ::: instead of ``` - "deflist", - "html_admonition", # allow having HTML admonitions - "html_image", # allow HTML in Markdown - "linkify", # auto-detect URLs @ plain text, needs myst-parser[linkify] - "replacements", # allows Jinja2-style replacements - "smartquotes", # use "cursive" quotes - "substitution", # replace common ASCII shortcuts into their symbols -] -myst_substitutions = { - "project": project, - "release": release, - "release_l": f"`v{release}`", - "version": version, -} - -# -- Options for sphinx_js extension ----------------------------------------- - -# Example sphinx-js use: https://mozilla.github.io/fathom/ruleset.html -js_language = "typescript" - -# -- Strict mode ------------------------------------------------------------- - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# Ref: python-attrs/attrs#571 -default_role = "any" - -nitpicky = True -_any_role = "any" -_py_obj_role = "py:obj" -_py_class_role = "py:class" -nitpick_ignore = [ - (_any_role, "."), - (_py_class_role, "."), - (_py_obj_role, "."), -] diff --git a/docs/contributing/code_of_conduct.md b/docs/contributing/code_of_conduct.md index f0451d312..e810a4bd9 100644 --- a/docs/contributing/code_of_conduct.md +++ b/docs/contributing/code_of_conduct.md @@ -1,5 +1,3 @@ -```{include} ../../.github/CODE_OF_CONDUCT.md - -``` +{!../.github/CODE_OF_CONDUCT.md!} diff --git a/docs/contributing/guidelines.md b/docs/contributing/guidelines.md index ca8a6258c..8d520f417 100644 --- a/docs/contributing/guidelines.md +++ b/docs/contributing/guidelines.md @@ -1,24 +1,13 @@ -```{include} ../../.github/CONTRIBUTING.md - -``` +{!../.github/CONTRIBUTING.md!} # Contributing docs -We use [Sphinx][sphinx] to generate our docs website. You can trigger the -process locally by executing `task docs`: +To build the documentation locally run `task docs`: It is also integrated with [Read The Docs][rtd] that builds and publishes each commit to the main branch and generates live docs previews for each pull request. -The sources of the [Sphinx][sphinx] documents use reStructuredText as a de-facto -standard. But in order to make contributing docs more beginner-friendly, we have -integrated [MyST parser][myst] allowing us to also accept new documents written -in an extended version of Markdown that supports using Sphinx directives and -roles. {ref}`Read the docs ` to learn more on how to use it. - -[myst]: https://pypi.org/project/myst-parser/ [rtd]: https://readthedocs.org -[sphinx]: https://www.sphinx-doc.org diff --git a/docs/contributing/security.md b/docs/contributing/security.md index eb99b1dee..a2bd4f183 100644 --- a/docs/contributing/security.md +++ b/docs/contributing/security.md @@ -1,5 +1,3 @@ -```{include} ../../.github/SECURITY.md - -``` +{!../.github/SECURITY.md!} diff --git a/docs/index.md b/docs/index.md index 88902ff3c..0228be542 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,23 +1,3 @@ -(\_ansible_language_server_index)= - -# {{ project }} Documentation - -```{include} ../README.md -:start-after: DO-NOT-REMOVE-README-TITLE -``` - -```{toctree} -changelog -``` - -```{toctree} -:caption: Contributing - -Code Of Conduct -contributing/security -contributing/guidelines -settings -development -``` +{!../README.md!} diff --git a/docs/settings.md b/docs/settings.md index d9088ac9f..c5f29c405 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -5,91 +5,93 @@ The following are the default values of the settings provided by the Ansible Language Server: - **ansible.ansible.path**: -Path to the ansible executable \ +Path to the ansible executable _default value: `ansible`_ - **ansible.ansible.useFullyQualifiedCollectionNames**: -Toggle usage of fully qualified collection names (FQCN) when inserting module names \ +Toggle usage of fully qualified collection names (FQCN) when inserting module names _default value: `true`_ - **ansible.python.interpreterPath**: -Path to the python/python3 executable. This settings may be used to make the extension work with ansible and ansible-lint installations in a python virtual environment \ +Path to the python/python3 executable. This settings may be used to make the extension work with ansible and ansible-lint installations in a python virtual environment _default value: `""`_ - **ansible.python.activationScript**: -Path to a custom activation script, which is to be used instead of te settings above to run in a python virtual environment \ +Path to a custom activation script, which is to be used instead of the settings above to run in a python virtual environment _default value: `""`_ - **ansible.executionEnvironment.containerEngine**: -Container engine to be used while running with execution environment. valid values are 'auto', 'podman' and 'docker'. For 'auto', it will look for 'podman' and then for 'docker' \ +Container engine to be used while running with execution environment. valid values are `auto`, `podman`, and `docker`;. For `auto`, it will look for `podman`; and then for `docker`; _default value: `auto`_ - **ansible.executionEnvironment.enabled**: -Toggle usage of an execution environment \ +Toggle usage of an execution environment _default value: `false`_ - **ansible.executionEnvironment.image**: -Name of the execution environment to be used \ +Name of the execution environment to be used _default value: `ghcr.io/ansible/creator-ee:latest`_ - **ansible.executionEnvironment.pull.policy**: -Image pull policy to be used. Valid values are 'always', 'missing', 'never' and 'tag'. always will always pull the image when extension is activated or reloaded. 'missing' will pull if not locally available. 'never' will never pull the image and 'tag' will always pull if the image tag is 'latest', otherwise pull if not locally available. \ +Image pull policy to be used. Valid values are `always`, `missing`, `never` and `tag`. always will always pull the image when extension is activated or reloaded. `missing` will pull if not locally available. `never` will never pull the image and `tag` will always pull if the image tag is `latest`, otherwise pull if not locally available. _default value: `missing`_ - **ansible.executionEnvironment.pull.arguments**: -Specify any additional parameters that should be added to the pull command when pulling an execution environment from a container registry. e.g. '-–tls-verify=false' \ +Specify any additional parameters that should be added to the pull command when pulling an execution environment from a container registry. e.g. `-–tls-verify=false` _default value: `""`_ - **ansible.executionEnvironment.containerOptions**: -Extra parameters passed to the container engine command example: '--net=host' \ +Extra parameters passed to the container engine command example: `--net=host` _default value: `""`_ -- **ansible.executionEnvironment.volumeMounts**: - - **src**: The name of the local volume or path to be mounted within execution environment. \ - _default value: -`""`_ - - **dest**: The path where the file or directory are mounted in the container. \ - _default value: -`""`_ - - **options**: The field is optional, and is a comma-separated list of options, such as ro,Z \ - _default value: -`""`_ - **ansible.completion.provideRedirectModules**: -Toggle redirected module provider when completing modules \ +Toggle redirected module provider when completing modules _default value: `true`_ - **ansible.completion.provideModuleOptionAliases**: -Toggle alias provider when completing module options \ +Toggle alias provider when completing module options _default value: `true`_ - **ansible.validation.enabled**: -Toggle validation provider. If enabled and ansible-lint is disabled, validation falls back to ansible-playbook --syntax-check \ +Toggle validation provider. If enabled and ansible-lint is disabled, validation falls back to ansible-playbook --syntax-check _default value: `true`_ - **ansible.validation.lint.enabled**: -Toggle usage of ansible-lint \ +Toggle usage of ansible-lint _default value: `true`_ - **ansible.validation.lint.path**: -Path to the ansible-lint executable \ +Path to the ansible-lint executable _default value: `ansible-lint`_ - **ansible.validation.lint.arguments**: -Optional command line arguments to be appended to ansible-lint invocation \ +Optional command line arguments to be appended to ansible-lint invocation _default value: `""`_ + +- **ansible.executionEnvironment.volumeMounts**: + - **src**: The name of the local volume or path to be mounted within execution environment. + _default value: +`""`_ + - **dest**: The path where the file or directory are mounted in the container. + _default value: +`""`_ + - **options**: The field is optional, and is a comma-separated list of options, such as ro,Z + _default value: +`""`_ + diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 000000000..77a4e296a --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,50 @@ +# cspell: ignore pymdownx pymdown magiclink autorefs facelessuser superfences inlinehilite linenums fontawesome +site_name: Ansible Language Server +site_url: https://als.readthedocs.io/ +repo_url: https://github.com/ansible/ansible-language-server + +theme: + name: "material" + features: + - content.code.copy + - content.action.edit +extra: + social: + - icon: fontawesome/brands/github-alt + link: https://github.com/ansible/ansible-language-server + +plugins: + - autorefs + - search + - exclude: + glob: + - changelog-fragments.d/* + - social + - git-revision-date-localized: + enable_creation_date: true + +markdown_extensions: + - admonition + - def_list + - footnotes + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.superfences + - pymdownx.magiclink: + repo_url_shortener: true + repo_url_shorthand: true + social_url_shorthand: true + social_url_shortener: true + user: facelessuser + repo: pymdown-extensions + normalize_issue_symbols: true + - markdown_include.include: + base_path: docs + - pymdownx.tabbed: + alternate_style: true + - toc: + # reduced to keep TOC nice under Changelog page + toc_depth: 2 + permalink: true diff --git a/tools/docs_summary.py b/tools/docs_summary.py deleted file mode 100644 index 42b561c5a..000000000 --- a/tools/docs_summary.py +++ /dev/null @@ -1,20 +0,0 @@ -"""Print summary after running docs.""" -import pathlib -import os -import sys - -if __name__ == "__main__": - docs_dir = (pathlib.Path("../out") / "docs_out").resolve() - index_file = (docs_dir / "index.html").absolute() - print(f""" -Documentation index: file://{index_file} -To serve docs, run: python3 -m http.server --directory "{docs_dir}" 0""") - - # when interactive, also open docs inside the default browser - if sys.stdout.isatty(): - CMD = "xdg-open" - if sys.platform == "darwin": - CMD = "open" - elif sys.platform == "win32": - CMD = "explorer" - os.system(f"{CMD} {index_file}") diff --git a/tools/settings-doc-generator.ts b/tools/settings-doc-generator.ts index de5232d94..4b5aef143 100644 --- a/tools/settings-doc-generator.ts +++ b/tools/settings-doc-generator.ts @@ -29,7 +29,7 @@ The following are the default values of the settings provided by the Ansible Lan {{/if}} {{#ifValueArray valueType}} {{#each this.defaultValue}} - - **{{key}}**: {{description}} \\ + - **{{key}}**: {{description}} _default value: {{#if defaultValue}} \`{{defaultValue}}\`_ diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 105239426..cdd20fdcc 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -3,7 +3,7 @@ # This tool is used to setup the environment for running the tests. Its name # name and location is based on Zuul CI, which can automatically run it. # (cspell: disable-next-line) -set -exuo pipefail +set -euo pipefail IMAGE=ghcr.io/ansible/creator-ee:$(./tools/get-image-version) PIP_LOG_FILE=out/log/pip.log From 333520db93f4042b6b22e97fc9d71ccb5a87ec6a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Jan 2023 18:30:50 +0000 Subject: [PATCH 495/558] Bump json5 from 2.2.1 to 2.2.3 (#539) Bumps [json5](https://github.com/json5/json5) from 2.2.1 to 2.2.3. - [Release notes](https://github.com/json5/json5/releases) - [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md) - [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3) --- updated-dependencies: - dependency-name: json5 dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 308275a6e..4bea25918 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3767,9 +3767,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -9524,9 +9524,9 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "jsonlines": { From b9408f630c33793cb094f23f34e08f3f398a1e29 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 23 Jan 2023 18:31:25 +0000 Subject: [PATCH 496/558] chore: pre-commit autoupdate (#537) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/shellcheck-py/shellcheck-py: v0.8.0.4 → v0.9.0.2](https://github.com/shellcheck-py/shellcheck-py/compare/v0.8.0.4...v0.9.0.2) - [github.com/streetsidesoftware/cspell-cli: v6.16.0 → v6.17.1](https://github.com/streetsidesoftware/cspell-cli/compare/v6.16.0...v6.17.1) - [github.com/pre-commit/mirrors-eslint: v8.29.0 → v8.31.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.29.0...v8.31.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2f000109e..e297a0cb2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ exclude: > )$ repos: - repo: https://github.com/shellcheck-py/shellcheck-py - rev: v0.8.0.4 + rev: v0.9.0.2 hooks: - id: shellcheck args: @@ -51,7 +51,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.16.0 + rev: v6.17.1 hooks: - id: cspell name: Spell check with cspell @@ -100,7 +100,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.29.0 + rev: v8.31.0 hooks: - id: eslint args: From b37de2500a039c912b2734bf73e370bbca7aa312 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 23 Jan 2023 20:30:31 +0000 Subject: [PATCH 497/558] Refactor docs (#545) --- .gitattributes | 2 +- .github/release-drafter.yml | 4 +- .pre-commit-config.yaml | 3 +- CHANGELOG.md | 355 ----------------- README.md | 141 +------ Taskfile.yml | 4 +- docs/README.md | 141 +++++++ docs/changelog.md | 356 +++++++++++++++++- .../CONTRIBUTING.md => docs/contributing.md | 10 + docs/contributing/code_of_conduct.md | 3 - docs/contributing/guidelines.md | 13 - docs/contributing/security.md | 3 - docs/images/favicon.ico | Bin 0 -> 15406 bytes docs/images/logo.png | Bin 0 -> 10993 bytes docs/images/logo.svg | 7 + docs/index.md | 3 - mkdocs.yml | 30 +- package.json | 2 +- tools/release.sh | 8 +- 19 files changed, 553 insertions(+), 532 deletions(-) delete mode 100644 CHANGELOG.md create mode 100644 docs/README.md rename .github/CONTRIBUTING.md => docs/contributing.md (61%) delete mode 100644 docs/contributing/code_of_conduct.md delete mode 100644 docs/contributing/guidelines.md delete mode 100644 docs/contributing/security.md create mode 100644 docs/images/favicon.ico create mode 100644 docs/images/logo.png create mode 100644 docs/images/logo.svg delete mode 100644 docs/index.md diff --git a/.gitattributes b/.gitattributes index 212588163..8772e9aa0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,7 +1,7 @@ # Set default behavior to automatically normalize line endings. * text=auto -CHANGELOG.md merge=union +docs/changelog.md merge=union *.lock text -diff package.json text eol=lf diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 8d4243541..a42ec2fe3 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -7,13 +7,13 @@ _extends: ansible-community/devtools # npm version prerelease --preid=next # # In our release pipeline we will create a pull-request that updates -# CHANGELOG.md and the version number. +# docs/changelog.md and the version number. # # When this pull request is merged, we will: # * publish to npm # * create the correct tag (already present in package.json) # * edit the release to point it the new tag instead of the -next.0 one tag-template: 'v$RESOLVED_VERSION' -# instead of 2x# we use 3x to make the outcome ready to embed into CHANGELOG.md +# instead of 2x# we use 3x to make the outcome ready to embed into docs/changelog.md category-template: '### $TITLE' template: '$CHANGES' diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e297a0cb2..27b3c137f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,7 +13,8 @@ ci: - codecov exclude: > (?x)^( - .config/requirements.in + .config/requirements.in| + .*.svg )$ repos: - repo: https://github.com/shellcheck-py/shellcheck-py diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index d2e85c1c5..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,355 +0,0 @@ - - -# Change Log - -All notable changes to the Ansible VS Code extension will be documented in this -file. - -!!! note - - The change notes follow - [Keep a Changelog](https://keepachangelog.com), except for the title - formatting, and this project adheres to - [Semantic Versioning](https://semver.org). - - - - - -## v1.0.4 - -### Bugfixes - -- Fix intermittent EE test failures (#533) @ganeshrn -- Modify package version info in meta-data (#530) @priyamsahoo - -## v1.0.3 - -### Bugfixes - -- Correct container name (#515) @ssbarnea -- Add note about task vs go-task (#509) @samccann -- Remove als acronym from docs website title (#507) @samccann -- Isolate container caching from others (#492) @ssbarnea -- Update docs url (#494) @ssbarnea -- Make node 14 minimal version required (#491) @ssbarnea -- Use ghcr.io instead of quay.io as default registry (#489) @ssbarnea - -## v1.0.2 - -### Bugfixes - -- Avoid parsing ansible-lint config file (#478) @priyamsahoo -- Enhance ansible meta-data (#475) @priyamsahoo -- Add support for ansible-lint config file (#474) @priyamsahoo - -## v1.0.1 - -### Bugfixes - -- Add documentation link for violated ansible-lint rules (#461) @priyamsahoo -- Support for FQCN with more than 3 elements (#449) @fredericgiquel -- Replace `which` with `command -v` (#463) @priyamsahoo - -## v1.0.0 - -### Minor Changes - -- Update settings to disable validation (#448) @priyamsahoo - -### Bugfixes - -- Fix bug related to diagnostics caching when validation is disabled (#451) - @priyamsahoo - -## v0.10.3 - -### Bugfixes - -- pythonInfo: use python3 instead of python (#445) @clwluvw - -## v0.10.2 - -### Bugfixes - -- Fix 'handlers' keyword syntax highlighting and auto-completion (#440) - @priyamsahoo -- Fix missing ansible-lint warning (#438) @priyamsahoo -- Replace `python` with `python3` in command execution (#430) @priyamsahoo - -## v0.10.1 - -### Bugfixes - -- Disable python debugger when running external commands (#420) @ssbarnea - -## v0.10.0 - -### Minor Changes - -- Expose metadata about environment to the client (#413) @priyamsahoo - -### Bugfixes - -- Fallback to default value if setting is not provided by client (#409) - @fredericgiquel -- Bump ansible-compat from 2.1.0 to 2.2.0 in /.config (#408) -- Add handling of cases where lsp clients do not send required settings (#405) - @yaegassy - -## v0.9.0 - -### Minor Changes - -- Add --version flag for ansible-language-server (#392) @yaegassy -- Auto-complete hosts values based on ansible inventory file (#350) @priyamsahoo - -## v0.8.0 - -### Minor Changes - -- Add settings for completion (#348) @fredericgiquel - -### Bugfixes - -- Fix documentation version reading (#363) @ssbarnea -- docs: add note on standalone usage (#347) @mtoohey31 -- Refactor npm package (#356) @ssbarnea -- Bump ansible-lint from 6.2.2 to 6.3.0 (#346) -- Add check to validate mount path before passing it as an arg in EE (#345) - @priyamsahoo - -## v0.7.2 (2022-05-24) - -### Bugfixes - -- Fix auto-completion for modules when documentation is not displayed (#330) - @fredericgiquel -- add ee service plugin path logs (#331) @ganeshrn - -## v0.7.1 (2022-05-13) - -No significant changes. - -## v0.7.0 (2022-05-12) - -### Bugfixes - -- Fixed settings-doc-generator script to support array-type values -- by - @priyamsahoo #323 - -### Features - -- Added EE settings for volume mounts, container options and pull arguments -- - by @ganeshrn - -- Add setting to pass container image pull arguments #318 - -- Move `execution-environment.pull-policy` setting to - `execution-environment.pull.policy` - -## v0.6.1 (2022-04-14) - -No significant changes. - -## v0.6.0 (2022-04-12) - -### Bugfixes - -- Fixed indentation issue while resolving auto-completion items to support - editors like vim and neovim -- by @yaegassy #285 - -- Fixed globby issue by replacing it with glob and writing utility function to - support array of file patterns and file path exclusion patterns -- by - @priyamsahoo #295 - -### Features - -- Added auto-completion for values of module options and sub-options -- by - @tomaciazek #288 - -- Refactored settings structure in the code to include descriptions and added - utility for updating the settings doc to keep in sync with it -- by - @priyamsahoo #294 - -### Miscellaneous - -- Moved glob utils into a separate utils file and remove commented code -- by - @ganeshrn #299 - -## v0.5.4 (2022-03-31) - -### Bugfixes - -- Fix auto-completion and hover not working with execution environment issue. -- - by @ganeshrn #279 - -### Features - -- Implemented type based resolution for module options and sub-options - completion -- by @priyamsahoo #276 - -## v0.5.3 (2022-03-16) - -### Bugfixes - -- Fixed intermittent issue with execution environment for auto-completion and - hover by waiting for async function to copy plugins from within EE to local - host cache --@ganeshrn. #263 - -### Features - -- Enhanced the logic of ansible-lint service to do the following things by - --@priyamsahoo: - -- Fallback to `--syntax-check` in every failure scenarios (for eg. in case of - wrong arguments passed, etc) and give visual feedback to the user in terms of - notification about what went wrong. -- Handle different response types sent by ansible-lint (for e.g. ansible-lint - sends failure reports as stdout and sometimes as errors) by making them - uniform in terms of structure and redirection. #243 - -- Replaced the value `2^53 - 1 (which is Number.MAX_SAFE_INTEGER)` with - `2^31 - 1 (which is integer.MAX_VALUE)` to support extension clients that do - handle 64-bit floating point IEEE 754 number by --@priyamsahoo. #261 - -## v0.5.2 (2022-03-02) - -### Bugfixes - -- Used ls instead of find for execution-environments while check if ansible - plugins are present in a given path -- by @ganeshrn #190 -- Fixed source of `INVALID_URL` type error that occurred during the search for - ansible-lint config file -- by {user} `priyamsahoo` #233 - -## v0.5.1 (2022-03-01) - -### Bugfixes - -- Ensure that Ansible calls do not return ANSI escapes, so we can parse them. - [vscode-ansible#373] -- by @ssbarnea #236 - -[vscode-ansible#373]: https://github.com/ansible/vscode-ansible/issues/373 - -## v0.5.0 (2022-03-01) - -### Features - -- Emit notification about unsupported platforms -- by @ssbarnea #195 - -### Documentation - -- Dropped the brackets from the changelog titles for the release sections. We - now don't strictly follow the release notes format suggested by - [Keep a Changelog](https://keepachangelog.com)-- by @webknjaz #164 - -- Replaced all the credits in the changelog with a dedicated Sphinx role -- by - @webknjaz #165 - -### Miscellaneous - -- Added changelog fragment management infrastructure using - [Towncrier](https://github.com/twisted/towncrier) -- by @webknjaz #158 #198 - #201 #202 #204 #208 #210 - -- Added Sphinx documentation generator and set up the CI infrastructure for it - -- by @webknjaz #161 - -- Added docs and references to the Community Code Of Conduct, security and - contributing guides, and a pull request template -- by @webknjaz #163 - -- Fixed a half-baked change in the GitHub Actions CI/CD workflow job that is - used in branch protection -- by @webknjaz #169 - -## v0.4.0 (2021-11-25) - -### Bugfixes - -- Prevented throwing an unhandled exception caused by undefined linter arguments - settings (#142) @ssbarnea -- Implemented opening standalone Ansible files that have no workspace associated - (#140) @ganeshrn - -## v0.3.0 (2021-11-18) - -### Minor Changes - -- Added support for nested module options (suboptions) (#116) @tomaciazek -- Adopted use of `creator-ee` execution environment (#132) @ssbarnea -- Updated container cleanup logic for execution environment (#111) @ganeshrn - -### Bugfixes - -- Updated plugin doc cache validate logic for execution environment (#109) - @ganeshrn -- Fixed issue with container copy command (#110) @ganeshrn - -## v0.2.6 (2021-10-29) - -### Bugfixes - -- Fixed auto-completion to account for the builtin modules when used with EE - (#94) @ganeshrn - -## v0.2.5 (2021-10-23) - -### Bugfixes - -- Added a guard for linting only playbook files with the Ansible's built-in - syntax-check when ansible-lint is unavailable. This is used for providing the - diagnostics information (#89) @priyamsahoo - -## v0.2.4 (2021-10-19) - -### Major changes - -The most notable changes that happened were: - -- Renaming and publishing the package under the `@ansible` scope on Npmjs. The - new name is `@ansible/ansible-language-server` now (#10) @webknjaz -- Deprecation of the initial `ansible-language-server` npm package that existed - in the global namespace prior to the rename @ganeshrn -- Adding the auto-completion and diagnostics support for Ansible Execution - Environments @ganeshrn - -### Changes - -- Started falling back to checking playbooks with the Ansible's built-in - syntax-check when `ansible-lint` is not installed or disabled (#5) - @priyamsahoo -- Set the minimum runtime prerequisites to `npm > 7.11.2` and `node >= 12` (#23) - @ssbarnea -- Updated the default settings value to use fully qualified collection name - (FQCN) during auto-completion (#37) @priyamsahoo -- Added auto-completion support for Ansible Execution Environments (#42 #54 #55) - @ganeshrn -- Added diagnostics support for Ansible Execution Environments (#53) @ganeshrn -- Updated module completion return statement to support sorting as per FQCN - (#57) @priyamsahoo - -### Bugfixes - -- Added a fix to check that the module paths are directories before globbing - them during the documentation lookup (#38) @kimbernator -- Implemented documentation fragment discovery (#40) @tomaciazek -- Fixed sort `slice()` exception issue in `ansibleConfig` service (#76) - @ssbarnea -- Fixed an issue with progress handling when `ansible-lint` falls back to - `syntax check` (#88) @yaegassy - -### Misc - -- Replaced `decode`/`encodeURI` with a native VS Code mechanism (#8) @tomaciazek -- Implemented the release CD via `workflow_dispatch` (#65) @webknjaz - -## v0.1.0-1 (2021-07-28) - -- Updated the npm package to include the `out/` folder - -## v0.1.0 (2021-07-28) - -- Initial ansible language server release. Based on the `vscode-ansible` plugin - developed by {user}`Tomasz Maciążek ` diff --git a/README.md b/README.md index 45225b248..7a79885ee 100644 --- a/README.md +++ b/README.md @@ -1,141 +1,4 @@ # Ansible Language Server -This language server adds support for Ansible and is currently used by the -following projects: - -- [Ansible extension for vscode/codium](https://github.com/ansible/vscode-ansible) -- [Ansible extension for vim and neovim](https://github.com/yaegassy/coc-ansible) -- [Ansible client for Emacs LSP](https://emacs-lsp.github.io/lsp-mode/page/lsp-ansible/) - -## Features - -### Syntax highlighting - -![Syntax highlighting](https://github.com/ansible/ansible-language-server/raw/main/docs/images/syntax-highlighting.png) - -**Ansible keywords**, **module names** and **module options**, as well as -standard YAML elements are recognized and highlighted distinctly. Jinja -expressions are supported too, also those in Ansible conditionals (`when`, -`failed_when`, `changed_when`, `check_mode`), which are not placed in double -curly braces. - -> The screenshots and animations presented in this README have been taken using -> the One Dark Pro theme. The default VS Code theme will not show the syntax -> elements as distinctly unless customized. Virtually any theme other than -> default will do better. - -### Validation - -![YAML validation](https://github.com/ansible/ansible-language-server/raw/main/docs/images/yaml-validation.gif) - -While you type, the syntax of your Ansible scripts is verified and any feedback -is provided instantaneously. - -#### Integration with ansible-lint - -![Linter support](https://github.com/ansible/ansible-language-server/raw/main/docs/images/ansible-lint.gif) - -On opening and saving a document, `ansible-lint` is executed in the background -and any findings are presented as errors. You might find it useful that -rules/tags added to `warn_list` (see -[Ansible Lint Documentation](https://ansible-lint.readthedocs.io/en/latest/configuring.html)) -are shown as warnings instead. - -> If you also install `yamllint`, `ansible-lint` will detect it and incorporate -> into the linting process. Any findings reported by `yamllint` will be exposed -> in VSCode as errors/warnings. - -**_Note_** - -If `ansible-lint` is not installed/found or running `ansible-lint` results in -errors, it will fall back to `ansible --syntax-check` for validation. - -### Smart auto-completion - -![Autocompletion](https://github.com/ansible/ansible-language-server/raw/main/docs/images/smart-completions.gif) - -The extension tries to detect whether the cursor is on a play, block or task -etc. and provides suggestions accordingly. There are also a few other rules that -improve the user experience: - -- the `name` property is always suggested first -- on module options, the required properties are shown first, and aliases are - shown last, otherwise ordering from the documentation is preserved -- FQCNs (fully qualified collection names) are inserted only when necessary; - collections configured with the [`collections` keyword] are honored. This - behavior can be disabled in extension settings. - -[`collections` keyword]: - https://docs.ansible.com/ansible/latest/collections_guide/collections_using_playbooks.html#simplifying-module-names-with-the-collections-keyword - -#### Auto-closing Jinja expressions - -![Easier Jinja expression typing](https://github.com/ansible/ansible-language-server/raw/main/docs/images/jinja-expression.gif) - -When writing a Jinja expression, you only need to type `"{{`, and it will -be mirrored behind the cursor (including the space). You can also select the -whole expression and press `space` to put spaces on both sides of the -expression. - -### Documentation reference - -![Documentation on hover](https://github.com/ansible/ansible-language-server/raw/main/docs/images/hover-documentation-module.png) - -Documentation is available on hover for Ansible keywords, modules and module -options. The extension works on the same principle as `ansible-doc`, providing -the documentation straight from the Python implementation of the modules. - -#### Jump to module code - -![Go to code on Ctrl+click](https://github.com/ansible/ansible-language-server/raw/main/docs/images/go-to-definition.gif) - -You may also open the implementation of any module using the standard _Go to -Definition_ operation, for instance, by clicking on the module name while -holding `ctrl`/`cmd`. - -## Standalone Usage - -For standalone usage with a language-server client, the Ansible language server -can be installed from npm with the following command: - -```bash -npm install -g @ansible/ansible-language-server -``` - -## Language Server Settings - -For details on settings, their descriptions and their default values refer to -[settings](https://als.readthedocs.io/en/latest/settings/). - -## Developer support - -For details on setting up the development environment and debugging refer to the -[development document]. - -[development document]: - https://github.com/ansible/ansible-language-server/blob/main/docs/development.md - -## Requirements - -- [Ansible 2.9+](https://docs.ansible.com/ansible/latest/index.html) -- [Ansible Lint](https://ansible-lint.readthedocs.io/en/latest/) (required, - unless you disable linter support) -- [yamllint](https://yamllint.readthedocs.io/en/stable/) (optional) - -For Windows users, this extension works perfectly well with extensions such as -`Remote - WSL` and `Remote - Containers`. - -> If you have any other extension providing language support for Ansible, you -> might need to uninstall it first. - -## Known limitations - -- The shorthand syntax for module options (key=value pairs) is not supported. -- Only Jinja _expressions_ inside Ansible YAML files are supported. To do syntax - highlighting of Jinja template files, you'll need to install other extensions. -- Jinja _blocks_ (inside Ansible YAML files) are not supported yet. - -## Credit - -Based on the good work done by -[Tomasz Maciążek](https://github.com/tomaciazek/vscode-ansible) +Documentation for Ansible Language Server can be found at +[als.readthedocs.io](https://als.readthedocs.io/). diff --git a/Taskfile.yml b/Taskfile.yml index d77192121..fdce113f1 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -155,8 +155,8 @@ tasks: deps: - build sources: - - CHANGELOG.md - - README.md + - docs/changelog.md + - docs/README.md - package*.json - out/**/*.* generates: diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..45225b248 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,141 @@ +# Ansible Language Server + +This language server adds support for Ansible and is currently used by the +following projects: + +- [Ansible extension for vscode/codium](https://github.com/ansible/vscode-ansible) +- [Ansible extension for vim and neovim](https://github.com/yaegassy/coc-ansible) +- [Ansible client for Emacs LSP](https://emacs-lsp.github.io/lsp-mode/page/lsp-ansible/) + +## Features + +### Syntax highlighting + +![Syntax highlighting](https://github.com/ansible/ansible-language-server/raw/main/docs/images/syntax-highlighting.png) + +**Ansible keywords**, **module names** and **module options**, as well as +standard YAML elements are recognized and highlighted distinctly. Jinja +expressions are supported too, also those in Ansible conditionals (`when`, +`failed_when`, `changed_when`, `check_mode`), which are not placed in double +curly braces. + +> The screenshots and animations presented in this README have been taken using +> the One Dark Pro theme. The default VS Code theme will not show the syntax +> elements as distinctly unless customized. Virtually any theme other than +> default will do better. + +### Validation + +![YAML validation](https://github.com/ansible/ansible-language-server/raw/main/docs/images/yaml-validation.gif) + +While you type, the syntax of your Ansible scripts is verified and any feedback +is provided instantaneously. + +#### Integration with ansible-lint + +![Linter support](https://github.com/ansible/ansible-language-server/raw/main/docs/images/ansible-lint.gif) + +On opening and saving a document, `ansible-lint` is executed in the background +and any findings are presented as errors. You might find it useful that +rules/tags added to `warn_list` (see +[Ansible Lint Documentation](https://ansible-lint.readthedocs.io/en/latest/configuring.html)) +are shown as warnings instead. + +> If you also install `yamllint`, `ansible-lint` will detect it and incorporate +> into the linting process. Any findings reported by `yamllint` will be exposed +> in VSCode as errors/warnings. + +**_Note_** + +If `ansible-lint` is not installed/found or running `ansible-lint` results in +errors, it will fall back to `ansible --syntax-check` for validation. + +### Smart auto-completion + +![Autocompletion](https://github.com/ansible/ansible-language-server/raw/main/docs/images/smart-completions.gif) + +The extension tries to detect whether the cursor is on a play, block or task +etc. and provides suggestions accordingly. There are also a few other rules that +improve the user experience: + +- the `name` property is always suggested first +- on module options, the required properties are shown first, and aliases are + shown last, otherwise ordering from the documentation is preserved +- FQCNs (fully qualified collection names) are inserted only when necessary; + collections configured with the [`collections` keyword] are honored. This + behavior can be disabled in extension settings. + +[`collections` keyword]: + https://docs.ansible.com/ansible/latest/collections_guide/collections_using_playbooks.html#simplifying-module-names-with-the-collections-keyword + +#### Auto-closing Jinja expressions + +![Easier Jinja expression typing](https://github.com/ansible/ansible-language-server/raw/main/docs/images/jinja-expression.gif) + +When writing a Jinja expression, you only need to type `"{{`, and it will +be mirrored behind the cursor (including the space). You can also select the +whole expression and press `space` to put spaces on both sides of the +expression. + +### Documentation reference + +![Documentation on hover](https://github.com/ansible/ansible-language-server/raw/main/docs/images/hover-documentation-module.png) + +Documentation is available on hover for Ansible keywords, modules and module +options. The extension works on the same principle as `ansible-doc`, providing +the documentation straight from the Python implementation of the modules. + +#### Jump to module code + +![Go to code on Ctrl+click](https://github.com/ansible/ansible-language-server/raw/main/docs/images/go-to-definition.gif) + +You may also open the implementation of any module using the standard _Go to +Definition_ operation, for instance, by clicking on the module name while +holding `ctrl`/`cmd`. + +## Standalone Usage + +For standalone usage with a language-server client, the Ansible language server +can be installed from npm with the following command: + +```bash +npm install -g @ansible/ansible-language-server +``` + +## Language Server Settings + +For details on settings, their descriptions and their default values refer to +[settings](https://als.readthedocs.io/en/latest/settings/). + +## Developer support + +For details on setting up the development environment and debugging refer to the +[development document]. + +[development document]: + https://github.com/ansible/ansible-language-server/blob/main/docs/development.md + +## Requirements + +- [Ansible 2.9+](https://docs.ansible.com/ansible/latest/index.html) +- [Ansible Lint](https://ansible-lint.readthedocs.io/en/latest/) (required, + unless you disable linter support) +- [yamllint](https://yamllint.readthedocs.io/en/stable/) (optional) + +For Windows users, this extension works perfectly well with extensions such as +`Remote - WSL` and `Remote - Containers`. + +> If you have any other extension providing language support for Ansible, you +> might need to uninstall it first. + +## Known limitations + +- The shorthand syntax for module options (key=value pairs) is not supported. +- Only Jinja _expressions_ inside Ansible YAML files are supported. To do syntax + highlighting of Jinja template files, you'll need to install other extensions. +- Jinja _blocks_ (inside Ansible YAML files) are not supported yet. + +## Credit + +Based on the good work done by +[Tomasz Maciążek](https://github.com/tomaciazek/vscode-ansible) diff --git a/docs/changelog.md b/docs/changelog.md index e8035334d..d2e85c1c5 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,3 +1,355 @@ - + -{!../CHANGELOG.md!} +# Change Log + +All notable changes to the Ansible VS Code extension will be documented in this +file. + +!!! note + + The change notes follow + [Keep a Changelog](https://keepachangelog.com), except for the title + formatting, and this project adheres to + [Semantic Versioning](https://semver.org). + + + + + +## v1.0.4 + +### Bugfixes + +- Fix intermittent EE test failures (#533) @ganeshrn +- Modify package version info in meta-data (#530) @priyamsahoo + +## v1.0.3 + +### Bugfixes + +- Correct container name (#515) @ssbarnea +- Add note about task vs go-task (#509) @samccann +- Remove als acronym from docs website title (#507) @samccann +- Isolate container caching from others (#492) @ssbarnea +- Update docs url (#494) @ssbarnea +- Make node 14 minimal version required (#491) @ssbarnea +- Use ghcr.io instead of quay.io as default registry (#489) @ssbarnea + +## v1.0.2 + +### Bugfixes + +- Avoid parsing ansible-lint config file (#478) @priyamsahoo +- Enhance ansible meta-data (#475) @priyamsahoo +- Add support for ansible-lint config file (#474) @priyamsahoo + +## v1.0.1 + +### Bugfixes + +- Add documentation link for violated ansible-lint rules (#461) @priyamsahoo +- Support for FQCN with more than 3 elements (#449) @fredericgiquel +- Replace `which` with `command -v` (#463) @priyamsahoo + +## v1.0.0 + +### Minor Changes + +- Update settings to disable validation (#448) @priyamsahoo + +### Bugfixes + +- Fix bug related to diagnostics caching when validation is disabled (#451) + @priyamsahoo + +## v0.10.3 + +### Bugfixes + +- pythonInfo: use python3 instead of python (#445) @clwluvw + +## v0.10.2 + +### Bugfixes + +- Fix 'handlers' keyword syntax highlighting and auto-completion (#440) + @priyamsahoo +- Fix missing ansible-lint warning (#438) @priyamsahoo +- Replace `python` with `python3` in command execution (#430) @priyamsahoo + +## v0.10.1 + +### Bugfixes + +- Disable python debugger when running external commands (#420) @ssbarnea + +## v0.10.0 + +### Minor Changes + +- Expose metadata about environment to the client (#413) @priyamsahoo + +### Bugfixes + +- Fallback to default value if setting is not provided by client (#409) + @fredericgiquel +- Bump ansible-compat from 2.1.0 to 2.2.0 in /.config (#408) +- Add handling of cases where lsp clients do not send required settings (#405) + @yaegassy + +## v0.9.0 + +### Minor Changes + +- Add --version flag for ansible-language-server (#392) @yaegassy +- Auto-complete hosts values based on ansible inventory file (#350) @priyamsahoo + +## v0.8.0 + +### Minor Changes + +- Add settings for completion (#348) @fredericgiquel + +### Bugfixes + +- Fix documentation version reading (#363) @ssbarnea +- docs: add note on standalone usage (#347) @mtoohey31 +- Refactor npm package (#356) @ssbarnea +- Bump ansible-lint from 6.2.2 to 6.3.0 (#346) +- Add check to validate mount path before passing it as an arg in EE (#345) + @priyamsahoo + +## v0.7.2 (2022-05-24) + +### Bugfixes + +- Fix auto-completion for modules when documentation is not displayed (#330) + @fredericgiquel +- add ee service plugin path logs (#331) @ganeshrn + +## v0.7.1 (2022-05-13) + +No significant changes. + +## v0.7.0 (2022-05-12) + +### Bugfixes + +- Fixed settings-doc-generator script to support array-type values -- by + @priyamsahoo #323 + +### Features + +- Added EE settings for volume mounts, container options and pull arguments -- + by @ganeshrn + +- Add setting to pass container image pull arguments #318 + +- Move `execution-environment.pull-policy` setting to + `execution-environment.pull.policy` + +## v0.6.1 (2022-04-14) + +No significant changes. + +## v0.6.0 (2022-04-12) + +### Bugfixes + +- Fixed indentation issue while resolving auto-completion items to support + editors like vim and neovim -- by @yaegassy #285 + +- Fixed globby issue by replacing it with glob and writing utility function to + support array of file patterns and file path exclusion patterns -- by + @priyamsahoo #295 + +### Features + +- Added auto-completion for values of module options and sub-options -- by + @tomaciazek #288 + +- Refactored settings structure in the code to include descriptions and added + utility for updating the settings doc to keep in sync with it -- by + @priyamsahoo #294 + +### Miscellaneous + +- Moved glob utils into a separate utils file and remove commented code -- by + @ganeshrn #299 + +## v0.5.4 (2022-03-31) + +### Bugfixes + +- Fix auto-completion and hover not working with execution environment issue. -- + by @ganeshrn #279 + +### Features + +- Implemented type based resolution for module options and sub-options + completion -- by @priyamsahoo #276 + +## v0.5.3 (2022-03-16) + +### Bugfixes + +- Fixed intermittent issue with execution environment for auto-completion and + hover by waiting for async function to copy plugins from within EE to local + host cache --@ganeshrn. #263 + +### Features + +- Enhanced the logic of ansible-lint service to do the following things by + --@priyamsahoo: + +- Fallback to `--syntax-check` in every failure scenarios (for eg. in case of + wrong arguments passed, etc) and give visual feedback to the user in terms of + notification about what went wrong. +- Handle different response types sent by ansible-lint (for e.g. ansible-lint + sends failure reports as stdout and sometimes as errors) by making them + uniform in terms of structure and redirection. #243 + +- Replaced the value `2^53 - 1 (which is Number.MAX_SAFE_INTEGER)` with + `2^31 - 1 (which is integer.MAX_VALUE)` to support extension clients that do + handle 64-bit floating point IEEE 754 number by --@priyamsahoo. #261 + +## v0.5.2 (2022-03-02) + +### Bugfixes + +- Used ls instead of find for execution-environments while check if ansible + plugins are present in a given path -- by @ganeshrn #190 +- Fixed source of `INVALID_URL` type error that occurred during the search for + ansible-lint config file -- by {user} `priyamsahoo` #233 + +## v0.5.1 (2022-03-01) + +### Bugfixes + +- Ensure that Ansible calls do not return ANSI escapes, so we can parse them. + [vscode-ansible#373] -- by @ssbarnea #236 + +[vscode-ansible#373]: https://github.com/ansible/vscode-ansible/issues/373 + +## v0.5.0 (2022-03-01) + +### Features + +- Emit notification about unsupported platforms -- by @ssbarnea #195 + +### Documentation + +- Dropped the brackets from the changelog titles for the release sections. We + now don't strictly follow the release notes format suggested by + [Keep a Changelog](https://keepachangelog.com)-- by @webknjaz #164 + +- Replaced all the credits in the changelog with a dedicated Sphinx role -- by + @webknjaz #165 + +### Miscellaneous + +- Added changelog fragment management infrastructure using + [Towncrier](https://github.com/twisted/towncrier) -- by @webknjaz #158 #198 + #201 #202 #204 #208 #210 + +- Added Sphinx documentation generator and set up the CI infrastructure for it + -- by @webknjaz #161 + +- Added docs and references to the Community Code Of Conduct, security and + contributing guides, and a pull request template -- by @webknjaz #163 + +- Fixed a half-baked change in the GitHub Actions CI/CD workflow job that is + used in branch protection -- by @webknjaz #169 + +## v0.4.0 (2021-11-25) + +### Bugfixes + +- Prevented throwing an unhandled exception caused by undefined linter arguments + settings (#142) @ssbarnea +- Implemented opening standalone Ansible files that have no workspace associated + (#140) @ganeshrn + +## v0.3.0 (2021-11-18) + +### Minor Changes + +- Added support for nested module options (suboptions) (#116) @tomaciazek +- Adopted use of `creator-ee` execution environment (#132) @ssbarnea +- Updated container cleanup logic for execution environment (#111) @ganeshrn + +### Bugfixes + +- Updated plugin doc cache validate logic for execution environment (#109) + @ganeshrn +- Fixed issue with container copy command (#110) @ganeshrn + +## v0.2.6 (2021-10-29) + +### Bugfixes + +- Fixed auto-completion to account for the builtin modules when used with EE + (#94) @ganeshrn + +## v0.2.5 (2021-10-23) + +### Bugfixes + +- Added a guard for linting only playbook files with the Ansible's built-in + syntax-check when ansible-lint is unavailable. This is used for providing the + diagnostics information (#89) @priyamsahoo + +## v0.2.4 (2021-10-19) + +### Major changes + +The most notable changes that happened were: + +- Renaming and publishing the package under the `@ansible` scope on Npmjs. The + new name is `@ansible/ansible-language-server` now (#10) @webknjaz +- Deprecation of the initial `ansible-language-server` npm package that existed + in the global namespace prior to the rename @ganeshrn +- Adding the auto-completion and diagnostics support for Ansible Execution + Environments @ganeshrn + +### Changes + +- Started falling back to checking playbooks with the Ansible's built-in + syntax-check when `ansible-lint` is not installed or disabled (#5) + @priyamsahoo +- Set the minimum runtime prerequisites to `npm > 7.11.2` and `node >= 12` (#23) + @ssbarnea +- Updated the default settings value to use fully qualified collection name + (FQCN) during auto-completion (#37) @priyamsahoo +- Added auto-completion support for Ansible Execution Environments (#42 #54 #55) + @ganeshrn +- Added diagnostics support for Ansible Execution Environments (#53) @ganeshrn +- Updated module completion return statement to support sorting as per FQCN + (#57) @priyamsahoo + +### Bugfixes + +- Added a fix to check that the module paths are directories before globbing + them during the documentation lookup (#38) @kimbernator +- Implemented documentation fragment discovery (#40) @tomaciazek +- Fixed sort `slice()` exception issue in `ansibleConfig` service (#76) + @ssbarnea +- Fixed an issue with progress handling when `ansible-lint` falls back to + `syntax check` (#88) @yaegassy + +### Misc + +- Replaced `decode`/`encodeURI` with a native VS Code mechanism (#8) @tomaciazek +- Implemented the release CD via `workflow_dispatch` (#65) @webknjaz + +## v0.1.0-1 (2021-07-28) + +- Updated the npm package to include the `out/` folder + +## v0.1.0 (2021-07-28) + +- Initial ansible language server release. Based on the `vscode-ansible` plugin + developed by {user}`Tomasz Maciążek ` diff --git a/.github/CONTRIBUTING.md b/docs/contributing.md similarity index 61% rename from .github/CONTRIBUTING.md rename to docs/contributing.md index ebfd1748c..ad1aeaea0 100644 --- a/.github/CONTRIBUTING.md +++ b/docs/contributing.md @@ -17,3 +17,13 @@ To contribute, you'll need to: `go-task`. [task]: https://taskfile.dev/ + +## Contributing docs + +To build the documentation locally run `task docs`. + +It is also integrated with [Read The Docs][rtd] that builds and publishes each +commit to the main branch and generates live docs previews for each pull +request. + +[rtd]: https://readthedocs.org diff --git a/docs/contributing/code_of_conduct.md b/docs/contributing/code_of_conduct.md deleted file mode 100644 index e810a4bd9..000000000 --- a/docs/contributing/code_of_conduct.md +++ /dev/null @@ -1,3 +0,0 @@ - - -{!../.github/CODE_OF_CONDUCT.md!} diff --git a/docs/contributing/guidelines.md b/docs/contributing/guidelines.md deleted file mode 100644 index 8d520f417..000000000 --- a/docs/contributing/guidelines.md +++ /dev/null @@ -1,13 +0,0 @@ - - -{!../.github/CONTRIBUTING.md!} - -# Contributing docs - -To build the documentation locally run `task docs`: - -It is also integrated with [Read The Docs][rtd] that builds and publishes each -commit to the main branch and generates live docs previews for each pull -request. - -[rtd]: https://readthedocs.org diff --git a/docs/contributing/security.md b/docs/contributing/security.md deleted file mode 100644 index a2bd4f183..000000000 --- a/docs/contributing/security.md +++ /dev/null @@ -1,3 +0,0 @@ - - -{!../.github/SECURITY.md!} diff --git a/docs/images/favicon.ico b/docs/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ea4ebc153b34e8074562dceb88d065afa80513a0 GIT binary patch literal 15406 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 literal 0 HcmV?d00001 diff --git a/docs/images/logo.png b/docs/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f3626b0ae4b13e32725a2577c46b520b6f14e91a GIT binary patch literal 10993 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 + + + + + + diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 0228be542..000000000 --- a/docs/index.md +++ /dev/null @@ -1,3 +0,0 @@ - - -{!../README.md!} diff --git a/mkdocs.yml b/mkdocs.yml index 77a4e296a..e6bdfdd9f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -2,17 +2,42 @@ site_name: Ansible Language Server site_url: https://als.readthedocs.io/ repo_url: https://github.com/ansible/ansible-language-server +edit_uri: blob/main/docs/ theme: name: "material" + logo: images/logo.svg + favicon: images/favicon.ico features: - content.code.copy - content.action.edit + palette: + - media: "(prefers-color-scheme: light)" + primary: teal + accent: blue + scheme: default + toggle: + icon: material/brightness-7 + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: teal + accent: blue + toggle: + icon: material/brightness-4 + name: Switch to light mode extra: social: - icon: fontawesome/brands/github-alt link: https://github.com/ansible/ansible-language-server +nav: + - home: README.md + - changelog.md + - development.md + - settings.md + - Contributing: contributing.md + plugins: - autorefs - search @@ -30,7 +55,8 @@ markdown_extensions: - pymdownx.highlight: anchor_linenums: true - pymdownx.inlinehilite - - pymdownx.snippets + - pymdownx.snippets: + check_paths: true - pymdownx.superfences - pymdownx.magiclink: repo_url_shortener: true @@ -40,8 +66,6 @@ markdown_extensions: user: facelessuser repo: pymdown-extensions normalize_issue_symbols: true - - markdown_include.include: - base_path: docs - pymdownx.tabbed: alternate_style: true - toc: diff --git a/package.json b/package.json index 6f1c99373..6b964e51c 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "main": "./out/server/src/server.js", "types": "./out/server/src/server.d.ts", "files": [ - "CHANGELOG.md", + "docs/changelog.md", "icon.png", "out/server/src" ], diff --git a/tools/release.sh b/tools/release.sh index f33d9acff..d9d2e1bfe 100755 --- a/tools/release.sh +++ b/tools/release.sh @@ -16,22 +16,22 @@ gh api "repos/{owner}/{repo}/releases" --jq '.[0].body' | \ # Remove last newline to avoid double newlines on injection truncate -s -1 out/next.md -# inject the temp nodes into the CHANGELOG.md +# inject the temp nodes into the docs/changelog.md if [[ "${OSTYPE}" == "darwin"* ]]; then SED_OPTION='-i \x27\x27' else SED_OPTION='-i' fi -sed "${SED_OPTION}" -e '//r out/next.md' CHANGELOG.md +sed "${SED_OPTION}" -e '//r out/next.md' docs/changelog.md # use prettier to reformat the changelog, lik rewrapping long lines -npx prettier --loglevel error -w CHANGELOG.md +npx prettier --loglevel error -w docs/changelog.md # update version npm version "${RELEASE_NAME}" --allow-same-version --no-commit-hooks --no-git-tag-version # commit the release -git add package.json package-lock.json CHANGELOG.md +git add package.json package-lock.json docs/changelog.md # run 'task lint' to ensure validity task lint --silent From 8128e0546a3f7bbc96492ce8cd728729e0135111 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 15:22:28 +0530 Subject: [PATCH 498/558] chore: pre-commit autoupdate (#551) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 27b3c137f..1c43392ae 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -52,7 +52,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.17.1 + rev: v6.22.0 hooks: - id: cspell name: Spell check with cspell @@ -92,7 +92,7 @@ repos: hooks: - id: prettier - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.32.2 + rev: v0.33.0 hooks: - id: markdownlint exclude: > @@ -101,7 +101,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.31.0 + rev: v8.33.0 hooks: - id: eslint args: From 797d26e2ad40eaeb5f937b11c0fac454cc4608e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 15:36:10 +0530 Subject: [PATCH 499/558] Bump http-cache-semantics from 4.1.0 to 4.1.1 (#550) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4bea25918..5ae7d3807 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3197,9 +3197,9 @@ "dev": true }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "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": { @@ -9086,9 +9086,9 @@ "dev": true }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "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 }, "http-proxy-agent": { From b18f2f6ef67afb501ca67d080418c5143c06bed0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Giquel?= Date: Mon, 13 Feb 2023 11:19:29 +0100 Subject: [PATCH 500/558] Get module route for FQCN with more than 3 elements (#538) Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- src/services/docsLibrary.ts | 5 +- .../org_1/coll_6/galaxy.yml | 9 ++ .../org_1/coll_6/meta/runtime.yml | 10 ++ .../org_1/coll_6/plugins/modules/module_2.py | 102 ++++++++++++++++++ .../plugins/modules/sub_coll_1/module_1.py | 102 ++++++++++++++++++ test/providers/completionProvider.test.ts | 87 ++++++++++++++- 6 files changed, 311 insertions(+), 4 deletions(-) create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_6/galaxy.yml create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_6/meta/runtime.yml create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/module_2.py create mode 100644 test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/sub_coll_1/module_1.py diff --git a/src/services/docsLibrary.ts b/src/services/docsLibrary.ts index 6d939d6e8..28142a676 100644 --- a/src/services/docsLibrary.ts +++ b/src/services/docsLibrary.ts @@ -192,8 +192,9 @@ export class DocsLibrary { public getModuleRoute(fqcn: string): IPluginRoute | undefined { const fqcn_array = fqcn.split("."); - if (fqcn_array.length === 3) { - const [namespace, collection, name] = fqcn_array; + if (fqcn_array.length >= 3) { + const [namespace, collection] = fqcn_array; + const name = fqcn_array.slice(2).join("."); return this.pluginRouting .get(`${namespace}.${collection}`) ?.get("modules") diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_6/galaxy.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_6/galaxy.yml new file mode 100644 index 000000000..b99a7a106 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_6/galaxy.yml @@ -0,0 +1,9 @@ +--- +authors: + - "Ansible devtools team" +description: "test collection with redirected modules" +license_file: LICENSE +name: coll_6 +namespace: org_1 +readme: README.md +version: 1.0.0 diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_6/meta/runtime.yml b/test/fixtures/common/collections/ansible_collections/org_1/coll_6/meta/runtime.yml new file mode 100644 index 000000000..2cb55003a --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_6/meta/runtime.yml @@ -0,0 +1,10 @@ +--- + +plugin_routing: + modules: + module_1: + redirect: org_1.coll_6.sub_coll_1.module_1 + sub_coll_1.module_2: + redirect: org_1.coll_6.module_2 + deprecation: + warning_text: "Usage of org_1.coll_6.sub_coll_1.module_2 is deprecated." diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/module_2.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/module_2.py new file mode 100644 index 000000000..985bef513 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/module_2.py @@ -0,0 +1,102 @@ +""" +The module file for org_1.coll_6.module_2 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +DOCUMENTATION = """ +module: module_2 +short_description: Test module +description: + - This is a test module 2 +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_4 + opt_4: + description: Option 4 + type: bool + default: No +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_6.module_2: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/sub_coll_1/module_1.py b/test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/sub_coll_1/module_1.py new file mode 100644 index 000000000..901951294 --- /dev/null +++ b/test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/sub_coll_1/module_1.py @@ -0,0 +1,102 @@ +""" +The module file for org_1.coll_6.sub_coll_1.module_1 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +DOCUMENTATION = """ +module: module_1 +short_description: Test module +description: + - This is a test module 1 +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true + sub_sub_opt_2: + description: Sub sub option 2 + type: str + sub_sub_opt_3: + description: Sub sub option 3 + type: list + elements: dict + suboptions: + sub_sub_sub_opt_1: + description: Sub sub sub option 1 + type: int + required: true + sub_sub_sub_opt_2: + description: Sub sub sub option 2 + type: str + sub_sub_sub_opt_3: + description: Sub sub sub option 3 + type: str + choices: ["choice_1", "choice_2"] + sub_sub_sub_opt_4: + description: Sub sub sub option 4 + type: int + opt_2: + description: Option 2 + type: str + opt_3: + description: + - Option 3 + type: str + choices: + - choice_1 + - choice_2 + - choice_3 + - choice_4 + default: choice_4 + opt_4: + description: Option 4 + type: bool + default: No +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_6.sub_coll_1.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: + sub_sub_opt_2: + sub_sub_opt_3: + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: + + - sub_sub_sub_opt_1: + sub_sub_sub_opt_2: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index ed345ab5a..3b1d2c130 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -1,7 +1,10 @@ import { TextDocument } from "vscode-languageserver-textdocument"; import { expect } from "chai"; -import { Position } from "vscode-languageserver"; -import { doCompletion } from "../../src/providers/completionProvider"; +import { Position, CompletionItemKind } from "vscode-languageserver"; +import { + doCompletion, + doCompletionResolve, +} from "../../src/providers/completionProvider"; import {} from "../../src/providers/validationProvider"; import { WorkspaceFolderContext } from "../../src/services/workspaceManager"; import { @@ -545,6 +548,59 @@ function testHostValues( }); } +function testModuleKindAndDocumentation( + context: WorkspaceFolderContext, + textDoc: TextDocument, +) { + const tests = [ + { + moduleName: "org_1.coll_6.module_1", + kind: CompletionItemKind.Reference, + documentation: + "***Redirected to: org_1.coll_6.sub_coll_1.module_1***\n\n*Test module*\n\n**Description**\n\n- This is a test module 1\n\n**Notes**\n\n- This is a dummy module", + }, + { + moduleName: "org_1.coll_6.module_2", + kind: CompletionItemKind.Class, + documentation: + "*Test module*\n\n**Description**\n\n- This is a test module 2\n\n**Notes**\n\n- This is a dummy module", + }, + { + moduleName: "org_1.coll_6.sub_coll_1.module_1", + kind: CompletionItemKind.Class, + documentation: + "*Test module*\n\n**Description**\n\n- This is a test module 1\n\n**Notes**\n\n- This is a dummy module", + }, + { + moduleName: "org_1.coll_6.sub_coll_1.module_2", + kind: CompletionItemKind.Reference, + documentation: + "**DEPRECATED**\n\nUsage of org_1.coll_6.sub_coll_1.module_2 is deprecated.\n\nRemoval date: undefined, removal version: undefined\n\n***Redirected to: org_1.coll_6.module_2***\n\n*Test module*\n\n**Description**\n\n- This is a test module 2\n\n**Notes**\n\n- This is a dummy module", + }, + ]; + + tests.forEach(({ moduleName, kind, documentation }) => { + let resolvedItem; + const position = { line: 34, character: 19 } as Position; + + before(async () => { + const completion = await doCompletion(textDoc, position, context); + const filteredCompletion = completion.filter( + (item) => item.label === moduleName, + ); + expect(filteredCompletion.length).be.equal(1); + expect(filteredCompletion[0].label).be.equal(moduleName); + resolvedItem = await doCompletionResolve(filteredCompletion[0], context); + }); + it(`should provide completion kind ${kind} for ${moduleName}`, () => { + expect(resolvedItem.kind).be.equal(kind); + }); + it(`should provide documentation for ${moduleName}`, () => { + expect(resolvedItem.documentation["value"]).be.equal(documentation); + }); + }); +} + describe("doCompletion()", () => { const workspaceManager = createTestWorkspaceManager(); let fixtureFilePath = "completion/simple_tasks.yml"; @@ -738,6 +794,33 @@ describe("doCompletion()", () => { }); }); + describe("Check module kind and documentation of completion item", () => { + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + + testModuleKindAndDocumentation(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + + testModuleKindAndDocumentation(context, textDoc); + }); + }); + describe("Completion for module options and suboptions", () => { describe("With EE enabled @ee", () => { before(async () => { From 768f7e86971ca5d73cd417713218c7dae210ba17 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Feb 2023 13:29:25 +0530 Subject: [PATCH 501/558] Bump cacheable-request and got (#553) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- package-lock.json | 397 +++++++++++----------------------------------- 1 file changed, 97 insertions(+), 300 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5ae7d3807..714e1de1e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -903,12 +903,12 @@ } }, "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", + "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sindresorhus/is?sponsor=1" @@ -959,18 +959,6 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, - "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, "node_modules/@types/chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", @@ -999,27 +987,12 @@ "integrity": "sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w==", "dev": true }, - "node_modules/@types/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", - "dev": true - }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/lodash": { "version": "4.14.190", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.190.tgz", @@ -1044,15 +1017,6 @@ "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", "dev": true }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/semver": { "version": "7.3.13", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", @@ -1718,54 +1682,30 @@ } }, "node_modules/cacheable-lookup": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz", - "integrity": "sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, "engines": { - "node": ">=10.6.0" + "node": ">=14.16" } }, "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.7.tgz", + "integrity": "sha512-I4SA6mKgDxcxVbSt/UmIkb9Ny8qSkg6ReBHtAAXnZHk7KOSx5g3DTiAOaYzcHCs6oOdHn+bip9T48E6tMvK9hw==", "dev": true, "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" + "@types/http-cache-semantics": "^4.0.1", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.2", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, "engines": { - "node": ">=8" + "node": ">=14.16" } }, "node_modules/caching-transform": { @@ -1958,15 +1898,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2018,19 +1949,6 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, - "node_modules/compress-brotli": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", - "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", - "dev": true, - "dependencies": { - "@types/json-buffer": "~3.0.0", - "json-buffer": "~3.0.1" - }, - "engines": { - "node": ">= 12" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2326,15 +2244,6 @@ "iconv-lite": "^0.6.2" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -2778,10 +2687,13 @@ } }, "node_modules/form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", - "dev": true + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "dev": true, + "engines": { + "node": ">= 14.17" + } }, "node_modules/fp-and-or": { "version": "0.1.3", @@ -3046,24 +2958,22 @@ } }, "node_modules/got": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", - "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", + "version": "12.5.3", + "resolved": "https://registry.npmjs.org/got/-/got-12.5.3.tgz", + "integrity": "sha512-8wKnb9MGU8IPGRIo+/ukTy9XLJBwDiCpIf5TVzQ9Cpol50eMTpBq2GAuDsuDIz7hTYmZgMgC1e9ydr6kSDWs3w==", "dev": true, "dependencies": { - "@sindresorhus/is": "^4.6.0", + "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.1", "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", + "form-data-encoder": "^2.1.2", "get-stream": "^6.0.1", "http2-wrapper": "^2.1.10", "lowercase-keys": "^3.0.0", "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" + "responselike": "^3.0.0" }, "engines": { "node": ">=14.16" @@ -3794,12 +3704,11 @@ ] }, "node_modules/keyv": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz", - "integrity": "sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", "dev": true, "dependencies": { - "compress-brotli": "^1.3.8", "json-buffer": "3.0.1" } }, @@ -4076,12 +3985,15 @@ } }, "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/minimatch": { @@ -4487,12 +4399,12 @@ } }, "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5343,16 +5255,6 @@ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -5614,21 +5516,18 @@ } }, "node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "dev": true, "dependencies": { - "lowercase-keys": "^2.0.0" - } - }, - "node_modules/responselike/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, + "lowercase-keys": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/retry": { @@ -7410,9 +7309,9 @@ } }, "@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", + "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==", "dev": true }, "@szmarczak/http-timer": { @@ -7454,18 +7353,6 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, - "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, "@types/chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", @@ -7494,27 +7381,12 @@ "integrity": "sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w==", "dev": true }, - "@types/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", - "dev": true - }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/lodash": { "version": "4.14.190", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.190.tgz", @@ -7539,15 +7411,6 @@ "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", "dev": true }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/semver": { "version": "7.3.13", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", @@ -7996,41 +7859,24 @@ } }, "cacheable-lookup": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz", - "integrity": "sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true }, "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.7.tgz", + "integrity": "sha512-I4SA6mKgDxcxVbSt/UmIkb9Ny8qSkg6ReBHtAAXnZHk7KOSx5g3DTiAOaYzcHCs6oOdHn+bip9T48E6tMvK9hw==", "dev": true, "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } + "@types/http-cache-semantics": "^4.0.1", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.2", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" } }, "caching-transform": { @@ -8165,15 +8011,6 @@ "wrap-ansi": "^7.0.0" } }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -8213,16 +8050,6 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, - "compress-brotli": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", - "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", - "dev": true, - "requires": { - "@types/json-buffer": "~3.0.0", - "json-buffer": "~3.0.1" - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -8450,15 +8277,6 @@ "iconv-lite": "^0.6.2" } }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -8792,9 +8610,9 @@ } }, "form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "dev": true }, "fp-and-or": { @@ -8974,24 +8792,22 @@ } }, "got": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", - "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", + "version": "12.5.3", + "resolved": "https://registry.npmjs.org/got/-/got-12.5.3.tgz", + "integrity": "sha512-8wKnb9MGU8IPGRIo+/ukTy9XLJBwDiCpIf5TVzQ9Cpol50eMTpBq2GAuDsuDIz7hTYmZgMgC1e9ydr6kSDWs3w==", "dev": true, "requires": { - "@sindresorhus/is": "^4.6.0", + "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.1", "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", + "form-data-encoder": "^2.1.2", "get-stream": "^6.0.1", "http2-wrapper": "^2.1.10", "lowercase-keys": "^3.0.0", "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" + "responselike": "^3.0.0" } }, "graceful-fs": { @@ -9542,12 +9358,11 @@ "dev": true }, "keyv": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz", - "integrity": "sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", "dev": true, "requires": { - "compress-brotli": "^1.3.8", "json-buffer": "3.0.1" } }, @@ -9762,9 +9577,9 @@ } }, "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true }, "minimatch": { @@ -10080,9 +9895,9 @@ "dev": true }, "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", "dev": true }, "npm-bundled": { @@ -10727,16 +10542,6 @@ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -10923,20 +10728,12 @@ "dev": true }, "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "dev": true, "requires": { - "lowercase-keys": "^2.0.0" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } + "lowercase-keys": "^3.0.0" } }, "retry": { From 749c38391629e3e03a20dc78df94a2dc601f7cf6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Feb 2023 13:44:50 +0530 Subject: [PATCH 502/558] Bump Vampire/setup-wsl from 1.3.4 to 2.0.0 (#549) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- .github/workflows/task.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 4fa84875e..648bdaa19 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -79,7 +79,7 @@ jobs: # https://github.com/marketplace/actions/setup-wsl - name: Activate WSL if: "contains(matrix.shell, 'wsl')" - uses: Vampire/setup-wsl@v1.3.4 + uses: Vampire/setup-wsl@v2.0.0 with: set-as-default: 'true' # we want to load user profile From 3e53bf452bd865ebaa6161446a994550b7752bf0 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Sun, 26 Mar 2023 19:42:35 +0530 Subject: [PATCH 503/558] Update packages and adopt new APIs (#558) --- package-lock.json | 2445 ++++++++++++++++++++++++++++------------ package.json | 44 +- src/utils/pathUtils.ts | 6 +- tsconfig.json | 1 + 4 files changed, 1763 insertions(+), 733 deletions(-) diff --git a/package-lock.json b/package-lock.json index 714e1de1e..01374c281 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,42 +9,42 @@ "version": "1.0.4", "license": "MIT", "dependencies": { - "@flatten-js/interval-tree": "^1.0.18", - "glob": "^8.0.1", - "ini": "^3.0.0", + "@flatten-js/interval-tree": "^1.0.20", + "glob": "^9.3.2", + "ini": "^4.0.0", "lodash": "^4.17.21", - "uuid": "^8.3.2", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.4", - "vscode-uri": "^3.0.3", - "yaml": "^1.10.2 <2.0" + "uuid": "^9.0.0", + "vscode-languageserver": "^8.1.0", + "vscode-languageserver-textdocument": "^1.0.8", + "vscode-uri": "^3.0.7", + "yaml": " ^1.10.2 <2.0" }, "bin": { "ansible-language-server": "bin/ansible-language-server" }, "devDependencies": { "@types/chai": "^4.3.4", - "@types/glob": "^8.0.0", + "@types/glob": "^8.1.0", "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.190", + "@types/lodash": "^4.14.191", "@types/mocha": "^10.0.1", - "@types/node": "^18.11.9", - "@types/uuid": "^8.3.4", - "@types/vscode": "^1.73.1", - "@typescript-eslint/eslint-plugin": "^5.45.0", - "@typescript-eslint/parser": "^5.45.0", + "@types/node": "^18.15.9", + "@types/uuid": "^9.0.1", + "@types/vscode": "^1.76.0", + "@typescript-eslint/eslint-plugin": "^5.56.0", + "@typescript-eslint/parser": "^5.56.0", "chai": "^4.3.7", - "eslint": "^8.28.0", - "eslint-config-prettier": "^8.5.0", + "eslint": "^8.36.0", + "eslint-config-prettier": "^8.8.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", - "mocha": "^10.1.0", - "npm-check-updates": "^16.4.3", + "mocha": "^10.2.0", + "npm-check-updates": "^16.8.0", "nyc": "^15.1.0", - "prettier": "^2.8.0", - "rimraf": "^3.0.2", + "prettier": "^2.8.7", + "rimraf": "^4.4.1", "ts-node": "^10.9.1", - "typescript": "^4.9.3" + "typescript": "^5.0.2" }, "engines": { "node": ">=14.0", @@ -454,6 +454,16 @@ "node": ">=6.9.0" } }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -476,16 +486,40 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.1.tgz", + "integrity": "sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", + "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", + "espree": "^9.5.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -499,10 +533,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/js": { + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", + "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@flatten-js/interval-tree": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.18.tgz", - "integrity": "sha512-o72sZErW0Y1C82Cg7nk82ojJ/22EtmKyp5I3eNqgcOKFp/VCzetATYYjJIqOBBaR7FQ/MFj/ZpsmP38mL4TkYA==" + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.20.tgz", + "integrity": "sha512-ZmJAa7pDel/FiSN3gXYnrK51Od+maJ+54hJe2PZlWGFWLfQv1YP9DdjNofpg0+HS956oItjse2eWkIMdTZUhRw==" }, "node_modules/@gar/promisify": { "version": "1.1.3", @@ -511,9 +554,9 @@ "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -746,14 +789,13 @@ } }, "node_modules/@npmcli/git": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.3.tgz", - "integrity": "sha512-8cXNkDIbnXPVbhXMmQ7/bklCAjtmPaXfI9aEM4iH+xSuEHINLMHhlfESvVwdqmHJRJkR48vNJTSUvoF6GRPSFA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.4.tgz", + "integrity": "sha512-5yZghx+u5M47LghaybLCkdSyFzV/w4OuH12d96HO389Ik9CDsLaDZJVynSGGVJOLn6gy/k7Dz5XYcplM3uxXRg==", "dev": true, "dependencies": { "@npmcli/promise-spawn": "^6.0.0", "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", "npm-pick-manifest": "^8.0.0", "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", @@ -781,9 +823,9 @@ } }, "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.1.tgz", - "integrity": "sha512-GIykAFdOVK31Q1/zAtT5MbxqQL2vyl9mvFJv+OGu01zxbhL3p0xc8gJjdNGX1mWmUT43aEKVO2L6V/2j4TOsAA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", "dev": true, "dependencies": { "npm-bundled": "^3.0.0", @@ -810,6 +852,41 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@npmcli/move-file/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/@npmcli/move-file/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/@npmcli/node-gyp": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", @@ -820,9 +897,9 @@ } }, "node_modules/@npmcli/promise-spawn": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.1.tgz", - "integrity": "sha512-+hcUpxgx0vEpDJI9Cn+lkTdKLoqKBXFCVps5H7FujEU2vLOp6KwqjLlxbnz8Wzgm8oEqW/u5FeNAXSFjLdCD0A==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", "dev": true, "dependencies": { "which": "^3.0.0" @@ -902,6 +979,15 @@ "node": ">=12" } }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@sindresorhus/is": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", @@ -959,6 +1045,42 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "node_modules/@tufjs/models": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.1.tgz", + "integrity": "sha512-AY0VoG/AXdlSOocuREfPoEW4SNhOPp/7fw6mpAxfVIny1uZ+0fEtMoCi7NhELSlqQIRLMu7RgfKhkxT+AJ+EXg==", + "dev": true, + "dependencies": { + "minimatch": "^7.4.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", + "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@types/chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", @@ -966,12 +1088,12 @@ "dev": true }, "node_modules/@types/glob": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", - "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", "dev": true, "dependencies": { - "@types/minimatch": "*", + "@types/minimatch": "^5.1.2", "@types/node": "*" } }, @@ -994,15 +1116,15 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.190", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.190.tgz", - "integrity": "sha512-5iJ3FBJBvQHQ8sFhEhJfjUP+G+LalhavTkYyrAYqz5MEJG+erSv0k9KJLb6q7++17Lafk1scaTIFXcMJlwK8Mw==", + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", "dev": true }, "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true }, "node_modules/@types/mocha": { @@ -1012,9 +1134,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "version": "18.15.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.9.tgz", + "integrity": "sha512-dUxhiNzBLr6IqlZXz6e/rN2YQXlFgOei/Dxy+e3cyXTJ4txSUbGT2/fmnD6zd/75jDMeW5bDee+YXxlFKHoV0A==", "dev": true }, "node_modules/@types/semver": { @@ -1024,30 +1146,31 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", "dev": true }, "node_modules/@types/vscode": { - "version": "1.73.1", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.73.1.tgz", - "integrity": "sha512-eArfOrAoZVV+Ao9zQOCaFNaeXj4kTCD+bGS2gyNgIFZH9xVMuLMlRrEkhb22NyxycFWKV1UyTh03vhaVHmqVMg==", + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.76.0.tgz", + "integrity": "sha512-CQcY3+Fe5hNewHnOEAVYj4dd1do/QHliXaknAEYSXx2KEHUzFibDZSKptCon+HPgK55xx20pR+PBJjf0MomnBA==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.0.tgz", - "integrity": "sha512-CXXHNlf0oL+Yg021cxgOdMHNTXD17rHkq7iW6RFHoybdFgQBjU3yIXhhcPpGwr1CjZlo6ET8C6tzX5juQoXeGA==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz", + "integrity": "sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.45.0", - "@typescript-eslint/type-utils": "5.45.0", - "@typescript-eslint/utils": "5.45.0", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/type-utils": "5.56.0", + "@typescript-eslint/utils": "5.56.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, @@ -1069,14 +1192,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.45.0.tgz", - "integrity": "sha512-brvs/WSM4fKUmF5Ot/gEve6qYiCMjm6w4HkHPfS6ZNmxTS0m0iNN4yOChImaCkqc1hRwFGqUyanMXuGal6oyyQ==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz", + "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.45.0", - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/typescript-estree": "5.45.0", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/typescript-estree": "5.56.0", "debug": "^4.3.4" }, "engines": { @@ -1096,13 +1219,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.45.0.tgz", - "integrity": "sha512-noDMjr87Arp/PuVrtvN3dXiJstQR1+XlQ4R1EvzG+NMgXi8CuMCXpb8JqNtFHKceVSQ985BZhfRdowJzbv4yKw==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", + "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/visitor-keys": "5.45.0" + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1113,13 +1236,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.45.0.tgz", - "integrity": "sha512-DY7BXVFSIGRGFZ574hTEyLPRiQIvI/9oGcN8t1A7f6zIs6ftbrU0nhyV26ZW//6f85avkwrLag424n+fkuoJ1Q==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz", + "integrity": "sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.45.0", - "@typescript-eslint/utils": "5.45.0", + "@typescript-eslint/typescript-estree": "5.56.0", + "@typescript-eslint/utils": "5.56.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1140,9 +1263,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.45.0.tgz", - "integrity": "sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", + "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1153,13 +1276,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz", - "integrity": "sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", + "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/visitor-keys": "5.45.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1180,18 +1303,18 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.45.0.tgz", - "integrity": "sha512-OUg2JvsVI1oIee/SwiejTot2OxwU8a7UfTFMOdlhD2y+Hl6memUSL4s98bpUTo8EpVEr0lmwlU7JSu/p2QpSvA==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.56.0.tgz", + "integrity": "sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==", "dev": true, "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.45.0", - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/typescript-estree": "5.45.0", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/typescript-estree": "5.56.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", "semver": "^7.3.7" }, "engines": { @@ -1206,12 +1329,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz", - "integrity": "sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", + "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/types": "5.56.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1271,13 +1394,13 @@ } }, "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", "dev": true, "dependencies": { "debug": "^4.1.0", - "depd": "^1.1.2", + "depd": "^2.0.0", "humanize-ms": "^1.2.1" }, "engines": { @@ -1658,16 +1781,16 @@ } }, "node_modules/cacache": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.2.tgz", - "integrity": "sha512-rYUs2x4OjSgCQND7nTrh21AHIBFgd7s/ctAYvU3a8u+nK+R5YaX/SFPDYz4Azz7SGL6+6L9ZZWI4Kawpb7grzQ==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.5.tgz", + "integrity": "sha512-Y/PRQevNSsjAPWykl9aeGz8Pr+OI6BYM9fYDNMvOkuUiG9IhG4LEmaYrZZZvioMUEQ+cBCxT0v8wrnCURccyKA==", "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", + "fs-minipass": "^3.0.0", + "glob": "^9.3.1", "lru-cache": "^7.7.1", - "minipass": "^3.1.6", + "minipass": "^4.0.0", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", @@ -1875,16 +1998,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", - "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, "dependencies": { - "colors": "1.0.3" + "string-width": "^4.2.0" }, "engines": { - "node": ">= 0.2.0" + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, "node_modules/cliui": { @@ -1925,22 +2051,13 @@ "color-support": "bin.js" } }, - "node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", "dev": true, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=14" } }, "node_modules/commondir": { @@ -2160,12 +2277,12 @@ "dev": true }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/diff": { @@ -2299,13 +2416,16 @@ } }, "node_modules/eslint": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", - "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", + "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.1", + "@eslint/js": "8.36.0", + "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -2315,16 +2435,15 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "espree": "^9.5.0", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.15.0", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", @@ -2339,7 +2458,6 @@ "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" @@ -2355,9 +2473,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -2379,33 +2497,6 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", @@ -2438,9 +2529,9 @@ } }, "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", + "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -2468,9 +2559,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -2667,6 +2758,41 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flat-cache/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/flat-cache/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/flatted": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", @@ -2725,15 +2851,15 @@ ] }, "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==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.1.tgz", + "integrity": "sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==", "dev": true, "dependencies": { - "minipass": "^3.0.0" + "minipass": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/fs.realpath": { @@ -2850,18 +2976,17 @@ } }, "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.2.tgz", + "integrity": "sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==", "dependencies": { "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "minimatch": "^7.4.1", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -2888,14 +3013,17 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", + "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/global-dirs": { @@ -2923,9 +3051,9 @@ } }, "node_modules/globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3184,12 +3312,12 @@ } }, "node_modules/ignore-walk": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.0.tgz", - "integrity": "sha512-bTf9UWe/UP1yxG3QUrj/KOvEhTAUWPcv+WvbFZ28LcqznXabp7Xu6o9y1JEC18+oqODuS7VhTpekV5XvFwsxJg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.2.tgz", + "integrity": "sha512-ezmQ1Dg2b3jVZh2Dh+ar6Eu2MqNSTkyb32HU2MAQQQX9tKM3q/UQ/9lf03lQ5hW+fOeoMnwxwkleZ0xcNp0/qg==", "dev": true, "dependencies": { - "minimatch": "^5.0.1" + "minimatch": "^7.4.2" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -3205,15 +3333,18 @@ } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", + "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/import-fresh": { @@ -3269,6 +3400,7 @@ "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" @@ -3277,14 +3409,15 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", - "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.0.0.tgz", + "integrity": "sha512-t0ikzf5qkSFqRl1e6ejKBe+Tk2bsQd8ivEkcisyGXsku2t8NvXZ1Y3RRz5vxrDgOrTBOi13CvGsVoI5wVpd7xg==", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/ip": { @@ -3545,6 +3678,26 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-processinfo/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/istanbul-lib-processinfo/node_modules/p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", @@ -3557,6 +3710,30 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-processinfo/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/istanbul-lib-processinfo/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -3822,7 +3999,6 @@ "version": "7.14.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", - "dev": true, "engines": { "node": ">=12" } @@ -3897,6 +4073,15 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/make-fetch-happen/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/make-fetch-happen/node_modules/cacache": { "version": "16.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", @@ -3926,6 +4111,118 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/make-fetch-happen/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/make-fetch-happen/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/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/make-fetch-happen/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/make-fetch-happen/node_modules/rimraf/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/make-fetch-happen/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/make-fetch-happen/node_modules/rimraf/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/make-fetch-happen/node_modules/ssri": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", @@ -4015,13 +4312,9 @@ "dev": true }, "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" - }, + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", + "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==", "engines": { "node": ">=8" } @@ -4038,6 +4331,18 @@ "node": ">= 8" } }, + "node_modules/minipass-collect/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-fetch": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", @@ -4055,6 +4360,18 @@ "encoding": "^0.1.13" } }, + "node_modules/minipass-fetch/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-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -4067,6 +4384,18 @@ "node": ">= 8" } }, + "node_modules/minipass-flush/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-json-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", @@ -4077,6 +4406,18 @@ "minipass": "^3.0.0" } }, + "node_modules/minipass-json-stream/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-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -4089,6 +4430,18 @@ "node": ">=8" } }, + "node_modules/minipass-pipeline/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-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", @@ -4101,6 +4454,18 @@ "node": ">=8" } }, + "node_modules/minipass-sized/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/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -4114,6 +4479,18 @@ "node": ">= 8" } }, + "node_modules/minizlib/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/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -4127,9 +4504,9 @@ } }, "node_modules/mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", @@ -4286,9 +4663,9 @@ "dev": true }, "node_modules/node-gyp": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", - "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz", + "integrity": "sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==", "dev": true, "dependencies": { "env-paths": "^2.2.0", @@ -4306,7 +4683,7 @@ "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^12.22 || ^14.13 || >=16" + "node": "^12.13 || ^14.13 || >=16" } }, "node_modules/node-gyp/node_modules/glob": { @@ -4329,6 +4706,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/node-gyp/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/node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -4423,40 +4815,41 @@ } }, "node_modules/npm-check-updates": { - "version": "16.4.3", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.4.3.tgz", - "integrity": "sha512-kuTErUSd9DkJKU5Kf5nitkN4Yf8k41OJL/hudtRR+Rf9YaKJasLHHnQboQdEtbf6DFrqMzwxrPSX8p1engLLbQ==", + "version": "16.8.0", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.8.0.tgz", + "integrity": "sha512-2xpFtUPa2OyswC8kpIpxRqQcP/D0uqaBgfiOQAtvGlnDhmHr3QwR2gWjjWtS6xnNvgyyVly/4edY0Uu24c46ew==", "dev": true, "dependencies": { - "chalk": "^5.1.2", - "cli-table": "^0.3.11", - "commander": "^9.4.1", + "chalk": "^5.2.0", + "cli-table3": "^0.6.3", + "commander": "^10.0.0", "fast-memoize": "^2.5.2", "find-up": "5.0.0", "fp-and-or": "^0.1.3", "get-stdin": "^8.0.0", "globby": "^11.0.4", "hosted-git-info": "^5.1.0", - "ini": "^3.0.1", + "ini": "^4.0.0", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", "lodash": "^4.17.21", - "minimatch": "^5.1.0", + "minimatch": "^7.4.3", "p-map": "^4.0.0", - "pacote": "15.0.6", + "pacote": "15.1.1", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts-ncu": "^2.5.1", - "rc-config-loader": "^4.1.1", + "rc-config-loader": "^4.1.2", "remote-git-tags": "^3.0.0", - "rimraf": "^3.0.2", + "rimraf": "^4.4.1", "semver": "^7.3.8", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^2.0.1", + "strip-json-comments": "^5.0.0", "untildify": "^4.0.0", "update-notifier": "^6.0.2", - "yaml": "^2.1.3" + "yaml": "^2.2.1" }, "bin": { "ncu": "build/src/bin/cli.js", @@ -4476,9 +4869,9 @@ } }, "node_modules/npm-check-updates/node_modules/chalk": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", - "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -4488,30 +4881,45 @@ } }, "node_modules/npm-check-updates/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", + "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-check-updates/node_modules/strip-json-comments": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz", + "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm-check-updates/node_modules/yaml": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", - "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", + "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", "dev": true, "engines": { "node": ">= 14" } }, "node_modules/npm-install-checks": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.0.0.tgz", - "integrity": "sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.0.tgz", + "integrity": "sha512-udSGENih/5xKh3Ex+L0PtZcOt0Pa+6ppDLnpG5D49/EhMja3LupaY9E/DtJTxyFBwE09ot7Fc+H4DywnZNWTVA==", "dev": true, "dependencies": { "semver": "^7.1.1" @@ -4530,9 +4938,9 @@ } }, "node_modules/npm-package-arg": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.0.0.tgz", - "integrity": "sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "dependencies": { "hosted-git-info": "^6.0.0", @@ -4557,9 +4965,9 @@ } }, "node_modules/npm-packlist": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.2.tgz", - "integrity": "sha512-d2+7RMySjVXssww23rV5NuIq1NzGvM04OlI5kwnvtYKfFTAPVs6Zxmxns2HRtJEA1oNj7D/BbFXeVAOLmW3N3Q==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", "dev": true, "dependencies": { "ignore-walk": "^6.0.0" @@ -4584,13 +4992,13 @@ } }, "node_modules/npm-registry-fetch": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.2.tgz", - "integrity": "sha512-TMenrMagFA9KF81E2bkS5XRyzERK4KXu70vgXt5+i8FcrFeLNgNsc6e5hekTqjDwPDkL3HGn/holWcXDMfnFgw==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz", + "integrity": "sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA==", "dev": true, "dependencies": { "make-fetch-happen": "^11.0.0", - "minipass": "^3.1.6", + "minipass": "^4.0.0", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", @@ -4602,20 +5010,19 @@ } }, "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.1.tgz", - "integrity": "sha512-clv3IblugXn2CDUmqFhNzii3rjKa46u5wNeivc+QlLXkGI5FjLX3rGboo+y2kwf1pd8W0iDiC384cemeDtw9kw==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.0", + "http-cache-semantics": "^4.1.1", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", + "minipass": "^4.0.0", "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", @@ -4629,12 +5036,12 @@ } }, "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.0.tgz", - "integrity": "sha512-NSx3k5gR4Q5Ts2poCM/19d45VwhVLBtJZ6ypYcthj2BwmDx/e7lW8Aadnyt3edd2W0ecb+b0o7FYLRYE2AGcQg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", "dev": true, "dependencies": { - "minipass": "^3.1.6", + "minipass": "^4.0.0", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, @@ -4805,6 +5212,21 @@ "node": ">=8" } }, + "node_modules/nyc/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/nyc/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -4864,6 +5286,7 @@ "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" } @@ -4982,9 +5405,9 @@ } }, "node_modules/pacote": { - "version": "15.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.6.tgz", - "integrity": "sha512-dQwcz/sME7QIL+cdrw/jftQfMMXxSo17i2kJ/gnhBhUvvBAsxoBu1lw9B5IzCH/Ce8CvEkG/QYZ6txzKfn0bTw==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.1.tgz", + "integrity": "sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ==", "dev": true, "dependencies": { "@npmcli/git": "^4.0.0", @@ -4992,8 +5415,8 @@ "@npmcli/promise-spawn": "^6.0.1", "@npmcli/run-script": "^6.0.0", "cacache": "^17.0.0", - "fs-minipass": "^2.1.0", - "minipass": "^3.1.6", + "fs-minipass": "^3.0.0", + "minipass": "^4.0.0", "npm-package-arg": "^10.0.0", "npm-packlist": "^7.0.0", "npm-pick-manifest": "^8.0.0", @@ -5002,6 +5425,7 @@ "promise-retry": "^2.0.1", "read-package-json": "^6.0.0", "read-package-json-fast": "^3.0.0", + "sigstore": "^1.0.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, @@ -5063,6 +5487,21 @@ "node": ">=8" } }, + "node_modules/path-scurry": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.3.tgz", + "integrity": "sha512-RAmB+n30SlN+HnNx6EbcpoDy9nwdpcGPnEKrJnu6GZoDWBdIjo1UQMVtW2ybtC7LC2oKLcMq8y5g8WnKLiod9g==", + "dependencies": { + "lru-cache": "^7.14.1", + "minipass": "^4.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -5173,9 +5612,9 @@ } }, "node_modules/prettier": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", - "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -5256,9 +5695,9 @@ "dev": true }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { "node": ">=6" @@ -5336,14 +5775,14 @@ } }, "node_modules/rc-config-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.1.tgz", - "integrity": "sha512-S10o85x/szboh7FOxUyU+KuED+gr9V7SEnUBOzSn+vd1K8J2MtkP1RCPWg8Sw5kkuZKr7976bFzacCM6QtAApQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.2.tgz", + "integrity": "sha512-qKTnVWFl9OQYKATPzdfaZIbTxcHziQl92zYSxYC6umhOqyAsoj8H8Gq/+aFjAso68sBdjTz3A7omqeAkkF1MWg==", "dev": true, "dependencies": { "debug": "^4.3.4", "js-yaml": "^4.1.0", - "json5": "^2.2.1", + "json5": "^2.2.2", "require-from-string": "^2.0.2" } }, @@ -5363,12 +5802,12 @@ } }, "node_modules/read-package-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.0.tgz", - "integrity": "sha512-b/9jxWJ8EwogJPpv99ma+QwtqB7FSl3+V6UXS7Aaay8/5VwMY50oIFooY1UKXMWpfNCM6T/PoGqa5GD1g9xf9w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.1.tgz", + "integrity": "sha512-AaHqXxfAVa+fNL07x8iAghfKOds/XXsu7zoouIVsbm7PEbQ3nMWXlvjcbrNLjElnUHWQtAo4QEa0RXuvD4XlpA==", "dev": true, "dependencies": { - "glob": "^8.0.1", + "glob": "^9.3.0", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^5.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -5378,9 +5817,9 @@ } }, "node_modules/read-package-json-fast": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.1.tgz", - "integrity": "sha512-8+HW7Yo+cjfF+md8DqsZHgats2mxf7gGYow/+2JjxrftoHFZz9v4dzd0EubzYbkNaLxrTVcnllHwklXN2+7aTQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, "dependencies": { "json-parse-even-better-errors": "^3.0.0", @@ -5391,9 +5830,9 @@ } }, "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "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", @@ -5416,18 +5855,6 @@ "node": ">=8.10.0" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/registry-auth-token": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.1.tgz", @@ -5550,35 +5977,18 @@ } }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "glob": "^9.2.0" }, "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" + "rimraf": "dist/cjs/src/bin.js" }, "engines": { - "node": "*" + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -5710,6 +6120,66 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/sigstore": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.2.0.tgz", + "integrity": "sha512-Fr9+W1nkBSIZCkJQR7jDn/zI0UXNsVpp+7mDQkCnZOIxG9p6yNXBx9xntHsfUyYHE55XDkkVV3+rYbrkzAeesA==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.0.0" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/make-fetch-happen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "dev": true, + "dependencies": { + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -5811,10 +6281,45 @@ "node": ">=8" } }, + "node_modules/spawn-wrap/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/spawn-wrap/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/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", @@ -5838,9 +6343,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, "node_modules/sprintf-js": { @@ -5850,12 +6355,12 @@ "dev": true }, "node_modules/ssri": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.0.tgz", - "integrity": "sha512-64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", + "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", "dev": true, "dependencies": { - "minipass": "^3.1.1" + "minipass": "^4.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -5949,21 +6454,45 @@ "node": ">=8" } }, - "node_modules/tar": { - "version": "6.1.12", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", - "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", + "node_modules/tar": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^4.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/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/tar/node_modules/fs-minipass/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": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, "node_modules/test-exclude": { @@ -6100,6 +6629,62 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, + "node_modules/tuf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.2.tgz", + "integrity": "sha512-gBfbnS6khluxjvoFCpRV0fhWT265xNfpiNXOcBX0Ze6HGbPhe93UG5V5DdKcgm/aXsMadnY76l/h6j63GmJS5g==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.1", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "dev": true, + "dependencies": { + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -6143,16 +6728,16 @@ } }, "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", + "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=12.20" } }, "node_modules/uglify-js": { @@ -6298,9 +6883,9 @@ "dev": true }, "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "bin": { "uuid": "dist/bin/uuid" } @@ -6334,47 +6919,47 @@ } }, "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", + "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==", "engines": { - "node": ">=8.0.0 || >=10.0.0" + "node": ">=14.0.0" } }, "node_modules/vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz", + "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==", "dependencies": { - "vscode-languageserver-protocol": "3.16.0" + "vscode-languageserver-protocol": "3.17.3" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", + "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" + "vscode-jsonrpc": "8.1.0", + "vscode-languageserver-types": "3.17.3" } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.5.tgz", - "integrity": "sha512-1ah7zyQjKBudnMiHbZmxz5bYNM9KKZYz+5VQLj+yr8l+9w3g+WAhCkUkWbhMEdC5u0ub4Ndiye/fDyS8ghIKQg==" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" }, "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", + "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" }, "node_modules/vscode-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", - "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" }, "node_modules/which": { "version": "2.0.2", @@ -6512,7 +7097,8 @@ "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==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -6963,6 +7549,13 @@ "to-fast-properties": "^2.0.0" } }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true + }, "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -6984,16 +7577,31 @@ } } }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.1.tgz", + "integrity": "sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==", + "dev": true + }, "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", + "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", + "espree": "^9.5.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -7001,10 +7609,16 @@ "strip-json-comments": "^3.1.1" } }, + "@eslint/js": { + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", + "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", + "dev": true + }, "@flatten-js/interval-tree": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.18.tgz", - "integrity": "sha512-o72sZErW0Y1C82Cg7nk82ojJ/22EtmKyp5I3eNqgcOKFp/VCzetATYYjJIqOBBaR7FQ/MFj/ZpsmP38mL4TkYA==" + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.20.tgz", + "integrity": "sha512-ZmJAa7pDel/FiSN3gXYnrK51Od+maJ+54hJe2PZlWGFWLfQv1YP9DdjNofpg0+HS956oItjse2eWkIMdTZUhRw==" }, "@gar/promisify": { "version": "1.1.3", @@ -7013,9 +7627,9 @@ "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -7192,14 +7806,13 @@ } }, "@npmcli/git": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.3.tgz", - "integrity": "sha512-8cXNkDIbnXPVbhXMmQ7/bklCAjtmPaXfI9aEM4iH+xSuEHINLMHhlfESvVwdqmHJRJkR48vNJTSUvoF6GRPSFA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.4.tgz", + "integrity": "sha512-5yZghx+u5M47LghaybLCkdSyFzV/w4OuH12d96HO389Ik9CDsLaDZJVynSGGVJOLn6gy/k7Dz5XYcplM3uxXRg==", "dev": true, "requires": { "@npmcli/promise-spawn": "^6.0.0", "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", "npm-pick-manifest": "^8.0.0", "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", @@ -7220,9 +7833,9 @@ } }, "@npmcli/installed-package-contents": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.1.tgz", - "integrity": "sha512-GIykAFdOVK31Q1/zAtT5MbxqQL2vyl9mvFJv+OGu01zxbhL3p0xc8gJjdNGX1mWmUT43aEKVO2L6V/2j4TOsAA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", "dev": true, "requires": { "npm-bundled": "^3.0.0", @@ -7237,6 +7850,31 @@ "requires": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "@npmcli/node-gyp": { @@ -7246,9 +7884,9 @@ "dev": true }, "@npmcli/promise-spawn": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.1.tgz", - "integrity": "sha512-+hcUpxgx0vEpDJI9Cn+lkTdKLoqKBXFCVps5H7FujEU2vLOp6KwqjLlxbnz8Wzgm8oEqW/u5FeNAXSFjLdCD0A==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", "dev": true, "requires": { "which": "^3.0.0" @@ -7308,6 +7946,12 @@ "config-chain": "^1.1.11" } }, + "@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true + }, "@sindresorhus/is": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", @@ -7353,6 +7997,35 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "@tufjs/models": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.1.tgz", + "integrity": "sha512-AY0VoG/AXdlSOocuREfPoEW4SNhOPp/7fw6mpAxfVIny1uZ+0fEtMoCi7NhELSlqQIRLMu7RgfKhkxT+AJ+EXg==", + "dev": true, + "requires": { + "minimatch": "^7.4.2" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", + "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "@types/chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", @@ -7360,12 +8033,12 @@ "dev": true }, "@types/glob": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", - "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", "dev": true, "requires": { - "@types/minimatch": "*", + "@types/minimatch": "^5.1.2", "@types/node": "*" } }, @@ -7388,15 +8061,15 @@ "dev": true }, "@types/lodash": { - "version": "4.14.190", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.190.tgz", - "integrity": "sha512-5iJ3FBJBvQHQ8sFhEhJfjUP+G+LalhavTkYyrAYqz5MEJG+erSv0k9KJLb6q7++17Lafk1scaTIFXcMJlwK8Mw==", + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", "dev": true }, "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true }, "@types/mocha": { @@ -7406,9 +8079,9 @@ "dev": true }, "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "version": "18.15.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.9.tgz", + "integrity": "sha512-dUxhiNzBLr6IqlZXz6e/rN2YQXlFgOei/Dxy+e3cyXTJ4txSUbGT2/fmnD6zd/75jDMeW5bDee+YXxlFKHoV0A==", "dev": true }, "@types/semver": { @@ -7418,82 +8091,83 @@ "dev": true }, "@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", "dev": true }, "@types/vscode": { - "version": "1.73.1", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.73.1.tgz", - "integrity": "sha512-eArfOrAoZVV+Ao9zQOCaFNaeXj4kTCD+bGS2gyNgIFZH9xVMuLMlRrEkhb22NyxycFWKV1UyTh03vhaVHmqVMg==", + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.76.0.tgz", + "integrity": "sha512-CQcY3+Fe5hNewHnOEAVYj4dd1do/QHliXaknAEYSXx2KEHUzFibDZSKptCon+HPgK55xx20pR+PBJjf0MomnBA==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.0.tgz", - "integrity": "sha512-CXXHNlf0oL+Yg021cxgOdMHNTXD17rHkq7iW6RFHoybdFgQBjU3yIXhhcPpGwr1CjZlo6ET8C6tzX5juQoXeGA==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz", + "integrity": "sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.45.0", - "@typescript-eslint/type-utils": "5.45.0", - "@typescript-eslint/utils": "5.45.0", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/type-utils": "5.56.0", + "@typescript-eslint/utils": "5.56.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" } }, "@typescript-eslint/parser": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.45.0.tgz", - "integrity": "sha512-brvs/WSM4fKUmF5Ot/gEve6qYiCMjm6w4HkHPfS6ZNmxTS0m0iNN4yOChImaCkqc1hRwFGqUyanMXuGal6oyyQ==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz", + "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.45.0", - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/typescript-estree": "5.45.0", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/typescript-estree": "5.56.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.45.0.tgz", - "integrity": "sha512-noDMjr87Arp/PuVrtvN3dXiJstQR1+XlQ4R1EvzG+NMgXi8CuMCXpb8JqNtFHKceVSQ985BZhfRdowJzbv4yKw==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", + "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/visitor-keys": "5.45.0" + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0" } }, "@typescript-eslint/type-utils": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.45.0.tgz", - "integrity": "sha512-DY7BXVFSIGRGFZ574hTEyLPRiQIvI/9oGcN8t1A7f6zIs6ftbrU0nhyV26ZW//6f85avkwrLag424n+fkuoJ1Q==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz", + "integrity": "sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.45.0", - "@typescript-eslint/utils": "5.45.0", + "@typescript-eslint/typescript-estree": "5.56.0", + "@typescript-eslint/utils": "5.56.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.45.0.tgz", - "integrity": "sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", + "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz", - "integrity": "sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", + "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/visitor-keys": "5.45.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7502,28 +8176,28 @@ } }, "@typescript-eslint/utils": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.45.0.tgz", - "integrity": "sha512-OUg2JvsVI1oIee/SwiejTot2OxwU8a7UfTFMOdlhD2y+Hl6memUSL4s98bpUTo8EpVEr0lmwlU7JSu/p2QpSvA==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.56.0.tgz", + "integrity": "sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==", "dev": true, "requires": { + "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.45.0", - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/typescript-estree": "5.45.0", + "@typescript-eslint/scope-manager": "5.56.0", + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/typescript-estree": "5.56.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", "semver": "^7.3.7" } }, "@typescript-eslint/visitor-keys": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz", - "integrity": "sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", + "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", "dev": true, "requires": { - "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/types": "5.56.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -7562,13 +8236,13 @@ } }, "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", "dev": true, "requires": { "debug": "^4.1.0", - "depd": "^1.1.2", + "depd": "^2.0.0", "humanize-ms": "^1.2.1" } }, @@ -7838,16 +8512,16 @@ } }, "cacache": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.2.tgz", - "integrity": "sha512-rYUs2x4OjSgCQND7nTrh21AHIBFgd7s/ctAYvU3a8u+nK+R5YaX/SFPDYz4Azz7SGL6+6L9ZZWI4Kawpb7grzQ==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.5.tgz", + "integrity": "sha512-Y/PRQevNSsjAPWykl9aeGz8Pr+OI6BYM9fYDNMvOkuUiG9IhG4LEmaYrZZZvioMUEQ+cBCxT0v8wrnCURccyKA==", "dev": true, "requires": { "@npmcli/fs": "^3.1.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", + "fs-minipass": "^3.0.0", + "glob": "^9.3.1", "lru-cache": "^7.7.1", - "minipass": "^3.1.6", + "minipass": "^4.0.0", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", @@ -7991,13 +8665,14 @@ "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "dev": true }, - "cli-table": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", - "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, "requires": { - "colors": "1.0.3" + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" } }, "cliui": { @@ -8032,16 +8707,10 @@ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "dev": true - }, "commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", "dev": true }, "commondir": { @@ -8211,9 +8880,9 @@ "dev": true }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, "diff": { @@ -8314,13 +8983,16 @@ "dev": true }, "eslint": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", - "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", + "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.1", + "@eslint/js": "8.36.0", + "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -8330,16 +9002,15 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "espree": "^9.5.0", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.15.0", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", @@ -8354,7 +9025,6 @@ "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" @@ -8379,9 +9049,9 @@ } }, "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", "dev": true, "requires": {} }, @@ -8395,23 +9065,6 @@ "estraverse": "^4.1.1" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, "eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", @@ -8419,9 +9072,9 @@ "dev": true }, "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", + "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -8436,9 +9089,9 @@ "dev": true }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -8591,6 +9244,31 @@ "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "flatted": { @@ -8628,12 +9306,12 @@ "dev": true }, "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.1.tgz", + "integrity": "sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==", "dev": true, "requires": { - "minipass": "^3.0.0" + "minipass": "^4.0.0" } }, "fs.realpath": { @@ -8713,15 +9391,14 @@ "dev": true }, "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.2.tgz", + "integrity": "sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==", "requires": { "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "minimatch": "^7.4.1", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "dependencies": { "brace-expansion": { @@ -8733,9 +9410,9 @@ } }, "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", + "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", "requires": { "brace-expansion": "^2.0.1" } @@ -8769,9 +9446,9 @@ } }, "globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -8964,12 +9641,12 @@ "dev": true }, "ignore-walk": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.0.tgz", - "integrity": "sha512-bTf9UWe/UP1yxG3QUrj/KOvEhTAUWPcv+WvbFZ28LcqznXabp7Xu6o9y1JEC18+oqODuS7VhTpekV5XvFwsxJg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.2.tgz", + "integrity": "sha512-ezmQ1Dg2b3jVZh2Dh+ar6Eu2MqNSTkyb32HU2MAQQQX9tKM3q/UQ/9lf03lQ5hW+fOeoMnwxwkleZ0xcNp0/qg==", "dev": true, "requires": { - "minimatch": "^5.0.1" + "minimatch": "^7.4.2" }, "dependencies": { "brace-expansion": { @@ -8982,9 +9659,9 @@ } }, "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", + "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -9030,6 +9707,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -9038,12 +9716,13 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", - "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.0.0.tgz", + "integrity": "sha512-t0ikzf5qkSFqRl1e6ejKBe+Tk2bsQd8ivEkcisyGXsku2t8NvXZ1Y3RRz5vxrDgOrTBOi13CvGsVoI5wVpd7xg==" }, "ip": { "version": "2.0.0", @@ -9230,6 +9909,20 @@ "uuid": "^8.3.2" }, "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + }, "p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", @@ -9238,6 +9931,21 @@ "requires": { "aggregate-error": "^3.0.0" } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true } } }, @@ -9445,8 +10153,7 @@ "lru-cache": { "version": "7.14.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", - "dev": true + "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==" }, "make-dir": { "version": "3.1.0", @@ -9505,6 +10212,15 @@ "semver": "^7.3.5" } }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "cacache": { "version": "16.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", @@ -9531,6 +10247,90 @@ "unique-filename": "^2.0.0" } }, + "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, + "requires": { + "minipass": "^3.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "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, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, "ssri": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", @@ -9598,13 +10398,9 @@ "dev": true }, "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", + "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==" }, "minipass-collect": { "version": "1.0.2", @@ -9613,6 +10409,17 @@ "dev": true, "requires": { "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "minipass-fetch": { @@ -9625,6 +10432,17 @@ "minipass": "^3.1.6", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "minipass-flush": { @@ -9634,6 +10452,17 @@ "dev": true, "requires": { "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "minipass-json-stream": { @@ -9644,6 +10473,17 @@ "requires": { "jsonparse": "^1.3.1", "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "minipass-pipeline": { @@ -9653,6 +10493,17 @@ "dev": true, "requires": { "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "minipass-sized": { @@ -9662,6 +10513,17 @@ "dev": true, "requires": { "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "minizlib": { @@ -9672,6 +10534,17 @@ "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "mkdirp": { @@ -9681,9 +10554,9 @@ "dev": true }, "mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, "requires": { "ansi-colors": "4.1.1", @@ -9808,9 +10681,9 @@ "dev": true }, "node-gyp": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", - "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz", + "integrity": "sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==", "dev": true, "requires": { "env-paths": "^2.2.0", @@ -9838,6 +10711,15 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } } } }, @@ -9910,40 +10792,41 @@ } }, "npm-check-updates": { - "version": "16.4.3", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.4.3.tgz", - "integrity": "sha512-kuTErUSd9DkJKU5Kf5nitkN4Yf8k41OJL/hudtRR+Rf9YaKJasLHHnQboQdEtbf6DFrqMzwxrPSX8p1engLLbQ==", + "version": "16.8.0", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.8.0.tgz", + "integrity": "sha512-2xpFtUPa2OyswC8kpIpxRqQcP/D0uqaBgfiOQAtvGlnDhmHr3QwR2gWjjWtS6xnNvgyyVly/4edY0Uu24c46ew==", "dev": true, "requires": { - "chalk": "^5.1.2", - "cli-table": "^0.3.11", - "commander": "^9.4.1", + "chalk": "^5.2.0", + "cli-table3": "^0.6.3", + "commander": "^10.0.0", "fast-memoize": "^2.5.2", "find-up": "5.0.0", "fp-and-or": "^0.1.3", "get-stdin": "^8.0.0", "globby": "^11.0.4", "hosted-git-info": "^5.1.0", - "ini": "^3.0.1", + "ini": "^4.0.0", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", "lodash": "^4.17.21", - "minimatch": "^5.1.0", + "minimatch": "^7.4.3", "p-map": "^4.0.0", - "pacote": "15.0.6", + "pacote": "15.1.1", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts-ncu": "^2.5.1", - "rc-config-loader": "^4.1.1", + "rc-config-loader": "^4.1.2", "remote-git-tags": "^3.0.0", - "rimraf": "^3.0.2", + "rimraf": "^4.4.1", "semver": "^7.3.8", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^2.0.1", + "strip-json-comments": "^5.0.0", "untildify": "^4.0.0", "update-notifier": "^6.0.2", - "yaml": "^2.1.3" + "yaml": "^2.2.1" }, "dependencies": { "brace-expansion": { @@ -9956,32 +10839,38 @@ } }, "chalk": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", - "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "dev": true }, "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", + "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", "dev": true, "requires": { "brace-expansion": "^2.0.1" } }, + "strip-json-comments": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz", + "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==", + "dev": true + }, "yaml": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", - "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", + "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", "dev": true } } }, "npm-install-checks": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.0.0.tgz", - "integrity": "sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.0.tgz", + "integrity": "sha512-udSGENih/5xKh3Ex+L0PtZcOt0Pa+6ppDLnpG5D49/EhMja3LupaY9E/DtJTxyFBwE09ot7Fc+H4DywnZNWTVA==", "dev": true, "requires": { "semver": "^7.1.1" @@ -9994,9 +10883,9 @@ "dev": true }, "npm-package-arg": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.0.0.tgz", - "integrity": "sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "requires": { "hosted-git-info": "^6.0.0", @@ -10017,9 +10906,9 @@ } }, "npm-packlist": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.2.tgz", - "integrity": "sha512-d2+7RMySjVXssww23rV5NuIq1NzGvM04OlI5kwnvtYKfFTAPVs6Zxmxns2HRtJEA1oNj7D/BbFXeVAOLmW3N3Q==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", "dev": true, "requires": { "ignore-walk": "^6.0.0" @@ -10038,13 +10927,13 @@ } }, "npm-registry-fetch": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.2.tgz", - "integrity": "sha512-TMenrMagFA9KF81E2bkS5XRyzERK4KXu70vgXt5+i8FcrFeLNgNsc6e5hekTqjDwPDkL3HGn/holWcXDMfnFgw==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz", + "integrity": "sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA==", "dev": true, "requires": { "make-fetch-happen": "^11.0.0", - "minipass": "^3.1.6", + "minipass": "^4.0.0", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", @@ -10053,20 +10942,19 @@ }, "dependencies": { "make-fetch-happen": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.1.tgz", - "integrity": "sha512-clv3IblugXn2CDUmqFhNzii3rjKa46u5wNeivc+QlLXkGI5FjLX3rGboo+y2kwf1pd8W0iDiC384cemeDtw9kw==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", "dev": true, "requires": { "agentkeepalive": "^4.2.1", "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.0", + "http-cache-semantics": "^4.1.1", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", + "minipass": "^4.0.0", "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", @@ -10077,13 +10965,13 @@ } }, "minipass-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.0.tgz", - "integrity": "sha512-NSx3k5gR4Q5Ts2poCM/19d45VwhVLBtJZ6ypYcthj2BwmDx/e7lW8Aadnyt3edd2W0ecb+b0o7FYLRYE2AGcQg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", "dev": true, "requires": { "encoding": "^0.1.13", - "minipass": "^3.1.6", + "minipass": "^4.0.0", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" } @@ -10214,6 +11102,15 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -10266,6 +11163,7 @@ "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, "requires": { "wrappy": "1" } @@ -10348,9 +11246,9 @@ } }, "pacote": { - "version": "15.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.6.tgz", - "integrity": "sha512-dQwcz/sME7QIL+cdrw/jftQfMMXxSo17i2kJ/gnhBhUvvBAsxoBu1lw9B5IzCH/Ce8CvEkG/QYZ6txzKfn0bTw==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.1.tgz", + "integrity": "sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ==", "dev": true, "requires": { "@npmcli/git": "^4.0.0", @@ -10358,8 +11256,8 @@ "@npmcli/promise-spawn": "^6.0.1", "@npmcli/run-script": "^6.0.0", "cacache": "^17.0.0", - "fs-minipass": "^2.1.0", - "minipass": "^3.1.6", + "fs-minipass": "^3.0.0", + "minipass": "^4.0.0", "npm-package-arg": "^10.0.0", "npm-packlist": "^7.0.0", "npm-pick-manifest": "^8.0.0", @@ -10368,6 +11266,7 @@ "promise-retry": "^2.0.1", "read-package-json": "^6.0.0", "read-package-json-fast": "^3.0.0", + "sigstore": "^1.0.0", "ssri": "^10.0.0", "tar": "^6.1.11" } @@ -10405,6 +11304,15 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, + "path-scurry": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.3.tgz", + "integrity": "sha512-RAmB+n30SlN+HnNx6EbcpoDy9nwdpcGPnEKrJnu6GZoDWBdIjo1UQMVtW2ybtC7LC2oKLcMq8y5g8WnKLiod9g==", + "requires": { + "lru-cache": "^7.14.1", + "minipass": "^4.0.2" + } + }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -10484,9 +11392,9 @@ "dev": true }, "prettier": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", - "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true }, "proc-log": { @@ -10543,9 +11451,9 @@ "dev": true }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, "pupa": { @@ -10605,33 +11513,33 @@ } }, "rc-config-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.1.tgz", - "integrity": "sha512-S10o85x/szboh7FOxUyU+KuED+gr9V7SEnUBOzSn+vd1K8J2MtkP1RCPWg8Sw5kkuZKr7976bFzacCM6QtAApQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.2.tgz", + "integrity": "sha512-qKTnVWFl9OQYKATPzdfaZIbTxcHziQl92zYSxYC6umhOqyAsoj8H8Gq/+aFjAso68sBdjTz3A7omqeAkkF1MWg==", "dev": true, "requires": { "debug": "^4.3.4", "js-yaml": "^4.1.0", - "json5": "^2.2.1", + "json5": "^2.2.2", "require-from-string": "^2.0.2" } }, "read-package-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.0.tgz", - "integrity": "sha512-b/9jxWJ8EwogJPpv99ma+QwtqB7FSl3+V6UXS7Aaay8/5VwMY50oIFooY1UKXMWpfNCM6T/PoGqa5GD1g9xf9w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.1.tgz", + "integrity": "sha512-AaHqXxfAVa+fNL07x8iAghfKOds/XXsu7zoouIVsbm7PEbQ3nMWXlvjcbrNLjElnUHWQtAo4QEa0RXuvD4XlpA==", "dev": true, "requires": { - "glob": "^8.0.1", + "glob": "^9.3.0", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^5.0.0", "npm-normalize-package-bin": "^3.0.0" } }, "read-package-json-fast": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.1.tgz", - "integrity": "sha512-8+HW7Yo+cjfF+md8DqsZHgats2mxf7gGYow/+2JjxrftoHFZz9v4dzd0EubzYbkNaLxrTVcnllHwklXN2+7aTQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, "requires": { "json-parse-even-better-errors": "^3.0.0", @@ -10639,9 +11547,9 @@ } }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -10658,12 +11566,6 @@ "picomatch": "^2.2.1" } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, "registry-auth-token": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.1.tgz", @@ -10749,28 +11651,12 @@ "dev": true }, "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "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" - } - } + "glob": "^9.2.0" } }, "run-parallel": { @@ -10866,6 +11752,54 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "sigstore": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.2.0.tgz", + "integrity": "sha512-Fr9+W1nkBSIZCkJQR7jDn/zI0UXNsVpp+7mDQkCnZOIxG9p6yNXBx9xntHsfUyYHE55XDkkVV3+rYbrkzAeesA==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.0.0" + }, + "dependencies": { + "make-fetch-happen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + } + } + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -10942,12 +11876,37 @@ "rimraf": "^3.0.0", "signal-exit": "^3.0.2", "which": "^2.0.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -10971,9 +11930,9 @@ } }, "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, "sprintf-js": { @@ -10983,12 +11942,12 @@ "dev": true }, "ssri": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.0.tgz", - "integrity": "sha512-64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", + "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", "dev": true, "requires": { - "minipass": "^3.1.1" + "minipass": "^4.0.0" } }, "string_decoder": { @@ -11050,17 +12009,39 @@ } }, "tar": { - "version": "6.1.12", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", - "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", "dev": true, "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^4.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" + }, + "dependencies": { + "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, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + } } }, "test-exclude": { @@ -11155,6 +12136,53 @@ "tslib": "^1.8.1" } }, + "tuf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.2.tgz", + "integrity": "sha512-gBfbnS6khluxjvoFCpRV0fhWT265xNfpiNXOcBX0Ze6HGbPhe93UG5V5DdKcgm/aXsMadnY76l/h6j63GmJS5g==", + "dev": true, + "requires": { + "@tufjs/models": "1.0.1", + "make-fetch-happen": "^11.0.1" + }, + "dependencies": { + "make-fetch-happen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", + "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", + "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + } + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11186,9 +12214,9 @@ } }, "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", + "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", "dev": true }, "uglify-js": { @@ -11287,9 +12315,9 @@ "dev": true }, "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" }, "v8-compile-cache-lib": { "version": "3.0.1", @@ -11317,41 +12345,41 @@ } }, "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", + "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==" }, "vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz", + "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==", "requires": { - "vscode-languageserver-protocol": "3.16.0" + "vscode-languageserver-protocol": "3.17.3" } }, "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", + "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" + "vscode-jsonrpc": "8.1.0", + "vscode-languageserver-types": "3.17.3" } }, "vscode-languageserver-textdocument": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.5.tgz", - "integrity": "sha512-1ah7zyQjKBudnMiHbZmxz5bYNM9KKZYz+5VQLj+yr8l+9w3g+WAhCkUkWbhMEdC5u0ub4Ndiye/fDyS8ghIKQg==" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" }, "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", + "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" }, "vscode-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", - "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" }, "which": { "version": "2.0.2", @@ -11452,7 +12480,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "write-file-atomic": { "version": "3.0.3", diff --git a/package.json b/package.json index 6b964e51c..1d5f741f4 100644 --- a/package.json +++ b/package.json @@ -48,39 +48,39 @@ "LSP" ], "dependencies": { - "@flatten-js/interval-tree": "^1.0.18", - "glob": "^8.0.1", - "ini": "^3.0.0", + "@flatten-js/interval-tree": "^1.0.20", + "glob": "^9.3.2", + "ini": "^4.0.0", "lodash": "^4.17.21", - "uuid": "^8.3.2", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.4", - "vscode-uri": "^3.0.3", - "yaml": "^1.10.2 <2.0" + "uuid": "^9.0.0", + "vscode-languageserver": "^8.1.0", + "vscode-languageserver-textdocument": "^1.0.8", + "vscode-uri": "^3.0.7", + "yaml": " ^1.10.2 <2.0" }, "devDependencies": { "@types/chai": "^4.3.4", - "@types/glob": "^8.0.0", + "@types/glob": "^8.1.0", "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.190", + "@types/lodash": "^4.14.191", "@types/mocha": "^10.0.1", - "@types/node": "^18.11.9", - "@types/uuid": "^8.3.4", - "@types/vscode": "^1.73.1", - "@typescript-eslint/eslint-plugin": "^5.45.0", - "@typescript-eslint/parser": "^5.45.0", + "@types/node": "^18.15.9", + "@types/uuid": "^9.0.1", + "@types/vscode": "^1.76.0", + "@typescript-eslint/eslint-plugin": "^5.56.0", + "@typescript-eslint/parser": "^5.56.0", "chai": "^4.3.7", - "eslint": "^8.28.0", - "eslint-config-prettier": "^8.5.0", + "eslint": "^8.36.0", + "eslint-config-prettier": "^8.8.0", "fuse.js": "^6.6.2", "handlebars": "^4.7.7", - "mocha": "^10.1.0", - "npm-check-updates": "^16.4.3", + "mocha": "^10.2.0", + "npm-check-updates": "^16.8.0", "nyc": "^15.1.0", - "prettier": "^2.8.0", - "rimraf": "^3.0.2", + "prettier": "^2.8.7", + "rimraf": "^4.4.1", "ts-node": "^10.9.1", - "typescript": "^4.9.3" + "typescript": "^5.0.2" }, "scripts": { "clean": "rimraf out/server && rimraf lib", diff --git a/src/utils/pathUtils.ts b/src/utils/pathUtils.ts index 2cdecb640..108ccf030 100644 --- a/src/utils/pathUtils.ts +++ b/src/utils/pathUtils.ts @@ -1,4 +1,4 @@ -import { glob } from "glob"; +import { sync } from "glob"; /** * A glob utility function that that accepts array of patterns and also @@ -19,7 +19,7 @@ export function globArray(arrayOfPatterns: string[]): string[] { let matchFiles = []; matchPatterns.forEach((pattern) => { - const matchedFiles = glob.sync(pattern); + const matchedFiles = sync(pattern); matchFiles = matchFiles.concat(matchedFiles); }); const matchFilesSet = new Set(matchFiles); @@ -29,7 +29,7 @@ export function globArray(arrayOfPatterns: string[]): string[] { } else { let matchFilesAfterExclusion = []; matchPatterns.forEach((pattern) => { - const ignoredFiles = glob.sync(pattern, { + const ignoredFiles = sync(pattern, { ignore: ignorePatterns, }); matchFilesAfterExclusion = matchFilesAfterExclusion.concat(ignoredFiles); diff --git a/tsconfig.json b/tsconfig.json index a279ae0a0..34cf71145 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,7 @@ "outDir": "./out/server", "sourceMap": true, "target": "es6", + "esModuleInterop": true, }, "exclude": ["node_modules", "out", "vscode-ansible"], } From 959ad907848971df2bd69ac129ca0da41002a2e7 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Thu, 20 Apr 2023 16:55:01 +0530 Subject: [PATCH 504/558] Add variable auto-completion feature when cursor inside jinja inline brackets (#552)Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * add logic to find cursor inside valid jinja inline brackets * add variable auto-completion feature for playbook * handle case when cursor is at some random invalid location at creates invalid yaml * add tests for checking if cursor is inside inline jinja brackets * add tests for variable auto-completion inside jinja inline brackets * disable reporter: tap option for mocha tests * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * name valid variables --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .mocharc.yml | 2 +- src/providers/completionProvider.ts | 11 ++ src/providers/completionProviderUtils.ts | 157 ++++++++++++++++++ src/utils/yaml.ts | 69 +++++++- test/fixtures/completion/default_vars.yml | 3 + .../completion/playbook_with_vars.yml | 52 ++++++ .../yaml/isCursorInsideJinjaBrackets.yml | 11 ++ test/providers/completionProvider.test.ts | 94 +++++++++++ test/utils/yaml.test.ts | 73 +++++++- 9 files changed, 464 insertions(+), 8 deletions(-) create mode 100644 src/providers/completionProviderUtils.ts create mode 100644 test/fixtures/completion/default_vars.yml create mode 100644 test/fixtures/completion/playbook_with_vars.yml create mode 100644 test/fixtures/yaml/isCursorInsideJinjaBrackets.yml diff --git a/.mocharc.yml b/.mocharc.yml index 1042bc361..e3c5a70ae 100644 --- a/.mocharc.yml +++ b/.mocharc.yml @@ -1,6 +1,6 @@ require: - ts-node/register - test/rootMochaHooks.ts -reporter: tap # more flat, also the only one that mentions totals for found, skipped and passed +# reporter: tap # more flat, also the only one that mentions totals for found, skipped and passed spec: './test/**/*.ts' timeout: 60000 # same as 60 seconds. This done to ensure that we have sufficient time to run tests on the CI as each test involves loading yaml files and docs library for ansible. diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index 05a457445..e5cb11ad1 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -33,7 +33,9 @@ import { isTaskParam, parseAllDocuments, getPossibleOptionsForPath, + isCursorInsideJinjaBrackets, } from "../utils/yaml"; +import { getVarsCompletion } from "./completionProviderUtils"; const priorityMap = { nameKeyword: 1, @@ -194,6 +196,15 @@ export async function doCompletion( return completionItems; } + // Provide variable auto-completion if the cursor is inside valid jinja inline brackets + if (isCursorInsideJinjaBrackets(document, position, path)) { + const varCompletion: CompletionItem[] = getVarsCompletion( + document.uri, + path, + ); + return varCompletion; + } + // Check if we're looking for module options or sub-options const options = await getPossibleOptionsForPath( path, diff --git a/src/providers/completionProviderUtils.ts b/src/providers/completionProviderUtils.ts new file mode 100644 index 000000000..d461af6c9 --- /dev/null +++ b/src/providers/completionProviderUtils.ts @@ -0,0 +1,157 @@ +import { CompletionItem, CompletionItemKind } from "vscode-languageserver"; +import { URI } from "vscode-uri"; +import { Node, Scalar, YAMLMap, YAMLSeq } from "yaml/types"; +import { AncestryBuilder, isPlayParam } from "../utils/yaml"; +import * as pathUri from "path"; +import { existsSync, readFileSync } from "fs"; +import { parseDocument } from "yaml"; + +/** + * A function that computes the possible variable auto-completions scope-wise for a given position + * @param documentUri uri of the document + * @param path array of nodes leading to that position + * @returns a list of completion items + */ +export function getVarsCompletion( + documentUri: string, + path: Node[], +): CompletionItem[] { + const varsCompletion = []; + let varPriority = 0; + + // the loop calculates and traverses till the path reaches the play level from the position where the auto-completion was asked + while (!isPlayParam(path)) { + varPriority = varPriority + 1; + + // handle case when it is a dict + let parentKeyPath = new AncestryBuilder(path) + .parent(YAMLMap) + .parent(YAMLMap) + .getKeyPath(); + if (parentKeyPath) { + const parentKeyNode = parentKeyPath[parentKeyPath.length - 1]; + if ( + parentKeyNode instanceof Scalar && + typeof parentKeyNode.value === "string" + ) { + path = parentKeyPath; + const scopedNode = path[path.length - 3].toJSON(); + if (scopedNode.hasOwnProperty("vars")) { + const varsObject = scopedNode["vars"]; + + if (Array.isArray(varsObject)) { + varsObject.forEach((element) => { + Object.keys(element).forEach((key) => { + varsCompletion.push({ variable: key, priority: varPriority }); + }); + }); + } else { + Object.keys(varsObject).forEach((key) => { + varsCompletion.push({ variable: key, priority: varPriority }); + }); + } + } + + continue; + } + } + + // handle case when it is a list + parentKeyPath = new AncestryBuilder(path) + .parent(YAMLMap) + .parent(YAMLSeq) + .parent(YAMLMap) + .getKeyPath(); + if (parentKeyPath) { + const parentKeyNode = parentKeyPath[parentKeyPath.length - 1]; + if ( + parentKeyNode instanceof Scalar && + typeof parentKeyNode.value === "string" + ) { + path = parentKeyPath; + const scopedNode = path[path.length - 3].toJSON(); + if (scopedNode.hasOwnProperty("vars")) { + const varsObject = scopedNode["vars"]; + + if (Array.isArray(varsObject)) { + varsObject.forEach((element) => { + Object.keys(element).forEach((key) => { + varsCompletion.push({ variable: key, priority: varPriority }); + }); + }); + } else { + Object.keys(varsObject).forEach((key) => { + varsCompletion.push({ variable: key, priority: varPriority }); + }); + } + } + + continue; + } + } + } + + // At this point path is at play level + // At play level, there are two more ways in which vars can be defined: + // 1. vars_prompt + // 2. vars_files + + // handling vars_prompt + varPriority = varPriority + 1; + const playNode = path[path.length - 3].toJSON(); + if (playNode.hasOwnProperty("vars_prompt")) { + const varsPromptObject = playNode["vars_prompt"]; + + varsPromptObject.forEach((element) => { + varsCompletion.push({ variable: element["name"], priority: varPriority }); + }); + } + + // handling vars_files + varPriority = varPriority + 1; + if (playNode.hasOwnProperty("vars_files")) { + const varsPromptObject = playNode["vars_files"]; + + const currentDirectory = pathUri.dirname(URI.parse(documentUri).path); + varsPromptObject.forEach((element) => { + let varFilePath; + if (pathUri.isAbsolute(element)) { + varFilePath = element; + } else { + varFilePath = URI.parse( + pathUri.resolve(currentDirectory, element), + ).path; + } + + // read the vars_file and get the variables declared inside it + if (existsSync(varFilePath)) { + const file = readFileSync(varFilePath, { + encoding: "utf8", + }); + + const yamlDocContent = parseDocument(file).contents.toJSON(); + + // variables declared in the file should be in list format only + if (Array.isArray(yamlDocContent)) { + yamlDocContent.forEach((element) => { + if (typeof element === "object") { + Object.keys(element).forEach((key) => { + varsCompletion.push({ variable: key, priority: varPriority }); + }); + } + }); + } + } + }); + } + + // return the completions as completion items + return varsCompletion.map(({ variable, priority }) => { + const completionItem: CompletionItem = { + label: variable, + sortText: `${priority}_${variable}`, + kind: CompletionItemKind.Variable, + }; + return completionItem; + }); +} diff --git a/src/utils/yaml.ts b/src/utils/yaml.ts index 2f4d22dde..61eae72ff 100644 --- a/src/utils/yaml.ts +++ b/src/utils/yaml.ts @@ -1,11 +1,12 @@ import * as _ from "lodash"; -import { Position, TextDocument } from "vscode-languageserver-textdocument"; +import { TextDocument } from "vscode-languageserver-textdocument"; import { Document, Options, parseCST } from "yaml"; import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from "yaml/types"; import { IModuleMetadata, IOption } from "../interfaces/module"; import { DocsLibrary } from "../services/docsLibrary"; import { isTaskKeyword, playExclusiveKeywords } from "./ansible"; import { playKeywords, taskKeywords } from "../utils/ansible"; +import { Range, Position } from "vscode-languageserver"; /** * A helper class used for building YAML path assertions and retrieving parent @@ -572,3 +573,69 @@ export function isPlaybook(textDocument: TextDocument): boolean { return isPlaybookValue; } + +/** + * A function to check if the cursor is present inside valid jinja inline brackets in a yaml file + * @param document text document on which the function is to be checked + * @param position current cursor position + * @param path array of nodes leading to that position + * @returns boolean true if the cursor is inside valid jinja inline brackets, else false + */ +export function isCursorInsideJinjaBrackets( + document: TextDocument, + position: Position, + path: Node[], +): boolean { + const node = path[path.length - 1]; + let nodeObject: string | string[]; + + try { + nodeObject = node.toJSON(); + } catch (error) { + // return early if invalid yaml syntax + return false; + } + + if (!nodeObject.includes("{{ ")) { + // this handles the case that if a value starts with {{ foo }}, the whole expression must be quoted + // to create a valid syntax + // refer: https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#when-to-quote-variables-a-yaml-gotcha + return false; + } + + // get text from the beginning of current line till the cursor + const lineText = document.getText( + Range.create(position.line, 0, position.line, position.character), + ); + + const jinjaInlineBracketStartIndex = lineText.lastIndexOf("{{ "); + const lineAfterCursor = document.getText( + Range.create( + position, + document.positionAt(document.offsetAt(position) + lineText.length), + ), + ); + + // this is a safety check incase of multiple jinja inline brackets in a single line + let jinjaInlineBracketEndIndex = lineAfterCursor.indexOf(" }}"); + if ( + lineAfterCursor.indexOf("{{ ") !== -1 && + lineAfterCursor.indexOf("{{ ") < jinjaInlineBracketEndIndex + ) { + jinjaInlineBracketEndIndex = -1; + } + + if ( + jinjaInlineBracketStartIndex > -1 && + jinjaInlineBracketEndIndex > -1 && + position.character > jinjaInlineBracketStartIndex && + position.character <= + jinjaInlineBracketEndIndex + + jinjaInlineBracketStartIndex + + lineText.length + ) { + return true; + } + + return false; +} diff --git a/test/fixtures/completion/default_vars.yml b/test/fixtures/completion/default_vars.yml new file mode 100644 index 000000000..892238fdc --- /dev/null +++ b/test/fixtures/completion/default_vars.yml @@ -0,0 +1,3 @@ +- default_var_1: Default var in a vars file +- default_var_2: 1234 +- default_var_3: True diff --git a/test/fixtures/completion/playbook_with_vars.yml b/test/fixtures/completion/playbook_with_vars.yml new file mode 100644 index 000000000..0064af2c9 --- /dev/null +++ b/test/fixtures/completion/playbook_with_vars.yml @@ -0,0 +1,52 @@ +--- +- name: Test the variable auto-completion + hosts: localhost + vars: + - os: fedora + - home: /home/ansible + vars_prompt: + - name: username + prompt: What is your username? + private: false + - name: password + prompt: What is your password? + + tasks: + - name: The task belongs to {{ }}" + ansible.builtin.debug: + msg: "{{ }}" + + - name: Functional block + vars: + - block_var_1: ["element_1", "element_2"] + - block_var_2: + object_1: + sub_object: option + block: + - name: Variables used in deeply nested module options + org_1.coll_1.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: Hello {{ var }} + vars: + - task_var: "Hello world" + + - name: Download apache + ansible.builtin.get_url: + url: "{{ }}" + mode: 0644 + vars: + url: http://example.com/apache + +- name: Second play that involves a vars file + hosts: localhost + vars: + - mode: 0644 + - filepath: /some/file/path + vars_files: + - default_vars.yml + tasks: + - name: Simple task + ansible.builtin.debug: + msg: "The log file is {{ }}" diff --git a/test/fixtures/yaml/isCursorInsideJinjaBrackets.yml b/test/fixtures/yaml/isCursorInsideJinjaBrackets.yml new file mode 100644 index 000000000..f908ced28 --- /dev/null +++ b/test/fixtures/yaml/isCursorInsideJinjaBrackets.yml @@ -0,0 +1,11 @@ +- name: Test play with tasks + hosts: localhost + gather_facts: false + tasks: + - name: Test task {{ }} + some_module: + - opt: "{{ }}" + + - name: Complex task {{ message }} name {{ }} + some_other_module: + - other_opt: {{ }} # improper syntax diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index 3b1d2c130..dec8ae27c 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -548,6 +548,67 @@ function testHostValues( }); } +function testVarsCompletionInsideJinja( + context: WorkspaceFolderContext, + textDoc: TextDocument, +) { + const tests = [ + { + name: "variables defined at task level", + position: { line: 36, character: 17 } as Position, + triggerCharacter: "", + completion: ["url", "home", "os", "password", "username"], + }, + { + name: "variables defined at block level", + position: { line: 30, character: 47 } as Position, + triggerCharacter: "var", + completion: ["task_var", "block_var_1", "block_var_2"], + }, + { + name: "variables defined at play level", + position: { line: 14, character: 35 } as Position, + triggerCharacter: "", + completion: ["home", "os", "password", "username"], + }, + { + name: "variables defined inside a vars file", + position: { line: 51, character: 33 } as Position, + triggerCharacter: "", + completion: [ + "filepath", + "mode", + "default_var_1", + "default_var_2", + "default_var_3", + ], + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter, + ).map((completion) => { + if (!completion.item) { + return completion.label; + } else { + return completion.item.label; + } + }); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + expect(filteredCompletion).be.deep.equal(completion); + } + }); + }); +} + function testModuleKindAndDocumentation( context: WorkspaceFolderContext, textDoc: TextDocument, @@ -907,4 +968,37 @@ describe("doCompletion()", () => { testModuleNamesWithoutFQCN(context, textDoc); }); }); + + describe("Completion for variables inside jinja inline brackets", () => { + fixtureFilePath = "completion/playbook_with_vars.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + + testVarsCompletionInsideJinja(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + + testVarsCompletionInsideJinja(context, textDoc); + }); + }); }); diff --git a/test/utils/yaml.test.ts b/test/utils/yaml.test.ts index 81fae7836..e84964212 100644 --- a/test/utils/yaml.test.ts +++ b/test/utils/yaml.test.ts @@ -1,10 +1,12 @@ import { expect } from "chai"; +import { Position } from "vscode-languageserver"; import { Node, Scalar, YAMLMap, YAMLSeq } from "yaml/types"; import { AncestryBuilder, getDeclaredCollections, getPathAt, isBlockParam, + isCursorInsideJinjaBrackets, isPlayParam, isRoleParam, isTaskParam, @@ -12,12 +14,8 @@ import { } from "../../src/utils/yaml"; import { getDoc, isWindows } from "../helper"; -async function getPathInFile( - yamlFile: string, - line: number, - character: number, -) { - const textDoc = await getDoc(`yaml/${yamlFile}`); +function getPathInFile(yamlFile: string, line: number, character: number) { + const textDoc = getDoc(`yaml/${yamlFile}`); const parsedDocs = parseAllDocuments(textDoc.getText()); return getPathAt( textDoc, @@ -358,4 +356,67 @@ describe("yaml", () => { expect(test).to.be.eq(false); }); }); + + describe("isCursorInsideJinjaBrackets", () => { + const file = "isCursorInsideJinjaBrackets.yml"; + const document = getDoc(`yaml/${file}`); + it("can confirm cursor within normal jinja bracket", async () => { + const line = 5; + const character = 26; + const position = Position.create(line - 1, character - 1); + const path = getPathInFile(file, line, character); + const test = isCursorInsideJinjaBrackets(document, position, path); + expect(test).to.be.eq(true); + }); + + it("can confirm cursor within jinja bracket in correct syntax", async () => { + const line = 7; + const character = 20; + const position = Position.create(line - 1, character - 1); + const path = getPathInFile(file, line, character); + const test = isCursorInsideJinjaBrackets(document, position, path); + + expect(test).to.be.eq(true); + }); + + it("can confirm cursor within jinja bracket incase of multiple bracket pairs", async () => { + const line = 9; + const character = 48; + const position = Position.create(line - 1, character - 1); + const path = getPathInFile(file, line, character); + const test = isCursorInsideJinjaBrackets(document, position, path); + + expect(test).to.be.eq(true); + }); + + it("can confirm cursor within jinja bracket even if text already present inside it", async () => { + const line = 9; + const character = 36; + const position = Position.create(line - 1, character - 1); + const path = getPathInFile(file, line, character); + const test = isCursorInsideJinjaBrackets(document, position, path); + + expect(test).to.be.eq(true); + }); + + it("can negate cursor outside jinja bracket", async () => { + const line = 9; + const character = 21; + const position = Position.create(line - 1, character - 1); + const path = getPathInFile(file, line, character) as Node[]; + const test = isCursorInsideJinjaBrackets(document, position, path); + + expect(test).to.be.eq(false); + }); + + it("can negate cursor within jinja bracket incase of invalid yaml syntax", async () => { + const line = 11; + const character = 25; + const position = Position.create(line - 1, character - 1); + const path = getPathInFile(file, line, character) as Node[]; + const test = isCursorInsideJinjaBrackets(document, position, path); + + expect(test).to.be.eq(false); + }); + }); }); From b9894596c05f1cdce671dd6822ddc0308a93eb0d Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Fri, 16 Jun 2023 20:50:43 +0530 Subject: [PATCH 505/558] Add env variable to remove color from command result stdout (#579) * add env variable to remove color from command result stdout * remove color (proper way) --- src/utils/misc.ts | 1 + test/index.ts | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/utils/misc.ts b/src/utils/misc.ts index 2ec74fb13..fe43603de 100644 --- a/src/utils/misc.ts +++ b/src/utils/misc.ts @@ -50,6 +50,7 @@ export function withInterpreter( let command = `${executable} ${args}`; // base case const newEnv = Object.assign({}, process.env, { + NO_COLOR: "1", // ensure none of the output produce color characters ANSIBLE_FORCE_COLOR: "0", // ensure output is parseable (no ANSI) PYTHONBREAKPOINT: "0", // We want to be sure that python debugger is never // triggered, even if we mistakenly left a breakpoint() there while diff --git a/test/index.ts b/test/index.ts index c29fa00e5..6b3ac3fc6 100644 --- a/test/index.ts +++ b/test/index.ts @@ -13,9 +13,14 @@ if (isWindows()) { process.exit(PRETEST_ERR_RC); } +// We don't require colors in the stdout of the command results. +process.env["NO_COLOR"] = "1"; + const command = "ansible-lint --version"; +const env = process.env; + try { - const result = execSync(command); + const result = execSync(command, { env: env }); console.info(`Detected: ${result}`); } catch (e) { console.error(`error: test requisites not met, '${command}' returned ${e}`); From 6bea548ddf40eba98c2926d9faf0a234fa964b64 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 16 Jun 2023 16:33:46 +0100 Subject: [PATCH 506/558] Upgrade creator-ee to v0.18.0 (#578) --- .config/Containerfile | 2 +- .config/requirements.in | 7 ++++--- docs/settings.md | 32 ++++++++++++++++---------------- tools/test-setup.sh | 6 ++++-- 4 files changed, 25 insertions(+), 22 deletions(-) diff --git a/.config/Containerfile b/.config/Containerfile index ad9bad2d4..e519fa7ad 100644 --- a/.config/Containerfile +++ b/.config/Containerfile @@ -1,4 +1,4 @@ -FROM quay.io/ansible/creator-ee:v0.11.0 as DEFAULT_EE +FROM quay.io/ansible/creator-ee:v0.18.0 as DEFAULT_EE # This file is updated by dependabot and used to determine not only which # version of creator-ee we are supposed to use for testing execution # environments but also to dynamically retrieve the same set of constraints diff --git a/.config/requirements.in b/.config/requirements.in index c3120bada..8b7b0b518 100644 --- a/.config/requirements.in +++ b/.config/requirements.in @@ -1,6 +1,7 @@ -# testing and linting -ansible-core>=2.13.0 -ansible-lint>=6.8.1 +# testing and linting, do not put version constraints here as they +# conflict with the locked version taken from creator-ee requirements.txt +ansible-core +ansible-lint # end-of dependencies for which we allow pre-releases click lxml diff --git a/docs/settings.md b/docs/settings.md index c5f29c405..573dae069 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -5,82 +5,82 @@ The following are the default values of the settings provided by the Ansible Language Server: - **ansible.ansible.path**: -Path to the ansible executable +Path to the ansible executable \ _default value: `ansible`_ - **ansible.ansible.useFullyQualifiedCollectionNames**: -Toggle usage of fully qualified collection names (FQCN) when inserting module names +Toggle usage of fully qualified collection names (FQCN) when inserting module names \ _default value: `true`_ - **ansible.python.interpreterPath**: -Path to the python/python3 executable. This settings may be used to make the extension work with ansible and ansible-lint installations in a python virtual environment +Path to the python/python3 executable. This settings may be used to make the extension work with ansible and ansible-lint installations in a python virtual environment \ _default value: `""`_ - **ansible.python.activationScript**: -Path to a custom activation script, which is to be used instead of the settings above to run in a python virtual environment +Path to a custom activation script, which is to be used instead of te settings above to run in a python virtual environment \ _default value: `""`_ - **ansible.executionEnvironment.containerEngine**: -Container engine to be used while running with execution environment. valid values are `auto`, `podman`, and `docker`;. For `auto`, it will look for `podman`; and then for `docker`; +Container engine to be used while running with execution environment. valid values are 'auto', 'podman' and 'docker'. For 'auto', it will look for 'podman' and then for 'docker' \ _default value: `auto`_ - **ansible.executionEnvironment.enabled**: -Toggle usage of an execution environment +Toggle usage of an execution environment \ _default value: `false`_ - **ansible.executionEnvironment.image**: -Name of the execution environment to be used +Name of the execution environment to be used \ _default value: `ghcr.io/ansible/creator-ee:latest`_ - **ansible.executionEnvironment.pull.policy**: -Image pull policy to be used. Valid values are `always`, `missing`, `never` and `tag`. always will always pull the image when extension is activated or reloaded. `missing` will pull if not locally available. `never` will never pull the image and `tag` will always pull if the image tag is `latest`, otherwise pull if not locally available. +Image pull policy to be used. Valid values are 'always', 'missing', 'never' and 'tag'. always will always pull the image when extension is activated or reloaded. 'missing' will pull if not locally available. 'never' will never pull the image and 'tag' will always pull if the image tag is 'latest', otherwise pull if not locally available. \ _default value: `missing`_ - **ansible.executionEnvironment.pull.arguments**: -Specify any additional parameters that should be added to the pull command when pulling an execution environment from a container registry. e.g. `-–tls-verify=false` +Specify any additional parameters that should be added to the pull command when pulling an execution environment from a container registry. e.g. '-–tls-verify=false' \ _default value: `""`_ - **ansible.executionEnvironment.containerOptions**: -Extra parameters passed to the container engine command example: `--net=host` +Extra parameters passed to the container engine command example: '--net=host' \ _default value: `""`_ - **ansible.completion.provideRedirectModules**: -Toggle redirected module provider when completing modules +Toggle redirected module provider when completing modules \ _default value: `true`_ - **ansible.completion.provideModuleOptionAliases**: -Toggle alias provider when completing module options +Toggle alias provider when completing module options \ _default value: `true`_ - **ansible.validation.enabled**: -Toggle validation provider. If enabled and ansible-lint is disabled, validation falls back to ansible-playbook --syntax-check +Toggle validation provider. If enabled and ansible-lint is disabled, validation falls back to ansible-playbook --syntax-check \ _default value: `true`_ - **ansible.validation.lint.enabled**: -Toggle usage of ansible-lint +Toggle usage of ansible-lint \ _default value: `true`_ - **ansible.validation.lint.path**: -Path to the ansible-lint executable +Path to the ansible-lint executable \ _default value: `ansible-lint`_ - **ansible.validation.lint.arguments**: -Optional command line arguments to be appended to ansible-lint invocation +Optional command line arguments to be appended to ansible-lint invocation \ _default value: `""`_ diff --git a/tools/test-setup.sh b/tools/test-setup.sh index cdd20fdcc..c40f464bf 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -176,12 +176,14 @@ fi # shellcheck disable=SC1091 . "${VIRTUAL_ENV}/bin/activate" +log notice "Upgrading pip ..." python3 -m pip install -q -U pip EE_VERSION=$(./tools/get-image-version) if [[ $(uname || true) != MINGW* ]]; then # if we are not on pure Windows - python3 -m pip install \ - -c "https://raw.githubusercontent.com/ansible/creator-ee/${EE_VERSION}/_build/requirements.txt" -r .config/requirements.in + URL="https://raw.githubusercontent.com/ansible/creator-ee/${EE_VERSION}/_build/requirements.txt" + log notice "Installing dependencies from .config/requirements.in and ${URL} loaded from .config/Containerfile ..." + python3 -m pip install -r "${URL}" -r .config/requirements.in fi # GHA failsafe only: ensure ansible and ansible-lint cannot be found anywhere From 3b7fd7ae9a055dd04a33612004949866f2104932 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Mon, 19 Jun 2023 17:37:42 +0530 Subject: [PATCH 507/558] Fix ansible lint config parsing (#577) * replace level keyword with severity keyword * update tests based on new ansible-lint version --- src/services/ansibleLint.ts | 6 +++--- test/providers/validationProvider.test.ts | 14 +++++++++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/services/ansibleLint.ts b/src/services/ansibleLint.ts index 805407208..fa9edb1da 100644 --- a/src/services/ansibleLint.ts +++ b/src/services/ansibleLint.ts @@ -180,10 +180,10 @@ export class AnsibleLint { }; let severity: DiagnosticSeverity = DiagnosticSeverity.Error; - if (item.level) { - if (item.level === "error") { + if (item.severity) { + if (item.severity === "major") { severity = DiagnosticSeverity.Error; - } else if (item.level === "warning") { + } else if (item.severity === "minor") { severity = DiagnosticSeverity.Warning; } } diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts index 6cf568223..db4a8498d 100644 --- a/test/providers/validationProvider.test.ts +++ b/test/providers/validationProvider.test.ts @@ -82,7 +82,7 @@ function testAnsibleLintErrors( diagnosticReport: [ { severity: 1, - message: "violates variable naming standards", + message: "Variables names", range: { start: { line: 4, character: 0 } as Position, end: { @@ -104,6 +104,18 @@ function testAnsibleLintErrors( }, source: "ansible-lint", }, + { + severity: 1, + message: "Unsupported parameters", + range: { + start: { line: 14, character: 0 } as Position, + end: { + line: 14, + character: integer.MAX_VALUE, + } as Position, + }, + source: "ansible-lint", + }, { severity: 1, message: "Use FQCN for builtin module actions", From 0a5441b3025eddf4f059c111ff0d2eb041cd45e1 Mon Sep 17 00:00:00 2001 From: Anthony King <2099618+antdking@users.noreply.github.com> Date: Wed, 21 Jun 2023 15:05:51 +0100 Subject: [PATCH 508/558] Fix github issue links in docs (#573) Point them to the ansible-language-server repo --- mkdocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index e6bdfdd9f..22e9fd6b4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -63,8 +63,8 @@ markdown_extensions: repo_url_shorthand: true social_url_shorthand: true social_url_shortener: true - user: facelessuser - repo: pymdown-extensions + user: ansible + repo: ansible-language-server normalize_issue_symbols: true - pymdownx.tabbed: alternate_style: true From fa6db0c0c05c0e05352eb69f78ec56229237327b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jun 2023 15:06:32 +0100 Subject: [PATCH 509/558] Bump Vampire/setup-wsl from 2.0.0 to 2.0.1 (#554) Bumps [Vampire/setup-wsl](https://github.com/Vampire/setup-wsl) from 2.0.0 to 2.0.1. - [Release notes](https://github.com/Vampire/setup-wsl/releases) - [Commits](https://github.com/Vampire/setup-wsl/compare/v2.0.0...v2.0.1) --- updated-dependencies: - dependency-name: Vampire/setup-wsl dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/task.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 648bdaa19..057d4adc6 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -79,7 +79,7 @@ jobs: # https://github.com/marketplace/actions/setup-wsl - name: Activate WSL if: "contains(matrix.shell, 'wsl')" - uses: Vampire/setup-wsl@v2.0.0 + uses: Vampire/setup-wsl@v2.0.1 with: set-as-default: 'true' # we want to load user profile From f1071c17f668b4bb7e6fb50f1883361edca3a6e0 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 21 Jun 2023 16:05:50 +0100 Subject: [PATCH 510/558] Update yaml to 2.x (#566) * Bump yaml from 1.10.2 to 2.2.2 Bumps [yaml](https://github.com/eemeli/yaml) from 1.10.2 to 2.2.2. - [Release notes](https://github.com/eemeli/yaml/releases) - [Commits](https://github.com/eemeli/yaml/compare/v1.10.2...v2.2.2) --- updated-dependencies: - dependency-name: yaml dependency-type: direct:production ... Signed-off-by: dependabot[bot] * Updated als to use yaml 2.x and API related changes * add yarn.lock * update logic to get values based on new parsing * fix tests and test fixtures * remove yarn.lock * fix linting * simplify parseAllDocuments() * update logic to parse yaml errors * handle dummy mapping logic for key and value level separately * fix spelling errors --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ajinkya Co-authored-by: Priyam Sahoo Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- package-lock.json | 31 ++-- package.json | 2 +- src/interfaces/module.ts | 2 +- src/providers/completionProvider.ts | 58 +++++--- src/providers/completionProviderUtils.ts | 11 +- src/providers/definitionProvider.ts | 6 +- src/providers/hoverProvider.ts | 14 +- src/providers/semanticTokenProvider.ts | 99 +++++++------ src/providers/validationProvider.ts | 61 ++------ src/services/docsLibrary.ts | 2 +- src/utils/docsParser.ts | 3 +- src/utils/yaml.ts | 134 ++++++++++-------- .../yaml/isCursorInsideJinjaBrackets.yml | 2 +- ...askParam.yml => isTaskParamInPlaybook.yml} | 4 - test/fixtures/yaml/isTaskParamInTaskFile.yml | 3 + test/fixtures/yaml/isTaskParamInvalid.yml | 1 + test/providers/validationProvider.test.ts | 42 ++++-- test/utils/yaml.test.ts | 68 ++++++--- 18 files changed, 297 insertions(+), 246 deletions(-) rename test/fixtures/yaml/{isTaskParam.yml => isTaskParamInPlaybook.yml} (85%) create mode 100644 test/fixtures/yaml/isTaskParamInTaskFile.yml create mode 100644 test/fixtures/yaml/isTaskParamInvalid.yml diff --git a/package-lock.json b/package-lock.json index 01374c281..251b97aca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "vscode-languageserver": "^8.1.0", "vscode-languageserver-textdocument": "^1.0.8", "vscode-uri": "^3.0.7", - "yaml": " ^1.10.2 <2.0" + "yaml": "^2.2.2" }, "bin": { "ansible-language-server": "bin/ansible-language-server" @@ -4907,15 +4907,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-check-updates/node_modules/yaml": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", - "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, "node_modules/npm-install-checks": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.0.tgz", @@ -7140,11 +7131,11 @@ "dev": true }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", + "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/yargs": { @@ -10858,12 +10849,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz", "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==", "dev": true - }, - "yaml": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", - "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", - "dev": true } } }, @@ -12514,9 +12499,9 @@ "dev": true }, "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", + "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==" }, "yargs": { "version": "16.2.0", diff --git a/package.json b/package.json index 1d5f741f4..b5b30e453 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "vscode-languageserver": "^8.1.0", "vscode-languageserver-textdocument": "^1.0.8", "vscode-uri": "^3.0.7", - "yaml": " ^1.10.2 <2.0" + "yaml": "^2.2.2" }, "devDependencies": { "@types/chai": "^4.3.4", diff --git a/src/interfaces/module.ts b/src/interfaces/module.ts index 15171c548..adc4cd493 100644 --- a/src/interfaces/module.ts +++ b/src/interfaces/module.ts @@ -1,4 +1,4 @@ -import { YAMLError } from "yaml/util"; +import { YAMLError } from "yaml"; export type IDescription = string | Array; diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index e5cb11ad1..60d205dfd 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -8,7 +8,7 @@ import { TextEdit, } from "vscode-languageserver"; import { Position, TextDocument } from "vscode-languageserver-textdocument"; -import { Node, Scalar, YAMLMap } from "yaml/types"; +import { isScalar, Node, YAMLMap } from "yaml"; import { IOption } from "../interfaces/module"; import { WorkspaceFolderContext } from "../services/workspaceManager"; import { @@ -51,6 +51,8 @@ const priorityMap = { choice: 2, }; +let DUMMY_MAPPING_CHARACTERS; + export async function doCompletion( document: TextDocument, position: Position, @@ -58,11 +60,30 @@ export async function doCompletion( ): Promise { let preparedText = document.getText(); const offset = document.offsetAt(position); + // HACK: We need to insert a dummy mapping, so that the YAML parser can properly recognize the scope. - // This is particularly important when parser has nothing more than - // indentation to determine the scope of the current line. `_:` is ok here, - // since we expect to work on a Pair level - preparedText = insert(preparedText, offset, "_:"); + // This is particularly important when parser has nothing more than indentation to + // determine the scope of the current line. + + // This is handled w.r.t two scenarios: + // 1. When we are at the key level, we use `_:` since we expect to work on a pair level. + // 2. When we are at the value level, we use `__`. We do this because based on the above hack, the + // use of `_:` at the value level creates invalid YAML as `: ` is an incorrect token in yaml string scalar + + DUMMY_MAPPING_CHARACTERS = "_:"; + + const previousCharactersOfCurrentLine = document.getText({ + start: { line: position.line, character: 0 }, + end: { line: position.line, character: position.character }, + }); + + if (previousCharactersOfCurrentLine.includes(": ")) { + // this means we have encountered ": " previously in the same line and thus we are + // at the value level + DUMMY_MAPPING_CHARACTERS = "__"; + } + + preparedText = insert(preparedText, offset, DUMMY_MAPPING_CHARACTERS); const yamlDocs = parseAllDocuments(preparedText); const extensionSettings = await context.documentSettings.get(document.uri); @@ -293,11 +314,11 @@ export async function doCompletion( // establish path for the key (option/sub-option name) if (new AncestryBuilder(path).parent(YAMLMap).getValue() === null) { keyPath = new AncestryBuilder(path) - .parent(YAMLMap) // compensates for `_:` + .parent(YAMLMap) // compensates for DUMMY MAPPING .parent(YAMLMap) .getKeyPath(); } else { - // in this case there is a character immediately after `_:`, which + // in this case there is a character immediately after DUMMY MAPPING, which // prevents formation of nested map keyPath = new AncestryBuilder(path).parent(YAMLMap).getKeyPath(); } @@ -310,12 +331,12 @@ export async function doCompletion( ); if ( keyOptions && - keyNode instanceof Scalar && - keyOptions.has(keyNode.value) + isScalar(keyNode) && + keyOptions.has(keyNode.value as string) ) { const nodeRange = getNodeRange(node, document); - const option = keyOptions.get(keyNode.value); + const option = keyOptions.get(keyNode.value as string); const choices = []; let defaultChoice = option.default; if (option.type === "bool" && typeof option.default === "string") { @@ -363,14 +384,17 @@ export async function doCompletion( // check for 'hosts' keyword and 'ansible_host keyword under vars' to provide inventory auto-completion let keyPathForHosts: Node[] | null; - if (new AncestryBuilder(path).parent(YAMLMap).getValue() === null) { + if ( + new AncestryBuilder(path).parent(YAMLMap).getValue() && + new AncestryBuilder(path).parent(YAMLMap).getValue()["value"] === null + ) { keyPathForHosts = new AncestryBuilder(path) - .parent(YAMLMap) // compensates for `_:` + .parent(YAMLMap) // compensates for DUMMY MAPPING .parent(YAMLMap) .getKeyPath(); } else { keyPathForHosts = new AncestryBuilder(path) - .parent(YAMLMap) // compensates for `_:` + .parent(YAMLMap) // compensates for DUMMY MAPPING .getKeyPath(); } if (keyPathForHosts) { @@ -458,16 +482,16 @@ function getHostCompletion(hostObjectList): CompletionItem[] { } /** - * Returns an LSP formatted range compensating for the `_:` hack, provided that + * Returns an LSP formatted range compensating for the DUMMY MAPPING hack, provided that * the node has range information and is a string scalar. */ function getNodeRange(node: Node, document: TextDocument): Range | undefined { const range = getOrigRange(node); - if (range && node instanceof Scalar && typeof node.value === "string") { + if (range && isScalar(node) && typeof node.value === "string") { const start = range[0]; let end = range[1]; - // compensate for `_:` - if (node.value.includes("_:")) { + // compensate for DUMMY MAPPING + if (node.value.includes(DUMMY_MAPPING_CHARACTERS)) { end -= 2; } else { // colon, being at the end of the line, was excluded from the node diff --git a/src/providers/completionProviderUtils.ts b/src/providers/completionProviderUtils.ts index d461af6c9..8012b02c8 100644 --- a/src/providers/completionProviderUtils.ts +++ b/src/providers/completionProviderUtils.ts @@ -1,6 +1,6 @@ import { CompletionItem, CompletionItemKind } from "vscode-languageserver"; import { URI } from "vscode-uri"; -import { Node, Scalar, YAMLMap, YAMLSeq } from "yaml/types"; +import { isScalar, Node, YAMLMap, YAMLSeq } from "yaml"; import { AncestryBuilder, isPlayParam } from "../utils/yaml"; import * as pathUri from "path"; import { existsSync, readFileSync } from "fs"; @@ -30,9 +30,10 @@ export function getVarsCompletion( .getKeyPath(); if (parentKeyPath) { const parentKeyNode = parentKeyPath[parentKeyPath.length - 1]; + if ( - parentKeyNode instanceof Scalar && - typeof parentKeyNode.value === "string" + isScalar(parentKeyNode) && + typeof parentKeyNode["value"] === "string" ) { path = parentKeyPath; const scopedNode = path[path.length - 3].toJSON(); @@ -65,8 +66,8 @@ export function getVarsCompletion( if (parentKeyPath) { const parentKeyNode = parentKeyPath[parentKeyPath.length - 1]; if ( - parentKeyNode instanceof Scalar && - typeof parentKeyNode.value === "string" + isScalar(parentKeyNode) && + typeof parentKeyNode["value"] === "string" ) { path = parentKeyPath; const scopedNode = path[path.length - 3].toJSON(); diff --git a/src/providers/definitionProvider.ts b/src/providers/definitionProvider.ts index 5a26c91b7..5792896d5 100644 --- a/src/providers/definitionProvider.ts +++ b/src/providers/definitionProvider.ts @@ -1,6 +1,6 @@ import { DefinitionLink, Range } from "vscode-languageserver"; import { Position, TextDocument } from "vscode-languageserver-textdocument"; -import { Scalar } from "yaml/types"; +import { isScalar } from "yaml"; import { DocsLibrary } from "../services/docsLibrary"; import { toLspRange } from "../utils/misc"; import { @@ -21,12 +21,12 @@ export async function getDefinition( if (path) { const node = path[path.length - 1]; if ( - node instanceof Scalar && + isScalar(node) && new AncestryBuilder(path).parentOfKey().get() // ensure we look at a key, not value of a Pair ) { if (isTaskParam(path)) { const [module] = await docsLibrary.findModule( - node.value, + node.value as string, path, document.uri, ); diff --git a/src/providers/hoverProvider.ts b/src/providers/hoverProvider.ts index 60fb0eef5..e92d9a35a 100644 --- a/src/providers/hoverProvider.ts +++ b/src/providers/hoverProvider.ts @@ -1,6 +1,6 @@ import { Hover, MarkupContent, MarkupKind } from "vscode-languageserver"; import { Position, TextDocument } from "vscode-languageserver-textdocument"; -import { Scalar } from "yaml/types"; +import { isScalar, Scalar } from "yaml"; import { DocsLibrary } from "../services/docsLibrary"; import { blockKeywords, @@ -37,7 +37,7 @@ export async function doHover( if (path) { const node = path[path.length - 1]; if ( - node instanceof Scalar && + isScalar(node) && new AncestryBuilder(path).parentOfKey().get() // ensure we look at a key, not value of a Pair ) { if (isPlayParam(path)) { @@ -53,11 +53,11 @@ export async function doHover( } if (isTaskParam(path)) { - if (isTaskKeyword(node.value)) { + if (isTaskKeyword(node.value as string)) { return getKeywordHover(document, node, taskKeywords); } else { const [module, hitFqcn] = await docsLibrary.findModule( - node.value, + node.value as string, path, document.uri, ); @@ -66,7 +66,7 @@ export async function doHover( return { contents: formatModule( module.documentation, - docsLibrary.getModuleRoute(hitFqcn || node.value), + docsLibrary.getModuleRoute(hitFqcn || (node.value as string)), ), range: range ? toLspRange(range, document) : undefined, }; @@ -91,7 +91,7 @@ export async function doHover( ); if (options) { - const option = options.get(node.value); + const option = options.get(node.value as string); if (option) { return { contents: formatOption(option, true), @@ -108,7 +108,7 @@ function getKeywordHover( node: Scalar, keywords: Map, ): Hover | null { - const keywordDocumentation = keywords.get(node.value); + const keywordDocumentation = keywords.get(node.value as string); const markupDoc = typeof keywordDocumentation === "string" ? { diff --git a/src/providers/semanticTokenProvider.ts b/src/providers/semanticTokenProvider.ts index 873d4699d..066c418cc 100644 --- a/src/providers/semanticTokenProvider.ts +++ b/src/providers/semanticTokenProvider.ts @@ -5,7 +5,16 @@ import { SemanticTokenTypes, } from "vscode-languageserver"; import { TextDocument } from "vscode-languageserver-textdocument"; -import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from "yaml/types"; +import { + isMap, + isNode, + isPair, + isScalar, + isSeq, + Node, + Scalar, + YAMLMap, +} from "yaml"; import { IOption } from "../interfaces/module"; import { DocsLibrary } from "../services/docsLibrary"; import { @@ -62,32 +71,32 @@ async function markSemanticTokens( docsLibrary: DocsLibrary, ): Promise { const node = path[path.length - 1]; - if (node instanceof YAMLMap) { + if (isMap(node)) { for (const pair of node.items) { - if (pair.key instanceof Scalar) { - const keyPath = path.concat(pair, pair.key); + if (isScalar(pair.key)) { + const keyPath = path.concat((pair), pair.key); if (isPlayParam(keyPath)) { - if (playKeywords.has(pair.key.value)) + if (playKeywords.has(pair.key.value.toString())) markKeyword(pair.key, builder, document); else markOrdinaryKey(pair.key, builder, document); } else if (isBlockParam(keyPath)) { - if (blockKeywords.has(pair.key.value)) + if (blockKeywords.has(pair.key.value.toString())) markKeyword(pair.key, builder, document); else markOrdinaryKey(pair.key, builder, document); } else if (isRoleParam(keyPath)) { - if (roleKeywords.has(pair.key.value)) + if (roleKeywords.has(pair.key.value.toString())) markKeyword(pair.key, builder, document); else markOrdinaryKey(pair.key, builder, document); } else if (isTaskParam(keyPath)) { - if (isTaskKeyword(pair.key.value)) { + if (isTaskKeyword(pair.key.value.toString())) { markKeyword(pair.key, builder, document); if (pair.key.value === "args") { const module = await findProvidedModule( - path.concat(pair, pair.key), + path.concat(pair as unknown as Node, pair.key), document, docsLibrary, ); - if (module && pair.value instanceof YAMLMap) { + if (module && isMap(pair.value)) { // highlight module parameters markModuleParameters( pair.value, @@ -99,7 +108,7 @@ async function markSemanticTokens( } } else { const [module] = await docsLibrary.findModule( - pair.key.value, + pair.key.value.toString(), keyPath, document.uri, ); @@ -112,7 +121,7 @@ async function markSemanticTokens( builder, document, ); - if (pair.value instanceof YAMLMap) { + if (isMap(pair.value)) { // highlight module parameters markModuleParameters( pair.value, @@ -122,7 +131,11 @@ async function markSemanticTokens( ); } } else { - markAllNestedKeysAsOrdinary(pair, builder, document); + markAllNestedKeysAsOrdinary( + (pair), + builder, + document, + ); } } @@ -130,24 +143,28 @@ async function markSemanticTokens( // tasks don't have any deeper structure continue; } else { - markAllNestedKeysAsOrdinary(pair, builder, document); + markAllNestedKeysAsOrdinary( + (pair), + builder, + document, + ); // this pair has been completely processed continue; } } - if (pair.value instanceof Node) { + if (isNode(pair.value)) { await markSemanticTokens( - path.concat(pair, pair.value), + path.concat(pair as unknown as Scalar, pair.value), builder, document, docsLibrary, ); } } - } else if (node instanceof YAMLSeq) { + } else if (isSeq(node)) { for (const item of node.items) { - if (item instanceof Node) { + if (isNode(item)) { // the builder does not support out-of-order inserts yet, hence awaiting // on each individual promise instead of using Promise.all await markSemanticTokens( @@ -168,8 +185,8 @@ function markModuleParameters( document: TextDocument, ) { for (const moduleParamPair of moduleParamMap.items) { - if (moduleParamPair.key instanceof Scalar) { - const option = options?.get(moduleParamPair.key.value); + if (isScalar(moduleParamPair.key)) { + const option = options?.get(moduleParamPair.key.value.toString()); if (option) { markNode( moduleParamPair.key, @@ -178,10 +195,7 @@ function markModuleParameters( builder, document, ); - if ( - option.type === "dict" && - moduleParamPair.value instanceof YAMLMap - ) { + if (option.type === "dict" && isMap(moduleParamPair.value)) { // highlight sub-parameters markModuleParameters( moduleParamPair.value, @@ -189,25 +203,30 @@ function markModuleParameters( builder, document, ); - } else if ( - option.type === "list" && - moduleParamPair.value instanceof YAMLSeq - ) { + } else if (option.type === "list" && isSeq(moduleParamPair.value)) { // highlight list of sub-parameters for (const item of moduleParamPair.value.items) { - if (item instanceof YAMLMap) { + if (isMap(item)) { markModuleParameters(item, option.suboptions, builder, document); } else { - markAllNestedKeysAsOrdinary(item, builder, document); + markAllNestedKeysAsOrdinary(item as Node, builder, document); } } } else { - markAllNestedKeysAsOrdinary(moduleParamPair.value, builder, document); + markAllNestedKeysAsOrdinary( + moduleParamPair.value as Node, + builder, + document, + ); } } else { - markAllNestedKeysAsOrdinary(moduleParamPair.value, builder, document); + markAllNestedKeysAsOrdinary( + moduleParamPair.value as Node, + builder, + document, + ); } - } else if (moduleParamPair.value instanceof Node) { + } else if (isNode(moduleParamPair.value)) { markAllNestedKeysAsOrdinary(moduleParamPair.value, builder, document); } } @@ -218,20 +237,20 @@ function markAllNestedKeysAsOrdinary( builder: SemanticTokensBuilder, document: TextDocument, ) { - if (node instanceof Pair) { - if (node.key instanceof Scalar) { + if (isPair(node)) { + if (isScalar(node.key)) { markOrdinaryKey(node.key, builder, document); } - if (node.value instanceof Node) { + if (isNode(node.value)) { markAllNestedKeysAsOrdinary(node.value, builder, document); } - } else if (node instanceof YAMLMap) { + } else if (isMap(node)) { for (const pair of node.items) { - markAllNestedKeysAsOrdinary(pair, builder, document); + markAllNestedKeysAsOrdinary(pair as unknown as Scalar, builder, document); } - } else if (node instanceof YAMLSeq) { + } else if (isSeq(node)) { for (const item of node.items) { - if (item instanceof Node) { + if (isNode(item)) { markAllNestedKeysAsOrdinary(item, builder, document); } } diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts index 36e0daf3a..54531c525 100644 --- a/src/providers/validationProvider.ts +++ b/src/providers/validationProvider.ts @@ -1,11 +1,8 @@ import IntervalTree from "@flatten-js/interval-tree"; -import * as _ from "lodash"; import { Connection, Diagnostic, - DiagnosticRelatedInformation, DiagnosticSeverity, - Location, Range, } from "vscode-languageserver"; import { TextDocument } from "vscode-languageserver-textdocument"; @@ -105,32 +102,25 @@ export async function doValidate( export function getYamlValidation(textDocument: TextDocument): Diagnostic[] { const diagnostics: Diagnostic[] = []; - const yDocuments = parseAllDocuments(textDocument.getText(), { - prettyErrors: false, - }); + const yDocuments = parseAllDocuments(textDocument.getText()); const rangeTree = new IntervalTree(); yDocuments.forEach((yDoc) => { yDoc.errors.forEach((error) => { - const errorRange = error.range || error.source?.range; - let range; - if (errorRange) { + const [errStart, errEnd] = error.pos; + if (errStart) { const start = textDocument.positionAt( - errorRange.origStart !== undefined - ? errorRange.origStart - : errorRange.start, + errStart !== undefined ? errStart : null, ); + const end = textDocument.positionAt( - errorRange.origEnd !== undefined - ? errorRange.origEnd - : errorRange.end, + errEnd !== undefined ? errEnd : null, ); - range = Range.create(start, end); - let severity; + const range = Range.create(start, end); + + let severity: DiagnosticSeverity; switch (error.name) { - case "YAMLReferenceError": - case "YAMLSemanticError": - case "YAMLSyntaxError": + case "YAMLParseError": severity = DiagnosticSeverity.Error; break; case "YAMLWarning": @@ -140,7 +130,7 @@ export function getYamlValidation(textDocument: TextDocument): Diagnostic[] { severity = DiagnosticSeverity.Information; break; } - rangeTree.insert([errorRange.start, errorRange.end], { + rangeTree.insert([error.linePos[0].line, error.linePos[1].line], { message: error.message, range: range || Range.create(0, 0, 0, 0), severity: severity, @@ -150,35 +140,6 @@ export function getYamlValidation(textDocument: TextDocument): Diagnostic[] { }); }); rangeTree.forEach((range, diag) => { - const searchResult = rangeTree.search(range); - if (searchResult) { - const allRangesAreEqual = searchResult.every((foundDiag: Diagnostic) => { - // (range start == range end) in case it has already been collapsed - return ( - foundDiag.range.start === foundDiag.range.end || - _.isEqual(foundDiag.range, diag.range) - ); - }); - if (!allRangesAreEqual) { - // Prevent large error scopes hiding/obscuring other error scopes - // In YAML this is very common in case of syntax errors - const range = diag.range; - diag.relatedInformation = [ - DiagnosticRelatedInformation.create( - Location.create(textDocument.uri, { - start: range.end, - end: range.end, - }), - "the scope of this error ends here", - ), - ]; - // collapse the range - diag.range = { - start: range.start, - end: range.start, - }; - } - } diagnostics.push(diag); }); diff --git a/src/services/docsLibrary.ts b/src/services/docsLibrary.ts index 28142a676..621b2541f 100644 --- a/src/services/docsLibrary.ts +++ b/src/services/docsLibrary.ts @@ -1,5 +1,5 @@ import { Connection } from "vscode-languageserver"; -import { Node } from "yaml/types"; +import { Node } from "yaml"; import { getDeclaredCollections } from "../utils/yaml"; import { findDocumentation, findPluginRouting } from "../utils/docsFinder"; import { WorkspaceFolderContext } from "./workspaceManager"; diff --git a/src/utils/docsParser.ts b/src/utils/docsParser.ts index ebd02267a..0256dde46 100644 --- a/src/utils/docsParser.ts +++ b/src/utils/docsParser.ts @@ -1,7 +1,6 @@ import * as _ from "lodash"; import * as fs from "fs"; -import { parseDocument } from "yaml"; -import { YAMLError } from "yaml/util"; +import { parseDocument, YAMLError } from "yaml"; import { IDescription, IModuleDocumentation, diff --git a/src/utils/yaml.ts b/src/utils/yaml.ts index 61eae72ff..0f19c808b 100644 --- a/src/utils/yaml.ts +++ b/src/utils/yaml.ts @@ -1,13 +1,28 @@ import * as _ from "lodash"; import { TextDocument } from "vscode-languageserver-textdocument"; -import { Document, Options, parseCST } from "yaml"; -import { Node, Pair, Scalar, YAMLMap, YAMLSeq } from "yaml/types"; +import { + Document, + DocumentOptions, + isMap, + isPair, + isScalar, + isSeq, + Node, + Pair, + parseDocument, + ParseOptions, + SchemaOptions, + YAMLMap, + YAMLSeq, +} from "yaml"; import { IModuleMetadata, IOption } from "../interfaces/module"; import { DocsLibrary } from "../services/docsLibrary"; import { isTaskKeyword, playExclusiveKeywords } from "./ansible"; import { playKeywords, taskKeywords } from "../utils/ansible"; import { Range, Position } from "vscode-languageserver"; +type Options = ParseOptions & DocumentOptions & SchemaOptions; + /** * A helper class used for building YAML path assertions and retrieving parent * nodes. The assertions are built up from the most nested (last in array) @@ -33,7 +48,7 @@ export class AncestryBuilder { type?: new (...args: unknown[]) => X, ): AncestryBuilder { this._index--; - if (this.get() instanceof Pair) { + if (isPair(this.get())) { if (!type || !(type === Pair.prototype.constructor)) { this._index--; } @@ -54,7 +69,7 @@ export class AncestryBuilder { const node = this.get(); this.parent(Pair); const pairNode = this.get(); - if (pairNode instanceof Pair && pairNode.key === node) { + if (isPair(pairNode) && pairNode.key === node) { this.parent(YAMLMap); } else { this._index = Number.MIN_SAFE_INTEGER; @@ -78,8 +93,9 @@ export class AncestryBuilder { getStringKey(this: AncestryBuilder): string | null { const node = this._path[this._index + 1]; if ( - node instanceof Pair && - node.key instanceof Scalar && + node && + isPair(node) && + isScalar(node.key) && typeof node.key.value === "string" ) { return node.key.value; @@ -93,8 +109,8 @@ export class AncestryBuilder { // The `this` argument is for generics restriction of this method. getValue(this: AncestryBuilder): Node | null { const node = this._path[this._index + 1]; - if (node instanceof Pair) { - return node.value; + if (isPair(node)) { + return node.value as Node; } return null; } @@ -121,9 +137,9 @@ export class AncestryBuilder { if (this._index < 0) return null; const path = this._path.slice(0, this._index + 1); const node = this._path[this._index + 1]; - if (node instanceof Pair) { + if (isPair(node)) { path.push(node); - path.push(node.key); + path.push(node.key as Node); return path; } return null; @@ -139,7 +155,7 @@ export function getPathAt( const offset = document.offsetAt(position); const doc = _.find(docs, (d) => contains(d.contents, offset, inclusive)); if (doc && doc.contents) { - return getPathAtOffset([doc.contents], offset, inclusive); + return getPathAtOffset([doc.contents], offset, inclusive, doc); } return null; } @@ -161,49 +177,61 @@ export function getPathAtOffset( path: Node[], offset: number, inclusive: boolean, + doc: Document, ): Node[] | null { if (path) { const currentNode = path[path.length - 1]; - if (currentNode instanceof YAMLMap) { + if (isMap(currentNode)) { let pair = _.find(currentNode.items, (p) => - contains(p.key, offset, inclusive), + contains(p.key as Node, offset, inclusive), ); if (pair) { - return getPathAtOffset(path.concat(pair, pair.key), offset, inclusive); + return getPathAtOffset( + path.concat(pair as unknown as Node, pair.key as Node), + offset, + inclusive, + doc, + ); } pair = _.find(currentNode.items, (p) => - contains(p.value, offset, inclusive), + contains(p.value as Node, offset, inclusive), ); if (pair) { return getPathAtOffset( - path.concat(pair, pair.value), + path.concat(pair as unknown as Node, pair.value as Node), offset, inclusive, + doc, ); } pair = _.find(currentNode.items, (p) => { - const inBetweenNode = new Node(); + const inBetweenNode = doc.createNode(null); const start = getOrigRange(p.key as Node)?.[1]; const end = getOrigRange(p.value as Node)?.[0]; if (start && end) { - inBetweenNode.range = [start, end - 1]; + inBetweenNode.range = [start, end - 1, end]; return contains(inBetweenNode, offset, inclusive); } else return false; }); if (pair) { - return path.concat(pair, new Node()); + return path.concat(pair as unknown as Node, doc.createNode(null)); } - } else if (currentNode instanceof YAMLSeq) { + } else if (isSeq(currentNode)) { const item = _.find(currentNode.items, (n) => - contains(n, offset, inclusive), + contains(n as Node, offset, inclusive), ); if (item) { - return getPathAtOffset(path.concat(item), offset, inclusive); + return getPathAtOffset( + path.concat(item as Node), + offset, + inclusive, + doc, + ); } } else if (contains(currentNode, offset, inclusive)) { return path; } - return path.concat(new Node()); // empty node as indentation marker + return path.concat(doc.createNode(null)); // empty node as indentation marker } return null; } @@ -276,16 +304,16 @@ function getDeclaredCollectionsForMap(playNode: YAMLMap | null): string[] { const declaredCollections: string[] = []; const collectionsPair = _.find( playNode?.items, - (pair) => pair.key instanceof Scalar && pair.key.value === "collections", + (pair) => isScalar(pair.key) && pair.key.value === "collections", ); if (collectionsPair) { // we've found the collections declaration const collectionsNode = collectionsPair.value; - if (collectionsNode instanceof YAMLSeq) { + if (isSeq(collectionsNode)) { for (const collectionNode of collectionsNode.items) { - if (collectionNode instanceof Scalar) { - declaredCollections.push(collectionNode.value); + if (isScalar(collectionNode)) { + declaredCollections.push(collectionNode.value.toString()); } } } @@ -375,7 +403,7 @@ export async function getPossibleOptionsForPath( // The module name is a key of the task parameters map const taskParamNode = taskParamPath[taskParamPath.length - 1]; - if (!(taskParamNode instanceof Scalar)) return null; + if (!isScalar(taskParamNode)) return null; let module; // Module options can either be directly under module or in 'args' @@ -383,7 +411,7 @@ export async function getPossibleOptionsForPath( module = await findProvidedModule(taskParamPath, document, docsLibrary); } else { [module] = await docsLibrary.findModule( - taskParamNode.value, + taskParamNode.value as string, taskParamPath, document.uri, ); @@ -421,10 +449,7 @@ export function getTaskParamPathWithTrace( .getKeyPath(); if (parentKeyPath) { const parentKeyNode = parentKeyPath[parentKeyPath.length - 1]; - if ( - parentKeyNode instanceof Scalar && - typeof parentKeyNode.value === "string" - ) { + if (isScalar(parentKeyNode) && typeof parentKeyNode.value === "string") { trace.push([parentKeyNode.value, "dict"]); path = parentKeyPath; continue; @@ -437,10 +462,7 @@ export function getTaskParamPathWithTrace( .getKeyPath(); if (parentKeyPath) { const parentKeyNode = parentKeyPath[parentKeyPath.length - 1]; - if ( - parentKeyNode instanceof Scalar && - typeof parentKeyNode.value === "string" - ) { + if (isScalar(parentKeyNode) && typeof parentKeyNode.value === "string") { trace.push([parentKeyNode.value, "list"]); path = parentKeyPath; continue; @@ -487,8 +509,8 @@ export async function findProvidedModule( export function getYamlMapKeys(mapNode: YAMLMap): Array { return mapNode.items.map((pair) => { - if (pair.key && pair.key instanceof Scalar) { - return pair.key.value; + if (pair.key && isScalar(pair.key)) { + return pair.key.value.toString(); } }); } @@ -496,31 +518,27 @@ export function getYamlMapKeys(mapNode: YAMLMap): Array { export function getOrigRange( node: Node | null | undefined, ): [number, number] | null | undefined { - if (node?.cstNode?.range) { - const range = node.cstNode.range; + if (node.range) { + const range = node.range; return [ - range.origStart !== undefined ? range.origStart : range.start, - range.origEnd !== undefined ? range.origEnd : range.end, + range[0] !== undefined ? range[0] : null, + range[1] !== undefined ? range[1] : null, ]; } else { - return node?.range; + return [node?.range?.[0], node?.range?.[1]]; } } /** Parsing with the YAML library tailored to the needs of this extension */ export function parseAllDocuments(str: string, options?: Options): Document[] { - const cst = parseCST(str); - cst.setOrigRanges(); - - const parsedDocuments: Document[] = []; - for (const cstDoc of cst) { - const parsedDocument = new Document( - Object.assign({ keepCstNodes: true }, options), - ); - parsedDocument.parse(cstDoc); - parsedDocuments.push(parsedDocument); + if (!str) { + return []; } - return parsedDocuments; + const doc = parseDocument( + str, + Object.assign({ keepSourceTokens: true, options }), + ); + return [doc]; } /** @@ -543,7 +561,7 @@ export function isPlaybook(textDocument: TextDocument): boolean { } // A playbook is always YAML sequence - if (!(path[0] instanceof YAMLSeq)) { + if (!isSeq(path[0])) { return false; } @@ -586,7 +604,7 @@ export function isCursorInsideJinjaBrackets( position: Position, path: Node[], ): boolean { - const node = path[path.length - 1]; + const node = path?.[path?.length - 1]; let nodeObject: string | string[]; try { @@ -596,7 +614,7 @@ export function isCursorInsideJinjaBrackets( return false; } - if (!nodeObject.includes("{{ ")) { + if (nodeObject && !nodeObject.includes("{{ ")) { // this handles the case that if a value starts with {{ foo }}, the whole expression must be quoted // to create a valid syntax // refer: https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#when-to-quote-variables-a-yaml-gotcha diff --git a/test/fixtures/yaml/isCursorInsideJinjaBrackets.yml b/test/fixtures/yaml/isCursorInsideJinjaBrackets.yml index f908ced28..1f05ca894 100644 --- a/test/fixtures/yaml/isCursorInsideJinjaBrackets.yml +++ b/test/fixtures/yaml/isCursorInsideJinjaBrackets.yml @@ -8,4 +8,4 @@ - name: Complex task {{ message }} name {{ }} some_other_module: - - other_opt: {{ }} # improper syntax + - other_opt: { {} } # improper syntax diff --git a/test/fixtures/yaml/isTaskParam.yml b/test/fixtures/yaml/isTaskParamInPlaybook.yml similarity index 85% rename from test/fixtures/yaml/isTaskParam.yml rename to test/fixtures/yaml/isTaskParamInPlaybook.yml index d4cc748b5..bea5dff30 100644 --- a/test/fixtures/yaml/isTaskParam.yml +++ b/test/fixtures/yaml/isTaskParamInPlaybook.yml @@ -1,7 +1,3 @@ -test: parameter ---- -- name: Test task - become: yes --- - name: Test play with tasks hosts: localhost diff --git a/test/fixtures/yaml/isTaskParamInTaskFile.yml b/test/fixtures/yaml/isTaskParamInTaskFile.yml new file mode 100644 index 000000000..02d48caf0 --- /dev/null +++ b/test/fixtures/yaml/isTaskParamInTaskFile.yml @@ -0,0 +1,3 @@ +--- +- name: Test task + become: yes diff --git a/test/fixtures/yaml/isTaskParamInvalid.yml b/test/fixtures/yaml/isTaskParamInvalid.yml new file mode 100644 index 000000000..263c4832b --- /dev/null +++ b/test/fixtures/yaml/isTaskParamInvalid.yml @@ -0,0 +1 @@ +test: parameter diff --git a/test/providers/validationProvider.test.ts b/test/providers/validationProvider.test.ts index db4a8498d..526da1fcb 100644 --- a/test/providers/validationProvider.test.ts +++ b/test/providers/validationProvider.test.ts @@ -253,11 +253,7 @@ function testAnsibleSyntaxCheckNoHost( ); } -function testInvalidYamlFile( - context: WorkspaceFolderContext, - validationManager: ValidationManager, - textDoc: TextDocument, -) { +function testInvalidYamlFile(textDoc: TextDocument) { const tests = [ { name: "invalid YAML", @@ -270,19 +266,43 @@ function testInvalidYamlFile( start: { line: 6, character: 13 } as Position, end: { line: 6, - character: 13, + character: 14, } as Position, }, source: "Ansible [YAML]", }, { severity: 1, - message: "Document contains trailing content", + message: "Unexpected scalar at node end", range: { start: { line: 7, character: 0 } as Position, end: { - line: 8, - character: 0, + line: 7, + character: 6, + } as Position, + }, + source: "Ansible [YAML]", + }, + { + severity: 1, + message: "Unexpected map-value-ind", + range: { + start: { line: 7, character: 6 } as Position, + end: { + line: 7, + character: 7, + } as Position, + }, + source: "Ansible [YAML]", + }, + { + severity: 1, + message: "Unexpected scalar token in YAML stream", + range: { + start: { line: 7, character: 8 } as Position, + end: { + line: 7, + character: 12, } as Position, }, source: "Ansible [YAML]", @@ -668,7 +688,7 @@ describe("doValidate()", () => { await enableExecutionEnvironmentSettings(docSettings); }); - testInvalidYamlFile(context, validationManager, textDoc); + testInvalidYamlFile(textDoc); after(async () => { setFixtureAnsibleCollectionPathEnv(); @@ -682,7 +702,7 @@ describe("doValidate()", () => { await disableExecutionEnvironmentSettings(docSettings); }); - testInvalidYamlFile(context, validationManager, textDoc); + testInvalidYamlFile(textDoc); }); }); }); diff --git a/test/utils/yaml.test.ts b/test/utils/yaml.test.ts index e84964212..135ea40d3 100644 --- a/test/utils/yaml.test.ts +++ b/test/utils/yaml.test.ts @@ -1,6 +1,6 @@ import { expect } from "chai"; import { Position } from "vscode-languageserver"; -import { Node, Scalar, YAMLMap, YAMLSeq } from "yaml/types"; +import { Node, Scalar, YAMLMap, YAMLSeq } from "yaml"; import { AncestryBuilder, getDeclaredCollections, @@ -208,55 +208,91 @@ describe("yaml", () => { describe("isTaskParam", () => { it("canCorrectlyConfirmTaskParam", async () => { - const path = (await getPathInFile("isTaskParam.yml", 3, 3)) as Node[]; + const path = (await getPathInFile( + "isTaskParamInTaskFile.yml", + 2, + 3, + )) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(true); }); it("canCorrectlyNegateTaskParam", async () => { - const path = (await getPathInFile("isTaskParam.yml", 1, 1)) as Node[]; + const path = (await getPathInFile( + "isTaskParamInvalid.yml", + 1, + 1, + )) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(false); }); it("canCorrectlyNegateTaskParamForValue", async () => { - const path = (await getPathInFile("isTaskParam.yml", 2, 9)) as Node[]; + const path = (await getPathInFile( + "isTaskParamInTaskFile.yml", + 2, + 9, + )) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(false); }); it("canCorrectlyNegateTaskParamForPlay", async () => { - const path = (await getPathInFile("isTaskParam.yml", 7, 3)) as Node[]; + const path = (await getPathInFile( + "isTaskParamInPlaybook.yml", + 4, + 3, + )) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(false); }); it("canCorrectlyNegateTaskParamForBlock", async () => { - const path = (await getPathInFile("isTaskParam.yml", 18, 7)) as Node[]; + const path = (await getPathInFile( + "isTaskParamInPlaybook.yml", + 14, + 7, + )) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(false); }); it("canCorrectlyNegateTaskParamForRole", async () => { - const path = (await getPathInFile("isTaskParam.yml", 21, 7)) as Node[]; + const path = (await getPathInFile( + "isTaskParamInPlaybook.yml", + 17, + 7, + )) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(false); }); it("canCorrectlyConfirmTaskParamInPreTasks", async () => { - const path = (await getPathInFile("isTaskParam.yml", 10, 7)) as Node[]; + const path = (await getPathInFile( + "isTaskParamInPlaybook.yml", + 6, + 7, + )) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(true); }); it("canCorrectlyConfirmTaskParamInTasks", async () => { - const path = (await getPathInFile("isTaskParam.yml", 13, 7)) as Node[]; + const path = (await getPathInFile( + "isTaskParamInPlaybook.yml", + 9, + 7, + )) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(true); }); it("canCorrectlyConfirmTaskParamInBlock", async () => { - const path = (await getPathInFile("isTaskParam.yml", 17, 11)) as Node[]; + const path = (await getPathInFile( + "isTaskParamInPlaybook.yml", + 13, + 11, + )) as Node[]; const test = isTaskParam(path); expect(test).to.be.eq(true); }); @@ -286,18 +322,6 @@ describe("yaml", () => { expect(test).to.be.eq(false); }); - it("isIndecisiveWithoutPlayKeywords", async () => { - const path = (await getPathInFile("isPlayParam.yml", 7, 3)) as Node[]; - const test = isPlayParam(path, "file://test/isPlay.yml"); - expect(test).to.be.eq(undefined); - }); - - it("isIndecisiveWithoutPlayKeywordsWithoutPath", async () => { - const path = (await getPathInFile("isPlayParam.yml", 7, 3)) as Node[]; - const test = isPlayParam(path); - expect(test).to.be.eq(undefined); - }); - it("canCorrectlyNegatePlayParamForNonRootSequence", async () => { const path = (await getPathInFile("isPlayParam.yml", 14, 7)) as Node[]; const test = isPlayParam(path, "file://test/isPlay.yml"); From d3d6de6d1b6d417847e2dba002d835a7da98ca99 Mon Sep 17 00:00:00 2001 From: ansibot Date: Thu, 22 Jun 2023 11:41:14 +0200 Subject: [PATCH 511/558] Release v1.1.0 (#584) ## v1.1.0 ### Minor Changes - Update yaml to 2.x (#566) @priyamsahoo - Add variable auto-completion feature when cursor inside jinja inline brackets (#552) @priyamsahoo ### Bugfixes - Get module route for FQCN with more than 3 elements (#538) @fredericgiquel - Replace sphinx with mkdocs (#544) @ssbarnea - Modify package version info in meta-data (#530) @priyamsahoo - Fix intermittent EE test failures (#533) @ganeshrn - Fix github issue links in docs (#573) @antdking - Fix ansible lint config parsing (#577) @priyamsahoo - Add env variable to remove color from command result stdout (#579) @priyamsahoo Co-authored-by: Ansible DevTools --- docs/changelog.md | 19 +++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/docs/changelog.md b/docs/changelog.md index d2e85c1c5..1ef70c756 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -19,6 +19,25 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v1.1.0 + +### Minor Changes + +- Update yaml to 2.x (#566) @priyamsahoo +- Add variable auto-completion feature when cursor inside jinja inline brackets + (#552) @priyamsahoo + +### Bugfixes + +- Get module route for FQCN with more than 3 elements (#538) @fredericgiquel +- Replace sphinx with mkdocs (#544) @ssbarnea +- Modify package version info in meta-data (#530) @priyamsahoo +- Fix intermittent EE test failures (#533) @ganeshrn +- Fix github issue links in docs (#573) @antdking +- Fix ansible lint config parsing (#577) @priyamsahoo +- Add env variable to remove color from command result stdout (#579) + @priyamsahoo + ## v1.0.4 ### Bugfixes diff --git a/package-lock.json b/package-lock.json index 251b97aca..76099f4d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "1.0.4", + "version": "1.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "1.0.4", + "version": "1.1.0", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.20", diff --git a/package.json b/package.json index b5b30e453..f0f238021 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "1.0.4", + "version": "1.1.0", "contributors": [ { "name": "Tomasz Maciążek", From 4c2d11d1312184377e7473d8958e91f19e4ec29f Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Wed, 28 Jun 2023 08:05:42 +0200 Subject: [PATCH 512/558] Use antsibull-docs to format strings. (#563) Co-authored-by: Ganesh Nalawade --- .config/dictionary.txt | 1 + package-lock.json | 11 +++++++++++ package.json | 1 + src/utils/docsFormatter.ts | 21 ++------------------- test/providers/hoverProvider.test.ts | 2 +- 5 files changed, 16 insertions(+), 20 deletions(-) diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 2c048846a..6fafed4ad 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -17,6 +17,7 @@ YOLO alphanums ansible ansiblefest +antsibull apidoc autocrlf autofix diff --git a/package-lock.json b/package-lock.json index 76099f4d0..b1461217a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.20", + "antsibull-docs": "^1.0.0", "glob": "^9.3.2", "ini": "^4.0.0", "lodash": "^4.17.21", @@ -1478,6 +1479,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/antsibull-docs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/antsibull-docs/-/antsibull-docs-1.0.0.tgz", + "integrity": "sha512-OqrXCQkKeqTTuFBmQc9RJnXPcjUtRnMq0rfmT3zlp6UHJWTwq1SLffwOEw1I5jC7FNLMoabUjPb8wxCNB3RaZw==" + }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -8289,6 +8295,11 @@ "color-convert": "^2.0.1" } }, + "antsibull-docs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/antsibull-docs/-/antsibull-docs-1.0.0.tgz", + "integrity": "sha512-OqrXCQkKeqTTuFBmQc9RJnXPcjUtRnMq0rfmT3zlp6UHJWTwq1SLffwOEw1I5jC7FNLMoabUjPb8wxCNB3RaZw==" + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", diff --git a/package.json b/package.json index f0f238021..516c4a135 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ ], "dependencies": { "@flatten-js/interval-tree": "^1.0.20", + "antsibull-docs": "^1.0.0", "glob": "^9.3.2", "ini": "^4.0.0", "lodash": "^4.17.21", diff --git a/src/utils/docsFormatter.ts b/src/utils/docsFormatter.ts index c621e1a84..41155354c 100644 --- a/src/utils/docsFormatter.ts +++ b/src/utils/docsFormatter.ts @@ -1,5 +1,6 @@ import { format } from "util"; import { MarkupContent, MarkupKind } from "vscode-languageserver"; +import { parse, toMD } from "antsibull-docs"; import { IDescription, IModuleDocumentation, @@ -135,16 +136,6 @@ export function getDetails(option: IOption): string | undefined { } // TODO: do something with links -const macroPatterns = { - link: /L\((.*?),(.*?)\)/g, - url: /U\((.*?)\)/g, - reference: /R\((.*?),(.*?)\)/g, - module: /M\((.*?)\)/g, - monospace: /C\((.*?)\)/g, - italics: /I\((.*?)\)/g, - bold: /B\((.*?)\)/g, - hr: /\bHORIZONTALLINE\b/, -}; function replaceMacros(text: unknown): string { let safeText; if (typeof text === "string") { @@ -152,13 +143,5 @@ function replaceMacros(text: unknown): string { } else { safeText = JSON.stringify(text); } - return safeText - .replace(macroPatterns.link, "[$1]($2)") - .replace(macroPatterns.url, "$1") - .replace(macroPatterns.reference, "[$1]($2)") - .replace(macroPatterns.module, "*`$1`*") - .replace(macroPatterns.monospace, "`$1`") - .replace(macroPatterns.italics, "_$1_") - .replace(macroPatterns.bold, "**$1**") - .replace(macroPatterns.hr, "
"); + return toMD(parse(safeText)); } diff --git a/test/providers/hoverProvider.test.ts b/test/providers/hoverProvider.test.ts index c227ac0c0..f95afd646 100644 --- a/test/providers/hoverProvider.test.ts +++ b/test/providers/hoverProvider.test.ts @@ -131,7 +131,7 @@ function testModuleNames( { word: "ansible.builtin.debug -> msg", position: { line: 5, character: 10 } as Position, - doc: "The customized message that is printed. If omitted, prints a generic message.", + doc: "The customized message that is printed\\. If omitted\\, prints a generic message\\.", }, ]; From 34e9bc4de3b7acb4ca0bf602740bc98cd3d97bcb Mon Sep 17 00:00:00 2001 From: Ajinkya Udgirkar Date: Thu, 29 Jun 2023 15:10:00 +0530 Subject: [PATCH 513/558] Return URI instead of filepath (#560) * Update targetUri to return URI instead of a filepath * add tests for definition provider * add rule to skip lib check in tsconfig * fix linting --------- Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Co-authored-by: priyamsahoo --- src/providers/definitionProvider.ts | 3 +- .../playbook_for_module_definition.yml | 21 ++++ test/providers/definitionProvider.test.ts | 119 ++++++++++++++++++ tsconfig.json | 1 + 4 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/definition/playbook_for_module_definition.yml create mode 100644 test/providers/definitionProvider.test.ts diff --git a/src/providers/definitionProvider.ts b/src/providers/definitionProvider.ts index 5792896d5..c76363f77 100644 --- a/src/providers/definitionProvider.ts +++ b/src/providers/definitionProvider.ts @@ -1,5 +1,6 @@ import { DefinitionLink, Range } from "vscode-languageserver"; import { Position, TextDocument } from "vscode-languageserver-textdocument"; +import { URI } from "vscode-uri"; import { isScalar } from "yaml"; import { DocsLibrary } from "../services/docsLibrary"; import { toLspRange } from "../utils/misc"; @@ -34,7 +35,7 @@ export async function getDefinition( const range = getOrigRange(node); return [ { - targetUri: module.source, + targetUri: URI.file(module.source).toString(), originSelectionRange: range ? toLspRange(range, document) : undefined, diff --git a/test/fixtures/definition/playbook_for_module_definition.yml b/test/fixtures/definition/playbook_for_module_definition.yml new file mode 100644 index 000000000..6f45cf1dd --- /dev/null +++ b/test/fixtures/definition/playbook_for_module_definition.yml @@ -0,0 +1,21 @@ +- name: Hello World + hosts: localhost + gather_facts: False + tasks: + - name: Builtin module + ansible.builtin.debug: + msg: Happy testing ! + register: result + + - block: + - name: List test directory content + ansible.builtin.command: "ls -l /test/" + become: True + + - improper_module: + improper_option: invalid_value + + - name: Collection module + org_1.coll_3.module_3: + opt_1: + - sub_opt_1: "choice_2" diff --git a/test/providers/definitionProvider.test.ts b/test/providers/definitionProvider.test.ts new file mode 100644 index 000000000..5191c40d5 --- /dev/null +++ b/test/providers/definitionProvider.test.ts @@ -0,0 +1,119 @@ +import { TextDocument } from "vscode-languageserver-textdocument"; +import { expect } from "chai"; +import { + createTestWorkspaceManager, + getDoc, + resolveDocUri, + enableExecutionEnvironmentSettings, + disableExecutionEnvironmentSettings, + setFixtureAnsibleCollectionPathEnv, +} from "../helper"; +import { Position } from "vscode-languageserver"; +import { WorkspaceFolderContext } from "../../src/services/workspaceManager"; +import { getDefinition } from "../../src/providers/definitionProvider"; +import { fileExists } from "../../src/utils/misc"; +import { URI } from "vscode-uri"; + +function testModuleNamesForDefinition( + context: WorkspaceFolderContext, + textDoc: TextDocument, +) { + const tests = [ + { + word: "definition for builtin modules (ansible.builtin.debug)", + position: { line: 5, character: 8 } as Position, + selectionRange: { + start: { line: 5, character: 6 }, + end: { line: 5, character: 27 }, + }, + provideDefinition: true, + }, + { + word: "no definition for invalid module names", + position: { line: 13, character: 8 } as Position, + selectionRange: { + start: { line: 13, character: 6 }, + end: { line: 13, character: 15 }, + }, + provideDefinition: false, + }, + { + word: "definition for collection modules (org_1.coll_3.module_3)", + position: { line: 18, character: 8 } as Position, + selectionRange: { + start: { line: 18, character: 6 }, + end: { line: 18, character: 27 }, + }, + provideDefinition: true, + }, + ]; + + tests.forEach(({ word, position, selectionRange, provideDefinition }) => { + it(`should provide '${word}'`, async function () { + const actualDefinition = await getDefinition( + textDoc, + position, + await context.docsLibrary, + ); + + if (!provideDefinition) { + expect(actualDefinition).to.be.null; + return; + } + + expect(actualDefinition).to.have.length(1); + + const definition = actualDefinition[0]; + + // file uri check + expect(definition.targetUri.startsWith("file:///")).to.be.true; + expect(definition.targetUri).satisfy((fileUri: string) => + fileExists(URI.parse(fileUri).path), + ); + + // nodule name range check in the playbook + expect(definition.originSelectionRange).to.deep.equal(selectionRange); + + // original document range checks + expect(definition).to.haveOwnProperty("targetRange"); + expect(definition).to.haveOwnProperty("targetSelectionRange"); + }); + }); +} + +describe("getDefinition()", function () { + const workspaceManager = createTestWorkspaceManager(); + const fixtureFilePath = "definition/playbook_for_module_definition.yml"; + const fixtureFileUri = resolveDocUri(fixtureFilePath); + const context = workspaceManager.getContext(fixtureFileUri); + + const textDoc = getDoc(fixtureFilePath); + const docSettings = context.documentSettings.get(textDoc.uri); + + describe("Module name definitions", function () { + describe("With EE enabled @ee", function () { + before(async function () { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + + testModuleNamesForDefinition(context, textDoc); + + after(async function () { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", function () { + before(async function () { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + + testModuleNamesForDefinition(context, textDoc); + }); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index 34cf71145..bba0e2380 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,6 +10,7 @@ "sourceMap": true, "target": "es6", "esModuleInterop": true, + "skipLibCheck": true, }, "exclude": ["node_modules", "out", "vscode-ansible"], } From 99838e7da756c3474b2c5a30c3dfdc005895c449 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Tue, 11 Jul 2023 16:05:45 +0530 Subject: [PATCH 514/558] Fix vars completion in task files (#589) * provide vars completion only within a playbook * fix indentation for task files (and other non-playbook files) * rectify the tests for doCompletionResolve * add separate tests for resolveSuffix * fix linting issues * update variable names --- src/providers/completionProvider.ts | 67 +++-- .../completion/resolve_completion.yml | 4 +- test/providers/completionResolver.test.ts | 261 +++++++++--------- .../resolveSuffixWhileCompletion.test.ts | 87 ++++++ 4 files changed, 277 insertions(+), 142 deletions(-) create mode 100644 test/utils/resolveSuffixWhileCompletion.test.ts diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index 60d205dfd..db74de7d5 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -34,6 +34,7 @@ import { parseAllDocuments, getPossibleOptionsForPath, isCursorInsideJinjaBrackets, + isPlaybook, } from "../utils/yaml"; import { getVarsCompletion } from "./completionProviderUtils"; @@ -51,13 +52,16 @@ const priorityMap = { choice: 2, }; -let DUMMY_MAPPING_CHARACTERS; +let dummyMappingCharacter: string; +let isAnsiblePlaybook: boolean; export async function doCompletion( document: TextDocument, position: Position, context: WorkspaceFolderContext, ): Promise { + isAnsiblePlaybook = isPlaybook(document); + let preparedText = document.getText(); const offset = document.offsetAt(position); @@ -70,7 +74,7 @@ export async function doCompletion( // 2. When we are at the value level, we use `__`. We do this because based on the above hack, the // use of `_:` at the value level creates invalid YAML as `: ` is an incorrect token in yaml string scalar - DUMMY_MAPPING_CHARACTERS = "_:"; + dummyMappingCharacter = "_:"; const previousCharactersOfCurrentLine = document.getText({ start: { line: position.line, character: 0 }, @@ -80,10 +84,10 @@ export async function doCompletion( if (previousCharactersOfCurrentLine.includes(": ")) { // this means we have encountered ": " previously in the same line and thus we are // at the value level - DUMMY_MAPPING_CHARACTERS = "__"; + dummyMappingCharacter = "__"; } - preparedText = insert(preparedText, offset, DUMMY_MAPPING_CHARACTERS); + preparedText = insert(preparedText, offset, dummyMappingCharacter); const yamlDocs = parseAllDocuments(preparedText); const extensionSettings = await context.documentSettings.get(document.uri); @@ -187,6 +191,7 @@ export async function doCompletion( ? `${insertName}:${resolveSuffix( "dict", // since a module is always a dictionary cursorAtFirstElementOfList, + isAnsiblePlaybook, )}` : insertName; return { @@ -217,8 +222,11 @@ export async function doCompletion( return completionItems; } - // Provide variable auto-completion if the cursor is inside valid jinja inline brackets - if (isCursorInsideJinjaBrackets(document, position, path)) { + // Provide variable auto-completion if the cursor is inside valid jinja inline brackets in a playbook + if ( + isAnsiblePlaybook && + isCursorInsideJinjaBrackets(document, position, path) + ) { const varCompletion: CompletionItem[] = getVarsCompletion( document.uri, path, @@ -491,7 +499,7 @@ function getNodeRange(node: Node, document: TextDocument): Range | undefined { const start = range[0]; let end = range[1]; // compensate for DUMMY MAPPING - if (node.value.includes(DUMMY_MAPPING_CHARACTERS)) { + if (node.value.includes(dummyMappingCharacter)) { end -= 2; } else { // colon, being at the end of the line, was excluded from the node @@ -550,6 +558,7 @@ export async function doCompletionResolve( ? `${insertName}:${resolveSuffix( "dict", // since a module is always a dictionary completionItem.data.firstElementOfList, + isAnsiblePlaybook, )}` : insertName; @@ -575,6 +584,7 @@ export async function doCompletionResolve( ? `${completionItem.label}:${resolveSuffix( completionItem.data.type, completionItem.data.firstElementOfList, + isAnsiblePlaybook, )}` : `${completionItem.label}`; @@ -614,19 +624,40 @@ function firstElementOfList(document: TextDocument, nodeRange: Range): boolean { return elementsBeforeKey === "-"; } -function resolveSuffix(optionType: string, firstElementOfList: boolean) { +export function resolveSuffix( + optionType: string, + firstElementOfList: boolean, + isDocPlaybook: boolean, +) { let returnSuffix: string; - switch (optionType) { - case "list": - returnSuffix = firstElementOfList ? `${EOL}\t\t- ` : `${EOL}\t- `; - break; - case "dict": - returnSuffix = firstElementOfList ? `${EOL}\t\t` : `${EOL}\t`; - break; - default: - returnSuffix = " "; - break; + if (isDocPlaybook) { + // if doc is a playbook, indentation will shift one tab since a play is a list + switch (optionType) { + case "list": + returnSuffix = firstElementOfList ? `${EOL}\t\t- ` : `${EOL}\t- `; + break; + case "dict": + returnSuffix = firstElementOfList ? `${EOL}\t\t` : `${EOL}\t`; + break; + default: + returnSuffix = " "; + break; + } + } else { + // if doc is not a playbook (any other ansible file like task file, etc.) indentation will not + // include that extra tab + switch (optionType) { + case "list": + returnSuffix = `${EOL}\t- `; + break; + case "dict": + returnSuffix = `${EOL}\t`; + break; + default: + returnSuffix = " "; + break; + } } return returnSuffix; diff --git a/test/fixtures/completion/resolve_completion.yml b/test/fixtures/completion/resolve_completion.yml index e69c8ff16..890d9438c 100644 --- a/test/fixtures/completion/resolve_completion.yml +++ b/test/fixtures/completion/resolve_completion.yml @@ -8,7 +8,8 @@ ansible.builtin.debug: msg: "Hello World {{ item }}" - - module_3: + - name: Collection module + module_3: opt_1: - sub_opt_1: Hello-world sub_opt_2: @@ -19,6 +20,7 @@ sub_sub_opt_3: - sub_sub_sub_opt_1: + - name: Collection module with FQCN org_1.coll_1.module_1: opt_1: - sub_opt_1: Hello-world-2 diff --git a/test/providers/completionResolver.test.ts b/test/providers/completionResolver.test.ts index 4403f6eb8..91530460c 100644 --- a/test/providers/completionResolver.test.ts +++ b/test/providers/completionResolver.test.ts @@ -31,33 +31,41 @@ function testFQCNEnabled(context: WorkspaceFolderContext) { firstElementOfList: false, }, }, - completionText: "org_1.coll_3.module_3", + completionTextAtLineEnd: `org_1.coll_3.module_3:${EOL}\t`, + completionTextInBetween: "org_1.coll_3.module_3", }, ]; - tests.forEach(({ name, completionItem, completionText }) => { - it(`should resolve completion for ${name}`, async function () { - const actualCompletionResolveAtLineEnd = await doCompletionResolve( - completionItem, - context, - ); + tests.forEach( + ({ + name, + completionItem, + completionTextAtLineEnd, + completionTextInBetween, + }) => { + it(`should resolve completion for ${name}`, async function () { + const actualCompletionResolveAtLineEnd = await doCompletionResolve( + completionItem, + context, + ); - expect(actualCompletionResolveAtLineEnd.insertText).be.equal( - `${completionText}:${EOL}\t`, - ); + expect(actualCompletionResolveAtLineEnd.insertText).be.equal( + completionTextAtLineEnd, + ); - // Check for completion resolution when asked in between of lines - completionItem.data.atEndOfLine = false; - const actualCompletionResolveAtInBetween = await doCompletionResolve( - completionItem, - context, - ); + // Check for completion resolution when asked in between of lines + completionItem.data.atEndOfLine = false; + const actualCompletionResolveAtInBetween = await doCompletionResolve( + completionItem, + context, + ); - expect(actualCompletionResolveAtInBetween.insertText).be.equal( - `${completionText}`, - ); - }); - }); + expect(actualCompletionResolveAtInBetween.insertText).be.equal( + completionTextInBetween, + ); + }); + }, + ); } function testFQCNDisabled(context: WorkspaceFolderContext) { @@ -74,7 +82,8 @@ function testFQCNDisabled(context: WorkspaceFolderContext) { firstElementOfList: false, }, }, - completionText: "module_3", + completionTextAtLineEnd: `module_3:${EOL}\t`, + completionTextInBetween: "module_3", }, { name: "module name with full FQCN since it is not present in declared collections in playbook", @@ -88,32 +97,40 @@ function testFQCNDisabled(context: WorkspaceFolderContext) { firstElementOfList: false, }, }, - completionText: "org_1.coll_1.module_1", + completionTextAtLineEnd: `org_1.coll_1.module_1:${EOL}\t`, + completionTextInBetween: "org_1.coll_1.module_1", }, ]; - tests.forEach(({ name, completionItem, completionText }) => { - it(`should resolve completion for ${name}`, async function () { - const actualCompletionResolveAtLineEnd = await doCompletionResolve( - completionItem, - context, - ); + tests.forEach( + ({ + name, + completionItem, + completionTextAtLineEnd, + completionTextInBetween, + }) => { + it(`should resolve completion for ${name}`, async function () { + const actualCompletionResolveAtLineEnd = await doCompletionResolve( + completionItem, + context, + ); - expect(actualCompletionResolveAtLineEnd.insertText).be.equal( - `${completionText}:${EOL}\t`, - ); + expect(actualCompletionResolveAtLineEnd.insertText).be.equal( + completionTextAtLineEnd, + ); - // Check for completion resolution when asked in between of lines - completionItem.data.atEndOfLine = false; - const actualCompletionResolveAtInBetween = await doCompletionResolve( - completionItem, - context, - ); + // Check for completion resolution when asked in between of lines + completionItem.data.atEndOfLine = false; + const actualCompletionResolveAtInBetween = await doCompletionResolve( + completionItem, + context, + ); - expect(actualCompletionResolveAtInBetween.insertText).be.equal( - `${completionText}`, - ); - }); - }); + expect(actualCompletionResolveAtInBetween.insertText).be.equal( + completionTextInBetween, + ); + }); + }, + ); } function testResolveModuleOptionCompletion(context: WorkspaceFolderContext) { @@ -129,7 +146,8 @@ function testResolveModuleOptionCompletion(context: WorkspaceFolderContext) { firstElementOfList: true, }, }, - completionText: "opt_1", + completionTextAtLineEnd: `opt_1:${EOL}\t\t`, + completionTextInBetween: "opt_1", }, { name: "sub option expecting list with `sub_option: ${EOL}\\t- `", @@ -141,7 +159,8 @@ function testResolveModuleOptionCompletion(context: WorkspaceFolderContext) { atEndOfLine: true, }, }, - completionText: "sub_opt_2", + completionTextAtLineEnd: `sub_opt_2:${EOL}\t- `, + completionTextInBetween: "sub_opt_2", }, { name: "sub option expecting string or number or boolean with `sub_option: `", @@ -153,49 +172,41 @@ function testResolveModuleOptionCompletion(context: WorkspaceFolderContext) { atEndOfLine: true, }, }, - completionText: "sub_opt_1", + completionTextAtLineEnd: "sub_opt_1: ", + completionTextInBetween: "sub_opt_1", }, ]; - tests.forEach(({ name, completionItem, completionText }) => { - it(`should resolve completion for ${name}`, async function () { - const actualCompletionResolveAtLineEnd = await doCompletionResolve( - completionItem, - context, - ); + tests.forEach( + ({ + name, + completionItem, + completionTextAtLineEnd, + completionTextInBetween, + }) => { + it(`should resolve completion for ${name}`, async function () { + const actualCompletionResolveAtLineEnd = await doCompletionResolve( + completionItem, + context, + ); - let returnSuffix: string; - switch (completionItem.data.type) { - case "list": - returnSuffix = completionItem.data.firstElementOfList - ? `${EOL}\t\t- ` - : `${EOL}\t- `; - break; - case "dict": - returnSuffix = completionItem.data.firstElementOfList - ? `${EOL}\t\t` - : `${EOL}\t`; - break; - default: - returnSuffix = " "; - break; - } - expect(actualCompletionResolveAtLineEnd.insertText).be.equal( - `${completionText}:${returnSuffix}`, - ); + expect(actualCompletionResolveAtLineEnd.insertText).be.equal( + completionTextAtLineEnd, + ); - // Check for completion resolution when asked in between of lines - completionItem.data.atEndOfLine = false; - const actualCompletionResolveAtInBetween = await doCompletionResolve( - completionItem, - context, - ); + // Check for completion resolution when asked in between of lines + completionItem.data.atEndOfLine = false; + const actualCompletionResolveAtInBetween = await doCompletionResolve( + completionItem, + context, + ); - expect(actualCompletionResolveAtInBetween.insertText).be.equal( - `${completionText}`, - ); - }); - }); + expect(actualCompletionResolveAtInBetween.insertText).be.equal( + completionTextInBetween, + ); + }); + }, + ); } describe("doCompletionResolve()", () => { @@ -208,57 +219,61 @@ describe("doCompletionResolve()", () => { const docSettings = context.documentSettings.get(textDoc.uri); describe("Resolve completion for module names", () => { - describe("With useFQCN enabled and with EE enabled @ee", () => { - before(async () => { - setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible", - ); - await enableExecutionEnvironmentSettings(docSettings); - }); - testFQCNEnabled(context); + describe("Resolve completion for module names when FQCN is enabled", function () { + describe("with EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + testFQCNEnabled(context); - after(async () => { - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); }); - }); - describe("With useFQCN enabled and with EE disabled", () => { - before(async () => { - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); + describe("with EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + testFQCNEnabled(context); }); - testFQCNEnabled(context); }); - describe("With useFQCN disabled and with EE enabled @ee", () => { - before(async () => { - setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible", - ); - await enableExecutionEnvironmentSettings(docSettings); - (await docSettings).ansible.useFullyQualifiedCollectionNames = false; - }); - testFQCNDisabled(context); + describe("Resolve completion for module names when FQCN is disabled", function () { + describe("with EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + (await docSettings).ansible.useFullyQualifiedCollectionNames = false; + }); + testFQCNDisabled(context); - after(async () => { - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - (await docSettings).ansible.useFullyQualifiedCollectionNames = true; + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + (await docSettings).ansible.useFullyQualifiedCollectionNames = true; + }); }); - }); - describe("With useFQCN disabled and with EE disabled", () => { - before(async () => { - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - (await docSettings).ansible.useFullyQualifiedCollectionNames = false; - }); - testFQCNDisabled(context); + describe("with EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + (await docSettings).ansible.useFullyQualifiedCollectionNames = false; + }); + testFQCNDisabled(context); - after(async () => { - setFixtureAnsibleCollectionPathEnv(); - (await docSettings).ansible.useFullyQualifiedCollectionNames = true; + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + (await docSettings).ansible.useFullyQualifiedCollectionNames = true; + }); }); }); }); diff --git a/test/utils/resolveSuffixWhileCompletion.test.ts b/test/utils/resolveSuffixWhileCompletion.test.ts new file mode 100644 index 000000000..fbccd632b --- /dev/null +++ b/test/utils/resolveSuffixWhileCompletion.test.ts @@ -0,0 +1,87 @@ +import { EOL } from "os"; +import { resolveSuffix } from "../../src/providers/completionProvider"; +import { expect } from "chai"; + +function testResolveSuffixInPlaybook() { + const tests = [ + { + optionType: "dict", + firstElementOfList: true, + isPlaybook: true, + expectedSuffix: `${EOL}\t\t`, + }, + { + optionType: "list", + firstElementOfList: true, + isPlaybook: true, + expectedSuffix: `${EOL}\t\t- `, + }, + { + optionType: "string", + firstElementOfList: true, + isPlaybook: true, + expectedSuffix: " ", + }, + ]; + + tests.forEach( + ({ optionType, firstElementOfList, isPlaybook, expectedSuffix }) => { + it(`should provide suffix for '${optionType}' type options in a playbook`, function () { + const actualSuffix = resolveSuffix( + optionType, + firstElementOfList, + isPlaybook, + ); + + expect(actualSuffix).to.equal(expectedSuffix); + }); + }, + ); +} + +function testResolveSuffixInNonPlaybookFile() { + const tests = [ + { + optionType: "dict", + firstElementOfList: true, + isPlaybook: false, + expectedSuffix: `${EOL}\t`, + }, + { + optionType: "list", + firstElementOfList: true, + isPlaybook: false, + expectedSuffix: `${EOL}\t- `, + }, + { + optionType: "string", + firstElementOfList: true, + isPlaybook: false, + expectedSuffix: " ", + }, + ]; + + tests.forEach( + ({ optionType, firstElementOfList, isPlaybook, expectedSuffix }) => { + it(`should provide suffix for '${optionType}' type options in a non-playbook file`, function () { + const actualSuffix = resolveSuffix( + optionType, + firstElementOfList, + isPlaybook, + ); + + expect(actualSuffix).to.equal(expectedSuffix); + }); + }, + ); +} + +describe("resolveSuffix", function () { + describe("Resolve suffix for completion items in a playbook", function () { + testResolveSuffixInPlaybook(); + }); + + describe("Resolve suffix for completion items in a non-playbook file", function () { + testResolveSuffixInNonPlaybookFile(); + }); +}); From a79ef7abb8de58a11048e069c8f28e28e006c0b6 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Tue, 11 Jul 2023 20:14:57 +0530 Subject: [PATCH 515/558] fix isPlaybook function (#590) --- src/utils/yaml.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/utils/yaml.ts b/src/utils/yaml.ts index 0f19c808b..c301c5a20 100644 --- a/src/utils/yaml.ts +++ b/src/utils/yaml.ts @@ -569,7 +569,11 @@ export function isPlaybook(textDocument: TextDocument): boolean { const playbookJSON = path[0].toJSON(); Object.keys(playbookJSON).forEach(function (key) { - Object.keys(playbookJSON[key]).forEach((item) => playbookKeysSet.add(item)); + if (playbookJSON[key]) { + Object.keys(playbookJSON[key]).forEach((item) => + playbookKeysSet.add(item), + ); + } }); const playbookKeys = [...playbookKeysSet]; From 08007418945c4421496a6c78b609f23d787359cf Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Wed, 12 Jul 2023 18:44:24 +0530 Subject: [PATCH 516/558] Add support for playbook adjacent collections (#511) * add setting to toggle support for playbook adjacent collection * add code to provide support for playbook adjacent collections * add test fixtures * add tests * add hover tests * update test structure * fix linting * remove unused imports * remove unwanted logs and spaces * remove mocha reporter: tap option * update settings readme * add logs * debug * update logic to handle playbook adjacent collection insde docsLibrary rather than inside ansibleConfig * update tests * add utility file for supporting playbook adjacent collections * use docs library utility file for giving services for playbook adjacent collections * add logic to check the presence of module code inside PAC * update tests with negative cases for PAC * remove unused imports * remove commented lines * remove console logs * change setting name change setting name from supportPlaybookAdjacentCollections to usePlaybookAdjacentCollections * remove the setting for supporting playbook adjacent collections and provide support for it by default --------- Co-authored-by: Ganesh Nalawade --- src/interfaces/extensionSettings.ts | 1 + src/providers/completionProvider.ts | 4 +- src/services/docsLibrary.ts | 139 ++++++++---- src/services/docsLibraryUtilsForPAC.ts | 203 ++++++++++++++++++ .../playbook_adjacent_to_collection.yml | 8 + .../adjacent_org/adjacent_coll/galaxy.yml | 9 + .../adjacent_coll/plugins/modules/module_1.py | 57 +++++ .../non_adjacent_playbooks/playbook2.yml | 8 + .../playbook_adjacent_collection/playbook.yml | 8 + test/helper.ts | 9 + test/providers/completionProvider.test.ts | 187 ++++++++++++++-- test/providers/hoverProvider.test.ts | 162 ++++++++++++-- 12 files changed, 734 insertions(+), 61 deletions(-) create mode 100644 src/services/docsLibraryUtilsForPAC.ts create mode 100644 test/fixtures/completion/playbook_adjacent_to_collection.yml create mode 100644 test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/galaxy.yml create mode 100644 test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/plugins/modules/module_1.py create mode 100644 test/fixtures/playbook_adjacent_collection/non_adjacent_playbooks/playbook2.yml create mode 100644 test/fixtures/playbook_adjacent_collection/playbook.yml diff --git a/src/interfaces/extensionSettings.ts b/src/interfaces/extensionSettings.ts index 37c5b35a9..2bc3d799d 100644 --- a/src/interfaces/extensionSettings.ts +++ b/src/interfaces/extensionSettings.ts @@ -3,6 +3,7 @@ * * 1. Add appropriate setting type in the desired section (particular interface) * 2. Add the setting(s) to `ExtensionSetting` at appropriate nested level + * 3. Go to `settingsManager.ts` and add the appropriate change */ export type IContainerEngine = "auto" | "podman" | "docker"; diff --git a/src/providers/completionProvider.ts b/src/providers/completionProvider.ts index db74de7d5..6ac2b6a32 100644 --- a/src/providers/completionProvider.ts +++ b/src/providers/completionProvider.ts @@ -170,7 +170,9 @@ export async function doCompletion( ); // offer modules - const moduleCompletionItems = [...docsLibrary.moduleFqcns] + const moduleCompletionItems = [ + ...(await docsLibrary.getModuleFqcns(document.uri)), + ] .filter( (moduleFqcn) => provideRedirectModulesCompletion || diff --git a/src/services/docsLibrary.ts b/src/services/docsLibrary.ts index 621b2541f..fb9ad48dc 100644 --- a/src/services/docsLibrary.ts +++ b/src/services/docsLibrary.ts @@ -13,6 +13,14 @@ import { processRawDocumentation, } from "../utils/docsParser"; import { IModuleMetadata } from "../interfaces/module"; +import * as path from "path"; +import { existsSync, lstatSync } from "fs"; +import { URI } from "vscode-uri"; +import { + findModulesUtils, + getModuleFqcnsUtils, +} from "./docsLibraryUtilsForPAC"; +import { globArray } from "../utils/pathUtils"; export class DocsLibrary { private connection: Connection; private modules = new Map(); @@ -41,16 +49,7 @@ export class DocsLibrary { await executionEnvironment.fetchPluginDocs(ansibleConfig); } for (const modulesPath of ansibleConfig.module_locations) { - (await findDocumentation(modulesPath, "builtin")).forEach((doc) => { - this.modules.set(doc.fqcn, doc); - this.moduleFqcns.add(doc.fqcn); - }); - - (await findDocumentation(modulesPath, "builtin_doc_fragment")).forEach( - (doc) => { - this.docFragments.set(doc.fqcn, doc); - }, - ); + await this.findDocumentationInModulesPath(modulesPath); } ( @@ -58,31 +57,7 @@ export class DocsLibrary { ).forEach((r, collection) => this.pluginRouting.set(collection, r)); for (const collectionsPath of ansibleConfig.collections_paths) { - (await findDocumentation(collectionsPath, "collection")).forEach( - (doc) => { - this.modules.set(doc.fqcn, doc); - this.moduleFqcns.add(doc.fqcn); - }, - ); - - ( - await findDocumentation(collectionsPath, "collection_doc_fragment") - ).forEach((doc) => { - this.docFragments.set(doc.fqcn, doc); - }); - - (await findPluginRouting(collectionsPath, "collection")).forEach( - (r, collection) => this.pluginRouting.set(collection, r), - ); - - // add all valid redirect routes as possible FQCNs - for (const [collection, routesByType] of this.pluginRouting) { - for (const [name, route] of routesByType.get("modules") || []) { - if (route.redirect && !route.tombstone) { - this.moduleFqcns.add(`${collection}.${name}`); - } - } - } + await this.findDocumentationInCollectionsPath(collectionsPath); } } catch (error) { if (error instanceof Error) { @@ -110,6 +85,40 @@ export class DocsLibrary { contextPath?: Node[], documentUri?: string, ): Promise<[IModuleMetadata | undefined, string | undefined]> { + // support playbook adjacent collections + const playbookDirectory = URI.parse(documentUri).path.split(path.sep); + playbookDirectory.pop(); + playbookDirectory.push("collections"); + + const playbookAdjacentCollectionsPath = playbookDirectory.join(path.sep); + + const isAdjacentCollectionAvailable = existsSync( + playbookAdjacentCollectionsPath, + ); + + // check if a module code is actually present or not + const moduleFiles = globArray([ + `${playbookAdjacentCollectionsPath}/ansible_collections/*/*/plugins/modules/*.py`, + `${playbookAdjacentCollectionsPath}/ansible_collections/*/*/plugins/modules/**/*.py`, + `!${playbookAdjacentCollectionsPath}/ansible_collections/*/*/plugins/modules/_*.py`, + `!${playbookAdjacentCollectionsPath}/ansible_collections/*/*/plugins/modules/**/_*.py`, + ]).filter((item) => !lstatSync(item).isSymbolicLink()); + + if (isAdjacentCollectionAvailable && moduleFiles.length !== 0) { + const [PAModule, PAHitFqcn] = await findModulesUtils( + playbookAdjacentCollectionsPath, + searchText, + this.context, + contextPath, + documentUri, + ); + if (PAModule) { + // return early if module found in playbook adjacent collection + return [PAModule, PAHitFqcn]; + } + } + + // Now, start finding the module let hitFqcn; const candidateFqcns = await this.getCandidateFqcns( searchText, @@ -158,6 +167,45 @@ export class DocsLibrary { return [module, hitFqcn]; } + private async findDocumentationInModulesPath(modulesPath) { + (await findDocumentation(modulesPath, "builtin")).forEach((doc) => { + this.modules.set(doc.fqcn, doc); + this._moduleFqcns.add(doc.fqcn); + }); + + (await findDocumentation(modulesPath, "builtin_doc_fragment")).forEach( + (doc) => { + this.docFragments.set(doc.fqcn, doc); + }, + ); + } + + private async findDocumentationInCollectionsPath(collectionsPath) { + (await findDocumentation(collectionsPath, "collection")).forEach((doc) => { + this.modules.set(doc.fqcn, doc); + this._moduleFqcns.add(doc.fqcn); + }); + + ( + await findDocumentation(collectionsPath, "collection_doc_fragment") + ).forEach((doc) => { + this.docFragments.set(doc.fqcn, doc); + }); + + (await findPluginRouting(collectionsPath, "collection")).forEach( + (r, collection) => this.pluginRouting.set(collection, r), + ); + + // add all valid redirect routes as possible FQCNs + for (const [collection, routesByType] of this.pluginRouting) { + for (const [name, route] of routesByType.get("modules") || []) { + if (route.redirect && !route.tombstone) { + this._moduleFqcns.add(`${collection}.${name}`); + } + } + } + } + private async getCandidateFqcns( searchText: string, documentUri: string | undefined, @@ -202,7 +250,26 @@ export class DocsLibrary { } } - get moduleFqcns(): Set { + public async getModuleFqcns(documentUri: string): Promise> { + // support playbook adjacent collections + const playbookDirectory = URI.parse(documentUri).path.split(path.sep); + playbookDirectory.pop(); + playbookDirectory.push("collections"); + + const playbookAdjacentCollectionsPath = playbookDirectory.join(path.sep); + + const isAdjacentCollectionAvailable = existsSync( + playbookAdjacentCollectionsPath, + ); + + if (isAdjacentCollectionAvailable) { + const paModuleFqcns = await getModuleFqcnsUtils( + playbookAdjacentCollectionsPath, + ); + // return early if appended list + return new Set([...this._moduleFqcns, ...paModuleFqcns]); + } + return this._moduleFqcns; } } diff --git a/src/services/docsLibraryUtilsForPAC.ts b/src/services/docsLibraryUtilsForPAC.ts new file mode 100644 index 000000000..ab141b3fd --- /dev/null +++ b/src/services/docsLibraryUtilsForPAC.ts @@ -0,0 +1,203 @@ +/** + * This is a utility file for docs library service that has functions to cater the services for + * playbook adjacent collections. + * + * NOTE: 'PAC' in the filename stands for 'Playbook Adjacent Collections' + */ + +import { Node } from "yaml"; +import { IModuleMetadata } from "../interfaces/module"; +import { + IPluginRoute, + IPluginRoutesByType, + IPluginRoutingByCollection, +} from "../interfaces/pluginRouting"; +import { findDocumentation, findPluginRouting } from "../utils/docsFinder"; +import { + processDocumentationFragments, + processRawDocumentation, +} from "../utils/docsParser"; +import { getDeclaredCollections } from "../utils/yaml"; +import { WorkspaceFolderContext } from "./workspaceManager"; + +const playbookAdjacentPluginRouting: IPluginRoutingByCollection = new Map< + string, + IPluginRoutesByType +>(); + +export async function findModulesUtils( + playbookAdjacentCollectionsPath: string, + searchText: string, + context: WorkspaceFolderContext, + contextPath?: Node[], + documentUri?: string, +): Promise<[IModuleMetadata | undefined, string | undefined]> { + const playbookAdjacentModules = new Map(); + const playbookAdjacentModuleFqcns = new Set(); + const playbookAdjacentDocFragments = new Map(); + + // find documentation for PAC + ( + await findDocumentation(playbookAdjacentCollectionsPath, "collection") + ).forEach((doc) => { + playbookAdjacentModules.set(doc.fqcn, doc); + playbookAdjacentModuleFqcns.add(doc.fqcn); + }); + + ( + await findDocumentation( + playbookAdjacentCollectionsPath, + "collection_doc_fragment", + ) + ).forEach((doc) => { + playbookAdjacentDocFragments.set(doc.fqcn, doc); + }); + + ( + await findPluginRouting(playbookAdjacentCollectionsPath, "collection") + ).forEach((r, collection) => + playbookAdjacentPluginRouting.set(collection, r), + ); + + // add all valid redirect routes as possible FQCNs + for (const [collection, routesByType] of playbookAdjacentPluginRouting) { + for (const [name, route] of routesByType.get("modules") || []) { + if (route.redirect && !route.tombstone) { + playbookAdjacentModuleFqcns.add(`${collection}.${name}`); + } + } + } + + // Now, start finding the module + let hitFqcn; + const candidateFqcns = await getCandidateFqcns( + searchText, + documentUri, + contextPath, + context, + ); + + // check routing + let moduleRoute; + for (const fqcn of candidateFqcns) { + moduleRoute = getModuleRoute(fqcn); + if (moduleRoute) { + hitFqcn = fqcn; + break; // find first + } + } + + // find module + let module; + if (moduleRoute && moduleRoute.redirect) { + module = playbookAdjacentModules.get(moduleRoute.redirect); + } else { + for (const fqcn of candidateFqcns) { + module = playbookAdjacentModules.get(fqcn); + if (module) { + if (!hitFqcn) { + hitFqcn = fqcn; + } + break; // find first + } + } + } + + if (module) { + if (!module.fragments) { + // collect information from documentation fragments + processDocumentationFragments(module, playbookAdjacentDocFragments); + } + if (!module.documentation) { + // translate raw documentation into a typed structure + module.documentation = processRawDocumentation( + module.rawDocumentationFragments, + ); + } + } + + return [module, hitFqcn]; +} + +export async function getModuleFqcnsUtils( + playbookAdjacentCollectionsPath, +): Promise> { + const playbookAdjacentModules = new Map(); + const playbookAdjacentModuleFqcns = new Set(); + const playbookAdjacentDocFragments = new Map(); + + ( + await findDocumentation(playbookAdjacentCollectionsPath, "collection") + ).forEach((doc) => { + playbookAdjacentModules.set(doc.fqcn, doc); + playbookAdjacentModuleFqcns.add(doc.fqcn); + }); + + ( + await findDocumentation( + playbookAdjacentCollectionsPath, + "collection_doc_fragment", + ) + ).forEach((doc) => { + playbookAdjacentDocFragments.set(doc.fqcn, doc); + }); + + ( + await findPluginRouting(playbookAdjacentCollectionsPath, "collection") + ).forEach((r, collection) => + playbookAdjacentPluginRouting.set(collection, r), + ); + + // add all valid redirect routes as possible FQCNs + for (const [collection, routesByType] of playbookAdjacentPluginRouting) { + for (const [name, route] of routesByType.get("modules") || []) { + if (route.redirect && !route.tombstone) { + playbookAdjacentModuleFqcns.add(`${collection}.${name}`); + } + } + } + + return playbookAdjacentModuleFqcns; +} + +async function getCandidateFqcns( + searchText: string, + documentUri: string | undefined, + contextPath: Node[] | undefined, + context: WorkspaceFolderContext, +) { + const candidateFqcns = []; + if (searchText.split(".").length >= 3) { + candidateFqcns.push(searchText); // try searching as-is (FQCN match) + } else { + candidateFqcns.push(`ansible.builtin.${searchText}`); // try searching built-in + + if (documentUri) { + const metadata = await context.documentMetadata.get(documentUri); + if (metadata) { + // try searching declared collections + candidateFqcns.push( + ...metadata.collections.map((c) => `${c}.${searchText}`), + ); + } + } + + if (contextPath) { + candidateFqcns.push( + ...getDeclaredCollections(contextPath).map((c) => `${c}.${searchText}`), + ); + } + } + return candidateFqcns; +} + +function getModuleRoute(fqcn: string): IPluginRoute | undefined { + const fqcn_array = fqcn.split("."); + if (fqcn_array.length === 3) { + const [namespace, collection, name] = fqcn_array; + return playbookAdjacentPluginRouting + .get(`${namespace}.${collection}`) + ?.get("modules") + ?.get(name); + } +} diff --git a/test/fixtures/completion/playbook_adjacent_to_collection.yml b/test/fixtures/completion/playbook_adjacent_to_collection.yml new file mode 100644 index 000000000..12b0b2494 --- /dev/null +++ b/test/fixtures/completion/playbook_adjacent_to_collection.yml @@ -0,0 +1,8 @@ +- name: Test playbook + gather_facts: false + hosts: localhost + tasks: + - name: Playbook adjacent collection + adjacent_org.adjacent_coll.module_1: + opt_1: + - sub_opt_1: choice_2 diff --git a/test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/galaxy.yml b/test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/galaxy.yml new file mode 100644 index 000000000..0868c1fc5 --- /dev/null +++ b/test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/galaxy.yml @@ -0,0 +1,9 @@ +--- +authors: + - "Ansible devtools team" +description: "test adjacent collection" +license_file: LICENSE +name: coll_1 +namespace: org_1 +readme: README.md +version: 1.0.0 diff --git a/test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/plugins/modules/module_1.py b/test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/plugins/modules/module_1.py new file mode 100644 index 000000000..abcbd8c92 --- /dev/null +++ b/test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/plugins/modules/module_1.py @@ -0,0 +1,57 @@ +""" +The module file for org_1.coll_1.module_1 +""" + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = """ +module: module_1 +short_description: Test module +description: + - This is a test module for playbook adjacent collection +version_added: 1.0.0 +author: test +notes: + - This is a dummy module +options: + opt_1: + description: Option 1 + type: list + elements: dict + suboptions: + sub_opt_1: + description: Sub option 1 + type: str + choices: ["choice_1", "choice_2"] + required: true + sub_opt_2: + description: Sub option 2 + type: list + elements: dict + suboptions: + sub_sub_opt_1: + description: Sub sub option 1 + type: str + required: true +""" + +EXAMPLES = """ + - name: Collection module + org_1.coll_1.module_1: + opt_1: + - sub_opt_1: + sub_opt_2: + + - sub_opt_1: + sub_opt_2: + - sub_sub_opt_1: +""" + +RETURN = """ +baz: + description: test return 1 + returned: success +""" diff --git a/test/fixtures/playbook_adjacent_collection/non_adjacent_playbooks/playbook2.yml b/test/fixtures/playbook_adjacent_collection/non_adjacent_playbooks/playbook2.yml new file mode 100644 index 000000000..3a24e2464 --- /dev/null +++ b/test/fixtures/playbook_adjacent_collection/non_adjacent_playbooks/playbook2.yml @@ -0,0 +1,8 @@ +- name: Test playbook + gather_facts: false + hosts: localhost + tasks: + - name: Test non playbook adjacent collection + adjacent_org.adjacent_coll.module_1: + opt_1: + - sub_opt_1: choice_2 diff --git a/test/fixtures/playbook_adjacent_collection/playbook.yml b/test/fixtures/playbook_adjacent_collection/playbook.yml new file mode 100644 index 000000000..cfb8101ea --- /dev/null +++ b/test/fixtures/playbook_adjacent_collection/playbook.yml @@ -0,0 +1,8 @@ +- name: Test playbook + gather_facts: false + hosts: localhost + tasks: + - name: Test playbook adjacent collection + adjacent_org.adjacent_coll.module_1: + opt_1: + - sub_opt_1: choice_2 diff --git a/test/helper.ts b/test/helper.ts index a443ff17f..93b9b5130 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -15,6 +15,10 @@ export const ANSIBLE_COLLECTIONS_FIXTURES_BASE_PATH = path.resolve( "common", "collections", ); +export const ANSIBLE_ADJACENT_COLLECTIONS__PATH = path.resolve( + "playbook_adjacent_collection", + "collections", +); export const ANSIBLE_CONFIG_FILE = path.resolve( FIXTURES_BASE_PATH, "completion", @@ -52,6 +56,11 @@ export async function enableExecutionEnvironmentSettings( dest: ANSIBLE_COLLECTIONS_FIXTURES_BASE_PATH, options: undefined, }, + { + src: ANSIBLE_ADJACENT_COLLECTIONS__PATH, + dest: ANSIBLE_ADJACENT_COLLECTIONS__PATH, + options: undefined, + }, ]; } diff --git a/test/providers/completionProvider.test.ts b/test/providers/completionProvider.test.ts index dec8ae27c..dfaa7e43c 100644 --- a/test/providers/completionProvider.test.ts +++ b/test/providers/completionProvider.test.ts @@ -493,6 +493,102 @@ function testModuleNamesWithoutFQCN( }); } +function testPlaybookAdjacentCollection( + context: WorkspaceFolderContext, + textDoc: TextDocument, +) { + const tests = [ + { + name: "playbook adjacent module (adjacent_org.adjacent_coll.module_1)", + position: { line: 5, character: 19 } as Position, + triggerCharacter: "adjacent_org.", + completion: "adjacent_org.adjacent_coll.module_1", + }, + { + name: "playbook adjacent module option (adjacent_org.adjacent_coll.module_1 -> opt_1)", + position: { line: 6, character: 11 } as Position, + triggerCharacter: "opt", + completion: "opt_1", + }, + { + name: "playbook adjacent module sub option (adjacent_org.adjacent_coll.module_1 -> opt_1 -> sub_opt_1)", + position: { line: 7, character: 19 } as Position, + triggerCharacter: "sub_opt", + completion: "sub_opt_1", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should provide completion for ${name}`, async function () { + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter, + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + expect(filteredCompletion[0].textEdit.newText).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + expect(filteredCompletion[0].item.textEdit.newText).be.equal( + completion, + ); + } + } + }); + }); +} + +function testNonPlaybookAdjacentCollection( + context: WorkspaceFolderContext, + textDoc: TextDocument, +) { + const tests = [ + { + name: "non playbook adjacent module (adjacent_org.adjacent_coll.module_1)", + position: { line: 5, character: 19 } as Position, + triggerCharacter: "adjacent_org.", + completion: "", + }, + { + name: "non playbook adjacent module option (adjacent_org.adjacent_coll.module_1 -> opt_1)", + position: { line: 6, character: 11 } as Position, + triggerCharacter: "opt", + completion: "", + }, + ]; + + tests.forEach(({ name, position, triggerCharacter, completion }) => { + it(`should not provide completion for ${name}`, async function () { + const actualCompletion = await doCompletion(textDoc, position, context); + + const filteredCompletion = smartFilter( + actualCompletion, + triggerCharacter, + ); + + if (!completion) { + expect(filteredCompletion.length).be.equal(0); + } else { + if (!filteredCompletion[0].item) { + expect(filteredCompletion[0].label).be.equal(completion); + expect(filteredCompletion[0].textEdit.newText).be.equal(completion); + } else { + expect(filteredCompletion[0].item.label).to.be.equal(completion); + expect(filteredCompletion[0].item.textEdit.newText).be.equal( + completion, + ); + } + } + }); + }); +} + function testHostValues( context: WorkspaceFolderContext, textDoc: TextDocument, @@ -796,13 +892,13 @@ describe("doCompletion()", () => { }); }); - describe("Completion for task keywords", () => { - fixtureFilePath = "completion/simple_tasks.yml"; - fixtureFileUri = resolveDocUri(fixtureFilePath); - context = workspaceManager.getContext(fixtureFileUri); - textDoc = getDoc(fixtureFilePath); - docSettings = context.documentSettings.get(textDoc.uri); + fixtureFilePath = "completion/simple_tasks.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + describe("Completion for task keywords", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( @@ -936,13 +1032,13 @@ describe("doCompletion()", () => { }); }); - describe("Completion for module name without FQCN", () => { - fixtureFilePath = "completion/tasks_without_fqcn.yml"; - fixtureFileUri = resolveDocUri(fixtureFilePath); - context = workspaceManager.getContext(fixtureFileUri); - textDoc = getDoc(fixtureFilePath); - docSettings = context.documentSettings.get(textDoc.uri); + fixtureFilePath = "completion/tasks_without_fqcn.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + describe("Completion for module name without FQCN", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( @@ -1001,4 +1097,71 @@ describe("doCompletion()", () => { testVarsCompletionInsideJinja(context, textDoc); }); }); + + fixtureFilePath = "playbook_adjacent_collection/playbook.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("Completion for playbook adjacent collection", () => { + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + + testPlaybookAdjacentCollection(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + + testPlaybookAdjacentCollection(context, textDoc); + }); + }); + + fixtureFilePath = + "playbook_adjacent_collection/non_adjacent_playbooks/playbook2.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("Negate completion for non playbook adjacent collection", () => { + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + + testNonPlaybookAdjacentCollection(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + + testNonPlaybookAdjacentCollection(context, textDoc); + }); + }); }); diff --git a/test/providers/hoverProvider.test.ts b/test/providers/hoverProvider.test.ts index f95afd646..bc5d40b13 100644 --- a/test/providers/hoverProvider.test.ts +++ b/test/providers/hoverProvider.test.ts @@ -176,6 +176,76 @@ function testNoHover(context: WorkspaceFolderContext, textDoc: TextDocument) { }); } +function testPlaybookAdjacentCollection( + context: WorkspaceFolderContext, + textDoc: TextDocument, +) { + const tests = [ + { + word: "playbook adjacent module name", + position: { line: 5, character: 19 } as Position, + doc: "This is a test module for playbook adjacent collection", + }, + { + word: "playbook adjacent module option", + position: { line: 6, character: 11 } as Position, + doc: "Option 1", + }, + { + word: "playbook adjacent module sub option", + position: { line: 7, character: 19 } as Position, + doc: "Sub option 1", + }, + ]; + + tests.forEach(({ word, position, doc }) => { + it(`should provide hovering for '${word}'`, async function () { + const actualHover = await doHover( + textDoc, + position, + await context.docsLibrary, + ); + expect(actualHover.contents["value"]).includes(doc); + }); + }); +} + +function testNonPlaybookAdjacentCollection( + context: WorkspaceFolderContext, + textDoc: TextDocument, +) { + const tests = [ + { + word: "non playbook adjacent module name", + position: { line: 5, character: 19 } as Position, + doc: "", + }, + { + word: "non playbook adjacent module option", + position: { line: 6, character: 11 } as Position, + doc: "", + }, + ]; + + tests.forEach(({ word, position, doc }) => { + it(`should not provide hovering for '${word}'`, async function () { + const actualHover = await doHover( + textDoc, + position, + await context.docsLibrary, + ); + + if (!doc) { + expect(actualHover).to.be.null; + } else { + console.log("actual hover -> ", actualHover); + + expect(actualHover.contents["value"]).includes(doc); + } + }); + }); +} + describe("doHover()", () => { const workspaceManager = createTestWorkspaceManager(); let fixtureFilePath = "hover/tasks.yml"; @@ -266,14 +336,14 @@ describe("doHover()", () => { }); }); - describe("Role keywords hover", () => { - fixtureFilePath = "hover/roles.yml"; - fixtureFileUri = resolveDocUri(fixtureFilePath); - context = workspaceManager.getContext(fixtureFileUri); + fixtureFilePath = "hover/roles.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); - textDoc = getDoc(fixtureFilePath); - docSettings = context.documentSettings.get(textDoc.uri); + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + describe("Role keywords hover", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( @@ -300,13 +370,14 @@ describe("doHover()", () => { }); }); - describe("Module name and options hover", () => { - fixtureFilePath = "hover/tasks.yml"; - fixtureFileUri = resolveDocUri(fixtureFilePath); - context = workspaceManager.getContext(fixtureFileUri); + fixtureFilePath = "hover/tasks.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); - textDoc = getDoc(fixtureFilePath); - docSettings = context.documentSettings.get(textDoc.uri); + describe("Module name and options hover", () => { describe("With EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( @@ -359,4 +430,71 @@ describe("doHover()", () => { testNoHover(context, textDoc); }); }); + + fixtureFilePath = "playbook_adjacent_collection/playbook.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("Hover for playbook adjacent collection", () => { + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + + testPlaybookAdjacentCollection(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + + testPlaybookAdjacentCollection(context, textDoc); + }); + }); + + fixtureFilePath = + "playbook_adjacent_collection/non_adjacent_playbooks/playbook2.yml"; + fixtureFileUri = resolveDocUri(fixtureFilePath); + context = workspaceManager.getContext(fixtureFileUri); + textDoc = getDoc(fixtureFilePath); + docSettings = context.documentSettings.get(textDoc.uri); + + describe("Negate hover for non playbook adjacent collection", () => { + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + + testNonPlaybookAdjacentCollection(context, textDoc); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + }); + + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + + testNonPlaybookAdjacentCollection(context, textDoc); + }); + }); }); From 515bbd687962ff43469d2f2e933796942cc065e8 Mon Sep 17 00:00:00 2001 From: ansibot Date: Fri, 14 Jul 2023 15:19:27 +0200 Subject: [PATCH 517/558] Release v1.2.0 (#591) ## v1.2.0 ### Minor Changes - Add support for playbook adjacent collections (#511) @priyamsahoo - Use antsibull-docs-ts to render semantic markup (#563) @felixfontein ### Bugfixes - Fix isPlaybook method (#590) @priyamsahoo - Fix vars completion in task files (#589) @priyamsahoo - Return URI instead of filepath (#560) @ajinkyau Co-authored-by: Ansible DevTools --- docs/changelog.md | 13 +++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/docs/changelog.md b/docs/changelog.md index 1ef70c756..40407f835 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -19,6 +19,19 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v1.2.0 + +### Minor Changes + +- Add support for playbook adjacent collections (#511) @priyamsahoo +- Use antsibull-docs-ts to render semantic markup (#563) @felixfontein + +### Bugfixes + +- Fix isPlaybook method (#590) @priyamsahoo +- Fix vars completion in task files (#589) @priyamsahoo +- Return URI instead of filepath (#560) @ajinkyau + ## v1.1.0 ### Minor Changes diff --git a/package-lock.json b/package-lock.json index b1461217a..693ca5d59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "1.1.0", + "version": "1.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "1.1.0", + "version": "1.2.0", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.20", diff --git a/package.json b/package.json index 516c4a135..919d2ec96 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "1.1.0", + "version": "1.2.0", "contributors": [ { "name": "Tomasz Maciążek", From eb5f31f2d16aa7bbd66be9010a0eea3e323f2736 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 17 Jul 2023 22:44:29 +0530 Subject: [PATCH 518/558] chore: pre-commit autoupdate (#588) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/shellcheck-py/shellcheck-py: v0.9.0.2 → v0.9.0.5](https://github.com/shellcheck-py/shellcheck-py/compare/v0.9.0.2...v0.9.0.5) - [github.com/streetsidesoftware/cspell-cli: v6.22.0 → v6.31.0](https://github.com/streetsidesoftware/cspell-cli/compare/v6.22.0...v6.31.0) - [github.com/pre-commit/mirrors-prettier: v3.0.0-alpha.4 → v3.0.0-alpha.9-for-vscode](https://github.com/pre-commit/mirrors-prettier/compare/v3.0.0-alpha.4...v3.0.0-alpha.9-for-vscode) - [github.com/igorshubovych/markdownlint-cli: v0.33.0 → v0.35.0](https://github.com/igorshubovych/markdownlint-cli/compare/v0.33.0...v0.35.0) - [github.com/pre-commit/mirrors-eslint: v8.33.0 → v8.44.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.33.0...v8.44.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- .pre-commit-config.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1c43392ae..2d4e66a5d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,7 +18,7 @@ exclude: > )$ repos: - repo: https://github.com/shellcheck-py/shellcheck-py - rev: v0.9.0.2 + rev: v0.9.0.5 hooks: - id: shellcheck args: @@ -52,7 +52,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.22.0 + rev: v6.31.0 hooks: - id: cspell name: Spell check with cspell @@ -88,11 +88,11 @@ repos: language_version: python3 - repo: https://github.com/pre-commit/mirrors-prettier # keep it before markdownlint and eslint - rev: "v3.0.0-alpha.4" + rev: "v3.0.0-alpha.9-for-vscode" hooks: - id: prettier - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.33.0 + rev: v0.35.0 hooks: - id: markdownlint exclude: > @@ -101,7 +101,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.33.0 + rev: v8.44.0 hooks: - id: eslint args: From f0f8e8d0c1803a2ac7921699f512a2fb7f76cb1d Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Tue, 25 Jul 2023 18:32:34 +0530 Subject: [PATCH 519/558] Fix `withInterpreter` issue (#594) * directly execute the app if absolute path of the executable is provided * add tests for withInterpreter function * remove unused imports and variables * simplify the value extraction from object --- src/utils/misc.ts | 6 +-- test/utils/withInterpreter.test.ts | 76 ++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 test/utils/withInterpreter.test.ts diff --git a/src/utils/misc.ts b/src/utils/misc.ts index fe43603de..6ba934767 100644 --- a/src/utils/misc.ts +++ b/src/utils/misc.ts @@ -67,10 +67,8 @@ export function withInterpreter( const pathEntry = path.join(virtualEnv, "bin"); if (path.isAbsolute(executable)) { - // if both interpreter path and absolute command path are provided, we can - // bolster the chances of success by letting the interpreter execute the - // command - command = `${interpreterPath} ${executable} ${args}`; + // if the user provided a path to the executable, we directly execute the app. + command = `${executable} ${args}`; } // emulating virtual environment activation script diff --git a/test/utils/withInterpreter.test.ts b/test/utils/withInterpreter.test.ts new file mode 100644 index 000000000..2dbbfa5b5 --- /dev/null +++ b/test/utils/withInterpreter.test.ts @@ -0,0 +1,76 @@ +import { expect } from "chai"; +import { withInterpreter } from "../../src/utils/misc"; + +describe("withInterpreter", () => { + const tests = [ + { + scenario: "when activation script is provided", + executable: "ansible-lint", + args: "playbook.yml", + interpreterPath: "", + activationScript: "/path/to/venv/bin/activate", + expectedCommand: + "bash -c 'source /path/to/venv/bin/activate && ansible-lint playbook.yml'", + expectedEnv: undefined, + }, + { + scenario: "when no activation script is provided", + executable: "ansible-lint", + args: "playbook.yml", + interpreterPath: "", + activationScript: "", + expectedCommand: "ansible-lint playbook.yml", + }, + { + scenario: "when absolute path of executable is provided", + executable: "/absolute/path/to/ansible-lint", + args: "playbook.yml", + interpreterPath: "", + activationScript: "", + expectedCommand: "/absolute/path/to/ansible-lint playbook.yml", + }, + { + scenario: "when absolute path of interpreter is provided", + executable: "/absolute/path/to/ansible-lint", + args: "playbook.yml", + interpreterPath: "/path/to/venv/bin/python", + activationScript: "", + expectedCommand: "/absolute/path/to/ansible-lint playbook.yml", + expectedEnv: { + VIRTUAL_ENV: "/path/to/venv", + PATH: "/path/to/venv/bin", + }, + }, + ]; + + tests.forEach( + ({ + scenario, + executable, + args, + interpreterPath, + activationScript, + expectedCommand, + expectedEnv, + }) => { + it(`should provide command ${scenario}`, () => { + const actualCommand = withInterpreter( + executable, + args, + interpreterPath, + activationScript, + ); + expect(actualCommand[0]).to.equal(expectedCommand); + + if (expectedEnv) { + const expectedKeys = Object.keys(expectedEnv); + + expectedKeys.forEach((key) => { + expect(actualCommand[1]).to.haveOwnProperty(key); + expect(actualCommand[1][key]).to.include(expectedEnv[key]); + }); + } + }); + }, + ); +}); From 256c08e76b24b89d334adc30f43e70d8ea283794 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Jul 2023 15:55:53 +0530 Subject: [PATCH 520/558] Bump word-wrap from 1.2.3 to 1.2.4 (#593) Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4. - [Release notes](https://github.com/jonschlinkert/word-wrap/releases) - [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4) --- updated-dependencies: - dependency-name: word-wrap dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 693ca5d59..669763951 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7054,9 +7054,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -12445,9 +12445,9 @@ } }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "dev": true }, "wordwrap": { From e0a17f5a1f0e27c62b2f417a0e6a61f9cd8fba92 Mon Sep 17 00:00:00 2001 From: ansibot Date: Wed, 26 Jul 2023 13:24:29 +0200 Subject: [PATCH 521/558] Release v1.2.1 (#595) ## v1.2.1 ### Bugfixes - Fix `withInterpreter` issue (#594) @priyamsahoo Co-authored-by: Ansible DevTools --- docs/changelog.md | 6 ++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/changelog.md b/docs/changelog.md index 40407f835..7af6c2591 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -19,6 +19,12 @@ Do *NOT* manually add changelog entries here! This file is updated by +## v1.2.1 + +### Bugfixes + +- Fix `withInterpreter` issue (#594) @priyamsahoo + ## v1.2.0 ### Minor Changes diff --git a/package-lock.json b/package-lock.json index 669763951..f8721880d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ansible/ansible-language-server", - "version": "1.2.0", + "version": "1.2.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ansible/ansible-language-server", - "version": "1.2.0", + "version": "1.2.1", "license": "MIT", "dependencies": { "@flatten-js/interval-tree": "^1.0.20", diff --git a/package.json b/package.json index 919d2ec96..15cee430b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "displayName": "Ansible", "description": "Ansible language server", "license": "MIT", - "version": "1.2.0", + "version": "1.2.1", "contributors": [ { "name": "Tomasz Maciążek", From a59e3b01821bbe7b4bd4a5fe6c5211c061a6fd5a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 15 Sep 2023 10:25:11 +0100 Subject: [PATCH 522/558] chore: pre-commit autoupdate (#597) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: pre-commit autoupdate updates: - [github.com/streetsidesoftware/cspell-cli: v6.31.0 → v7.3.0](https://github.com/streetsidesoftware/cspell-cli/compare/v6.31.0...v7.3.0) - [github.com/pre-commit/mirrors-prettier: v3.0.0-alpha.9-for-vscode → v3.0.3](https://github.com/pre-commit/mirrors-prettier/compare/v3.0.0-alpha.9-for-vscode...v3.0.3) - [github.com/igorshubovych/markdownlint-cli: v0.35.0 → v0.36.0](https://github.com/igorshubovych/markdownlint-cli/compare/v0.35.0...v0.36.0) - [github.com/pre-commit/mirrors-eslint: v8.44.0 → v8.48.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.44.0...v8.48.0) * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 8 ++++---- src/providers/validationProvider.ts | 10 ++++------ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2d4e66a5d..5dfda48af 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -52,7 +52,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v6.31.0 + rev: v7.3.0 hooks: - id: cspell name: Spell check with cspell @@ -88,11 +88,11 @@ repos: language_version: python3 - repo: https://github.com/pre-commit/mirrors-prettier # keep it before markdownlint and eslint - rev: "v3.0.0-alpha.9-for-vscode" + rev: "v3.0.3" hooks: - id: prettier - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.35.0 + rev: v0.36.0 hooks: - id: markdownlint exclude: > @@ -101,7 +101,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.44.0 + rev: v8.48.0 hooks: - id: eslint args: diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts index 54531c525..263d5bcbb 100644 --- a/src/providers/validationProvider.ts +++ b/src/providers/validationProvider.ts @@ -52,9 +52,8 @@ export async function doValidate( const lintExecutable = settings.executionEnvironment.enabled ? "ansible-lint" : settings.validation.lint.path; - const lintAvailability = await commandRunner.getExecutablePath( - lintExecutable, - ); + const lintAvailability = + await commandRunner.getExecutablePath(lintExecutable); console.debug("Path for lint: ", lintAvailability); if (lintAvailability) { @@ -73,9 +72,8 @@ export async function doValidate( if (isPlaybook(textDocument)) { console.debug("playbook file"); - diagnosticsByFile = await context.ansiblePlaybook.doValidate( - textDocument, - ); + diagnosticsByFile = + await context.ansiblePlaybook.doValidate(textDocument); } else { console.debug("non-playbook file"); diagnosticsByFile = new Map(); From a2f98f28810740fc85e937a88b2e3d531bfb421c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Sep 2023 10:25:38 +0100 Subject: [PATCH 523/558] Bump actions/checkout from 3 to 4 (#599) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/task.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index f1d9e82f7..535f8cbd1 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: # needed by "gh pr create" fetch-depth: 0 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index fef740041..3fd286550 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # Setup .npmrc file to publish to npm - uses: actions/setup-node@v3 with: diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 057d4adc6..772dac905 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -74,7 +74,7 @@ jobs: git config --global core.eol lf shell: bash # <-- keep it here to avoid using default shell - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # https://github.com/marketplace/actions/setup-wsl - name: Activate WSL From 0ef0b4ab15540f450679ae09e18035c1577612a6 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Mon, 23 Oct 2023 12:30:27 +0530 Subject: [PATCH 524/558] Remove 'system_packages' option from the config (#605) * remove 'system_packages' option from the config * chore: auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .readthedocs.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 7c8672ae2..1a7457244 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -31,4 +31,3 @@ python: install: # We also defined PIP_CONSTRAINTS=.config/requirements.txt on readthedocs config - requirements: .config/requirements.in - system_packages: false From 00fcca6759e11653e7fe474ae149fc46b2d309a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 18:28:38 +0530 Subject: [PATCH 525/558] Bump @babel/traverse from 7.18.5 to 7.23.2 (#603) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.18.5 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- package-lock.json | 446 +++++++++++++++++++++++++++++++--------------- 1 file changed, 298 insertions(+), 148 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8721880d..43afdea38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -66,17 +66,89 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.18.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", @@ -126,13 +198,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -140,12 +213,12 @@ } }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.0", + "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" }, @@ -181,34 +254,34 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -258,21 +331,30 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" @@ -302,13 +384,13 @@ } }, "node_modules/@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -387,9 +469,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -399,33 +481,33 @@ } }, "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", - "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -443,12 +525,13 @@ } }, "node_modules/@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -709,9 +792,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, "engines": { "node": ">=6.0.0" @@ -727,19 +810,19 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@nodelib/fs.scandir": { @@ -7244,12 +7327,71 @@ } }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/compat-data": { @@ -7290,23 +7432,24 @@ } }, "@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "requires": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { "@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.0", + "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" } @@ -7334,28 +7477,28 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true }, "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-imports": { @@ -7393,18 +7536,24 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/helper-validator-option": { @@ -7425,13 +7574,13 @@ } }, "@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -7494,36 +7643,36 @@ } }, "@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", - "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -7537,12 +7686,13 @@ } }, "@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -7740,9 +7890,9 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true }, "@jridgewell/set-array": { @@ -7752,19 +7902,19 @@ "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@nodelib/fs.scandir": { From fad31c178608724652199e5ef3a5782effe61fcc Mon Sep 17 00:00:00 2001 From: Joseph Britton <85815005+JoeeBritton@users.noreply.github.com> Date: Mon, 23 Oct 2023 07:54:20 -0700 Subject: [PATCH 526/558] Fix stdio incompatibility with some third-party clients (#604) * Stdio patch Do not log validation status on stdout, use connection logs instead. See #540, #541 * Fix: use optional chaining for connection as it may not exist for purposes of testing. --------- Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- src/providers/validationProvider.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/providers/validationProvider.ts b/src/providers/validationProvider.ts index 263d5bcbb..09113cb3e 100644 --- a/src/providers/validationProvider.ts +++ b/src/providers/validationProvider.ts @@ -36,7 +36,7 @@ export async function doValidate( const settings = await context.documentSettings.get(textDocument.uri); if (!settings.validation.enabled) { - console.log("Validation disabled"); + connection?.console.log("Validation disabled"); // this is done to remove the cache as well const blankDiagnostics = new Map(); @@ -54,10 +54,10 @@ export async function doValidate( : settings.validation.lint.path; const lintAvailability = await commandRunner.getExecutablePath(lintExecutable); - console.debug("Path for lint: ", lintAvailability); + connection?.console.log(`Path for lint: ${lintAvailability}`); if (lintAvailability) { - console.debug("Validating using ansible-lint"); + connection?.console.log("Validating using ansible-lint"); diagnosticsByFile = await context.ansibleLint.doValidate(textDocument); } else { connection?.window.showErrorMessage( @@ -68,14 +68,14 @@ export async function doValidate( // validate using ansible-playbook --syntax-check else { - console.debug("Validating using ansible syntax-check"); + connection?.console.log("Validating using ansible syntax-check"); if (isPlaybook(textDocument)) { - console.debug("playbook file"); + connection?.console.log("playbook file"); diagnosticsByFile = await context.ansiblePlaybook.doValidate(textDocument); } else { - console.debug("non-playbook file"); + connection?.console.log("non-playbook file"); diagnosticsByFile = new Map(); } } From cfb24f5f75941124114acd30ec4db9327607430e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 31 Oct 2023 11:08:20 +0000 Subject: [PATCH 527/558] chore: pre-commit autoupdate (#601) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/shellcheck-py/shellcheck-py: v0.9.0.5 → v0.9.0.6](https://github.com/shellcheck-py/shellcheck-py/compare/v0.9.0.5...v0.9.0.6) - [github.com/streetsidesoftware/cspell-cli: v7.3.0 → v7.3.1](https://github.com/streetsidesoftware/cspell-cli/compare/v7.3.0...v7.3.1) - [github.com/igorshubovych/markdownlint-cli: v0.36.0 → v0.37.0](https://github.com/igorshubovych/markdownlint-cli/compare/v0.36.0...v0.37.0) - [github.com/pre-commit/mirrors-eslint: v8.48.0 → v8.50.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.48.0...v8.50.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- .pre-commit-config.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5dfda48af..933d83ee0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,7 +18,7 @@ exclude: > )$ repos: - repo: https://github.com/shellcheck-py/shellcheck-py - rev: v0.9.0.5 + rev: v0.9.0.6 hooks: - id: shellcheck args: @@ -52,7 +52,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v7.3.0 + rev: v7.3.1 hooks: - id: cspell name: Spell check with cspell @@ -92,7 +92,7 @@ repos: hooks: - id: prettier - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.36.0 + rev: v0.37.0 hooks: - id: markdownlint exclude: > @@ -101,7 +101,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.48.0 + rev: v8.50.0 hooks: - id: eslint args: From d925e5504b142dfbf011dbd8d339e909f868639e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Nov 2023 13:16:22 +0000 Subject: [PATCH 528/558] Bump actions/setup-node from 3 to 4 (#606) Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3 to 4. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/setup-node dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/task.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 535f8cbd1..42b9f7aa4 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -19,7 +19,7 @@ jobs: # needed by "gh pr create" fetch-depth: 0 # Setup .npmrc file to publish to npm - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 16.x registry-url: 'https://registry.npmjs.org' diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3fd286550..ef1b45f27 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v4 # Setup .npmrc file to publish to npm - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 16.x registry-url: 'https://registry.npmjs.org' diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 772dac905..18cbb2819 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -159,7 +159,7 @@ jobs: # as Windows executables are exposed inside WSL at top of PATH, we # would end with broken npm script in PATH on wsl. if: "!contains(matrix.shell, 'wsl')" - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version-file: '.nvmrc' From 90258f667c09f2a7a69f0746ebd8b18c7158e8fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 12:49:32 +0000 Subject: [PATCH 529/558] Bump Vampire/setup-wsl from 2.0.1 to 2.0.2 (#608) Bumps [Vampire/setup-wsl](https://github.com/vampire/setup-wsl) from 2.0.1 to 2.0.2. - [Release notes](https://github.com/vampire/setup-wsl/releases) - [Commits](https://github.com/vampire/setup-wsl/compare/v2.0.1...v2.0.2) --- updated-dependencies: - dependency-name: Vampire/setup-wsl dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/task.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 18cbb2819..cd981e33b 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -79,7 +79,7 @@ jobs: # https://github.com/marketplace/actions/setup-wsl - name: Activate WSL if: "contains(matrix.shell, 'wsl')" - uses: Vampire/setup-wsl@v2.0.1 + uses: Vampire/setup-wsl@v2.0.2 with: set-as-default: 'true' # we want to load user profile From 6102639aa7bb861aa5a4c496646b6f975faf64fc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 12:51:34 +0000 Subject: [PATCH 530/558] chore: pre-commit autoupdate (#607) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/streetsidesoftware/cspell-cli: v7.3.1 → v7.3.2](https://github.com/streetsidesoftware/cspell-cli/compare/v7.3.1...v7.3.2) - [github.com/pre-commit/pre-commit-hooks.git: v4.4.0 → v4.5.0](https://github.com/pre-commit/pre-commit-hooks.git/compare/v4.4.0...v4.5.0) - [github.com/pre-commit/mirrors-eslint: v8.50.0 → v8.53.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.50.0...v8.53.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 933d83ee0..7e7cd8e42 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -52,12 +52,12 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v7.3.1 + rev: v7.3.2 hooks: - id: cspell name: Spell check with cspell - repo: https://github.com/pre-commit/pre-commit-hooks.git - rev: v4.4.0 + rev: v4.5.0 hooks: - id: end-of-file-fixer exclude: > @@ -101,7 +101,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.50.0 + rev: v8.53.0 hooks: - id: eslint args: From 75a39bb16eb3b8767d7d719d61fb13b2c86f6215 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 18:01:18 +0530 Subject: [PATCH 531/558] chore: pre-commit autoupdate (#610) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: pre-commit autoupdate updates: - [github.com/streetsidesoftware/cspell-cli: v7.3.2 → v8.0.0](https://github.com/streetsidesoftware/cspell-cli/compare/v7.3.2...v8.0.0) - [github.com/pre-commit/mirrors-prettier: v3.0.3 → v4.0.0-alpha.3](https://github.com/pre-commit/mirrors-prettier/compare/v3.0.3...v4.0.0-alpha.3) - [github.com/pre-commit/mirrors-eslint: v8.53.0 → v8.55.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.53.0...v8.55.0) * Add prettier dependency * Update macos GHA version * Upgrade creator EE image version * Change MacOS to version 12 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Cristiano Nicolai <570894+cristianonicolai@users.noreply.github.com> --- .config/Containerfile | 2 +- .github/workflows/task.yml | 2 +- .pre-commit-config.yaml | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.config/Containerfile b/.config/Containerfile index e519fa7ad..9ad7bebdd 100644 --- a/.config/Containerfile +++ b/.config/Containerfile @@ -1,4 +1,4 @@ -FROM quay.io/ansible/creator-ee:v0.18.0 as DEFAULT_EE +FROM quay.io/ansible/creator-ee:v0.21.0 as DEFAULT_EE # This file is updated by dependabot and used to determine not only which # version of creator-ee we are supposed to use for testing execution # environments but also to dynamically retrieve the same set of constraints diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index cd981e33b..c8af70436 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -60,7 +60,7 @@ jobs: os: windows-2022 shell: "wsl-bash {0}" - name: test-without-ee (macos) - os: macos-11 + os: macos-12 # runner does not support running container task-name: test-without-ee skip_docker: "1" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7e7cd8e42..51fbe80e7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -52,7 +52,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v7.3.2 + rev: v8.0.0 hooks: - id: cspell name: Spell check with cspell @@ -88,9 +88,11 @@ repos: language_version: python3 - repo: https://github.com/pre-commit/mirrors-prettier # keep it before markdownlint and eslint - rev: "v3.0.3" + rev: "v4.0.0-alpha.3" hooks: - id: prettier + additional_dependencies: + - prettier - repo: https://github.com/igorshubovych/markdownlint-cli rev: v0.37.0 hooks: @@ -101,7 +103,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.53.0 + rev: v8.55.0 hooks: - id: eslint args: From 141e3ac6e2578b8ccbb2ca0bcf0b3f631af4aeb0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 16:38:58 +1000 Subject: [PATCH 532/558] Bump actions/upload-artifact from 3 to 4 (#613) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/task.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index c8af70436..c8476e3e6 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -190,7 +190,7 @@ jobs: - name: Upload test logs if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: logs-${{ matrix.os }}-${{ matrix.task-name }}.zip path: | From 88fae448cba05fa440beb9b0d6a685ac785d6070 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 15:37:24 +1000 Subject: [PATCH 533/558] chore: pre-commit autoupdate (#614) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/streetsidesoftware/cspell-cli: v8.0.0 → v8.2.1](https://github.com/streetsidesoftware/cspell-cli/compare/v8.0.0...v8.2.1) - [github.com/pre-commit/mirrors-prettier: v4.0.0-alpha.3 → v4.0.0-alpha.8](https://github.com/pre-commit/mirrors-prettier/compare/v4.0.0-alpha.3...v4.0.0-alpha.8) - [github.com/igorshubovych/markdownlint-cli: v0.37.0 → v0.38.0](https://github.com/igorshubovych/markdownlint-cli/compare/v0.37.0...v0.38.0) - [github.com/pre-commit/mirrors-eslint: v8.55.0 → v9.0.0-alpha.0](https://github.com/pre-commit/mirrors-eslint/compare/v8.55.0...v9.0.0-alpha.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 51fbe80e7..b1b524e57 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -52,7 +52,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v8.0.0 + rev: v8.2.1 hooks: - id: cspell name: Spell check with cspell @@ -88,13 +88,13 @@ repos: language_version: python3 - repo: https://github.com/pre-commit/mirrors-prettier # keep it before markdownlint and eslint - rev: "v4.0.0-alpha.3" + rev: "v4.0.0-alpha.8" hooks: - id: prettier additional_dependencies: - prettier - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.37.0 + rev: v0.38.0 hooks: - id: markdownlint exclude: > @@ -103,7 +103,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.55.0 + rev: v9.0.0-alpha.0 hooks: - id: eslint args: From 430cec52a597ed91699518183542faa892bbf5a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Jan 2024 12:27:14 +0000 Subject: [PATCH 534/558] Bump actions/cache from 3 to 4 (#616) Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/task.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index c8476e3e6..a66afdbfc 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -108,7 +108,7 @@ jobs: - name: Enable caching if: "!contains(matrix.shell, 'wsl')" - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ~/.cache/npm @@ -124,7 +124,7 @@ jobs: ) }} - name: Enable caching for podman-machine - uses: actions/cache@v3 + uses: actions/cache@v4 if: "contains(matrix.os, 'macos')" with: path: | From be91984b95b0bcf717fda0ea5bdd2a59223e6dc1 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sun, 21 Jan 2024 13:24:59 +0000 Subject: [PATCH 535/558] Make container definition compatible with dependabot (#617) * Improve test-setup.sh for macos - discover broken virtualens (after python upgrade) - implement workaround for building ansible-pylibssh Related: https://github.com/ansible/pylibssh/issues/207 * Make dockerfile dependabot compatible See https://github.com/dependabot/dependabot-core/issues/6067 --- .config/{Containerfile => Dockerfile} | 3 +++ .config/dictionary.txt | 4 +++- .github/workflows/task.yml | 4 ++-- .pre-commit-config.yaml | 6 ++++-- tools/get-image-version | 2 +- tools/test-setup.sh | 20 ++++++++++++++++++-- 6 files changed, 31 insertions(+), 8 deletions(-) rename .config/{Containerfile => Dockerfile} (74%) diff --git a/.config/Containerfile b/.config/Dockerfile similarity index 74% rename from .config/Containerfile rename to .config/Dockerfile index 9ad7bebdd..7483dc434 100644 --- a/.config/Containerfile +++ b/.config/Dockerfile @@ -3,3 +3,6 @@ FROM quay.io/ansible/creator-ee:v0.21.0 as DEFAULT_EE # version of creator-ee we are supposed to use for testing execution # environments but also to dynamically retrieve the same set of constraints # for testing outside execution environments. +# +# Do not rename this file to Containerfile due to +# https://github.com/dependabot/dependabot-core/issues/6067 diff --git a/.config/dictionary.txt b/.config/dictionary.txt index 6fafed4ad..e93794394 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -1,4 +1,5 @@ Ansible +CFLAGS Containerfile Dpkg FQCN @@ -58,8 +59,10 @@ lineinfile linkcheck linkify loglevel +lssh lxml markdownlint +mkdocs monospace mycollection mymodule @@ -118,7 +121,6 @@ wordwrap workdir xvfb yammlint -mkdocs # names and usernames: Ganesh diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index a66afdbfc..778b73693 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -120,7 +120,7 @@ jobs: ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles( 'package.json', 'package-lock.json', - '.config/Containerfile' + '.config/Dockerfile' ) }} - name: Enable caching for podman-machine @@ -130,7 +130,7 @@ jobs: path: | ~/.local/share/containers ~/.config/containers - key: ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles('package.json', 'yarn.lock', '.config/Containerfile', '**/Taskfile.yml', 'tools/*.*') }} + key: ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles('package.json', 'yarn.lock', '.config/Dockerfile', '**/Taskfile.yml', 'tools/*.*') }} - name: Install Task if: "!contains(matrix.shell, 'wsl')" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b1b524e57..d89bdf2e5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -23,6 +23,8 @@ repos: - id: shellcheck args: - --color=always + - -e + - SC1091 - repo: local hooks: - id: npm-ci @@ -52,7 +54,7 @@ repos: files: "codecov.yml" pass_filenames: false - repo: https://github.com/streetsidesoftware/cspell-cli - rev: v8.2.1 + rev: v8.3.0 hooks: - id: cspell name: Spell check with cspell @@ -103,7 +105,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v9.0.0-alpha.0 + rev: v9.0.0-alpha.1 hooks: - id: eslint args: diff --git a/tools/get-image-version b/tools/get-image-version index 8a754d882..7f60f01b9 100755 --- a/tools/get-image-version +++ b/tools/get-image-version @@ -1,7 +1,7 @@ #!/usr/bin/env python3 version = "latest" # read image version from dockerfile -with open(".config/Containerfile", "r") as f: +with open(".config/Dockerfile", "r") as f: for line in f: if line.startswith("FROM"): version = line.split()[1].split()[0].split(":")[1] diff --git a/tools/test-setup.sh b/tools/test-setup.sh index c40f464bf..afbe35c70 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -173,16 +173,32 @@ if [[ ! -d "${VIRTUAL_ENV}" ]]; then log notice "Creating virtualenv ..." python3 -m venv "${VIRTUAL_ENV}" fi -# shellcheck disable=SC1091 +# shellcheck source=/dev/null . "${VIRTUAL_ENV}/bin/activate" +if [[ "$(which python3)" != ${VIRTUAL_ENV}/bin/python3 ]]; then + log warning "Virtualenv broken, trying to recreate it ..." + python3 -m venv --clear "${VIRTUAL_ENV}" + . "${VIRTUAL_ENV}/bin/activate" + if [[ "$(which python3)" != ${VIRTUAL_ENV}/bin/python3 ]]; then + log error "Virtualenv still broken." + exit 99 + fi +fi log notice "Upgrading pip ..." + python3 -m pip install -q -U pip EE_VERSION=$(./tools/get-image-version) if [[ $(uname || true) != MINGW* ]]; then # if we are not on pure Windows URL="https://raw.githubusercontent.com/ansible/creator-ee/${EE_VERSION}/_build/requirements.txt" - log notice "Installing dependencies from .config/requirements.in and ${URL} loaded from .config/Containerfile ..." + log notice "Installing dependencies from .config/requirements.in and ${URL} loaded from .config/Dockerfile ..." + + if [[ "${OS:-}" == "darwin" ]]; then + log notice "MacOS detected, altering CFLAGS to avoid potential build failure due to https://github.com/ansible/pylibssh/issues/207 ..." + CFLAGS="-I $(brew --prefix)/include -I ext -L $(brew --prefix)/lib -lssh" + export CFLAGS + fi python3 -m pip install -r "${URL}" -r .config/requirements.in fi From 2760e7a653e4290634d121f3f62c6ac1d648fa93 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sun, 21 Jan 2024 16:53:02 +0000 Subject: [PATCH 536/558] Change testing python to 3.10 (#619) --- .github/workflows/task.yml | 6 ++++++ tools/test-setup.sh | 15 ++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 778b73693..f89d3305e 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -106,6 +106,12 @@ jobs: qemu-user-static xvfb + - name: Set up Python ${{ matrix.python_version || '3.10' }} + if: "!contains(matrix.shell, 'wsl')" + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python_version || '3.10' }} + - name: Enable caching if: "!contains(matrix.shell, 'wsl')" uses: actions/cache@v4 diff --git a/tools/test-setup.sh b/tools/test-setup.sh index afbe35c70..d34a399e7 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -111,6 +111,7 @@ fi # Fail-fast if run on Windows or under WSL1/2 on /mnt/c because it is so slow # that we do not support it at all. WSL use is ok, but not on mounts. +WSL=0 if [[ "${OS:-}" == "windows" ]]; then log error "You cannot use Windows build tools for development, try WSL." exit 1 @@ -120,6 +121,7 @@ if grep -qi microsoft /proc/version >/dev/null 2>&1; then if [[ "$(pwd -P || true)" == /mnt/* ]]; then log warning "Under WSL, you must avoid running from mounts (/mnt/*) due to critical performance issues." fi + WSL=1 fi # User specific environment @@ -191,15 +193,22 @@ python3 -m pip install -q -U pip EE_VERSION=$(./tools/get-image-version) if [[ $(uname || true) != MINGW* ]]; then # if we are not on pure Windows - URL="https://raw.githubusercontent.com/ansible/creator-ee/${EE_VERSION}/_build/requirements.txt" - log notice "Installing dependencies from .config/requirements.in and ${URL} loaded from .config/Dockerfile ..." + log notice "Installing dependencies from .config/requirements.in loaded from .config/Dockerfile ..." if [[ "${OS:-}" == "darwin" ]]; then log notice "MacOS detected, altering CFLAGS to avoid potential build failure due to https://github.com/ansible/pylibssh/issues/207 ..." CFLAGS="-I $(brew --prefix)/include -I ext -L $(brew --prefix)/lib -lssh" export CFLAGS fi - python3 -m pip install -r "${URL}" -r .config/requirements.in + if [[ "${WSL}" == "0" ]]; then + log notice "Ensure python version is recent enough for using latest ansible-core" + python3 -c "import sys; print(sys.version_info[:2]); sys.exit(not sys.version_info[:2]>=(3, 10))" + python3 -m pip install -r "https://raw.githubusercontent.com/ansible/creator-ee/${EE_VERSION}/_build/requirements.txt" -r .config/requirements.in + else + # Under WSL we do not use our constraints because github runners has ubuntu 20.04 with python3.9 which is too old + python3 -c "import sys; print(sys.version_info[:2]); sys.exit(not sys.version_info[:2]>=(3, 9))" + python3 -m pip install -r .config/requirements.in + fi fi # GHA failsafe only: ensure ansible and ansible-lint cannot be found anywhere From 8a81b9de2759093b667ff737c02182c347de1304 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Tue, 23 Jan 2024 16:36:57 +0000 Subject: [PATCH 537/558] Build updates (#622) - update dependencies - improve build scripts --- Taskfile.yml | 4 + package-lock.json | 4087 +++++++++++++++++++++++++------------------ package.json | 48 +- tools/test-setup.sh | 20 +- 4 files changed, 2417 insertions(+), 1742 deletions(-) diff --git a/Taskfile.yml b/Taskfile.yml index fdce113f1..1694fda03 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -5,6 +5,8 @@ env: &env # basically the same thing from .envrc file: VIRTUAL_ENV: # "{{.VIRTUAL_ENV}}" sh: echo "${VIRTUAL_ENV:-out/venvs/${HOSTNAME:-localhost}}" + # Avoid undesired extra hints from docker when pulling images + DOCKER_CLI_HINTS: "false" vars: HOSTNAME: sh: echo ${HOSTNAME:-localhost} @@ -57,6 +59,7 @@ tasks: - ./tools/test-setup.sh sources: - package.json + - package-lock.json - .config/requirements.* - setup.cfg - tools/test-setup.sh @@ -81,6 +84,7 @@ tasks: deps: - setup cmds: + - npm install -g npm@latest - $VIRTUAL_ENV/bin/python -m pre_commit autoupdate # bumps some developments dependencies - npx ncu -u --dep dev diff --git a/package-lock.json b/package-lock.json index 43afdea38..7d63f085a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,49 +9,58 @@ "version": "1.2.1", "license": "MIT", "dependencies": { - "@flatten-js/interval-tree": "^1.0.20", + "@flatten-js/interval-tree": "^1.1.2", "antsibull-docs": "^1.0.0", "glob": "^9.3.2", - "ini": "^4.0.0", + "ini": "^4.1.1", "lodash": "^4.17.21", - "uuid": "^9.0.0", + "uuid": "^9.0.1", "vscode-languageserver": "^8.1.0", - "vscode-languageserver-textdocument": "^1.0.8", - "vscode-uri": "^3.0.7", - "yaml": "^2.2.2" + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8", + "yaml": "^2.3.4" }, "bin": { "ansible-language-server": "bin/ansible-language-server" }, "devDependencies": { - "@types/chai": "^4.3.4", + "@types/chai": "^4.3.11", "@types/glob": "^8.1.0", - "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.191", - "@types/mocha": "^10.0.1", - "@types/node": "^18.15.9", - "@types/uuid": "^9.0.1", + "@types/ini": "^4.1.0", + "@types/lodash": "^4.14.202", + "@types/mocha": "^10.0.6", + "@types/node": "^20.11.5", + "@types/uuid": "^9.0.7", "@types/vscode": "^1.76.0", - "@typescript-eslint/eslint-plugin": "^5.56.0", - "@typescript-eslint/parser": "^5.56.0", - "chai": "^4.3.7", - "eslint": "^8.36.0", - "eslint-config-prettier": "^8.8.0", - "fuse.js": "^6.6.2", - "handlebars": "^4.7.7", + "@typescript-eslint/eslint-plugin": "^6.19.1", + "@typescript-eslint/parser": "^6.19.1", + "chai": "^4.4.1", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "fuse.js": "^7.0.0", + "handlebars": "^4.7.8", "mocha": "^10.2.0", - "npm-check-updates": "^16.8.0", + "npm-check-updates": "^16.14.12", "nyc": "^15.1.0", - "prettier": "^2.8.7", - "rimraf": "^4.4.1", - "ts-node": "^10.9.1", - "typescript": "^5.0.2" + "prettier": "^3.2.4", + "rimraf": "^5.0.5", + "ts-node": "^10.9.2", + "typescript": "^5.3.3" }, "engines": { "node": ">=14.0", "npm": ">=7.11.2" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -189,9 +198,9 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -245,9 +254,9 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -586,23 +595,23 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.1.tgz", - "integrity": "sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", - "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.0", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -618,18 +627,18 @@ } }, "node_modules/@eslint/js": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", - "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@flatten-js/interval-tree": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.20.tgz", - "integrity": "sha512-ZmJAa7pDel/FiSN3gXYnrK51Od+maJ+54hJe2PZlWGFWLfQv1YP9DdjNofpg0+HS956oItjse2eWkIMdTZUhRw==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.1.2.tgz", + "integrity": "sha512-OwLoV9E/XM6b7bes2rSFnGNjyRy7vcoIHFTnmBR2WAaZTf0Fe4EX4GdA65vU1KgFAasti7iRSg2dZfYd1Zt00Q==" }, "node_modules/@gar/promisify": { "version": "1.1.3", @@ -638,13 +647,13 @@ "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -665,11 +674,107 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -873,9 +978,9 @@ } }, "node_modules/@npmcli/git": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.4.tgz", - "integrity": "sha512-5yZghx+u5M47LghaybLCkdSyFzV/w4OuH12d96HO389Ik9CDsLaDZJVynSGGVJOLn6gy/k7Dz5XYcplM3uxXRg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", "dev": true, "dependencies": { "@npmcli/promise-spawn": "^6.0.0", @@ -892,9 +997,9 @@ } }, "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", - "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { "isexe": "^2.0.0" @@ -993,9 +1098,9 @@ } }, "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", - "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { "isexe": "^2.0.0" @@ -1008,9 +1113,9 @@ } }, "node_modules/@npmcli/run-script": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.0.tgz", - "integrity": "sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^3.0.0", @@ -1024,9 +1129,9 @@ } }, "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", - "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { "isexe": "^2.0.0" @@ -1038,6 +1143,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@pnpm/network.ca-file": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.1.tgz", @@ -1063,11 +1178,50 @@ "node": ">=12" } }, + "node_modules/@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -1129,13 +1283,23 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@tufjs/models": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.1.tgz", - "integrity": "sha512-AY0VoG/AXdlSOocuREfPoEW4SNhOPp/7fw6mpAxfVIny1uZ+0fEtMoCi7NhELSlqQIRLMu7RgfKhkxT+AJ+EXg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", "dev": true, "dependencies": { - "minimatch": "^7.4.2" + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -1151,24 +1315,24 @@ } }, "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", - "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz", + "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==", "dev": true }, "node_modules/@types/glob": { @@ -1188,21 +1352,21 @@ "dev": true }, "node_modules/@types/ini": { - "version": "1.3.31", - "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.31.tgz", - "integrity": "sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@types/ini/-/ini-4.1.0.tgz", + "integrity": "sha512-mTehMtc+xtnWBBvqizcqYCktKDBH2WChvx1GU3Sfe4PysFDXiNe+1YwtpVX1MDtCa4NQrSPw2+3HmvXHY3gt1w==", "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.191", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", - "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", "dev": true }, "node_modules/@types/minimatch": { @@ -1212,27 +1376,30 @@ "dev": true }, "node_modules/@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", + "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", "dev": true }, "node_modules/@types/node": { - "version": "18.15.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.9.tgz", - "integrity": "sha512-dUxhiNzBLr6IqlZXz6e/rN2YQXlFgOei/Dxy+e3cyXTJ4txSUbGT2/fmnD6zd/75jDMeW5bDee+YXxlFKHoV0A==", - "dev": true + "version": "20.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", + "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", + "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==", "dev": true }, "node_modules/@types/vscode": { @@ -1242,32 +1409,33 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz", - "integrity": "sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.1.tgz", + "integrity": "sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/type-utils": "5.56.0", - "@typescript-eslint/utils": "5.56.0", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/type-utils": "6.19.1", + "@typescript-eslint/utils": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1276,25 +1444,26 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz", - "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.1.tgz", + "integrity": "sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/typescript-estree": "5.56.0", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/typescript-estree": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1303,16 +1472,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", - "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz", + "integrity": "sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/visitor-keys": "5.56.0" + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1320,25 +1489,25 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz", - "integrity": "sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.1.tgz", + "integrity": "sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.56.0", - "@typescript-eslint/utils": "5.56.0", + "@typescript-eslint/typescript-estree": "6.19.1", + "@typescript-eslint/utils": "6.19.1", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1347,12 +1516,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", - "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz", + "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1360,21 +1529,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", - "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz", + "integrity": "sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/visitor-keys": "5.56.0", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1386,49 +1556,78 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.56.0.tgz", - "integrity": "sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.1.tgz", + "integrity": "sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/typescript-estree": "5.56.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/typescript-estree": "6.19.1", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", - "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", + "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.56.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.19.1", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1436,9 +1635,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1478,13 +1677,11 @@ } }, "node_modules/agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "dev": true, "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", "humanize-ms": "^1.2.1" }, "engines": { @@ -1870,21 +2067,20 @@ } }, "node_modules/cacache": { - "version": "17.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.5.tgz", - "integrity": "sha512-Y/PRQevNSsjAPWykl9aeGz8Pr+OI6BYM9fYDNMvOkuUiG9IhG4LEmaYrZZZvioMUEQ+cBCxT0v8wrnCURccyKA==", + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", - "glob": "^9.3.1", + "glob": "^10.2.2", "lru-cache": "^7.7.1", - "minipass": "^4.0.0", + "minipass": "^7.0.3", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", "ssri": "^10.0.0", "tar": "^6.1.11", "unique-filename": "^3.0.0" @@ -1893,6 +2089,89 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/cacache/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -1970,18 +2249,18 @@ ] }, "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" @@ -2004,10 +2283,13 @@ } }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -2141,9 +2423,9 @@ } }, "node_modules/commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, "engines": { "node": ">=14" @@ -2312,9 +2594,9 @@ } }, "node_modules/deep-eql": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", - "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "dependencies": { "type-detect": "^4.0.0" @@ -2365,15 +2647,6 @@ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -2505,27 +2778,28 @@ } }, "node_modules/eslint": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", - "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.1", - "@eslint/js": "8.36.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.5.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2533,22 +2807,19 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -2562,9 +2833,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -2574,58 +2845,42 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/espree": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", - "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2659,15 +2914,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -2680,7 +2926,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -2689,15 +2935,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -2707,6 +2944,12 @@ "node": ">=0.10.0" } }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2911,9 +3154,9 @@ } }, "node_modules/fp-and-or": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fp-and-or/-/fp-and-or-0.1.3.tgz", - "integrity": "sha512-wJaE62fLaB3jCYvY2ZHjZvmKK2iiLiiehX38rz5QZxtdN8fVPJDeZUiVvJrHStdTc+23LHlyZuSEKgFc0pxi2g==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/fp-and-or/-/fp-and-or-0.1.4.tgz", + "integrity": "sha512-+yRYRhpnFPWXSly/6V4Lw9IfOV26uu30kynGJ03PW+MnjOEQe45RZ141QcS0aJehYBYA50GfCDnsRbFJdhssRw==", "dev": true, "engines": { "node": ">=10" @@ -2940,17 +3183,26 @@ ] }, "node_modules/fs-minipass": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.1.tgz", - "integrity": "sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, "dependencies": { - "minipass": "^4.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2971,15 +3223,18 @@ } }, "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 + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/fuse.js": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", - "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz", + "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==", "dev": true, "engines": { "node": ">=10" @@ -3023,9 +3278,9 @@ } }, "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "engines": { "node": "*" @@ -3140,9 +3395,9 @@ } }, "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3205,20 +3460,20 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "dependencies": { "minimist": "^1.2.5", - "neo-async": "^2.6.0", + "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, @@ -3232,18 +3487,6 @@ "uglify-js": "^3.1.4" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3296,6 +3539,18 @@ "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -3392,21 +3647,21 @@ } }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/ignore-walk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.2.tgz", - "integrity": "sha512-ezmQ1Dg2b3jVZh2Dh+ar6Eu2MqNSTkyb32HU2MAQQQX9tKM3q/UQ/9lf03lQ5hW+fOeoMnwxwkleZ0xcNp0/qg==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", + "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", "dev": true, "dependencies": { - "minimatch": "^7.4.2" + "minimatch": "^9.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -3422,15 +3677,15 @@ } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", - "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3502,9 +3757,9 @@ "dev": true }, "node_modules/ini": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.0.0.tgz", - "integrity": "sha512-t0ikzf5qkSFqRl1e6ejKBe+Tk2bsQd8ivEkcisyGXsku2t8NvXZ1Y3RRz5vxrDgOrTBOi13CvGsVoI5wVpd7xg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -3540,12 +3795,12 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3742,9 +3997,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -3864,18 +4119,30 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", "dev": true }, - "node_modules/js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3913,9 +4180,9 @@ "dev": true }, "node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -4064,12 +4331,12 @@ } }, "node_modules/loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "node_modules/lowercase-keys": { @@ -4088,6 +4355,7 @@ "version": "7.14.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", + "dev": true, "engines": { "node": ">=12" } @@ -4108,9 +4376,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -4123,127 +4391,113 @@ "dev": true }, "node_modules/make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "ssri": "^10.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/make-fetch-happen/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">= 8" } }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8.6" } }, - "node_modules/make-fetch-happen/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==", + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">= 8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "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": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, - "node_modules/make-fetch-happen/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/minipass": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", + "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==", + "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": { - "brace-expansion": "^2.0.1" + "minipass": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">= 8" } }, - "node_modules/make-fetch-happen/node_modules/minipass": { + "node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", @@ -4255,210 +4509,30 @@ "node": ">=8" } }, - "node_modules/make-fetch-happen/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/make-fetch-happen/node_modules/rimraf/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/make-fetch-happen/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/make-fetch-happen/node_modules/rimraf/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/make-fetch-happen/node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/minipass": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", - "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==", - "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-collect/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" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" }, "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "node_modules/minipass-fetch/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-flush": { @@ -4730,12 +4804,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -4752,12 +4820,13 @@ "dev": true }, "node_modules/node-gyp": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz", - "integrity": "sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", "dev": true, "dependencies": { "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^10.0.3", @@ -4775,6 +4844,100 @@ "node": "^12.13 || ^14.13 || >=16" } }, + "node_modules/node-gyp/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/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/node-gyp/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4795,19 +4958,111 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/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/node-gyp/node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, "node_modules/node-gyp/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" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/node-preload": { @@ -4904,41 +5159,43 @@ } }, "node_modules/npm-check-updates": { - "version": "16.8.0", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.8.0.tgz", - "integrity": "sha512-2xpFtUPa2OyswC8kpIpxRqQcP/D0uqaBgfiOQAtvGlnDhmHr3QwR2gWjjWtS6xnNvgyyVly/4edY0Uu24c46ew==", + "version": "16.14.12", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.14.12.tgz", + "integrity": "sha512-5FvqaDX8AqWWTDQFbBllgLwoRXTvzlqVIRSKl9Kg8bYZTfNwMnrp1Zlmb5e/ocf11UjPTc+ShBFjYQ7kg6FL0w==", "dev": true, "dependencies": { - "chalk": "^5.2.0", + "chalk": "^5.3.0", "cli-table3": "^0.6.3", - "commander": "^10.0.0", + "commander": "^10.0.1", "fast-memoize": "^2.5.2", "find-up": "5.0.0", - "fp-and-or": "^0.1.3", + "fp-and-or": "^0.1.4", "get-stdin": "^8.0.0", "globby": "^11.0.4", "hosted-git-info": "^5.1.0", - "ini": "^4.0.0", + "ini": "^4.1.1", + "js-yaml": "^4.1.0", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", "lodash": "^4.17.21", - "minimatch": "^7.4.3", + "make-fetch-happen": "^11.1.1", + "minimatch": "^9.0.3", "p-map": "^4.0.0", - "pacote": "15.1.1", + "pacote": "15.2.0", "parse-github-url": "^1.0.2", "progress": "^2.0.3", - "prompts-ncu": "^2.5.1", - "rc-config-loader": "^4.1.2", + "prompts-ncu": "^3.0.0", + "rc-config-loader": "^4.1.3", "remote-git-tags": "^3.0.0", - "rimraf": "^4.4.1", - "semver": "^7.3.8", + "rimraf": "^5.0.5", + "semver": "^7.5.4", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", - "spawn-please": "^2.0.1", - "strip-json-comments": "^5.0.0", + "spawn-please": "^2.0.2", + "strip-ansi": "^7.1.0", + "strip-json-comments": "^5.0.1", "untildify": "^4.0.0", - "update-notifier": "^6.0.2", - "yaml": "^2.2.1" + "update-notifier": "^6.0.2" }, "bin": { "ncu": "build/src/bin/cli.js", @@ -4948,6 +5205,18 @@ "node": ">=14.14" } }, + "node_modules/npm-check-updates/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/npm-check-updates/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -4958,9 +5227,9 @@ } }, "node_modules/npm-check-updates/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -4970,24 +5239,39 @@ } }, "node_modules/npm-check-updates/node_modules/minimatch": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", - "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/npm-check-updates/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/npm-check-updates/node_modules/strip-json-comments": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz", - "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz", + "integrity": "sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==", "dev": true, "engines": { "node": ">=14.16" @@ -4997,9 +5281,9 @@ } }, "node_modules/npm-install-checks": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.0.tgz", - "integrity": "sha512-udSGENih/5xKh3Ex+L0PtZcOt0Pa+6ppDLnpG5D49/EhMja3LupaY9E/DtJTxyFBwE09ot7Fc+H4DywnZNWTVA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, "dependencies": { "semver": "^7.1.1" @@ -5009,9 +5293,9 @@ } }, "node_modules/npm-normalize-package-bin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz", - "integrity": "sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -5057,9 +5341,9 @@ } }, "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", + "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", "dev": true, "dependencies": { "npm-install-checks": "^6.0.0", @@ -5072,13 +5356,13 @@ } }, "node_modules/npm-registry-fetch": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz", - "integrity": "sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", "dev": true, "dependencies": { "make-fetch-happen": "^11.0.0", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", @@ -5089,47 +5373,13 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", - "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^4.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", - "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "node_modules/npm-registry-fetch/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "dependencies": { - "minipass": "^4.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "node": ">=8" } }, "node_modules/npmlog": { @@ -5372,17 +5622,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -5485,9 +5735,9 @@ } }, "node_modules/pacote": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.1.tgz", - "integrity": "sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ==", + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", "dev": true, "dependencies": { "@npmcli/git": "^4.0.0", @@ -5496,7 +5746,7 @@ "@npmcli/run-script": "^6.0.0", "cacache": "^17.0.0", "fs-minipass": "^3.0.0", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "npm-package-arg": "^10.0.0", "npm-packlist": "^7.0.0", "npm-pick-manifest": "^8.0.0", @@ -5505,7 +5755,7 @@ "promise-retry": "^2.0.1", "read-package-json": "^6.0.0", "read-package-json-fast": "^3.0.0", - "sigstore": "^1.0.0", + "sigstore": "^1.3.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, @@ -5516,6 +5766,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/pacote/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/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5568,12 +5827,12 @@ } }, "node_modules/path-scurry": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.3.tgz", - "integrity": "sha512-RAmB+n30SlN+HnNx6EbcpoDy9nwdpcGPnEKrJnu6GZoDWBdIjo1UQMVtW2ybtC7LC2oKLcMq8y5g8WnKLiod9g==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dependencies": { - "lru-cache": "^7.14.1", - "minipass": "^4.0.2" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -5582,6 +5841,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -5692,15 +5967,15 @@ } }, "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", + "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", "dev": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -5756,16 +6031,16 @@ } }, "node_modules/prompts-ncu": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-2.5.1.tgz", - "integrity": "sha512-Hdd7GgV7b76Yh9FP9HL1D9xqtJCJdVPpiM2vDtuoc8W1KfweJe15gutFYmxkq83ViFaagFM8K0UcPCQ/tZq8bA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-3.0.0.tgz", + "integrity": "sha512-qyz9UxZ5MlPKWVhWrCmSZ1ahm2GVYdjLb8og2sg0IPth1KRuhcggHGuijz0e41dkx35p1t1q3GRISGH7QGALFA==", "dev": true, "dependencies": { "kleur": "^4.0.1", "sisteransi": "^1.0.5" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/proto-list": { @@ -5775,9 +6050,9 @@ "dev": true }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -5855,9 +6130,9 @@ } }, "node_modules/rc-config-loader": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.2.tgz", - "integrity": "sha512-qKTnVWFl9OQYKATPzdfaZIbTxcHziQl92zYSxYC6umhOqyAsoj8H8Gq/+aFjAso68sBdjTz3A7omqeAkkF1MWg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", + "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", "dev": true, "dependencies": { "debug": "^4.3.4", @@ -5882,12 +6157,12 @@ } }, "node_modules/read-package-json": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.1.tgz", - "integrity": "sha512-AaHqXxfAVa+fNL07x8iAghfKOds/XXsu7zoouIVsbm7PEbQ3nMWXlvjcbrNLjElnUHWQtAo4QEa0RXuvD4XlpA==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", "dev": true, "dependencies": { - "glob": "^9.3.0", + "glob": "^10.2.2", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^5.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -5909,6 +6184,89 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/read-package-json/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -6057,16 +6415,99 @@ } }, "node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { - "glob": "^9.2.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { - "rimraf": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/rimraf/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { "node": ">=14" }, @@ -6111,9 +6552,9 @@ "optional": true }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "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" @@ -6200,64 +6641,23 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/sigstore": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.2.0.tgz", - "integrity": "sha512-Fr9+W1nkBSIZCkJQR7jDn/zI0UXNsVpp+7mDQkCnZOIxG9p6yNXBx9xntHsfUyYHE55XDkkVV3+rYbrkzAeesA==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.0.0" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/make-fetch-happen": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", - "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^4.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/minipass-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", - "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "node_modules/sigstore": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", "dev": true, "dependencies": { - "minipass": "^4.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" + }, + "bin": { + "sigstore": "bin/sigstore.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" } }, "node_modules/sisteransi": { @@ -6333,9 +6733,9 @@ } }, "node_modules/spawn-please": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-2.0.1.tgz", - "integrity": "sha512-W+cFbZR2q2mMTfjz5ZGvhBAiX+e/zczFCNlbS9mxiSdYswBXwUuBUT+a0urH+xZZa8f/bs0mXHyZsZHR9hKogA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-2.0.2.tgz", + "integrity": "sha512-KM8coezO6ISQ89c1BzyWNtcn2V2kAVtwIXd3cN/V5a0xPYc1F/vydrRc01wsKFEQ/p+V1a4sw4z2yMITIXrgGw==", "dev": true, "dependencies": { "cross-spawn": "^7.0.3" @@ -6423,9 +6823,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", "dev": true }, "node_modules/sprintf-js": { @@ -6435,17 +6835,26 @@ "dev": true }, "node_modules/ssri": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", - "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, "dependencies": { - "minipass": "^4.0.0" + "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/ssri/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -6489,6 +6898,21 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "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/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -6501,6 +6925,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "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/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -6535,14 +6972,14 @@ } }, "node_modules/tar": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "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": "^4.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" @@ -6575,6 +7012,15 @@ "node": ">=8" } }, + "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/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -6636,10 +7082,22 @@ "node": ">=8.0" } }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -6688,81 +7146,18 @@ "node": ">=0.3.1" } }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, "node_modules/tuf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.2.tgz", - "integrity": "sha512-gBfbnS6khluxjvoFCpRV0fhWT265xNfpiNXOcBX0Ze6HGbPhe93UG5V5DdKcgm/aXsMadnY76l/h6j63GmJS5g==", - "dev": true, - "dependencies": { - "@tufjs/models": "1.0.1", - "make-fetch-happen": "^11.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/make-fetch-happen": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", - "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^4.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/minipass-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", - "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", "dev": true, "dependencies": { - "minipass": "^4.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" } }, "node_modules/type-check": { @@ -6808,16 +7203,16 @@ } }, "node_modules/typescript": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", - "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, "node_modules/uglify-js": { @@ -6833,6 +7228,12 @@ "node": ">=0.8.0" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/unique-filename": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", @@ -6963,9 +7364,13 @@ "dev": true }, "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -7027,9 +7432,9 @@ } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", - "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", + "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==" }, "node_modules/vscode-languageserver-types": { "version": "3.17.3", @@ -7037,9 +7442,9 @@ "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" }, "node_modules/vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==" }, "node_modules/which": { "version": "2.0.2", @@ -7136,15 +7541,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -7174,6 +7570,24 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -7220,9 +7634,9 @@ "dev": true }, "node_modules/yaml": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", - "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "engines": { "node": ">= 14" } @@ -7316,6 +7730,12 @@ } }, "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -7424,9 +7844,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -7469,9 +7889,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -7734,20 +8154,20 @@ } }, "@eslint-community/regexpp": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.1.tgz", - "integrity": "sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true }, "@eslint/eslintrc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", - "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.0", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -7757,15 +8177,15 @@ } }, "@eslint/js": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", - "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true }, "@flatten-js/interval-tree": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.0.20.tgz", - "integrity": "sha512-ZmJAa7pDel/FiSN3gXYnrK51Od+maJ+54hJe2PZlWGFWLfQv1YP9DdjNofpg0+HS956oItjse2eWkIMdTZUhRw==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.1.2.tgz", + "integrity": "sha512-OwLoV9E/XM6b7bes2rSFnGNjyRy7vcoIHFTnmBR2WAaZTf0Fe4EX4GdA65vU1KgFAasti7iRSg2dZfYd1Zt00Q==" }, "@gar/promisify": { "version": "1.1.3", @@ -7774,13 +8194,13 @@ "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" } }, @@ -7791,11 +8211,76 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -7953,9 +8438,9 @@ } }, "@npmcli/git": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.4.tgz", - "integrity": "sha512-5yZghx+u5M47LghaybLCkdSyFzV/w4OuH12d96HO389Ik9CDsLaDZJVynSGGVJOLn6gy/k7Dz5XYcplM3uxXRg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", "dev": true, "requires": { "@npmcli/promise-spawn": "^6.0.0", @@ -7969,9 +8454,9 @@ }, "dependencies": { "which": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", - "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -8040,9 +8525,9 @@ }, "dependencies": { "which": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", - "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -8051,9 +8536,9 @@ } }, "@npmcli/run-script": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.0.tgz", - "integrity": "sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", "dev": true, "requires": { "@npmcli/node-gyp": "^3.0.0", @@ -8064,9 +8549,9 @@ }, "dependencies": { "which": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", - "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -8074,6 +8559,13 @@ } } }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, "@pnpm/network.ca-file": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.1.tgz", @@ -8093,12 +8585,42 @@ "config-chain": "^1.1.11" } }, + "@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.2.0" + } + }, "@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", "dev": true }, + "@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, + "requires": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + } + }, + "@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + } + }, "@sindresorhus/is": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", @@ -8144,13 +8666,20 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true + }, "@tufjs/models": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.1.tgz", - "integrity": "sha512-AY0VoG/AXdlSOocuREfPoEW4SNhOPp/7fw6mpAxfVIny1uZ+0fEtMoCi7NhELSlqQIRLMu7RgfKhkxT+AJ+EXg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", "dev": true, "requires": { - "minimatch": "^7.4.2" + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" }, "dependencies": { "brace-expansion": { @@ -8163,9 +8692,9 @@ } }, "minimatch": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", - "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -8174,9 +8703,9 @@ } }, "@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz", + "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==", "dev": true }, "@types/glob": { @@ -8196,21 +8725,21 @@ "dev": true }, "@types/ini": { - "version": "1.3.31", - "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.31.tgz", - "integrity": "sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@types/ini/-/ini-4.1.0.tgz", + "integrity": "sha512-mTehMtc+xtnWBBvqizcqYCktKDBH2WChvx1GU3Sfe4PysFDXiNe+1YwtpVX1MDtCa4NQrSPw2+3HmvXHY3gt1w==", "dev": true }, "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "@types/lodash": { - "version": "4.14.191", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", - "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", "dev": true }, "@types/minimatch": { @@ -8220,27 +8749,30 @@ "dev": true }, "@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", + "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", "dev": true }, "@types/node": { - "version": "18.15.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.9.tgz", - "integrity": "sha512-dUxhiNzBLr6IqlZXz6e/rN2YQXlFgOei/Dxy+e3cyXTJ4txSUbGT2/fmnD6zd/75jDMeW5bDee+YXxlFKHoV0A==", - "dev": true + "version": "20.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", + "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } }, "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, "@types/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", + "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==", "dev": true }, "@types/vscode": { @@ -8250,104 +8782,132 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz", - "integrity": "sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.1.tgz", + "integrity": "sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==", "dev": true, "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/type-utils": "5.56.0", - "@typescript-eslint/utils": "5.56.0", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/type-utils": "6.19.1", + "@typescript-eslint/utils": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/parser": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz", - "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.1.tgz", + "integrity": "sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/typescript-estree": "5.56.0", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/typescript-estree": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", - "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz", + "integrity": "sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==", "dev": true, "requires": { - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/visitor-keys": "5.56.0" + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1" } }, "@typescript-eslint/type-utils": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz", - "integrity": "sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.1.tgz", + "integrity": "sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.56.0", - "@typescript-eslint/utils": "5.56.0", + "@typescript-eslint/typescript-estree": "6.19.1", + "@typescript-eslint/utils": "6.19.1", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", - "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz", + "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", - "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz", + "integrity": "sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/visitor-keys": "5.56.0", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "@typescript-eslint/utils": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.56.0.tgz", - "integrity": "sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.1.tgz", + "integrity": "sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/typescript-estree": "5.56.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/typescript-estree": "6.19.1", + "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", - "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", + "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.56.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.19.1", + "eslint-visitor-keys": "^3.4.1" } }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -8355,9 +8915,9 @@ "dev": true }, "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true }, "acorn-jsx": { @@ -8383,13 +8943,11 @@ } }, "agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "dev": true, "requires": { - "debug": "^4.1.0", - "depd": "^2.0.0", "humanize-ms": "^1.2.1" } }, @@ -8664,24 +9222,78 @@ } }, "cacache": { - "version": "17.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.5.tgz", - "integrity": "sha512-Y/PRQevNSsjAPWykl9aeGz8Pr+OI6BYM9fYDNMvOkuUiG9IhG4LEmaYrZZZvioMUEQ+cBCxT0v8wrnCURccyKA==", + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", "dev": true, "requires": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", - "glob": "^9.3.1", + "glob": "^10.2.2", "lru-cache": "^7.7.1", - "minipass": "^4.0.0", + "minipass": "^7.0.3", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", "ssri": "^10.0.0", "tar": "^6.1.11", "unique-filename": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, "cacheable-lookup": { @@ -8736,18 +9348,18 @@ "dev": true }, "chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "requires": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" } }, "chalk": { @@ -8761,10 +9373,13 @@ } }, "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "requires": { + "get-func-name": "^2.0.2" + } }, "chokidar": { "version": "3.5.3", @@ -8860,9 +9475,9 @@ "dev": true }, "commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true }, "commondir": { @@ -8990,9 +9605,9 @@ } }, "deep-eql": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", - "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -9031,12 +9646,6 @@ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -9135,27 +9744,28 @@ "dev": true }, "eslint": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", - "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.1", - "@eslint/js": "8.36.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.5.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -9163,75 +9773,54 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" - }, - "dependencies": { - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "requires": {} }, "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" } }, "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, "espree": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", - "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "requires": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" } }, "esprima": { @@ -9247,14 +9836,6 @@ "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "esrecurse": { @@ -9264,20 +9845,12 @@ "dev": true, "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { @@ -9286,6 +9859,12 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -9446,9 +10025,9 @@ "dev": true }, "fp-and-or": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fp-and-or/-/fp-and-or-0.1.3.tgz", - "integrity": "sha512-wJaE62fLaB3jCYvY2ZHjZvmKK2iiLiiehX38rz5QZxtdN8fVPJDeZUiVvJrHStdTc+23LHlyZuSEKgFc0pxi2g==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/fp-and-or/-/fp-and-or-0.1.4.tgz", + "integrity": "sha512-+yRYRhpnFPWXSly/6V4Lw9IfOV26uu30kynGJ03PW+MnjOEQe45RZ141QcS0aJehYBYA50GfCDnsRbFJdhssRw==", "dev": true }, "fromentries": { @@ -9458,12 +10037,20 @@ "dev": true }, "fs-minipass": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.1.tgz", - "integrity": "sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, "requires": { - "minipass": "^4.0.0" + "minipass": "^7.0.3" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + } } }, "fs.realpath": { @@ -9479,15 +10066,15 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, "fuse.js": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", - "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz", + "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==", "dev": true }, "gauge": { @@ -9519,9 +10106,9 @@ "dev": true }, "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true }, "get-package-type": { @@ -9598,9 +10185,9 @@ } }, "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -9645,34 +10232,25 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "requires": { "minimist": "^1.2.5", - "neo-async": "^2.6.0", + "neo-async": "^2.6.2", "source-map": "^0.6.1", "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -9709,6 +10287,15 @@ } } }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -9787,18 +10374,18 @@ } }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true }, "ignore-walk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.2.tgz", - "integrity": "sha512-ezmQ1Dg2b3jVZh2Dh+ar6Eu2MqNSTkyb32HU2MAQQQX9tKM3q/UQ/9lf03lQ5hW+fOeoMnwxwkleZ0xcNp0/qg==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", + "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", "dev": true, "requires": { - "minimatch": "^7.4.2" + "minimatch": "^9.0.0" }, "dependencies": { "brace-expansion": { @@ -9811,9 +10398,9 @@ } }, "minimatch": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", - "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -9872,9 +10459,9 @@ "dev": true }, "ini": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.0.0.tgz", - "integrity": "sha512-t0ikzf5qkSFqRl1e6ejKBe+Tk2bsQd8ivEkcisyGXsku2t8NvXZ1Y3RRz5vxrDgOrTBOi13CvGsVoI5wVpd7xg==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==" }, "ip": { "version": "2.0.0", @@ -9901,12 +10488,12 @@ } }, "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-extglob": { @@ -10040,9 +10627,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -10133,18 +10720,22 @@ "istanbul-lib-report": "^3.0.0" } }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", "dev": true }, - "js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -10173,9 +10764,9 @@ "dev": true }, "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", "dev": true }, "json-parse-helpfulerror": { @@ -10288,12 +10879,12 @@ } }, "loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "requires": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "lowercase-keys": { @@ -10302,213 +10893,63 @@ "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true }, - "lru-cache": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==" - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "dependencies": { - "@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - } - }, - "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, - "requires": { - "minipass": "^3.0.0" - } - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, + "lru-cache": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", + "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "dependencies": { "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "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, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "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" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "requires": { - "unique-slug": "^3.0.0" - } - }, - "unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true } } }, @@ -10575,25 +11016,22 @@ } }, "minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", "dev": true, "requires": { "encoding": "^0.1.13", - "minipass": "^3.1.6", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, "dependencies": { "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true } } }, @@ -10814,12 +11252,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -10833,12 +11265,13 @@ "dev": true }, "node-gyp": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz", - "integrity": "sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", "dev": true, "requires": { "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^10.0.3", @@ -10850,6 +11283,84 @@ "which": "^2.0.2" }, "dependencies": { + "@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "dependencies": { + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "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, + "requires": { + "minipass": "^3.0.0" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -10864,13 +11375,85 @@ "path-is-absolute": "^1.0.0" } }, + "make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + } + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "glob": "^7.1.3" + "glob": "^7.1.3" + } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" } } } @@ -10944,43 +11527,51 @@ } }, "npm-check-updates": { - "version": "16.8.0", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.8.0.tgz", - "integrity": "sha512-2xpFtUPa2OyswC8kpIpxRqQcP/D0uqaBgfiOQAtvGlnDhmHr3QwR2gWjjWtS6xnNvgyyVly/4edY0Uu24c46ew==", + "version": "16.14.12", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.14.12.tgz", + "integrity": "sha512-5FvqaDX8AqWWTDQFbBllgLwoRXTvzlqVIRSKl9Kg8bYZTfNwMnrp1Zlmb5e/ocf11UjPTc+ShBFjYQ7kg6FL0w==", "dev": true, "requires": { - "chalk": "^5.2.0", + "chalk": "^5.3.0", "cli-table3": "^0.6.3", - "commander": "^10.0.0", + "commander": "^10.0.1", "fast-memoize": "^2.5.2", "find-up": "5.0.0", - "fp-and-or": "^0.1.3", + "fp-and-or": "^0.1.4", "get-stdin": "^8.0.0", "globby": "^11.0.4", "hosted-git-info": "^5.1.0", - "ini": "^4.0.0", + "ini": "^4.1.1", + "js-yaml": "^4.1.0", "json-parse-helpfulerror": "^1.0.3", "jsonlines": "^0.1.1", "lodash": "^4.17.21", - "minimatch": "^7.4.3", + "make-fetch-happen": "^11.1.1", + "minimatch": "^9.0.3", "p-map": "^4.0.0", - "pacote": "15.1.1", + "pacote": "15.2.0", "parse-github-url": "^1.0.2", "progress": "^2.0.3", - "prompts-ncu": "^2.5.1", - "rc-config-loader": "^4.1.2", + "prompts-ncu": "^3.0.0", + "rc-config-loader": "^4.1.3", "remote-git-tags": "^3.0.0", - "rimraf": "^4.4.1", - "semver": "^7.3.8", + "rimraf": "^5.0.5", + "semver": "^7.5.4", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", - "spawn-please": "^2.0.1", - "strip-json-comments": "^5.0.0", + "spawn-please": "^2.0.2", + "strip-ansi": "^7.1.0", + "strip-json-comments": "^5.0.1", "untildify": "^4.0.0", - "update-notifier": "^6.0.2", - "yaml": "^2.2.1" + "update-notifier": "^6.0.2" }, "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -10991,41 +11582,50 @@ } }, "chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true }, "minimatch": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", - "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "requires": { "brace-expansion": "^2.0.1" } }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, "strip-json-comments": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz", - "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz", + "integrity": "sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==", "dev": true } } }, "npm-install-checks": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.0.tgz", - "integrity": "sha512-udSGENih/5xKh3Ex+L0PtZcOt0Pa+6ppDLnpG5D49/EhMja3LupaY9E/DtJTxyFBwE09ot7Fc+H4DywnZNWTVA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, "requires": { "semver": "^7.1.1" } }, "npm-normalize-package-bin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz", - "integrity": "sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true }, "npm-package-arg": { @@ -11061,9 +11661,9 @@ } }, "npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", + "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", "dev": true, "requires": { "npm-install-checks": "^6.0.0", @@ -11073,13 +11673,13 @@ } }, "npm-registry-fetch": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz", - "integrity": "sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", "dev": true, "requires": { "make-fetch-happen": "^11.0.0", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", @@ -11087,40 +11687,11 @@ "proc-log": "^3.0.0" }, "dependencies": { - "make-fetch-happen": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", - "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^4.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - } - }, - "minipass-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", - "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^4.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true } } }, @@ -11315,17 +11886,17 @@ } }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" } }, "p-cancelable": { @@ -11392,9 +11963,9 @@ } }, "pacote": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.1.tgz", - "integrity": "sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ==", + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", "dev": true, "requires": { "@npmcli/git": "^4.0.0", @@ -11403,7 +11974,7 @@ "@npmcli/run-script": "^6.0.0", "cacache": "^17.0.0", "fs-minipass": "^3.0.0", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "npm-package-arg": "^10.0.0", "npm-packlist": "^7.0.0", "npm-pick-manifest": "^8.0.0", @@ -11412,9 +11983,17 @@ "promise-retry": "^2.0.1", "read-package-json": "^6.0.0", "read-package-json-fast": "^3.0.0", - "sigstore": "^1.0.0", + "sigstore": "^1.3.0", "ssri": "^10.0.0", "tar": "^6.1.11" + }, + "dependencies": { + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + } } }, "parent-module": { @@ -11451,12 +12030,24 @@ "dev": true }, "path-scurry": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.3.tgz", - "integrity": "sha512-RAmB+n30SlN+HnNx6EbcpoDy9nwdpcGPnEKrJnu6GZoDWBdIjo1UQMVtW2ybtC7LC2oKLcMq8y5g8WnKLiod9g==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "requires": { - "lru-cache": "^7.14.1", - "minipass": "^4.0.2" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==" + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + } } }, "path-type": { @@ -11538,9 +12129,9 @@ "dev": true }, "prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", + "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", "dev": true }, "proc-log": { @@ -11581,9 +12172,9 @@ } }, "prompts-ncu": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-2.5.1.tgz", - "integrity": "sha512-Hdd7GgV7b76Yh9FP9HL1D9xqtJCJdVPpiM2vDtuoc8W1KfweJe15gutFYmxkq83ViFaagFM8K0UcPCQ/tZq8bA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-3.0.0.tgz", + "integrity": "sha512-qyz9UxZ5MlPKWVhWrCmSZ1ahm2GVYdjLb8og2sg0IPth1KRuhcggHGuijz0e41dkx35p1t1q3GRISGH7QGALFA==", "dev": true, "requires": { "kleur": "^4.0.1", @@ -11597,9 +12188,9 @@ "dev": true }, "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true }, "pupa": { @@ -11659,9 +12250,9 @@ } }, "rc-config-loader": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.2.tgz", - "integrity": "sha512-qKTnVWFl9OQYKATPzdfaZIbTxcHziQl92zYSxYC6umhOqyAsoj8H8Gq/+aFjAso68sBdjTz3A7omqeAkkF1MWg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", + "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", "dev": true, "requires": { "debug": "^4.3.4", @@ -11671,15 +12262,70 @@ } }, "read-package-json": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.1.tgz", - "integrity": "sha512-AaHqXxfAVa+fNL07x8iAghfKOds/XXsu7zoouIVsbm7PEbQ3nMWXlvjcbrNLjElnUHWQtAo4QEa0RXuvD4XlpA==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", "dev": true, "requires": { - "glob": "^9.3.0", + "glob": "^10.2.2", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^5.0.0", "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, "read-package-json-fast": { @@ -11797,12 +12443,67 @@ "dev": true }, "rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", "dev": true, "requires": { - "glob": "^9.2.0" + "glob": "^10.3.7" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, "run-parallel": { @@ -11828,9 +12529,9 @@ "optional": true }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "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, "requires": { "lru-cache": "^6.0.0" @@ -11899,51 +12600,16 @@ "dev": true }, "sigstore": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.2.0.tgz", - "integrity": "sha512-Fr9+W1nkBSIZCkJQR7jDn/zI0UXNsVpp+7mDQkCnZOIxG9p6yNXBx9xntHsfUyYHE55XDkkVV3+rYbrkzAeesA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", "dev": true, "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.0.0" - }, - "dependencies": { - "make-fetch-happen": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", - "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^4.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - } - }, - "minipass-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", - "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^4.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - } + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" } }, "sisteransi": { @@ -12002,9 +12668,9 @@ } }, "spawn-please": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-2.0.1.tgz", - "integrity": "sha512-W+cFbZR2q2mMTfjz5ZGvhBAiX+e/zczFCNlbS9mxiSdYswBXwUuBUT+a0urH+xZZa8f/bs0mXHyZsZHR9hKogA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-2.0.2.tgz", + "integrity": "sha512-KM8coezO6ISQ89c1BzyWNtcn2V2kAVtwIXd3cN/V5a0xPYc1F/vydrRc01wsKFEQ/p+V1a4sw4z2yMITIXrgGw==", "dev": true, "requires": { "cross-spawn": "^7.0.3" @@ -12076,9 +12742,9 @@ } }, "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", "dev": true }, "sprintf-js": { @@ -12088,12 +12754,20 @@ "dev": true }, "ssri": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", - "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dev": true, "requires": { - "minipass": "^4.0.0" + "minipass": "^7.0.3" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + } } }, "string_decoder": { @@ -12124,6 +12798,17 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -12133,6 +12818,15 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -12155,14 +12849,14 @@ } }, "tar": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", "dev": true, "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" @@ -12187,6 +12881,12 @@ } } } + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true } } }, @@ -12238,10 +12938,17 @@ "is-number": "^7.0.0" } }, + "ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "requires": {} + }, "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", @@ -12267,66 +12974,15 @@ } } }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, "tuf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.2.tgz", - "integrity": "sha512-gBfbnS6khluxjvoFCpRV0fhWT265xNfpiNXOcBX0Ze6HGbPhe93UG5V5DdKcgm/aXsMadnY76l/h6j63GmJS5g==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", "dev": true, "requires": { - "@tufjs/models": "1.0.1", - "make-fetch-happen": "^11.0.1" - }, - "dependencies": { - "make-fetch-happen": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz", - "integrity": "sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^4.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - } - }, - "minipass-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz", - "integrity": "sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^4.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - } + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" } }, "type-check": { @@ -12360,9 +13016,9 @@ } }, "typescript": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", - "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true }, "uglify-js": { @@ -12372,6 +13028,12 @@ "dev": true, "optional": true }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "unique-filename": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", @@ -12461,9 +13123,9 @@ "dev": true }, "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" }, "v8-compile-cache-lib": { "version": "3.0.1", @@ -12513,9 +13175,9 @@ } }, "vscode-languageserver-textdocument": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", - "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", + "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==" }, "vscode-languageserver-types": { "version": "3.17.3", @@ -12523,9 +13185,9 @@ "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" }, "vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==" }, "which": { "version": "2.0.2", @@ -12594,12 +13256,6 @@ } } }, - "word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -12623,6 +13279,17 @@ "strip-ansi": "^6.0.0" } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -12660,9 +13327,9 @@ "dev": true }, "yaml": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", - "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==" + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==" }, "yargs": { "version": "16.2.0", diff --git a/package.json b/package.json index 15cee430b..4c7868444 100644 --- a/package.json +++ b/package.json @@ -48,40 +48,40 @@ "LSP" ], "dependencies": { - "@flatten-js/interval-tree": "^1.0.20", + "@flatten-js/interval-tree": "^1.1.2", "antsibull-docs": "^1.0.0", "glob": "^9.3.2", - "ini": "^4.0.0", + "ini": "^4.1.1", "lodash": "^4.17.21", - "uuid": "^9.0.0", + "uuid": "^9.0.1", "vscode-languageserver": "^8.1.0", - "vscode-languageserver-textdocument": "^1.0.8", - "vscode-uri": "^3.0.7", - "yaml": "^2.2.2" + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-uri": "^3.0.8", + "yaml": "^2.3.4" }, "devDependencies": { - "@types/chai": "^4.3.4", + "@types/chai": "^4.3.11", "@types/glob": "^8.1.0", - "@types/ini": "^1.3.31", - "@types/lodash": "^4.14.191", - "@types/mocha": "^10.0.1", - "@types/node": "^18.15.9", - "@types/uuid": "^9.0.1", + "@types/ini": "^4.1.0", + "@types/lodash": "^4.14.202", + "@types/mocha": "^10.0.6", + "@types/node": "^20.11.5", + "@types/uuid": "^9.0.7", "@types/vscode": "^1.76.0", - "@typescript-eslint/eslint-plugin": "^5.56.0", - "@typescript-eslint/parser": "^5.56.0", - "chai": "^4.3.7", - "eslint": "^8.36.0", - "eslint-config-prettier": "^8.8.0", - "fuse.js": "^6.6.2", - "handlebars": "^4.7.7", + "@typescript-eslint/eslint-plugin": "^6.19.1", + "@typescript-eslint/parser": "^6.19.1", + "chai": "^4.4.1", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "fuse.js": "^7.0.0", + "handlebars": "^4.7.8", "mocha": "^10.2.0", - "npm-check-updates": "^16.8.0", + "npm-check-updates": "^16.14.12", "nyc": "^15.1.0", - "prettier": "^2.8.7", - "rimraf": "^4.4.1", - "ts-node": "^10.9.1", - "typescript": "^5.0.2" + "prettier": "^3.2.4", + "rimraf": "^5.0.5", + "ts-node": "^10.9.2", + "typescript": "^5.3.3" }, "scripts": { "clean": "rimraf out/server && rimraf lib", diff --git a/tools/test-setup.sh b/tools/test-setup.sh index d34a399e7..3d5fd8b44 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -76,7 +76,7 @@ if [[ -f "/usr/bin/apt-get" ]]; then -o=Dpkg::Use-Pty=0 "${DEBS[@]}" fi fi -python3 --version +log notice "Using $(python3 --version)" # Ensure that git is configured properly to allow unattended commits, something # that is needed by some tasks, like devel or deps. @@ -202,12 +202,12 @@ if [[ $(uname || true) != MINGW* ]]; then # if we are not on pure Windows fi if [[ "${WSL}" == "0" ]]; then log notice "Ensure python version is recent enough for using latest ansible-core" - python3 -c "import sys; print(sys.version_info[:2]); sys.exit(not sys.version_info[:2]>=(3, 10))" - python3 -m pip install -r "https://raw.githubusercontent.com/ansible/creator-ee/${EE_VERSION}/_build/requirements.txt" -r .config/requirements.in + python3 -c "import sys; sys.exit(0 if sys.version_info[:2]>=(3, 10) else 1);" + python3 -m pip install -q -r "https://raw.githubusercontent.com/ansible/creator-ee/${EE_VERSION}/_build/requirements.txt" -r .config/requirements.in else # Under WSL we do not use our constraints because github runners has ubuntu 20.04 with python3.9 which is too old - python3 -c "import sys; print(sys.version_info[:2]); sys.exit(not sys.version_info[:2]>=(3, 9))" - python3 -m pip install -r .config/requirements.in + python3 -c "import sys; sys.exit(0 if sys.version_info[:2]>=(3, 9) else 1);" + python3 -m pip install -q -r .config/requirements.in fi fi @@ -333,12 +333,16 @@ creator-ee: ansible-lint: ${EE_ANSIBLE_LINT_VERSION} EOF -log notice "Install node deps using either yarn or npm" if [[ -f yarn.lock ]]; then - yarn install + command -v yarn >/dev/null 2>&1 || npm install -g yarn + yarn --version + CMD="yarn install --immutable" + # --immutable-cache --check-cache else - npm ci --no-audit + CMD="npm ci --no-audit" fi +log notice "Install node deps using: ${CMD}" +$CMD [[ $ERR -eq 0 ]] && level=notice || level=error log "${level}" "${0##*/} -> out/log/manifest.yml and returned ${ERR}" From 651f53edb0f0167cdf023b414a5e70414cc8d7e3 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 24 Jan 2024 14:01:32 +0000 Subject: [PATCH 538/558] Do not allocate pseudo tty when running containers (#623) --- src/services/executionEnvironment.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/services/executionEnvironment.ts b/src/services/executionEnvironment.ts index 0fee3ac4e..f74bbdd97 100644 --- a/src/services/executionEnvironment.ts +++ b/src/services/executionEnvironment.ts @@ -432,7 +432,9 @@ export class ExecutionEnvironment { this.cleanUpContainer(containerName); try { - let command = `${this._container_engine} run --rm -it -d `; + // Do not add '-t' option when running the containers as this causes stderr noise, such: + // The input device is not a TTY. The --tty and--interactive flags might not work properly + let command = `${this._container_engine} run -i --rm -d `; if (this.settingsVolumeMounts && this.settingsVolumeMounts.length > 0) { command += this.settingsVolumeMounts.join(" "); } From 07ce1cb5e08d9056edf23d047c5ff7e9172b25c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Jan 2024 14:04:34 +0000 Subject: [PATCH 539/558] Bump ansible/creator-ee from v0.21.0 to v0.22.0 in /.config (#618) Bumps [ansible/creator-ee](https://github.com/ansible/creator-ee) from v0.21.0 to v0.22.0. - [Release notes](https://github.com/ansible/creator-ee/releases) - [Commits](https://github.com/ansible/creator-ee/compare/v0.21.0...v0.22.0) --- updated-dependencies: - dependency-name: ansible/creator-ee dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sorin Sbarnea --- .config/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/Dockerfile b/.config/Dockerfile index 7483dc434..cad915877 100644 --- a/.config/Dockerfile +++ b/.config/Dockerfile @@ -1,4 +1,4 @@ -FROM quay.io/ansible/creator-ee:v0.21.0 as DEFAULT_EE +FROM quay.io/ansible/creator-ee:v0.22.0 as DEFAULT_EE # This file is updated by dependabot and used to determine not only which # version of creator-ee we are supposed to use for testing execution # environments but also to dynamically retrieve the same set of constraints From 8e4781e2497631be157b1b8d2aad45874ed80f3d Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 24 Jan 2024 15:13:44 +0000 Subject: [PATCH 540/558] Replace nvm with asdf (#624) --- .config/dictionary.txt | 2 +- .github/workflows/task.yml | 47 ++++++++++++++++++++------------------ .gitignore | 1 - .tool-versions | 1 + Taskfile.yml | 43 +++++++++++++++++++--------------- tools/test-setup.sh | 29 ++++++++--------------- tools/vscode.sh | 1 + 7 files changed, 62 insertions(+), 62 deletions(-) create mode 100644 .tool-versions diff --git a/.config/dictionary.txt b/.config/dictionary.txt index e93794394..505d4a2e6 100644 --- a/.config/dictionary.txt +++ b/.config/dictionary.txt @@ -38,6 +38,7 @@ deps devel direnv dirhtml +dirmngr docker doctree doctrees @@ -76,7 +77,6 @@ notfound npmjs npmrc nvim -nvmrc parseable patchback pgrep diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index f89d3305e..321587723 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -42,8 +42,8 @@ jobs: - "16" task-name: - vscode - - test-node14 - - test-node16 + - test + - test-node-lts upload-artifact: - false name: @@ -68,7 +68,7 @@ jobs: steps: - name: Disable autocrlf - if: "contains(matrix.os, 'windows')" + if: contains(matrix.os, 'windows') run: |- git config --global core.autocrlf false git config --global core.eol lf @@ -76,6 +76,10 @@ jobs: - uses: actions/checkout@v4 + - name: Setup asdf + if: "!contains(matrix.shell, 'wsl')" + uses: asdf-vm/actions/install@v3 + # https://github.com/marketplace/actions/setup-wsl - name: Activate WSL if: "contains(matrix.shell, 'wsl')" @@ -84,7 +88,7 @@ jobs: set-as-default: 'true' # we want to load user profile # https://github.com/Vampire/setup-wsl#wsl-shell-command - wsl-shell-command: "bash -euo pipefail" + wsl-shell-command: "bash -l -euo pipefail" # https://github.com/MicrosoftDocs/WSL/blob/main/WSL/wsl-config.md#L159 wsl-conf: | [automount] @@ -98,13 +102,17 @@ jobs: hostname = wsl additional-packages: curl + dirmngr + gawk git + gpg make python3-dev python3-pip python3-venv qemu-user-static xvfb + # asdf nodejs plugin requires: dirmngr gpg curl gawk - name: Set up Python ${{ matrix.python_version || '3.10' }} if: "!contains(matrix.shell, 'wsl')" @@ -120,7 +128,6 @@ jobs: ~/.cache/npm ~/.cache/pip ~/.cache/yarn - ~/.nvm/.cache ~/Library/Caches/pip key: > ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles( @@ -152,23 +159,6 @@ jobs: sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin task --version - - name: Dump node version into .nvmrc file - # save node version in .nvmrc file by looking for a pattern like - # node12 in job name. If pattern is not found it uses 'current' alias - if: "!contains(matrix.shell, 'wsl')" - run: > - python3 -c 'import os, re; - v = re.search("node(\d+)", os.environ.get("JOB_NAME", "")) or ["", "current"]; - print(v[1])' > .nvmrc - - - name: Use node - # as Windows executables are exposed inside WSL at top of PATH, we - # would end with broken npm script in PATH on wsl. - if: "!contains(matrix.shell, 'wsl')" - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - - name: Install task inside WSL if: "contains(matrix.shell, 'wsl')" run: | @@ -177,6 +167,19 @@ jobs: echo $PATH command -v task + - name: Install asdf inside WSL + if: "contains(matrix.shell, 'wsl')" + run: | + set -ex + git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0 + echo '. "$HOME/.asdf/asdf.sh"' >> ~/.bashrc + export ASDF_DIR="$HOME/.asdf" + . "$HOME/.asdf/asdf.sh" + asdf plugin add nodejs + asdf plugin add python + asdf install + asdf info + - run: task setup - name: task ${{ matrix.task-name }} diff --git a/.gitignore b/.gitignore index e564d6624..1bb646c2e 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,6 @@ UNKNOWN.egg-info change-notes-*.md # Ignored because we support multiple versions and switch between them -.nvmrc .node-version .task .venv diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 000000000..4c1fdbc60 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +nodejs 18.19.0 20.11.0 diff --git a/Taskfile.yml b/Taskfile.yml index 1694fda03..e0bc4354f 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -10,10 +10,6 @@ env: &env vars: HOSTNAME: sh: echo ${HOSTNAME:-localhost} - NODE_ENV: | - [ -z "$NVM_DIR" ] && export NVM_DIR="$HOME/.nvm"; - [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" --silent; - [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"; EE_VERSION: sh: ./tools/get-image-version tasks: @@ -25,7 +21,6 @@ tasks: VERSION: sh: node -p "require('./package.json').version" cmds: - - bash -c '{{ .NODE_ENV }} nvm install' - task: lint - task: package - task: docs @@ -85,6 +80,11 @@ tasks: - setup cmds: - npm install -g npm@latest + # 1st node version is the implicit one and must match node version from + # vscode about dialog and be within supported range from https://www.npmjs.com/package/vscode-extension-tester + # as we want to avoid using different node versions across the projects. + # 2nd node version is used for preparing for new versions + - asdf local nodejs latest:18 latest:$(asdf nodejs resolve lts) - $VIRTUAL_ENV/bin/python -m pre_commit autoupdate # bumps some developments dependencies - npx ncu -u --dep dev @@ -110,8 +110,9 @@ tasks: - src/**/*.* - test/**/*.* - tools/**/*.* - test: - desc: Run all tests + .test: + # Keep the desc empty to hide entry when listing + # desc: Run all tests vars: ENGINE: sh: bash -c "command -v docker | head -n 1" @@ -124,18 +125,22 @@ tasks: - > source $VIRTUAL_ENV/bin/activate && command -v ansible-lint && - bash -c '{{ .NODE_ENV }} npm run test' + npm run test interactive: true - test-node14: - desc: Run all tests using node 14 + test: + desc: Run all tests using node (same version as vscode) cmds: - - bash -c '{{ .NODE_ENV }} nvm install 14' - - task: test - test-node16: - desc: Run all tests using node 16 + - bash -c 'asdf local nodejs latest:18 latest:$(asdf nodejs resolve lts)' + - task: .test + test-node-lts: + desc: Run all tests using node-lts (future) cmds: - - bash -c '{{ .NODE_ENV }} nvm install 16' - - task: test + # switch to node-lts + - bash -c 'asdf local nodejs latest:$(asdf nodejs resolve lts) latest:18' + - task: .test + - node --version + # restore implicit node version + - bash -c 'asdf local nodejs latest:18 latest:$(asdf nodejs resolve lts)' test-with-ee: desc: Run only ee tests deps: @@ -143,7 +148,7 @@ tasks: cmds: - > source $VIRTUAL_ENV/bin/activate && - bash -c '{{ .NODE_ENV }} npm run test-with-ee' + bash -c 'npm run test-with-ee' interactive: true test-without-ee: desc: Run only non-ee tests @@ -152,7 +157,7 @@ tasks: cmds: - > source $VIRTUAL_ENV/bin/activate && - bash -c '{{ .NODE_ENV }} npm run test-without-ee' + bash -c 'npm run test-without-ee' interactive: true package: desc: Package extension @@ -167,7 +172,7 @@ tasks: - "*.vsix" cmds: - rm -f *.tgz - - bash -c '{{ .NODE_ENV }} npm pack' + - bash -c 'npm pack' silent: false pr: desc: Opens a pull request using gh diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 3d5fd8b44..234ac282d 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -54,6 +54,12 @@ log () { >&2 echo -e "${prefix}${2}${NC}" } +log notice "Install latest lts version of nodejs (used by 'node-lts' job)" +asdf install + +log notice "Report current build tool versions..." +asdf current + if [[ -f "/usr/bin/apt-get" ]]; then INSTALL=0 # qemu-user-static is required by podman on arm64 @@ -154,8 +160,8 @@ command -v gh >/dev/null 2>&1 || { sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null - sudo apt update - sudo apt install gh + sudo apt-get update + sudo apt-get install gh else command -v dnf >/dev/null 2>&1 && sudo dnf install -y gh fi @@ -246,23 +252,9 @@ for CMD in ansible ansible-lint; do done unset CMD -command -v nvm >/dev/null 2>&1 || { - # define its location (needed) - [[ -z "${NVM_DIR:-}" ]] && export NVM_DIR="${HOME}/.nvm"; - # install if missing - [[ ! -s "${NVM_DIR:-}/nvm.sh" ]] && { - log warning "Installing missing nvm" - curl -s -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash - } - # activate nvm - # shellcheck disable=1091 - . "${NVM_DIR:-${HOME}/.nvm}/nvm.sh" - # shellcheck disable=1091 - [[ -s "/usr/local/opt/nvm/nvm.sh" ]] && . "/usr/local/opt/nvm/nvm.sh"; -} command -v npm >/dev/null 2>&1 || { log notice "Installing nodejs stable." - nvm install stable + asdf install } # Check if npm has permissions to install packages (system installed does not) # Share https://stackoverflow.com/a/59227497/99834 @@ -315,12 +307,11 @@ env: tools: ansible-lint: $(get_version ansible-lint) ansible: $(get_version ansible) + asdf: $(get_version asdf) bash: $(get_version bash) gh: $(get_version gh || echo null) git: $(get_version git) node: $(get_version node) - npm: $(get_version npm) - nvm: $(get_version nvm || echo null) pre-commit: $(get_version pre-commit) python: $(get_version python) task: $(get_version task) diff --git a/tools/vscode.sh b/tools/vscode.sh index dc1cb7737..e6cc1962a 100755 --- a/tools/vscode.sh +++ b/tools/vscode.sh @@ -12,6 +12,7 @@ else git checkout main git pull --ff-only fi +asdf local nodejs latest:18 unset VIRTUAL_ENV From 31a18f30a60c6a5f82bb70a1adc33e4c8b527fd0 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 24 Jan 2024 15:37:32 +0000 Subject: [PATCH 541/558] Address no-var-requires with fuse (#625) --- test/helper.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/helper.ts b/test/helper.ts index 93b9b5130..a68f6ff0b 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -6,8 +6,7 @@ import { createConnection, TextDocuments } from "vscode-languageserver/node"; import { ValidationManager } from "../src/services/validationManager"; import { ExtensionSettings } from "../src/interfaces/extensionSettings"; -// eslint-disable-next-line @typescript-eslint/no-var-requires -const Fuse = require("fuse.js"); +import Fuse from "fuse.js"; export const FIXTURES_BASE_PATH = path.join("test", "fixtures"); export const ANSIBLE_COLLECTIONS_FIXTURES_BASE_PATH = path.resolve( @@ -106,7 +105,6 @@ export function smartFilter(completionList, triggerCharacter) { const searcher = new Fuse(completionList, { keys: ["filterText"], threshold: 0.4, - refIndex: false, }); let filteredCompletionList = triggerCharacter @@ -119,7 +117,6 @@ export function smartFilter(completionList, triggerCharacter) { const newSearcher = new Fuse(completionList, { keys: ["label"], threshold: 0.2, - refIndex: false, }); filteredCompletionList = triggerCharacter From 13dba706e9b987560b739d7eacb131e407f8bd1c Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 25 Jan 2024 01:17:38 +0000 Subject: [PATCH 542/558] Address no-var-requires with loading of package.json (#626) --- test/utils/runCommand.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/utils/runCommand.test.ts b/test/utils/runCommand.test.ts index f709b51eb..9ca4dab6b 100644 --- a/test/utils/runCommand.test.ts +++ b/test/utils/runCommand.test.ts @@ -4,10 +4,12 @@ import { WorkspaceManager } from "../../src/services/workspaceManager"; import { createConnection } from "vscode-languageserver/node"; import { getDoc } from "../helper"; import * as path from "path"; +import { readFileSync } from "fs"; describe("commandRunner", () => { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const pkgJSON = require(path.resolve(__dirname, "..", "..", "package.json")); + const packageJsonPath = require.resolve("../../package.json"); + const packageJsonContents = readFileSync(packageJsonPath).toString(); + const pkgJSON = JSON.parse(packageJsonContents); const tests = [ { From 8f8f9beecd2d7ec70ba8293d4bf6f5031fcf1408 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sat, 27 Jan 2024 15:41:37 +0000 Subject: [PATCH 543/558] Improve test-setup.sh (#627) --- .envrc | 2 +- .github/workflows/task.yml | 27 ++++----------------------- .tool-versions | 1 + Taskfile.yml | 21 +++++++++------------ tools/test-setup.sh | 13 +++++++++++-- 5 files changed, 26 insertions(+), 38 deletions(-) diff --git a/.envrc b/.envrc index e578f9bb3..d9ed7e59b 100644 --- a/.envrc +++ b/.envrc @@ -5,7 +5,7 @@ # This VIRTUAL_ENV value is also configured inside .vscode/settings.json: export HOSTNAME="${HOSTNAME:-localhost}" -export VIRTUAL_ENV="out/venvs/${HOSTNAME}" +export VIRTUAL_ENV="${PWD}/out/venvs/${HOSTNAME}" # Activate virtualenv (creates it if needed) layout python diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 321587723..7c5a25e8a 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -17,7 +17,9 @@ env: FORCE_COLOR: "1" # make mocha output colorful # https://docs.github.com/en/actions/learn-github-actions/environment-variables # https://devblogs.microsoft.com/commandline/share-environment-vars-between-wsl-and-windows/ - WSLENV: CI:FORCE_COLOR:GITHUB_ACTION:GITHUB_ACTION_PATH/p:GITHUB_ACTION_REPOSITORY:GITHUB_WORKFLOW:GITHUB_WORKSPACE/p:GITHUB_PATH/p + WSLENV: HOSTNAME:CI:FORCE_COLOR:GITHUB_ACTION:GITHUB_ACTION_PATH/p:GITHUB_ACTION_REPOSITORY:GITHUB_WORKFLOW:GITHUB_WORKSPACE/p:GITHUB_PATH/p + # We define a hostname because otherwise the variable might not always be accessible on runners. + HOSTNAME: gha # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: @@ -145,28 +147,6 @@ jobs: ~/.config/containers key: ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles('package.json', 'yarn.lock', '.config/Dockerfile', '**/Taskfile.yml', 'tools/*.*') }} - - name: Install Task - if: "!contains(matrix.shell, 'wsl')" - uses: arduino/setup-task@v1 - with: - version: 3.x - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Install Task (wsl) - if: "contains(matrix.shell, 'wsl')" - run: | - sudo apt-get update && sudo apt-get install -y curl - sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin - task --version - - - name: Install task inside WSL - if: "contains(matrix.shell, 'wsl')" - run: | - mkdir -p ~/.local/bin - sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin - echo $PATH - command -v task - - name: Install asdf inside WSL if: "contains(matrix.shell, 'wsl')" run: | @@ -177,6 +157,7 @@ jobs: . "$HOME/.asdf/asdf.sh" asdf plugin add nodejs asdf plugin add python + asdf plugin add task asdf install asdf info diff --git a/.tool-versions b/.tool-versions index 4c1fdbc60..555e97572 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1,2 @@ nodejs 18.19.0 20.11.0 +task 3.33.1 diff --git a/Taskfile.yml b/Taskfile.yml index e0bc4354f..d4897bece 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -3,15 +3,13 @@ version: "3" env: &env # basically the same thing from .envrc file: - VIRTUAL_ENV: # "{{.VIRTUAL_ENV}}" - sh: echo "${VIRTUAL_ENV:-out/venvs/${HOSTNAME:-localhost}}" # Avoid undesired extra hints from docker when pulling images DOCKER_CLI_HINTS: "false" vars: - HOSTNAME: - sh: echo ${HOSTNAME:-localhost} EE_VERSION: sh: ./tools/get-image-version + VIRTUAL_ENV: + sh: echo "${VIRTUAL_ENV:-${PWD}/out/venvs/${HOSTNAME:-localhost}}" tasks: default: desc: Run most commands @@ -38,10 +36,9 @@ tasks: cmds: # Retrieve possibly missing commits: - $(git rev-parse --is-shallow-repository) && git fetch --unshallow > /dev/null || true - - git fetch --tags + - git fetch --tags --force - npm run generate-settings-readme - - source $VIRTUAL_ENV/bin/activate && - mkdocs build --strict + - "source {{.VIRTUAL_ENV}}/bin/activate && mkdocs build --strict" setup: desc: Install dependencies @@ -85,7 +82,7 @@ tasks: # as we want to avoid using different node versions across the projects. # 2nd node version is used for preparing for new versions - asdf local nodejs latest:18 latest:$(asdf nodejs resolve lts) - - $VIRTUAL_ENV/bin/python -m pre_commit autoupdate + - "{{.VIRTUAL_ENV}}/bin/python -m pre_commit autoupdate" # bumps some developments dependencies - npx ncu -u --dep dev # running install after ncu is needed in order to update the lock file @@ -98,7 +95,7 @@ tasks: <<: *env PRE_COMMIT_COLOR: always cmds: - - $VIRTUAL_ENV/bin/python -m pre_commit run -a + - "{{.VIRTUAL_ENV}}/bin/python -m pre_commit run -a" silent: true sources: - "*.*" @@ -123,7 +120,7 @@ tasks: # Tests that container engine is functional and that we have the image: - "{{.ENGINE}} run -i ghcr.io/ansible/creator-ee:{{ .EE_VERSION }} ansible-lint --version" - > - source $VIRTUAL_ENV/bin/activate && + source {{.VIRTUAL_ENV}}/bin/activate && command -v ansible-lint && npm run test interactive: true @@ -147,7 +144,7 @@ tasks: - setup cmds: - > - source $VIRTUAL_ENV/bin/activate && + source {{.VIRTUAL_ENV}}/bin/activate && bash -c 'npm run test-with-ee' interactive: true test-without-ee: @@ -156,7 +153,7 @@ tasks: - setup cmds: - > - source $VIRTUAL_ENV/bin/activate && + source {{.VIRTUAL_ENV}}/bin/activate && bash -c 'npm run test-without-ee' interactive: true package: diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 234ac282d..0a0c02d07 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -7,7 +7,6 @@ set -euo pipefail IMAGE=ghcr.io/ansible/creator-ee:$(./tools/get-image-version) PIP_LOG_FILE=out/log/pip.log -HOSTNAME="${HOSTNAME:-localhost}" ERR=0 EE_ANSIBLE_VERSION=null EE_ANSIBLE_LINT_VERSION=null @@ -54,6 +53,11 @@ log () { >&2 echo -e "${prefix}${2}${NC}" } +if [[ -z "${HOSTNAME:-}" ]]; then + log error "A valid HOSTNAME environment variable is required but is missing or empty." + exit 2 +fi + log notice "Install latest lts version of nodejs (used by 'node-lts' job)" asdf install @@ -176,7 +180,12 @@ if [[ "$(command -v npm || true)" == '/mnt/c/Program Files/nodejs/npm' ]]; then nodejs gcc g++ make python3-dev fi -VIRTUAL_ENV=${VIRTUAL_ENV:-out/venvs/${HOSTNAME}} +# if a virtualenv is already active, ensure is the expected one +EXPECTED_VENV="${PWD}/out/venvs/${HOSTNAME}" +if [[ -d "${VIRTUAL_ENV:-}" && "${VIRTUAL_ENV:-}" != "${EXPECTED_VENV}" ]]; then + log warning "Detected another virtualenv active ($VIRTUAL_ENV) than expected one, switching it to ${EXPECTED_VENV}" +fi +VIRTUAL_ENV=${EXPECTED_VENV} if [[ ! -d "${VIRTUAL_ENV}" ]]; then log notice "Creating virtualenv ..." python3 -m venv "${VIRTUAL_ENV}" From bd061aa5db8d9b047e972e03d1181cdb2c970992 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sat, 27 Jan 2024 16:13:40 +0000 Subject: [PATCH 544/558] More build updates (#629) --- .github/workflows/ack.yml | 4 +- .github/workflows/push.yml | 4 +- .github/workflows/task.yml | 2 - .pre-commit-config.yaml | 2 +- Taskfile.yml | 1 + package-lock.json | 753 +++++++------------------------------ package.json | 8 +- tools/test-setup.sh | 2 +- 8 files changed, 145 insertions(+), 631 deletions(-) diff --git a/.github/workflows/ack.yml b/.github/workflows/ack.yml index 5880addda..958b0b647 100644 --- a/.github/workflows/ack.yml +++ b/.github/workflows/ack.yml @@ -1,4 +1,4 @@ -# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml +# See https://github.com/ansible/team-devtools/blob/main/.github/workflows/ack.yml name: ack on: pull_request_target: @@ -6,4 +6,4 @@ on: jobs: ack: - uses: ansible-community/devtools/.github/workflows/ack.yml@main + uses: ansible/team-devtools/.github/workflows/ack.yml@main diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index e8239f701..7fa9d2a58 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -1,4 +1,4 @@ -# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/push.yml +# See https://github.com/ansible/team-devtools/blob/main/.github/workflows/push.yml name: push on: push: @@ -9,4 +9,4 @@ on: jobs: ack: - uses: ansible-community/devtools/.github/workflows/push.yml@main + uses: ansible/team-devtools/.github/workflows/push.yml@main diff --git a/.github/workflows/task.yml b/.github/workflows/task.yml index 7c5a25e8a..8f8044bf5 100644 --- a/.github/workflows/task.yml +++ b/.github/workflows/task.yml @@ -40,8 +40,6 @@ jobs: matrix: os: - ubuntu-22.04 - node-version: - - "16" task-name: - vscode - test diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d89bdf2e5..13b9713de 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -105,7 +105,7 @@ repos: docs/settings.md $ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v9.0.0-alpha.1 + rev: v9.0.0-alpha.2 hooks: - id: eslint args: diff --git a/Taskfile.yml b/Taskfile.yml index d4897bece..306bd5e54 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -83,6 +83,7 @@ tasks: # 2nd node version is used for preparing for new versions - asdf local nodejs latest:18 latest:$(asdf nodejs resolve lts) - "{{.VIRTUAL_ENV}}/bin/python -m pre_commit autoupdate" + - npm outdated # bumps some developments dependencies - npx ncu -u --dep dev # running install after ncu is needed in order to update the lock file diff --git a/package-lock.json b/package-lock.json index 7d63f085a..b205acfe3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@flatten-js/interval-tree": "^1.1.2", "antsibull-docs": "^1.0.0", - "glob": "^9.3.2", + "glob": ">9.3.2", "ini": "^4.1.1", "lodash": "^4.17.21", "uuid": "^9.0.1", @@ -29,8 +29,8 @@ "@types/ini": "^4.1.0", "@types/lodash": "^4.14.202", "@types/mocha": "^10.0.6", - "@types/node": "^20.11.5", - "@types/uuid": "^9.0.7", + "@types/node": "^20.11.7", + "@types/uuid": "^9.0.8", "@types/vscode": "^1.76.0", "@typescript-eslint/eslint-plugin": "^6.19.1", "@typescript-eslint/parser": "^6.19.1", @@ -40,7 +40,7 @@ "fuse.js": "^7.0.0", "handlebars": "^4.7.8", "mocha": "^10.2.0", - "npm-check-updates": "^16.14.12", + "npm-check-updates": "^16.14.14", "nyc": "^15.1.0", "prettier": "^3.2.4", "rimraf": "^5.0.5", @@ -683,7 +683,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -700,7 +699,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -712,7 +710,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "engines": { "node": ">=12" }, @@ -723,14 +720,12 @@ "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -747,7 +742,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -762,7 +756,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -1147,7 +1140,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true, "engines": { "node": ">=14" @@ -1382,9 +1374,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", - "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", + "version": "20.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.7.tgz", + "integrity": "sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -1397,9 +1389,9 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", - "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==", + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", "dev": true }, "node_modules/@types/vscode": { @@ -1739,7 +1731,6 @@ "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" } @@ -1748,7 +1739,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2089,89 +2079,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/cacache/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -2399,7 +2306,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2410,8 +2316,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-support": { "version": "1.1.3", @@ -2503,7 +2408,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2698,8 +2602,7 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/electron-to-chromium": { "version": "1.4.169", @@ -2710,8 +2613,7 @@ "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encoding": { "version": "0.1.13", @@ -3194,19 +3096,11 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "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==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", @@ -3320,14 +3214,18 @@ } }, "node_modules/glob": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.2.tgz", - "integrity": "sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^7.4.1", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -3356,15 +3254,41 @@ "balanced-match": "^1.0.0" } }, + "node_modules/glob/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob/node_modules/minimatch": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", - "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3819,7 +3743,6 @@ "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" } @@ -3957,8 +3880,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -4123,7 +4045,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -4478,11 +4399,11 @@ "dev": true }, "node_modules/minipass": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", - "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-collect": { @@ -4526,15 +4447,6 @@ "encoding": "^0.1.13" } }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -5159,9 +5071,9 @@ } }, "node_modules/npm-check-updates": { - "version": "16.14.12", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.14.12.tgz", - "integrity": "sha512-5FvqaDX8AqWWTDQFbBllgLwoRXTvzlqVIRSKl9Kg8bYZTfNwMnrp1Zlmb5e/ocf11UjPTc+ShBFjYQ7kg6FL0w==", + "version": "16.14.14", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.14.14.tgz", + "integrity": "sha512-Y3ajS/Ep40jM489rLBdz9jehn/BMil5s9fA4PSr2ZJxxSmtLWCSmRqsI2IEZ9Nb3MTMu8a3s7kBs0l+JbjdkTA==", "dev": true, "dependencies": { "chalk": "^5.3.0", @@ -5821,7 +5733,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -5849,14 +5760,6 @@ "node": "14 || >=16.14" } }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -6184,89 +6087,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/read-package-json/node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/read-package-json/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -6397,117 +6217,34 @@ }, "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/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", - "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", - "dev": true, - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/rimraf/node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 4" } }, - "node_modules/rimraf/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "engines": { - "node": ">=16 || 14 >=14.17" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/rimraf/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/rimraf": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, "engines": { "node": ">=14" }, @@ -6618,7 +6355,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6630,7 +6366,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -6846,15 +6581,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/ssri/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -6888,7 +6614,6 @@ "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", @@ -6903,7 +6628,6 @@ "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", @@ -6917,7 +6641,6 @@ "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" }, @@ -6930,7 +6653,6 @@ "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" }, @@ -7450,7 +7172,6 @@ "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" }, @@ -7575,7 +7296,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -8220,7 +7940,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "requires": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -8233,26 +7952,22 @@ "ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" }, "ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -8263,7 +7978,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "requires": { "ansi-regex": "^6.0.1" } @@ -8272,7 +7986,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "requires": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -8563,7 +8276,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true }, "@pnpm/network.ca-file": { @@ -8755,9 +8467,9 @@ "dev": true }, "@types/node": { - "version": "20.11.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", - "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", + "version": "20.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.7.tgz", + "integrity": "sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A==", "dev": true, "requires": { "undici-types": "~5.26.4" @@ -8770,9 +8482,9 @@ "dev": true }, "@types/uuid": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", - "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==", + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", "dev": true }, "@types/vscode": { @@ -8991,14 +8703,12 @@ "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 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -9239,61 +8949,6 @@ "ssri": "^10.0.0", "tar": "^6.1.11", "unique-filename": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - } - }, - "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - } } }, "cacheable-lookup": { @@ -9457,7 +9112,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -9465,8 +9119,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-support": { "version": "1.1.3", @@ -9548,7 +9201,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -9682,8 +9334,7 @@ "eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "electron-to-chromium": { "version": "1.4.169", @@ -9694,8 +9345,7 @@ "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encoding": { "version": "0.1.13", @@ -10043,20 +9693,13 @@ "dev": true, "requires": { "minipass": "^7.0.3" - }, - "dependencies": { - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - } } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "fsevents": { "version": "2.3.2", @@ -10130,14 +9773,15 @@ "dev": true }, "glob": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.2.tgz", - "integrity": "sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "requires": { - "fs.realpath": "^1.0.0", - "minimatch": "^7.4.1", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "dependencies": { "brace-expansion": { @@ -10148,13 +9792,27 @@ "balanced-match": "^1.0.0" } }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, "minimatch": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.3.tgz", - "integrity": "sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "requires": { "brace-expansion": "^2.0.1" } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" } } }, @@ -10505,8 +10163,7 @@ "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 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "4.0.3", @@ -10596,8 +10253,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -10724,7 +10380,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, "requires": { "@isaacs/cliui": "^8.0.2", "@pkgjs/parseargs": "^0.11.0" @@ -10991,9 +10646,9 @@ "dev": true }, "minipass": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", - "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==" + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" }, "minipass-collect": { "version": "1.0.2", @@ -11025,14 +10680,6 @@ "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" - }, - "dependencies": { - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - } } }, "minipass-flush": { @@ -11527,9 +11174,9 @@ } }, "npm-check-updates": { - "version": "16.14.12", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.14.12.tgz", - "integrity": "sha512-5FvqaDX8AqWWTDQFbBllgLwoRXTvzlqVIRSKl9Kg8bYZTfNwMnrp1Zlmb5e/ocf11UjPTc+ShBFjYQ7kg6FL0w==", + "version": "16.14.14", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.14.14.tgz", + "integrity": "sha512-Y3ajS/Ep40jM489rLBdz9jehn/BMil5s9fA4PSr2ZJxxSmtLWCSmRqsI2IEZ9Nb3MTMu8a3s7kBs0l+JbjdkTA==", "dev": true, "requires": { "chalk": "^5.3.0", @@ -12026,8 +11673,7 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-scurry": { "version": "1.10.1", @@ -12042,11 +11688,6 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==" - }, - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" } } }, @@ -12271,61 +11912,6 @@ "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^5.0.0", "npm-normalize-package-bin": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - } - }, - "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - } } }, "read-package-json-fast": { @@ -12449,61 +12035,6 @@ "dev": true, "requires": { "glob": "^10.3.7" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - } - }, - "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - } } }, "run-parallel": { @@ -12582,7 +12113,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -12590,8 +12120,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "signal-exit": { "version": "3.0.7", @@ -12760,14 +12289,6 @@ "dev": true, "requires": { "minipass": "^7.0.3" - }, - "dependencies": { - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - } } }, "string_decoder": { @@ -12791,7 +12312,6 @@ "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, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12802,7 +12322,6 @@ "version": "npm:string-width@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, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12813,7 +12332,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -12822,7 +12340,6 @@ "version": "npm:strip-ansi@6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -13193,7 +12710,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -13283,7 +12799,6 @@ "version": "npm:wrap-ansi@7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", diff --git a/package.json b/package.json index 4c7868444..bea427704 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "dependencies": { "@flatten-js/interval-tree": "^1.1.2", "antsibull-docs": "^1.0.0", - "glob": "^9.3.2", + "glob": ">=9.3.2", "ini": "^4.1.1", "lodash": "^4.17.21", "uuid": "^9.0.1", @@ -65,8 +65,8 @@ "@types/ini": "^4.1.0", "@types/lodash": "^4.14.202", "@types/mocha": "^10.0.6", - "@types/node": "^20.11.5", - "@types/uuid": "^9.0.7", + "@types/node": "^20.11.7", + "@types/uuid": "^9.0.8", "@types/vscode": "^1.76.0", "@typescript-eslint/eslint-plugin": "^6.19.1", "@typescript-eslint/parser": "^6.19.1", @@ -76,7 +76,7 @@ "fuse.js": "^7.0.0", "handlebars": "^4.7.8", "mocha": "^10.2.0", - "npm-check-updates": "^16.14.12", + "npm-check-updates": "^16.14.14", "nyc": "^15.1.0", "prettier": "^3.2.4", "rimraf": "^5.0.5", diff --git a/tools/test-setup.sh b/tools/test-setup.sh index 0a0c02d07..869db09f6 100755 --- a/tools/test-setup.sh +++ b/tools/test-setup.sh @@ -74,7 +74,7 @@ if [[ -f "/usr/bin/apt-get" ]]; then "${DEB}" || true)" != 'installed' ]] && INSTALL=1 done if [[ "${INSTALL}" -eq 1 ]]; then - printf '%s\n' "We need sudo to install some packages: ${DEBS[*]}" + log warning "We need sudo to install some packages: ${DEBS[*]}" # mandatory or other apt-get commands fail sudo apt-get update -qq -o=Dpkg::Use-Pty=0 # avoid outdated ansible and pipx From 11ece879d3d46999110e8f9e3d31ca0856a10b60 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 12 Feb 2024 11:26:02 +0000 Subject: [PATCH 545/558] chore: pre-commit autoupdate (#631) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/igorshubovych/markdownlint-cli: v0.38.0 → v0.39.0](https://github.com/igorshubovych/markdownlint-cli/compare/v0.38.0...v0.39.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 13b9713de..0aa85338f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -96,7 +96,7 @@ repos: additional_dependencies: - prettier - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.38.0 + rev: v0.39.0 hooks: - id: markdownlint exclude: > From e000942a55bcbe3b11429e4c8cb45111181e7c8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Feb 2024 11:29:01 +0000 Subject: [PATCH 546/558] Bump arduino/setup-task from 1 to 2 (#632) Bumps [arduino/setup-task](https://github.com/arduino/setup-task) from 1 to 2. - [Release notes](https://github.com/arduino/setup-task/releases) - [Commits](https://github.com/arduino/setup-task/compare/v1...v2) --- updated-dependencies: - dependency-name: arduino/setup-task dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/prepare-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 42b9f7aa4..4bf04dea3 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -24,7 +24,7 @@ jobs: node-version: 16.x registry-url: 'https://registry.npmjs.org' - name: Install Task - uses: arduino/setup-task@v1 + uses: arduino/setup-task@v2 with: version: 3.x repo-token: ${{ secrets.GITHUB_TOKEN }} From 8447a0ac4bf0098f1662a14ad592b79285875aa6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Feb 2024 12:27:26 +0530 Subject: [PATCH 547/558] Bump ansible/creator-ee from v0.22.0 to v24.2.0 in /.config (#636) Bumps [ansible/creator-ee](https://github.com/ansible/creator-ee) from v0.22.0 to v24.2.0. - [Release notes](https://github.com/ansible/creator-ee/releases) - [Commits](https://github.com/ansible/creator-ee/compare/v0.22.0...v24.2.0) --- updated-dependencies: - dependency-name: ansible/creator-ee dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- .config/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/Dockerfile b/.config/Dockerfile index cad915877..a205da511 100644 --- a/.config/Dockerfile +++ b/.config/Dockerfile @@ -1,4 +1,4 @@ -FROM quay.io/ansible/creator-ee:v0.22.0 as DEFAULT_EE +FROM quay.io/ansible/creator-ee:v24.2.0 as DEFAULT_EE # This file is updated by dependabot and used to determine not only which # version of creator-ee we are supposed to use for testing execution # environments but also to dynamically retrieve the same set of constraints From 593c59bd65ac0d36f45cb2ea136114d89f253cb0 Mon Sep 17 00:00:00 2001 From: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> Date: Fri, 16 Feb 2024 12:37:44 +0530 Subject: [PATCH 548/558] Update node 18 and 20 version in CI for tests (#639) * update node 18 version for testing * update node 20 version --- .tool-versions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tool-versions b/.tool-versions index 555e97572..b216e670e 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -nodejs 18.19.0 20.11.0 +nodejs 18.19.1 20.11.1 task 3.33.1 From dcbfafc044866bff0e607f3651c16cf9b2e85081 Mon Sep 17 00:00:00 2001 From: Frank <5943122+fdie@users.noreply.github.com> Date: Fri, 16 Feb 2024 08:23:55 +0100 Subject: [PATCH 549/558] increase the maxBuffer to avoid truncated process stdout resulting in truncated/invalid JSON results (ie. ansible-lint) (#638) Co-authored-by: Frank Diebolt Co-authored-by: Priyam Sahoo <42550351+priyamsahoo@users.noreply.github.com> --- src/utils/commandRunner.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/utils/commandRunner.ts b/src/utils/commandRunner.ts index 08d86d7ef..efd4cb2c3 100644 --- a/src/utils/commandRunner.ts +++ b/src/utils/commandRunner.ts @@ -69,6 +69,7 @@ export class CommandRunner { encoding: "utf-8", cwd: currentWorkingDirectory, env: runEnv, + maxBuffer: 10 * 1000 * 1000, }); return result; From 257be94716067e9980b9e7b55f9447a4b50cff7e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Feb 2024 04:40:01 -0500 Subject: [PATCH 550/558] Bump ip from 2.0.0 to 2.0.1 (#640) Bumps [ip](https://github.com/indutny/node-ip) from 2.0.0 to 2.0.1. - [Commits](https://github.com/indutny/node-ip/compare/v2.0.0...v2.0.1) --- updated-dependencies: - dependency-name: ip dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index b205acfe3..faf894546 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@flatten-js/interval-tree": "^1.1.2", "antsibull-docs": "^1.0.0", - "glob": ">9.3.2", + "glob": ">=9.3.2", "ini": "^4.1.1", "lodash": "^4.17.21", "uuid": "^9.0.1", @@ -3689,9 +3689,9 @@ } }, "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", "dev": true }, "node_modules/is-binary-path": { @@ -10122,9 +10122,9 @@ "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==" }, "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", "dev": true }, "is-binary-path": { From 5be05b8641937011cee78eaa3e842e4f5eae2888 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 13 Mar 2024 13:15:41 +0000 Subject: [PATCH 551/558] Update ack.yml (#641) --- .github/workflows/ack.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ack.yml b/.github/workflows/ack.yml index 958b0b647..376206b8b 100644 --- a/.github/workflows/ack.yml +++ b/.github/workflows/ack.yml @@ -7,3 +7,4 @@ on: jobs: ack: uses: ansible/team-devtools/.github/workflows/ack.yml@main + secrets: inherit From 89607d09bdee056529f6ed34c43f2312d8d47dd5 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 15 Mar 2024 16:28:08 +0000 Subject: [PATCH 552/558] mv packages/ansible-language-server Related: https://github.com/ansible/vscode-ansible/issues/1134 --- .../ansible-language-server/.config}/Dockerfile | 0 .../ansible-language-server/.config}/dictionary.txt | 0 .../ansible-language-server/.config}/mypy.ini | 0 .../.config}/requirements.in | 0 .../ansible-language-server/.editorconfig | 0 .envrc => packages/ansible-language-server/.envrc | 0 .../ansible-language-server/.eslintrc.json | 0 .../ansible-language-server/.gitattributes | 0 .../ansible-language-server/.github}/CODEOWNERS | 0 .../.github}/CODE_OF_CONDUCT.md | 0 .../.github}/ISSUE_TEMPLATE/bug_report.yml | 0 .../.github}/ISSUE_TEMPLATE/config.yml | 0 .../.github}/ISSUE_TEMPLATE/feature_request.yml | 0 .../ansible-language-server/.github}/SECURITY.md | 0 .../ansible-language-server/.github}/dependabot.yml | 0 .../.github}/release-drafter.yml | 0 .../.github}/workflows/ack.yml | 0 .../.github}/workflows/prepare-release.yml | 0 .../.github}/workflows/publish.yml | 0 .../.github}/workflows/push.yml | 0 .../.github}/workflows/task.yml | 0 .../ansible-language-server/.gitignore | 0 .../ansible-language-server/.mocharc.yml | 0 .npmrc => packages/ansible-language-server/.npmrc | 0 .../ansible-language-server/.nycrc.yml | 0 .../ansible-language-server/.pre-commit-config.yaml | 0 .../ansible-language-server/.prettierignore | 0 .../ansible-language-server/.prettierrc.yaml | 0 .../ansible-language-server/.readthedocs.yml | 0 .../ansible-language-server/.tool-versions | 0 .../.vscode}/extensions.json | 0 .../ansible-language-server/.vscode}/launch.json | 0 .../ansible-language-server/.vscode}/settings.json | 0 .../ansible-language-server/.vscode}/tasks.json | 0 .../ansible-language-server/.vscodeignore | 0 LICENSE => packages/ansible-language-server/LICENSE | 0 .../ansible-language-server/README.md | 0 .../ansible-language-server/Taskfile.yml | 0 .../bin}/ansible-language-server | 0 .../ansible-language-server/codecov.yml | 0 .../ansible-language-server/cspell.config.yaml | 0 .../ansible-language-server/docs}/README.md | 0 .../docs}/changelog-fragments.d/350.feature.md | 0 .../ansible-language-server/docs}/changelog.md | 0 .../ansible-language-server/docs}/contributing.md | 0 .../ansible-language-server/docs}/development.md | 0 .../docs}/images/ansible-lint.gif | Bin .../docs}/images/favicon.ico | Bin .../docs}/images/go-to-definition.gif | Bin .../docs}/images/hover-documentation-module.png | Bin .../docs}/images/jinja-expression.gif | Bin .../ansible-language-server/docs}/images/logo.png | Bin .../ansible-language-server/docs}/images/logo.svg | 0 .../docs}/images/smart-completions.gif | Bin .../docs}/images/syntax-highlighting.png | Bin .../docs}/images/yaml-validation.gif | Bin .../ansible-language-server/docs}/settings.md | 0 .../ansible-language-server/icon.png | Bin .../ansible-language-server/mkdocs.yml | 0 .../ansible-language-server/out}/.gitignore | 0 .../ansible-language-server/package-lock.json | 0 .../ansible-language-server/package.json | 0 .../src}/ansibleLanguageService.ts | 0 .../src}/interfaces/documentMeta.ts | 0 .../src}/interfaces/extensionSettings.ts | 0 .../src}/interfaces/module.ts | 0 .../src}/interfaces/pluginRouting.ts | 0 .../src}/providers/completionProvider.ts | 0 .../src}/providers/completionProviderUtils.ts | 0 .../src}/providers/definitionProvider.ts | 0 .../src}/providers/hoverProvider.ts | 0 .../src}/providers/semanticTokenProvider.ts | 0 .../src}/providers/validationProvider.ts | 0 .../ansible-language-server/src}/server.ts | 0 .../src}/services/ansibleConfig.ts | 0 .../src}/services/ansibleInventory.ts | 0 .../src}/services/ansibleLint.ts | 0 .../src}/services/ansiblePlaybook.ts | 0 .../src}/services/docsLibrary.ts | 0 .../src}/services/docsLibraryUtilsForPAC.ts | 0 .../src}/services/executionEnvironment.ts | 0 .../src}/services/metadataLibrary.ts | 0 .../src}/services/settingsManager.ts | 0 .../src}/services/validationManager.ts | 0 .../src}/services/workspaceManager.ts | 0 .../ansible-language-server/src}/utils/ansible.ts | 0 .../src}/utils/commandRunner.ts | 0 .../src}/utils/docsFinder.ts | 0 .../src}/utils/docsFormatter.ts | 0 .../src}/utils/docsParser.ts | 0 .../ansible-language-server/src}/utils/execPath.ts | 0 .../src}/utils/getAnsibleMetaData.ts | 0 .../src}/utils/imagePuller.ts | 0 .../ansible-language-server/src}/utils/misc.ts | 0 .../ansible-language-server/src}/utils/pathUtils.ts | 0 .../ansible-language-server/src}/utils/yaml.ts | 0 .../ansible-language-server/test}/consoleOutput.ts | 0 .../ansible_collections/org_1/coll_1/galaxy.yml | 0 .../org_1/coll_1/plugins/modules/module_1.py | 0 .../org_1/coll_1/roles/role_1/defaults/main.yml | 0 .../org_1/coll_1/roles/role_1/meta/main.yml | 0 .../org_1/coll_1/roles/role_1/tasks/main.yml | 0 .../org_1/coll_1/roles/role_1/templates/motd.j2 | 0 .../ansible_collections/org_1/coll_2/galaxy.yml | 0 .../org_1/coll_2/plugins/modules/module_1.py | 0 .../org_1/coll_2/plugins/modules/module_2.py | 0 .../ansible_collections/org_1/coll_3/galaxy.yml | 0 .../org_1/coll_3/plugins/modules/module_1.py | 0 .../org_1/coll_3/plugins/modules/module_2.py | 0 .../org_1/coll_3/plugins/modules/module_3.py | 0 .../ansible_collections/org_1/coll_4/galaxy.yml | 0 .../org_1/coll_4/plugins/modules/module_1.py | 0 .../org_1/coll_4/plugins/modules/module_2.py | 0 .../org_1/coll_4/plugins/modules/module_3.py | 0 .../org_1/coll_4/plugins/modules/module_4.py | 0 .../ansible_collections/org_1/coll_5/galaxy.yml | 0 .../coll_5/plugins/modules/sub_coll_1/module_1.py | 0 .../ansible_collections/org_1/coll_6/galaxy.yml | 0 .../org_1/coll_6/meta/runtime.yml | 0 .../org_1/coll_6/plugins/modules/module_2.py | 0 .../coll_6/plugins/modules/sub_coll_1/module_1.py | 0 .../test}/fixtures/completion/ansible.cfg | 0 .../test}/fixtures/completion/default_vars.yml | 0 .../test}/fixtures/completion/dynamic_inventory.py | 0 .../fixtures/completion/new_ansible_config.cfg | 0 .../completion/playbook_adjacent_to_collection.yml | 0 .../fixtures/completion/playbook_with_vars.yml | 0 .../fixtures/completion/resolve_completion.yml | 0 .../test}/fixtures/completion/simple_tasks.yml | 0 .../test}/fixtures/completion/static_inventory.ini | 0 .../fixtures/completion/tasks_without_fqcn.yml | 0 .../test}/fixtures/completion/with_blocks.yml | 0 .../test}/fixtures/completion/with_roles.yml | 0 .../definition/playbook_for_module_definition.yml | 0 .../test}/fixtures/diagnostics/.ansible-lint | 0 .../test}/fixtures/diagnostics/empty.yml | 0 .../test}/fixtures/diagnostics/invalid_yaml.yml | 0 .../test}/fixtures/diagnostics/lint_errors.yml | 0 .../test}/fixtures/diagnostics/noHost.yml | 0 .../test}/fixtures/hover/roles.yml | 0 .../test}/fixtures/hover/tasks.yml | 0 .../adjacent_org/adjacent_coll/galaxy.yml | 0 .../adjacent_coll/plugins/modules/module_1.py | 0 .../non_adjacent_playbooks/playbook2.yml | 0 .../playbook_adjacent_collection/playbook.yml | 0 .../test}/fixtures/utils/docsFinder/1.py | 0 .../test}/fixtures/utils/docsFinder/10.json | 0 .../test}/fixtures/utils/docsFinder/2.py | 0 .../test}/fixtures/utils/docsFinder/3.py | 0 .../test}/fixtures/utils/docsFinder/4.yml | 0 .../test}/fixtures/utils/docsFinder/5.yml | 0 .../test}/fixtures/utils/docsFinder/6.yaml | 0 .../test}/fixtures/utils/docsFinder/_7.py | 0 .../test}/fixtures/utils/docsFinder/_8.py | 0 .../test}/fixtures/utils/docsFinder/_9.py | 0 .../fixtures/utils/getAnsibleMetaData/ansible.cfg | 0 .../fixtures/utils/getAnsibleMetaData/inventory | 0 .../fixtures/utils/getAnsibleMetaData/plays.yml | 0 .../test}/fixtures/yaml/ancestryBuilder.yml | 0 .../test}/fixtures/yaml/getDeclaredCollections.yml | 0 .../test}/fixtures/yaml/isBlockParam.yml | 0 .../fixtures/yaml/isCursorInsideJinjaBrackets.yml | 0 .../test}/fixtures/yaml/isPlayParam.yml | 0 .../test}/fixtures/yaml/isRoleParam.yml | 0 .../test}/fixtures/yaml/isTaskParamInPlaybook.yml | 0 .../test}/fixtures/yaml/isTaskParamInTaskFile.yml | 0 .../test}/fixtures/yaml/isTaskParamInvalid.yml | 0 .../test}/fixtures/yaml/test.json | 0 .../ansible-language-server/test}/helper.ts | 0 .../ansible-language-server/test}/index.ts | 0 .../test}/providers/completionProvider.test.ts | 0 .../test}/providers/completionResolver.test.ts | 0 .../test}/providers/definitionProvider.test.ts | 0 .../test}/providers/hoverProvider.test.ts | 0 .../test}/providers/settingsManager.test.ts | 0 .../test}/providers/validationProvider.test.ts | 0 .../ansible-language-server/test}/rootMochaHooks.ts | 0 .../test}/utils/getAnsibleMetaData.test.ts | 0 .../test}/utils/pathUtils.test.ts | 0 .../utils/resolveSuffixWhileCompletion.test.ts | 0 .../test}/utils/runCommand.test.ts | 0 .../test}/utils/withInterpreter.test.ts | 0 .../test}/utils/yaml.test.ts | 0 .../tools}/get-image-version | 0 .../ansible-language-server/tools}/release.sh | 0 .../tools}/settings-doc-generator.ts | 0 .../ansible-language-server/tools}/test-setup.sh | 0 .../ansible-language-server/tools}/version_sync.py | 0 .../ansible-language-server/tools}/vscode.sh | 0 .../ansible-language-server/tsconfig.json | 0 190 files changed, 0 insertions(+), 0 deletions(-) rename {.config => packages/ansible-language-server/.config}/Dockerfile (100%) rename {.config => packages/ansible-language-server/.config}/dictionary.txt (100%) rename {.config => packages/ansible-language-server/.config}/mypy.ini (100%) rename {.config => packages/ansible-language-server/.config}/requirements.in (100%) rename .editorconfig => packages/ansible-language-server/.editorconfig (100%) rename .envrc => packages/ansible-language-server/.envrc (100%) rename .eslintrc.json => packages/ansible-language-server/.eslintrc.json (100%) rename .gitattributes => packages/ansible-language-server/.gitattributes (100%) rename {.github => packages/ansible-language-server/.github}/CODEOWNERS (100%) rename {.github => packages/ansible-language-server/.github}/CODE_OF_CONDUCT.md (100%) rename {.github => packages/ansible-language-server/.github}/ISSUE_TEMPLATE/bug_report.yml (100%) rename {.github => packages/ansible-language-server/.github}/ISSUE_TEMPLATE/config.yml (100%) rename {.github => packages/ansible-language-server/.github}/ISSUE_TEMPLATE/feature_request.yml (100%) rename {.github => packages/ansible-language-server/.github}/SECURITY.md (100%) rename {.github => packages/ansible-language-server/.github}/dependabot.yml (100%) rename {.github => packages/ansible-language-server/.github}/release-drafter.yml (100%) rename {.github => packages/ansible-language-server/.github}/workflows/ack.yml (100%) rename {.github => packages/ansible-language-server/.github}/workflows/prepare-release.yml (100%) rename {.github => packages/ansible-language-server/.github}/workflows/publish.yml (100%) rename {.github => packages/ansible-language-server/.github}/workflows/push.yml (100%) rename {.github => packages/ansible-language-server/.github}/workflows/task.yml (100%) rename .gitignore => packages/ansible-language-server/.gitignore (100%) rename .mocharc.yml => packages/ansible-language-server/.mocharc.yml (100%) rename .npmrc => packages/ansible-language-server/.npmrc (100%) rename .nycrc.yml => packages/ansible-language-server/.nycrc.yml (100%) rename .pre-commit-config.yaml => packages/ansible-language-server/.pre-commit-config.yaml (100%) rename .prettierignore => packages/ansible-language-server/.prettierignore (100%) rename .prettierrc.yaml => packages/ansible-language-server/.prettierrc.yaml (100%) rename .readthedocs.yml => packages/ansible-language-server/.readthedocs.yml (100%) rename .tool-versions => packages/ansible-language-server/.tool-versions (100%) rename {.vscode => packages/ansible-language-server/.vscode}/extensions.json (100%) rename {.vscode => packages/ansible-language-server/.vscode}/launch.json (100%) rename {.vscode => packages/ansible-language-server/.vscode}/settings.json (100%) rename {.vscode => packages/ansible-language-server/.vscode}/tasks.json (100%) rename .vscodeignore => packages/ansible-language-server/.vscodeignore (100%) rename LICENSE => packages/ansible-language-server/LICENSE (100%) rename README.md => packages/ansible-language-server/README.md (100%) rename Taskfile.yml => packages/ansible-language-server/Taskfile.yml (100%) rename {bin => packages/ansible-language-server/bin}/ansible-language-server (100%) rename codecov.yml => packages/ansible-language-server/codecov.yml (100%) rename cspell.config.yaml => packages/ansible-language-server/cspell.config.yaml (100%) rename {docs => packages/ansible-language-server/docs}/README.md (100%) rename {docs => packages/ansible-language-server/docs}/changelog-fragments.d/350.feature.md (100%) rename {docs => packages/ansible-language-server/docs}/changelog.md (100%) rename {docs => packages/ansible-language-server/docs}/contributing.md (100%) rename {docs => packages/ansible-language-server/docs}/development.md (100%) rename {docs => packages/ansible-language-server/docs}/images/ansible-lint.gif (100%) rename {docs => packages/ansible-language-server/docs}/images/favicon.ico (100%) rename {docs => packages/ansible-language-server/docs}/images/go-to-definition.gif (100%) rename {docs => packages/ansible-language-server/docs}/images/hover-documentation-module.png (100%) rename {docs => packages/ansible-language-server/docs}/images/jinja-expression.gif (100%) rename {docs => packages/ansible-language-server/docs}/images/logo.png (100%) rename {docs => packages/ansible-language-server/docs}/images/logo.svg (100%) rename {docs => packages/ansible-language-server/docs}/images/smart-completions.gif (100%) rename {docs => packages/ansible-language-server/docs}/images/syntax-highlighting.png (100%) rename {docs => packages/ansible-language-server/docs}/images/yaml-validation.gif (100%) rename {docs => packages/ansible-language-server/docs}/settings.md (100%) rename icon.png => packages/ansible-language-server/icon.png (100%) rename mkdocs.yml => packages/ansible-language-server/mkdocs.yml (100%) rename {out => packages/ansible-language-server/out}/.gitignore (100%) rename package-lock.json => packages/ansible-language-server/package-lock.json (100%) rename package.json => packages/ansible-language-server/package.json (100%) rename {src => packages/ansible-language-server/src}/ansibleLanguageService.ts (100%) rename {src => packages/ansible-language-server/src}/interfaces/documentMeta.ts (100%) rename {src => packages/ansible-language-server/src}/interfaces/extensionSettings.ts (100%) rename {src => packages/ansible-language-server/src}/interfaces/module.ts (100%) rename {src => packages/ansible-language-server/src}/interfaces/pluginRouting.ts (100%) rename {src => packages/ansible-language-server/src}/providers/completionProvider.ts (100%) rename {src => packages/ansible-language-server/src}/providers/completionProviderUtils.ts (100%) rename {src => packages/ansible-language-server/src}/providers/definitionProvider.ts (100%) rename {src => packages/ansible-language-server/src}/providers/hoverProvider.ts (100%) rename {src => packages/ansible-language-server/src}/providers/semanticTokenProvider.ts (100%) rename {src => packages/ansible-language-server/src}/providers/validationProvider.ts (100%) rename {src => packages/ansible-language-server/src}/server.ts (100%) rename {src => packages/ansible-language-server/src}/services/ansibleConfig.ts (100%) rename {src => packages/ansible-language-server/src}/services/ansibleInventory.ts (100%) rename {src => packages/ansible-language-server/src}/services/ansibleLint.ts (100%) rename {src => packages/ansible-language-server/src}/services/ansiblePlaybook.ts (100%) rename {src => packages/ansible-language-server/src}/services/docsLibrary.ts (100%) rename {src => packages/ansible-language-server/src}/services/docsLibraryUtilsForPAC.ts (100%) rename {src => packages/ansible-language-server/src}/services/executionEnvironment.ts (100%) rename {src => packages/ansible-language-server/src}/services/metadataLibrary.ts (100%) rename {src => packages/ansible-language-server/src}/services/settingsManager.ts (100%) rename {src => packages/ansible-language-server/src}/services/validationManager.ts (100%) rename {src => packages/ansible-language-server/src}/services/workspaceManager.ts (100%) rename {src => packages/ansible-language-server/src}/utils/ansible.ts (100%) rename {src => packages/ansible-language-server/src}/utils/commandRunner.ts (100%) rename {src => packages/ansible-language-server/src}/utils/docsFinder.ts (100%) rename {src => packages/ansible-language-server/src}/utils/docsFormatter.ts (100%) rename {src => packages/ansible-language-server/src}/utils/docsParser.ts (100%) rename {src => packages/ansible-language-server/src}/utils/execPath.ts (100%) rename {src => packages/ansible-language-server/src}/utils/getAnsibleMetaData.ts (100%) rename {src => packages/ansible-language-server/src}/utils/imagePuller.ts (100%) rename {src => packages/ansible-language-server/src}/utils/misc.ts (100%) rename {src => packages/ansible-language-server/src}/utils/pathUtils.ts (100%) rename {src => packages/ansible-language-server/src}/utils/yaml.ts (100%) rename {test => packages/ansible-language-server/test}/consoleOutput.ts (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/defaults/main.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/meta/main.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/tasks/main.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/templates/motd.j2 (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_5/galaxy.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_5/plugins/modules/sub_coll_1/module_1.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_6/galaxy.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_6/meta/runtime.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/module_2.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/sub_coll_1/module_1.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/completion/ansible.cfg (100%) rename {test => packages/ansible-language-server/test}/fixtures/completion/default_vars.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/completion/dynamic_inventory.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/completion/new_ansible_config.cfg (100%) rename {test => packages/ansible-language-server/test}/fixtures/completion/playbook_adjacent_to_collection.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/completion/playbook_with_vars.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/completion/resolve_completion.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/completion/simple_tasks.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/completion/static_inventory.ini (100%) rename {test => packages/ansible-language-server/test}/fixtures/completion/tasks_without_fqcn.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/completion/with_blocks.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/completion/with_roles.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/definition/playbook_for_module_definition.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/diagnostics/.ansible-lint (100%) rename {test => packages/ansible-language-server/test}/fixtures/diagnostics/empty.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/diagnostics/invalid_yaml.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/diagnostics/lint_errors.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/diagnostics/noHost.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/hover/roles.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/hover/tasks.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/galaxy.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/plugins/modules/module_1.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/playbook_adjacent_collection/non_adjacent_playbooks/playbook2.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/playbook_adjacent_collection/playbook.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/docsFinder/1.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/docsFinder/10.json (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/docsFinder/2.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/docsFinder/3.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/docsFinder/4.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/docsFinder/5.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/docsFinder/6.yaml (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/docsFinder/_7.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/docsFinder/_8.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/docsFinder/_9.py (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/getAnsibleMetaData/ansible.cfg (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/getAnsibleMetaData/inventory (100%) rename {test => packages/ansible-language-server/test}/fixtures/utils/getAnsibleMetaData/plays.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/yaml/ancestryBuilder.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/yaml/getDeclaredCollections.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/yaml/isBlockParam.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/yaml/isCursorInsideJinjaBrackets.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/yaml/isPlayParam.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/yaml/isRoleParam.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/yaml/isTaskParamInPlaybook.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/yaml/isTaskParamInTaskFile.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/yaml/isTaskParamInvalid.yml (100%) rename {test => packages/ansible-language-server/test}/fixtures/yaml/test.json (100%) rename {test => packages/ansible-language-server/test}/helper.ts (100%) rename {test => packages/ansible-language-server/test}/index.ts (100%) rename {test => packages/ansible-language-server/test}/providers/completionProvider.test.ts (100%) rename {test => packages/ansible-language-server/test}/providers/completionResolver.test.ts (100%) rename {test => packages/ansible-language-server/test}/providers/definitionProvider.test.ts (100%) rename {test => packages/ansible-language-server/test}/providers/hoverProvider.test.ts (100%) rename {test => packages/ansible-language-server/test}/providers/settingsManager.test.ts (100%) rename {test => packages/ansible-language-server/test}/providers/validationProvider.test.ts (100%) rename {test => packages/ansible-language-server/test}/rootMochaHooks.ts (100%) rename {test => packages/ansible-language-server/test}/utils/getAnsibleMetaData.test.ts (100%) rename {test => packages/ansible-language-server/test}/utils/pathUtils.test.ts (100%) rename {test => packages/ansible-language-server/test}/utils/resolveSuffixWhileCompletion.test.ts (100%) rename {test => packages/ansible-language-server/test}/utils/runCommand.test.ts (100%) rename {test => packages/ansible-language-server/test}/utils/withInterpreter.test.ts (100%) rename {test => packages/ansible-language-server/test}/utils/yaml.test.ts (100%) rename {tools => packages/ansible-language-server/tools}/get-image-version (100%) rename {tools => packages/ansible-language-server/tools}/release.sh (100%) rename {tools => packages/ansible-language-server/tools}/settings-doc-generator.ts (100%) rename {tools => packages/ansible-language-server/tools}/test-setup.sh (100%) rename {tools => packages/ansible-language-server/tools}/version_sync.py (100%) rename {tools => packages/ansible-language-server/tools}/vscode.sh (100%) rename tsconfig.json => packages/ansible-language-server/tsconfig.json (100%) diff --git a/.config/Dockerfile b/packages/ansible-language-server/.config/Dockerfile similarity index 100% rename from .config/Dockerfile rename to packages/ansible-language-server/.config/Dockerfile diff --git a/.config/dictionary.txt b/packages/ansible-language-server/.config/dictionary.txt similarity index 100% rename from .config/dictionary.txt rename to packages/ansible-language-server/.config/dictionary.txt diff --git a/.config/mypy.ini b/packages/ansible-language-server/.config/mypy.ini similarity index 100% rename from .config/mypy.ini rename to packages/ansible-language-server/.config/mypy.ini diff --git a/.config/requirements.in b/packages/ansible-language-server/.config/requirements.in similarity index 100% rename from .config/requirements.in rename to packages/ansible-language-server/.config/requirements.in diff --git a/.editorconfig b/packages/ansible-language-server/.editorconfig similarity index 100% rename from .editorconfig rename to packages/ansible-language-server/.editorconfig diff --git a/.envrc b/packages/ansible-language-server/.envrc similarity index 100% rename from .envrc rename to packages/ansible-language-server/.envrc diff --git a/.eslintrc.json b/packages/ansible-language-server/.eslintrc.json similarity index 100% rename from .eslintrc.json rename to packages/ansible-language-server/.eslintrc.json diff --git a/.gitattributes b/packages/ansible-language-server/.gitattributes similarity index 100% rename from .gitattributes rename to packages/ansible-language-server/.gitattributes diff --git a/.github/CODEOWNERS b/packages/ansible-language-server/.github/CODEOWNERS similarity index 100% rename from .github/CODEOWNERS rename to packages/ansible-language-server/.github/CODEOWNERS diff --git a/.github/CODE_OF_CONDUCT.md b/packages/ansible-language-server/.github/CODE_OF_CONDUCT.md similarity index 100% rename from .github/CODE_OF_CONDUCT.md rename to packages/ansible-language-server/.github/CODE_OF_CONDUCT.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/packages/ansible-language-server/.github/ISSUE_TEMPLATE/bug_report.yml similarity index 100% rename from .github/ISSUE_TEMPLATE/bug_report.yml rename to packages/ansible-language-server/.github/ISSUE_TEMPLATE/bug_report.yml diff --git a/.github/ISSUE_TEMPLATE/config.yml b/packages/ansible-language-server/.github/ISSUE_TEMPLATE/config.yml similarity index 100% rename from .github/ISSUE_TEMPLATE/config.yml rename to packages/ansible-language-server/.github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/packages/ansible-language-server/.github/ISSUE_TEMPLATE/feature_request.yml similarity index 100% rename from .github/ISSUE_TEMPLATE/feature_request.yml rename to packages/ansible-language-server/.github/ISSUE_TEMPLATE/feature_request.yml diff --git a/.github/SECURITY.md b/packages/ansible-language-server/.github/SECURITY.md similarity index 100% rename from .github/SECURITY.md rename to packages/ansible-language-server/.github/SECURITY.md diff --git a/.github/dependabot.yml b/packages/ansible-language-server/.github/dependabot.yml similarity index 100% rename from .github/dependabot.yml rename to packages/ansible-language-server/.github/dependabot.yml diff --git a/.github/release-drafter.yml b/packages/ansible-language-server/.github/release-drafter.yml similarity index 100% rename from .github/release-drafter.yml rename to packages/ansible-language-server/.github/release-drafter.yml diff --git a/.github/workflows/ack.yml b/packages/ansible-language-server/.github/workflows/ack.yml similarity index 100% rename from .github/workflows/ack.yml rename to packages/ansible-language-server/.github/workflows/ack.yml diff --git a/.github/workflows/prepare-release.yml b/packages/ansible-language-server/.github/workflows/prepare-release.yml similarity index 100% rename from .github/workflows/prepare-release.yml rename to packages/ansible-language-server/.github/workflows/prepare-release.yml diff --git a/.github/workflows/publish.yml b/packages/ansible-language-server/.github/workflows/publish.yml similarity index 100% rename from .github/workflows/publish.yml rename to packages/ansible-language-server/.github/workflows/publish.yml diff --git a/.github/workflows/push.yml b/packages/ansible-language-server/.github/workflows/push.yml similarity index 100% rename from .github/workflows/push.yml rename to packages/ansible-language-server/.github/workflows/push.yml diff --git a/.github/workflows/task.yml b/packages/ansible-language-server/.github/workflows/task.yml similarity index 100% rename from .github/workflows/task.yml rename to packages/ansible-language-server/.github/workflows/task.yml diff --git a/.gitignore b/packages/ansible-language-server/.gitignore similarity index 100% rename from .gitignore rename to packages/ansible-language-server/.gitignore diff --git a/.mocharc.yml b/packages/ansible-language-server/.mocharc.yml similarity index 100% rename from .mocharc.yml rename to packages/ansible-language-server/.mocharc.yml diff --git a/.npmrc b/packages/ansible-language-server/.npmrc similarity index 100% rename from .npmrc rename to packages/ansible-language-server/.npmrc diff --git a/.nycrc.yml b/packages/ansible-language-server/.nycrc.yml similarity index 100% rename from .nycrc.yml rename to packages/ansible-language-server/.nycrc.yml diff --git a/.pre-commit-config.yaml b/packages/ansible-language-server/.pre-commit-config.yaml similarity index 100% rename from .pre-commit-config.yaml rename to packages/ansible-language-server/.pre-commit-config.yaml diff --git a/.prettierignore b/packages/ansible-language-server/.prettierignore similarity index 100% rename from .prettierignore rename to packages/ansible-language-server/.prettierignore diff --git a/.prettierrc.yaml b/packages/ansible-language-server/.prettierrc.yaml similarity index 100% rename from .prettierrc.yaml rename to packages/ansible-language-server/.prettierrc.yaml diff --git a/.readthedocs.yml b/packages/ansible-language-server/.readthedocs.yml similarity index 100% rename from .readthedocs.yml rename to packages/ansible-language-server/.readthedocs.yml diff --git a/.tool-versions b/packages/ansible-language-server/.tool-versions similarity index 100% rename from .tool-versions rename to packages/ansible-language-server/.tool-versions diff --git a/.vscode/extensions.json b/packages/ansible-language-server/.vscode/extensions.json similarity index 100% rename from .vscode/extensions.json rename to packages/ansible-language-server/.vscode/extensions.json diff --git a/.vscode/launch.json b/packages/ansible-language-server/.vscode/launch.json similarity index 100% rename from .vscode/launch.json rename to packages/ansible-language-server/.vscode/launch.json diff --git a/.vscode/settings.json b/packages/ansible-language-server/.vscode/settings.json similarity index 100% rename from .vscode/settings.json rename to packages/ansible-language-server/.vscode/settings.json diff --git a/.vscode/tasks.json b/packages/ansible-language-server/.vscode/tasks.json similarity index 100% rename from .vscode/tasks.json rename to packages/ansible-language-server/.vscode/tasks.json diff --git a/.vscodeignore b/packages/ansible-language-server/.vscodeignore similarity index 100% rename from .vscodeignore rename to packages/ansible-language-server/.vscodeignore diff --git a/LICENSE b/packages/ansible-language-server/LICENSE similarity index 100% rename from LICENSE rename to packages/ansible-language-server/LICENSE diff --git a/README.md b/packages/ansible-language-server/README.md similarity index 100% rename from README.md rename to packages/ansible-language-server/README.md diff --git a/Taskfile.yml b/packages/ansible-language-server/Taskfile.yml similarity index 100% rename from Taskfile.yml rename to packages/ansible-language-server/Taskfile.yml diff --git a/bin/ansible-language-server b/packages/ansible-language-server/bin/ansible-language-server similarity index 100% rename from bin/ansible-language-server rename to packages/ansible-language-server/bin/ansible-language-server diff --git a/codecov.yml b/packages/ansible-language-server/codecov.yml similarity index 100% rename from codecov.yml rename to packages/ansible-language-server/codecov.yml diff --git a/cspell.config.yaml b/packages/ansible-language-server/cspell.config.yaml similarity index 100% rename from cspell.config.yaml rename to packages/ansible-language-server/cspell.config.yaml diff --git a/docs/README.md b/packages/ansible-language-server/docs/README.md similarity index 100% rename from docs/README.md rename to packages/ansible-language-server/docs/README.md diff --git a/docs/changelog-fragments.d/350.feature.md b/packages/ansible-language-server/docs/changelog-fragments.d/350.feature.md similarity index 100% rename from docs/changelog-fragments.d/350.feature.md rename to packages/ansible-language-server/docs/changelog-fragments.d/350.feature.md diff --git a/docs/changelog.md b/packages/ansible-language-server/docs/changelog.md similarity index 100% rename from docs/changelog.md rename to packages/ansible-language-server/docs/changelog.md diff --git a/docs/contributing.md b/packages/ansible-language-server/docs/contributing.md similarity index 100% rename from docs/contributing.md rename to packages/ansible-language-server/docs/contributing.md diff --git a/docs/development.md b/packages/ansible-language-server/docs/development.md similarity index 100% rename from docs/development.md rename to packages/ansible-language-server/docs/development.md diff --git a/docs/images/ansible-lint.gif b/packages/ansible-language-server/docs/images/ansible-lint.gif similarity index 100% rename from docs/images/ansible-lint.gif rename to packages/ansible-language-server/docs/images/ansible-lint.gif diff --git a/docs/images/favicon.ico b/packages/ansible-language-server/docs/images/favicon.ico similarity index 100% rename from docs/images/favicon.ico rename to packages/ansible-language-server/docs/images/favicon.ico diff --git a/docs/images/go-to-definition.gif b/packages/ansible-language-server/docs/images/go-to-definition.gif similarity index 100% rename from docs/images/go-to-definition.gif rename to packages/ansible-language-server/docs/images/go-to-definition.gif diff --git a/docs/images/hover-documentation-module.png b/packages/ansible-language-server/docs/images/hover-documentation-module.png similarity index 100% rename from docs/images/hover-documentation-module.png rename to packages/ansible-language-server/docs/images/hover-documentation-module.png diff --git a/docs/images/jinja-expression.gif b/packages/ansible-language-server/docs/images/jinja-expression.gif similarity index 100% rename from docs/images/jinja-expression.gif rename to packages/ansible-language-server/docs/images/jinja-expression.gif diff --git a/docs/images/logo.png b/packages/ansible-language-server/docs/images/logo.png similarity index 100% rename from docs/images/logo.png rename to packages/ansible-language-server/docs/images/logo.png diff --git a/docs/images/logo.svg b/packages/ansible-language-server/docs/images/logo.svg similarity index 100% rename from docs/images/logo.svg rename to packages/ansible-language-server/docs/images/logo.svg diff --git a/docs/images/smart-completions.gif b/packages/ansible-language-server/docs/images/smart-completions.gif similarity index 100% rename from docs/images/smart-completions.gif rename to packages/ansible-language-server/docs/images/smart-completions.gif diff --git a/docs/images/syntax-highlighting.png b/packages/ansible-language-server/docs/images/syntax-highlighting.png similarity index 100% rename from docs/images/syntax-highlighting.png rename to packages/ansible-language-server/docs/images/syntax-highlighting.png diff --git a/docs/images/yaml-validation.gif b/packages/ansible-language-server/docs/images/yaml-validation.gif similarity index 100% rename from docs/images/yaml-validation.gif rename to packages/ansible-language-server/docs/images/yaml-validation.gif diff --git a/docs/settings.md b/packages/ansible-language-server/docs/settings.md similarity index 100% rename from docs/settings.md rename to packages/ansible-language-server/docs/settings.md diff --git a/icon.png b/packages/ansible-language-server/icon.png similarity index 100% rename from icon.png rename to packages/ansible-language-server/icon.png diff --git a/mkdocs.yml b/packages/ansible-language-server/mkdocs.yml similarity index 100% rename from mkdocs.yml rename to packages/ansible-language-server/mkdocs.yml diff --git a/out/.gitignore b/packages/ansible-language-server/out/.gitignore similarity index 100% rename from out/.gitignore rename to packages/ansible-language-server/out/.gitignore diff --git a/package-lock.json b/packages/ansible-language-server/package-lock.json similarity index 100% rename from package-lock.json rename to packages/ansible-language-server/package-lock.json diff --git a/package.json b/packages/ansible-language-server/package.json similarity index 100% rename from package.json rename to packages/ansible-language-server/package.json diff --git a/src/ansibleLanguageService.ts b/packages/ansible-language-server/src/ansibleLanguageService.ts similarity index 100% rename from src/ansibleLanguageService.ts rename to packages/ansible-language-server/src/ansibleLanguageService.ts diff --git a/src/interfaces/documentMeta.ts b/packages/ansible-language-server/src/interfaces/documentMeta.ts similarity index 100% rename from src/interfaces/documentMeta.ts rename to packages/ansible-language-server/src/interfaces/documentMeta.ts diff --git a/src/interfaces/extensionSettings.ts b/packages/ansible-language-server/src/interfaces/extensionSettings.ts similarity index 100% rename from src/interfaces/extensionSettings.ts rename to packages/ansible-language-server/src/interfaces/extensionSettings.ts diff --git a/src/interfaces/module.ts b/packages/ansible-language-server/src/interfaces/module.ts similarity index 100% rename from src/interfaces/module.ts rename to packages/ansible-language-server/src/interfaces/module.ts diff --git a/src/interfaces/pluginRouting.ts b/packages/ansible-language-server/src/interfaces/pluginRouting.ts similarity index 100% rename from src/interfaces/pluginRouting.ts rename to packages/ansible-language-server/src/interfaces/pluginRouting.ts diff --git a/src/providers/completionProvider.ts b/packages/ansible-language-server/src/providers/completionProvider.ts similarity index 100% rename from src/providers/completionProvider.ts rename to packages/ansible-language-server/src/providers/completionProvider.ts diff --git a/src/providers/completionProviderUtils.ts b/packages/ansible-language-server/src/providers/completionProviderUtils.ts similarity index 100% rename from src/providers/completionProviderUtils.ts rename to packages/ansible-language-server/src/providers/completionProviderUtils.ts diff --git a/src/providers/definitionProvider.ts b/packages/ansible-language-server/src/providers/definitionProvider.ts similarity index 100% rename from src/providers/definitionProvider.ts rename to packages/ansible-language-server/src/providers/definitionProvider.ts diff --git a/src/providers/hoverProvider.ts b/packages/ansible-language-server/src/providers/hoverProvider.ts similarity index 100% rename from src/providers/hoverProvider.ts rename to packages/ansible-language-server/src/providers/hoverProvider.ts diff --git a/src/providers/semanticTokenProvider.ts b/packages/ansible-language-server/src/providers/semanticTokenProvider.ts similarity index 100% rename from src/providers/semanticTokenProvider.ts rename to packages/ansible-language-server/src/providers/semanticTokenProvider.ts diff --git a/src/providers/validationProvider.ts b/packages/ansible-language-server/src/providers/validationProvider.ts similarity index 100% rename from src/providers/validationProvider.ts rename to packages/ansible-language-server/src/providers/validationProvider.ts diff --git a/src/server.ts b/packages/ansible-language-server/src/server.ts similarity index 100% rename from src/server.ts rename to packages/ansible-language-server/src/server.ts diff --git a/src/services/ansibleConfig.ts b/packages/ansible-language-server/src/services/ansibleConfig.ts similarity index 100% rename from src/services/ansibleConfig.ts rename to packages/ansible-language-server/src/services/ansibleConfig.ts diff --git a/src/services/ansibleInventory.ts b/packages/ansible-language-server/src/services/ansibleInventory.ts similarity index 100% rename from src/services/ansibleInventory.ts rename to packages/ansible-language-server/src/services/ansibleInventory.ts diff --git a/src/services/ansibleLint.ts b/packages/ansible-language-server/src/services/ansibleLint.ts similarity index 100% rename from src/services/ansibleLint.ts rename to packages/ansible-language-server/src/services/ansibleLint.ts diff --git a/src/services/ansiblePlaybook.ts b/packages/ansible-language-server/src/services/ansiblePlaybook.ts similarity index 100% rename from src/services/ansiblePlaybook.ts rename to packages/ansible-language-server/src/services/ansiblePlaybook.ts diff --git a/src/services/docsLibrary.ts b/packages/ansible-language-server/src/services/docsLibrary.ts similarity index 100% rename from src/services/docsLibrary.ts rename to packages/ansible-language-server/src/services/docsLibrary.ts diff --git a/src/services/docsLibraryUtilsForPAC.ts b/packages/ansible-language-server/src/services/docsLibraryUtilsForPAC.ts similarity index 100% rename from src/services/docsLibraryUtilsForPAC.ts rename to packages/ansible-language-server/src/services/docsLibraryUtilsForPAC.ts diff --git a/src/services/executionEnvironment.ts b/packages/ansible-language-server/src/services/executionEnvironment.ts similarity index 100% rename from src/services/executionEnvironment.ts rename to packages/ansible-language-server/src/services/executionEnvironment.ts diff --git a/src/services/metadataLibrary.ts b/packages/ansible-language-server/src/services/metadataLibrary.ts similarity index 100% rename from src/services/metadataLibrary.ts rename to packages/ansible-language-server/src/services/metadataLibrary.ts diff --git a/src/services/settingsManager.ts b/packages/ansible-language-server/src/services/settingsManager.ts similarity index 100% rename from src/services/settingsManager.ts rename to packages/ansible-language-server/src/services/settingsManager.ts diff --git a/src/services/validationManager.ts b/packages/ansible-language-server/src/services/validationManager.ts similarity index 100% rename from src/services/validationManager.ts rename to packages/ansible-language-server/src/services/validationManager.ts diff --git a/src/services/workspaceManager.ts b/packages/ansible-language-server/src/services/workspaceManager.ts similarity index 100% rename from src/services/workspaceManager.ts rename to packages/ansible-language-server/src/services/workspaceManager.ts diff --git a/src/utils/ansible.ts b/packages/ansible-language-server/src/utils/ansible.ts similarity index 100% rename from src/utils/ansible.ts rename to packages/ansible-language-server/src/utils/ansible.ts diff --git a/src/utils/commandRunner.ts b/packages/ansible-language-server/src/utils/commandRunner.ts similarity index 100% rename from src/utils/commandRunner.ts rename to packages/ansible-language-server/src/utils/commandRunner.ts diff --git a/src/utils/docsFinder.ts b/packages/ansible-language-server/src/utils/docsFinder.ts similarity index 100% rename from src/utils/docsFinder.ts rename to packages/ansible-language-server/src/utils/docsFinder.ts diff --git a/src/utils/docsFormatter.ts b/packages/ansible-language-server/src/utils/docsFormatter.ts similarity index 100% rename from src/utils/docsFormatter.ts rename to packages/ansible-language-server/src/utils/docsFormatter.ts diff --git a/src/utils/docsParser.ts b/packages/ansible-language-server/src/utils/docsParser.ts similarity index 100% rename from src/utils/docsParser.ts rename to packages/ansible-language-server/src/utils/docsParser.ts diff --git a/src/utils/execPath.ts b/packages/ansible-language-server/src/utils/execPath.ts similarity index 100% rename from src/utils/execPath.ts rename to packages/ansible-language-server/src/utils/execPath.ts diff --git a/src/utils/getAnsibleMetaData.ts b/packages/ansible-language-server/src/utils/getAnsibleMetaData.ts similarity index 100% rename from src/utils/getAnsibleMetaData.ts rename to packages/ansible-language-server/src/utils/getAnsibleMetaData.ts diff --git a/src/utils/imagePuller.ts b/packages/ansible-language-server/src/utils/imagePuller.ts similarity index 100% rename from src/utils/imagePuller.ts rename to packages/ansible-language-server/src/utils/imagePuller.ts diff --git a/src/utils/misc.ts b/packages/ansible-language-server/src/utils/misc.ts similarity index 100% rename from src/utils/misc.ts rename to packages/ansible-language-server/src/utils/misc.ts diff --git a/src/utils/pathUtils.ts b/packages/ansible-language-server/src/utils/pathUtils.ts similarity index 100% rename from src/utils/pathUtils.ts rename to packages/ansible-language-server/src/utils/pathUtils.ts diff --git a/src/utils/yaml.ts b/packages/ansible-language-server/src/utils/yaml.ts similarity index 100% rename from src/utils/yaml.ts rename to packages/ansible-language-server/src/utils/yaml.ts diff --git a/test/consoleOutput.ts b/packages/ansible-language-server/test/consoleOutput.ts similarity index 100% rename from test/consoleOutput.ts rename to packages/ansible-language-server/test/consoleOutput.ts diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_1/galaxy.yml diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_1/plugins/modules/module_1.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/defaults/main.yml b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/defaults/main.yml similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/defaults/main.yml rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/defaults/main.yml diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/meta/main.yml b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/meta/main.yml similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/meta/main.yml rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/meta/main.yml diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/tasks/main.yml b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/tasks/main.yml similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/tasks/main.yml rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/tasks/main.yml diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/templates/motd.j2 b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/templates/motd.j2 similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/templates/motd.j2 rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_1/roles/role_1/templates/motd.j2 diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_2/galaxy.yml diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_1.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_2/plugins/modules/module_2.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_3/galaxy.yml diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_1.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_2.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_3/plugins/modules/module_3.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_4/galaxy.yml diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_1.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_2.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_3.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_4/plugins/modules/module_4.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_5/galaxy.yml b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_5/galaxy.yml similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_5/galaxy.yml rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_5/galaxy.yml diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_5/plugins/modules/sub_coll_1/module_1.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_5/plugins/modules/sub_coll_1/module_1.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_5/plugins/modules/sub_coll_1/module_1.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_5/plugins/modules/sub_coll_1/module_1.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_6/galaxy.yml b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_6/galaxy.yml similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_6/galaxy.yml rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_6/galaxy.yml diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_6/meta/runtime.yml b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_6/meta/runtime.yml similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_6/meta/runtime.yml rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_6/meta/runtime.yml diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/module_2.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/module_2.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/module_2.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/module_2.py diff --git a/test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/sub_coll_1/module_1.py b/packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/sub_coll_1/module_1.py similarity index 100% rename from test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/sub_coll_1/module_1.py rename to packages/ansible-language-server/test/fixtures/common/collections/ansible_collections/org_1/coll_6/plugins/modules/sub_coll_1/module_1.py diff --git a/test/fixtures/completion/ansible.cfg b/packages/ansible-language-server/test/fixtures/completion/ansible.cfg similarity index 100% rename from test/fixtures/completion/ansible.cfg rename to packages/ansible-language-server/test/fixtures/completion/ansible.cfg diff --git a/test/fixtures/completion/default_vars.yml b/packages/ansible-language-server/test/fixtures/completion/default_vars.yml similarity index 100% rename from test/fixtures/completion/default_vars.yml rename to packages/ansible-language-server/test/fixtures/completion/default_vars.yml diff --git a/test/fixtures/completion/dynamic_inventory.py b/packages/ansible-language-server/test/fixtures/completion/dynamic_inventory.py similarity index 100% rename from test/fixtures/completion/dynamic_inventory.py rename to packages/ansible-language-server/test/fixtures/completion/dynamic_inventory.py diff --git a/test/fixtures/completion/new_ansible_config.cfg b/packages/ansible-language-server/test/fixtures/completion/new_ansible_config.cfg similarity index 100% rename from test/fixtures/completion/new_ansible_config.cfg rename to packages/ansible-language-server/test/fixtures/completion/new_ansible_config.cfg diff --git a/test/fixtures/completion/playbook_adjacent_to_collection.yml b/packages/ansible-language-server/test/fixtures/completion/playbook_adjacent_to_collection.yml similarity index 100% rename from test/fixtures/completion/playbook_adjacent_to_collection.yml rename to packages/ansible-language-server/test/fixtures/completion/playbook_adjacent_to_collection.yml diff --git a/test/fixtures/completion/playbook_with_vars.yml b/packages/ansible-language-server/test/fixtures/completion/playbook_with_vars.yml similarity index 100% rename from test/fixtures/completion/playbook_with_vars.yml rename to packages/ansible-language-server/test/fixtures/completion/playbook_with_vars.yml diff --git a/test/fixtures/completion/resolve_completion.yml b/packages/ansible-language-server/test/fixtures/completion/resolve_completion.yml similarity index 100% rename from test/fixtures/completion/resolve_completion.yml rename to packages/ansible-language-server/test/fixtures/completion/resolve_completion.yml diff --git a/test/fixtures/completion/simple_tasks.yml b/packages/ansible-language-server/test/fixtures/completion/simple_tasks.yml similarity index 100% rename from test/fixtures/completion/simple_tasks.yml rename to packages/ansible-language-server/test/fixtures/completion/simple_tasks.yml diff --git a/test/fixtures/completion/static_inventory.ini b/packages/ansible-language-server/test/fixtures/completion/static_inventory.ini similarity index 100% rename from test/fixtures/completion/static_inventory.ini rename to packages/ansible-language-server/test/fixtures/completion/static_inventory.ini diff --git a/test/fixtures/completion/tasks_without_fqcn.yml b/packages/ansible-language-server/test/fixtures/completion/tasks_without_fqcn.yml similarity index 100% rename from test/fixtures/completion/tasks_without_fqcn.yml rename to packages/ansible-language-server/test/fixtures/completion/tasks_without_fqcn.yml diff --git a/test/fixtures/completion/with_blocks.yml b/packages/ansible-language-server/test/fixtures/completion/with_blocks.yml similarity index 100% rename from test/fixtures/completion/with_blocks.yml rename to packages/ansible-language-server/test/fixtures/completion/with_blocks.yml diff --git a/test/fixtures/completion/with_roles.yml b/packages/ansible-language-server/test/fixtures/completion/with_roles.yml similarity index 100% rename from test/fixtures/completion/with_roles.yml rename to packages/ansible-language-server/test/fixtures/completion/with_roles.yml diff --git a/test/fixtures/definition/playbook_for_module_definition.yml b/packages/ansible-language-server/test/fixtures/definition/playbook_for_module_definition.yml similarity index 100% rename from test/fixtures/definition/playbook_for_module_definition.yml rename to packages/ansible-language-server/test/fixtures/definition/playbook_for_module_definition.yml diff --git a/test/fixtures/diagnostics/.ansible-lint b/packages/ansible-language-server/test/fixtures/diagnostics/.ansible-lint similarity index 100% rename from test/fixtures/diagnostics/.ansible-lint rename to packages/ansible-language-server/test/fixtures/diagnostics/.ansible-lint diff --git a/test/fixtures/diagnostics/empty.yml b/packages/ansible-language-server/test/fixtures/diagnostics/empty.yml similarity index 100% rename from test/fixtures/diagnostics/empty.yml rename to packages/ansible-language-server/test/fixtures/diagnostics/empty.yml diff --git a/test/fixtures/diagnostics/invalid_yaml.yml b/packages/ansible-language-server/test/fixtures/diagnostics/invalid_yaml.yml similarity index 100% rename from test/fixtures/diagnostics/invalid_yaml.yml rename to packages/ansible-language-server/test/fixtures/diagnostics/invalid_yaml.yml diff --git a/test/fixtures/diagnostics/lint_errors.yml b/packages/ansible-language-server/test/fixtures/diagnostics/lint_errors.yml similarity index 100% rename from test/fixtures/diagnostics/lint_errors.yml rename to packages/ansible-language-server/test/fixtures/diagnostics/lint_errors.yml diff --git a/test/fixtures/diagnostics/noHost.yml b/packages/ansible-language-server/test/fixtures/diagnostics/noHost.yml similarity index 100% rename from test/fixtures/diagnostics/noHost.yml rename to packages/ansible-language-server/test/fixtures/diagnostics/noHost.yml diff --git a/test/fixtures/hover/roles.yml b/packages/ansible-language-server/test/fixtures/hover/roles.yml similarity index 100% rename from test/fixtures/hover/roles.yml rename to packages/ansible-language-server/test/fixtures/hover/roles.yml diff --git a/test/fixtures/hover/tasks.yml b/packages/ansible-language-server/test/fixtures/hover/tasks.yml similarity index 100% rename from test/fixtures/hover/tasks.yml rename to packages/ansible-language-server/test/fixtures/hover/tasks.yml diff --git a/test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/galaxy.yml b/packages/ansible-language-server/test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/galaxy.yml similarity index 100% rename from test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/galaxy.yml rename to packages/ansible-language-server/test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/galaxy.yml diff --git a/test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/plugins/modules/module_1.py b/packages/ansible-language-server/test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/plugins/modules/module_1.py similarity index 100% rename from test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/plugins/modules/module_1.py rename to packages/ansible-language-server/test/fixtures/playbook_adjacent_collection/collections/ansible_collections/adjacent_org/adjacent_coll/plugins/modules/module_1.py diff --git a/test/fixtures/playbook_adjacent_collection/non_adjacent_playbooks/playbook2.yml b/packages/ansible-language-server/test/fixtures/playbook_adjacent_collection/non_adjacent_playbooks/playbook2.yml similarity index 100% rename from test/fixtures/playbook_adjacent_collection/non_adjacent_playbooks/playbook2.yml rename to packages/ansible-language-server/test/fixtures/playbook_adjacent_collection/non_adjacent_playbooks/playbook2.yml diff --git a/test/fixtures/playbook_adjacent_collection/playbook.yml b/packages/ansible-language-server/test/fixtures/playbook_adjacent_collection/playbook.yml similarity index 100% rename from test/fixtures/playbook_adjacent_collection/playbook.yml rename to packages/ansible-language-server/test/fixtures/playbook_adjacent_collection/playbook.yml diff --git a/test/fixtures/utils/docsFinder/1.py b/packages/ansible-language-server/test/fixtures/utils/docsFinder/1.py similarity index 100% rename from test/fixtures/utils/docsFinder/1.py rename to packages/ansible-language-server/test/fixtures/utils/docsFinder/1.py diff --git a/test/fixtures/utils/docsFinder/10.json b/packages/ansible-language-server/test/fixtures/utils/docsFinder/10.json similarity index 100% rename from test/fixtures/utils/docsFinder/10.json rename to packages/ansible-language-server/test/fixtures/utils/docsFinder/10.json diff --git a/test/fixtures/utils/docsFinder/2.py b/packages/ansible-language-server/test/fixtures/utils/docsFinder/2.py similarity index 100% rename from test/fixtures/utils/docsFinder/2.py rename to packages/ansible-language-server/test/fixtures/utils/docsFinder/2.py diff --git a/test/fixtures/utils/docsFinder/3.py b/packages/ansible-language-server/test/fixtures/utils/docsFinder/3.py similarity index 100% rename from test/fixtures/utils/docsFinder/3.py rename to packages/ansible-language-server/test/fixtures/utils/docsFinder/3.py diff --git a/test/fixtures/utils/docsFinder/4.yml b/packages/ansible-language-server/test/fixtures/utils/docsFinder/4.yml similarity index 100% rename from test/fixtures/utils/docsFinder/4.yml rename to packages/ansible-language-server/test/fixtures/utils/docsFinder/4.yml diff --git a/test/fixtures/utils/docsFinder/5.yml b/packages/ansible-language-server/test/fixtures/utils/docsFinder/5.yml similarity index 100% rename from test/fixtures/utils/docsFinder/5.yml rename to packages/ansible-language-server/test/fixtures/utils/docsFinder/5.yml diff --git a/test/fixtures/utils/docsFinder/6.yaml b/packages/ansible-language-server/test/fixtures/utils/docsFinder/6.yaml similarity index 100% rename from test/fixtures/utils/docsFinder/6.yaml rename to packages/ansible-language-server/test/fixtures/utils/docsFinder/6.yaml diff --git a/test/fixtures/utils/docsFinder/_7.py b/packages/ansible-language-server/test/fixtures/utils/docsFinder/_7.py similarity index 100% rename from test/fixtures/utils/docsFinder/_7.py rename to packages/ansible-language-server/test/fixtures/utils/docsFinder/_7.py diff --git a/test/fixtures/utils/docsFinder/_8.py b/packages/ansible-language-server/test/fixtures/utils/docsFinder/_8.py similarity index 100% rename from test/fixtures/utils/docsFinder/_8.py rename to packages/ansible-language-server/test/fixtures/utils/docsFinder/_8.py diff --git a/test/fixtures/utils/docsFinder/_9.py b/packages/ansible-language-server/test/fixtures/utils/docsFinder/_9.py similarity index 100% rename from test/fixtures/utils/docsFinder/_9.py rename to packages/ansible-language-server/test/fixtures/utils/docsFinder/_9.py diff --git a/test/fixtures/utils/getAnsibleMetaData/ansible.cfg b/packages/ansible-language-server/test/fixtures/utils/getAnsibleMetaData/ansible.cfg similarity index 100% rename from test/fixtures/utils/getAnsibleMetaData/ansible.cfg rename to packages/ansible-language-server/test/fixtures/utils/getAnsibleMetaData/ansible.cfg diff --git a/test/fixtures/utils/getAnsibleMetaData/inventory b/packages/ansible-language-server/test/fixtures/utils/getAnsibleMetaData/inventory similarity index 100% rename from test/fixtures/utils/getAnsibleMetaData/inventory rename to packages/ansible-language-server/test/fixtures/utils/getAnsibleMetaData/inventory diff --git a/test/fixtures/utils/getAnsibleMetaData/plays.yml b/packages/ansible-language-server/test/fixtures/utils/getAnsibleMetaData/plays.yml similarity index 100% rename from test/fixtures/utils/getAnsibleMetaData/plays.yml rename to packages/ansible-language-server/test/fixtures/utils/getAnsibleMetaData/plays.yml diff --git a/test/fixtures/yaml/ancestryBuilder.yml b/packages/ansible-language-server/test/fixtures/yaml/ancestryBuilder.yml similarity index 100% rename from test/fixtures/yaml/ancestryBuilder.yml rename to packages/ansible-language-server/test/fixtures/yaml/ancestryBuilder.yml diff --git a/test/fixtures/yaml/getDeclaredCollections.yml b/packages/ansible-language-server/test/fixtures/yaml/getDeclaredCollections.yml similarity index 100% rename from test/fixtures/yaml/getDeclaredCollections.yml rename to packages/ansible-language-server/test/fixtures/yaml/getDeclaredCollections.yml diff --git a/test/fixtures/yaml/isBlockParam.yml b/packages/ansible-language-server/test/fixtures/yaml/isBlockParam.yml similarity index 100% rename from test/fixtures/yaml/isBlockParam.yml rename to packages/ansible-language-server/test/fixtures/yaml/isBlockParam.yml diff --git a/test/fixtures/yaml/isCursorInsideJinjaBrackets.yml b/packages/ansible-language-server/test/fixtures/yaml/isCursorInsideJinjaBrackets.yml similarity index 100% rename from test/fixtures/yaml/isCursorInsideJinjaBrackets.yml rename to packages/ansible-language-server/test/fixtures/yaml/isCursorInsideJinjaBrackets.yml diff --git a/test/fixtures/yaml/isPlayParam.yml b/packages/ansible-language-server/test/fixtures/yaml/isPlayParam.yml similarity index 100% rename from test/fixtures/yaml/isPlayParam.yml rename to packages/ansible-language-server/test/fixtures/yaml/isPlayParam.yml diff --git a/test/fixtures/yaml/isRoleParam.yml b/packages/ansible-language-server/test/fixtures/yaml/isRoleParam.yml similarity index 100% rename from test/fixtures/yaml/isRoleParam.yml rename to packages/ansible-language-server/test/fixtures/yaml/isRoleParam.yml diff --git a/test/fixtures/yaml/isTaskParamInPlaybook.yml b/packages/ansible-language-server/test/fixtures/yaml/isTaskParamInPlaybook.yml similarity index 100% rename from test/fixtures/yaml/isTaskParamInPlaybook.yml rename to packages/ansible-language-server/test/fixtures/yaml/isTaskParamInPlaybook.yml diff --git a/test/fixtures/yaml/isTaskParamInTaskFile.yml b/packages/ansible-language-server/test/fixtures/yaml/isTaskParamInTaskFile.yml similarity index 100% rename from test/fixtures/yaml/isTaskParamInTaskFile.yml rename to packages/ansible-language-server/test/fixtures/yaml/isTaskParamInTaskFile.yml diff --git a/test/fixtures/yaml/isTaskParamInvalid.yml b/packages/ansible-language-server/test/fixtures/yaml/isTaskParamInvalid.yml similarity index 100% rename from test/fixtures/yaml/isTaskParamInvalid.yml rename to packages/ansible-language-server/test/fixtures/yaml/isTaskParamInvalid.yml diff --git a/test/fixtures/yaml/test.json b/packages/ansible-language-server/test/fixtures/yaml/test.json similarity index 100% rename from test/fixtures/yaml/test.json rename to packages/ansible-language-server/test/fixtures/yaml/test.json diff --git a/test/helper.ts b/packages/ansible-language-server/test/helper.ts similarity index 100% rename from test/helper.ts rename to packages/ansible-language-server/test/helper.ts diff --git a/test/index.ts b/packages/ansible-language-server/test/index.ts similarity index 100% rename from test/index.ts rename to packages/ansible-language-server/test/index.ts diff --git a/test/providers/completionProvider.test.ts b/packages/ansible-language-server/test/providers/completionProvider.test.ts similarity index 100% rename from test/providers/completionProvider.test.ts rename to packages/ansible-language-server/test/providers/completionProvider.test.ts diff --git a/test/providers/completionResolver.test.ts b/packages/ansible-language-server/test/providers/completionResolver.test.ts similarity index 100% rename from test/providers/completionResolver.test.ts rename to packages/ansible-language-server/test/providers/completionResolver.test.ts diff --git a/test/providers/definitionProvider.test.ts b/packages/ansible-language-server/test/providers/definitionProvider.test.ts similarity index 100% rename from test/providers/definitionProvider.test.ts rename to packages/ansible-language-server/test/providers/definitionProvider.test.ts diff --git a/test/providers/hoverProvider.test.ts b/packages/ansible-language-server/test/providers/hoverProvider.test.ts similarity index 100% rename from test/providers/hoverProvider.test.ts rename to packages/ansible-language-server/test/providers/hoverProvider.test.ts diff --git a/test/providers/settingsManager.test.ts b/packages/ansible-language-server/test/providers/settingsManager.test.ts similarity index 100% rename from test/providers/settingsManager.test.ts rename to packages/ansible-language-server/test/providers/settingsManager.test.ts diff --git a/test/providers/validationProvider.test.ts b/packages/ansible-language-server/test/providers/validationProvider.test.ts similarity index 100% rename from test/providers/validationProvider.test.ts rename to packages/ansible-language-server/test/providers/validationProvider.test.ts diff --git a/test/rootMochaHooks.ts b/packages/ansible-language-server/test/rootMochaHooks.ts similarity index 100% rename from test/rootMochaHooks.ts rename to packages/ansible-language-server/test/rootMochaHooks.ts diff --git a/test/utils/getAnsibleMetaData.test.ts b/packages/ansible-language-server/test/utils/getAnsibleMetaData.test.ts similarity index 100% rename from test/utils/getAnsibleMetaData.test.ts rename to packages/ansible-language-server/test/utils/getAnsibleMetaData.test.ts diff --git a/test/utils/pathUtils.test.ts b/packages/ansible-language-server/test/utils/pathUtils.test.ts similarity index 100% rename from test/utils/pathUtils.test.ts rename to packages/ansible-language-server/test/utils/pathUtils.test.ts diff --git a/test/utils/resolveSuffixWhileCompletion.test.ts b/packages/ansible-language-server/test/utils/resolveSuffixWhileCompletion.test.ts similarity index 100% rename from test/utils/resolveSuffixWhileCompletion.test.ts rename to packages/ansible-language-server/test/utils/resolveSuffixWhileCompletion.test.ts diff --git a/test/utils/runCommand.test.ts b/packages/ansible-language-server/test/utils/runCommand.test.ts similarity index 100% rename from test/utils/runCommand.test.ts rename to packages/ansible-language-server/test/utils/runCommand.test.ts diff --git a/test/utils/withInterpreter.test.ts b/packages/ansible-language-server/test/utils/withInterpreter.test.ts similarity index 100% rename from test/utils/withInterpreter.test.ts rename to packages/ansible-language-server/test/utils/withInterpreter.test.ts diff --git a/test/utils/yaml.test.ts b/packages/ansible-language-server/test/utils/yaml.test.ts similarity index 100% rename from test/utils/yaml.test.ts rename to packages/ansible-language-server/test/utils/yaml.test.ts diff --git a/tools/get-image-version b/packages/ansible-language-server/tools/get-image-version similarity index 100% rename from tools/get-image-version rename to packages/ansible-language-server/tools/get-image-version diff --git a/tools/release.sh b/packages/ansible-language-server/tools/release.sh similarity index 100% rename from tools/release.sh rename to packages/ansible-language-server/tools/release.sh diff --git a/tools/settings-doc-generator.ts b/packages/ansible-language-server/tools/settings-doc-generator.ts similarity index 100% rename from tools/settings-doc-generator.ts rename to packages/ansible-language-server/tools/settings-doc-generator.ts diff --git a/tools/test-setup.sh b/packages/ansible-language-server/tools/test-setup.sh similarity index 100% rename from tools/test-setup.sh rename to packages/ansible-language-server/tools/test-setup.sh diff --git a/tools/version_sync.py b/packages/ansible-language-server/tools/version_sync.py similarity index 100% rename from tools/version_sync.py rename to packages/ansible-language-server/tools/version_sync.py diff --git a/tools/vscode.sh b/packages/ansible-language-server/tools/vscode.sh similarity index 100% rename from tools/vscode.sh rename to packages/ansible-language-server/tools/vscode.sh diff --git a/tsconfig.json b/packages/ansible-language-server/tsconfig.json similarity index 100% rename from tsconfig.json rename to packages/ansible-language-server/tsconfig.json From 4e93239fd9a61ecca4aec57dd855960b0cf670ea Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 15 Mar 2024 16:33:16 +0000 Subject: [PATCH 553/558] Configure yaml workspaces for packages/ --- package.json | 7 +- yarn.lock | 1564 +++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 1482 insertions(+), 89 deletions(-) diff --git a/package.json b/package.json index c6e16032e..f8f7e1f05 100644 --- a/package.json +++ b/package.json @@ -712,7 +712,7 @@ ] }, "dependencies": { - "@ansible/ansible-language-server": "^1.2.1", + "@ansible/ansible-language-server": "workspace:^", "@redhat-developer/vscode-redhat-telemetry": "^0.7.1", "@types/ini": "^4.1.0", "@vscode/webview-ui-toolkit": "^1.4.0", @@ -834,5 +834,8 @@ "vsce": { "dependencies": false, "yarn": false - } + }, + "workspaces": [ + "packages/*" + ] } diff --git a/yarn.lock b/yarn.lock index a0329022f..642fa12c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,25 +22,46 @@ __metadata: languageName: node linkType: hard -"@ansible/ansible-language-server@npm:^1.2.1": - version: 1.2.1 - resolution: "@ansible/ansible-language-server@npm:1.2.1" +"@ansible/ansible-language-server@workspace:^, @ansible/ansible-language-server@workspace:packages/ansible-language-server": + version: 0.0.0-use.local + resolution: "@ansible/ansible-language-server@workspace:packages/ansible-language-server" dependencies: - "@flatten-js/interval-tree": "npm:^1.0.20" + "@flatten-js/interval-tree": "npm:^1.1.2" + "@types/chai": "npm:^4.3.11" + "@types/glob": "npm:^8.1.0" + "@types/ini": "npm:^4.1.0" + "@types/lodash": "npm:^4.14.202" + "@types/mocha": "npm:^10.0.6" + "@types/node": "npm:^20.11.7" + "@types/uuid": "npm:^9.0.8" + "@types/vscode": "npm:^1.76.0" + "@typescript-eslint/eslint-plugin": "npm:^6.19.1" + "@typescript-eslint/parser": "npm:^6.19.1" antsibull-docs: "npm:^1.0.0" - glob: "npm:^9.3.2" - ini: "npm:^4.0.0" + chai: "npm:^4.4.1" + eslint: "npm:^8.56.0" + eslint-config-prettier: "npm:^9.1.0" + fuse.js: "npm:^7.0.0" + glob: "npm:>=9.3.2" + handlebars: "npm:^4.7.8" + ini: "npm:^4.1.1" lodash: "npm:^4.17.21" - uuid: "npm:^9.0.0" + mocha: "npm:^10.2.0" + npm-check-updates: "npm:^16.14.14" + nyc: "npm:^15.1.0" + prettier: "npm:^3.2.4" + rimraf: "npm:^5.0.5" + ts-node: "npm:^10.9.2" + typescript: "npm:^5.3.3" + uuid: "npm:^9.0.1" vscode-languageserver: "npm:^8.1.0" - vscode-languageserver-textdocument: "npm:^1.0.8" - vscode-uri: "npm:^3.0.7" - yaml: "npm:^2.2.2" + vscode-languageserver-textdocument: "npm:^1.0.11" + vscode-uri: "npm:^3.0.8" + yaml: "npm:^2.3.4" bin: - ansible-language-server: bin/ansible-language-server - checksum: a502d34a48ff506a37cb96637ce9fdf9f4a1b9e286004cc0d5b614588e005f8aa11c1e377189c7d49b15d40e21e978cfc9612f5a879274e098977b1b532a648a - languageName: node - linkType: hard + ansible-language-server: ./bin/ansible-language-server + languageName: unknown + linkType: soft "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5": version: 7.23.5 @@ -267,6 +288,13 @@ __metadata: languageName: node linkType: hard +"@colors/colors@npm:1.5.0": + version: 1.5.0 + resolution: "@colors/colors@npm:1.5.0" + checksum: 9d226461c1e91e95f067be2bdc5e6f99cfe55a721f45afb44122e23e4b8602eeac4ff7325af6b5a369f36396ee1514d3809af3f57769066d80d83790d8e53339 + languageName: node + linkType: hard + "@cspotcode/source-map-support@npm:^0.8.0": version: 0.8.1 resolution: "@cspotcode/source-map-support@npm:0.8.1" @@ -325,13 +353,20 @@ __metadata: languageName: node linkType: hard -"@flatten-js/interval-tree@npm:^1.0.20": +"@flatten-js/interval-tree@npm:^1.1.2": version: 1.1.2 resolution: "@flatten-js/interval-tree@npm:1.1.2" checksum: 621fde63fbf6cd5c712df8c77a1cc1082b6c7274a68cba0430af7caf49d9ab17b3a63644336885a2e04d784b4dd1ebc286c0caa6d439e96ac02a0154daec15b1 languageName: node linkType: hard +"@gar/promisify@npm:^1.1.3": + version: 1.1.3 + resolution: "@gar/promisify@npm:1.1.3" + checksum: 052dd232140fa60e81588000cbe729a40146579b361f1070bce63e2a761388a22a16d00beeffc504bd3601cb8e055c57b21a185448b3ed550cf50716f4fd442e + languageName: node + linkType: hard + "@hapi/hoek@npm:^9.0.0, @hapi/hoek@npm:^9.3.0": version: 9.3.0 resolution: "@hapi/hoek@npm:9.3.0" @@ -584,6 +619,16 @@ __metadata: languageName: node linkType: hard +"@npmcli/fs@npm:^2.1.0": + version: 2.1.2 + resolution: "@npmcli/fs@npm:2.1.2" + dependencies: + "@gar/promisify": "npm:^1.1.3" + semver: "npm:^7.3.5" + checksum: c5d4dfee80de2236e1e4ed595d17e217aada72ebd8215183fc46096fa010f583dd2aaaa486758de7cc0b89440dbc31cfe8b276269d75d47af35c716e896f78ec + languageName: node + linkType: hard + "@npmcli/fs@npm:^3.1.0": version: 3.1.0 resolution: "@npmcli/fs@npm:3.1.0" @@ -593,6 +638,73 @@ __metadata: languageName: node linkType: hard +"@npmcli/git@npm:^4.0.0": + version: 4.1.0 + resolution: "@npmcli/git@npm:4.1.0" + dependencies: + "@npmcli/promise-spawn": "npm:^6.0.0" + lru-cache: "npm:^7.4.4" + npm-pick-manifest: "npm:^8.0.0" + proc-log: "npm:^3.0.0" + promise-inflight: "npm:^1.0.1" + promise-retry: "npm:^2.0.1" + semver: "npm:^7.3.5" + which: "npm:^3.0.0" + checksum: 33512ce12758d67c0322eca25019c4d5ef03e83f5829e09a05389af485bab216cc4df408b8eba98f2d12c119c6dff84f0d8ff25a1ac5d8a46184e55ae8f53754 + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^2.0.1": + version: 2.0.2 + resolution: "@npmcli/installed-package-contents@npm:2.0.2" + dependencies: + npm-bundled: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + bin: + installed-package-contents: lib/index.js + checksum: 4598a97e3d6e4c8602157d9ac47723071f09662852add0f275af62d1038d8e44d0c5ff9afa05358ba3ca7e100c860d679964be0a163add6ea028dc72d31f0af1 + languageName: node + linkType: hard + +"@npmcli/move-file@npm:^2.0.0": + version: 2.0.1 + resolution: "@npmcli/move-file@npm:2.0.1" + dependencies: + mkdirp: "npm:^1.0.4" + rimraf: "npm:^3.0.2" + checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 + languageName: node + linkType: hard + +"@npmcli/node-gyp@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/node-gyp@npm:3.0.0" + checksum: dd9fed3e80df8fbb20443f28651a8ed7235f2c15286ecc010e2d3cd392c85912e59ef29218c0b02f098defb4cbc8cdf045aab1d32d5cef6ace289913196ed5df + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^6.0.0, @npmcli/promise-spawn@npm:^6.0.1": + version: 6.0.2 + resolution: "@npmcli/promise-spawn@npm:6.0.2" + dependencies: + which: "npm:^3.0.0" + checksum: cc94a83ff1626ad93d42c2ea583dba1fb2d24cdab49caf0af77a3a0ff9bdbba34e09048b6821d4060ea7a58d4a41d49bece4ae3716929e2077c2fff0f5e94d94 + languageName: node + linkType: hard + +"@npmcli/run-script@npm:^6.0.0": + version: 6.0.2 + resolution: "@npmcli/run-script@npm:6.0.2" + dependencies: + "@npmcli/node-gyp": "npm:^3.0.0" + "@npmcli/promise-spawn": "npm:^6.0.0" + node-gyp: "npm:^9.0.0" + read-package-json-fast: "npm:^3.0.0" + which: "npm:^3.0.0" + checksum: 9b22c4c53d4b2e014e7f990cf2e1d32d1830c5629d37a4ee56011bcdfb51424ca8dc3fb3fa550b4abe7e8f0efdd68468d733b754db371b06a5dd300663cf13a2 + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -607,6 +719,33 @@ __metadata: languageName: node linkType: hard +"@pnpm/config.env-replace@npm:^1.1.0": + version: 1.1.0 + resolution: "@pnpm/config.env-replace@npm:1.1.0" + checksum: fabe35cede1b72ad12877b8bed32f7c2fcd89e94408792c4d69009b886671db7988a2132bc18b7157489d2d0fd4266a06c9583be3d2e10c847bf06687420cb2a + languageName: node + linkType: hard + +"@pnpm/network.ca-file@npm:^1.0.1": + version: 1.0.2 + resolution: "@pnpm/network.ca-file@npm:1.0.2" + dependencies: + graceful-fs: "npm:4.2.10" + checksum: d8d0884646500576bd5390464d13db1bb9a62e32a1069293e5bddb2ad8354b354b7e2d2a35e12850025651e795e6a80ce9e601c66312504667b7e3ee7b52becc + languageName: node + linkType: hard + +"@pnpm/npm-conf@npm:^2.1.0": + version: 2.2.2 + resolution: "@pnpm/npm-conf@npm:2.2.2" + dependencies: + "@pnpm/config.env-replace": "npm:^1.1.0" + "@pnpm/network.ca-file": "npm:^1.0.1" + config-chain: "npm:^1.1.11" + checksum: 45422fecc7ed49e5254eef744576625e27cdebccce930f42c66cf2fb70443fc24f506c3fcf4859e6371677ceb144feb45e925ec14774b54588b89806b32dea9a + languageName: node + linkType: hard + "@redhat-developer/vscode-redhat-telemetry@npm:^0.7.1": version: 0.7.1 resolution: "@redhat-developer/vscode-redhat-telemetry@npm:0.7.1" @@ -670,6 +809,43 @@ __metadata: languageName: node linkType: hard +"@sigstore/bundle@npm:^1.1.0": + version: 1.1.0 + resolution: "@sigstore/bundle@npm:1.1.0" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.2.0" + checksum: 79e6cc4cc1858bccbd852dee85d95c66c891b109ea415d5b7b00b6d73791c4f6064c40d09b5aa3f9ec6c19b3145c5cfeece02302f912c186ff0a769667bb9491 + languageName: node + linkType: hard + +"@sigstore/protobuf-specs@npm:^0.2.0": + version: 0.2.1 + resolution: "@sigstore/protobuf-specs@npm:0.2.1" + checksum: cb0b9d9b3ef44a9f1729d85616c5d7c2ebccde303836a5a345ec33a500c7bd5205ffcc31332e0a90831cccc581dafbdf5b868f050c84270c8df6a4a6f2ce0bcb + languageName: node + linkType: hard + +"@sigstore/sign@npm:^1.0.0": + version: 1.0.0 + resolution: "@sigstore/sign@npm:1.0.0" + dependencies: + "@sigstore/bundle": "npm:^1.1.0" + "@sigstore/protobuf-specs": "npm:^0.2.0" + make-fetch-happen: "npm:^11.0.1" + checksum: 44f23fc5eef5b160c0c36c6b19863039bbf375834eeca1ce7f711c82eb5a022174a475f0c06594f17732473c6878f2512f37e65949b7d33af3b2e2773f1bd34f + languageName: node + linkType: hard + +"@sigstore/tuf@npm:^1.0.3": + version: 1.0.3 + resolution: "@sigstore/tuf@npm:1.0.3" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.2.0" + tuf-js: "npm:^1.1.7" + checksum: 5aa1cdea05fabb78232f802821f7e8ee9db3352719b325f2f703f940aac75fc2e71d89cfbd3623ef6b0429e125a5c6145c1fc8ede8d3d5af3affcb71c6453c7b + languageName: node + linkType: hard + "@sindresorhus/is@npm:^5.2.0": version: 5.6.0 resolution: "@sindresorhus/is@npm:5.6.0" @@ -747,6 +923,13 @@ __metadata: languageName: node linkType: hard +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + "@tsconfig/node10@npm:^1.0.7": version: 1.0.9 resolution: "@tsconfig/node10@npm:1.0.9" @@ -775,6 +958,23 @@ __metadata: languageName: node linkType: hard +"@tufjs/canonical-json@npm:1.0.0": + version: 1.0.0 + resolution: "@tufjs/canonical-json@npm:1.0.0" + checksum: 9ff3bcd12988fb23643690da3e009f9130b7b10974f8e7af4bd8ad230a228119de8609aa76d75264fe80f152b50872dea6ea53def69534436a4c24b4fcf6a447 + languageName: node + linkType: hard + +"@tufjs/models@npm:1.0.4": + version: 1.0.4 + resolution: "@tufjs/models@npm:1.0.4" + dependencies: + "@tufjs/canonical-json": "npm:1.0.0" + minimatch: "npm:^9.0.0" + checksum: 2c63e9cfc04a4ce8888e9cc9668a7207e3047d64c50dccc3d2c30057d8bd6c4e89256b6094d2109549278da72c75e20cd8717bb5f4b544dc2323288a2a96607f + languageName: node + linkType: hard + "@types/body-parser@npm:*": version: 1.19.5 resolution: "@types/body-parser@npm:1.19.5" @@ -1064,6 +1264,13 @@ __metadata: languageName: node linkType: hard +"@types/vscode@npm:^1.76.0": + version: 1.87.0 + resolution: "@types/vscode@npm:1.87.0" + checksum: 6f10df10d9fbe305ccd69ad5432357f05de267c72100a5f5aa54341c454b4b3505a98580d0308a5dcd9562268a22701c46e70b744080c50955d44ac415f60cf1 + languageName: node + linkType: hard + "@types/vscode@npm:^1.85.0": version: 1.85.0 resolution: "@types/vscode@npm:1.85.0" @@ -1540,6 +1747,13 @@ __metadata: languageName: node linkType: hard +"abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: 2d882941183c66aa665118bafdab82b7a177e9add5eb2776c33e960a4f3c89cff88a1b38aba13a456de01d0dd9d66a8bea7c903268b21ea91dd1097e1e2e8243 + languageName: node + linkType: hard + "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -1591,7 +1805,7 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:6": +"agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" dependencies: @@ -1609,6 +1823,15 @@ __metadata: languageName: node linkType: hard +"agentkeepalive@npm:^4.2.1": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: "npm:^1.2.1" + checksum: dd210ba2a2e2482028f027b1156789744aadbfd773a6c9dd8e4e8001930d5af82382abe19a69240307b1d8003222ce6b0542935038313434b900e351914fc15f + languageName: node + linkType: hard + "aggregate-error@npm:^3.0.0": version: 3.1.0 resolution: "aggregate-error@npm:3.1.0" @@ -1640,6 +1863,15 @@ __metadata: languageName: node linkType: hard +"ansi-align@npm:^3.0.1": + version: 3.0.1 + resolution: "ansi-align@npm:3.0.1" + dependencies: + string-width: "npm:^4.1.0" + checksum: 4c7e8b6a10eaf18874ecee964b5db62ac86d0b9266ad4987b3a1efcb5d11a9e12c881ee40d14951833135a8966f10a3efe43f9c78286a6e632f53d85ad28b9c0 + languageName: node + linkType: hard + "ansi-colors@npm:4.1.1": version: 4.1.1 resolution: "ansi-colors@npm:4.1.1" @@ -1690,7 +1922,7 @@ __metadata: version: 0.0.0-use.local resolution: "ansible@workspace:." dependencies: - "@ansible/ansible-language-server": "npm:^1.2.1" + "@ansible/ansible-language-server": "workspace:^" "@redhat-developer/vscode-redhat-telemetry": "npm:^0.7.1" "@types/chai": "npm:^4.3.11" "@types/express": "npm:^4.17.21" @@ -1774,6 +2006,13 @@ __metadata: languageName: node linkType: hard +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: c2b9a631298e8d6f3797547e866db642f68493808f5b37cd61da778d5f6ada890d16f668285f7d60bd4fc3b03889bd590ffe62cf81b700e9bb353431238a0a7b + languageName: node + linkType: hard + "archy@npm:^1.0.0": version: 1.0.0 resolution: "archy@npm:1.0.0" @@ -1781,6 +2020,16 @@ __metadata: languageName: node linkType: hard +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: "npm:^1.0.0" + readable-stream: "npm:^3.6.0" + checksum: 390731720e1bf9ed5d0efc635ea7df8cbc4c90308b0645a932f06e8495a0bf1ecc7987d3b97e805f62a17d6c4b634074b25200aa4d149be2a7b17250b9744bc4 + languageName: node + linkType: hard + "arg@npm:^4.1.0": version: 4.1.3 resolution: "arg@npm:4.1.3" @@ -2013,6 +2262,22 @@ __metadata: languageName: node linkType: hard +"boxen@npm:^7.0.0": + version: 7.1.1 + resolution: "boxen@npm:7.1.1" + dependencies: + ansi-align: "npm:^3.0.1" + camelcase: "npm:^7.0.1" + chalk: "npm:^5.2.0" + cli-boxes: "npm:^3.0.0" + string-width: "npm:^5.1.2" + type-fest: "npm:^2.13.0" + widest-line: "npm:^4.0.1" + wrap-ansi: "npm:^8.1.0" + checksum: a21d514435ccdd51f11088ad42e6298e3ff6be1bc2801699dcc1d3d79a2c5b005b5384dd03742e91a1ce2d9aedf99996efb36ed5fc7c5c392e19de2404bcfa37 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -2124,6 +2389,15 @@ __metadata: languageName: node linkType: hard +"builtins@npm:^5.0.0": + version: 5.0.1 + resolution: "builtins@npm:5.0.1" + dependencies: + semver: "npm:^7.0.0" + checksum: 90136fa0ba98b7a3aea33190b1262a5297164731efb6a323b0231acf60cc2ea0b2b1075dbf107038266b8b77d6045fa9631d1c3f90efc1c594ba61218fbfbb4c + languageName: node + linkType: hard + "bytes@npm:3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" @@ -2131,6 +2405,52 @@ __metadata: languageName: node linkType: hard +"cacache@npm:^16.1.0": + version: 16.1.3 + resolution: "cacache@npm:16.1.3" + dependencies: + "@npmcli/fs": "npm:^2.1.0" + "@npmcli/move-file": "npm:^2.0.0" + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.1.0" + glob: "npm:^8.0.1" + infer-owner: "npm:^1.0.4" + lru-cache: "npm:^7.7.1" + minipass: "npm:^3.1.6" + minipass-collect: "npm:^1.0.2" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + mkdirp: "npm:^1.0.4" + p-map: "npm:^4.0.0" + promise-inflight: "npm:^1.0.1" + rimraf: "npm:^3.0.2" + ssri: "npm:^9.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^2.0.0" + checksum: a14524d90e377ee691d63a81173b33c473f8bc66eb299c64290b58e1d41b28842397f8d6c15a01b4c57ca340afcec019ae112a45c2f67a79f76130d326472e92 + languageName: node + linkType: hard + +"cacache@npm:^17.0.0": + version: 17.1.4 + resolution: "cacache@npm:17.1.4" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^7.7.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^1.0.2" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 6e26c788bc6a18ff42f4d4f97db30d5c60a5dfac8e7c10a03b0307a92cf1b647570547cf3cd96463976c051eb9c7258629863f156e224c82018862c1a8ad0e70 + languageName: node + linkType: hard + "cacache@npm:^18.0.0": version: 18.0.2 resolution: "cacache@npm:18.0.2" @@ -2224,6 +2544,13 @@ __metadata: languageName: node linkType: hard +"camelcase@npm:^7.0.1": + version: 7.0.1 + resolution: "camelcase@npm:7.0.1" + checksum: 86ab8f3ebf08bcdbe605a211a242f00ed30d8bfb77dab4ebb744dd36efbc84432d1c4adb28975ba87a1b8be40a80fbd1e60e2f06565315918fa7350011a26d3d + languageName: node + linkType: hard + "caniuse-lite@npm:^1.0.30001580": version: 1.0.30001580 resolution: "caniuse-lite@npm:1.0.30001580" @@ -2276,7 +2603,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^5.3.0": +"chalk@npm:^5.0.1, chalk@npm:^5.2.0, chalk@npm:^5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" checksum: 6373caaab21bd64c405bfc4bd9672b145647fc9482657b5ea1d549b3b2765054e9d3d928870cdf764fb4aad67555f5061538ff247b8310f110c5c888d92397ea @@ -2375,6 +2702,13 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 75bc67902b4d1c7b435497adeb91598f6d52a3389398e44294f6601b20cfef32cf2176f7be0eb961d9e085bb333a8a5cae121cb22f81cf238ae7f58eb80e9397 + languageName: node + linkType: hard + "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -2382,6 +2716,26 @@ __metadata: languageName: node linkType: hard +"cli-boxes@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-boxes@npm:3.0.0" + checksum: 637d84419d293a9eac40a1c8c96a2859e7d98b24a1a317788e13c8f441be052fc899480c6acab3acc82eaf1bccda6b7542d7cdcf5c9c3cc39227175dc098d5b2 + languageName: node + linkType: hard + +"cli-table3@npm:^0.6.3": + version: 0.6.3 + resolution: "cli-table3@npm:0.6.3" + dependencies: + "@colors/colors": "npm:1.5.0" + string-width: "npm:^4.2.0" + dependenciesMeta: + "@colors/colors": + optional: true + checksum: 8d82b75be7edc7febb1283dc49582a521536527cba80af62a2e4522a0ee39c252886a1a2f02d05ae9d753204dbcffeb3a40d1358ee10dccd7fe8d935cfad3f85 + languageName: node + linkType: hard + "clipboardy@npm:^4.0.0": version: 4.0.0 resolution: "clipboardy@npm:4.0.0" @@ -2469,6 +2823,15 @@ __metadata: languageName: node linkType: hard +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 4bcfe30eea1498fe1cabc852bbda6c9770f230ea0e4faf4611c5858b1b9e4dde3730ac485e65f54ca182f4c50b626c1bea7c8441ceda47367a54a818c248aa7a + languageName: node + linkType: hard + "colorette@npm:^2.0.14": version: 2.0.20 resolution: "colorette@npm:2.0.20" @@ -2555,6 +2918,36 @@ __metadata: languageName: node linkType: hard +"config-chain@npm:^1.1.11": + version: 1.1.13 + resolution: "config-chain@npm:1.1.13" + dependencies: + ini: "npm:^1.3.4" + proto-list: "npm:~1.2.1" + checksum: 83d22cabf709e7669f6870021c4d552e4fc02e9682702b726be94295f42ce76cfed00f70b2910ce3d6c9465d9758e191e28ad2e72ff4e3331768a90da6c1ef03 + languageName: node + linkType: hard + +"configstore@npm:^6.0.0": + version: 6.0.0 + resolution: "configstore@npm:6.0.0" + dependencies: + dot-prop: "npm:^6.0.1" + graceful-fs: "npm:^4.2.6" + unique-string: "npm:^3.0.0" + write-file-atomic: "npm:^3.0.3" + xdg-basedir: "npm:^5.0.1" + checksum: 81995351c10bc04c58507f17748477aeac6f47465109d20e3534cebc881d22e927cfd29e73dd852c46c55f62c2b7be4cd1fe6eb3a93ba51f7f9813c218f9bae0 + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 27b5fa302bc8e9ae9e98c03c66d76ca289ad0c61ce2fe20ab288d288bee875d217512d2edb2363fc83165e88f1c405180cf3f5413a46e51b4fe1a004840c6cdb + languageName: node + linkType: hard + "content-disposition@npm:0.5.4": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" @@ -2673,6 +3066,15 @@ __metadata: languageName: node linkType: hard +"crypto-random-string@npm:^4.0.0": + version: 4.0.0 + resolution: "crypto-random-string@npm:4.0.0" + dependencies: + type-fest: "npm:^1.0.1" + checksum: cd5d7ae13803de53680aaed4c732f67209af5988cbeec5f6b29082020347c2d8849ca921b2008be7d6bd1d9d198c3c3697e7441d6d0d3da1bf51e9e4d2032149 + languageName: node + linkType: hard + "css-select@npm:^5.1.0": version: 5.1.0 resolution: "css-select@npm:5.1.0" @@ -2709,7 +3111,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -2801,6 +3203,13 @@ __metadata: languageName: node linkType: hard +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + "depcheck@npm:^1.4.7": version: 1.4.7 resolution: "depcheck@npm:1.4.7" @@ -2946,6 +3355,15 @@ __metadata: languageName: node linkType: hard +"dot-prop@npm:^6.0.1": + version: 6.0.1 + resolution: "dot-prop@npm:6.0.1" + dependencies: + is-obj: "npm:^2.0.0" + checksum: 1200a4f6f81151161b8526c37966d60738cf12619b0ed1f55be01bdb55790bf0a5cd1398b8f2c296dcc07d0a7c2dd0e650baf0b069c367e74bb5df2f6603aba0 + languageName: node + linkType: hard + "dset@npm:^3.1.2": version: 3.1.3 resolution: "dset@npm:3.1.3" @@ -3120,6 +3538,13 @@ __metadata: languageName: node linkType: hard +"escape-goat@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-goat@npm:4.0.0" + checksum: 515f4c5427118a8513ef12ad3fbc194b2a0239a6bc8d923b8ebd885c97f3518ce54f911007e6c9424387d68b0f54cd72aa277cfc2ca44da8cb1bd6a880cfd13c + languageName: node + linkType: hard + "escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" @@ -3523,6 +3948,13 @@ __metadata: languageName: node linkType: hard +"fast-memoize@npm:^2.5.2": + version: 2.5.2 + resolution: "fast-memoize@npm:2.5.2" + checksum: b7e2839d70607c791ffda617bb3cf7d9944bd5483be05cedbc060be1381c79093efc470215f1bc5aa666b8ecc2c9ae49e6f56ab6f45f0c1474f6628651c9959b + languageName: node + linkType: hard + "fastest-levenshtein@npm:^1.0.12": version: 1.0.16 resolution: "fastest-levenshtein@npm:1.0.16" @@ -3715,6 +4147,13 @@ __metadata: languageName: node linkType: hard +"fp-and-or@npm:^0.1.4": + version: 0.1.4 + resolution: "fp-and-or@npm:0.1.4" + checksum: 780969ef7e86e6822d7e5f27d9c3bcbb7fe1206dbdc8af76482a9213d9c812f8d9dfda8d8d3988f94f6cbc898e7a86ec5ab5700ef53b0760b3bf226a2a52e7e0 + languageName: node + linkType: hard + "fresh@npm:0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" @@ -3765,7 +4204,7 @@ __metadata: languageName: node linkType: hard -"fs-minipass@npm:^2.0.0": +"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" dependencies: @@ -3835,10 +4274,33 @@ __metadata: languageName: node linkType: hard -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: 17d8333460204fbf1f9160d067e1e77f908a5447febb49424b8ab043026049835c9ef3974445c57dbd39161f4d2b04356d7de12b2eecaa27a7a7ea7d871cbedd +"fuse.js@npm:^7.0.0": + version: 7.0.0 + resolution: "fuse.js@npm:7.0.0" + checksum: d75d35f2d61afa85b8248f9cbfc7d4df29ae47ea574a15ad5c3c2a41930c5ed78668346295508b59ec4929fcb1a5cd6d9a8c649b5a3bc8b18e515f4e4cb9809d + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: "npm:^1.0.3 || ^2.0.0" + color-support: "npm:^1.1.3" + console-control-strings: "npm:^1.1.0" + has-unicode: "npm:^2.0.1" + signal-exit: "npm:^3.0.7" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + wide-align: "npm:^1.1.5" + checksum: 09535dd53b5ced6a34482b1fa9f3929efdeac02f9858569cde73cef3ed95050e0f3d095706c1689614059898924b7a74aa14042f51381a1ccc4ee5c29d2389c4 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: 17d8333460204fbf1f9160d067e1e77f908a5447febb49424b8ab043026049835c9ef3974445c57dbd39161f4d2b04356d7de12b2eecaa27a7a7ea7d871cbedd languageName: node linkType: hard @@ -3875,6 +4337,13 @@ __metadata: languageName: node linkType: hard +"get-stdin@npm:^8.0.0": + version: 8.0.0 + resolution: "get-stdin@npm:8.0.0" + checksum: 40128b6cd25781ddbd233344f1a1e4006d4284906191ed0a7d55ec2c1a3e44d650f280b2c9eeab79c03ac3037da80257476c0e4e5af38ddfb902d6ff06282d77 + languageName: node + linkType: hard + "get-stream@npm:^5.0.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" @@ -3953,7 +4422,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": +"glob@npm:>=9.3.2, glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": version: 10.3.10 resolution: "glob@npm:10.3.10" dependencies: @@ -3982,15 +4451,25 @@ __metadata: languageName: node linkType: hard -"glob@npm:^9.3.2": - version: 9.3.5 - resolution: "glob@npm:9.3.5" +"glob@npm:^8.0.1": + version: 8.1.0 + resolution: "glob@npm:8.1.0" dependencies: fs.realpath: "npm:^1.0.0" - minimatch: "npm:^8.0.2" - minipass: "npm:^4.2.4" - path-scurry: "npm:^1.6.1" - checksum: e5fa8a58adf53525bca42d82a1fad9e6800032b7e4d372209b80cfdca524dd9a7dbe7d01a92d7ed20d89c572457f12c250092bc8817cb4f1c63efefdf9b658c0 + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^5.0.1" + once: "npm:^1.3.0" + checksum: 9aab1c75eb087c35dbc41d1f742e51d0507aa2b14c910d96fb8287107a10a22f4bbdce26fc0a3da4c69a20f7b26d62f1640b346a4f6e6becfff47f335bb1dc5e + languageName: node + linkType: hard + +"global-dirs@npm:^3.0.0": + version: 3.0.1 + resolution: "global-dirs@npm:3.0.1" + dependencies: + ini: "npm:2.0.0" + checksum: 70147b80261601fd40ac02a104581432325c1c47329706acd773f3a6ce99bb36d1d996038c85ccacd482ad22258ec233c586b6a91535b1a116b89663d49d6438 languageName: node linkType: hard @@ -4034,7 +4513,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.1.0": +"globby@npm:^11.0.4, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -4057,6 +4536,25 @@ __metadata: languageName: node linkType: hard +"got@npm:^12.1.0": + version: 12.6.1 + resolution: "got@npm:12.6.1" + dependencies: + "@sindresorhus/is": "npm:^5.2.0" + "@szmarczak/http-timer": "npm:^5.0.1" + cacheable-lookup: "npm:^7.0.0" + cacheable-request: "npm:^10.2.8" + decompress-response: "npm:^6.0.0" + form-data-encoder: "npm:^2.1.2" + get-stream: "npm:^6.0.1" + http2-wrapper: "npm:^2.1.10" + lowercase-keys: "npm:^3.0.0" + p-cancelable: "npm:^3.0.0" + responselike: "npm:^3.0.0" + checksum: 6c22f1449f4574d79a38e0eba0b753ce2f9030d61838a1ae1e25d3ff5b0db7916aa21023ac369c67d39d17f87bba9283a0b0cb88590de77926c968630aacae75 + languageName: node + linkType: hard + "got@npm:^13.0.0": version: 13.0.0 resolution: "got@npm:13.0.0" @@ -4076,6 +4574,13 @@ __metadata: languageName: node linkType: hard +"graceful-fs@npm:4.2.10": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 0c83c52b62c68a944dcfb9d66b0f9f10f7d6e3d081e8067b9bfdc9e5f3a8896584d576036f82915773189eec1eba599397fc620e75c03c0610fb3d67c6713c1a + languageName: node + linkType: hard + "graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" @@ -4090,6 +4595,24 @@ __metadata: languageName: node linkType: hard +"handlebars@npm:^4.7.8": + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" + dependencies: + minimist: "npm:^1.2.5" + neo-async: "npm:^2.6.2" + source-map: "npm:^0.6.1" + uglify-js: "npm:^3.1.4" + wordwrap: "npm:^1.0.0" + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: bd528f4dd150adf67f3f857118ef0fa43ff79a153b1d943fa0a770f2599e38b25a7a0dbac1a3611a4ec86970fd2325a81310fb788b5c892308c9f8743bd02e11 + languageName: node + linkType: hard + "has-flag@npm:^3.0.0": version: 3.0.0 resolution: "has-flag@npm:3.0.0" @@ -4127,6 +4650,20 @@ __metadata: languageName: node linkType: hard +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 041b4293ad6bf391e21c5d85ed03f412506d6623786b801c4ab39e4e6ca54993f13201bceb544d92963f9e0024e6e7fbf0cb1d84c9d6b31cb9c79c8c990d13d8 + languageName: node + linkType: hard + +"has-yarn@npm:^3.0.0": + version: 3.0.0 + resolution: "has-yarn@npm:3.0.0" + checksum: b9e14e78e0a37bc070550c862b201534287bc10e62a86ec9c1f455ffb082db42817ce9aed914bd73f1d589bbf268520e194629ff2f62ff6b98a482c4bd2dcbfb + languageName: node + linkType: hard + "hasha@npm:^5.0.0": version: 5.2.2 resolution: "hasha@npm:5.2.2" @@ -4173,6 +4710,24 @@ __metadata: languageName: node linkType: hard +"hosted-git-info@npm:^5.1.0": + version: 5.2.1 + resolution: "hosted-git-info@npm:5.2.1" + dependencies: + lru-cache: "npm:^7.5.1" + checksum: f0cb6527162b61a65ac350a4d11f55f16629278a19ca61bf421f272c22531b9a1bad34e874b980db6be512130f189c81d1eb9b481b60eeda293b6dc8d35d2aec + languageName: node + linkType: hard + +"hosted-git-info@npm:^6.0.0": + version: 6.1.1 + resolution: "hosted-git-info@npm:6.1.1" + dependencies: + lru-cache: "npm:^7.5.1" + checksum: 2e48e3fac799b52d82277ff5693916bfa33441a2c06d1f11f9e82886bd235514783c2bdffb3abde67b7aeb6af457a48df38e6894740c7fc2e1bb78f5bcfac61e + languageName: node + linkType: hard + "hpagent@npm:^1.2.0": version: 1.2.0 resolution: "hpagent@npm:1.2.0" @@ -4199,7 +4754,7 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.1.1": +"http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" checksum: 362d5ed66b12ceb9c0a328fb31200b590ab1b02f4a254a697dc796850cc4385603e75f53ec59f768b2dad3bfa1464bd229f7de278d2899a0e3beffc634b6683f @@ -4230,6 +4785,17 @@ __metadata: languageName: node linkType: hard +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": "npm:2" + agent-base: "npm:6" + debug: "npm:4" + checksum: 5ee19423bc3e0fd5f23ce991b0755699ad2a46a440ce9cec99e8126bb98448ad3479d2c0ea54be5519db5b19a4ffaa69616bac01540db18506dd4dac3dc418f0 + languageName: node + linkType: hard + "http-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "http-proxy-agent@npm:7.0.0" @@ -4291,6 +4857,15 @@ __metadata: languageName: node linkType: hard +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: "npm:^2.0.0" + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + "iconv-lite@npm:0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -4316,6 +4891,15 @@ __metadata: languageName: node linkType: hard +"ignore-walk@npm:^6.0.0": + version: 6.0.4 + resolution: "ignore-walk@npm:6.0.4" + dependencies: + minimatch: "npm:^9.0.0" + checksum: a56c3f929bb0890ffb6e87dfaca7d5ce97f9e179fd68d49711edea55760aaee367cea3845d7620689b706249053c4b1805e21158f6751c7333f9b2ffb3668272 + languageName: node + linkType: hard + "ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.0 resolution: "ignore@npm:5.3.0" @@ -4340,6 +4924,13 @@ __metadata: languageName: node linkType: hard +"import-lazy@npm:^4.0.0": + version: 4.0.0 + resolution: "import-lazy@npm:4.0.0" + checksum: 943309cc8eb01ada12700448c288b0384f77a1bc33c7e00fa4cb223c665f467a13ce9aaceb8d2e4cf586b07c1d2828040263dcc069873ce63cfc2ac6fd087971 + languageName: node + linkType: hard + "import-local@npm:^3.0.2": version: 3.1.0 resolution: "import-local@npm:3.1.0" @@ -4366,6 +4957,13 @@ __metadata: languageName: node linkType: hard +"infer-owner@npm:^1.0.4": + version: 1.0.4 + resolution: "infer-owner@npm:1.0.4" + checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 + languageName: node + linkType: hard + "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -4383,6 +4981,13 @@ __metadata: languageName: node linkType: hard +"ini@npm:2.0.0": + version: 2.0.0 + resolution: "ini@npm:2.0.0" + checksum: 04e24ba05c4f6947e15560824e153b4610bceea2f5a3ab68651d221a4aab3c77d4e3e90a917ebc8bf5ad71a30a8575de56c39d6b4c4b1375a28016b9f3625f9d + languageName: node + linkType: hard + "ini@npm:^1.3.4, ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" @@ -4390,7 +4995,7 @@ __metadata: languageName: node linkType: hard -"ini@npm:^4.0.0, ini@npm:^4.1.1": +"ini@npm:^4.1.1": version: 4.1.1 resolution: "ini@npm:4.1.1" checksum: 64c7102301742a7527bb17257d18451410eacf63b4b5648a20e108816c355c21c4e8a1761bbcbf3fe8c4ded3297f1b832b885d5e3e485d781e293ebfaf56fea6 @@ -4411,6 +5016,16 @@ __metadata: languageName: node linkType: hard +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 1ed81e06721af012306329b31f532b5e24e00cb537be18ddc905a84f19fe8f83a09a1699862bf3a1ec4b9dea93c55a3fa5faf8b5ea380431469df540f38b092c + languageName: node + linkType: hard + "ip@npm:^2.0.0": version: 2.0.1 resolution: "ip@npm:2.0.1" @@ -4452,7 +5067,18 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.1.0, is-core-module@npm:^2.12.0, is-core-module@npm:^2.13.0": +"is-ci@npm:^3.0.1": + version: 3.0.1 + resolution: "is-ci@npm:3.0.1" + dependencies: + ci-info: "npm:^3.2.0" + bin: + is-ci: bin.js + checksum: 192c66dc7826d58f803ecae624860dccf1899fc1f3ac5505284c0a5cf5f889046ffeb958fa651e5725d5705c5bcb14f055b79150ea5fcad7456a9569de60260e + languageName: node + linkType: hard + +"is-core-module@npm:^2.1.0, is-core-module@npm:^2.12.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.8.1": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: @@ -4511,6 +5137,16 @@ __metadata: languageName: node linkType: hard +"is-installed-globally@npm:^0.4.0": + version: 0.4.0 + resolution: "is-installed-globally@npm:0.4.0" + dependencies: + global-dirs: "npm:^3.0.0" + is-path-inside: "npm:^3.0.2" + checksum: 5294d21c82cb9beedd693ce1dfb12117c4db36d6e35edc9dc6bf06cb300d23c96520d1bfb063386b054268ae3d7255c3f09393b52218cc26ace99b217bf37c93 + languageName: node + linkType: hard + "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" @@ -4518,6 +5154,13 @@ __metadata: languageName: node linkType: hard +"is-npm@npm:^6.0.0": + version: 6.0.0 + resolution: "is-npm@npm:6.0.0" + checksum: fafe1ddc772345f5460514891bb8014376904ccdbddd59eee7525c9adcc08d426933f28b087bef3e17524da7ebf35c03ef484ff3b6ba9d5fecd8c6e6a7d4bf11 + languageName: node + linkType: hard + "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -4525,7 +5168,14 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.3": +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 @@ -4592,6 +5242,13 @@ __metadata: languageName: node linkType: hard +"is-yarn-global@npm:^0.4.0": + version: 0.4.1 + resolution: "is-yarn-global@npm:0.4.1" + checksum: 79ec4e6f581c53d4fefdf5f6c237f9a3ad8db29c85cdc4659e76ae345659317552052a97b7e56952aa5d94a23c798ebec8ccad72fb14d3b26dc647ddceddd716 + languageName: node + linkType: hard + "is64bit@npm:^2.0.0": version: 2.0.0 resolution: "is64bit@npm:2.0.0" @@ -4734,7 +5391,7 @@ __metadata: languageName: node linkType: hard -"jju@npm:~1.4.0": +"jju@npm:^1.1.0, jju@npm:~1.4.0": version: 1.4.0 resolution: "jju@npm:1.4.0" checksum: 1067ff8ce02221faac5a842116ed0ec79a53312a111d0bf8342a80bd02c0a3fdf0b8449694a65947db0a3e8420e8b326dffb489c7dd5866efc380c0d1708a707 @@ -4784,6 +5441,13 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: bebe7ae829bbd586ce8cbe83501dd8cb8c282c8902a8aeeed0a073a89dc37e8103b1244f3c6acd60278bcbfe12d93a3f83c9ac396868a3b3bbc3c5e5e3b648ef + languageName: node + linkType: hard + "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -4807,6 +5471,22 @@ __metadata: languageName: node linkType: hard +"json-parse-even-better-errors@npm:^3.0.0": + version: 3.0.1 + resolution: "json-parse-even-better-errors@npm:3.0.1" + checksum: bf74fa3f715e56699ccd68b80a7d20908de432a3fae2d5aa2ed530a148e9d9ccdf8e6983b93d9966a553aa70dcf003ce3a7ffec2c0ce74d2a6173e3691a426f0 + languageName: node + linkType: hard + +"json-parse-helpfulerror@npm:^1.0.3": + version: 1.0.3 + resolution: "json-parse-helpfulerror@npm:1.0.3" + dependencies: + jju: "npm:^1.1.0" + checksum: 2094424fa55eccbec2d756eb58228e72c04f0609379e70f31aca287710f058827efab5109919c9416d032bd81ae919b18b126e75619ee97fc6f26d6ac00d296f + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -4828,7 +5508,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.2.3": +"json5@npm:^2.2.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -4857,6 +5537,20 @@ __metadata: languageName: node linkType: hard +"jsonlines@npm:^0.1.1": + version: 0.1.1 + resolution: "jsonlines@npm:0.1.1" + checksum: ab4a41eca33e6e61fc9fb6ad472956b156eee37dee98baad266abfab85463e57cb2997a73dadac3e1ee1b208c8db076572cf08b86e0a69559249790ee47cab27 + languageName: node + linkType: hard + +"jsonparse@npm:^1.3.1": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 24531e956f0f19d79e22c157cebd81b37af3486ae22f9bc1028f8c2a4d1b70df48b168ff86f8568d9c2248182de9b6da9f50f685d5e4b9d1d2d339d2a29d15bc + languageName: node + linkType: hard + "jszip@npm:^3.10.1": version: 3.10.1 resolution: "jszip@npm:3.10.1" @@ -4903,6 +5597,22 @@ __metadata: languageName: node linkType: hard +"kleur@npm:^4.0.1": + version: 4.1.5 + resolution: "kleur@npm:4.1.5" + checksum: 44d84cc4eedd4311099402ef6d4acd9b2d16e08e499d6ef3bb92389bd4692d7ef09e35248c26e27f98acac532122acb12a1bfee645994ae3af4f0a37996da7df + languageName: node + linkType: hard + +"latest-version@npm:^7.0.0": + version: 7.0.0 + resolution: "latest-version@npm:7.0.0" + dependencies: + package-json: "npm:^8.1.0" + checksum: 1f0deba00d5a34394cce4463c938811f51bbb539b131674f4bb2062c63f2cc3b80bccd56ecade3bd5932d04a34cf0a5a8a2ccc4ec9e5e6b285a9a7b3e27d0d66 + languageName: node + linkType: hard + "lazy-ass@npm:1.6.0": version: 1.6.0 resolution: "lazy-ass@npm:1.6.0" @@ -5128,6 +5838,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^7.4.4, lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: 6029ca5aba3aacb554e919d7ef804fffd4adfc4c83db00fac8248c7c78811fb6d4b6f70f7fd9d55032b3823446546a007edaa66ad1f2377ae833bd983fac5d98 + languageName: node + linkType: hard + "magic-string@npm:^0.30.5": version: 0.30.5 resolution: "magic-string@npm:0.30.5" @@ -5162,6 +5879,53 @@ __metadata: languageName: node linkType: hard +"make-fetch-happen@npm:^10.0.3": + version: 10.2.1 + resolution: "make-fetch-happen@npm:10.2.1" + dependencies: + agentkeepalive: "npm:^4.2.1" + cacache: "npm:^16.1.0" + http-cache-semantics: "npm:^4.1.0" + http-proxy-agent: "npm:^5.0.0" + https-proxy-agent: "npm:^5.0.0" + is-lambda: "npm:^1.0.1" + lru-cache: "npm:^7.7.1" + minipass: "npm:^3.1.6" + minipass-collect: "npm:^1.0.2" + minipass-fetch: "npm:^2.0.3" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + promise-retry: "npm:^2.0.1" + socks-proxy-agent: "npm:^7.0.0" + ssri: "npm:^9.0.0" + checksum: fef5acb865a46f25ad0b5ad7d979799125db5dbb24ea811ffa850fbb804bc8e495df2237a8ec3a4fc6250e73c2f95549cca6d6d36a73b1faa61224504eb1188f + languageName: node + linkType: hard + +"make-fetch-happen@npm:^11.0.0, make-fetch-happen@npm:^11.0.1, make-fetch-happen@npm:^11.1.1": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + dependencies: + agentkeepalive: "npm:^4.2.1" + cacache: "npm:^17.0.0" + http-cache-semantics: "npm:^4.1.1" + http-proxy-agent: "npm:^5.0.0" + https-proxy-agent: "npm:^5.0.0" + is-lambda: "npm:^1.0.1" + lru-cache: "npm:^7.7.1" + minipass: "npm:^5.0.0" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + promise-retry: "npm:^2.0.1" + socks-proxy-agent: "npm:^7.0.0" + ssri: "npm:^10.0.0" + checksum: b4b442cfaaec81db159f752a5f2e3ee3d7aa682782868fa399200824ec6298502e01bdc456e443dc219bcd5546c8e4471644d54109c8599841dc961d17a805fa + languageName: node + linkType: hard + "make-fetch-happen@npm:^13.0.0": version: 13.0.0 resolution: "make-fetch-happen@npm:13.0.0" @@ -5337,7 +6101,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:9.0.3, minimatch@npm:^9.0.1, minimatch@npm:^9.0.3": +"minimatch@npm:9.0.3, minimatch@npm:^9.0.0, minimatch@npm:^9.0.1, minimatch@npm:^9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" dependencies: @@ -5355,7 +6119,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.1.0": +"minimatch@npm:^5.0.1, minimatch@npm:^5.1.0": version: 5.1.6 resolution: "minimatch@npm:5.1.6" dependencies: @@ -5373,22 +6137,22 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^8.0.2": - version: 8.0.4 - resolution: "minimatch@npm:8.0.4" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: aef05598ee565e1013bc8a10f53410ac681561f901c1a084b8ecfd016c9ed919f58f4bbd5b63e05643189dfb26e8106a84f0e1ff12e4a263aa37e1cae7ce9828 - languageName: node - linkType: hard - -"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6, minimist@npm:^1.2.8": +"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 908491b6cc15a6c440ba5b22780a0ba89b9810e1aea684e253e43c4e3b8d56ec1dcdd7ea96dde119c29df59c936cde16062159eae4225c691e19c70b432b6e6f languageName: node linkType: hard +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: "npm:^3.0.0" + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + "minipass-collect@npm:^2.0.1": version: 2.0.1 resolution: "minipass-collect@npm:2.0.1" @@ -5398,6 +6162,21 @@ __metadata: languageName: node linkType: hard +"minipass-fetch@npm:^2.0.3": + version: 2.1.2 + resolution: "minipass-fetch@npm:2.1.2" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^3.1.6" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 8cfc589563ae2a11eebbf79121ef9a526fd078fca949ed3f1e4a51472ca4a4aad89fcea1738982ce9d7d833116ecc9c6ae9ebbd844832a94e3f4a3d4d1b9d3b9 + languageName: node + linkType: hard + "minipass-fetch@npm:^3.0.0": version: 3.0.4 resolution: "minipass-fetch@npm:3.0.4" @@ -5422,6 +6201,16 @@ __metadata: languageName: node linkType: hard +"minipass-json-stream@npm:^1.0.1": + version: 1.0.1 + resolution: "minipass-json-stream@npm:1.0.1" + dependencies: + jsonparse: "npm:^1.3.1" + minipass: "npm:^3.0.0" + checksum: 3c65482c630b063c3fa86c853f324a50d9484f2eb6c3034f9c86c0b22f44181668848088f2c869cc764f8a9b8adc8f617f93762cd9d11521f563b8a71c5b815d + languageName: node + linkType: hard + "minipass-pipeline@npm:^1.2.4": version: 1.2.4 resolution: "minipass-pipeline@npm:1.2.4" @@ -5440,7 +6229,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0": +"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": version: 3.3.6 resolution: "minipass@npm:3.3.6" dependencies: @@ -5449,13 +6238,6 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^4.2.4": - version: 4.2.8 - resolution: "minipass@npm:4.2.8" - checksum: e148eb6dcb85c980234cad889139ef8ddf9d5bdac534f4f0268446c8792dd4c74f4502479be48de3c1cce2f6450f6da4d0d4a86405a8a12be04c1c36b339569a - languageName: node - linkType: hard - "minipass@npm:^5.0.0": version: 5.0.0 resolution: "minipass@npm:5.0.0" @@ -5611,7 +6393,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3": +"ms@npm:2.1.3, ms@npm:^2.0.0": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -5740,6 +6522,27 @@ __metadata: languageName: node linkType: hard +"node-gyp@npm:^9.0.0": + version: 9.4.1 + resolution: "node-gyp@npm:9.4.1" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^7.1.4" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^10.0.3" + nopt: "npm:^6.0.0" + npmlog: "npm:^6.0.0" + rimraf: "npm:^3.0.2" + semver: "npm:^7.3.5" + tar: "npm:^6.1.2" + which: "npm:^2.0.2" + bin: + node-gyp: bin/node-gyp.js + checksum: 329b109b138e48cb0416a6bca56e171b0e479d6360a548b80f06eced4bef3cf37652a3d20d171c20023fb18d996bd7446a49d4297ddb59fc48100178a92f432d + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 10.0.1 resolution: "node-gyp@npm:10.0.1" @@ -5786,28 +6589,167 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^7.0.0": - version: 7.2.0 - resolution: "nopt@npm:7.2.0" +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: "npm:^1.0.0" + bin: + nopt: bin/nopt.js + checksum: 3c1128e07cd0241ae66d6e6a472170baa9f3e84dd4203950ba8df5bafac4efa2166ce917a57ef02b01ba7c40d18b2cc64b29b225fd3640791fe07b24f0b33a32 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.0 + resolution: "nopt@npm:7.2.0" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 1e7489f17cbda452c8acaf596a8defb4ae477d2a9953b76eb96f4ec3f62c6b421cd5174eaa742f88279871fde9586d8a1d38fb3f53fa0c405585453be31dff4c + languageName: node + linkType: hard + +"normalize-package-data@npm:^5.0.0": + version: 5.0.0 + resolution: "normalize-package-data@npm:5.0.0" + dependencies: + hosted-git-info: "npm:^6.0.0" + is-core-module: "npm:^2.8.1" + semver: "npm:^7.3.5" + validate-npm-package-license: "npm:^3.0.4" + checksum: 477344ee99c6c81afbc4359f9dc7a3a219cc29a37fe0220a4595bbdb7e1e5fa9e3c195e99900228b72d8676edf99eb99fd3b66aa94b4b8ab74d516f2ff60e510 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"normalize-url@npm:^8.0.0": + version: 8.0.0 + resolution: "normalize-url@npm:8.0.0" + checksum: 4347d6ee39d9e1e7138c9e7c0b459c1e07304d9cd7c62d92c1ca01ed1f0c5397b292079fe7cfa953f469722ae150eec82e14b97e2175af39ede0b58f99ef8cac + languageName: node + linkType: hard + +"npm-bundled@npm:^3.0.0": + version: 3.0.0 + resolution: "npm-bundled@npm:3.0.0" + dependencies: + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 704fce20114d36d665c20edc56d3f9f7778c52ca1cd48731ec31f65af9e65805f9308ca7ed9e5a6bd9fe22327a63aa5d83a8c5aaee0c715e5047de1fa659e8bf + languageName: node + linkType: hard + +"npm-check-updates@npm:^16.14.14": + version: 16.14.16 + resolution: "npm-check-updates@npm:16.14.16" + dependencies: + chalk: "npm:^5.3.0" + cli-table3: "npm:^0.6.3" + commander: "npm:^10.0.1" + fast-memoize: "npm:^2.5.2" + find-up: "npm:5.0.0" + fp-and-or: "npm:^0.1.4" + get-stdin: "npm:^8.0.0" + globby: "npm:^11.0.4" + hosted-git-info: "npm:^5.1.0" + ini: "npm:^4.1.1" + js-yaml: "npm:^4.1.0" + json-parse-helpfulerror: "npm:^1.0.3" + jsonlines: "npm:^0.1.1" + lodash: "npm:^4.17.21" + make-fetch-happen: "npm:^11.1.1" + minimatch: "npm:^9.0.3" + p-map: "npm:^4.0.0" + pacote: "npm:15.2.0" + parse-github-url: "npm:^1.0.2" + progress: "npm:^2.0.3" + prompts-ncu: "npm:^3.0.0" + rc-config-loader: "npm:^4.1.3" + remote-git-tags: "npm:^3.0.0" + rimraf: "npm:^5.0.5" + semver: "npm:^7.5.4" + semver-utils: "npm:^1.1.4" + source-map-support: "npm:^0.5.21" + spawn-please: "npm:^2.0.2" + strip-ansi: "npm:^7.1.0" + strip-json-comments: "npm:^5.0.1" + untildify: "npm:^4.0.0" + update-notifier: "npm:^6.0.2" + bin: + ncu: build/src/bin/cli.js + npm-check-updates: build/src/bin/cli.js + checksum: 4fc97d41c878fcc6b7ff89c0abcabeb172f7d624e288ab13480c08c08cc192cd00b99c2404067277ff7d71509eca8b6f25c4f43c132eabd710d9f7c21526099c + languageName: node + linkType: hard + +"npm-install-checks@npm:^6.0.0": + version: 6.3.0 + resolution: "npm-install-checks@npm:6.3.0" + dependencies: + semver: "npm:^7.1.1" + checksum: 6c20dadb878a0d2f1f777405217b6b63af1299d0b43e556af9363ee6eefaa98a17dfb7b612a473a473e96faf7e789c58b221e0d8ffdc1d34903c4f71618df3b4 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-normalize-package-bin@npm:3.0.1" + checksum: de416d720ab22137a36292ff8a333af499ea0933ef2320a8c6f56a73b0f0448227fec4db5c890d702e26d21d04f271415eab6580b5546456861cc0c19498a4bf + languageName: node + linkType: hard + +"npm-package-arg@npm:^10.0.0": + version: 10.1.0 + resolution: "npm-package-arg@npm:10.1.0" + dependencies: + hosted-git-info: "npm:^6.0.0" + proc-log: "npm:^3.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 3bbb5f081099f73e852b4d3a3a10f78d495bdf21e050ca5c78dc134921c99ec856d1555ff6ba9c1c15b7475ad976ce803ef53fdda34abec622fe8f5d76421319 + languageName: node + linkType: hard + +"npm-packlist@npm:^7.0.0": + version: 7.0.4 + resolution: "npm-packlist@npm:7.0.4" dependencies: - abbrev: "npm:^2.0.0" - bin: - nopt: bin/nopt.js - checksum: 1e7489f17cbda452c8acaf596a8defb4ae477d2a9953b76eb96f4ec3f62c6b421cd5174eaa742f88279871fde9586d8a1d38fb3f53fa0c405585453be31dff4c + ignore-walk: "npm:^6.0.0" + checksum: b24644eefa21d33c55a8f49c64eda4b06edfb7d25853be8ded7346e73c6c447be8a0482314b74f04f94e3f5712e467505dc030826ba55a71d1b948459fad6486 languageName: node linkType: hard -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 +"npm-pick-manifest@npm:^8.0.0": + version: 8.0.2 + resolution: "npm-pick-manifest@npm:8.0.2" + dependencies: + npm-install-checks: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + npm-package-arg: "npm:^10.0.0" + semver: "npm:^7.3.5" + checksum: 3f10a34e12cbb576edb694562a32730c6c0244b2929b91202d1be62ece76bc8b282dc7e9535d313d598963f8e3d06d19973611418a191fe3102be149a8fa0910 languageName: node linkType: hard -"normalize-url@npm:^8.0.0": - version: 8.0.0 - resolution: "normalize-url@npm:8.0.0" - checksum: 4347d6ee39d9e1e7138c9e7c0b459c1e07304d9cd7c62d92c1ca01ed1f0c5397b292079fe7cfa953f469722ae150eec82e14b97e2175af39ede0b58f99ef8cac +"npm-registry-fetch@npm:^14.0.0": + version: 14.0.5 + resolution: "npm-registry-fetch@npm:14.0.5" + dependencies: + make-fetch-happen: "npm:^11.0.0" + minipass: "npm:^5.0.0" + minipass-fetch: "npm:^3.0.0" + minipass-json-stream: "npm:^1.0.1" + minizlib: "npm:^2.1.2" + npm-package-arg: "npm:^10.0.0" + proc-log: "npm:^3.0.0" + checksum: 63026b22d6a6afe5cb3a02dca96db783b88d3acc68be94f3485f25a5e4932800fdeff08145a77b35b8f61987033346462d4b3e710c0729a9735357ff97596062 languageName: node linkType: hard @@ -5829,6 +6771,18 @@ __metadata: languageName: node linkType: hard +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: "npm:^3.0.0" + console-control-strings: "npm:^1.1.0" + gauge: "npm:^4.0.3" + set-blocking: "npm:^2.0.0" + checksum: 82b123677e62deb9e7472e27b92386c09e6e254ee6c8bcd720b3011013e4168bc7088e984f4fbd53cb6e12f8b4690e23e4fa6132689313e0d0dc4feea45489bb + languageName: node + linkType: hard + "nth-check@npm:^2.0.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" @@ -6077,6 +7031,46 @@ __metadata: languageName: node linkType: hard +"package-json@npm:^8.1.0": + version: 8.1.1 + resolution: "package-json@npm:8.1.1" + dependencies: + got: "npm:^12.1.0" + registry-auth-token: "npm:^5.0.1" + registry-url: "npm:^6.0.0" + semver: "npm:^7.3.7" + checksum: d97ce9539e1ed4aacaf7c2cb754f16afc10937fa250bd09b4d61181d2e36a30cf8a4cff2f8f831f0826b0ac01a355f26204c7e57ca0e450da6ccec3e34fc889a + languageName: node + linkType: hard + +"pacote@npm:15.2.0": + version: 15.2.0 + resolution: "pacote@npm:15.2.0" + dependencies: + "@npmcli/git": "npm:^4.0.0" + "@npmcli/installed-package-contents": "npm:^2.0.1" + "@npmcli/promise-spawn": "npm:^6.0.1" + "@npmcli/run-script": "npm:^6.0.0" + cacache: "npm:^17.0.0" + fs-minipass: "npm:^3.0.0" + minipass: "npm:^5.0.0" + npm-package-arg: "npm:^10.0.0" + npm-packlist: "npm:^7.0.0" + npm-pick-manifest: "npm:^8.0.0" + npm-registry-fetch: "npm:^14.0.0" + proc-log: "npm:^3.0.0" + promise-retry: "npm:^2.0.1" + read-package-json: "npm:^6.0.0" + read-package-json-fast: "npm:^3.0.0" + sigstore: "npm:^1.3.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + bin: + pacote: lib/bin.js + checksum: 57e18f4f963abb5f67f794158a55c01ad23f76e56dcdc74e6b843dfdda017515b0e8c0f56e60e842cd5af5ab9b351afdc49fc70633994f0e5fc0c6c9f4bcaebc + languageName: node + linkType: hard + "pako@npm:~1.0.2": version: 1.0.11 resolution: "pako@npm:1.0.11" @@ -6093,6 +7087,15 @@ __metadata: languageName: node linkType: hard +"parse-github-url@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-github-url@npm:1.0.2" + bin: + parse-github-url: ./cli.js + checksum: cb645408cb193f60c9b3be329fb253208aca51709173f2e4f78ba5f4b913d30a9bfa1d910d9544e97ead7e63117b52859ca6ea87f1c505a791647e03366bb0d6 + languageName: node + linkType: hard + "parse-json@npm:^5.0.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" @@ -6182,7 +7185,7 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.10.1, path-scurry@npm:^1.6.1": +"path-scurry@npm:^1.10.1": version: 1.10.1 resolution: "path-scurry@npm:1.10.1" dependencies: @@ -6351,6 +7354,20 @@ __metadata: languageName: node linkType: hard +"progress@npm:^2.0.3": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: e6f0bcb71f716eee9dfac0fe8a2606e3704d6a64dd93baaf49fbadbc8499989a610fe14cf1bc6f61b6d6653c49408d94f4a94e124538084efd8e4cf525e0293d + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 1560d413ea20c5a74f3631d39ba8cbd1972b9228072a755d01e1f5ca5110382d9af76a1582d889445adc6e75bb5ac4886b56dc4b6eae51b30145d7bb1ac7505b + languageName: node + linkType: hard + "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -6361,6 +7378,16 @@ __metadata: languageName: node linkType: hard +"prompts-ncu@npm:^3.0.0": + version: 3.0.0 + resolution: "prompts-ncu@npm:3.0.0" + dependencies: + kleur: "npm:^4.0.1" + sisteransi: "npm:^1.0.5" + checksum: f2a3bcb494daab7d35808b5f9fbeb5af1c50fbcd58ebd3f64cf2d08e4e88396886266886240c86fea67d0467527511cd0db671ef43c60ddecae76d0e9a49d939 + languageName: node + linkType: hard + "prop-types@npm:^15.7.2": version: 15.8.1 resolution: "prop-types@npm:15.8.1" @@ -6372,6 +7399,13 @@ __metadata: languageName: node linkType: hard +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: 9cc3b46d613fa0d637033b225db1bc98e914c3c05864f7adc9bee728192e353125ef2e49f71129a413f6333951756000b0e54f299d921f02d3e9e370cc994100 + languageName: node + linkType: hard + "proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" @@ -6434,6 +7468,15 @@ __metadata: languageName: node linkType: hard +"pupa@npm:^3.1.0": + version: 3.1.0 + resolution: "pupa@npm:3.1.0" + dependencies: + escape-goat: "npm:^4.0.0" + checksum: 32784254b76e455e92169ab88339cf3df8b5d63e52b7e6d0568f065e53946659d4c30e4b75de435c37033b7902bd1c785f142be4afb8aa984a86cf2d7e9a8421 + languageName: node + linkType: hard + "qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" @@ -6494,7 +7537,19 @@ __metadata: languageName: node linkType: hard -"rc@npm:^1.2.7": +"rc-config-loader@npm:^4.1.3": + version: 4.1.3 + resolution: "rc-config-loader@npm:4.1.3" + dependencies: + debug: "npm:^4.3.4" + js-yaml: "npm:^4.1.0" + json5: "npm:^2.2.2" + require-from-string: "npm:^2.0.2" + checksum: 7aa12d17120fef0d8c29b1de532a6fab2704c460fa0f2e13ceaa9317e6fbb767799abc6bc53da0bd65249b252edec47e45eafba4687b10ed4f1e8697991ceeb5 + languageName: node + linkType: hard + +"rc@npm:1.2.8, rc@npm:^1.2.7": version: 1.2.8 resolution: "rc@npm:1.2.8" dependencies: @@ -6524,6 +7579,28 @@ __metadata: languageName: node linkType: hard +"read-package-json-fast@npm:^3.0.0": + version: 3.0.2 + resolution: "read-package-json-fast@npm:3.0.2" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 8d406869f045f1d76e2a99865a8fd1c1af9c1dc06200b94d2b07eef87ed734b22703a8d72e1cd36ea36cc48e22020bdd187f88243c7dd0563f72114d38c17072 + languageName: node + linkType: hard + +"read-package-json@npm:^6.0.0": + version: 6.0.4 + resolution: "read-package-json@npm:6.0.4" + dependencies: + glob: "npm:^10.2.2" + json-parse-even-better-errors: "npm:^3.0.0" + normalize-package-data: "npm:^5.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 2c72fc86745ffd303177ec1490a809fb916d36720cec145900ec92ca5dd159d6f096dd7842ad92dfa01eeea5509e076960a5395e8d5ce31984a4e9070018915a + languageName: node + linkType: hard + "read@npm:^1.0.7": version: 1.0.7 resolution: "read@npm:1.0.7" @@ -6548,7 +7625,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -6589,6 +7666,24 @@ __metadata: languageName: node linkType: hard +"registry-auth-token@npm:^5.0.1": + version: 5.0.2 + resolution: "registry-auth-token@npm:5.0.2" + dependencies: + "@pnpm/npm-conf": "npm:^2.1.0" + checksum: 0d7683b71ee418993e7872b389024b13645c4295eb7bb850d10728eaf46065db24ea4d47dc6cbb71a60d1aa4bef077b0d8b7363c9ac9d355fdba47bebdfb01dd + languageName: node + linkType: hard + +"registry-url@npm:^6.0.0": + version: 6.0.1 + resolution: "registry-url@npm:6.0.1" + dependencies: + rc: "npm:1.2.8" + checksum: 33712aa1b489aab7aba2191c1cdadfdd71f5bf166d4792d81744a6be332c160bd7d9273af8269d8a01284b9562f14a5b31b7abcf7ad9306c44887ecff51c89ab + languageName: node + linkType: hard + "release-zalgo@npm:^1.0.0": version: 1.0.0 resolution: "release-zalgo@npm:1.0.0" @@ -6598,6 +7693,13 @@ __metadata: languageName: node linkType: hard +"remote-git-tags@npm:^3.0.0": + version: 3.0.0 + resolution: "remote-git-tags@npm:3.0.0" + checksum: 04d87e4c98ac414afe03417d3f585c4b782c03fec74561b1fba0bdc5d3a0459f2cfcc14af36fbc153bf601e566d86e9ff6989e289ff57a86f9cfdac6b4f622f2 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -6605,6 +7707,13 @@ __metadata: languageName: node linkType: hard +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 839a3a890102a658f4cb3e7b2aa13a1f80a3a976b512020c3d1efc418491c48a886b6e481ea56afc6c4cb5eef678f23b2a4e70575e7534eccadf5e30ed2e56eb + languageName: node + linkType: hard + "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -6845,6 +7954,22 @@ __metadata: languageName: node linkType: hard +"semver-diff@npm:^4.0.0": + version: 4.0.0 + resolution: "semver-diff@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 4a958d6f76c7e7858268e1e2cf936712542441c9e003e561b574167279eee0a9bd55cc7eae1bfb31d3e7ad06a9fc370e7dd412fcfefec8c0daf1ce5aea623559 + languageName: node + linkType: hard + +"semver-utils@npm:^1.1.4": + version: 1.1.4 + resolution: "semver-utils@npm:1.1.4" + checksum: 93fd955a30f5bdf532163d94981aa03dfbaddf29dad6388415b264c95d7046a6b47d947c6e3e37c0d7867ed3f024aa6e50fc308c9487378354e9d300c9dd68b6 + languageName: node + linkType: hard + "semver@npm:^5.1.0": version: 5.7.2 resolution: "semver@npm:5.7.2" @@ -6863,6 +7988,17 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.0.0, semver@npm:^7.1.1": + version: 7.6.0 + resolution: "semver@npm:7.6.0" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 1b41018df2d8aca5a1db4729985e8e20428c650daea60fcd16e926e9383217d00f574fab92d79612771884a98d2ee2a1973f49d630829a8d54d6570defe62535 + languageName: node + linkType: hard + "semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" @@ -7010,7 +8146,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -7024,6 +8160,21 @@ __metadata: languageName: node linkType: hard +"sigstore@npm:^1.3.0": + version: 1.9.0 + resolution: "sigstore@npm:1.9.0" + dependencies: + "@sigstore/bundle": "npm:^1.1.0" + "@sigstore/protobuf-specs": "npm:^0.2.0" + "@sigstore/sign": "npm:^1.0.0" + "@sigstore/tuf": "npm:^1.0.3" + make-fetch-happen: "npm:^11.0.1" + bin: + sigstore: bin/sigstore.js + checksum: 7ff59f6bbc6fbf4e11f99df36562cdfd8f27f74650e1794942b0f9b567c6facdd0a6c245375111c464a0c367e617793a1c1787ec1dea9784ad2fb698932b9fb9 + languageName: node + linkType: hard + "simple-concat@npm:^1.0.0": version: 1.0.1 resolution: "simple-concat@npm:1.0.1" @@ -7056,6 +8207,13 @@ __metadata: languageName: node linkType: hard +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 + languageName: node + linkType: hard + "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -7070,6 +8228,17 @@ __metadata: languageName: node linkType: hard +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: "npm:^6.0.2" + debug: "npm:^4.3.3" + socks: "npm:^2.6.2" + checksum: 26c75d9c62a9ed3fd494df60e65e88da442f78e0d4bc19bfd85ac37bd2c67470d6d4bba5202e804561cda6674db52864c9e2a2266775f879bc8d89c1445a5f4c + languageName: node + linkType: hard + "socks-proxy-agent@npm:^8.0.1": version: 8.0.2 resolution: "socks-proxy-agent@npm:8.0.2" @@ -7081,6 +8250,16 @@ __metadata: languageName: node linkType: hard +"socks@npm:^2.6.2": + version: 2.8.1 + resolution: "socks@npm:2.8.1" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: a3cc38e0716ab53a2db3fa00c703ca682ad54dbbc9ed4c7461624a999be6fa7cdc79fc904c411618e698d5eff55a55aa6d9329169a7db11636d0200814a2b5aa + languageName: node + linkType: hard + "socks@npm:^2.7.1": version: 2.7.1 resolution: "socks@npm:2.7.1" @@ -7105,7 +8284,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:~0.5.20": +"source-map-support@npm:^0.5.21, source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -7129,6 +8308,15 @@ __metadata: languageName: node linkType: hard +"spawn-please@npm:^2.0.2": + version: 2.0.2 + resolution: "spawn-please@npm:2.0.2" + dependencies: + cross-spawn: "npm:^7.0.3" + checksum: c83d5046af9ad2e0edbc56afbffbbc814bc38fb7cc3cce75608ef10028dbf6d19dd758d0194b11b02b9e2082d77b58caa93f5fa31a7505ef81b467259c877cfd + languageName: node + linkType: hard + "spawn-wrap@npm:^2.0.0": version: 2.0.0 resolution: "spawn-wrap@npm:2.0.0" @@ -7143,6 +8331,40 @@ __metadata: languageName: node linkType: hard +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: "npm:^3.0.0" + spdx-license-ids: "npm:^3.0.0" + checksum: cc2e4dbef822f6d12142116557d63f5facf3300e92a6bd24e907e4865e17b7e1abd0ee6b67f305cae6790fc2194175a24dc394bfcc01eea84e2bdad728e9ae9a + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.17 + resolution: "spdx-license-ids@npm:3.0.17" + checksum: 8f6c6ae02ebb25b4ca658b8990d9e8a8f8d8a95e1d8b9fd84d87eed80a7dc8f8073d6a8d50b8a0295c0e8399e1f8814f5c00e2985e6bf3731540a16f7241cbf1 + languageName: node + linkType: hard + "split@npm:0.3": version: 0.3.3 resolution: "split@npm:0.3.3" @@ -7152,6 +8374,13 @@ __metadata: languageName: node linkType: hard +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: e7587128c423f7e43cc625fe2f87e6affdf5ca51c1cc468e910d8aaca46bb44a7fbcfa552f787b1d3987f7043aeb4527d1b99559e6621e01b42b3f45e5a24cbb + languageName: node + linkType: hard + "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" @@ -7168,6 +8397,15 @@ __metadata: languageName: node linkType: hard +"ssri@npm:^9.0.0": + version: 9.0.1 + resolution: "ssri@npm:9.0.1" + dependencies: + minipass: "npm:^3.1.1" + checksum: 7638a61e91432510718e9265d48d0438a17d53065e5184f1336f234ef6aa3479663942e41e97df56cda06bb24d9d0b5ef342c10685add3cac7267a82d7fa6718 + languageName: node + linkType: hard + "start-server-and-test@npm:^2.0.3": version: 2.0.3 resolution: "start-server-and-test@npm:2.0.3" @@ -7204,7 +8442,7 @@ __metadata: languageName: node linkType: hard -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -7260,7 +8498,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^7.0.1": +"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": version: 7.1.0 resolution: "strip-ansi@npm:7.1.0" dependencies: @@ -7297,6 +8535,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:^5.0.1": + version: 5.0.1 + resolution: "strip-json-comments@npm:5.0.1" + checksum: b314af70c6666a71133e309a571bdb87687fc878d9fd8b38ebed393a77b89835b92f191aa6b0bc10dfd028ba99eed6b6365985001d64c5aef32a4a82456a156b + languageName: node + linkType: hard + "strip-json-comments@npm:~2.0.1": version: 2.0.1 resolution: "strip-json-comments@npm:2.0.1" @@ -7701,6 +8946,17 @@ __metadata: languageName: node linkType: hard +"tuf-js@npm:^1.1.7": + version: 1.1.7 + resolution: "tuf-js@npm:1.1.7" + dependencies: + "@tufjs/models": "npm:1.0.4" + debug: "npm:^4.3.4" + make-fetch-happen: "npm:^11.1.1" + checksum: 8ce0061b76a9dc89fc6e53bc1870afeb8e70083a751910273f959c5d0d574ba9b037a22d944ff97623e58eefa16b051f0ac678bd2da973d2f6b57359604fee31 + languageName: node + linkType: hard + "tunnel-agent@npm:^0.6.0": version: 0.6.0 resolution: "tunnel-agent@npm:0.6.0" @@ -7747,6 +9003,20 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^1.0.1": + version: 1.4.0 + resolution: "type-fest@npm:1.4.0" + checksum: 89875c247564601c2650bacad5ff80b859007fbdb6c9e43713ae3ffa3f584552eea60f33711dd762e16496a1ab4debd409822627be14097d9a17e39c49db591a + languageName: node + linkType: hard + +"type-fest@npm:^2.13.0": + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: 7bf9e8fdf34f92c8bb364c0af14ca875fac7e0183f2985498b77be129dc1b3b1ad0a6b3281580f19e48c6105c037fb966ad9934520c69c6434d17fd0af4eed78 + languageName: node + linkType: hard + "type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -7811,6 +9081,15 @@ __metadata: languageName: node linkType: hard +"uglify-js@npm:^3.1.4": + version: 3.17.4 + resolution: "uglify-js@npm:3.17.4" + bin: + uglifyjs: bin/uglifyjs + checksum: 4c0b800e0ff192079d2c3ce8414fd3b656a570028c7c79af5c29c53d5c532b68bbcae4ad47307f89c2ee124d11826fff7a136b59d5c5bb18422bcdf5568afe1e + languageName: node + linkType: hard + "underscore@npm:^1.12.1": version: 1.13.6 resolution: "underscore@npm:1.13.6" @@ -7825,6 +9104,15 @@ __metadata: languageName: node linkType: hard +"unique-filename@npm:^2.0.0": + version: 2.0.1 + resolution: "unique-filename@npm:2.0.1" + dependencies: + unique-slug: "npm:^3.0.0" + checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f + languageName: node + linkType: hard + "unique-filename@npm:^3.0.0": version: 3.0.0 resolution: "unique-filename@npm:3.0.0" @@ -7834,6 +9122,15 @@ __metadata: languageName: node linkType: hard +"unique-slug@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-slug@npm:3.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 26fc5bc209a875956dd5e84ca39b89bc3be777b112504667c35c861f9547df95afc80439358d836b878b6d91f6ee21fe5ba1a966e9ec2e9f071ddf3fd67d45ee + languageName: node + linkType: hard + "unique-slug@npm:^4.0.0": version: 4.0.0 resolution: "unique-slug@npm:4.0.0" @@ -7843,6 +9140,15 @@ __metadata: languageName: node linkType: hard +"unique-string@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-string@npm:3.0.0" + dependencies: + crypto-random-string: "npm:^4.0.0" + checksum: 1a1e2e7d02eab1bb10f720475da735e1990c8a5ff34edd1a3b6bc31590cb4210b7a1233d779360cc622ce11c211e43afa1628dd658f35d3e6a89964b622940df + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.1 resolution: "universalify@npm:2.0.1" @@ -7896,6 +9202,28 @@ __metadata: languageName: node linkType: hard +"update-notifier@npm:^6.0.2": + version: 6.0.2 + resolution: "update-notifier@npm:6.0.2" + dependencies: + boxen: "npm:^7.0.0" + chalk: "npm:^5.0.1" + configstore: "npm:^6.0.0" + has-yarn: "npm:^3.0.0" + import-lazy: "npm:^4.0.0" + is-ci: "npm:^3.0.1" + is-installed-globally: "npm:^0.4.0" + is-npm: "npm:^6.0.0" + is-yarn-global: "npm:^0.4.0" + latest-version: "npm:^7.0.0" + pupa: "npm:^3.1.0" + semver: "npm:^7.3.7" + semver-diff: "npm:^4.0.0" + xdg-basedir: "npm:^5.1.0" + checksum: 8e8f2092c9acbfd32be77558ce2aef25bc47c9ead347845bc8cd1984eb57e458d223bceee2bb58c60cfaef5f81eb026c5609c9c26ade042aadfe6904bd5d8c2e + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -7958,6 +9286,25 @@ __metadata: languageName: node linkType: hard +"validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: "npm:^3.0.0" + spdx-expression-parse: "npm:^3.0.0" + checksum: 86242519b2538bb8aeb12330edebb61b4eb37fd35ef65220ab0b03a26c0592c1c8a7300d32da3cde5abd08d18d95e8dabfad684b5116336f6de9e6f207eec224 + languageName: node + linkType: hard + +"validate-npm-package-name@npm:^5.0.0": + version: 5.0.0 + resolution: "validate-npm-package-name@npm:5.0.0" + dependencies: + builtins: "npm:^5.0.0" + checksum: 5342a994986199b3c28e53a8452a14b2bb5085727691ea7aa0d284a6606b127c371e0925ae99b3f1ef7cc7d2c9de75f52eb61a3d1cc45e39bca1e3a9444cbb4e + languageName: node + linkType: hard + "validator@npm:^13.6.0": version: 13.11.0 resolution: "validator@npm:13.11.0" @@ -8038,7 +9385,7 @@ __metadata: languageName: node linkType: hard -"vscode-languageserver-textdocument@npm:^1.0.8": +"vscode-languageserver-textdocument@npm:^1.0.11": version: 1.0.11 resolution: "vscode-languageserver-textdocument@npm:1.0.11" checksum: 6096d2a85570e819e01ff406de7c88c48211e6874c6fc71df92193aa8b5aadf40591e44f033d634a95d04975d7aad29049d3eccab617ca41c189ae325aadb913 @@ -8063,7 +9410,7 @@ __metadata: languageName: node linkType: hard -"vscode-uri@npm:^3.0.7, vscode-uri@npm:^3.0.8": +"vscode-uri@npm:^3.0.8": version: 3.0.8 resolution: "vscode-uri@npm:3.0.8" checksum: e882d6b679e0d053cbc042893c0951a135d899a192b62cd07f0a8924f11ae722067a8d6b1b5b147034becf57faf9fff9fb543b17b749fd0f17db1f54f783f07c @@ -8226,7 +9573,7 @@ __metadata: languageName: node linkType: hard -"which@npm:^2.0.1": +"which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" dependencies: @@ -8237,6 +9584,17 @@ __metadata: languageName: node linkType: hard +"which@npm:^3.0.0": + version: 3.0.1 + resolution: "which@npm:3.0.1" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: bin/which.js + checksum: adf720fe9d84be2d9190458194f814b5e9015ae4b88711b150f30d0f4d0b646544794b86f02c7ebeec1db2029bc3e83a7ff156f542d7521447e5496543e26890 + languageName: node + linkType: hard + "which@npm:^4.0.0": version: 4.0.0 resolution: "which@npm:4.0.0" @@ -8248,6 +9606,24 @@ __metadata: languageName: node linkType: hard +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: "npm:^1.0.2 || 2 || 3 || 4" + checksum: d5f8027b9a8255a493a94e4ec1b74a27bff6679d5ffe29316a3215e4712945c84ef73ca4045c7e20ae7d0c72f5f57f296e04a4928e773d4276a2f1222e4c2e99 + languageName: node + linkType: hard + +"widest-line@npm:^4.0.1": + version: 4.0.1 + resolution: "widest-line@npm:4.0.1" + dependencies: + string-width: "npm:^5.0.1" + checksum: 64c48cf27171221be5f86fc54b94dd29879165bdff1a7aa92dde723d9a8c99fb108312768a5d62c8c2b80b701fa27bbd36a1ddc58367585cd45c0db7920a0cba + languageName: node + linkType: hard + "wildcard@npm:^2.0.0": version: 2.0.1 resolution: "wildcard@npm:2.0.1" @@ -8255,6 +9631,13 @@ __metadata: languageName: node linkType: hard +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 497d40beb2bdb08e6d38754faa17ce20b0bf1306327f80cb777927edb23f461ee1f6bc659b3c3c93f26b08e1cf4b46acc5bae8fda1f0be3b5ab9a1a0211034cd + languageName: node + linkType: hard + "workerpool@npm:6.2.1": version: 6.2.1 resolution: "workerpool@npm:6.2.1" @@ -8302,7 +9685,7 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^3.0.0": +"write-file-atomic@npm:^3.0.0, write-file-atomic@npm:^3.0.3": version: 3.0.3 resolution: "write-file-atomic@npm:3.0.3" dependencies: @@ -8329,6 +9712,13 @@ __metadata: languageName: node linkType: hard +"xdg-basedir@npm:^5.0.1, xdg-basedir@npm:^5.1.0": + version: 5.1.0 + resolution: "xdg-basedir@npm:5.1.0" + checksum: b60e8a2c663ccb1dac77c2d913f3b96de48dafbfa083657171d3d50e10820b8a04bb4edfe9f00808c8c20e5f5355e1927bea9029f03136e29265cb98291e1fea + languageName: node + linkType: hard + "xml2js@npm:^0.5.0": version: 0.5.0 resolution: "xml2js@npm:0.5.0" @@ -8395,7 +9785,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.2.2, yaml@npm:^2.3.4": +"yaml@npm:^2.3.4": version: 2.3.4 resolution: "yaml@npm:2.3.4" checksum: f8207ce43065a22268a2806ea6a0fa3974c6fde92b4b2fa0082357e487bc333e85dc518910007e7ac001b532c7c84bd3eccb6c7757e94182b564028b0008f44b From 7d3aabc2e3f40ed1b38bcc3ce7568b9a8ce89904 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 15 Mar 2024 16:43:11 +0000 Subject: [PATCH 554/558] Initial pre-commit fixes --- .pre-commit-config.yaml | 6 +++ packages/ansible-language-server/package.json | 4 +- yarn.lock | 41 ++----------------- 3 files changed, 10 insertions(+), 41 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6e776f8ae..a719c1f82 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,6 +11,12 @@ ci: #- yarn-audit #- yarn-audit-fix - yarn-dedupe +exclude: > + (?x)^( + .config/requirements.in| + .*.svg| + packages/ansible-language-server/.* + )$ minimum_pre_commit_version: 2.9.0 # types_or repos: - repo: https://github.com/shellcheck-py/shellcheck-py diff --git a/packages/ansible-language-server/package.json b/packages/ansible-language-server/package.json index bea427704..8d0cf67e7 100644 --- a/packages/ansible-language-server/package.json +++ b/packages/ansible-language-server/package.json @@ -27,9 +27,7 @@ "node": ">=14.0", "npm": ">=7.11.2" }, - "bin": { - "ansible-language-server": "./bin/ansible-language-server" - }, + "bin": "./bin/ansible-language-server", "main": "./out/server/src/server.js", "types": "./out/server/src/server.d.ts", "files": [ diff --git a/yarn.lock b/yarn.lock index 642fa12c0..3ff935d89 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1264,20 +1264,13 @@ __metadata: languageName: node linkType: hard -"@types/vscode@npm:^1.76.0": +"@types/vscode@npm:^1.76.0, @types/vscode@npm:^1.85.0": version: 1.87.0 resolution: "@types/vscode@npm:1.87.0" checksum: 6f10df10d9fbe305ccd69ad5432357f05de267c72100a5f5aa54341c454b4b3505a98580d0308a5dcd9562268a22701c46e70b744080c50955d44ac415f60cf1 languageName: node linkType: hard -"@types/vscode@npm:^1.85.0": - version: 1.85.0 - resolution: "@types/vscode@npm:1.85.0" - checksum: 100b4dc63629028212ad85d305db57f963ac2eb295c2a96044039f21bb4e68bb0374a9f35780d47c79de7e414b44c06a0d4dc8f3b3218814c4380cef5735818d - languageName: node - linkType: hard - "@types/ws@npm:*": version: 8.5.10 resolution: "@types/ws@npm:8.5.10" @@ -5026,13 +5019,6 @@ __metadata: languageName: node linkType: hard -"ip@npm:^2.0.0": - version: 2.0.1 - resolution: "ip@npm:2.0.1" - checksum: d6dd154e1bc5e8725adfdd6fb92218635b9cbe6d873d051bd63b178f009777f751a5eea4c67021723a7056325fc3052f8b6599af0a2d56f042c93e684b4a0349 - languageName: node - linkType: hard - "ipaddr.js@npm:1.9.1": version: 1.9.1 resolution: "ipaddr.js@npm:1.9.1" @@ -7988,7 +7974,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.0.0, semver@npm:^7.1.1": +"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4": version: 7.6.0 resolution: "semver@npm:7.6.0" dependencies: @@ -7999,17 +7985,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4": - version: 7.5.4 - resolution: "semver@npm:7.5.4" - dependencies: - lru-cache: "npm:^6.0.0" - bin: - semver: bin/semver.js - checksum: 985dec0d372370229a262c737063860fabd4a1c730662c1ea3200a2f649117761a42184c96df62a0e885e76fbd5dace41087d6c1ac0351b13c0df5d6bcb1b5ac - languageName: node - linkType: hard - "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -8250,7 +8225,7 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.6.2": +"socks@npm:^2.6.2, socks@npm:^2.7.1": version: 2.8.1 resolution: "socks@npm:2.8.1" dependencies: @@ -8260,16 +8235,6 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.7.1": - version: 2.7.1 - resolution: "socks@npm:2.7.1" - dependencies: - ip: "npm:^2.0.0" - smart-buffer: "npm:^4.2.0" - checksum: 5074f7d6a13b3155fa655191df1c7e7a48ce3234b8ccf99afa2ccb56591c195e75e8bb78486f8e9ea8168e95a29573cbaad55b2b5e195160ae4d2ea6811ba833 - languageName: node - linkType: hard - "sort-object-keys@npm:^1.1.3": version: 1.1.3 resolution: "sort-object-keys@npm:1.1.3" From 6a9a9bddb69da304e9cabfcc7f141b99fa34eacd Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 15 Mar 2024 16:53:46 +0000 Subject: [PATCH 555/558] Update taskfile (build) --- Taskfile.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Taskfile.yml b/Taskfile.yml index 50da98fc6..66355301c 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -70,6 +70,7 @@ tasks: sources: - package.json - yarn.lock + - node_modules/**/* interactive: true build: desc: Build the project @@ -79,6 +80,7 @@ tasks: # Workaround for https://github.com/redhat-developer/vscode-extension-tester/pull/460#issuecomment-1166315428 # - cd node_modules/vscode-extension-tester && npm update vsce - yarn run clean + - yarn workspace @ansible/ansible-language-server compile - yarn run compile - npx tsc -p ./ sources: From d59ad639fdcb39ce1e314077795f40cec0241d01 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 15 Mar 2024 17:06:11 +0000 Subject: [PATCH 556/558] Update yarn and vscode-extension-tester --- .../{yarn-4.0.2.cjs => yarn-4.1.1.cjs} | 672 ++--- .yarnrc.yml | 2 +- package.json | 4 +- yarn.lock | 2270 ++++++++--------- 4 files changed, 1453 insertions(+), 1495 deletions(-) rename .yarn/releases/{yarn-4.0.2.cjs => yarn-4.1.1.cjs} (51%) diff --git a/.yarn/releases/yarn-4.0.2.cjs b/.yarn/releases/yarn-4.1.1.cjs similarity index 51% rename from .yarn/releases/yarn-4.0.2.cjs rename to .yarn/releases/yarn-4.1.1.cjs index f12c120ed..233bb7a3b 100755 --- a/.yarn/releases/yarn-4.0.2.cjs +++ b/.yarn/releases/yarn-4.1.1.cjs @@ -1,152 +1,152 @@ #!/usr/bin/env node /* eslint-disable */ //prettier-ignore -(()=>{var n_e=Object.create;var MT=Object.defineProperty;var i_e=Object.getOwnPropertyDescriptor;var s_e=Object.getOwnPropertyNames;var o_e=Object.getPrototypeOf,a_e=Object.prototype.hasOwnProperty;var Be=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var Et=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Kt=(t,e)=>{for(var r in e)MT(t,r,{get:e[r],enumerable:!0})},l_e=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of s_e(e))!a_e.call(t,a)&&a!==r&&MT(t,a,{get:()=>e[a],enumerable:!(o=i_e(e,a))||o.enumerable});return t};var $e=(t,e,r)=>(r=t!=null?n_e(o_e(t)):{},l_e(e||!t||!t.__esModule?MT(r,"default",{value:t,enumerable:!0}):r,t));var vi={};Kt(vi,{SAFE_TIME:()=>F7,S_IFDIR:()=>wD,S_IFLNK:()=>ID,S_IFMT:()=>Mu,S_IFREG:()=>Hw});var Mu,wD,Hw,ID,F7,T7=Et(()=>{Mu=61440,wD=16384,Hw=32768,ID=40960,F7=456789e3});var ar={};Kt(ar,{EBADF:()=>Io,EBUSY:()=>c_e,EEXIST:()=>g_e,EINVAL:()=>A_e,EISDIR:()=>h_e,ENOENT:()=>f_e,ENOSYS:()=>u_e,ENOTDIR:()=>p_e,ENOTEMPTY:()=>m_e,EOPNOTSUPP:()=>y_e,EROFS:()=>d_e,ERR_DIR_CLOSED:()=>OT});function Rl(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function c_e(t){return Rl("EBUSY",t)}function u_e(t,e){return Rl("ENOSYS",`${t}, ${e}`)}function A_e(t){return Rl("EINVAL",`invalid argument, ${t}`)}function Io(t){return Rl("EBADF",`bad file descriptor, ${t}`)}function f_e(t){return Rl("ENOENT",`no such file or directory, ${t}`)}function p_e(t){return Rl("ENOTDIR",`not a directory, ${t}`)}function h_e(t){return Rl("EISDIR",`illegal operation on a directory, ${t}`)}function g_e(t){return Rl("EEXIST",`file already exists, ${t}`)}function d_e(t){return Rl("EROFS",`read-only filesystem, ${t}`)}function m_e(t){return Rl("ENOTEMPTY",`directory not empty, ${t}`)}function y_e(t){return Rl("EOPNOTSUPP",`operation not supported, ${t}`)}function OT(){return Rl("ERR_DIR_CLOSED","Directory handle was closed")}var BD=Et(()=>{});var Ea={};Kt(Ea,{BigIntStatsEntry:()=>ey,DEFAULT_MODE:()=>HT,DirEntry:()=>UT,StatEntry:()=>$m,areStatsEqual:()=>jT,clearStats:()=>vD,convertToBigIntStats:()=>C_e,makeDefaultStats:()=>R7,makeEmptyStats:()=>E_e});function R7(){return new $m}function E_e(){return vD(R7())}function vD(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):_T.types.isDate(r)&&(t[e]=new Date(0))}return t}function C_e(t){let e=new ey;for(let r in t)if(Object.hasOwn(t,r)){let o=t[r];typeof o=="number"?e[r]=BigInt(o):_T.types.isDate(o)&&(e[r]=new Date(o))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function jT(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,o=e;return!(r.atimeNs!==o.atimeNs||r.mtimeNs!==o.mtimeNs||r.ctimeNs!==o.ctimeNs||r.birthtimeNs!==o.birthtimeNs)}var _T,HT,UT,$m,ey,qT=Et(()=>{_T=$e(Be("util")),HT=33188,UT=class{constructor(){this.name="";this.path="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},$m=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=HT;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ey=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(HT);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}}});function D_e(t){let e,r;if(e=t.match(B_e))t=e[1];else if(r=t.match(v_e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function P_e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(w_e))?t=`/${e[1]}`:(r=t.match(I_e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function DD(t,e){return t===ue?L7(e):GT(e)}var jw,Bt,dr,ue,K,N7,w_e,I_e,B_e,v_e,GT,L7,Ca=Et(()=>{jw=$e(Be("path")),Bt={root:"/",dot:".",parent:".."},dr={home:"~",nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",pnpData:".pnp.data.json",pnpEsmLoader:".pnp.loader.mjs",rc:".yarnrc.yml",env:".env"},ue=Object.create(jw.default),K=Object.create(jw.default.posix);ue.cwd=()=>process.cwd();K.cwd=process.platform==="win32"?()=>GT(process.cwd()):process.cwd;process.platform==="win32"&&(K.resolve=(...t)=>t.length>0&&K.isAbsolute(t[0])?jw.default.posix.resolve(...t):jw.default.posix.resolve(K.cwd(),...t));N7=function(t,e,r){return e=t.normalize(e),r=t.normalize(r),e===r?".":(e.endsWith(t.sep)||(e=e+t.sep),r.startsWith(e)?r.slice(e.length):null)};ue.contains=(t,e)=>N7(ue,t,e);K.contains=(t,e)=>N7(K,t,e);w_e=/^([a-zA-Z]:.*)$/,I_e=/^\/\/(\.\/)?(.*)$/,B_e=/^\/([a-zA-Z]:.*)$/,v_e=/^\/unc\/(\.dot\/)?(.*)$/;GT=process.platform==="win32"?P_e:t=>t,L7=process.platform==="win32"?D_e:t=>t;ue.fromPortablePath=L7;ue.toPortablePath=GT});async function PD(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let o=[];for(let a of r)for(let n of r)o.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(o),e.indexPath}async function M7(t,e,r,o,a){let n=t.pathUtils.normalize(e),u=r.pathUtils.normalize(o),A=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:Lg,mtime:Lg}:await r.lstatPromise(u);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await YT(A,p,t,n,r,u,{...a,didParentExist:!0});for(let I of A)await I();await Promise.all(p.map(I=>I()))}async function YT(t,e,r,o,a,n,u){let A=u.didParentExist?await O7(r,o):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=u.stableTime?{atime:Lg,mtime:Lg}:p,I;switch(!0){case p.isDirectory():I=await x_e(t,e,r,o,A,a,n,p,u);break;case p.isFile():I=await Q_e(t,e,r,o,A,a,n,p,u);break;case p.isSymbolicLink():I=await F_e(t,e,r,o,A,a,n,p,u);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(u.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((I||A?.mtime?.getTime()!==E.getTime()||A?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(o,h,E)),I=!0),(A===null||(A.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(o,p.mode&511)),I=!0)),I}async function O7(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function x_e(t,e,r,o,a,n,u,A,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(o,{mode:A.mode})}catch(v){if(v.code!=="EEXIST")throw v}}),h=!0);let E=await n.readdirPromise(u),I=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let v of E.sort())await YT(t,e,r,r.pathUtils.join(o,v),n,n.pathUtils.join(u,v),I)&&(h=!0);else(await Promise.all(E.map(async b=>{await YT(t,e,r,r.pathUtils.join(o,b),n,n.pathUtils.join(u,b),I)}))).some(b=>b)&&(h=!0);return h}async function b_e(t,e,r,o,a,n,u,A,p,h){let E=await n.checksumFilePromise(u,{algorithm:"sha1"}),I=r.pathUtils.join(h.indexPath,E.slice(0,2),`${E}.dat`),v;(te=>(te[te.Lock=0]="Lock",te[te.Rename=1]="Rename"))(v||={});let b=1,C=await O7(r,I);if(a){let U=C&&a.dev===C.dev&&a.ino===C.ino,J=C?.mtimeMs!==S_e;if(U&&J&&h.autoRepair&&(b=0,C=null),!U)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1}let T=!C&&b===1?`${I}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,L=!1;return t.push(async()=>{if(!C&&(b===0&&await r.lockPromise(I,async()=>{let U=await n.readFilePromise(u);await r.writeFilePromise(I,U)}),b===1&&T)){let U=await n.readFilePromise(u);await r.writeFilePromise(T,U);try{await r.linkPromise(T,I)}catch(J){if(J.code==="EEXIST")L=!0,await r.unlinkPromise(T);else throw J}}a||await r.linkPromise(I,o)}),e.push(async()=>{C||await r.lutimesPromise(I,Lg,Lg),T&&!L&&await r.unlinkPromise(T)}),!1}async function k_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(u);await r.writeFilePromise(o,h)}),!0}async function Q_e(t,e,r,o,a,n,u,A,p){return p.linkStrategy?.type==="HardlinkFromIndex"?b_e(t,e,r,o,a,n,u,A,p,p.linkStrategy):k_e(t,e,r,o,a,n,u,A,p)}async function F_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(DD(r.pathUtils,await n.readlinkPromise(u)),o)}),!0}var Lg,S_e,WT=Et(()=>{Ca();Lg=new Date(456789e3*1e3),S_e=Lg.getTime()});function SD(t,e,r,o){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let u=t.pathUtils.join(e,n);return Object.assign(t.statSync(u),{name:n,path:void 0})};return new qw(e,a,o)}var qw,U7=Et(()=>{BD();qw=class{constructor(e,r,o={}){this.path=e;this.nextDirent=r;this.opts=o;this.closed=!1}throwIfClosed(){if(this.closed)throw OT()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let r=this.readSync();return typeof e<"u"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}}});function _7(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var H7,ty,j7=Et(()=>{H7=Be("events");qT();ty=class extends H7.EventEmitter{constructor(r,o,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=o,this.bigint=a,this.lastStats=this.stat()}static create(r,o,a){let n=new ty(r,o,a);return n.start(),n}start(){_7(this.status,"ready"),this.status="running",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit("change",this.lastStats,this.lastStats)},3)}stop(){_7(this.status,"running"),this.status="stopped",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit("stop")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let o=this.bigint?new ey:new $m;return vD(o)}}makeInterval(r){let o=setInterval(()=>{let a=this.stat(),n=this.lastStats;jT(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?o:o.unref()}registerChangeListener(r,o){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(o))}unregisterChangeListener(r){this.removeListener("change",r);let o=this.changeListeners.get(r);typeof o<"u"&&clearInterval(o),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function ry(t,e,r,o){let a,n,u,A;switch(typeof r){case"function":a=!1,n=!0,u=5007,A=r;break;default:({bigint:a=!1,persistent:n=!0,interval:u=5007}=r),A=o;break}let p=xD.get(t);typeof p>"u"&&xD.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=ty.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(A,{persistent:n,interval:u}),h}function Mg(t,e,r){let o=xD.get(t);if(typeof o>"u")return;let a=o.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),o.delete(e)))}function Og(t){let e=xD.get(t);if(!(typeof e>"u"))for(let r of e.keys())Mg(t,r)}var xD,VT=Et(()=>{j7();xD=new WeakMap});function T_e(t){let e=t.match(/\r?\n/g);if(e===null)return G7.EOL;let r=e.filter(a=>a===`\r +(()=>{var Z3e=Object.create;var NR=Object.defineProperty;var $3e=Object.getOwnPropertyDescriptor;var e_e=Object.getOwnPropertyNames;var t_e=Object.getPrototypeOf,r_e=Object.prototype.hasOwnProperty;var ve=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var Et=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Vt=(t,e)=>{for(var r in e)NR(t,r,{get:e[r],enumerable:!0})},n_e=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of e_e(e))!r_e.call(t,a)&&a!==r&&NR(t,a,{get:()=>e[a],enumerable:!(o=$3e(e,a))||o.enumerable});return t};var $e=(t,e,r)=>(r=t!=null?Z3e(t_e(t)):{},n_e(e||!t||!t.__esModule?NR(r,"default",{value:t,enumerable:!0}):r,t));var vi={};Vt(vi,{SAFE_TIME:()=>x7,S_IFDIR:()=>wD,S_IFLNK:()=>ID,S_IFMT:()=>Ou,S_IFREG:()=>qw});var Ou,wD,qw,ID,x7,k7=Et(()=>{Ou=61440,wD=16384,qw=32768,ID=40960,x7=456789e3});var ar={};Vt(ar,{EBADF:()=>Io,EBUSY:()=>i_e,EEXIST:()=>u_e,EINVAL:()=>o_e,EISDIR:()=>c_e,ENOENT:()=>a_e,ENOSYS:()=>s_e,ENOTDIR:()=>l_e,ENOTEMPTY:()=>f_e,EOPNOTSUPP:()=>p_e,EROFS:()=>A_e,ERR_DIR_CLOSED:()=>LR});function Tl(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function i_e(t){return Tl("EBUSY",t)}function s_e(t,e){return Tl("ENOSYS",`${t}, ${e}`)}function o_e(t){return Tl("EINVAL",`invalid argument, ${t}`)}function Io(t){return Tl("EBADF",`bad file descriptor, ${t}`)}function a_e(t){return Tl("ENOENT",`no such file or directory, ${t}`)}function l_e(t){return Tl("ENOTDIR",`not a directory, ${t}`)}function c_e(t){return Tl("EISDIR",`illegal operation on a directory, ${t}`)}function u_e(t){return Tl("EEXIST",`file already exists, ${t}`)}function A_e(t){return Tl("EROFS",`read-only filesystem, ${t}`)}function f_e(t){return Tl("ENOTEMPTY",`directory not empty, ${t}`)}function p_e(t){return Tl("EOPNOTSUPP",`operation not supported, ${t}`)}function LR(){return Tl("ERR_DIR_CLOSED","Directory handle was closed")}var BD=Et(()=>{});var Ea={};Vt(Ea,{BigIntStatsEntry:()=>ty,DEFAULT_MODE:()=>UR,DirEntry:()=>OR,StatEntry:()=>ey,areStatsEqual:()=>_R,clearStats:()=>vD,convertToBigIntStats:()=>g_e,makeDefaultStats:()=>Q7,makeEmptyStats:()=>h_e});function Q7(){return new ey}function h_e(){return vD(Q7())}function vD(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):MR.types.isDate(r)&&(t[e]=new Date(0))}return t}function g_e(t){let e=new ty;for(let r in t)if(Object.hasOwn(t,r)){let o=t[r];typeof o=="number"?e[r]=BigInt(o):MR.types.isDate(o)&&(e[r]=new Date(o))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function _R(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,o=e;return!(r.atimeNs!==o.atimeNs||r.mtimeNs!==o.mtimeNs||r.ctimeNs!==o.ctimeNs||r.birthtimeNs!==o.birthtimeNs)}var MR,UR,OR,ey,ty,HR=Et(()=>{MR=$e(ve("util")),UR=33188,OR=class{constructor(){this.name="";this.path="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ey=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=UR;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ty=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(UR);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}}});function C_e(t){let e,r;if(e=t.match(y_e))t=e[1];else if(r=t.match(E_e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function w_e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(d_e))?t=`/${e[1]}`:(r=t.match(m_e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function DD(t,e){return t===ue?R7(e):qR(e)}var jw,Bt,dr,ue,V,F7,d_e,m_e,y_e,E_e,qR,R7,Ca=Et(()=>{jw=$e(ve("path")),Bt={root:"/",dot:".",parent:".."},dr={home:"~",nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",pnpData:".pnp.data.json",pnpEsmLoader:".pnp.loader.mjs",rc:".yarnrc.yml",env:".env"},ue=Object.create(jw.default),V=Object.create(jw.default.posix);ue.cwd=()=>process.cwd();V.cwd=process.platform==="win32"?()=>qR(process.cwd()):process.cwd;process.platform==="win32"&&(V.resolve=(...t)=>t.length>0&&V.isAbsolute(t[0])?jw.default.posix.resolve(...t):jw.default.posix.resolve(V.cwd(),...t));F7=function(t,e,r){return e=t.normalize(e),r=t.normalize(r),e===r?".":(e.endsWith(t.sep)||(e=e+t.sep),r.startsWith(e)?r.slice(e.length):null)};ue.contains=(t,e)=>F7(ue,t,e);V.contains=(t,e)=>F7(V,t,e);d_e=/^([a-zA-Z]:.*)$/,m_e=/^\/\/(\.\/)?(.*)$/,y_e=/^\/([a-zA-Z]:.*)$/,E_e=/^\/unc\/(\.dot\/)?(.*)$/;qR=process.platform==="win32"?w_e:t=>t,R7=process.platform==="win32"?C_e:t=>t;ue.fromPortablePath=R7;ue.toPortablePath=qR});async function SD(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let o=[];for(let a of r)for(let n of r)o.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(o),e.indexPath}async function T7(t,e,r,o,a){let n=t.pathUtils.normalize(e),u=r.pathUtils.normalize(o),A=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:Og,mtime:Og}:await r.lstatPromise(u);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await jR(A,p,t,n,r,u,{...a,didParentExist:!0});for(let I of A)await I();await Promise.all(p.map(I=>I()))}async function jR(t,e,r,o,a,n,u){let A=u.didParentExist?await N7(r,o):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=u.stableTime?{atime:Og,mtime:Og}:p,I;switch(!0){case p.isDirectory():I=await B_e(t,e,r,o,A,a,n,p,u);break;case p.isFile():I=await S_e(t,e,r,o,A,a,n,p,u);break;case p.isSymbolicLink():I=await P_e(t,e,r,o,A,a,n,p,u);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(u.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((I||A?.mtime?.getTime()!==E.getTime()||A?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(o,h,E)),I=!0),(A===null||(A.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(o,p.mode&511)),I=!0)),I}async function N7(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function B_e(t,e,r,o,a,n,u,A,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(o,{mode:A.mode})}catch(v){if(v.code!=="EEXIST")throw v}}),h=!0);let E=await n.readdirPromise(u),I=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let v of E.sort())await jR(t,e,r,r.pathUtils.join(o,v),n,n.pathUtils.join(u,v),I)&&(h=!0);else(await Promise.all(E.map(async x=>{await jR(t,e,r,r.pathUtils.join(o,x),n,n.pathUtils.join(u,x),I)}))).some(x=>x)&&(h=!0);return h}async function v_e(t,e,r,o,a,n,u,A,p,h){let E=await n.checksumFilePromise(u,{algorithm:"sha1"}),I=420,v=A.mode&511,x=`${E}${v!==I?v.toString(8):""}`,C=r.pathUtils.join(h.indexPath,E.slice(0,2),`${x}.dat`),R;(ce=>(ce[ce.Lock=0]="Lock",ce[ce.Rename=1]="Rename"))(R||={});let L=1,U=await N7(r,C);if(a){let ae=U&&a.dev===U.dev&&a.ino===U.ino,fe=U?.mtimeMs!==I_e;if(ae&&fe&&h.autoRepair&&(L=0,U=null),!ae)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1}let J=!U&&L===1?`${C}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,te=!1;return t.push(async()=>{if(!U&&(L===0&&await r.lockPromise(C,async()=>{let ae=await n.readFilePromise(u);await r.writeFilePromise(C,ae)}),L===1&&J)){let ae=await n.readFilePromise(u);await r.writeFilePromise(J,ae);try{await r.linkPromise(J,C)}catch(fe){if(fe.code==="EEXIST")te=!0,await r.unlinkPromise(J);else throw fe}}a||await r.linkPromise(C,o)}),e.push(async()=>{U||(await r.lutimesPromise(C,Og,Og),v!==I&&await r.chmodPromise(C,v)),J&&!te&&await r.unlinkPromise(J)}),!1}async function D_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(u);await r.writeFilePromise(o,h)}),!0}async function S_e(t,e,r,o,a,n,u,A,p){return p.linkStrategy?.type==="HardlinkFromIndex"?v_e(t,e,r,o,a,n,u,A,p,p.linkStrategy):D_e(t,e,r,o,a,n,u,A,p)}async function P_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(DD(r.pathUtils,await n.readlinkPromise(u)),o)}),!0}var Og,I_e,GR=Et(()=>{Ca();Og=new Date(456789e3*1e3),I_e=Og.getTime()});function PD(t,e,r,o){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let u=t.pathUtils.join(e,n);return Object.assign(t.statSync(u),{name:n,path:void 0})};return new Gw(e,a,o)}var Gw,L7=Et(()=>{BD();Gw=class{constructor(e,r,o={}){this.path=e;this.nextDirent=r;this.opts=o;this.closed=!1}throwIfClosed(){if(this.closed)throw LR()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let r=this.readSync();return typeof e<"u"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}}});function O7(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var M7,ry,U7=Et(()=>{M7=ve("events");HR();ry=class extends M7.EventEmitter{constructor(r,o,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=o,this.bigint=a,this.lastStats=this.stat()}static create(r,o,a){let n=new ry(r,o,a);return n.start(),n}start(){O7(this.status,"ready"),this.status="running",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit("change",this.lastStats,this.lastStats)},3)}stop(){O7(this.status,"running"),this.status="stopped",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit("stop")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let o=this.bigint?new ty:new ey;return vD(o)}}makeInterval(r){let o=setInterval(()=>{let a=this.stat(),n=this.lastStats;_R(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?o:o.unref()}registerChangeListener(r,o){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(o))}unregisterChangeListener(r){this.removeListener("change",r);let o=this.changeListeners.get(r);typeof o<"u"&&clearInterval(o),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function ny(t,e,r,o){let a,n,u,A;switch(typeof r){case"function":a=!1,n=!0,u=5007,A=r;break;default:({bigint:a=!1,persistent:n=!0,interval:u=5007}=r),A=o;break}let p=bD.get(t);typeof p>"u"&&bD.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=ry.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(A,{persistent:n,interval:u}),h}function Mg(t,e,r){let o=bD.get(t);if(typeof o>"u")return;let a=o.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),o.delete(e)))}function Ug(t){let e=bD.get(t);if(!(typeof e>"u"))for(let r of e.keys())Mg(t,r)}var bD,YR=Et(()=>{U7();bD=new WeakMap});function b_e(t){let e=t.match(/\r?\n/g);if(e===null)return H7.EOL;let r=e.filter(a=>a===`\r `).length,o=e.length-r;return r>o?`\r `:` -`}function Ug(t,e){return e.replace(/\r?\n/g,T_e(t))}var q7,G7,hf,Ou,_g=Et(()=>{q7=Be("crypto"),G7=Be("os");WT();Ca();hf=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let o=[e];for(;o.length>0;){let a=o.shift();if((await this.lstatPromise(a)).isDirectory()){let u=await this.readdirPromise(a);if(r)for(let A of u.sort())o.push(this.pathUtils.join(a,A));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let o=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,q7.createHash)(r),A=0;for(;(A=await this.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await this.closePromise(o)}}async removePromise(e,{recursive:r=!0,maxRetries:o=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(u=>this.removePromise(this.pathUtils.resolve(e,u))))}for(let n=0;n<=o;n++)try{await this.rmdirPromise(e);break}catch(u){if(u.code!=="EBUSY"&&u.code!=="ENOTEMPTY")throw u;nsetTimeout(A,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let o;try{o=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(o.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{await this.mkdirPromise(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&await this.chmodPromise(A,r),o!=null)await this.utimesPromise(A,o[0],o[1]);else{let p=await this.statPromise(this.pathUtils.dirname(A));await this.utimesPromise(A,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{this.mkdirSync(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&this.chmodSync(A,r),o!=null)this.utimesSync(A,o[0],o[1]);else{let p=this.statSync(this.pathUtils.dirname(A));this.utimesSync(A,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:o=this,overwrite:a=!0,stableSort:n=!1,stableTime:u=!1,linkStrategy:A=null}={}){return await M7(this,e,o,r,{overwrite:a,stableSort:n,stableTime:u,linkStrategy:A})}copySync(e,r,{baseFs:o=this,overwrite:a=!0}={}){let n=o.lstatSync(r),u=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=o.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),o.pathUtils.join(r,h),{baseFs:o,overwrite:a})}else if(n.isFile()){if(!u||a){u&&this.removeSync(e);let p=o.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!u||a){u&&this.removeSync(e);let p=o.readlinkSync(r);this.symlinkSync(DD(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let A=n.mode&511;this.chmodSync(e,A)}async changeFilePromise(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,o):this.changeFileTextPromise(e,r,o)}async changeFileBufferPromise(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:o})}async changeFileTextPromise(e,r,{automaticNewlines:o,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let u=o?Ug(n,r):r;n!==u&&await this.writeFilePromise(e,u,{mode:a})}changeFileSync(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,o):this.changeFileTextSync(e,r,o)}changeFileBufferSync(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:o})}changeFileTextSync(e,r,{automaticNewlines:o=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let u=o?Ug(n,r):r;n!==u&&this.writeFileSync(e,u,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(o){if(o.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw o}}moveSync(e,r){try{this.renameSync(e,r)}catch(o){if(o.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw o}}async lockPromise(e,r){let o=`${e}.flock`,a=1e3/60,n=Date.now(),u=null,A=async()=>{let p;try{[p]=await this.readJsonPromise(o)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;u===null;)try{u=await this.openPromise(o,"wx")}catch(p){if(p.code==="EEXIST"){if(!await A())try{await this.unlinkPromise(o);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${o})`)}else throw p}await this.writePromise(u,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(u),await this.unlinkPromise(o)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}async writeJsonPromise(e,r,{compact:o=!1}={}){let a=o?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} +`}function _g(t,e){return e.replace(/\r?\n/g,b_e(t))}var _7,H7,gf,Mu,Hg=Et(()=>{_7=ve("crypto"),H7=ve("os");GR();Ca();gf=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let o=[e];for(;o.length>0;){let a=o.shift();if((await this.lstatPromise(a)).isDirectory()){let u=await this.readdirPromise(a);if(r)for(let A of u.sort())o.push(this.pathUtils.join(a,A));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let o=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,_7.createHash)(r),A=0;for(;(A=await this.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await this.closePromise(o)}}async removePromise(e,{recursive:r=!0,maxRetries:o=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(u=>this.removePromise(this.pathUtils.resolve(e,u))))}for(let n=0;n<=o;n++)try{await this.rmdirPromise(e);break}catch(u){if(u.code!=="EBUSY"&&u.code!=="ENOTEMPTY")throw u;nsetTimeout(A,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let o;try{o=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(o.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{await this.mkdirPromise(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&await this.chmodPromise(A,r),o!=null)await this.utimesPromise(A,o[0],o[1]);else{let p=await this.statPromise(this.pathUtils.dirname(A));await this.utimesPromise(A,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{this.mkdirSync(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&this.chmodSync(A,r),o!=null)this.utimesSync(A,o[0],o[1]);else{let p=this.statSync(this.pathUtils.dirname(A));this.utimesSync(A,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:o=this,overwrite:a=!0,stableSort:n=!1,stableTime:u=!1,linkStrategy:A=null}={}){return await T7(this,e,o,r,{overwrite:a,stableSort:n,stableTime:u,linkStrategy:A})}copySync(e,r,{baseFs:o=this,overwrite:a=!0}={}){let n=o.lstatSync(r),u=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=o.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),o.pathUtils.join(r,h),{baseFs:o,overwrite:a})}else if(n.isFile()){if(!u||a){u&&this.removeSync(e);let p=o.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!u||a){u&&this.removeSync(e);let p=o.readlinkSync(r);this.symlinkSync(DD(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let A=n.mode&511;this.chmodSync(e,A)}async changeFilePromise(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,o):this.changeFileTextPromise(e,r,o)}async changeFileBufferPromise(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:o})}async changeFileTextPromise(e,r,{automaticNewlines:o,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let u=o?_g(n,r):r;n!==u&&await this.writeFilePromise(e,u,{mode:a})}changeFileSync(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,o):this.changeFileTextSync(e,r,o)}changeFileBufferSync(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:o})}changeFileTextSync(e,r,{automaticNewlines:o=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let u=o?_g(n,r):r;n!==u&&this.writeFileSync(e,u,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(o){if(o.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw o}}moveSync(e,r){try{this.renameSync(e,r)}catch(o){if(o.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw o}}async lockPromise(e,r){let o=`${e}.flock`,a=1e3/60,n=Date.now(),u=null,A=async()=>{let p;try{[p]=await this.readJsonPromise(o)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;u===null;)try{u=await this.openPromise(o,"wx")}catch(p){if(p.code==="EEXIST"){if(!await A())try{await this.unlinkPromise(o);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${o})`)}else throw p}await this.writePromise(u,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(u),await this.unlinkPromise(o)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}async writeJsonPromise(e,r,{compact:o=!1}={}){let a=o?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} `)}writeJsonSync(e,r,{compact:o=!1}={}){let a=o?0:2;return this.writeFileSync(e,`${JSON.stringify(r,null,a)} -`)}async preserveTimePromise(e,r){let o=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,o.atime,o.mtime)}async preserveTimeSync(e,r){let o=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,o.atime,o.mtime)}},Ou=class extends hf{constructor(){super(K)}}});var Ps,gf=Et(()=>{_g();Ps=class extends hf{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,o){return this.baseFs.openPromise(this.mapToBase(e),r,o)}openSync(e,r,o){return this.baseFs.openSync(this.mapToBase(e),r,o)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,o,a,n){return await this.baseFs.readPromise(e,r,o,a,n)}readSync(e,r,o,a,n){return this.baseFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,o):await this.baseFs.writePromise(e,r,o,a,n)}writeSync(e,r,o,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,o):this.baseFs.writeSync(e,r,o,a,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async fchownPromise(e,r,o){return this.baseFs.fchownPromise(e,r,o)}fchownSync(e,r,o){return this.baseFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return this.baseFs.chownPromise(this.mapToBase(e),r,o)}chownSync(e,r,o){return this.baseFs.chownSync(this.mapToBase(e),r,o)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,o=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),o)}copyFileSync(e,r,o=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),o)}async appendFilePromise(e,r,o){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,o)}appendFileSync(e,r,o){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,o)}async writeFilePromise(e,r,o){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,o)}writeFileSync(e,r,o){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,o)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,o){return this.baseFs.utimesPromise(this.mapToBase(e),r,o)}utimesSync(e,r,o){return this.baseFs.utimesSync(this.mapToBase(e),r,o)}async lutimesPromise(e,r,o){return this.baseFs.lutimesPromise(this.mapToBase(e),r,o)}lutimesSync(e,r,o){return this.baseFs.lutimesSync(this.mapToBase(e),r,o)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(u,a,o)}symlinkSync(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(u,a,o)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,o){return this.baseFs.watch(this.mapToBase(e),r,o)}watchFile(e,r,o){return this.baseFs.watchFile(this.mapToBase(e),r,o)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var Uu,Y7=Et(()=>{gf();Uu=class extends Ps{constructor(r,{baseFs:o,pathUtils:a}){super(a);this.target=r,this.baseFs=o}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(r){return r}mapToBase(r){return r}}});function W7(t){let e=t;return typeof t.path=="string"&&(e.path=ue.toPortablePath(t.path)),e}var V7,Rn,Hg=Et(()=>{V7=$e(Be("fs"));_g();Ca();Rn=class extends Ou{constructor(r=V7.default){super();this.realFs=r}getExtractHint(){return!1}getRealPath(){return Bt.root}resolve(r){return K.resolve(r)}async openPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.open(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}openSync(r,o,a){return this.realFs.openSync(ue.fromPortablePath(r),o,a)}async opendirPromise(r,o){return await new Promise((a,n)=>{typeof o<"u"?this.realFs.opendir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.opendir(ue.fromPortablePath(r),this.makeCallback(a,n))}).then(a=>{let n=a;return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n})}opendirSync(r,o){let n=typeof o<"u"?this.realFs.opendirSync(ue.fromPortablePath(r),o):this.realFs.opendirSync(ue.fromPortablePath(r));return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n}async readPromise(r,o,a=0,n=0,u=-1){return await new Promise((A,p)=>{this.realFs.read(r,o,a,n,u,(h,E)=>{h?p(h):A(E)})})}readSync(r,o,a,n,u){return this.realFs.readSync(r,o,a,n,u)}async writePromise(r,o,a,n,u){return await new Promise((A,p)=>typeof o=="string"?this.realFs.write(r,o,a,this.makeCallback(A,p)):this.realFs.write(r,o,a,n,u,this.makeCallback(A,p)))}writeSync(r,o,a,n,u){return typeof o=="string"?this.realFs.writeSync(r,o,a):this.realFs.writeSync(r,o,a,n,u)}async closePromise(r){await new Promise((o,a)=>{this.realFs.close(r,this.makeCallback(o,a))})}closeSync(r){this.realFs.closeSync(r)}createReadStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createReadStream(a,o)}createWriteStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createWriteStream(a,o)}async realpathPromise(r){return await new Promise((o,a)=>{this.realFs.realpath(ue.fromPortablePath(r),{},this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}realpathSync(r){return ue.toPortablePath(this.realFs.realpathSync(ue.fromPortablePath(r),{}))}async existsPromise(r){return await new Promise(o=>{this.realFs.exists(ue.fromPortablePath(r),o)})}accessSync(r,o){return this.realFs.accessSync(ue.fromPortablePath(r),o)}async accessPromise(r,o){return await new Promise((a,n)=>{this.realFs.access(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}existsSync(r){return this.realFs.existsSync(ue.fromPortablePath(r))}async statPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.stat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.stat(ue.fromPortablePath(r),this.makeCallback(a,n))})}statSync(r,o){return o?this.realFs.statSync(ue.fromPortablePath(r),o):this.realFs.statSync(ue.fromPortablePath(r))}async fstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.fstat(r,o,this.makeCallback(a,n)):this.realFs.fstat(r,this.makeCallback(a,n))})}fstatSync(r,o){return o?this.realFs.fstatSync(r,o):this.realFs.fstatSync(r)}async lstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.lstat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.lstat(ue.fromPortablePath(r),this.makeCallback(a,n))})}lstatSync(r,o){return o?this.realFs.lstatSync(ue.fromPortablePath(r),o):this.realFs.lstatSync(ue.fromPortablePath(r))}async fchmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.fchmod(r,o,this.makeCallback(a,n))})}fchmodSync(r,o){return this.realFs.fchmodSync(r,o)}async chmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.chmod(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}chmodSync(r,o){return this.realFs.chmodSync(ue.fromPortablePath(r),o)}async fchownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.fchown(r,o,a,this.makeCallback(n,u))})}fchownSync(r,o,a){return this.realFs.fchownSync(r,o,a)}async chownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.chown(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}chownSync(r,o,a){return this.realFs.chownSync(ue.fromPortablePath(r),o,a)}async renamePromise(r,o){return await new Promise((a,n)=>{this.realFs.rename(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}renameSync(r,o){return this.realFs.renameSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async copyFilePromise(r,o,a=0){return await new Promise((n,u)=>{this.realFs.copyFile(ue.fromPortablePath(r),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}copyFileSync(r,o,a=0){return this.realFs.copyFileSync(ue.fromPortablePath(r),ue.fromPortablePath(o),a)}async appendFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFile(A,o,a,this.makeCallback(n,u)):this.realFs.appendFile(A,o,this.makeCallback(n,u))})}appendFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFileSync(n,o,a):this.realFs.appendFileSync(n,o)}async writeFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFile(A,o,a,this.makeCallback(n,u)):this.realFs.writeFile(A,o,this.makeCallback(n,u))})}writeFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFileSync(n,o,a):this.realFs.writeFileSync(n,o)}async unlinkPromise(r){return await new Promise((o,a)=>{this.realFs.unlink(ue.fromPortablePath(r),this.makeCallback(o,a))})}unlinkSync(r){return this.realFs.unlinkSync(ue.fromPortablePath(r))}async utimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.utimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}utimesSync(r,o,a){this.realFs.utimesSync(ue.fromPortablePath(r),o,a)}async lutimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.lutimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}lutimesSync(r,o,a){this.realFs.lutimesSync(ue.fromPortablePath(r),o,a)}async mkdirPromise(r,o){return await new Promise((a,n)=>{this.realFs.mkdir(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}mkdirSync(r,o){return this.realFs.mkdirSync(ue.fromPortablePath(r),o)}async rmdirPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rmdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rmdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}rmdirSync(r,o){return this.realFs.rmdirSync(ue.fromPortablePath(r),o)}async linkPromise(r,o){return await new Promise((a,n)=>{this.realFs.link(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}linkSync(r,o){return this.realFs.linkSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async symlinkPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.symlink(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}symlinkSync(r,o,a){return this.realFs.symlinkSync(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a)}async readFilePromise(r,o){return await new Promise((a,n)=>{let u=typeof r=="string"?ue.fromPortablePath(r):r;this.realFs.readFile(u,o,this.makeCallback(a,n))})}readFileSync(r,o){let a=typeof r=="string"?ue.fromPortablePath(r):r;return this.realFs.readFileSync(a,o)}async readdirPromise(r,o){return await new Promise((a,n)=>{o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(W7)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(ue.toPortablePath)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.readdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}readdirSync(r,o){return o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdirSync(ue.fromPortablePath(r),o).map(W7):this.realFs.readdirSync(ue.fromPortablePath(r),o).map(ue.toPortablePath):this.realFs.readdirSync(ue.fromPortablePath(r),o):this.realFs.readdirSync(ue.fromPortablePath(r))}async readlinkPromise(r){return await new Promise((o,a)=>{this.realFs.readlink(ue.fromPortablePath(r),this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}readlinkSync(r){return ue.toPortablePath(this.realFs.readlinkSync(ue.fromPortablePath(r)))}async truncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.truncate(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}truncateSync(r,o){return this.realFs.truncateSync(ue.fromPortablePath(r),o)}async ftruncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.ftruncate(r,o,this.makeCallback(a,n))})}ftruncateSync(r,o){return this.realFs.ftruncateSync(r,o)}watch(r,o,a){return this.realFs.watch(ue.fromPortablePath(r),o,a)}watchFile(r,o,a){return this.realFs.watchFile(ue.fromPortablePath(r),o,a)}unwatchFile(r,o){return this.realFs.unwatchFile(ue.fromPortablePath(r),o)}makeCallback(r,o){return(a,n)=>{a?o(a):r(n)}}}});var gn,K7=Et(()=>{Hg();gf();Ca();gn=class extends Ps{constructor(r,{baseFs:o=new Rn}={}){super(K);this.target=this.pathUtils.normalize(r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(r){return this.pathUtils.isAbsolute(r)?K.normalize(r):this.baseFs.resolve(K.join(this.target,r))}mapFromBase(r){return r}mapToBase(r){return this.pathUtils.isAbsolute(r)?r:this.pathUtils.join(this.target,r)}}});var J7,_u,z7=Et(()=>{Hg();gf();Ca();J7=Bt.root,_u=class extends Ps{constructor(r,{baseFs:o=new Rn}={}){super(K);this.target=this.pathUtils.resolve(Bt.root,r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Bt.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(r){let o=this.pathUtils.normalize(r);if(this.pathUtils.isAbsolute(r))return this.pathUtils.resolve(this.target,this.pathUtils.relative(J7,r));if(o.match(/^\.\.\/?/))throw new Error(`Resolving this path (${r}) would escape the jail`);return this.pathUtils.resolve(this.target,r)}mapFromBase(r){return this.pathUtils.resolve(J7,this.pathUtils.relative(this.target,r))}}});var ny,X7=Et(()=>{gf();ny=class extends Ps{constructor(r,o){super(o);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var jg,wa,_p,Z7=Et(()=>{jg=Be("fs");_g();Hg();VT();BD();Ca();wa=4278190080,_p=class extends Ou{constructor({baseFs:r=new Rn,filter:o=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:u=!0,maxAge:A=5e3,typeCheck:p=jg.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:I}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=u?new Map:null,this.factoryPromise=E,this.factorySync=I,this.filter=o,this.getMountPoint=h,this.magic=a<<24,this.maxAge=A,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Og(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(Og(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,o){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,o]),a}async openPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,o,a),async(n,{subPath:u})=>this.remapFd(n,await n.openPromise(u,o,a)))}openSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,o,a),(n,{subPath:u})=>this.remapFd(n,n.openSync(u,o,a)))}async opendirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,o),async(a,{subPath:n})=>await a.opendirPromise(n,o),{requireSubpath:!1})}opendirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,o),(a,{subPath:n})=>a.opendirSync(n,o),{requireSubpath:!1})}async readPromise(r,o,a,n,u){if((r&wa)!==this.magic)return await this.baseFs.readPromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("read");let[p,h]=A;return await p.readPromise(h,o,a,n,u)}readSync(r,o,a,n,u){if((r&wa)!==this.magic)return this.baseFs.readSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("readSync");let[p,h]=A;return p.readSync(h,o,a,n,u)}async writePromise(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?await this.baseFs.writePromise(r,o,a):await this.baseFs.writePromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("write");let[p,h]=A;return typeof o=="string"?await p.writePromise(h,o,a):await p.writePromise(h,o,a,n,u)}writeSync(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?this.baseFs.writeSync(r,o,a):this.baseFs.writeSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("writeSync");let[p,h]=A;return typeof o=="string"?p.writeSync(h,o,a):p.writeSync(h,o,a,n,u)}async closePromise(r){if((r&wa)!==this.magic)return await this.baseFs.closePromise(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("close");this.fdMap.delete(r);let[a,n]=o;return await a.closePromise(n)}closeSync(r){if((r&wa)!==this.magic)return this.baseFs.closeSync(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("closeSync");this.fdMap.delete(r);let[a,n]=o;return a.closeSync(n)}createReadStream(r,o){return r===null?this.baseFs.createReadStream(r,o):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,o),(a,{archivePath:n,subPath:u})=>{let A=a.createReadStream(u,o);return A.path=ue.fromPortablePath(this.pathUtils.join(n,u)),A})}createWriteStream(r,o){return r===null?this.baseFs.createWriteStream(r,o):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,o),(a,{subPath:n})=>a.createWriteStream(n,o))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=await this.baseFs.realpathPromise(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,await o.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=this.baseFs.realpathSync(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,o.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(o,{subPath:a})=>await o.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(o,{subPath:a})=>o.existsSync(a))}async accessPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,o),async(a,{subPath:n})=>await a.accessPromise(n,o))}accessSync(r,o){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,o),(a,{subPath:n})=>a.accessSync(n,o))}async statPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,o),async(a,{subPath:n})=>await a.statPromise(n,o))}statSync(r,o){return this.makeCallSync(r,()=>this.baseFs.statSync(r,o),(a,{subPath:n})=>a.statSync(n,o))}async fstatPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstat");let[n,u]=a;return n.fstatPromise(u,o)}fstatSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstatSync");let[n,u]=a;return n.fstatSync(u,o)}async lstatPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,o),async(a,{subPath:n})=>await a.lstatPromise(n,o))}lstatSync(r,o){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,o),(a,{subPath:n})=>a.lstatSync(n,o))}async fchmodPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmod");let[n,u]=a;return n.fchmodPromise(u,o)}fchmodSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmodSync");let[n,u]=a;return n.fchmodSync(u,o)}async chmodPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,o),async(a,{subPath:n})=>await a.chmodPromise(n,o))}chmodSync(r,o){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,o),(a,{subPath:n})=>a.chmodSync(n,o))}async fchownPromise(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownPromise(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchown");let[u,A]=n;return u.fchownPromise(A,o,a)}fchownSync(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownSync(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchownSync");let[u,A]=n;return u.fchownSync(A,o,a)}async chownPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,o,a),async(n,{subPath:u})=>await n.chownPromise(u,o,a))}chownSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,o,a),(n,{subPath:u})=>n.chownSync(u,o,a))}async renamePromise(r,o){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.renamePromise(r,o),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(o,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,A)}))}renameSync(r,o){return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.renameSync(r,o),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(o,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,A)}))}async copyFilePromise(r,o,a=0){let n=async(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&await this.existsPromise(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await u.readFilePromise(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.copyFilePromise(r,o,a),async(u,{subPath:A})=>await n(this.baseFs,r,u,A)),async(u,{subPath:A})=>await this.makeCallPromise(o,async()=>await n(u,A,this.baseFs,o),async(p,{subPath:h})=>u!==p?await n(u,A,p,h):await u.copyFilePromise(A,h,a)))}copyFileSync(r,o,a=0){let n=(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&this.existsSync(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=u.readFileSync(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.copyFileSync(r,o,a),(u,{subPath:A})=>n(this.baseFs,r,u,A)),(u,{subPath:A})=>this.makeCallSync(o,()=>n(u,A,this.baseFs,o),(p,{subPath:h})=>u!==p?n(u,A,p,h):u.copyFileSync(A,h,a)))}async appendFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,o,a),async(n,{subPath:u})=>await n.appendFilePromise(u,o,a))}appendFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,o,a),(n,{subPath:u})=>n.appendFileSync(u,o,a))}async writeFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,o,a),async(n,{subPath:u})=>await n.writeFilePromise(u,o,a))}writeFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,o,a),(n,{subPath:u})=>n.writeFileSync(u,o,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(o,{subPath:a})=>await o.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(o,{subPath:a})=>o.unlinkSync(a))}async utimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,o,a),async(n,{subPath:u})=>await n.utimesPromise(u,o,a))}utimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,o,a),(n,{subPath:u})=>n.utimesSync(u,o,a))}async lutimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,o,a),async(n,{subPath:u})=>await n.lutimesPromise(u,o,a))}lutimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,o,a),(n,{subPath:u})=>n.lutimesSync(u,o,a))}async mkdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,o),async(a,{subPath:n})=>await a.mkdirPromise(n,o))}mkdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,o),(a,{subPath:n})=>a.mkdirSync(n,o))}async rmdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,o),async(a,{subPath:n})=>await a.rmdirPromise(n,o))}rmdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,o),(a,{subPath:n})=>a.rmdirSync(n,o))}async linkPromise(r,o){return await this.makeCallPromise(o,async()=>await this.baseFs.linkPromise(r,o),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,o){return this.makeCallSync(o,()=>this.baseFs.linkSync(r,o),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,o,a){return await this.makeCallPromise(o,async()=>await this.baseFs.symlinkPromise(r,o,a),async(n,{subPath:u})=>await n.symlinkPromise(r,u))}symlinkSync(r,o,a){return this.makeCallSync(o,()=>this.baseFs.symlinkSync(r,o,a),(n,{subPath:u})=>n.symlinkSync(r,u))}async readFilePromise(r,o){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,o),async(a,{subPath:n})=>await a.readFilePromise(n,o))}readFileSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,o),(a,{subPath:n})=>a.readFileSync(n,o))}async readdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,o),async(a,{subPath:n})=>await a.readdirPromise(n,o),{requireSubpath:!1})}readdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,o),(a,{subPath:n})=>a.readdirSync(n,o),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(o,{subPath:a})=>await o.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(o,{subPath:a})=>o.readlinkSync(a))}async truncatePromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,o),async(a,{subPath:n})=>await a.truncatePromise(n,o))}truncateSync(r,o){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,o),(a,{subPath:n})=>a.truncateSync(n,o))}async ftruncatePromise(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncatePromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncate");let[n,u]=a;return n.ftruncatePromise(u,o)}ftruncateSync(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncateSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncateSync");let[n,u]=a;return n.ftruncateSync(u,o)}watch(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,o,a),(n,{subPath:u})=>n.watch(u,o,a))}watchFile(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,o,a),()=>ry(this,r,o,a))}unwatchFile(r,o){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,o),()=>Mg(this,r,o))}async makeCallPromise(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await o();let u=this.resolve(r),A=this.findMount(u);return A?n&&A.subPath==="/"?await o():await this.getMountPromise(A.archivePath,async p=>await a(p,A)):await o()}makeCallSync(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return o();let u=this.resolve(r),A=this.findMount(u);return!A||n&&A.subPath==="/"?o():this.getMountSync(A.archivePath,p=>a(p,A))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let o="";for(;;){let a=r.substring(o.length),n=this.getMountPoint(a,o);if(!n)return null;if(o=this.pathUtils.join(o,n),!this.isMount.has(o)){if(this.notMount.has(o))continue;try{if(this.typeCheck!==null&&(this.baseFs.lstatSync(o).mode&jg.constants.S_IFMT)!==this.typeCheck){this.notMount.add(o);continue}}catch{return null}this.isMount.add(o)}return{archivePath:o,subPath:this.pathUtils.join(Bt.root,r.substring(o.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let o=Date.now(),a=o+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[u,{childFs:A,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||A.hasOpenFileHandles?.())){if(o>=p){A.saveAndClose?.(),this.mountInstances.delete(u),n-=1;continue}else if(r===null||n<=0){a=p;break}A.saveAndClose?.(),this.mountInstances.delete(u),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-o).unref())}async getMountPromise(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await o(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await o(a)}finally{a.saveAndClose?.()}}}getMountSync(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,o(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return o(a)}finally{a.saveAndClose?.()}}}}});var Zt,KT,Gw,$7=Et(()=>{_g();Ca();Zt=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),KT=class extends hf{constructor(){super(K)}getExtractHint(){throw Zt()}getRealPath(){throw Zt()}resolve(){throw Zt()}async openPromise(){throw Zt()}openSync(){throw Zt()}async opendirPromise(){throw Zt()}opendirSync(){throw Zt()}async readPromise(){throw Zt()}readSync(){throw Zt()}async writePromise(){throw Zt()}writeSync(){throw Zt()}async closePromise(){throw Zt()}closeSync(){throw Zt()}createWriteStream(){throw Zt()}createReadStream(){throw Zt()}async realpathPromise(){throw Zt()}realpathSync(){throw Zt()}async readdirPromise(){throw Zt()}readdirSync(){throw Zt()}async existsPromise(e){throw Zt()}existsSync(e){throw Zt()}async accessPromise(){throw Zt()}accessSync(){throw Zt()}async statPromise(){throw Zt()}statSync(){throw Zt()}async fstatPromise(e){throw Zt()}fstatSync(e){throw Zt()}async lstatPromise(e){throw Zt()}lstatSync(e){throw Zt()}async fchmodPromise(){throw Zt()}fchmodSync(){throw Zt()}async chmodPromise(){throw Zt()}chmodSync(){throw Zt()}async fchownPromise(){throw Zt()}fchownSync(){throw Zt()}async chownPromise(){throw Zt()}chownSync(){throw Zt()}async mkdirPromise(){throw Zt()}mkdirSync(){throw Zt()}async rmdirPromise(){throw Zt()}rmdirSync(){throw Zt()}async linkPromise(){throw Zt()}linkSync(){throw Zt()}async symlinkPromise(){throw Zt()}symlinkSync(){throw Zt()}async renamePromise(){throw Zt()}renameSync(){throw Zt()}async copyFilePromise(){throw Zt()}copyFileSync(){throw Zt()}async appendFilePromise(){throw Zt()}appendFileSync(){throw Zt()}async writeFilePromise(){throw Zt()}writeFileSync(){throw Zt()}async unlinkPromise(){throw Zt()}unlinkSync(){throw Zt()}async utimesPromise(){throw Zt()}utimesSync(){throw Zt()}async lutimesPromise(){throw Zt()}lutimesSync(){throw Zt()}async readFilePromise(){throw Zt()}readFileSync(){throw Zt()}async readlinkPromise(){throw Zt()}readlinkSync(){throw Zt()}async truncatePromise(){throw Zt()}truncateSync(){throw Zt()}async ftruncatePromise(e,r){throw Zt()}ftruncateSync(e,r){throw Zt()}watch(){throw Zt()}watchFile(){throw Zt()}unwatchFile(){throw Zt()}},Gw=KT;Gw.instance=new KT});var Hp,eY=Et(()=>{gf();Ca();Hp=class extends Ps{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return ue.fromPortablePath(r)}mapToBase(r){return ue.toPortablePath(r)}}});var R_e,JT,N_e,mi,tY=Et(()=>{Hg();gf();Ca();R_e=/^[0-9]+$/,JT=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,N_e=/^([^/]+-)?[a-f0-9]+$/,mi=class extends Ps{constructor({baseFs:r=new Rn}={}){super(K);this.baseFs=r}static makeVirtualPath(r,o,a){if(K.basename(r)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!K.basename(o).match(N_e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let u=K.relative(K.dirname(r),a).split("/"),A=0;for(;A{zT=$e(Be("buffer")),kD=Be("url"),rY=Be("util");gf();Ca();bD=class extends Ps{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return r}mapToBase(r){if(typeof r=="string")return r;if(r instanceof kD.URL)return(0,kD.fileURLToPath)(r);if(Buffer.isBuffer(r)){let o=r.toString();if(!L_e(r,o))throw new Error("Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942");return o}throw new Error(`Unsupported path type: ${(0,rY.inspect)(r)}`)}}});var iY,Bo,df,jp,QD,FD,iy,Rc,Nc,M_e,O_e,U_e,__e,Yw,sY=Et(()=>{iY=Be("readline"),Bo=Symbol("kBaseFs"),df=Symbol("kFd"),jp=Symbol("kClosePromise"),QD=Symbol("kCloseResolve"),FD=Symbol("kCloseReject"),iy=Symbol("kRefs"),Rc=Symbol("kRef"),Nc=Symbol("kUnref"),Yw=class{constructor(e,r){this[M_e]=1;this[O_e]=void 0;this[U_e]=void 0;this[__e]=void 0;this[Bo]=r,this[df]=e}get fd(){return this[df]}async appendFile(e,r){try{this[Rc](this.appendFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Bo].appendFilePromise(this.fd,e,o?{encoding:o}:void 0)}finally{this[Nc]()}}async chown(e,r){try{return this[Rc](this.chown),await this[Bo].fchownPromise(this.fd,e,r)}finally{this[Nc]()}}async chmod(e){try{return this[Rc](this.chmod),await this[Bo].fchmodPromise(this.fd,e)}finally{this[Nc]()}}createReadStream(e){return this[Bo].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Bo].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,o,a){try{this[Rc](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,o=e.length??n.byteLength,a=e.position??null),r??=0,o??=0,o===0?{bytesRead:o,buffer:n}:{bytesRead:await this[Bo].readPromise(this.fd,n,r,o,a),buffer:n}}finally{this[Nc]()}}async readFile(e){try{this[Rc](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Bo].readFilePromise(this.fd,r)}finally{this[Nc]()}}readLines(e){return(0,iY.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Rc](this.stat),await this[Bo].fstatPromise(this.fd,e)}finally{this[Nc]()}}async truncate(e){try{return this[Rc](this.truncate),await this[Bo].ftruncatePromise(this.fd,e)}finally{this[Nc]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Rc](this.writeFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;await this[Bo].writeFilePromise(this.fd,e,o)}finally{this[Nc]()}}async write(...e){try{if(this[Rc](this.write),ArrayBuffer.isView(e[0])){let[r,o,a,n]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,o,a]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o,a),buffer:r}}}finally{this[Nc]()}}async writev(e,r){try{this[Rc](this.writev);let o=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);o+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);o+=n.bytesWritten}return{buffers:e,bytesWritten:o}}finally{this[Nc]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[df]===-1)return Promise.resolve();if(this[jp])return this[jp];if(this[iy]--,this[iy]===0){let e=this[df];this[df]=-1,this[jp]=this[Bo].closePromise(e).finally(()=>{this[jp]=void 0})}else this[jp]=new Promise((e,r)=>{this[QD]=e,this[FD]=r}).finally(()=>{this[jp]=void 0,this[FD]=void 0,this[QD]=void 0});return this[jp]}[(Bo,df,M_e=iy,O_e=jp,U_e=QD,__e=FD,Rc)](e){if(this[df]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[iy]++}[Nc](){if(this[iy]--,this[iy]===0){let e=this[df];this[df]=-1,this[Bo].closePromise(e).then(this[QD],this[FD])}}}});function Ww(t,e){e=new bD(e);let r=(o,a,n)=>{let u=o[a];o[a]=n,typeof u?.[sy.promisify.custom]<"u"&&(n[sy.promisify.custom]=u[sy.promisify.custom])};{r(t,"exists",(o,...a)=>{let u=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(o).then(A=>{u(A)},()=>{u(!1)})})}),r(t,"read",(...o)=>{let[a,n,u,A,p,h]=o;if(o.length<=3){let E={};o.length<3?h=o[1]:(E=o[1],h=o[2]),{buffer:n=Buffer.alloc(16384),offset:u=0,length:A=n.byteLength,position:p}=E}if(u==null&&(u=0),A|=0,A===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,u,A,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let o of oY){let a=o.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[o];if(typeof n>"u")continue;r(t,a,(...A)=>{let h=typeof A[A.length-1]=="function"?A.pop():()=>{};process.nextTick(()=>{n.apply(e,A).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",o=>{try{return e.existsSync(o)}catch{return!1}}),r(t,"readSync",(...o)=>{let[a,n,u,A,p]=o;return o.length<=3&&({offset:u=0,length:A=n.byteLength,position:p}=o[2]||{}),u==null&&(u=0),A|=0,A===0?0:(p==null&&(p=-1),e.readSync(a,n,u,A,p))});for(let o of H_e){let a=o;if(typeof t[a]>"u")continue;let n=e[o];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let o=t.promises;for(let a of oY){let n=a.replace(/Promise$/,"");if(typeof o[n]>"u")continue;let u=e[a];typeof u>"u"||a!=="open"&&r(o,n,(A,...p)=>A instanceof Yw?A[n].apply(A,p):u.call(e,A,...p))}r(o,"open",async(...a)=>{let n=await e.openPromise(...a);return new Yw(n,e)})}t.read[sy.promisify.custom]=async(o,a,...n)=>({bytesRead:await e.readPromise(o,a,...n),buffer:a}),t.write[sy.promisify.custom]=async(o,a,...n)=>({bytesWritten:await e.writePromise(o,a,...n),buffer:a})}function TD(t,e){let r=Object.create(t);return Ww(r,e),r}var sy,H_e,oY,aY=Et(()=>{sy=Be("util");nY();sY();H_e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),oY=new Set(["accessPromise","appendFilePromise","fchmodPromise","chmodPromise","fchownPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","statPromise","symlinkPromise","truncatePromise","ftruncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"])});function lY(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function cY(){if(XT)return XT;let t=ue.toPortablePath(uY.default.tmpdir()),e=oe.realpathSync(t);return process.once("exit",()=>{oe.rmtempSync()}),XT={tmpdir:t,realTmpdir:e}}var uY,Lc,XT,oe,AY=Et(()=>{uY=$e(Be("os"));Hg();Ca();Lc=new Set,XT=null;oe=Object.assign(new Rn,{detachTemp(t){Lc.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=cY();for(;;){let o=lY("xfs-");try{this.mkdirSync(K.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=K.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=cY();for(;;){let o=lY("xfs-");try{await this.mkdirPromise(K.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=K.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Lc.values()).map(async t=>{try{await oe.removePromise(t,{maxRetries:0}),Lc.delete(t)}catch{}}))},rmtempSync(){for(let t of Lc)try{oe.removeSync(t),Lc.delete(t)}catch{}}})});var Vw={};Kt(Vw,{AliasFS:()=>Uu,BasePortableFakeFS:()=>Ou,CustomDir:()=>qw,CwdFS:()=>gn,FakeFS:()=>hf,Filename:()=>dr,JailFS:()=>_u,LazyFS:()=>ny,MountFS:()=>_p,NoFS:()=>Gw,NodeFS:()=>Rn,PortablePath:()=>Bt,PosixFS:()=>Hp,ProxiedFS:()=>Ps,VirtualFS:()=>mi,constants:()=>vi,errors:()=>ar,extendFs:()=>TD,normalizeLineEndings:()=>Ug,npath:()=>ue,opendir:()=>SD,patchFs:()=>Ww,ppath:()=>K,setupCopyIndex:()=>PD,statUtils:()=>Ea,unwatchAllFiles:()=>Og,unwatchFile:()=>Mg,watchFile:()=>ry,xfs:()=>oe});var Pt=Et(()=>{T7();BD();qT();WT();U7();VT();_g();Ca();Ca();Y7();_g();K7();z7();X7();Z7();$7();Hg();eY();gf();tY();aY();AY()});var dY=_((axt,gY)=>{gY.exports=hY;hY.sync=q_e;var fY=Be("fs");function j_e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var o=0;o{CY.exports=yY;yY.sync=G_e;var mY=Be("fs");function yY(t,e,r){mY.stat(t,function(o,a){r(o,o?!1:EY(a,e))})}function G_e(t,e){return EY(mY.statSync(t),e)}function EY(t,e){return t.isFile()&&Y_e(t,e)}function Y_e(t,e){var r=t.mode,o=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),u=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),A=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=A|p,I=r&h||r&p&&a===u||r&A&&o===n||r&E&&n===0;return I}});var BY=_((uxt,IY)=>{var cxt=Be("fs"),RD;process.platform==="win32"||global.TESTING_WINDOWS?RD=dY():RD=wY();IY.exports=ZT;ZT.sync=W_e;function ZT(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(o,a){ZT(t,e||{},function(n,u){n?a(n):o(u)})})}RD(t,e||{},function(o,a){o&&(o.code==="EACCES"||e&&e.ignoreErrors)&&(o=null,a=!1),r(o,a)})}function W_e(t,e){try{return RD.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var kY=_((Axt,bY)=>{var oy=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",vY=Be("path"),V_e=oy?";":":",DY=BY(),PY=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),SY=(t,e)=>{let r=e.colon||V_e,o=t.match(/\//)||oy&&t.match(/\\/)?[""]:[...oy?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=oy?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=oy?a.split(r):[""];return oy&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:o,pathExt:n,pathExtExe:a}},xY=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:o,pathExt:a,pathExtExe:n}=SY(t,e),u=[],A=h=>new Promise((E,I)=>{if(h===o.length)return e.all&&u.length?E(u):I(PY(t));let v=o[h],b=/^".*"$/.test(v)?v.slice(1,-1):v,C=vY.join(b,t),T=!b&&/^\.[\\\/]/.test(t)?t.slice(0,2)+C:C;E(p(T,h,0))}),p=(h,E,I)=>new Promise((v,b)=>{if(I===a.length)return v(A(E+1));let C=a[I];DY(h+C,{pathExt:n},(T,L)=>{if(!T&&L)if(e.all)u.push(h+C);else return v(h+C);return v(p(h,E,I+1))})});return r?A(0).then(h=>r(null,h),r):A(0)},K_e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:o,pathExtExe:a}=SY(t,e),n=[];for(let u=0;u{"use strict";var QY=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};$T.exports=QY;$T.exports.default=QY});var LY=_((pxt,NY)=>{"use strict";var TY=Be("path"),J_e=kY(),z_e=FY();function RY(t,e){let r=t.options.env||process.env,o=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let u;try{u=J_e.sync(t.command,{path:r[z_e({env:r})],pathExt:e?TY.delimiter:void 0})}catch{}finally{n&&process.chdir(o)}return u&&(u=TY.resolve(a?t.options.cwd:"",u)),u}function X_e(t){return RY(t)||RY(t,!0)}NY.exports=X_e});var MY=_((hxt,tR)=>{"use strict";var eR=/([()\][%!^"`<>&|;, *?])/g;function Z_e(t){return t=t.replace(eR,"^$1"),t}function $_e(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace(eR,"^$1"),e&&(t=t.replace(eR,"^$1")),t}tR.exports.command=Z_e;tR.exports.argument=$_e});var UY=_((gxt,OY)=>{"use strict";OY.exports=/^#!(.*)/});var HY=_((dxt,_Y)=>{"use strict";var e8e=UY();_Y.exports=(t="")=>{let e=t.match(e8e);if(!e)return null;let[r,o]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?o:o?`${a} ${o}`:a}});var qY=_((mxt,jY)=>{"use strict";var rR=Be("fs"),t8e=HY();function r8e(t){let r=Buffer.alloc(150),o;try{o=rR.openSync(t,"r"),rR.readSync(o,r,0,150,0),rR.closeSync(o)}catch{}return t8e(r.toString())}jY.exports=r8e});var VY=_((yxt,WY)=>{"use strict";var n8e=Be("path"),GY=LY(),YY=MY(),i8e=qY(),s8e=process.platform==="win32",o8e=/\.(?:com|exe)$/i,a8e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function l8e(t){t.file=GY(t);let e=t.file&&i8e(t.file);return e?(t.args.unshift(t.file),t.command=e,GY(t)):t.file}function c8e(t){if(!s8e)return t;let e=l8e(t),r=!o8e.test(e);if(t.options.forceShell||r){let o=a8e.test(e);t.command=n8e.normalize(t.command),t.command=YY.command(t.command),t.args=t.args.map(n=>YY.argument(n,o));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function u8e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let o={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?o:c8e(o)}WY.exports=u8e});var zY=_((Ext,JY)=>{"use strict";var nR=process.platform==="win32";function iR(t,e){return Object.assign(new Error(`${e} ${t.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${t.command}`,path:t.command,spawnargs:t.args})}function A8e(t,e){if(!nR)return;let r=t.emit;t.emit=function(o,a){if(o==="exit"){let n=KY(a,e,"spawn");if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function KY(t,e){return nR&&t===1&&!e.file?iR(e.original,"spawn"):null}function f8e(t,e){return nR&&t===1&&!e.file?iR(e.original,"spawnSync"):null}JY.exports={hookChildProcess:A8e,verifyENOENT:KY,verifyENOENTSync:f8e,notFoundError:iR}});var aR=_((Cxt,ay)=>{"use strict";var XY=Be("child_process"),sR=VY(),oR=zY();function ZY(t,e,r){let o=sR(t,e,r),a=XY.spawn(o.command,o.args,o.options);return oR.hookChildProcess(a,o),a}function p8e(t,e,r){let o=sR(t,e,r),a=XY.spawnSync(o.command,o.args,o.options);return a.error=a.error||oR.verifyENOENTSync(a.status,o),a}ay.exports=ZY;ay.exports.spawn=ZY;ay.exports.sync=p8e;ay.exports._parse=sR;ay.exports._enoent=oR});var eW=_((wxt,$Y)=>{"use strict";function h8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function qg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,qg)}h8e(qg,Error);qg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I>",S=Br(">>",!1),y=">&",F=Br(">&",!1),z=">",X=Br(">",!1),Z="<<<",ie=Br("<<<",!1),Se="<&",Ne=Br("<&",!1),ot="<",dt=Br("<",!1),jt=function(N){return{type:"argument",segments:[].concat(...N)}},$t=function(N){return N},xt="$'",an=Br("$'",!1),Qr="'",mr=Br("'",!1),xr=function(N){return[{type:"text",text:N}]},Wr='""',Vn=Br('""',!1),Ns=function(){return{type:"text",text:""}},Ri='"',ps=Br('"',!1),io=function(N){return N},Si=function(N){return{type:"arithmetic",arithmetic:N,quoted:!0}},Ls=function(N){return{type:"shell",shell:N,quoted:!0}},so=function(N){return{type:"variable",...N,quoted:!0}},cc=function(N){return{type:"text",text:N}},cu=function(N){return{type:"arithmetic",arithmetic:N,quoted:!1}},ap=function(N){return{type:"shell",shell:N,quoted:!1}},lp=function(N){return{type:"variable",...N,quoted:!1}},Ms=function(N){return{type:"glob",pattern:N}},Dn=/^[^']/,oo=Cs(["'"],!0,!1),Os=function(N){return N.join("")},ml=/^[^$"]/,yl=Cs(["$",'"'],!0,!1),ao=`\\ -`,Kn=Br(`\\ -`,!1),Mn=function(){return""},Ni="\\",On=Br("\\",!1),_i=/^[\\$"`]/,tr=Cs(["\\","$",'"',"`"],!1,!1),Me=function(N){return N},ii="\\a",Oa=Br("\\a",!1),hr=function(){return"a"},uc="\\b",uu=Br("\\b",!1),Ac=function(){return"\b"},El=/^[Ee]/,vA=Cs(["E","e"],!1,!1),Au=function(){return"\x1B"},Ce="\\f",Tt=Br("\\f",!1),fc=function(){return"\f"},Hi="\\n",fu=Br("\\n",!1),Yt=function(){return` -`},Cl="\\r",DA=Br("\\r",!1),cp=function(){return"\r"},pc="\\t",PA=Br("\\t",!1),Qn=function(){return" "},hi="\\v",hc=Br("\\v",!1),SA=function(){return"\v"},sa=/^[\\'"?]/,Li=Cs(["\\","'",'"',"?"],!1,!1),_o=function(N){return String.fromCharCode(parseInt(N,16))},Ze="\\x",lo=Br("\\x",!1),gc="\\u",pu=Br("\\u",!1),ji="\\U",hu=Br("\\U",!1),xA=function(N){return String.fromCodePoint(parseInt(N,16))},Ua=/^[0-7]/,dc=Cs([["0","7"]],!1,!1),hs=/^[0-9a-fA-f]/,_t=Cs([["0","9"],["a","f"],["A","f"]],!1,!1),Fn=cg(),Ci="{}",oa=Br("{}",!1),co=function(){return"{}"},Us="-",aa=Br("-",!1),la="+",Ho=Br("+",!1),wi=".",gs=Br(".",!1),ds=function(N,V,re){return{type:"number",value:(N==="-"?-1:1)*parseFloat(V.join("")+"."+re.join(""))}},ms=function(N,V){return{type:"number",value:(N==="-"?-1:1)*parseInt(V.join(""))}},_s=function(N){return{type:"variable",...N}},Un=function(N){return{type:"variable",name:N}},Pn=function(N){return N},ys="*",We=Br("*",!1),tt="/",It=Br("/",!1),nr=function(N,V,re){return{type:V==="*"?"multiplication":"division",right:re}},$=function(N,V){return V.reduce((re,he)=>({left:re,...he}),N)},me=function(N,V,re){return{type:V==="+"?"addition":"subtraction",right:re}},Le="$((",ft=Br("$((",!1),pt="))",Rt=Br("))",!1),er=function(N){return N},Zr="$(",qi=Br("$(",!1),es=function(N){return N},xi="${",jo=Br("${",!1),bA=":-",kA=Br(":-",!1),up=function(N,V){return{name:N,defaultValue:V}},ng=":-}",gu=Br(":-}",!1),ig=function(N){return{name:N,defaultValue:[]}},du=":+",uo=Br(":+",!1),QA=function(N,V){return{name:N,alternativeValue:V}},mc=":+}",ca=Br(":+}",!1),sg=function(N){return{name:N,alternativeValue:[]}},yc=function(N){return{name:N}},Pm="$",og=Br("$",!1),$n=function(N){return e.isGlobPattern(N)},Ap=function(N){return N},ag=/^[a-zA-Z0-9_]/,FA=Cs([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Hs=function(){return lg()},mu=/^[$@*?#a-zA-Z0-9_\-]/,Ha=Cs(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),Gi=/^[()}<>$|&; \t"']/,ua=Cs(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),yu=/^[<>&; \t"']/,Es=Cs(["<",">","&",";"," "," ",'"',"'"],!1,!1),Ec=/^[ \t]/,Cc=Cs([" "," "],!1,!1),G=0,Dt=0,wl=[{line:1,column:1}],bi=0,wc=[],ct=0,Eu;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function lg(){return t.substring(Dt,G)}function mw(){return Ic(Dt,G)}function TA(N,V){throw V=V!==void 0?V:Ic(Dt,G),fg([Ag(N)],t.substring(Dt,G),V)}function fp(N,V){throw V=V!==void 0?V:Ic(Dt,G),Sm(N,V)}function Br(N,V){return{type:"literal",text:N,ignoreCase:V}}function Cs(N,V,re){return{type:"class",parts:N,inverted:V,ignoreCase:re}}function cg(){return{type:"any"}}function ug(){return{type:"end"}}function Ag(N){return{type:"other",description:N}}function pp(N){var V=wl[N],re;if(V)return V;for(re=N-1;!wl[re];)re--;for(V=wl[re],V={line:V.line,column:V.column};rebi&&(bi=G,wc=[]),wc.push(N))}function Sm(N,V){return new qg(N,null,null,V)}function fg(N,V,re){return new qg(qg.buildMessage(N,V),N,V,re)}function pg(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(re=Cu(),re===r&&(re=null),re!==r?(Dt=N,V=n(re),N=V):(G=N,N=r)):(G=N,N=r),N}function Cu(){var N,V,re,he,ze;if(N=G,V=wu(),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();re!==r?(he=hg(),he!==r?(ze=xm(),ze===r&&(ze=null),ze!==r?(Dt=N,V=u(V,he,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;if(N===r)if(N=G,V=wu(),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();re!==r?(he=hg(),he===r&&(he=null),he!==r?(Dt=N,V=A(V,he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function xm(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=Cu(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=p(re),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function hg(){var N;return t.charCodeAt(G)===59?(N=h,G++):(N=r,ct===0&&Ct(E)),N===r&&(t.charCodeAt(G)===38?(N=I,G++):(N=r,ct===0&&Ct(v))),N}function wu(){var N,V,re;return N=G,V=Aa(),V!==r?(re=yw(),re===r&&(re=null),re!==r?(Dt=N,V=b(V,re),N=V):(G=N,N=r)):(G=N,N=r),N}function yw(){var N,V,re,he,ze,mt,fr;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=bm(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=wu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=C(re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function bm(){var N;return t.substr(G,2)===T?(N=T,G+=2):(N=r,ct===0&&Ct(L)),N===r&&(t.substr(G,2)===U?(N=U,G+=2):(N=r,ct===0&&Ct(J))),N}function Aa(){var N,V,re;return N=G,V=gg(),V!==r?(re=Bc(),re===r&&(re=null),re!==r?(Dt=N,V=te(V,re),N=V):(G=N,N=r)):(G=N,N=r),N}function Bc(){var N,V,re,he,ze,mt,fr;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=Il(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Aa(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=le(re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function Il(){var N;return t.substr(G,2)===pe?(N=pe,G+=2):(N=r,ct===0&&Ct(Ae)),N===r&&(t.charCodeAt(G)===124?(N=ye,G++):(N=r,ct===0&&Ct(ae))),N}function Iu(){var N,V,re,he,ze,mt;if(N=G,V=Eg(),V!==r)if(t.charCodeAt(G)===61?(re=we,G++):(re=r,ct===0&&Ct(Pe)),re!==r)if(he=qo(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(Dt=N,V=g(V,he),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;else G=N,N=r;if(N===r)if(N=G,V=Eg(),V!==r)if(t.charCodeAt(G)===61?(re=we,G++):(re=r,ct===0&&Ct(Pe)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=Ee(V),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function gg(){var N,V,re,he,ze,mt,fr,Cr,yn,oi,Mi;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(t.charCodeAt(G)===40?(re=De,G++):(re=r,ct===0&&Ct(ce)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===41?(fr=ne,G++):(fr=r,ct===0&&Ct(ee)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Mi=Qt();Mi!==r;)oi.push(Mi),Mi=Qt();oi!==r?(Dt=N,V=Ie(ze,yn),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(t.charCodeAt(G)===123?(re=ke,G++):(re=r,ct===0&&Ct(ht)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===125?(fr=H,G++):(fr=r,ct===0&&Ct(lt)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Mi=Qt();Mi!==r;)oi.push(Mi),Mi=Qt();oi!==r?(Dt=N,V=Re(ze,yn),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){for(re=[],he=Iu();he!==r;)re.push(he),he=Iu();if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r){if(ze=[],mt=hp(),mt!==r)for(;mt!==r;)ze.push(mt),mt=hp();else ze=r;if(ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=Qe(re,ze),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r}else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){if(re=[],he=Iu(),he!==r)for(;he!==r;)re.push(he),he=Iu();else re=r;if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=be(re),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}}}return N}function RA(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){if(re=[],he=gp(),he!==r)for(;he!==r;)re.push(he),he=gp();else re=r;if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=_e(re),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r;return N}function hp(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r?(re=ja(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r),N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();V!==r?(re=gp(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r)}return N}function ja(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(Je.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(He)),re===r&&(re=null),re!==r?(he=dg(),he!==r?(ze=gp(),ze!==r?(Dt=N,V=x(re,he,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function dg(){var N;return t.substr(G,2)===w?(N=w,G+=2):(N=r,ct===0&&Ct(S)),N===r&&(t.substr(G,2)===y?(N=y,G+=2):(N=r,ct===0&&Ct(F)),N===r&&(t.charCodeAt(G)===62?(N=z,G++):(N=r,ct===0&&Ct(X)),N===r&&(t.substr(G,3)===Z?(N=Z,G+=3):(N=r,ct===0&&Ct(ie)),N===r&&(t.substr(G,2)===Se?(N=Se,G+=2):(N=r,ct===0&&Ct(Ne)),N===r&&(t.charCodeAt(G)===60?(N=ot,G++):(N=r,ct===0&&Ct(dt))))))),N}function gp(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(re=qo(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r),N}function qo(){var N,V,re;if(N=G,V=[],re=ws(),re!==r)for(;re!==r;)V.push(re),re=ws();else V=r;return V!==r&&(Dt=N,V=jt(V)),N=V,N}function ws(){var N,V;return N=G,V=Ii(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=km(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=Qm(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=Go(),V!==r&&(Dt=N,V=$t(V)),N=V))),N}function Ii(){var N,V,re,he;return N=G,t.substr(G,2)===xt?(V=xt,G+=2):(V=r,ct===0&&Ct(an)),V!==r?(re=ln(),re!==r?(t.charCodeAt(G)===39?(he=Qr,G++):(he=r,ct===0&&Ct(mr)),he!==r?(Dt=N,V=xr(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function km(){var N,V,re,he;return N=G,t.charCodeAt(G)===39?(V=Qr,G++):(V=r,ct===0&&Ct(mr)),V!==r?(re=mp(),re!==r?(t.charCodeAt(G)===39?(he=Qr,G++):(he=r,ct===0&&Ct(mr)),he!==r?(Dt=N,V=xr(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Qm(){var N,V,re,he;if(N=G,t.substr(G,2)===Wr?(V=Wr,G+=2):(V=r,ct===0&&Ct(Vn)),V!==r&&(Dt=N,V=Ns()),N=V,N===r)if(N=G,t.charCodeAt(G)===34?(V=Ri,G++):(V=r,ct===0&&Ct(ps)),V!==r){for(re=[],he=NA();he!==r;)re.push(he),he=NA();re!==r?(t.charCodeAt(G)===34?(he=Ri,G++):(he=r,ct===0&&Ct(ps)),he!==r?(Dt=N,V=io(re),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function Go(){var N,V,re;if(N=G,V=[],re=dp(),re!==r)for(;re!==r;)V.push(re),re=dp();else V=r;return V!==r&&(Dt=N,V=io(V)),N=V,N}function NA(){var N,V;return N=G,V=Gr(),V!==r&&(Dt=N,V=Si(V)),N=V,N===r&&(N=G,V=yp(),V!==r&&(Dt=N,V=Ls(V)),N=V,N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=so(V)),N=V,N===r&&(N=G,V=mg(),V!==r&&(Dt=N,V=cc(V)),N=V))),N}function dp(){var N,V;return N=G,V=Gr(),V!==r&&(Dt=N,V=cu(V)),N=V,N===r&&(N=G,V=yp(),V!==r&&(Dt=N,V=ap(V)),N=V,N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=lp(V)),N=V,N===r&&(N=G,V=Ew(),V!==r&&(Dt=N,V=Ms(V)),N=V,N===r&&(N=G,V=pa(),V!==r&&(Dt=N,V=cc(V)),N=V)))),N}function mp(){var N,V,re;for(N=G,V=[],Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));re!==r;)V.push(re),Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));return V!==r&&(Dt=N,V=Os(V)),N=V,N}function mg(){var N,V,re;if(N=G,V=[],re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl))),re!==r)for(;re!==r;)V.push(re),re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl)));else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function fa(){var N,V,re;return N=G,t.substr(G,2)===ao?(V=ao,G+=2):(V=r,ct===0&&Ct(Kn)),V!==r&&(Dt=N,V=Mn()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(_i.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(tr)),re!==r?(Dt=N,V=Me(re),N=V):(G=N,N=r)):(G=N,N=r)),N}function ln(){var N,V,re;for(N=G,V=[],re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));re!==r;)V.push(re),re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));return V!==r&&(Dt=N,V=Os(V)),N=V,N}function Ao(){var N,V,re;return N=G,t.substr(G,2)===ii?(V=ii,G+=2):(V=r,ct===0&&Ct(Oa)),V!==r&&(Dt=N,V=hr()),N=V,N===r&&(N=G,t.substr(G,2)===uc?(V=uc,G+=2):(V=r,ct===0&&Ct(uu)),V!==r&&(Dt=N,V=Ac()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(El.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(vA)),re!==r?(Dt=N,V=Au(),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ce?(V=Ce,G+=2):(V=r,ct===0&&Ct(Tt)),V!==r&&(Dt=N,V=fc()),N=V,N===r&&(N=G,t.substr(G,2)===Hi?(V=Hi,G+=2):(V=r,ct===0&&Ct(fu)),V!==r&&(Dt=N,V=Yt()),N=V,N===r&&(N=G,t.substr(G,2)===Cl?(V=Cl,G+=2):(V=r,ct===0&&Ct(DA)),V!==r&&(Dt=N,V=cp()),N=V,N===r&&(N=G,t.substr(G,2)===pc?(V=pc,G+=2):(V=r,ct===0&&Ct(PA)),V!==r&&(Dt=N,V=Qn()),N=V,N===r&&(N=G,t.substr(G,2)===hi?(V=hi,G+=2):(V=r,ct===0&&Ct(hc)),V!==r&&(Dt=N,V=SA()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(sa.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Li)),re!==r?(Dt=N,V=Me(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=LA()))))))))),N}function LA(){var N,V,re,he,ze,mt,fr,Cr,yn,oi,Mi,wg;return N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(re=qa(),re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ze?(V=Ze,G+=2):(V=r,ct===0&&Ct(lo)),V!==r?(re=G,he=G,ze=qa(),ze!==r?(mt=si(),mt!==r?(ze=[ze,mt],he=ze):(G=he,he=r)):(G=he,he=r),he===r&&(he=qa()),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===gc?(V=gc,G+=2):(V=r,ct===0&&Ct(pu)),V!==r?(re=G,he=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(ze=[ze,mt,fr,Cr],he=ze):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===ji?(V=ji,G+=2):(V=r,ct===0&&Ct(hu)),V!==r?(re=G,he=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(yn=si(),yn!==r?(oi=si(),oi!==r?(Mi=si(),Mi!==r?(wg=si(),wg!==r?(ze=[ze,mt,fr,Cr,yn,oi,Mi,wg],he=ze):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=xA(re),N=V):(G=N,N=r)):(G=N,N=r)))),N}function qa(){var N;return Ua.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(dc)),N}function si(){var N;return hs.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(_t)),N}function pa(){var N,V,re,he,ze;if(N=G,V=[],re=G,t.charCodeAt(G)===92?(he=Ni,G++):(he=r,ct===0&&Ct(On)),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(he=Ci,G+=2):(he=r,ct===0&&Ct(oa)),he!==r&&(Dt=re,he=co()),re=he,re===r&&(re=G,he=G,ct++,ze=Fm(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r))),re!==r)for(;re!==r;)V.push(re),re=G,t.charCodeAt(G)===92?(he=Ni,G++):(he=r,ct===0&&Ct(On)),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(he=Ci,G+=2):(he=r,ct===0&&Ct(oa)),he!==r&&(Dt=re,he=co()),re=he,re===r&&(re=G,he=G,ct++,ze=Fm(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r)));else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function vc(){var N,V,re,he,ze,mt;if(N=G,t.charCodeAt(G)===45?(V=Us,G++):(V=r,ct===0&&Ct(aa)),V===r&&(t.charCodeAt(G)===43?(V=la,G++):(V=r,ct===0&&Ct(Ho))),V===r&&(V=null),V!==r){if(re=[],Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He)),he!==r)for(;he!==r;)re.push(he),Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He));else re=r;if(re!==r)if(t.charCodeAt(G)===46?(he=wi,G++):(he=r,ct===0&&Ct(gs)),he!==r){if(ze=[],Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(He)),mt!==r)for(;mt!==r;)ze.push(mt),Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(He));else ze=r;ze!==r?(Dt=N,V=ds(V,re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;if(N===r){if(N=G,t.charCodeAt(G)===45?(V=Us,G++):(V=r,ct===0&&Ct(aa)),V===r&&(t.charCodeAt(G)===43?(V=la,G++):(V=r,ct===0&&Ct(Ho))),V===r&&(V=null),V!==r){if(re=[],Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He)),he!==r)for(;he!==r;)re.push(he),Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He));else re=r;re!==r?(Dt=N,V=ms(V,re),N=V):(G=N,N=r)}else G=N,N=r;if(N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=_s(V)),N=V,N===r&&(N=G,V=Ga(),V!==r&&(Dt=N,V=Un(V)),N=V,N===r)))if(N=G,t.charCodeAt(G)===40?(V=De,G++):(V=r,ct===0&&Ct(ce)),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();if(re!==r)if(he=ts(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.charCodeAt(G)===41?(mt=ne,G++):(mt=r,ct===0&&Ct(ee)),mt!==r?(Dt=N,V=Pn(he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r}return N}function Bl(){var N,V,re,he,ze,mt,fr,Cr;if(N=G,V=vc(),V!==r){for(re=[],he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=he,ze=nr(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r;for(;he!==r;){for(re.push(he),he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=he,ze=nr(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r}re!==r?(Dt=N,V=$(V,re),N=V):(G=N,N=r)}else G=N,N=r;return N}function ts(){var N,V,re,he,ze,mt,fr,Cr;if(N=G,V=Bl(),V!==r){for(re=[],he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=he,ze=me(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r;for(;he!==r;){for(re.push(he),he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=he,ze=me(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r}re!==r?(Dt=N,V=$(V,re),N=V):(G=N,N=r)}else G=N,N=r;return N}function Gr(){var N,V,re,he,ze,mt;if(N=G,t.substr(G,3)===Le?(V=Le,G+=3):(V=r,ct===0&&Ct(ft)),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();if(re!==r)if(he=ts(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.substr(G,2)===pt?(mt=pt,G+=2):(mt=r,ct===0&&Ct(Rt)),mt!==r?(Dt=N,V=er(he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;return N}function yp(){var N,V,re,he;return N=G,t.substr(G,2)===Zr?(V=Zr,G+=2):(V=r,ct===0&&Ct(qi)),V!==r?(re=Cu(),re!==r?(t.charCodeAt(G)===41?(he=ne,G++):(he=r,ct===0&&Ct(ee)),he!==r?(Dt=N,V=es(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Dc(){var N,V,re,he,ze,mt;return N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,2)===bA?(he=bA,G+=2):(he=r,ct===0&&Ct(kA)),he!==r?(ze=RA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(lt)),mt!==r?(Dt=N,V=up(re,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,3)===ng?(he=ng,G+=3):(he=r,ct===0&&Ct(gu)),he!==r?(Dt=N,V=ig(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,2)===du?(he=du,G+=2):(he=r,ct===0&&Ct(uo)),he!==r?(ze=RA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(lt)),mt!==r?(Dt=N,V=QA(re,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,3)===mc?(he=mc,G+=3):(he=r,ct===0&&Ct(ca)),he!==r?(Dt=N,V=sg(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.charCodeAt(G)===125?(he=H,G++):(he=r,ct===0&&Ct(lt)),he!==r?(Dt=N,V=yc(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.charCodeAt(G)===36?(V=Pm,G++):(V=r,ct===0&&Ct(og)),V!==r?(re=Ga(),re!==r?(Dt=N,V=yc(re),N=V):(G=N,N=r)):(G=N,N=r)))))),N}function Ew(){var N,V,re;return N=G,V=yg(),V!==r?(Dt=G,re=$n(V),re?re=void 0:re=r,re!==r?(Dt=N,V=Ap(V),N=V):(G=N,N=r)):(G=N,N=r),N}function yg(){var N,V,re,he,ze;if(N=G,V=[],re=G,he=G,ct++,ze=Cg(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re!==r)for(;re!==r;)V.push(re),re=G,he=G,ct++,ze=Cg(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r);else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function Eg(){var N,V,re;if(N=G,V=[],ag.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(FA)),re!==r)for(;re!==r;)V.push(re),ag.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(FA));else V=r;return V!==r&&(Dt=N,V=Hs()),N=V,N}function Ga(){var N,V,re;if(N=G,V=[],mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha)),re!==r)for(;re!==r;)V.push(re),mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha));else V=r;return V!==r&&(Dt=N,V=Hs()),N=V,N}function Fm(){var N;return Gi.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(ua)),N}function Cg(){var N;return yu.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(Es)),N}function Qt(){var N,V;if(N=[],Ec.test(t.charAt(G))?(V=t.charAt(G),G++):(V=r,ct===0&&Ct(Cc)),V!==r)for(;V!==r;)N.push(V),Ec.test(t.charAt(G))?(V=t.charAt(G),G++):(V=r,ct===0&&Ct(Cc));else N=r;return N}if(Eu=a(),Eu!==r&&G===t.length)return Eu;throw Eu!==r&&G!1}){try{return(0,tW.parse)(t,e)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function ly(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:o},a)=>`${MD(r)}${o===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function MD(t){return`${cy(t.chain)}${t.then?` ${lR(t.then)}`:""}`}function lR(t){return`${t.type} ${MD(t.line)}`}function cy(t){return`${uR(t)}${t.then?` ${cR(t.then)}`:""}`}function cR(t){return`${t.type} ${cy(t.chain)}`}function uR(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>ND(e)).join(" ")} `:""}${t.args.map(e=>AR(e)).join(" ")}`;case"subshell":return`(${ly(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Kw(e)).join(" ")}`:""}`;case"group":return`{ ${ly(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Kw(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>ND(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function ND(t){return`${t.name}=${t.args[0]?Gg(t.args[0]):""}`}function AR(t){switch(t.type){case"redirection":return Kw(t);case"argument":return Gg(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Kw(t){return`${t.subtype} ${t.args.map(e=>Gg(e)).join(" ")}`}function Gg(t){return t.segments.map(e=>fR(e)).join("")}function fR(t){let e=(o,a)=>a?`"${o}"`:o,r=o=>o===""?"''":o.match(/[()}<>$|&;"'\n\t ]/)?o.match(/['\t\p{C}]/u)?o.match(/'/)?`"${o.replace(/["$\t\p{C}]/u,m8e)}"`:`$'${o.replace(/[\t\p{C}]/u,nW)}'`:`'${o}'`:o;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`\${${ly(t.shell)}}`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(o=>Gg(o)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(o=>Gg(o)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${OD(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function OD(t){let e=a=>{switch(a){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,o=a=>r(OD(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${o(t.left)} ${e(t.type)} ${o(t.right)}`}}var tW,rW,d8e,nW,m8e,iW=Et(()=>{tW=$e(eW());rW=new Map([["\f","\\f"],[` -`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),d8e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(rW,([t,e])=>[t,`"$'${e}'"`])]),nW=t=>rW.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,m8e=t=>d8e.get(t)??`"$'${nW(t)}'"`});var oW=_((Nxt,sW)=>{"use strict";function y8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Yg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Yg)}y8e(Yg,Error);Yg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;Ipe&&(pe=J,Ae=[]),Ae.push(He))}function lt(He,x){return new Yg(He,null,null,x)}function Re(He,x,w){return new Yg(Yg.buildMessage(He,x),He,x,w)}function Qe(){var He,x,w,S;return He=J,x=be(),x!==r?(t.charCodeAt(J)===47?(w=n,J++):(w=r,ye===0&&H(u)),w!==r?(S=be(),S!==r?(te=He,x=A(x,S),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=be(),x!==r&&(te=He,x=p(x)),He=x),He}function be(){var He,x,w,S;return He=J,x=_e(),x!==r?(t.charCodeAt(J)===64?(w=h,J++):(w=r,ye===0&&H(E)),w!==r?(S=Je(),S!==r?(te=He,x=I(x,S),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=_e(),x!==r&&(te=He,x=v(x)),He=x),He}function _e(){var He,x,w,S,y;return He=J,t.charCodeAt(J)===64?(x=h,J++):(x=r,ye===0&&H(E)),x!==r?(w=Te(),w!==r?(t.charCodeAt(J)===47?(S=n,J++):(S=r,ye===0&&H(u)),S!==r?(y=Te(),y!==r?(te=He,x=b(),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=Te(),x!==r&&(te=He,x=b()),He=x),He}function Te(){var He,x,w;if(He=J,x=[],C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(T)),w!==r)for(;w!==r;)x.push(w),C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(T));else x=r;return x!==r&&(te=He,x=b()),He=x,He}function Je(){var He,x,w;if(He=J,x=[],L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(U)),w!==r)for(;w!==r;)x.push(w),L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(U));else x=r;return x!==r&&(te=He,x=b()),He=x,He}if(ae=a(),ae!==r&&J===t.length)return ae;throw ae!==r&&J{aW=$e(oW())});var Vg=_((Mxt,Wg)=>{"use strict";function cW(t){return typeof t>"u"||t===null}function C8e(t){return typeof t=="object"&&t!==null}function w8e(t){return Array.isArray(t)?t:cW(t)?[]:[t]}function I8e(t,e){var r,o,a,n;if(e)for(n=Object.keys(e),r=0,o=n.length;r{"use strict";function Jw(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Jw.prototype=Object.create(Error.prototype);Jw.prototype.constructor=Jw;Jw.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};uW.exports=Jw});var pW=_((Uxt,fW)=>{"use strict";var AW=Vg();function pR(t,e,r,o,a){this.name=t,this.buffer=e,this.position=r,this.line=o,this.column=a}pR.prototype.getSnippet=function(e,r){var o,a,n,u,A;if(!this.buffer)return null;for(e=e||4,r=r||75,o="",a=this.position;a>0&&`\0\r +`)}async preserveTimePromise(e,r){let o=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,o.atime,o.mtime)}async preserveTimeSync(e,r){let o=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,o.atime,o.mtime)}},Mu=class extends gf{constructor(){super(V)}}});var Ss,df=Et(()=>{Hg();Ss=class extends gf{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,o){return this.baseFs.openPromise(this.mapToBase(e),r,o)}openSync(e,r,o){return this.baseFs.openSync(this.mapToBase(e),r,o)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,o,a,n){return await this.baseFs.readPromise(e,r,o,a,n)}readSync(e,r,o,a,n){return this.baseFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,o):await this.baseFs.writePromise(e,r,o,a,n)}writeSync(e,r,o,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,o):this.baseFs.writeSync(e,r,o,a,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async fchownPromise(e,r,o){return this.baseFs.fchownPromise(e,r,o)}fchownSync(e,r,o){return this.baseFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return this.baseFs.chownPromise(this.mapToBase(e),r,o)}chownSync(e,r,o){return this.baseFs.chownSync(this.mapToBase(e),r,o)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,o=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),o)}copyFileSync(e,r,o=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),o)}async appendFilePromise(e,r,o){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,o)}appendFileSync(e,r,o){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,o)}async writeFilePromise(e,r,o){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,o)}writeFileSync(e,r,o){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,o)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,o){return this.baseFs.utimesPromise(this.mapToBase(e),r,o)}utimesSync(e,r,o){return this.baseFs.utimesSync(this.mapToBase(e),r,o)}async lutimesPromise(e,r,o){return this.baseFs.lutimesPromise(this.mapToBase(e),r,o)}lutimesSync(e,r,o){return this.baseFs.lutimesSync(this.mapToBase(e),r,o)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(u,a,o)}symlinkSync(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(u,a,o)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,o){return this.baseFs.watch(this.mapToBase(e),r,o)}watchFile(e,r,o){return this.baseFs.watchFile(this.mapToBase(e),r,o)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var Uu,q7=Et(()=>{df();Uu=class extends Ss{constructor(r,{baseFs:o,pathUtils:a}){super(a);this.target=r,this.baseFs=o}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(r){return r}mapToBase(r){return r}}});function j7(t){let e=t;return typeof t.path=="string"&&(e.path=ue.toPortablePath(t.path)),e}var G7,Tn,qg=Et(()=>{G7=$e(ve("fs"));Hg();Ca();Tn=class extends Mu{constructor(r=G7.default){super();this.realFs=r}getExtractHint(){return!1}getRealPath(){return Bt.root}resolve(r){return V.resolve(r)}async openPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.open(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}openSync(r,o,a){return this.realFs.openSync(ue.fromPortablePath(r),o,a)}async opendirPromise(r,o){return await new Promise((a,n)=>{typeof o<"u"?this.realFs.opendir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.opendir(ue.fromPortablePath(r),this.makeCallback(a,n))}).then(a=>{let n=a;return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n})}opendirSync(r,o){let n=typeof o<"u"?this.realFs.opendirSync(ue.fromPortablePath(r),o):this.realFs.opendirSync(ue.fromPortablePath(r));return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n}async readPromise(r,o,a=0,n=0,u=-1){return await new Promise((A,p)=>{this.realFs.read(r,o,a,n,u,(h,E)=>{h?p(h):A(E)})})}readSync(r,o,a,n,u){return this.realFs.readSync(r,o,a,n,u)}async writePromise(r,o,a,n,u){return await new Promise((A,p)=>typeof o=="string"?this.realFs.write(r,o,a,this.makeCallback(A,p)):this.realFs.write(r,o,a,n,u,this.makeCallback(A,p)))}writeSync(r,o,a,n,u){return typeof o=="string"?this.realFs.writeSync(r,o,a):this.realFs.writeSync(r,o,a,n,u)}async closePromise(r){await new Promise((o,a)=>{this.realFs.close(r,this.makeCallback(o,a))})}closeSync(r){this.realFs.closeSync(r)}createReadStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createReadStream(a,o)}createWriteStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createWriteStream(a,o)}async realpathPromise(r){return await new Promise((o,a)=>{this.realFs.realpath(ue.fromPortablePath(r),{},this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}realpathSync(r){return ue.toPortablePath(this.realFs.realpathSync(ue.fromPortablePath(r),{}))}async existsPromise(r){return await new Promise(o=>{this.realFs.exists(ue.fromPortablePath(r),o)})}accessSync(r,o){return this.realFs.accessSync(ue.fromPortablePath(r),o)}async accessPromise(r,o){return await new Promise((a,n)=>{this.realFs.access(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}existsSync(r){return this.realFs.existsSync(ue.fromPortablePath(r))}async statPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.stat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.stat(ue.fromPortablePath(r),this.makeCallback(a,n))})}statSync(r,o){return o?this.realFs.statSync(ue.fromPortablePath(r),o):this.realFs.statSync(ue.fromPortablePath(r))}async fstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.fstat(r,o,this.makeCallback(a,n)):this.realFs.fstat(r,this.makeCallback(a,n))})}fstatSync(r,o){return o?this.realFs.fstatSync(r,o):this.realFs.fstatSync(r)}async lstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.lstat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.lstat(ue.fromPortablePath(r),this.makeCallback(a,n))})}lstatSync(r,o){return o?this.realFs.lstatSync(ue.fromPortablePath(r),o):this.realFs.lstatSync(ue.fromPortablePath(r))}async fchmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.fchmod(r,o,this.makeCallback(a,n))})}fchmodSync(r,o){return this.realFs.fchmodSync(r,o)}async chmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.chmod(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}chmodSync(r,o){return this.realFs.chmodSync(ue.fromPortablePath(r),o)}async fchownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.fchown(r,o,a,this.makeCallback(n,u))})}fchownSync(r,o,a){return this.realFs.fchownSync(r,o,a)}async chownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.chown(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}chownSync(r,o,a){return this.realFs.chownSync(ue.fromPortablePath(r),o,a)}async renamePromise(r,o){return await new Promise((a,n)=>{this.realFs.rename(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}renameSync(r,o){return this.realFs.renameSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async copyFilePromise(r,o,a=0){return await new Promise((n,u)=>{this.realFs.copyFile(ue.fromPortablePath(r),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}copyFileSync(r,o,a=0){return this.realFs.copyFileSync(ue.fromPortablePath(r),ue.fromPortablePath(o),a)}async appendFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFile(A,o,a,this.makeCallback(n,u)):this.realFs.appendFile(A,o,this.makeCallback(n,u))})}appendFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFileSync(n,o,a):this.realFs.appendFileSync(n,o)}async writeFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFile(A,o,a,this.makeCallback(n,u)):this.realFs.writeFile(A,o,this.makeCallback(n,u))})}writeFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFileSync(n,o,a):this.realFs.writeFileSync(n,o)}async unlinkPromise(r){return await new Promise((o,a)=>{this.realFs.unlink(ue.fromPortablePath(r),this.makeCallback(o,a))})}unlinkSync(r){return this.realFs.unlinkSync(ue.fromPortablePath(r))}async utimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.utimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}utimesSync(r,o,a){this.realFs.utimesSync(ue.fromPortablePath(r),o,a)}async lutimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.lutimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}lutimesSync(r,o,a){this.realFs.lutimesSync(ue.fromPortablePath(r),o,a)}async mkdirPromise(r,o){return await new Promise((a,n)=>{this.realFs.mkdir(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}mkdirSync(r,o){return this.realFs.mkdirSync(ue.fromPortablePath(r),o)}async rmdirPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rmdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rmdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}rmdirSync(r,o){return this.realFs.rmdirSync(ue.fromPortablePath(r),o)}async linkPromise(r,o){return await new Promise((a,n)=>{this.realFs.link(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}linkSync(r,o){return this.realFs.linkSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async symlinkPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.symlink(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}symlinkSync(r,o,a){return this.realFs.symlinkSync(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a)}async readFilePromise(r,o){return await new Promise((a,n)=>{let u=typeof r=="string"?ue.fromPortablePath(r):r;this.realFs.readFile(u,o,this.makeCallback(a,n))})}readFileSync(r,o){let a=typeof r=="string"?ue.fromPortablePath(r):r;return this.realFs.readFileSync(a,o)}async readdirPromise(r,o){return await new Promise((a,n)=>{o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(j7)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(ue.toPortablePath)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.readdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}readdirSync(r,o){return o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdirSync(ue.fromPortablePath(r),o).map(j7):this.realFs.readdirSync(ue.fromPortablePath(r),o).map(ue.toPortablePath):this.realFs.readdirSync(ue.fromPortablePath(r),o):this.realFs.readdirSync(ue.fromPortablePath(r))}async readlinkPromise(r){return await new Promise((o,a)=>{this.realFs.readlink(ue.fromPortablePath(r),this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}readlinkSync(r){return ue.toPortablePath(this.realFs.readlinkSync(ue.fromPortablePath(r)))}async truncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.truncate(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}truncateSync(r,o){return this.realFs.truncateSync(ue.fromPortablePath(r),o)}async ftruncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.ftruncate(r,o,this.makeCallback(a,n))})}ftruncateSync(r,o){return this.realFs.ftruncateSync(r,o)}watch(r,o,a){return this.realFs.watch(ue.fromPortablePath(r),o,a)}watchFile(r,o,a){return this.realFs.watchFile(ue.fromPortablePath(r),o,a)}unwatchFile(r,o){return this.realFs.unwatchFile(ue.fromPortablePath(r),o)}makeCallback(r,o){return(a,n)=>{a?o(a):r(n)}}}});var gn,Y7=Et(()=>{qg();df();Ca();gn=class extends Ss{constructor(r,{baseFs:o=new Tn}={}){super(V);this.target=this.pathUtils.normalize(r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(r){return this.pathUtils.isAbsolute(r)?V.normalize(r):this.baseFs.resolve(V.join(this.target,r))}mapFromBase(r){return r}mapToBase(r){return this.pathUtils.isAbsolute(r)?r:this.pathUtils.join(this.target,r)}}});var W7,_u,K7=Et(()=>{qg();df();Ca();W7=Bt.root,_u=class extends Ss{constructor(r,{baseFs:o=new Tn}={}){super(V);this.target=this.pathUtils.resolve(Bt.root,r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Bt.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(r){let o=this.pathUtils.normalize(r);if(this.pathUtils.isAbsolute(r))return this.pathUtils.resolve(this.target,this.pathUtils.relative(W7,r));if(o.match(/^\.\.\/?/))throw new Error(`Resolving this path (${r}) would escape the jail`);return this.pathUtils.resolve(this.target,r)}mapFromBase(r){return this.pathUtils.resolve(W7,this.pathUtils.relative(this.target,r))}}});var iy,V7=Et(()=>{df();iy=class extends Ss{constructor(r,o){super(o);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var jg,wa,Hp,J7=Et(()=>{jg=ve("fs");Hg();qg();YR();BD();Ca();wa=4278190080,Hp=class extends Mu{constructor({baseFs:r=new Tn,filter:o=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:u=!0,maxAge:A=5e3,typeCheck:p=jg.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:I}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=u?new Map:null,this.factoryPromise=E,this.factorySync=I,this.filter=o,this.getMountPoint=h,this.magic=a<<24,this.maxAge=A,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Ug(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(Ug(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,o){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,o]),a}async openPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,o,a),async(n,{subPath:u})=>this.remapFd(n,await n.openPromise(u,o,a)))}openSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,o,a),(n,{subPath:u})=>this.remapFd(n,n.openSync(u,o,a)))}async opendirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,o),async(a,{subPath:n})=>await a.opendirPromise(n,o),{requireSubpath:!1})}opendirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,o),(a,{subPath:n})=>a.opendirSync(n,o),{requireSubpath:!1})}async readPromise(r,o,a,n,u){if((r&wa)!==this.magic)return await this.baseFs.readPromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("read");let[p,h]=A;return await p.readPromise(h,o,a,n,u)}readSync(r,o,a,n,u){if((r&wa)!==this.magic)return this.baseFs.readSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("readSync");let[p,h]=A;return p.readSync(h,o,a,n,u)}async writePromise(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?await this.baseFs.writePromise(r,o,a):await this.baseFs.writePromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("write");let[p,h]=A;return typeof o=="string"?await p.writePromise(h,o,a):await p.writePromise(h,o,a,n,u)}writeSync(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?this.baseFs.writeSync(r,o,a):this.baseFs.writeSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("writeSync");let[p,h]=A;return typeof o=="string"?p.writeSync(h,o,a):p.writeSync(h,o,a,n,u)}async closePromise(r){if((r&wa)!==this.magic)return await this.baseFs.closePromise(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("close");this.fdMap.delete(r);let[a,n]=o;return await a.closePromise(n)}closeSync(r){if((r&wa)!==this.magic)return this.baseFs.closeSync(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("closeSync");this.fdMap.delete(r);let[a,n]=o;return a.closeSync(n)}createReadStream(r,o){return r===null?this.baseFs.createReadStream(r,o):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,o),(a,{archivePath:n,subPath:u})=>{let A=a.createReadStream(u,o);return A.path=ue.fromPortablePath(this.pathUtils.join(n,u)),A})}createWriteStream(r,o){return r===null?this.baseFs.createWriteStream(r,o):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,o),(a,{subPath:n})=>a.createWriteStream(n,o))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=await this.baseFs.realpathPromise(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,await o.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=this.baseFs.realpathSync(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,o.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(o,{subPath:a})=>await o.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(o,{subPath:a})=>o.existsSync(a))}async accessPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,o),async(a,{subPath:n})=>await a.accessPromise(n,o))}accessSync(r,o){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,o),(a,{subPath:n})=>a.accessSync(n,o))}async statPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,o),async(a,{subPath:n})=>await a.statPromise(n,o))}statSync(r,o){return this.makeCallSync(r,()=>this.baseFs.statSync(r,o),(a,{subPath:n})=>a.statSync(n,o))}async fstatPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstat");let[n,u]=a;return n.fstatPromise(u,o)}fstatSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstatSync");let[n,u]=a;return n.fstatSync(u,o)}async lstatPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,o),async(a,{subPath:n})=>await a.lstatPromise(n,o))}lstatSync(r,o){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,o),(a,{subPath:n})=>a.lstatSync(n,o))}async fchmodPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmod");let[n,u]=a;return n.fchmodPromise(u,o)}fchmodSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmodSync");let[n,u]=a;return n.fchmodSync(u,o)}async chmodPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,o),async(a,{subPath:n})=>await a.chmodPromise(n,o))}chmodSync(r,o){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,o),(a,{subPath:n})=>a.chmodSync(n,o))}async fchownPromise(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownPromise(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchown");let[u,A]=n;return u.fchownPromise(A,o,a)}fchownSync(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownSync(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchownSync");let[u,A]=n;return u.fchownSync(A,o,a)}async chownPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,o,a),async(n,{subPath:u})=>await n.chownPromise(u,o,a))}chownSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,o,a),(n,{subPath:u})=>n.chownSync(u,o,a))}async renamePromise(r,o){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.renamePromise(r,o),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(o,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,A)}))}renameSync(r,o){return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.renameSync(r,o),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(o,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,A)}))}async copyFilePromise(r,o,a=0){let n=async(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&await this.existsPromise(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await u.readFilePromise(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.copyFilePromise(r,o,a),async(u,{subPath:A})=>await n(this.baseFs,r,u,A)),async(u,{subPath:A})=>await this.makeCallPromise(o,async()=>await n(u,A,this.baseFs,o),async(p,{subPath:h})=>u!==p?await n(u,A,p,h):await u.copyFilePromise(A,h,a)))}copyFileSync(r,o,a=0){let n=(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&this.existsSync(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=u.readFileSync(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.copyFileSync(r,o,a),(u,{subPath:A})=>n(this.baseFs,r,u,A)),(u,{subPath:A})=>this.makeCallSync(o,()=>n(u,A,this.baseFs,o),(p,{subPath:h})=>u!==p?n(u,A,p,h):u.copyFileSync(A,h,a)))}async appendFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,o,a),async(n,{subPath:u})=>await n.appendFilePromise(u,o,a))}appendFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,o,a),(n,{subPath:u})=>n.appendFileSync(u,o,a))}async writeFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,o,a),async(n,{subPath:u})=>await n.writeFilePromise(u,o,a))}writeFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,o,a),(n,{subPath:u})=>n.writeFileSync(u,o,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(o,{subPath:a})=>await o.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(o,{subPath:a})=>o.unlinkSync(a))}async utimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,o,a),async(n,{subPath:u})=>await n.utimesPromise(u,o,a))}utimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,o,a),(n,{subPath:u})=>n.utimesSync(u,o,a))}async lutimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,o,a),async(n,{subPath:u})=>await n.lutimesPromise(u,o,a))}lutimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,o,a),(n,{subPath:u})=>n.lutimesSync(u,o,a))}async mkdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,o),async(a,{subPath:n})=>await a.mkdirPromise(n,o))}mkdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,o),(a,{subPath:n})=>a.mkdirSync(n,o))}async rmdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,o),async(a,{subPath:n})=>await a.rmdirPromise(n,o))}rmdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,o),(a,{subPath:n})=>a.rmdirSync(n,o))}async linkPromise(r,o){return await this.makeCallPromise(o,async()=>await this.baseFs.linkPromise(r,o),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,o){return this.makeCallSync(o,()=>this.baseFs.linkSync(r,o),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,o,a){return await this.makeCallPromise(o,async()=>await this.baseFs.symlinkPromise(r,o,a),async(n,{subPath:u})=>await n.symlinkPromise(r,u))}symlinkSync(r,o,a){return this.makeCallSync(o,()=>this.baseFs.symlinkSync(r,o,a),(n,{subPath:u})=>n.symlinkSync(r,u))}async readFilePromise(r,o){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,o),async(a,{subPath:n})=>await a.readFilePromise(n,o))}readFileSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,o),(a,{subPath:n})=>a.readFileSync(n,o))}async readdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,o),async(a,{subPath:n})=>await a.readdirPromise(n,o),{requireSubpath:!1})}readdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,o),(a,{subPath:n})=>a.readdirSync(n,o),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(o,{subPath:a})=>await o.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(o,{subPath:a})=>o.readlinkSync(a))}async truncatePromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,o),async(a,{subPath:n})=>await a.truncatePromise(n,o))}truncateSync(r,o){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,o),(a,{subPath:n})=>a.truncateSync(n,o))}async ftruncatePromise(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncatePromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncate");let[n,u]=a;return n.ftruncatePromise(u,o)}ftruncateSync(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncateSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncateSync");let[n,u]=a;return n.ftruncateSync(u,o)}watch(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,o,a),(n,{subPath:u})=>n.watch(u,o,a))}watchFile(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,o,a),()=>ny(this,r,o,a))}unwatchFile(r,o){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,o),()=>Mg(this,r,o))}async makeCallPromise(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await o();let u=this.resolve(r),A=this.findMount(u);return A?n&&A.subPath==="/"?await o():await this.getMountPromise(A.archivePath,async p=>await a(p,A)):await o()}makeCallSync(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return o();let u=this.resolve(r),A=this.findMount(u);return!A||n&&A.subPath==="/"?o():this.getMountSync(A.archivePath,p=>a(p,A))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let o="";for(;;){let a=r.substring(o.length),n=this.getMountPoint(a,o);if(!n)return null;if(o=this.pathUtils.join(o,n),!this.isMount.has(o)){if(this.notMount.has(o))continue;try{if(this.typeCheck!==null&&(this.baseFs.lstatSync(o).mode&jg.constants.S_IFMT)!==this.typeCheck){this.notMount.add(o);continue}}catch{return null}this.isMount.add(o)}return{archivePath:o,subPath:this.pathUtils.join(Bt.root,r.substring(o.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let o=Date.now(),a=o+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[u,{childFs:A,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||A.hasOpenFileHandles?.())){if(o>=p){A.saveAndClose?.(),this.mountInstances.delete(u),n-=1;continue}else if(r===null||n<=0){a=p;break}A.saveAndClose?.(),this.mountInstances.delete(u),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-o).unref())}async getMountPromise(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await o(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await o(a)}finally{a.saveAndClose?.()}}}getMountSync(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,o(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return o(a)}finally{a.saveAndClose?.()}}}}});var Zt,WR,Yw,z7=Et(()=>{Hg();Ca();Zt=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),WR=class extends gf{constructor(){super(V)}getExtractHint(){throw Zt()}getRealPath(){throw Zt()}resolve(){throw Zt()}async openPromise(){throw Zt()}openSync(){throw Zt()}async opendirPromise(){throw Zt()}opendirSync(){throw Zt()}async readPromise(){throw Zt()}readSync(){throw Zt()}async writePromise(){throw Zt()}writeSync(){throw Zt()}async closePromise(){throw Zt()}closeSync(){throw Zt()}createWriteStream(){throw Zt()}createReadStream(){throw Zt()}async realpathPromise(){throw Zt()}realpathSync(){throw Zt()}async readdirPromise(){throw Zt()}readdirSync(){throw Zt()}async existsPromise(e){throw Zt()}existsSync(e){throw Zt()}async accessPromise(){throw Zt()}accessSync(){throw Zt()}async statPromise(){throw Zt()}statSync(){throw Zt()}async fstatPromise(e){throw Zt()}fstatSync(e){throw Zt()}async lstatPromise(e){throw Zt()}lstatSync(e){throw Zt()}async fchmodPromise(){throw Zt()}fchmodSync(){throw Zt()}async chmodPromise(){throw Zt()}chmodSync(){throw Zt()}async fchownPromise(){throw Zt()}fchownSync(){throw Zt()}async chownPromise(){throw Zt()}chownSync(){throw Zt()}async mkdirPromise(){throw Zt()}mkdirSync(){throw Zt()}async rmdirPromise(){throw Zt()}rmdirSync(){throw Zt()}async linkPromise(){throw Zt()}linkSync(){throw Zt()}async symlinkPromise(){throw Zt()}symlinkSync(){throw Zt()}async renamePromise(){throw Zt()}renameSync(){throw Zt()}async copyFilePromise(){throw Zt()}copyFileSync(){throw Zt()}async appendFilePromise(){throw Zt()}appendFileSync(){throw Zt()}async writeFilePromise(){throw Zt()}writeFileSync(){throw Zt()}async unlinkPromise(){throw Zt()}unlinkSync(){throw Zt()}async utimesPromise(){throw Zt()}utimesSync(){throw Zt()}async lutimesPromise(){throw Zt()}lutimesSync(){throw Zt()}async readFilePromise(){throw Zt()}readFileSync(){throw Zt()}async readlinkPromise(){throw Zt()}readlinkSync(){throw Zt()}async truncatePromise(){throw Zt()}truncateSync(){throw Zt()}async ftruncatePromise(e,r){throw Zt()}ftruncateSync(e,r){throw Zt()}watch(){throw Zt()}watchFile(){throw Zt()}unwatchFile(){throw Zt()}},Yw=WR;Yw.instance=new WR});var qp,X7=Et(()=>{df();Ca();qp=class extends Ss{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return ue.fromPortablePath(r)}mapToBase(r){return ue.toPortablePath(r)}}});var x_e,KR,k_e,mi,Z7=Et(()=>{qg();df();Ca();x_e=/^[0-9]+$/,KR=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,k_e=/^([^/]+-)?[a-f0-9]+$/,mi=class extends Ss{constructor({baseFs:r=new Tn}={}){super(V);this.baseFs=r}static makeVirtualPath(r,o,a){if(V.basename(r)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!V.basename(o).match(k_e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let u=V.relative(V.dirname(r),a).split("/"),A=0;for(;A{VR=$e(ve("buffer")),$7=ve("url"),eY=ve("util");df();Ca();xD=class extends Ss{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return r}mapToBase(r){if(typeof r=="string")return r;if(r instanceof URL)return(0,$7.fileURLToPath)(r);if(Buffer.isBuffer(r)){let o=r.toString();if(!Q_e(r,o))throw new Error("Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942");return o}throw new Error(`Unsupported path type: ${(0,eY.inspect)(r)}`)}}});var rY,Bo,mf,jp,kD,QD,sy,Tc,Nc,F_e,R_e,T_e,N_e,Ww,nY=Et(()=>{rY=ve("readline"),Bo=Symbol("kBaseFs"),mf=Symbol("kFd"),jp=Symbol("kClosePromise"),kD=Symbol("kCloseResolve"),QD=Symbol("kCloseReject"),sy=Symbol("kRefs"),Tc=Symbol("kRef"),Nc=Symbol("kUnref"),Ww=class{constructor(e,r){this[F_e]=1;this[R_e]=void 0;this[T_e]=void 0;this[N_e]=void 0;this[Bo]=r,this[mf]=e}get fd(){return this[mf]}async appendFile(e,r){try{this[Tc](this.appendFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Bo].appendFilePromise(this.fd,e,o?{encoding:o}:void 0)}finally{this[Nc]()}}async chown(e,r){try{return this[Tc](this.chown),await this[Bo].fchownPromise(this.fd,e,r)}finally{this[Nc]()}}async chmod(e){try{return this[Tc](this.chmod),await this[Bo].fchmodPromise(this.fd,e)}finally{this[Nc]()}}createReadStream(e){return this[Bo].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Bo].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,o,a){try{this[Tc](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,o=e.length??n.byteLength,a=e.position??null),r??=0,o??=0,o===0?{bytesRead:o,buffer:n}:{bytesRead:await this[Bo].readPromise(this.fd,n,r,o,a),buffer:n}}finally{this[Nc]()}}async readFile(e){try{this[Tc](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Bo].readFilePromise(this.fd,r)}finally{this[Nc]()}}readLines(e){return(0,rY.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Tc](this.stat),await this[Bo].fstatPromise(this.fd,e)}finally{this[Nc]()}}async truncate(e){try{return this[Tc](this.truncate),await this[Bo].ftruncatePromise(this.fd,e)}finally{this[Nc]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Tc](this.writeFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;await this[Bo].writeFilePromise(this.fd,e,o)}finally{this[Nc]()}}async write(...e){try{if(this[Tc](this.write),ArrayBuffer.isView(e[0])){let[r,o,a,n]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,o,a]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o,a),buffer:r}}}finally{this[Nc]()}}async writev(e,r){try{this[Tc](this.writev);let o=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);o+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);o+=n.bytesWritten}return{buffers:e,bytesWritten:o}}finally{this[Nc]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[mf]===-1)return Promise.resolve();if(this[jp])return this[jp];if(this[sy]--,this[sy]===0){let e=this[mf];this[mf]=-1,this[jp]=this[Bo].closePromise(e).finally(()=>{this[jp]=void 0})}else this[jp]=new Promise((e,r)=>{this[kD]=e,this[QD]=r}).finally(()=>{this[jp]=void 0,this[QD]=void 0,this[kD]=void 0});return this[jp]}[(Bo,mf,F_e=sy,R_e=jp,T_e=kD,N_e=QD,Tc)](e){if(this[mf]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[sy]++}[Nc](){if(this[sy]--,this[sy]===0){let e=this[mf];this[mf]=-1,this[Bo].closePromise(e).then(this[kD],this[QD])}}}});function Kw(t,e){e=new xD(e);let r=(o,a,n)=>{let u=o[a];o[a]=n,typeof u?.[oy.promisify.custom]<"u"&&(n[oy.promisify.custom]=u[oy.promisify.custom])};{r(t,"exists",(o,...a)=>{let u=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(o).then(A=>{u(A)},()=>{u(!1)})})}),r(t,"read",(...o)=>{let[a,n,u,A,p,h]=o;if(o.length<=3){let E={};o.length<3?h=o[1]:(E=o[1],h=o[2]),{buffer:n=Buffer.alloc(16384),offset:u=0,length:A=n.byteLength,position:p}=E}if(u==null&&(u=0),A|=0,A===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,u,A,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let o of iY){let a=o.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[o];if(typeof n>"u")continue;r(t,a,(...A)=>{let h=typeof A[A.length-1]=="function"?A.pop():()=>{};process.nextTick(()=>{n.apply(e,A).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",o=>{try{return e.existsSync(o)}catch{return!1}}),r(t,"readSync",(...o)=>{let[a,n,u,A,p]=o;return o.length<=3&&({offset:u=0,length:A=n.byteLength,position:p}=o[2]||{}),u==null&&(u=0),A|=0,A===0?0:(p==null&&(p=-1),e.readSync(a,n,u,A,p))});for(let o of L_e){let a=o;if(typeof t[a]>"u")continue;let n=e[o];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let o=t.promises;for(let a of iY){let n=a.replace(/Promise$/,"");if(typeof o[n]>"u")continue;let u=e[a];typeof u>"u"||a!=="open"&&r(o,n,(A,...p)=>A instanceof Ww?A[n].apply(A,p):u.call(e,A,...p))}r(o,"open",async(...a)=>{let n=await e.openPromise(...a);return new Ww(n,e)})}t.read[oy.promisify.custom]=async(o,a,...n)=>({bytesRead:await e.readPromise(o,a,...n),buffer:a}),t.write[oy.promisify.custom]=async(o,a,...n)=>({bytesWritten:await e.writePromise(o,a,...n),buffer:a})}function FD(t,e){let r=Object.create(t);return Kw(r,e),r}var oy,L_e,iY,sY=Et(()=>{oy=ve("util");tY();nY();L_e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),iY=new Set(["accessPromise","appendFilePromise","fchmodPromise","chmodPromise","fchownPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","statPromise","symlinkPromise","truncatePromise","ftruncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"])});function oY(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function aY(){if(JR)return JR;let t=ue.toPortablePath(lY.default.tmpdir()),e=oe.realpathSync(t);return process.once("exit",()=>{oe.rmtempSync()}),JR={tmpdir:t,realTmpdir:e}}var lY,Lc,JR,oe,cY=Et(()=>{lY=$e(ve("os"));qg();Ca();Lc=new Set,JR=null;oe=Object.assign(new Tn,{detachTemp(t){Lc.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=aY();for(;;){let o=oY("xfs-");try{this.mkdirSync(V.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=V.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=aY();for(;;){let o=oY("xfs-");try{await this.mkdirPromise(V.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=V.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Lc.values()).map(async t=>{try{await oe.removePromise(t,{maxRetries:0}),Lc.delete(t)}catch{}}))},rmtempSync(){for(let t of Lc)try{oe.removeSync(t),Lc.delete(t)}catch{}}})});var Vw={};Vt(Vw,{AliasFS:()=>Uu,BasePortableFakeFS:()=>Mu,CustomDir:()=>Gw,CwdFS:()=>gn,FakeFS:()=>gf,Filename:()=>dr,JailFS:()=>_u,LazyFS:()=>iy,MountFS:()=>Hp,NoFS:()=>Yw,NodeFS:()=>Tn,PortablePath:()=>Bt,PosixFS:()=>qp,ProxiedFS:()=>Ss,VirtualFS:()=>mi,constants:()=>vi,errors:()=>ar,extendFs:()=>FD,normalizeLineEndings:()=>_g,npath:()=>ue,opendir:()=>PD,patchFs:()=>Kw,ppath:()=>V,setupCopyIndex:()=>SD,statUtils:()=>Ea,unwatchAllFiles:()=>Ug,unwatchFile:()=>Mg,watchFile:()=>ny,xfs:()=>oe});var St=Et(()=>{k7();BD();HR();GR();L7();YR();Hg();Ca();Ca();q7();Hg();Y7();K7();V7();J7();z7();qg();X7();df();Z7();sY();cY()});var hY=_((obt,pY)=>{pY.exports=fY;fY.sync=M_e;var uY=ve("fs");function O_e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var o=0;o{yY.exports=dY;dY.sync=U_e;var gY=ve("fs");function dY(t,e,r){gY.stat(t,function(o,a){r(o,o?!1:mY(a,e))})}function U_e(t,e){return mY(gY.statSync(t),e)}function mY(t,e){return t.isFile()&&__e(t,e)}function __e(t,e){var r=t.mode,o=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),u=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),A=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=A|p,I=r&h||r&p&&a===u||r&A&&o===n||r&E&&n===0;return I}});var wY=_((cbt,CY)=>{var lbt=ve("fs"),RD;process.platform==="win32"||global.TESTING_WINDOWS?RD=hY():RD=EY();CY.exports=zR;zR.sync=H_e;function zR(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(o,a){zR(t,e||{},function(n,u){n?a(n):o(u)})})}RD(t,e||{},function(o,a){o&&(o.code==="EACCES"||e&&e.ignoreErrors)&&(o=null,a=!1),r(o,a)})}function H_e(t,e){try{return RD.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var bY=_((ubt,PY)=>{var ay=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",IY=ve("path"),q_e=ay?";":":",BY=wY(),vY=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),DY=(t,e)=>{let r=e.colon||q_e,o=t.match(/\//)||ay&&t.match(/\\/)?[""]:[...ay?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=ay?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=ay?a.split(r):[""];return ay&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:o,pathExt:n,pathExtExe:a}},SY=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:o,pathExt:a,pathExtExe:n}=DY(t,e),u=[],A=h=>new Promise((E,I)=>{if(h===o.length)return e.all&&u.length?E(u):I(vY(t));let v=o[h],x=/^".*"$/.test(v)?v.slice(1,-1):v,C=IY.join(x,t),R=!x&&/^\.[\\\/]/.test(t)?t.slice(0,2)+C:C;E(p(R,h,0))}),p=(h,E,I)=>new Promise((v,x)=>{if(I===a.length)return v(A(E+1));let C=a[I];BY(h+C,{pathExt:n},(R,L)=>{if(!R&&L)if(e.all)u.push(h+C);else return v(h+C);return v(p(h,E,I+1))})});return r?A(0).then(h=>r(null,h),r):A(0)},j_e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:o,pathExtExe:a}=DY(t,e),n=[];for(let u=0;u{"use strict";var xY=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};XR.exports=xY;XR.exports.default=xY});var TY=_((fbt,RY)=>{"use strict";var QY=ve("path"),G_e=bY(),Y_e=kY();function FY(t,e){let r=t.options.env||process.env,o=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let u;try{u=G_e.sync(t.command,{path:r[Y_e({env:r})],pathExt:e?QY.delimiter:void 0})}catch{}finally{n&&process.chdir(o)}return u&&(u=QY.resolve(a?t.options.cwd:"",u)),u}function W_e(t){return FY(t)||FY(t,!0)}RY.exports=W_e});var NY=_((pbt,$R)=>{"use strict";var ZR=/([()\][%!^"`<>&|;, *?])/g;function K_e(t){return t=t.replace(ZR,"^$1"),t}function V_e(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace(ZR,"^$1"),e&&(t=t.replace(ZR,"^$1")),t}$R.exports.command=K_e;$R.exports.argument=V_e});var OY=_((hbt,LY)=>{"use strict";LY.exports=/^#!(.*)/});var UY=_((gbt,MY)=>{"use strict";var J_e=OY();MY.exports=(t="")=>{let e=t.match(J_e);if(!e)return null;let[r,o]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?o:o?`${a} ${o}`:a}});var HY=_((dbt,_Y)=>{"use strict";var eT=ve("fs"),z_e=UY();function X_e(t){let r=Buffer.alloc(150),o;try{o=eT.openSync(t,"r"),eT.readSync(o,r,0,150,0),eT.closeSync(o)}catch{}return z_e(r.toString())}_Y.exports=X_e});var YY=_((mbt,GY)=>{"use strict";var Z_e=ve("path"),qY=TY(),jY=NY(),$_e=HY(),e8e=process.platform==="win32",t8e=/\.(?:com|exe)$/i,r8e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function n8e(t){t.file=qY(t);let e=t.file&&$_e(t.file);return e?(t.args.unshift(t.file),t.command=e,qY(t)):t.file}function i8e(t){if(!e8e)return t;let e=n8e(t),r=!t8e.test(e);if(t.options.forceShell||r){let o=r8e.test(e);t.command=Z_e.normalize(t.command),t.command=jY.command(t.command),t.args=t.args.map(n=>jY.argument(n,o));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function s8e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let o={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?o:i8e(o)}GY.exports=s8e});var VY=_((ybt,KY)=>{"use strict";var tT=process.platform==="win32";function rT(t,e){return Object.assign(new Error(`${e} ${t.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${t.command}`,path:t.command,spawnargs:t.args})}function o8e(t,e){if(!tT)return;let r=t.emit;t.emit=function(o,a){if(o==="exit"){let n=WY(a,e,"spawn");if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function WY(t,e){return tT&&t===1&&!e.file?rT(e.original,"spawn"):null}function a8e(t,e){return tT&&t===1&&!e.file?rT(e.original,"spawnSync"):null}KY.exports={hookChildProcess:o8e,verifyENOENT:WY,verifyENOENTSync:a8e,notFoundError:rT}});var sT=_((Ebt,ly)=>{"use strict";var JY=ve("child_process"),nT=YY(),iT=VY();function zY(t,e,r){let o=nT(t,e,r),a=JY.spawn(o.command,o.args,o.options);return iT.hookChildProcess(a,o),a}function l8e(t,e,r){let o=nT(t,e,r),a=JY.spawnSync(o.command,o.args,o.options);return a.error=a.error||iT.verifyENOENTSync(a.status,o),a}ly.exports=zY;ly.exports.spawn=zY;ly.exports.sync=l8e;ly.exports._parse=nT;ly.exports._enoent=iT});var ZY=_((Cbt,XY)=>{"use strict";function c8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Gg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Gg)}c8e(Gg,Error);Gg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I>",P=Br(">>",!1),y=">&",F=Br(">&",!1),z=">",X=Br(">",!1),Z="<<<",ie=Br("<<<",!1),Pe="<&",Ne=Br("<&",!1),ot="<",dt=Br("<",!1),jt=function(N){return{type:"argument",segments:[].concat(...N)}},$t=function(N){return N},bt="$'",an=Br("$'",!1),Qr="'",mr=Br("'",!1),br=function(N){return[{type:"text",text:N}]},Wr='""',Kn=Br('""',!1),Ns=function(){return{type:"text",text:""}},Ti='"',ps=Br('"',!1),io=function(N){return N},Pi=function(N){return{type:"arithmetic",arithmetic:N,quoted:!0}},Ls=function(N){return{type:"shell",shell:N,quoted:!0}},so=function(N){return{type:"variable",...N,quoted:!0}},cc=function(N){return{type:"text",text:N}},cu=function(N){return{type:"arithmetic",arithmetic:N,quoted:!1}},lp=function(N){return{type:"shell",shell:N,quoted:!1}},cp=function(N){return{type:"variable",...N,quoted:!1}},Os=function(N){return{type:"glob",pattern:N}},Dn=/^[^']/,oo=Cs(["'"],!0,!1),Ms=function(N){return N.join("")},ml=/^[^$"]/,yl=Cs(["$",'"'],!0,!1),ao=`\\ +`,Vn=Br(`\\ +`,!1),On=function(){return""},Ni="\\",Mn=Br("\\",!1),_i=/^[\\$"`]/,tr=Cs(["\\","$",'"',"`"],!1,!1),Oe=function(N){return N},ii="\\a",Ma=Br("\\a",!1),hr=function(){return"a"},uc="\\b",uu=Br("\\b",!1),Ac=function(){return"\b"},El=/^[Ee]/,DA=Cs(["E","e"],!1,!1),Au=function(){return"\x1B"},Ce="\\f",Rt=Br("\\f",!1),fc=function(){return"\f"},Hi="\\n",fu=Br("\\n",!1),Yt=function(){return` +`},Cl="\\r",SA=Br("\\r",!1),up=function(){return"\r"},pc="\\t",PA=Br("\\t",!1),Qn=function(){return" "},hi="\\v",hc=Br("\\v",!1),bA=function(){return"\v"},sa=/^[\\'"?]/,Li=Cs(["\\","'",'"',"?"],!1,!1),_o=function(N){return String.fromCharCode(parseInt(N,16))},Ze="\\x",lo=Br("\\x",!1),gc="\\u",pu=Br("\\u",!1),qi="\\U",hu=Br("\\U",!1),xA=function(N){return String.fromCodePoint(parseInt(N,16))},Ua=/^[0-7]/,dc=Cs([["0","7"]],!1,!1),hs=/^[0-9a-fA-f]/,_t=Cs([["0","9"],["a","f"],["A","f"]],!1,!1),Fn=ug(),Ci="{}",oa=Br("{}",!1),co=function(){return"{}"},Us="-",aa=Br("-",!1),la="+",Ho=Br("+",!1),wi=".",gs=Br(".",!1),ds=function(N,K,re){return{type:"number",value:(N==="-"?-1:1)*parseFloat(K.join("")+"."+re.join(""))}},ms=function(N,K){return{type:"number",value:(N==="-"?-1:1)*parseInt(K.join(""))}},_s=function(N){return{type:"variable",...N}},Un=function(N){return{type:"variable",name:N}},Sn=function(N){return N},ys="*",We=Br("*",!1),tt="/",It=Br("/",!1),nr=function(N,K,re){return{type:K==="*"?"multiplication":"division",right:re}},$=function(N,K){return K.reduce((re,pe)=>({left:re,...pe}),N)},ye=function(N,K,re){return{type:K==="+"?"addition":"subtraction",right:re}},Le="$((",pt=Br("$((",!1),ht="))",Tt=Br("))",!1),er=function(N){return N},$r="$(",ji=Br("$(",!1),es=function(N){return N},bi="${",qo=Br("${",!1),kA=":-",QA=Br(":-",!1),Ap=function(N,K){return{name:N,defaultValue:K}},ig=":-}",gu=Br(":-}",!1),sg=function(N){return{name:N,defaultValue:[]}},du=":+",uo=Br(":+",!1),FA=function(N,K){return{name:N,alternativeValue:K}},mc=":+}",ca=Br(":+}",!1),og=function(N){return{name:N,alternativeValue:[]}},yc=function(N){return{name:N}},Pm="$",ag=Br("$",!1),$n=function(N){return e.isGlobPattern(N)},fp=function(N){return N},lg=/^[a-zA-Z0-9_]/,RA=Cs([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Hs=function(){return cg()},mu=/^[$@*?#a-zA-Z0-9_\-]/,Ha=Cs(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),Gi=/^[()}<>$|&; \t"']/,ua=Cs(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),yu=/^[<>&; \t"']/,Es=Cs(["<",">","&",";"," "," ",'"',"'"],!1,!1),Ec=/^[ \t]/,Cc=Cs([" "," "],!1,!1),G=0,Dt=0,wl=[{line:1,column:1}],xi=0,wc=[],ct=0,Eu;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function cg(){return t.substring(Dt,G)}function yw(){return Ic(Dt,G)}function TA(N,K){throw K=K!==void 0?K:Ic(Dt,G),pg([fg(N)],t.substring(Dt,G),K)}function pp(N,K){throw K=K!==void 0?K:Ic(Dt,G),bm(N,K)}function Br(N,K){return{type:"literal",text:N,ignoreCase:K}}function Cs(N,K,re){return{type:"class",parts:N,inverted:K,ignoreCase:re}}function ug(){return{type:"any"}}function Ag(){return{type:"end"}}function fg(N){return{type:"other",description:N}}function hp(N){var K=wl[N],re;if(K)return K;for(re=N-1;!wl[re];)re--;for(K=wl[re],K={line:K.line,column:K.column};rexi&&(xi=G,wc=[]),wc.push(N))}function bm(N,K){return new Gg(N,null,null,K)}function pg(N,K,re){return new Gg(Gg.buildMessage(N,K),N,K,re)}function hg(){var N,K,re;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(re=Cu(),re===r&&(re=null),re!==r?(Dt=N,K=n(re),N=K):(G=N,N=r)):(G=N,N=r),N}function Cu(){var N,K,re,pe,ze;if(N=G,K=wu(),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();re!==r?(pe=gg(),pe!==r?(ze=xm(),ze===r&&(ze=null),ze!==r?(Dt=N,K=u(K,pe,ze),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;if(N===r)if(N=G,K=wu(),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();re!==r?(pe=gg(),pe===r&&(pe=null),pe!==r?(Dt=N,K=A(K,pe),N=K):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function xm(){var N,K,re,pe,ze;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=Cu(),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();pe!==r?(Dt=N,K=p(re),N=K):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function gg(){var N;return t.charCodeAt(G)===59?(N=h,G++):(N=r,ct===0&&Ct(E)),N===r&&(t.charCodeAt(G)===38?(N=I,G++):(N=r,ct===0&&Ct(v))),N}function wu(){var N,K,re;return N=G,K=Aa(),K!==r?(re=Ew(),re===r&&(re=null),re!==r?(Dt=N,K=x(K,re),N=K):(G=N,N=r)):(G=N,N=r),N}function Ew(){var N,K,re,pe,ze,mt,fr;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=km(),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r)if(ze=wu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,K=C(re,ze),N=K):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function km(){var N;return t.substr(G,2)===R?(N=R,G+=2):(N=r,ct===0&&Ct(L)),N===r&&(t.substr(G,2)===U?(N=U,G+=2):(N=r,ct===0&&Ct(J))),N}function Aa(){var N,K,re;return N=G,K=dg(),K!==r?(re=Bc(),re===r&&(re=null),re!==r?(Dt=N,K=te(K,re),N=K):(G=N,N=r)):(G=N,N=r),N}function Bc(){var N,K,re,pe,ze,mt,fr;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=Il(),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r)if(ze=Aa(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,K=ae(re,ze),N=K):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function Il(){var N;return t.substr(G,2)===fe?(N=fe,G+=2):(N=r,ct===0&&Ct(ce)),N===r&&(t.charCodeAt(G)===124?(N=me,G++):(N=r,ct===0&&Ct(he))),N}function Iu(){var N,K,re,pe,ze,mt;if(N=G,K=Cg(),K!==r)if(t.charCodeAt(G)===61?(re=Be,G++):(re=r,ct===0&&Ct(we)),re!==r)if(pe=jo(),pe!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(Dt=N,K=g(K,pe),N=K):(G=N,N=r)}else G=N,N=r;else G=N,N=r;else G=N,N=r;if(N===r)if(N=G,K=Cg(),K!==r)if(t.charCodeAt(G)===61?(re=Be,G++):(re=r,ct===0&&Ct(we)),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();pe!==r?(Dt=N,K=Ee(K),N=K):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function dg(){var N,K,re,pe,ze,mt,fr,Cr,yn,oi,Oi;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(t.charCodeAt(G)===40?(re=Se,G++):(re=r,ct===0&&Ct(le)),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===41?(fr=ne,G++):(fr=r,ct===0&&Ct(ee)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=qa();oi!==r;)yn.push(oi),oi=qa();if(yn!==r){for(oi=[],Oi=Qt();Oi!==r;)oi.push(Oi),Oi=Qt();oi!==r?(Dt=N,K=Ie(ze,yn),N=K):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(t.charCodeAt(G)===123?(re=Fe,G++):(re=r,ct===0&&Ct(At)),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===125?(fr=H,G++):(fr=r,ct===0&&Ct(at)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=qa();oi!==r;)yn.push(oi),oi=qa();if(yn!==r){for(oi=[],Oi=Qt();Oi!==r;)oi.push(Oi),Oi=Qt();oi!==r?(Dt=N,K=Re(ze,yn),N=K):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){for(re=[],pe=Iu();pe!==r;)re.push(pe),pe=Iu();if(re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r){if(ze=[],mt=gp(),mt!==r)for(;mt!==r;)ze.push(mt),mt=gp();else ze=r;if(ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,K=ke(re,ze),N=K):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r}else G=N,N=r;if(N===r){for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){if(re=[],pe=Iu(),pe!==r)for(;pe!==r;)re.push(pe),pe=Iu();else re=r;if(re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();pe!==r?(Dt=N,K=xe(re),N=K):(G=N,N=r)}else G=N,N=r}else G=N,N=r}}}return N}function NA(){var N,K,re,pe,ze;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){if(re=[],pe=dp(),pe!==r)for(;pe!==r;)re.push(pe),pe=dp();else re=r;if(re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();pe!==r?(Dt=N,K=He(re),N=K):(G=N,N=r)}else G=N,N=r}else G=N,N=r;return N}function gp(){var N,K,re;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r?(re=qa(),re!==r?(Dt=N,K=Te(re),N=K):(G=N,N=r)):(G=N,N=r),N===r){for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();K!==r?(re=dp(),re!==r?(Dt=N,K=Te(re),N=K):(G=N,N=r)):(G=N,N=r)}return N}function qa(){var N,K,re,pe,ze;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(Je.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(qe)),re===r&&(re=null),re!==r?(pe=mg(),pe!==r?(ze=dp(),ze!==r?(Dt=N,K=b(re,pe,ze),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function mg(){var N;return t.substr(G,2)===w?(N=w,G+=2):(N=r,ct===0&&Ct(P)),N===r&&(t.substr(G,2)===y?(N=y,G+=2):(N=r,ct===0&&Ct(F)),N===r&&(t.charCodeAt(G)===62?(N=z,G++):(N=r,ct===0&&Ct(X)),N===r&&(t.substr(G,3)===Z?(N=Z,G+=3):(N=r,ct===0&&Ct(ie)),N===r&&(t.substr(G,2)===Pe?(N=Pe,G+=2):(N=r,ct===0&&Ct(Ne)),N===r&&(t.charCodeAt(G)===60?(N=ot,G++):(N=r,ct===0&&Ct(dt))))))),N}function dp(){var N,K,re;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(re=jo(),re!==r?(Dt=N,K=Te(re),N=K):(G=N,N=r)):(G=N,N=r),N}function jo(){var N,K,re;if(N=G,K=[],re=ws(),re!==r)for(;re!==r;)K.push(re),re=ws();else K=r;return K!==r&&(Dt=N,K=jt(K)),N=K,N}function ws(){var N,K;return N=G,K=Ii(),K!==r&&(Dt=N,K=$t(K)),N=K,N===r&&(N=G,K=Qm(),K!==r&&(Dt=N,K=$t(K)),N=K,N===r&&(N=G,K=Fm(),K!==r&&(Dt=N,K=$t(K)),N=K,N===r&&(N=G,K=Go(),K!==r&&(Dt=N,K=$t(K)),N=K))),N}function Ii(){var N,K,re,pe;return N=G,t.substr(G,2)===bt?(K=bt,G+=2):(K=r,ct===0&&Ct(an)),K!==r?(re=ln(),re!==r?(t.charCodeAt(G)===39?(pe=Qr,G++):(pe=r,ct===0&&Ct(mr)),pe!==r?(Dt=N,K=br(re),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Qm(){var N,K,re,pe;return N=G,t.charCodeAt(G)===39?(K=Qr,G++):(K=r,ct===0&&Ct(mr)),K!==r?(re=yp(),re!==r?(t.charCodeAt(G)===39?(pe=Qr,G++):(pe=r,ct===0&&Ct(mr)),pe!==r?(Dt=N,K=br(re),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Fm(){var N,K,re,pe;if(N=G,t.substr(G,2)===Wr?(K=Wr,G+=2):(K=r,ct===0&&Ct(Kn)),K!==r&&(Dt=N,K=Ns()),N=K,N===r)if(N=G,t.charCodeAt(G)===34?(K=Ti,G++):(K=r,ct===0&&Ct(ps)),K!==r){for(re=[],pe=LA();pe!==r;)re.push(pe),pe=LA();re!==r?(t.charCodeAt(G)===34?(pe=Ti,G++):(pe=r,ct===0&&Ct(ps)),pe!==r?(Dt=N,K=io(re),N=K):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function Go(){var N,K,re;if(N=G,K=[],re=mp(),re!==r)for(;re!==r;)K.push(re),re=mp();else K=r;return K!==r&&(Dt=N,K=io(K)),N=K,N}function LA(){var N,K;return N=G,K=Gr(),K!==r&&(Dt=N,K=Pi(K)),N=K,N===r&&(N=G,K=Ep(),K!==r&&(Dt=N,K=Ls(K)),N=K,N===r&&(N=G,K=Dc(),K!==r&&(Dt=N,K=so(K)),N=K,N===r&&(N=G,K=yg(),K!==r&&(Dt=N,K=cc(K)),N=K))),N}function mp(){var N,K;return N=G,K=Gr(),K!==r&&(Dt=N,K=cu(K)),N=K,N===r&&(N=G,K=Ep(),K!==r&&(Dt=N,K=lp(K)),N=K,N===r&&(N=G,K=Dc(),K!==r&&(Dt=N,K=cp(K)),N=K,N===r&&(N=G,K=Cw(),K!==r&&(Dt=N,K=Os(K)),N=K,N===r&&(N=G,K=pa(),K!==r&&(Dt=N,K=cc(K)),N=K)))),N}function yp(){var N,K,re;for(N=G,K=[],Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));re!==r;)K.push(re),Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function yg(){var N,K,re;if(N=G,K=[],re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl))),re!==r)for(;re!==r;)K.push(re),re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl)));else K=r;return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function fa(){var N,K,re;return N=G,t.substr(G,2)===ao?(K=ao,G+=2):(K=r,ct===0&&Ct(Vn)),K!==r&&(Dt=N,K=On()),N=K,N===r&&(N=G,t.charCodeAt(G)===92?(K=Ni,G++):(K=r,ct===0&&Ct(Mn)),K!==r?(_i.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(tr)),re!==r?(Dt=N,K=Oe(re),N=K):(G=N,N=r)):(G=N,N=r)),N}function ln(){var N,K,re;for(N=G,K=[],re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));re!==r;)K.push(re),re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function Ao(){var N,K,re;return N=G,t.substr(G,2)===ii?(K=ii,G+=2):(K=r,ct===0&&Ct(Ma)),K!==r&&(Dt=N,K=hr()),N=K,N===r&&(N=G,t.substr(G,2)===uc?(K=uc,G+=2):(K=r,ct===0&&Ct(uu)),K!==r&&(Dt=N,K=Ac()),N=K,N===r&&(N=G,t.charCodeAt(G)===92?(K=Ni,G++):(K=r,ct===0&&Ct(Mn)),K!==r?(El.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(DA)),re!==r?(Dt=N,K=Au(),N=K):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ce?(K=Ce,G+=2):(K=r,ct===0&&Ct(Rt)),K!==r&&(Dt=N,K=fc()),N=K,N===r&&(N=G,t.substr(G,2)===Hi?(K=Hi,G+=2):(K=r,ct===0&&Ct(fu)),K!==r&&(Dt=N,K=Yt()),N=K,N===r&&(N=G,t.substr(G,2)===Cl?(K=Cl,G+=2):(K=r,ct===0&&Ct(SA)),K!==r&&(Dt=N,K=up()),N=K,N===r&&(N=G,t.substr(G,2)===pc?(K=pc,G+=2):(K=r,ct===0&&Ct(PA)),K!==r&&(Dt=N,K=Qn()),N=K,N===r&&(N=G,t.substr(G,2)===hi?(K=hi,G+=2):(K=r,ct===0&&Ct(hc)),K!==r&&(Dt=N,K=bA()),N=K,N===r&&(N=G,t.charCodeAt(G)===92?(K=Ni,G++):(K=r,ct===0&&Ct(Mn)),K!==r?(sa.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Li)),re!==r?(Dt=N,K=Oe(re),N=K):(G=N,N=r)):(G=N,N=r),N===r&&(N=OA()))))))))),N}function OA(){var N,K,re,pe,ze,mt,fr,Cr,yn,oi,Oi,Ig;return N=G,t.charCodeAt(G)===92?(K=Ni,G++):(K=r,ct===0&&Ct(Mn)),K!==r?(re=ja(),re!==r?(Dt=N,K=_o(re),N=K):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ze?(K=Ze,G+=2):(K=r,ct===0&&Ct(lo)),K!==r?(re=G,pe=G,ze=ja(),ze!==r?(mt=si(),mt!==r?(ze=[ze,mt],pe=ze):(G=pe,pe=r)):(G=pe,pe=r),pe===r&&(pe=ja()),pe!==r?re=t.substring(re,G):re=pe,re!==r?(Dt=N,K=_o(re),N=K):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===gc?(K=gc,G+=2):(K=r,ct===0&&Ct(pu)),K!==r?(re=G,pe=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(ze=[ze,mt,fr,Cr],pe=ze):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r),pe!==r?re=t.substring(re,G):re=pe,re!==r?(Dt=N,K=_o(re),N=K):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===qi?(K=qi,G+=2):(K=r,ct===0&&Ct(hu)),K!==r?(re=G,pe=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(yn=si(),yn!==r?(oi=si(),oi!==r?(Oi=si(),Oi!==r?(Ig=si(),Ig!==r?(ze=[ze,mt,fr,Cr,yn,oi,Oi,Ig],pe=ze):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r),pe!==r?re=t.substring(re,G):re=pe,re!==r?(Dt=N,K=xA(re),N=K):(G=N,N=r)):(G=N,N=r)))),N}function ja(){var N;return Ua.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(dc)),N}function si(){var N;return hs.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(_t)),N}function pa(){var N,K,re,pe,ze;if(N=G,K=[],re=G,t.charCodeAt(G)===92?(pe=Ni,G++):(pe=r,ct===0&&Ct(Mn)),pe!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(pe=Ci,G+=2):(pe=r,ct===0&&Ct(oa)),pe!==r&&(Dt=re,pe=co()),re=pe,re===r&&(re=G,pe=G,ct++,ze=Rm(),ct--,ze===r?pe=void 0:(G=pe,pe=r),pe!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(G=re,re=r)):(G=re,re=r))),re!==r)for(;re!==r;)K.push(re),re=G,t.charCodeAt(G)===92?(pe=Ni,G++):(pe=r,ct===0&&Ct(Mn)),pe!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(pe=Ci,G+=2):(pe=r,ct===0&&Ct(oa)),pe!==r&&(Dt=re,pe=co()),re=pe,re===r&&(re=G,pe=G,ct++,ze=Rm(),ct--,ze===r?pe=void 0:(G=pe,pe=r),pe!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(G=re,re=r)):(G=re,re=r)));else K=r;return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function vc(){var N,K,re,pe,ze,mt;if(N=G,t.charCodeAt(G)===45?(K=Us,G++):(K=r,ct===0&&Ct(aa)),K===r&&(t.charCodeAt(G)===43?(K=la,G++):(K=r,ct===0&&Ct(Ho))),K===r&&(K=null),K!==r){if(re=[],Je.test(t.charAt(G))?(pe=t.charAt(G),G++):(pe=r,ct===0&&Ct(qe)),pe!==r)for(;pe!==r;)re.push(pe),Je.test(t.charAt(G))?(pe=t.charAt(G),G++):(pe=r,ct===0&&Ct(qe));else re=r;if(re!==r)if(t.charCodeAt(G)===46?(pe=wi,G++):(pe=r,ct===0&&Ct(gs)),pe!==r){if(ze=[],Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(qe)),mt!==r)for(;mt!==r;)ze.push(mt),Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(qe));else ze=r;ze!==r?(Dt=N,K=ds(K,re,ze),N=K):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;if(N===r){if(N=G,t.charCodeAt(G)===45?(K=Us,G++):(K=r,ct===0&&Ct(aa)),K===r&&(t.charCodeAt(G)===43?(K=la,G++):(K=r,ct===0&&Ct(Ho))),K===r&&(K=null),K!==r){if(re=[],Je.test(t.charAt(G))?(pe=t.charAt(G),G++):(pe=r,ct===0&&Ct(qe)),pe!==r)for(;pe!==r;)re.push(pe),Je.test(t.charAt(G))?(pe=t.charAt(G),G++):(pe=r,ct===0&&Ct(qe));else re=r;re!==r?(Dt=N,K=ms(K,re),N=K):(G=N,N=r)}else G=N,N=r;if(N===r&&(N=G,K=Dc(),K!==r&&(Dt=N,K=_s(K)),N=K,N===r&&(N=G,K=Ga(),K!==r&&(Dt=N,K=Un(K)),N=K,N===r)))if(N=G,t.charCodeAt(G)===40?(K=Se,G++):(K=r,ct===0&&Ct(le)),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();if(re!==r)if(pe=ts(),pe!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.charCodeAt(G)===41?(mt=ne,G++):(mt=r,ct===0&&Ct(ee)),mt!==r?(Dt=N,K=Sn(pe),N=K):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r}return N}function Bl(){var N,K,re,pe,ze,mt,fr,Cr;if(N=G,K=vc(),K!==r){for(re=[],pe=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=pe,ze=nr(K,mt,Cr),pe=ze):(G=pe,pe=r)):(G=pe,pe=r)}else G=pe,pe=r;else G=pe,pe=r;for(;pe!==r;){for(re.push(pe),pe=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=pe,ze=nr(K,mt,Cr),pe=ze):(G=pe,pe=r)):(G=pe,pe=r)}else G=pe,pe=r;else G=pe,pe=r}re!==r?(Dt=N,K=$(K,re),N=K):(G=N,N=r)}else G=N,N=r;return N}function ts(){var N,K,re,pe,ze,mt,fr,Cr;if(N=G,K=Bl(),K!==r){for(re=[],pe=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=pe,ze=ye(K,mt,Cr),pe=ze):(G=pe,pe=r)):(G=pe,pe=r)}else G=pe,pe=r;else G=pe,pe=r;for(;pe!==r;){for(re.push(pe),pe=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=pe,ze=ye(K,mt,Cr),pe=ze):(G=pe,pe=r)):(G=pe,pe=r)}else G=pe,pe=r;else G=pe,pe=r}re!==r?(Dt=N,K=$(K,re),N=K):(G=N,N=r)}else G=N,N=r;return N}function Gr(){var N,K,re,pe,ze,mt;if(N=G,t.substr(G,3)===Le?(K=Le,G+=3):(K=r,ct===0&&Ct(pt)),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();if(re!==r)if(pe=ts(),pe!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.substr(G,2)===ht?(mt=ht,G+=2):(mt=r,ct===0&&Ct(Tt)),mt!==r?(Dt=N,K=er(pe),N=K):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;return N}function Ep(){var N,K,re,pe;return N=G,t.substr(G,2)===$r?(K=$r,G+=2):(K=r,ct===0&&Ct(ji)),K!==r?(re=Cu(),re!==r?(t.charCodeAt(G)===41?(pe=ne,G++):(pe=r,ct===0&&Ct(ee)),pe!==r?(Dt=N,K=es(re),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Dc(){var N,K,re,pe,ze,mt;return N=G,t.substr(G,2)===bi?(K=bi,G+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ga(),re!==r?(t.substr(G,2)===kA?(pe=kA,G+=2):(pe=r,ct===0&&Ct(QA)),pe!==r?(ze=NA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(at)),mt!==r?(Dt=N,K=Ap(re,ze),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===bi?(K=bi,G+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ga(),re!==r?(t.substr(G,3)===ig?(pe=ig,G+=3):(pe=r,ct===0&&Ct(gu)),pe!==r?(Dt=N,K=sg(re),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===bi?(K=bi,G+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ga(),re!==r?(t.substr(G,2)===du?(pe=du,G+=2):(pe=r,ct===0&&Ct(uo)),pe!==r?(ze=NA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(at)),mt!==r?(Dt=N,K=FA(re,ze),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===bi?(K=bi,G+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ga(),re!==r?(t.substr(G,3)===mc?(pe=mc,G+=3):(pe=r,ct===0&&Ct(ca)),pe!==r?(Dt=N,K=og(re),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===bi?(K=bi,G+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ga(),re!==r?(t.charCodeAt(G)===125?(pe=H,G++):(pe=r,ct===0&&Ct(at)),pe!==r?(Dt=N,K=yc(re),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.charCodeAt(G)===36?(K=Pm,G++):(K=r,ct===0&&Ct(ag)),K!==r?(re=Ga(),re!==r?(Dt=N,K=yc(re),N=K):(G=N,N=r)):(G=N,N=r)))))),N}function Cw(){var N,K,re;return N=G,K=Eg(),K!==r?(Dt=G,re=$n(K),re?re=void 0:re=r,re!==r?(Dt=N,K=fp(K),N=K):(G=N,N=r)):(G=N,N=r),N}function Eg(){var N,K,re,pe,ze;if(N=G,K=[],re=G,pe=G,ct++,ze=wg(),ct--,ze===r?pe=void 0:(G=pe,pe=r),pe!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(G=re,re=r)):(G=re,re=r),re!==r)for(;re!==r;)K.push(re),re=G,pe=G,ct++,ze=wg(),ct--,ze===r?pe=void 0:(G=pe,pe=r),pe!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(G=re,re=r)):(G=re,re=r);else K=r;return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function Cg(){var N,K,re;if(N=G,K=[],lg.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(RA)),re!==r)for(;re!==r;)K.push(re),lg.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(RA));else K=r;return K!==r&&(Dt=N,K=Hs()),N=K,N}function Ga(){var N,K,re;if(N=G,K=[],mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha)),re!==r)for(;re!==r;)K.push(re),mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha));else K=r;return K!==r&&(Dt=N,K=Hs()),N=K,N}function Rm(){var N;return Gi.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(ua)),N}function wg(){var N;return yu.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(Es)),N}function Qt(){var N,K;if(N=[],Ec.test(t.charAt(G))?(K=t.charAt(G),G++):(K=r,ct===0&&Ct(Cc)),K!==r)for(;K!==r;)N.push(K),Ec.test(t.charAt(G))?(K=t.charAt(G),G++):(K=r,ct===0&&Ct(Cc));else N=r;return N}if(Eu=a(),Eu!==r&&G===t.length)return Eu;throw Eu!==r&&G!1}){try{return(0,$Y.parse)(t,e)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function cy(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:o},a)=>`${LD(r)}${o===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function LD(t){return`${uy(t.chain)}${t.then?` ${oT(t.then)}`:""}`}function oT(t){return`${t.type} ${LD(t.line)}`}function uy(t){return`${lT(t)}${t.then?` ${aT(t.then)}`:""}`}function aT(t){return`${t.type} ${uy(t.chain)}`}function lT(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>TD(e)).join(" ")} `:""}${t.args.map(e=>cT(e)).join(" ")}`;case"subshell":return`(${cy(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Jw(e)).join(" ")}`:""}`;case"group":return`{ ${cy(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Jw(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>TD(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function TD(t){return`${t.name}=${t.args[0]?Yg(t.args[0]):""}`}function cT(t){switch(t.type){case"redirection":return Jw(t);case"argument":return Yg(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Jw(t){return`${t.subtype} ${t.args.map(e=>Yg(e)).join(" ")}`}function Yg(t){return t.segments.map(e=>uT(e)).join("")}function uT(t){let e=(o,a)=>a?`"${o}"`:o,r=o=>o===""?"''":o.match(/[()}<>$|&;"'\n\t ]/)?o.match(/['\t\p{C}]/u)?o.match(/'/)?`"${o.replace(/["$\t\p{C}]/u,f8e)}"`:`$'${o.replace(/[\t\p{C}]/u,tW)}'`:`'${o}'`:o;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`\${${cy(t.shell)}}`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(o=>Yg(o)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(o=>Yg(o)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${OD(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function OD(t){let e=a=>{switch(a){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,o=a=>r(OD(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${o(t.left)} ${e(t.type)} ${o(t.right)}`}}var $Y,eW,A8e,tW,f8e,rW=Et(()=>{$Y=$e(ZY());eW=new Map([["\f","\\f"],[` +`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),A8e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(eW,([t,e])=>[t,`"$'${e}'"`])]),tW=t=>eW.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,f8e=t=>A8e.get(t)??`"$'${tW(t)}'"`});var iW=_((Tbt,nW)=>{"use strict";function p8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Wg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Wg)}p8e(Wg,Error);Wg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;Ife&&(fe=J,ce=[]),ce.push(qe))}function at(qe,b){return new Wg(qe,null,null,b)}function Re(qe,b,w){return new Wg(Wg.buildMessage(qe,b),qe,b,w)}function ke(){var qe,b,w,P;return qe=J,b=xe(),b!==r?(t.charCodeAt(J)===47?(w=n,J++):(w=r,me===0&&H(u)),w!==r?(P=xe(),P!==r?(te=qe,b=A(b,P),qe=b):(J=qe,qe=r)):(J=qe,qe=r)):(J=qe,qe=r),qe===r&&(qe=J,b=xe(),b!==r&&(te=qe,b=p(b)),qe=b),qe}function xe(){var qe,b,w,P;return qe=J,b=He(),b!==r?(t.charCodeAt(J)===64?(w=h,J++):(w=r,me===0&&H(E)),w!==r?(P=Je(),P!==r?(te=qe,b=I(b,P),qe=b):(J=qe,qe=r)):(J=qe,qe=r)):(J=qe,qe=r),qe===r&&(qe=J,b=He(),b!==r&&(te=qe,b=v(b)),qe=b),qe}function He(){var qe,b,w,P,y;return qe=J,t.charCodeAt(J)===64?(b=h,J++):(b=r,me===0&&H(E)),b!==r?(w=Te(),w!==r?(t.charCodeAt(J)===47?(P=n,J++):(P=r,me===0&&H(u)),P!==r?(y=Te(),y!==r?(te=qe,b=x(),qe=b):(J=qe,qe=r)):(J=qe,qe=r)):(J=qe,qe=r)):(J=qe,qe=r),qe===r&&(qe=J,b=Te(),b!==r&&(te=qe,b=x()),qe=b),qe}function Te(){var qe,b,w;if(qe=J,b=[],C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,me===0&&H(R)),w!==r)for(;w!==r;)b.push(w),C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,me===0&&H(R));else b=r;return b!==r&&(te=qe,b=x()),qe=b,qe}function Je(){var qe,b,w;if(qe=J,b=[],L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,me===0&&H(U)),w!==r)for(;w!==r;)b.push(w),L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,me===0&&H(U));else b=r;return b!==r&&(te=qe,b=x()),qe=b,qe}if(he=a(),he!==r&&J===t.length)return he;throw he!==r&&J{sW=$e(iW())});var Vg=_((Lbt,Kg)=>{"use strict";function aW(t){return typeof t>"u"||t===null}function g8e(t){return typeof t=="object"&&t!==null}function d8e(t){return Array.isArray(t)?t:aW(t)?[]:[t]}function m8e(t,e){var r,o,a,n;if(e)for(n=Object.keys(e),r=0,o=n.length;r{"use strict";function zw(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}zw.prototype=Object.create(Error.prototype);zw.prototype.constructor=zw;zw.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};lW.exports=zw});var AW=_((Mbt,uW)=>{"use strict";var cW=Vg();function AT(t,e,r,o,a){this.name=t,this.buffer=e,this.position=r,this.line=o,this.column=a}AT.prototype.getSnippet=function(e,r){var o,a,n,u,A;if(!this.buffer)return null;for(e=e||4,r=r||75,o="",a=this.position;a>0&&`\0\r \x85\u2028\u2029`.indexOf(this.buffer.charAt(a-1))===-1;)if(a-=1,this.position-a>r/2-1){o=" ... ",a+=5;break}for(n="",u=this.position;ur/2-1){n=" ... ",u-=5;break}return A=this.buffer.slice(a,u),AW.repeat(" ",e)+o+A+n+` -`+AW.repeat(" ",e+this.position-a+o.length)+"^"};pR.prototype.toString=function(e){var r,o="";return this.name&&(o+='in "'+this.name+'" '),o+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(o+=`: -`+r)),o};fW.exports=pR});var os=_((_xt,gW)=>{"use strict";var hW=uy(),D8e=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],P8e=["scalar","sequence","mapping"];function S8e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(o){e[String(o)]=r})}),e}function x8e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(D8e.indexOf(r)===-1)throw new hW('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=S8e(e.styleAliases||null),P8e.indexOf(this.kind)===-1)throw new hW('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}gW.exports=x8e});var Kg=_((Hxt,mW)=>{"use strict";var dW=Vg(),HD=uy(),b8e=os();function hR(t,e,r){var o=[];return t.include.forEach(function(a){r=hR(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,u){n.tag===a.tag&&n.kind===a.kind&&o.push(u)}),r.push(a)}),r.filter(function(a,n){return o.indexOf(n)===-1})}function k8e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function o(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var Q8e=os();yW.exports=new Q8e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var wW=_((qxt,CW)=>{"use strict";var F8e=os();CW.exports=new F8e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var BW=_((Gxt,IW)=>{"use strict";var T8e=os();IW.exports=new T8e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var jD=_((Yxt,vW)=>{"use strict";var R8e=Kg();vW.exports=new R8e({explicit:[EW(),wW(),BW()]})});var PW=_((Wxt,DW)=>{"use strict";var N8e=os();function L8e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function M8e(){return null}function O8e(t){return t===null}DW.exports=new N8e("tag:yaml.org,2002:null",{kind:"scalar",resolve:L8e,construct:M8e,predicate:O8e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var xW=_((Vxt,SW)=>{"use strict";var U8e=os();function _8e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function H8e(t){return t==="true"||t==="True"||t==="TRUE"}function j8e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}SW.exports=new U8e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:_8e,construct:H8e,predicate:j8e,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})});var kW=_((Kxt,bW)=>{"use strict";var q8e=Vg(),G8e=os();function Y8e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function W8e(t){return 48<=t&&t<=55}function V8e(t){return 48<=t&&t<=57}function K8e(t){if(t===null)return!1;var e=t.length,r=0,o=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var TW=_((Jxt,FW)=>{"use strict";var QW=Vg(),X8e=os(),Z8e=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function $8e(t){return!(t===null||!Z8e.test(t)||t[t.length-1]==="_")}function eHe(t){var e,r,o,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(n){a.unshift(parseFloat(n,10))}),e=0,o=1,a.forEach(function(n){e+=n*o,o*=60}),r*e):r*parseFloat(e,10)}var tHe=/^[-+]?[0-9]+e/;function rHe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(QW.isNegativeZero(t))return"-0.0";return r=t.toString(10),tHe.test(r)?r.replace("e",".e"):r}function nHe(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||QW.isNegativeZero(t))}FW.exports=new X8e("tag:yaml.org,2002:float",{kind:"scalar",resolve:$8e,construct:eHe,predicate:nHe,represent:rHe,defaultStyle:"lowercase"})});var gR=_((zxt,RW)=>{"use strict";var iHe=Kg();RW.exports=new iHe({include:[jD()],implicit:[PW(),xW(),kW(),TW()]})});var dR=_((Xxt,NW)=>{"use strict";var sHe=Kg();NW.exports=new sHe({include:[gR()]})});var UW=_((Zxt,OW)=>{"use strict";var oHe=os(),LW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),MW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function aHe(t){return t===null?!1:LW.exec(t)!==null||MW.exec(t)!==null}function lHe(t){var e,r,o,a,n,u,A,p=0,h=null,E,I,v;if(e=LW.exec(t),e===null&&(e=MW.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],o=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,o,a));if(n=+e[4],u=+e[5],A=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],I=+(e[11]||0),h=(E*60+I)*6e4,e[9]==="-"&&(h=-h)),v=new Date(Date.UTC(r,o,a,n,u,A,p)),h&&v.setTime(v.getTime()-h),v}function cHe(t){return t.toISOString()}OW.exports=new oHe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:aHe,construct:lHe,instanceOf:Date,represent:cHe})});var HW=_(($xt,_W)=>{"use strict";var uHe=os();function AHe(t){return t==="<<"||t===null}_W.exports=new uHe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:AHe})});var GW=_((ebt,qW)=>{"use strict";var Jg;try{jW=Be,Jg=jW("buffer").Buffer}catch{}var jW,fHe=os(),mR=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function pHe(t){if(t===null)return!1;var e,r,o=0,a=t.length,n=mR;for(r=0;r64)){if(e<0)return!1;o+=6}return o%8===0}function hHe(t){var e,r,o=t.replace(/[\r\n=]/g,""),a=o.length,n=mR,u=0,A=[];for(e=0;e>16&255),A.push(u>>8&255),A.push(u&255)),u=u<<6|n.indexOf(o.charAt(e));return r=a%4*6,r===0?(A.push(u>>16&255),A.push(u>>8&255),A.push(u&255)):r===18?(A.push(u>>10&255),A.push(u>>2&255)):r===12&&A.push(u>>4&255),Jg?Jg.from?Jg.from(A):new Jg(A):A}function gHe(t){var e="",r=0,o,a,n=t.length,u=mR;for(o=0;o>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]),r=(r<<8)+t[o];return a=n%3,a===0?(e+=u[r>>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]):a===2?(e+=u[r>>10&63],e+=u[r>>4&63],e+=u[r<<2&63],e+=u[64]):a===1&&(e+=u[r>>2&63],e+=u[r<<4&63],e+=u[64],e+=u[64]),e}function dHe(t){return Jg&&Jg.isBuffer(t)}qW.exports=new fHe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:pHe,construct:hHe,predicate:dHe,represent:gHe})});var WW=_((rbt,YW)=>{"use strict";var mHe=os(),yHe=Object.prototype.hasOwnProperty,EHe=Object.prototype.toString;function CHe(t){if(t===null)return!0;var e=[],r,o,a,n,u,A=t;for(r=0,o=A.length;r{"use strict";var IHe=os(),BHe=Object.prototype.toString;function vHe(t){if(t===null)return!0;var e,r,o,a,n,u=t;for(n=new Array(u.length),e=0,r=u.length;e{"use strict";var PHe=os(),SHe=Object.prototype.hasOwnProperty;function xHe(t){if(t===null)return!0;var e,r=t;for(e in r)if(SHe.call(r,e)&&r[e]!==null)return!1;return!0}function bHe(t){return t!==null?t:{}}JW.exports=new PHe("tag:yaml.org,2002:set",{kind:"mapping",resolve:xHe,construct:bHe})});var fy=_((sbt,XW)=>{"use strict";var kHe=Kg();XW.exports=new kHe({include:[dR()],implicit:[UW(),HW()],explicit:[GW(),WW(),KW(),zW()]})});var $W=_((obt,ZW)=>{"use strict";var QHe=os();function FHe(){return!0}function THe(){}function RHe(){return""}function NHe(t){return typeof t>"u"}ZW.exports=new QHe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:FHe,construct:THe,predicate:NHe,represent:RHe})});var tV=_((abt,eV)=>{"use strict";var LHe=os();function MHe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),o="";return!(e[0]==="/"&&(r&&(o=r[1]),o.length>3||e[e.length-o.length-1]!=="/"))}function OHe(t){var e=t,r=/\/([gim]*)$/.exec(t),o="";return e[0]==="/"&&(r&&(o=r[1]),e=e.slice(1,e.length-o.length-1)),new RegExp(e,o)}function UHe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function _He(t){return Object.prototype.toString.call(t)==="[object RegExp]"}eV.exports=new LHe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:MHe,construct:OHe,predicate:_He,represent:UHe})});var iV=_((lbt,nV)=>{"use strict";var qD;try{rV=Be,qD=rV("esprima")}catch{typeof window<"u"&&(qD=window.esprima)}var rV,HHe=os();function jHe(t){if(t===null)return!1;try{var e="("+t+")",r=qD.parse(e,{range:!0});return!(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function qHe(t){var e="("+t+")",r=qD.parse(e,{range:!0}),o=[],a;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(n){o.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(o,e.slice(a[0]+1,a[1]-1)):new Function(o,"return "+e.slice(a[0],a[1]))}function GHe(t){return t.toString()}function YHe(t){return Object.prototype.toString.call(t)==="[object Function]"}nV.exports=new HHe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:jHe,construct:qHe,predicate:YHe,represent:GHe})});var zw=_((ubt,oV)=>{"use strict";var sV=Kg();oV.exports=sV.DEFAULT=new sV({include:[fy()],explicit:[$W(),tV(),iV()]})});var DV=_((Abt,Xw)=>{"use strict";var mf=Vg(),pV=uy(),WHe=pW(),hV=fy(),VHe=zw(),Gp=Object.prototype.hasOwnProperty,GD=1,gV=2,dV=3,YD=4,yR=1,KHe=2,aV=3,JHe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,zHe=/[\x85\u2028\u2029]/,XHe=/[,\[\]\{\}]/,mV=/^(?:!|!!|![a-z\-]+!)$/i,yV=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function lV(t){return Object.prototype.toString.call(t)}function Hu(t){return t===10||t===13}function Xg(t){return t===9||t===32}function Ia(t){return t===9||t===32||t===10||t===13}function py(t){return t===44||t===91||t===93||t===123||t===125}function ZHe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function $He(t){return t===120?2:t===117?4:t===85?8:0}function e6e(t){return 48<=t&&t<=57?t-48:-1}function cV(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` -`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function t6e(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var EV=new Array(256),CV=new Array(256);for(zg=0;zg<256;zg++)EV[zg]=cV(zg)?1:0,CV[zg]=cV(zg);var zg;function r6e(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||VHe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function wV(t,e){return new pV(e,new WHe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Sr(t,e){throw wV(t,e)}function WD(t,e){t.onWarning&&t.onWarning.call(null,wV(t,e))}var uV={YAML:function(e,r,o){var a,n,u;e.version!==null&&Sr(e,"duplication of %YAML directive"),o.length!==1&&Sr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),a===null&&Sr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),u=parseInt(a[2],10),n!==1&&Sr(e,"unacceptable YAML version of the document"),e.version=o[0],e.checkLineBreaks=u<2,u!==1&&u!==2&&WD(e,"unsupported YAML version of the document")},TAG:function(e,r,o){var a,n;o.length!==2&&Sr(e,"TAG directive accepts exactly two arguments"),a=o[0],n=o[1],mV.test(a)||Sr(e,"ill-formed tag handle (first argument) of the TAG directive"),Gp.call(e.tagMap,a)&&Sr(e,'there is a previously declared suffix for "'+a+'" tag handle'),yV.test(n)||Sr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function qp(t,e,r,o){var a,n,u,A;if(e1&&(t.result+=mf.repeat(` -`,e-1))}function n6e(t,e,r){var o,a,n,u,A,p,h,E,I=t.kind,v=t.result,b;if(b=t.input.charCodeAt(t.position),Ia(b)||py(b)||b===35||b===38||b===42||b===33||b===124||b===62||b===39||b===34||b===37||b===64||b===96||(b===63||b===45)&&(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a)))return!1;for(t.kind="scalar",t.result="",n=u=t.position,A=!1;b!==0;){if(b===58){if(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a))break}else if(b===35){if(o=t.input.charCodeAt(t.position-1),Ia(o))break}else{if(t.position===t.lineStart&&VD(t)||r&&py(b))break;if(Hu(b))if(p=t.line,h=t.lineStart,E=t.lineIndent,Wi(t,!1,-1),t.lineIndent>=e){A=!0,b=t.input.charCodeAt(t.position);continue}else{t.position=u,t.line=p,t.lineStart=h,t.lineIndent=E;break}}A&&(qp(t,n,u,!1),CR(t,t.line-p),n=u=t.position,A=!1),Xg(b)||(u=t.position+1),b=t.input.charCodeAt(++t.position)}return qp(t,n,u,!1),t.result?!0:(t.kind=I,t.result=v,!1)}function i6e(t,e){var r,o,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,o=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(qp(t,o,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)o=t.position,t.position++,a=t.position;else return!0;else Hu(r)?(qp(t,o,a,!0),CR(t,Wi(t,!1,e)),o=a=t.position):t.position===t.lineStart&&VD(t)?Sr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Sr(t,"unexpected end of the stream within a single quoted scalar")}function s6e(t,e){var r,o,a,n,u,A;if(A=t.input.charCodeAt(t.position),A!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=o=t.position;(A=t.input.charCodeAt(t.position))!==0;){if(A===34)return qp(t,r,t.position,!0),t.position++,!0;if(A===92){if(qp(t,r,t.position,!0),A=t.input.charCodeAt(++t.position),Hu(A))Wi(t,!1,e);else if(A<256&&EV[A])t.result+=CV[A],t.position++;else if((u=$He(A))>0){for(a=u,n=0;a>0;a--)A=t.input.charCodeAt(++t.position),(u=ZHe(A))>=0?n=(n<<4)+u:Sr(t,"expected hexadecimal character");t.result+=t6e(n),t.position++}else Sr(t,"unknown escape sequence");r=o=t.position}else Hu(A)?(qp(t,r,o,!0),CR(t,Wi(t,!1,e)),r=o=t.position):t.position===t.lineStart&&VD(t)?Sr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}Sr(t,"unexpected end of the stream within a double quoted scalar")}function o6e(t,e){var r=!0,o,a=t.tag,n,u=t.anchor,A,p,h,E,I,v={},b,C,T,L;if(L=t.input.charCodeAt(t.position),L===91)p=93,I=!1,n=[];else if(L===123)p=125,I=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),L=t.input.charCodeAt(++t.position);L!==0;){if(Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===p)return t.position++,t.tag=a,t.anchor=u,t.kind=I?"mapping":"sequence",t.result=n,!0;r||Sr(t,"missed comma between flow collection entries"),C=b=T=null,h=E=!1,L===63&&(A=t.input.charCodeAt(t.position+1),Ia(A)&&(h=E=!0,t.position++,Wi(t,!0,e))),o=t.line,gy(t,e,GD,!1,!0),C=t.tag,b=t.result,Wi(t,!0,e),L=t.input.charCodeAt(t.position),(E||t.line===o)&&L===58&&(h=!0,L=t.input.charCodeAt(++t.position),Wi(t,!0,e),gy(t,e,GD,!1,!0),T=t.result),I?hy(t,n,v,C,b,T):h?n.push(hy(t,null,v,C,b,T)):n.push(b),Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===44?(r=!0,L=t.input.charCodeAt(++t.position)):r=!1}Sr(t,"unexpected end of the stream within a flow collection")}function a6e(t,e){var r,o,a=yR,n=!1,u=!1,A=e,p=0,h=!1,E,I;if(I=t.input.charCodeAt(t.position),I===124)o=!1;else if(I===62)o=!0;else return!1;for(t.kind="scalar",t.result="";I!==0;)if(I=t.input.charCodeAt(++t.position),I===43||I===45)yR===a?a=I===43?aV:KHe:Sr(t,"repeat of a chomping mode identifier");else if((E=e6e(I))>=0)E===0?Sr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?Sr(t,"repeat of an indentation width identifier"):(A=e+E-1,u=!0);else break;if(Xg(I)){do I=t.input.charCodeAt(++t.position);while(Xg(I));if(I===35)do I=t.input.charCodeAt(++t.position);while(!Hu(I)&&I!==0)}for(;I!==0;){for(ER(t),t.lineIndent=0,I=t.input.charCodeAt(t.position);(!u||t.lineIndentA&&(A=t.lineIndent),Hu(I)){p++;continue}if(t.lineIndente)&&p!==0)Sr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(gy(t,e,YD,!0,a)&&(C?v=t.result:b=t.result),C||(hy(t,h,E,I,v,b,n,u),I=v=b=null),Wi(t,!0,-1),L=t.input.charCodeAt(t.position)),t.lineIndent>e&&L!==0)Sr(t,"bad indentation of a mapping entry");else if(t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),I=0,v=t.implicitTypes.length;I tag; it should be "'+b.kind+'", not "'+t.kind+'"'),b.resolve(t.result)?(t.result=b.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Sr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Sr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function f6e(t){var e=t.position,r,o,a,n=!1,u;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(u=t.input.charCodeAt(t.position))!==0&&(Wi(t,!0,-1),u=t.input.charCodeAt(t.position),!(t.lineIndent>0||u!==37));){for(n=!0,u=t.input.charCodeAt(++t.position),r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);for(o=t.input.slice(r,t.position),a=[],o.length<1&&Sr(t,"directive name must not be less than one character in length");u!==0;){for(;Xg(u);)u=t.input.charCodeAt(++t.position);if(u===35){do u=t.input.charCodeAt(++t.position);while(u!==0&&!Hu(u));break}if(Hu(u))break;for(r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}u!==0&&ER(t),Gp.call(uV,o)?uV[o](t,o,a):WD(t,'unknown document directive "'+o+'"')}if(Wi(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Wi(t,!0,-1)):n&&Sr(t,"directives end mark is expected"),gy(t,t.lineIndent-1,YD,!1,!0),Wi(t,!0,-1),t.checkLineBreaks&&zHe.test(t.input.slice(e,t.position))&&WD(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&VD(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Wi(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var o=IV(t,r);if(typeof e!="function")return o;for(var a=0,n=o.length;a"u"&&(r=e,e=null),BV(t,e,mf.extend({schema:hV},r))}function h6e(t,e){return vV(t,mf.extend({schema:hV},e))}Xw.exports.loadAll=BV;Xw.exports.load=vV;Xw.exports.safeLoadAll=p6e;Xw.exports.safeLoad=h6e});var KV=_((fbt,vR)=>{"use strict";var $w=Vg(),eI=uy(),g6e=zw(),d6e=fy(),TV=Object.prototype.toString,RV=Object.prototype.hasOwnProperty,m6e=9,Zw=10,y6e=13,E6e=32,C6e=33,w6e=34,NV=35,I6e=37,B6e=38,v6e=39,D6e=42,LV=44,P6e=45,MV=58,S6e=61,x6e=62,b6e=63,k6e=64,OV=91,UV=93,Q6e=96,_V=123,F6e=124,HV=125,vo={};vo[0]="\\0";vo[7]="\\a";vo[8]="\\b";vo[9]="\\t";vo[10]="\\n";vo[11]="\\v";vo[12]="\\f";vo[13]="\\r";vo[27]="\\e";vo[34]='\\"';vo[92]="\\\\";vo[133]="\\N";vo[160]="\\_";vo[8232]="\\L";vo[8233]="\\P";var T6e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function R6e(t,e){var r,o,a,n,u,A,p;if(e===null)return{};for(r={},o=Object.keys(e),a=0,n=o.length;ar/2-1){n=" ... ",u-=5;break}return A=this.buffer.slice(a,u),cW.repeat(" ",e)+o+A+n+` +`+cW.repeat(" ",e+this.position-a+o.length)+"^"};AT.prototype.toString=function(e){var r,o="";return this.name&&(o+='in "'+this.name+'" '),o+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(o+=`: +`+r)),o};uW.exports=AT});var os=_((Ubt,pW)=>{"use strict";var fW=Ay(),C8e=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],w8e=["scalar","sequence","mapping"];function I8e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(o){e[String(o)]=r})}),e}function B8e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(C8e.indexOf(r)===-1)throw new fW('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=I8e(e.styleAliases||null),w8e.indexOf(this.kind)===-1)throw new fW('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}pW.exports=B8e});var Jg=_((_bt,gW)=>{"use strict";var hW=Vg(),_D=Ay(),v8e=os();function fT(t,e,r){var o=[];return t.include.forEach(function(a){r=fT(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,u){n.tag===a.tag&&n.kind===a.kind&&o.push(u)}),r.push(a)}),r.filter(function(a,n){return o.indexOf(n)===-1})}function D8e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function o(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var S8e=os();dW.exports=new S8e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var EW=_((qbt,yW)=>{"use strict";var P8e=os();yW.exports=new P8e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var wW=_((jbt,CW)=>{"use strict";var b8e=os();CW.exports=new b8e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var HD=_((Gbt,IW)=>{"use strict";var x8e=Jg();IW.exports=new x8e({explicit:[mW(),EW(),wW()]})});var vW=_((Ybt,BW)=>{"use strict";var k8e=os();function Q8e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function F8e(){return null}function R8e(t){return t===null}BW.exports=new k8e("tag:yaml.org,2002:null",{kind:"scalar",resolve:Q8e,construct:F8e,predicate:R8e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var SW=_((Wbt,DW)=>{"use strict";var T8e=os();function N8e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function L8e(t){return t==="true"||t==="True"||t==="TRUE"}function O8e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}DW.exports=new T8e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:N8e,construct:L8e,predicate:O8e,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})});var bW=_((Kbt,PW)=>{"use strict";var M8e=Vg(),U8e=os();function _8e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function H8e(t){return 48<=t&&t<=55}function q8e(t){return 48<=t&&t<=57}function j8e(t){if(t===null)return!1;var e=t.length,r=0,o=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var QW=_((Vbt,kW)=>{"use strict";var xW=Vg(),W8e=os(),K8e=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function V8e(t){return!(t===null||!K8e.test(t)||t[t.length-1]==="_")}function J8e(t){var e,r,o,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(n){a.unshift(parseFloat(n,10))}),e=0,o=1,a.forEach(function(n){e+=n*o,o*=60}),r*e):r*parseFloat(e,10)}var z8e=/^[-+]?[0-9]+e/;function X8e(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(xW.isNegativeZero(t))return"-0.0";return r=t.toString(10),z8e.test(r)?r.replace("e",".e"):r}function Z8e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||xW.isNegativeZero(t))}kW.exports=new W8e("tag:yaml.org,2002:float",{kind:"scalar",resolve:V8e,construct:J8e,predicate:Z8e,represent:X8e,defaultStyle:"lowercase"})});var pT=_((Jbt,FW)=>{"use strict";var $8e=Jg();FW.exports=new $8e({include:[HD()],implicit:[vW(),SW(),bW(),QW()]})});var hT=_((zbt,RW)=>{"use strict";var eHe=Jg();RW.exports=new eHe({include:[pT()]})});var OW=_((Xbt,LW)=>{"use strict";var tHe=os(),TW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),NW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function rHe(t){return t===null?!1:TW.exec(t)!==null||NW.exec(t)!==null}function nHe(t){var e,r,o,a,n,u,A,p=0,h=null,E,I,v;if(e=TW.exec(t),e===null&&(e=NW.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],o=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,o,a));if(n=+e[4],u=+e[5],A=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],I=+(e[11]||0),h=(E*60+I)*6e4,e[9]==="-"&&(h=-h)),v=new Date(Date.UTC(r,o,a,n,u,A,p)),h&&v.setTime(v.getTime()-h),v}function iHe(t){return t.toISOString()}LW.exports=new tHe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:rHe,construct:nHe,instanceOf:Date,represent:iHe})});var UW=_((Zbt,MW)=>{"use strict";var sHe=os();function oHe(t){return t==="<<"||t===null}MW.exports=new sHe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:oHe})});var qW=_(($bt,HW)=>{"use strict";var zg;try{_W=ve,zg=_W("buffer").Buffer}catch{}var _W,aHe=os(),gT=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function lHe(t){if(t===null)return!1;var e,r,o=0,a=t.length,n=gT;for(r=0;r64)){if(e<0)return!1;o+=6}return o%8===0}function cHe(t){var e,r,o=t.replace(/[\r\n=]/g,""),a=o.length,n=gT,u=0,A=[];for(e=0;e>16&255),A.push(u>>8&255),A.push(u&255)),u=u<<6|n.indexOf(o.charAt(e));return r=a%4*6,r===0?(A.push(u>>16&255),A.push(u>>8&255),A.push(u&255)):r===18?(A.push(u>>10&255),A.push(u>>2&255)):r===12&&A.push(u>>4&255),zg?zg.from?zg.from(A):new zg(A):A}function uHe(t){var e="",r=0,o,a,n=t.length,u=gT;for(o=0;o>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]),r=(r<<8)+t[o];return a=n%3,a===0?(e+=u[r>>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]):a===2?(e+=u[r>>10&63],e+=u[r>>4&63],e+=u[r<<2&63],e+=u[64]):a===1&&(e+=u[r>>2&63],e+=u[r<<4&63],e+=u[64],e+=u[64]),e}function AHe(t){return zg&&zg.isBuffer(t)}HW.exports=new aHe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:lHe,construct:cHe,predicate:AHe,represent:uHe})});var GW=_((txt,jW)=>{"use strict";var fHe=os(),pHe=Object.prototype.hasOwnProperty,hHe=Object.prototype.toString;function gHe(t){if(t===null)return!0;var e=[],r,o,a,n,u,A=t;for(r=0,o=A.length;r{"use strict";var mHe=os(),yHe=Object.prototype.toString;function EHe(t){if(t===null)return!0;var e,r,o,a,n,u=t;for(n=new Array(u.length),e=0,r=u.length;e{"use strict";var wHe=os(),IHe=Object.prototype.hasOwnProperty;function BHe(t){if(t===null)return!0;var e,r=t;for(e in r)if(IHe.call(r,e)&&r[e]!==null)return!1;return!0}function vHe(t){return t!==null?t:{}}KW.exports=new wHe("tag:yaml.org,2002:set",{kind:"mapping",resolve:BHe,construct:vHe})});var py=_((ixt,JW)=>{"use strict";var DHe=Jg();JW.exports=new DHe({include:[hT()],implicit:[OW(),UW()],explicit:[qW(),GW(),WW(),VW()]})});var XW=_((sxt,zW)=>{"use strict";var SHe=os();function PHe(){return!0}function bHe(){}function xHe(){return""}function kHe(t){return typeof t>"u"}zW.exports=new SHe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:PHe,construct:bHe,predicate:kHe,represent:xHe})});var $W=_((oxt,ZW)=>{"use strict";var QHe=os();function FHe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),o="";return!(e[0]==="/"&&(r&&(o=r[1]),o.length>3||e[e.length-o.length-1]!=="/"))}function RHe(t){var e=t,r=/\/([gim]*)$/.exec(t),o="";return e[0]==="/"&&(r&&(o=r[1]),e=e.slice(1,e.length-o.length-1)),new RegExp(e,o)}function THe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function NHe(t){return Object.prototype.toString.call(t)==="[object RegExp]"}ZW.exports=new QHe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:FHe,construct:RHe,predicate:NHe,represent:THe})});var rK=_((axt,tK)=>{"use strict";var qD;try{eK=ve,qD=eK("esprima")}catch{typeof window<"u"&&(qD=window.esprima)}var eK,LHe=os();function OHe(t){if(t===null)return!1;try{var e="("+t+")",r=qD.parse(e,{range:!0});return!(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function MHe(t){var e="("+t+")",r=qD.parse(e,{range:!0}),o=[],a;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(n){o.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(o,e.slice(a[0]+1,a[1]-1)):new Function(o,"return "+e.slice(a[0],a[1]))}function UHe(t){return t.toString()}function _He(t){return Object.prototype.toString.call(t)==="[object Function]"}tK.exports=new LHe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:OHe,construct:MHe,predicate:_He,represent:UHe})});var Xw=_((cxt,iK)=>{"use strict";var nK=Jg();iK.exports=nK.DEFAULT=new nK({include:[py()],explicit:[XW(),$W(),rK()]})});var BK=_((uxt,Zw)=>{"use strict";var yf=Vg(),AK=Ay(),HHe=AW(),fK=py(),qHe=Xw(),Yp=Object.prototype.hasOwnProperty,jD=1,pK=2,hK=3,GD=4,dT=1,jHe=2,sK=3,GHe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,YHe=/[\x85\u2028\u2029]/,WHe=/[,\[\]\{\}]/,gK=/^(?:!|!!|![a-z\-]+!)$/i,dK=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function oK(t){return Object.prototype.toString.call(t)}function Hu(t){return t===10||t===13}function Zg(t){return t===9||t===32}function Ia(t){return t===9||t===32||t===10||t===13}function hy(t){return t===44||t===91||t===93||t===123||t===125}function KHe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function VHe(t){return t===120?2:t===117?4:t===85?8:0}function JHe(t){return 48<=t&&t<=57?t-48:-1}function aK(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` +`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function zHe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var mK=new Array(256),yK=new Array(256);for(Xg=0;Xg<256;Xg++)mK[Xg]=aK(Xg)?1:0,yK[Xg]=aK(Xg);var Xg;function XHe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||qHe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function EK(t,e){return new AK(e,new HHe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Pr(t,e){throw EK(t,e)}function YD(t,e){t.onWarning&&t.onWarning.call(null,EK(t,e))}var lK={YAML:function(e,r,o){var a,n,u;e.version!==null&&Pr(e,"duplication of %YAML directive"),o.length!==1&&Pr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),a===null&&Pr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),u=parseInt(a[2],10),n!==1&&Pr(e,"unacceptable YAML version of the document"),e.version=o[0],e.checkLineBreaks=u<2,u!==1&&u!==2&&YD(e,"unsupported YAML version of the document")},TAG:function(e,r,o){var a,n;o.length!==2&&Pr(e,"TAG directive accepts exactly two arguments"),a=o[0],n=o[1],gK.test(a)||Pr(e,"ill-formed tag handle (first argument) of the TAG directive"),Yp.call(e.tagMap,a)&&Pr(e,'there is a previously declared suffix for "'+a+'" tag handle'),dK.test(n)||Pr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function Gp(t,e,r,o){var a,n,u,A;if(e1&&(t.result+=yf.repeat(` +`,e-1))}function ZHe(t,e,r){var o,a,n,u,A,p,h,E,I=t.kind,v=t.result,x;if(x=t.input.charCodeAt(t.position),Ia(x)||hy(x)||x===35||x===38||x===42||x===33||x===124||x===62||x===39||x===34||x===37||x===64||x===96||(x===63||x===45)&&(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&hy(a)))return!1;for(t.kind="scalar",t.result="",n=u=t.position,A=!1;x!==0;){if(x===58){if(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&hy(a))break}else if(x===35){if(o=t.input.charCodeAt(t.position-1),Ia(o))break}else{if(t.position===t.lineStart&&WD(t)||r&&hy(x))break;if(Hu(x))if(p=t.line,h=t.lineStart,E=t.lineIndent,Wi(t,!1,-1),t.lineIndent>=e){A=!0,x=t.input.charCodeAt(t.position);continue}else{t.position=u,t.line=p,t.lineStart=h,t.lineIndent=E;break}}A&&(Gp(t,n,u,!1),yT(t,t.line-p),n=u=t.position,A=!1),Zg(x)||(u=t.position+1),x=t.input.charCodeAt(++t.position)}return Gp(t,n,u,!1),t.result?!0:(t.kind=I,t.result=v,!1)}function $He(t,e){var r,o,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,o=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(Gp(t,o,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)o=t.position,t.position++,a=t.position;else return!0;else Hu(r)?(Gp(t,o,a,!0),yT(t,Wi(t,!1,e)),o=a=t.position):t.position===t.lineStart&&WD(t)?Pr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Pr(t,"unexpected end of the stream within a single quoted scalar")}function e6e(t,e){var r,o,a,n,u,A;if(A=t.input.charCodeAt(t.position),A!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=o=t.position;(A=t.input.charCodeAt(t.position))!==0;){if(A===34)return Gp(t,r,t.position,!0),t.position++,!0;if(A===92){if(Gp(t,r,t.position,!0),A=t.input.charCodeAt(++t.position),Hu(A))Wi(t,!1,e);else if(A<256&&mK[A])t.result+=yK[A],t.position++;else if((u=VHe(A))>0){for(a=u,n=0;a>0;a--)A=t.input.charCodeAt(++t.position),(u=KHe(A))>=0?n=(n<<4)+u:Pr(t,"expected hexadecimal character");t.result+=zHe(n),t.position++}else Pr(t,"unknown escape sequence");r=o=t.position}else Hu(A)?(Gp(t,r,o,!0),yT(t,Wi(t,!1,e)),r=o=t.position):t.position===t.lineStart&&WD(t)?Pr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}Pr(t,"unexpected end of the stream within a double quoted scalar")}function t6e(t,e){var r=!0,o,a=t.tag,n,u=t.anchor,A,p,h,E,I,v={},x,C,R,L;if(L=t.input.charCodeAt(t.position),L===91)p=93,I=!1,n=[];else if(L===123)p=125,I=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),L=t.input.charCodeAt(++t.position);L!==0;){if(Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===p)return t.position++,t.tag=a,t.anchor=u,t.kind=I?"mapping":"sequence",t.result=n,!0;r||Pr(t,"missed comma between flow collection entries"),C=x=R=null,h=E=!1,L===63&&(A=t.input.charCodeAt(t.position+1),Ia(A)&&(h=E=!0,t.position++,Wi(t,!0,e))),o=t.line,dy(t,e,jD,!1,!0),C=t.tag,x=t.result,Wi(t,!0,e),L=t.input.charCodeAt(t.position),(E||t.line===o)&&L===58&&(h=!0,L=t.input.charCodeAt(++t.position),Wi(t,!0,e),dy(t,e,jD,!1,!0),R=t.result),I?gy(t,n,v,C,x,R):h?n.push(gy(t,null,v,C,x,R)):n.push(x),Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===44?(r=!0,L=t.input.charCodeAt(++t.position)):r=!1}Pr(t,"unexpected end of the stream within a flow collection")}function r6e(t,e){var r,o,a=dT,n=!1,u=!1,A=e,p=0,h=!1,E,I;if(I=t.input.charCodeAt(t.position),I===124)o=!1;else if(I===62)o=!0;else return!1;for(t.kind="scalar",t.result="";I!==0;)if(I=t.input.charCodeAt(++t.position),I===43||I===45)dT===a?a=I===43?sK:jHe:Pr(t,"repeat of a chomping mode identifier");else if((E=JHe(I))>=0)E===0?Pr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?Pr(t,"repeat of an indentation width identifier"):(A=e+E-1,u=!0);else break;if(Zg(I)){do I=t.input.charCodeAt(++t.position);while(Zg(I));if(I===35)do I=t.input.charCodeAt(++t.position);while(!Hu(I)&&I!==0)}for(;I!==0;){for(mT(t),t.lineIndent=0,I=t.input.charCodeAt(t.position);(!u||t.lineIndentA&&(A=t.lineIndent),Hu(I)){p++;continue}if(t.lineIndente)&&p!==0)Pr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(dy(t,e,GD,!0,a)&&(C?v=t.result:x=t.result),C||(gy(t,h,E,I,v,x,n,u),I=v=x=null),Wi(t,!0,-1),L=t.input.charCodeAt(t.position)),t.lineIndent>e&&L!==0)Pr(t,"bad indentation of a mapping entry");else if(t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),I=0,v=t.implicitTypes.length;I tag; it should be "'+x.kind+'", not "'+t.kind+'"'),x.resolve(t.result)?(t.result=x.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Pr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Pr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function a6e(t){var e=t.position,r,o,a,n=!1,u;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(u=t.input.charCodeAt(t.position))!==0&&(Wi(t,!0,-1),u=t.input.charCodeAt(t.position),!(t.lineIndent>0||u!==37));){for(n=!0,u=t.input.charCodeAt(++t.position),r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);for(o=t.input.slice(r,t.position),a=[],o.length<1&&Pr(t,"directive name must not be less than one character in length");u!==0;){for(;Zg(u);)u=t.input.charCodeAt(++t.position);if(u===35){do u=t.input.charCodeAt(++t.position);while(u!==0&&!Hu(u));break}if(Hu(u))break;for(r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}u!==0&&mT(t),Yp.call(lK,o)?lK[o](t,o,a):YD(t,'unknown document directive "'+o+'"')}if(Wi(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Wi(t,!0,-1)):n&&Pr(t,"directives end mark is expected"),dy(t,t.lineIndent-1,GD,!1,!0),Wi(t,!0,-1),t.checkLineBreaks&&YHe.test(t.input.slice(e,t.position))&&YD(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&WD(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Wi(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var o=CK(t,r);if(typeof e!="function")return o;for(var a=0,n=o.length;a"u"&&(r=e,e=null),wK(t,e,yf.extend({schema:fK},r))}function c6e(t,e){return IK(t,yf.extend({schema:fK},e))}Zw.exports.loadAll=wK;Zw.exports.load=IK;Zw.exports.safeLoadAll=l6e;Zw.exports.safeLoad=c6e});var WK=_((Axt,IT)=>{"use strict";var eI=Vg(),tI=Ay(),u6e=Xw(),A6e=py(),QK=Object.prototype.toString,FK=Object.prototype.hasOwnProperty,f6e=9,$w=10,p6e=13,h6e=32,g6e=33,d6e=34,RK=35,m6e=37,y6e=38,E6e=39,C6e=42,TK=44,w6e=45,NK=58,I6e=61,B6e=62,v6e=63,D6e=64,LK=91,OK=93,S6e=96,MK=123,P6e=124,UK=125,vo={};vo[0]="\\0";vo[7]="\\a";vo[8]="\\b";vo[9]="\\t";vo[10]="\\n";vo[11]="\\v";vo[12]="\\f";vo[13]="\\r";vo[27]="\\e";vo[34]='\\"';vo[92]="\\\\";vo[133]="\\N";vo[160]="\\_";vo[8232]="\\L";vo[8233]="\\P";var b6e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function x6e(t,e){var r,o,a,n,u,A,p;if(e===null)return{};for(r={},o=Object.keys(e),a=0,n=o.length;a0?t.charCodeAt(n-1):null,v=v&&xV(u,A)}else{for(n=0;no&&t[I+1]!==" ",I=n);else if(!dy(u))return KD;A=n>0?t.charCodeAt(n-1):null,v=v&&xV(u,A)}h=h||E&&n-I-1>o&&t[I+1]!==" "}return!p&&!h?v&&!a(t)?qV:GV:r>9&&jV(t)?KD:h?WV:YV}function _6e(t,e,r,o){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&T6e.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),u=o||t.flowLevel>-1&&r>=t.flowLevel;function A(p){return L6e(t,p)}switch(U6e(e,u,t.indent,n,A)){case qV:return e;case GV:return"'"+e.replace(/'/g,"''")+"'";case YV:return"|"+bV(e,t.indent)+kV(SV(e,a));case WV:return">"+bV(e,t.indent)+kV(SV(H6e(e,n),a));case KD:return'"'+j6e(e,n)+'"';default:throw new eI("impossible error: invalid scalar style")}}()}function bV(t,e){var r=jV(t)?String(e):"",o=t[t.length-1]===` +`&&(n+=r),n+=u;return n}function ET(t,e){return` +`+eI.repeat(" ",t.indent*e)}function Q6e(t,e){var r,o,a;for(r=0,o=t.implicitTypes.length;r0?t.charCodeAt(n-1):null,v=v&&SK(u,A)}else{for(n=0;no&&t[I+1]!==" ",I=n);else if(!my(u))return KD;A=n>0?t.charCodeAt(n-1):null,v=v&&SK(u,A)}h=h||E&&n-I-1>o&&t[I+1]!==" "}return!p&&!h?v&&!a(t)?HK:qK:r>9&&_K(t)?KD:h?GK:jK}function N6e(t,e,r,o){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&b6e.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),u=o||t.flowLevel>-1&&r>=t.flowLevel;function A(p){return Q6e(t,p)}switch(T6e(e,u,t.indent,n,A)){case HK:return e;case qK:return"'"+e.replace(/'/g,"''")+"'";case jK:return"|"+PK(e,t.indent)+bK(DK(e,a));case GK:return">"+PK(e,t.indent)+bK(DK(L6e(e,n),a));case KD:return'"'+O6e(e,n)+'"';default:throw new tI("impossible error: invalid scalar style")}}()}function PK(t,e){var r=_K(t)?String(e):"",o=t[t.length-1]===` `,a=o&&(t[t.length-2]===` `||t===` `),n=a?"+":o?"":"-";return r+n+` -`}function kV(t){return t[t.length-1]===` -`?t.slice(0,-1):t}function H6e(t,e){for(var r=/(\n+)([^\n]*)/g,o=function(){var h=t.indexOf(` -`);return h=h!==-1?h:t.length,r.lastIndex=h,QV(t.slice(0,h),e)}(),a=t[0]===` +`}function bK(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function L6e(t,e){for(var r=/(\n+)([^\n]*)/g,o=function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,xK(t.slice(0,h),e)}(),a=t[0]===` `||t[0]===" ",n,u;u=r.exec(t);){var A=u[1],p=u[2];n=p[0]===" ",o+=A+(!a&&!n&&p!==""?` -`:"")+QV(p,e),a=n}return o}function QV(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,o,a=0,n,u=0,A=0,p="";o=r.exec(t);)A=o.index,A-a>e&&(n=u>a?u:A,p+=` +`:"")+xK(p,e),a=n}return o}function xK(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,o,a=0,n,u=0,A=0,p="";o=r.exec(t);)A=o.index,A-a>e&&(n=u>a?u:A,p+=` `+t.slice(a,n),a=n+1),u=A;return p+=` `,t.length-a>e&&u>a?p+=t.slice(a,u)+` -`+t.slice(u+1):p+=t.slice(a),p.slice(1)}function j6e(t){for(var e="",r,o,a,n=0;n=55296&&r<=56319&&(o=t.charCodeAt(n+1),o>=56320&&o<=57343)){e+=PV((r-55296)*1024+o-56320+65536),n++;continue}a=vo[r],e+=!a&&dy(r)?t[n]:a||PV(r)}return e}function q6e(t,e,r){var o="",a=t.tag,n,u;for(n=0,u=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Zg(t,e,h,!1,!1)&&(E+=t.dump,o+=E));t.tag=a,t.dump="{"+o+"}"}function W6e(t,e,r,o){var a="",n=t.tag,u=Object.keys(r),A,p,h,E,I,v;if(t.sortKeys===!0)u.sort();else if(typeof t.sortKeys=="function")u.sort(t.sortKeys);else if(t.sortKeys)throw new eI("sortKeys must be a boolean or a function");for(A=0,p=u.length;A1024,I&&(t.dump&&Zw===t.dump.charCodeAt(0)?v+="?":v+="? "),v+=t.dump,I&&(v+=wR(t,e)),Zg(t,e+1,E,!0,I)&&(t.dump&&Zw===t.dump.charCodeAt(0)?v+=":":v+=": ",v+=t.dump,a+=v));t.tag=n,t.dump=a||"{}"}function FV(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function Zg(t,e,r,o,a,n){t.tag=null,t.dump=r,FV(t,r,!1)||FV(t,r,!0);var u=TV.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(W6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(Y6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(G6e(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(q6e(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&_6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new eI("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function V6e(t,e){var r=[],o=[],a,n;for(IR(t,r,o),a=0,n=o.length;a{"use strict";var JD=DV(),JV=KV();function zD(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}ki.exports.Type=os();ki.exports.Schema=Kg();ki.exports.FAILSAFE_SCHEMA=jD();ki.exports.JSON_SCHEMA=gR();ki.exports.CORE_SCHEMA=dR();ki.exports.DEFAULT_SAFE_SCHEMA=fy();ki.exports.DEFAULT_FULL_SCHEMA=zw();ki.exports.load=JD.load;ki.exports.loadAll=JD.loadAll;ki.exports.safeLoad=JD.safeLoad;ki.exports.safeLoadAll=JD.safeLoadAll;ki.exports.dump=JV.dump;ki.exports.safeDump=JV.safeDump;ki.exports.YAMLException=uy();ki.exports.MINIMAL_SCHEMA=jD();ki.exports.SAFE_SCHEMA=fy();ki.exports.DEFAULT_SCHEMA=zw();ki.exports.scan=zD("scan");ki.exports.parse=zD("parse");ki.exports.compose=zD("compose");ki.exports.addConstructor=zD("addConstructor")});var ZV=_((hbt,XV)=>{"use strict";var J6e=zV();XV.exports=J6e});var eK=_((gbt,$V)=>{"use strict";function z6e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function $g(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,$g)}z6e($g,Error);$g.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I({[ft]:Le})))},pe=function($){return $},Ae=function($){return $},ye=sa("correct indentation"),ae=" ",we=Qn(" ",!1),Pe=function($){return $.length===nr*It},g=function($){return $.length===(nr+1)*It},Ee=function(){return nr++,!0},De=function(){return nr--,!0},ce=function(){return DA()},ne=sa("pseudostring"),ee=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,Ie=hi(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),ke=/^[^\r\n\t ,\][{}:#"']/,ht=hi(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),H=function(){return DA().replace(/^ *| *$/g,"")},lt="--",Re=Qn("--",!1),Qe=/^[a-zA-Z\/0-9]/,be=hi([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),_e=/^[^\r\n\t :,]/,Te=hi(["\r",` -`," "," ",":",","],!0,!1),Je="null",He=Qn("null",!1),x=function(){return null},w="true",S=Qn("true",!1),y=function(){return!0},F="false",z=Qn("false",!1),X=function(){return!1},Z=sa("string"),ie='"',Se=Qn('"',!1),Ne=function(){return""},ot=function($){return $},dt=function($){return $.join("")},jt=/^[^"\\\0-\x1F\x7F]/,$t=hi(['"',"\\",["\0",""],"\x7F"],!0,!1),xt='\\"',an=Qn('\\"',!1),Qr=function(){return'"'},mr="\\\\",xr=Qn("\\\\",!1),Wr=function(){return"\\"},Vn="\\/",Ns=Qn("\\/",!1),Ri=function(){return"/"},ps="\\b",io=Qn("\\b",!1),Si=function(){return"\b"},Ls="\\f",so=Qn("\\f",!1),cc=function(){return"\f"},cu="\\n",ap=Qn("\\n",!1),lp=function(){return` -`},Ms="\\r",Dn=Qn("\\r",!1),oo=function(){return"\r"},Os="\\t",ml=Qn("\\t",!1),yl=function(){return" "},ao="\\u",Kn=Qn("\\u",!1),Mn=function($,me,Le,ft){return String.fromCharCode(parseInt(`0x${$}${me}${Le}${ft}`))},Ni=/^[0-9a-fA-F]/,On=hi([["0","9"],["a","f"],["A","F"]],!1,!1),_i=sa("blank space"),tr=/^[ \t]/,Me=hi([" "," "],!1,!1),ii=sa("white space"),Oa=/^[ \t\n\r]/,hr=hi([" "," ",` +`+t.slice(u+1):p+=t.slice(a),p.slice(1)}function O6e(t){for(var e="",r,o,a,n=0;n=55296&&r<=56319&&(o=t.charCodeAt(n+1),o>=56320&&o<=57343)){e+=vK((r-55296)*1024+o-56320+65536),n++;continue}a=vo[r],e+=!a&&my(r)?t[n]:a||vK(r)}return e}function M6e(t,e,r){var o="",a=t.tag,n,u;for(n=0,u=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),$g(t,e,h,!1,!1)&&(E+=t.dump,o+=E));t.tag=a,t.dump="{"+o+"}"}function H6e(t,e,r,o){var a="",n=t.tag,u=Object.keys(r),A,p,h,E,I,v;if(t.sortKeys===!0)u.sort();else if(typeof t.sortKeys=="function")u.sort(t.sortKeys);else if(t.sortKeys)throw new tI("sortKeys must be a boolean or a function");for(A=0,p=u.length;A1024,I&&(t.dump&&$w===t.dump.charCodeAt(0)?v+="?":v+="? "),v+=t.dump,I&&(v+=ET(t,e)),$g(t,e+1,E,!0,I)&&(t.dump&&$w===t.dump.charCodeAt(0)?v+=":":v+=": ",v+=t.dump,a+=v));t.tag=n,t.dump=a||"{}"}function kK(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function $g(t,e,r,o,a,n){t.tag=null,t.dump=r,kK(t,r,!1)||kK(t,r,!0);var u=QK.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(H6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(_6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(U6e(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(M6e(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&N6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new tI("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function q6e(t,e){var r=[],o=[],a,n;for(CT(t,r,o),a=0,n=o.length;a{"use strict";var VD=BK(),KK=WK();function JD(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}ki.exports.Type=os();ki.exports.Schema=Jg();ki.exports.FAILSAFE_SCHEMA=HD();ki.exports.JSON_SCHEMA=pT();ki.exports.CORE_SCHEMA=hT();ki.exports.DEFAULT_SAFE_SCHEMA=py();ki.exports.DEFAULT_FULL_SCHEMA=Xw();ki.exports.load=VD.load;ki.exports.loadAll=VD.loadAll;ki.exports.safeLoad=VD.safeLoad;ki.exports.safeLoadAll=VD.safeLoadAll;ki.exports.dump=KK.dump;ki.exports.safeDump=KK.safeDump;ki.exports.YAMLException=Ay();ki.exports.MINIMAL_SCHEMA=HD();ki.exports.SAFE_SCHEMA=py();ki.exports.DEFAULT_SCHEMA=Xw();ki.exports.scan=JD("scan");ki.exports.parse=JD("parse");ki.exports.compose=JD("compose");ki.exports.addConstructor=JD("addConstructor")});var zK=_((pxt,JK)=>{"use strict";var G6e=VK();JK.exports=G6e});var ZK=_((hxt,XK)=>{"use strict";function Y6e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function ed(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,ed)}Y6e(ed,Error);ed.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I({[pt]:Le})))},fe=function($){return $},ce=function($){return $},me=sa("correct indentation"),he=" ",Be=Qn(" ",!1),we=function($){return $.length===nr*It},g=function($){return $.length===(nr+1)*It},Ee=function(){return nr++,!0},Se=function(){return nr--,!0},le=function(){return SA()},ne=sa("pseudostring"),ee=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,Ie=hi(["\r",` +`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),Fe=/^[^\r\n\t ,\][{}:#"']/,At=hi(["\r",` +`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),H=function(){return SA().replace(/^ *| *$/g,"")},at="--",Re=Qn("--",!1),ke=/^[a-zA-Z\/0-9]/,xe=hi([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),He=/^[^\r\n\t :,]/,Te=hi(["\r",` +`," "," ",":",","],!0,!1),Je="null",qe=Qn("null",!1),b=function(){return null},w="true",P=Qn("true",!1),y=function(){return!0},F="false",z=Qn("false",!1),X=function(){return!1},Z=sa("string"),ie='"',Pe=Qn('"',!1),Ne=function(){return""},ot=function($){return $},dt=function($){return $.join("")},jt=/^[^"\\\0-\x1F\x7F]/,$t=hi(['"',"\\",["\0",""],"\x7F"],!0,!1),bt='\\"',an=Qn('\\"',!1),Qr=function(){return'"'},mr="\\\\",br=Qn("\\\\",!1),Wr=function(){return"\\"},Kn="\\/",Ns=Qn("\\/",!1),Ti=function(){return"/"},ps="\\b",io=Qn("\\b",!1),Pi=function(){return"\b"},Ls="\\f",so=Qn("\\f",!1),cc=function(){return"\f"},cu="\\n",lp=Qn("\\n",!1),cp=function(){return` +`},Os="\\r",Dn=Qn("\\r",!1),oo=function(){return"\r"},Ms="\\t",ml=Qn("\\t",!1),yl=function(){return" "},ao="\\u",Vn=Qn("\\u",!1),On=function($,ye,Le,pt){return String.fromCharCode(parseInt(`0x${$}${ye}${Le}${pt}`))},Ni=/^[0-9a-fA-F]/,Mn=hi([["0","9"],["a","f"],["A","F"]],!1,!1),_i=sa("blank space"),tr=/^[ \t]/,Oe=hi([" "," "],!1,!1),ii=sa("white space"),Ma=/^[ \t\n\r]/,hr=hi([" "," ",` `,"\r"],!1,!1),uc=`\r `,uu=Qn(`\r `,!1),Ac=` `,El=Qn(` -`,!1),vA="\r",Au=Qn("\r",!1),Ce=0,Tt=0,fc=[{line:1,column:1}],Hi=0,fu=[],Yt=0,Cl;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function DA(){return t.substring(Tt,Ce)}function cp(){return _o(Tt,Ce)}function pc($,me){throw me=me!==void 0?me:_o(Tt,Ce),gc([sa($)],t.substring(Tt,Ce),me)}function PA($,me){throw me=me!==void 0?me:_o(Tt,Ce),lo($,me)}function Qn($,me){return{type:"literal",text:$,ignoreCase:me}}function hi($,me,Le){return{type:"class",parts:$,inverted:me,ignoreCase:Le}}function hc(){return{type:"any"}}function SA(){return{type:"end"}}function sa($){return{type:"other",description:$}}function Li($){var me=fc[$],Le;if(me)return me;for(Le=$-1;!fc[Le];)Le--;for(me=fc[Le],me={line:me.line,column:me.column};Le<$;)t.charCodeAt(Le)===10?(me.line++,me.column=1):me.column++,Le++;return fc[$]=me,me}function _o($,me){var Le=Li($),ft=Li(me);return{start:{offset:$,line:Le.line,column:Le.column},end:{offset:me,line:ft.line,column:ft.column}}}function Ze($){CeHi&&(Hi=Ce,fu=[]),fu.push($))}function lo($,me){return new $g($,null,null,me)}function gc($,me,Le){return new $g($g.buildMessage($,me),$,me,Le)}function pu(){var $;return $=xA(),$}function ji(){var $,me,Le;for($=Ce,me=[],Le=hu();Le!==r;)me.push(Le),Le=hu();return me!==r&&(Tt=$,me=n(me)),$=me,$}function hu(){var $,me,Le,ft,pt;return $=Ce,me=hs(),me!==r?(t.charCodeAt(Ce)===45?(Le=u,Ce++):(Le=r,Yt===0&&Ze(A)),Le!==r?(ft=Pn(),ft!==r?(pt=dc(),pt!==r?(Tt=$,me=p(pt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$}function xA(){var $,me,Le;for($=Ce,me=[],Le=Ua();Le!==r;)me.push(Le),Le=Ua();return me!==r&&(Tt=$,me=h(me)),$=me,$}function Ua(){var $,me,Le,ft,pt,Rt,er,Zr,qi;if($=Ce,me=Pn(),me===r&&(me=null),me!==r){if(Le=Ce,t.charCodeAt(Ce)===35?(ft=E,Ce++):(ft=r,Yt===0&&Ze(I)),ft!==r){if(pt=[],Rt=Ce,er=Ce,Yt++,Zr=tt(),Yt--,Zr===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?(Zr=t.charAt(Ce),Ce++):(Zr=r,Yt===0&&Ze(v)),Zr!==r?(er=[er,Zr],Rt=er):(Ce=Rt,Rt=r)):(Ce=Rt,Rt=r),Rt!==r)for(;Rt!==r;)pt.push(Rt),Rt=Ce,er=Ce,Yt++,Zr=tt(),Yt--,Zr===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?(Zr=t.charAt(Ce),Ce++):(Zr=r,Yt===0&&Ze(v)),Zr!==r?(er=[er,Zr],Rt=er):(Ce=Rt,Rt=r)):(Ce=Rt,Rt=r);else pt=r;pt!==r?(ft=[ft,pt],Le=ft):(Ce=Le,Le=r)}else Ce=Le,Le=r;if(Le===r&&(Le=null),Le!==r){if(ft=[],pt=We(),pt!==r)for(;pt!==r;)ft.push(pt),pt=We();else ft=r;ft!==r?(Tt=$,me=b(),$=me):(Ce=$,$=r)}else Ce=$,$=r}else Ce=$,$=r;if($===r&&($=Ce,me=hs(),me!==r?(Le=oa(),Le!==r?(ft=Pn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(Ce)===58?(pt=C,Ce++):(pt=r,Yt===0&&Ze(T)),pt!==r?(Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(er=dc(),er!==r?(Tt=$,me=L(Le,er),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,me=hs(),me!==r?(Le=co(),Le!==r?(ft=Pn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(Ce)===58?(pt=C,Ce++):(pt=r,Yt===0&&Ze(T)),pt!==r?(Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(er=dc(),er!==r?(Tt=$,me=L(Le,er),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))){if($=Ce,me=hs(),me!==r)if(Le=co(),Le!==r)if(ft=Pn(),ft!==r)if(pt=aa(),pt!==r){if(Rt=[],er=We(),er!==r)for(;er!==r;)Rt.push(er),er=We();else Rt=r;Rt!==r?(Tt=$,me=L(Le,pt),$=me):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;if($===r)if($=Ce,me=hs(),me!==r)if(Le=co(),Le!==r){if(ft=[],pt=Ce,Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?(Zr=Pn(),Zr===r&&(Zr=null),Zr!==r?(qi=co(),qi!==r?(Tt=pt,Rt=te(Le,qi),pt=Rt):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r),pt!==r)for(;pt!==r;)ft.push(pt),pt=Ce,Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?(Zr=Pn(),Zr===r&&(Zr=null),Zr!==r?(qi=co(),qi!==r?(Tt=pt,Rt=te(Le,qi),pt=Rt):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r);else ft=r;ft!==r?(pt=Pn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(Rt=C,Ce++):(Rt=r,Yt===0&&Ze(T)),Rt!==r?(er=Pn(),er===r&&(er=null),er!==r?(Zr=dc(),Zr!==r?(Tt=$,me=le(Le,ft,Zr),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r}return $}function dc(){var $,me,Le,ft,pt,Rt,er;if($=Ce,me=Ce,Yt++,Le=Ce,ft=tt(),ft!==r?(pt=_t(),pt!==r?(t.charCodeAt(Ce)===45?(Rt=u,Ce++):(Rt=r,Yt===0&&Ze(A)),Rt!==r?(er=Pn(),er!==r?(ft=[ft,pt,Rt,er],Le=ft):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r),Yt--,Le!==r?(Ce=me,me=void 0):me=r,me!==r?(Le=We(),Le!==r?(ft=Fn(),ft!==r?(pt=ji(),pt!==r?(Rt=Ci(),Rt!==r?(Tt=$,me=pe(pt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,me=tt(),me!==r?(Le=Fn(),Le!==r?(ft=xA(),ft!==r?(pt=Ci(),pt!==r?(Tt=$,me=pe(ft),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))if($=Ce,me=Us(),me!==r){if(Le=[],ft=We(),ft!==r)for(;ft!==r;)Le.push(ft),ft=We();else Le=r;Le!==r?(Tt=$,me=Ae(me),$=me):(Ce=$,$=r)}else Ce=$,$=r;return $}function hs(){var $,me,Le;for(Yt++,$=Ce,me=[],t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));Le!==r;)me.push(Le),t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));return me!==r?(Tt=Ce,Le=Pe(me),Le?Le=void 0:Le=r,Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)):(Ce=$,$=r),Yt--,$===r&&(me=r,Yt===0&&Ze(ye)),$}function _t(){var $,me,Le;for($=Ce,me=[],t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));Le!==r;)me.push(Le),t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));return me!==r?(Tt=Ce,Le=g(me),Le?Le=void 0:Le=r,Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)):(Ce=$,$=r),$}function Fn(){var $;return Tt=Ce,$=Ee(),$?$=void 0:$=r,$}function Ci(){var $;return Tt=Ce,$=De(),$?$=void 0:$=r,$}function oa(){var $;return $=ds(),$===r&&($=la()),$}function co(){var $,me,Le;if($=ds(),$===r){if($=Ce,me=[],Le=Ho(),Le!==r)for(;Le!==r;)me.push(Le),Le=Ho();else me=r;me!==r&&(Tt=$,me=ce()),$=me}return $}function Us(){var $;return $=wi(),$===r&&($=gs(),$===r&&($=ds(),$===r&&($=la()))),$}function aa(){var $;return $=wi(),$===r&&($=ds(),$===r&&($=Ho())),$}function la(){var $,me,Le,ft,pt,Rt;if(Yt++,$=Ce,ee.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Ie)),me!==r){for(Le=[],ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(ke.test(t.charAt(Ce))?(Rt=t.charAt(Ce),Ce++):(Rt=r,Yt===0&&Ze(ht)),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);ft!==r;)Le.push(ft),ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(ke.test(t.charAt(Ce))?(Rt=t.charAt(Ce),Ce++):(Rt=r,Yt===0&&Ze(ht)),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);Le!==r?(Tt=$,me=H(),$=me):(Ce=$,$=r)}else Ce=$,$=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(ne)),$}function Ho(){var $,me,Le,ft,pt;if($=Ce,t.substr(Ce,2)===lt?(me=lt,Ce+=2):(me=r,Yt===0&&Ze(Re)),me===r&&(me=null),me!==r)if(Qe.test(t.charAt(Ce))?(Le=t.charAt(Ce),Ce++):(Le=r,Yt===0&&Ze(be)),Le!==r){for(ft=[],_e.test(t.charAt(Ce))?(pt=t.charAt(Ce),Ce++):(pt=r,Yt===0&&Ze(Te));pt!==r;)ft.push(pt),_e.test(t.charAt(Ce))?(pt=t.charAt(Ce),Ce++):(pt=r,Yt===0&&Ze(Te));ft!==r?(Tt=$,me=H(),$=me):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;return $}function wi(){var $,me;return $=Ce,t.substr(Ce,4)===Je?(me=Je,Ce+=4):(me=r,Yt===0&&Ze(He)),me!==r&&(Tt=$,me=x()),$=me,$}function gs(){var $,me;return $=Ce,t.substr(Ce,4)===w?(me=w,Ce+=4):(me=r,Yt===0&&Ze(S)),me!==r&&(Tt=$,me=y()),$=me,$===r&&($=Ce,t.substr(Ce,5)===F?(me=F,Ce+=5):(me=r,Yt===0&&Ze(z)),me!==r&&(Tt=$,me=X()),$=me),$}function ds(){var $,me,Le,ft;return Yt++,$=Ce,t.charCodeAt(Ce)===34?(me=ie,Ce++):(me=r,Yt===0&&Ze(Se)),me!==r?(t.charCodeAt(Ce)===34?(Le=ie,Ce++):(Le=r,Yt===0&&Ze(Se)),Le!==r?(Tt=$,me=Ne(),$=me):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,t.charCodeAt(Ce)===34?(me=ie,Ce++):(me=r,Yt===0&&Ze(Se)),me!==r?(Le=ms(),Le!==r?(t.charCodeAt(Ce)===34?(ft=ie,Ce++):(ft=r,Yt===0&&Ze(Se)),ft!==r?(Tt=$,me=ot(Le),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)),Yt--,$===r&&(me=r,Yt===0&&Ze(Z)),$}function ms(){var $,me,Le;if($=Ce,me=[],Le=_s(),Le!==r)for(;Le!==r;)me.push(Le),Le=_s();else me=r;return me!==r&&(Tt=$,me=dt(me)),$=me,$}function _s(){var $,me,Le,ft,pt,Rt;return jt.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze($t)),$===r&&($=Ce,t.substr(Ce,2)===xt?(me=xt,Ce+=2):(me=r,Yt===0&&Ze(an)),me!==r&&(Tt=$,me=Qr()),$=me,$===r&&($=Ce,t.substr(Ce,2)===mr?(me=mr,Ce+=2):(me=r,Yt===0&&Ze(xr)),me!==r&&(Tt=$,me=Wr()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Vn?(me=Vn,Ce+=2):(me=r,Yt===0&&Ze(Ns)),me!==r&&(Tt=$,me=Ri()),$=me,$===r&&($=Ce,t.substr(Ce,2)===ps?(me=ps,Ce+=2):(me=r,Yt===0&&Ze(io)),me!==r&&(Tt=$,me=Si()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Ls?(me=Ls,Ce+=2):(me=r,Yt===0&&Ze(so)),me!==r&&(Tt=$,me=cc()),$=me,$===r&&($=Ce,t.substr(Ce,2)===cu?(me=cu,Ce+=2):(me=r,Yt===0&&Ze(ap)),me!==r&&(Tt=$,me=lp()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Ms?(me=Ms,Ce+=2):(me=r,Yt===0&&Ze(Dn)),me!==r&&(Tt=$,me=oo()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Os?(me=Os,Ce+=2):(me=r,Yt===0&&Ze(ml)),me!==r&&(Tt=$,me=yl()),$=me,$===r&&($=Ce,t.substr(Ce,2)===ao?(me=ao,Ce+=2):(me=r,Yt===0&&Ze(Kn)),me!==r?(Le=Un(),Le!==r?(ft=Un(),ft!==r?(pt=Un(),pt!==r?(Rt=Un(),Rt!==r?(Tt=$,me=Mn(Le,ft,pt,Rt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)))))))))),$}function Un(){var $;return Ni.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze(On)),$}function Pn(){var $,me;if(Yt++,$=[],tr.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Me)),me!==r)for(;me!==r;)$.push(me),tr.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Me));else $=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(_i)),$}function ys(){var $,me;if(Yt++,$=[],Oa.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(hr)),me!==r)for(;me!==r;)$.push(me),Oa.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(hr));else $=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(ii)),$}function We(){var $,me,Le,ft,pt,Rt;if($=Ce,me=tt(),me!==r){for(Le=[],ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(Rt=tt(),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);ft!==r;)Le.push(ft),ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(Rt=tt(),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)}else Ce=$,$=r;return $}function tt(){var $;return t.substr(Ce,2)===uc?($=uc,Ce+=2):($=r,Yt===0&&Ze(uu)),$===r&&(t.charCodeAt(Ce)===10?($=Ac,Ce++):($=r,Yt===0&&Ze(El)),$===r&&(t.charCodeAt(Ce)===13?($=vA,Ce++):($=r,Yt===0&&Ze(Au)))),$}let It=2,nr=0;if(Cl=a(),Cl!==r&&Ce===t.length)return Cl;throw Cl!==r&&Ce"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>iK(t[e])):!1}function DR(t,e,r){if(t===null)return`null +`,!1),DA="\r",Au=Qn("\r",!1),Ce=0,Rt=0,fc=[{line:1,column:1}],Hi=0,fu=[],Yt=0,Cl;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function SA(){return t.substring(Rt,Ce)}function up(){return _o(Rt,Ce)}function pc($,ye){throw ye=ye!==void 0?ye:_o(Rt,Ce),gc([sa($)],t.substring(Rt,Ce),ye)}function PA($,ye){throw ye=ye!==void 0?ye:_o(Rt,Ce),lo($,ye)}function Qn($,ye){return{type:"literal",text:$,ignoreCase:ye}}function hi($,ye,Le){return{type:"class",parts:$,inverted:ye,ignoreCase:Le}}function hc(){return{type:"any"}}function bA(){return{type:"end"}}function sa($){return{type:"other",description:$}}function Li($){var ye=fc[$],Le;if(ye)return ye;for(Le=$-1;!fc[Le];)Le--;for(ye=fc[Le],ye={line:ye.line,column:ye.column};Le<$;)t.charCodeAt(Le)===10?(ye.line++,ye.column=1):ye.column++,Le++;return fc[$]=ye,ye}function _o($,ye){var Le=Li($),pt=Li(ye);return{start:{offset:$,line:Le.line,column:Le.column},end:{offset:ye,line:pt.line,column:pt.column}}}function Ze($){CeHi&&(Hi=Ce,fu=[]),fu.push($))}function lo($,ye){return new ed($,null,null,ye)}function gc($,ye,Le){return new ed(ed.buildMessage($,ye),$,ye,Le)}function pu(){var $;return $=xA(),$}function qi(){var $,ye,Le;for($=Ce,ye=[],Le=hu();Le!==r;)ye.push(Le),Le=hu();return ye!==r&&(Rt=$,ye=n(ye)),$=ye,$}function hu(){var $,ye,Le,pt,ht;return $=Ce,ye=hs(),ye!==r?(t.charCodeAt(Ce)===45?(Le=u,Ce++):(Le=r,Yt===0&&Ze(A)),Le!==r?(pt=Sn(),pt!==r?(ht=dc(),ht!==r?(Rt=$,ye=p(ht),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$}function xA(){var $,ye,Le;for($=Ce,ye=[],Le=Ua();Le!==r;)ye.push(Le),Le=Ua();return ye!==r&&(Rt=$,ye=h(ye)),$=ye,$}function Ua(){var $,ye,Le,pt,ht,Tt,er,$r,ji;if($=Ce,ye=Sn(),ye===r&&(ye=null),ye!==r){if(Le=Ce,t.charCodeAt(Ce)===35?(pt=E,Ce++):(pt=r,Yt===0&&Ze(I)),pt!==r){if(ht=[],Tt=Ce,er=Ce,Yt++,$r=tt(),Yt--,$r===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?($r=t.charAt(Ce),Ce++):($r=r,Yt===0&&Ze(v)),$r!==r?(er=[er,$r],Tt=er):(Ce=Tt,Tt=r)):(Ce=Tt,Tt=r),Tt!==r)for(;Tt!==r;)ht.push(Tt),Tt=Ce,er=Ce,Yt++,$r=tt(),Yt--,$r===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?($r=t.charAt(Ce),Ce++):($r=r,Yt===0&&Ze(v)),$r!==r?(er=[er,$r],Tt=er):(Ce=Tt,Tt=r)):(Ce=Tt,Tt=r);else ht=r;ht!==r?(pt=[pt,ht],Le=pt):(Ce=Le,Le=r)}else Ce=Le,Le=r;if(Le===r&&(Le=null),Le!==r){if(pt=[],ht=We(),ht!==r)for(;ht!==r;)pt.push(ht),ht=We();else pt=r;pt!==r?(Rt=$,ye=x(),$=ye):(Ce=$,$=r)}else Ce=$,$=r}else Ce=$,$=r;if($===r&&($=Ce,ye=hs(),ye!==r?(Le=oa(),Le!==r?(pt=Sn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(ht=C,Ce++):(ht=r,Yt===0&&Ze(R)),ht!==r?(Tt=Sn(),Tt===r&&(Tt=null),Tt!==r?(er=dc(),er!==r?(Rt=$,ye=L(Le,er),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,ye=hs(),ye!==r?(Le=co(),Le!==r?(pt=Sn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(ht=C,Ce++):(ht=r,Yt===0&&Ze(R)),ht!==r?(Tt=Sn(),Tt===r&&(Tt=null),Tt!==r?(er=dc(),er!==r?(Rt=$,ye=L(Le,er),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))){if($=Ce,ye=hs(),ye!==r)if(Le=co(),Le!==r)if(pt=Sn(),pt!==r)if(ht=aa(),ht!==r){if(Tt=[],er=We(),er!==r)for(;er!==r;)Tt.push(er),er=We();else Tt=r;Tt!==r?(Rt=$,ye=L(Le,ht),$=ye):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;if($===r)if($=Ce,ye=hs(),ye!==r)if(Le=co(),Le!==r){if(pt=[],ht=Ce,Tt=Sn(),Tt===r&&(Tt=null),Tt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?($r=Sn(),$r===r&&($r=null),$r!==r?(ji=co(),ji!==r?(Rt=ht,Tt=te(Le,ji),ht=Tt):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r),ht!==r)for(;ht!==r;)pt.push(ht),ht=Ce,Tt=Sn(),Tt===r&&(Tt=null),Tt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?($r=Sn(),$r===r&&($r=null),$r!==r?(ji=co(),ji!==r?(Rt=ht,Tt=te(Le,ji),ht=Tt):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r);else pt=r;pt!==r?(ht=Sn(),ht===r&&(ht=null),ht!==r?(t.charCodeAt(Ce)===58?(Tt=C,Ce++):(Tt=r,Yt===0&&Ze(R)),Tt!==r?(er=Sn(),er===r&&(er=null),er!==r?($r=dc(),$r!==r?(Rt=$,ye=ae(Le,pt,$r),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r}return $}function dc(){var $,ye,Le,pt,ht,Tt,er;if($=Ce,ye=Ce,Yt++,Le=Ce,pt=tt(),pt!==r?(ht=_t(),ht!==r?(t.charCodeAt(Ce)===45?(Tt=u,Ce++):(Tt=r,Yt===0&&Ze(A)),Tt!==r?(er=Sn(),er!==r?(pt=[pt,ht,Tt,er],Le=pt):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r),Yt--,Le!==r?(Ce=ye,ye=void 0):ye=r,ye!==r?(Le=We(),Le!==r?(pt=Fn(),pt!==r?(ht=qi(),ht!==r?(Tt=Ci(),Tt!==r?(Rt=$,ye=fe(ht),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,ye=tt(),ye!==r?(Le=Fn(),Le!==r?(pt=xA(),pt!==r?(ht=Ci(),ht!==r?(Rt=$,ye=fe(pt),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))if($=Ce,ye=Us(),ye!==r){if(Le=[],pt=We(),pt!==r)for(;pt!==r;)Le.push(pt),pt=We();else Le=r;Le!==r?(Rt=$,ye=ce(ye),$=ye):(Ce=$,$=r)}else Ce=$,$=r;return $}function hs(){var $,ye,Le;for(Yt++,$=Ce,ye=[],t.charCodeAt(Ce)===32?(Le=he,Ce++):(Le=r,Yt===0&&Ze(Be));Le!==r;)ye.push(Le),t.charCodeAt(Ce)===32?(Le=he,Ce++):(Le=r,Yt===0&&Ze(Be));return ye!==r?(Rt=Ce,Le=we(ye),Le?Le=void 0:Le=r,Le!==r?(ye=[ye,Le],$=ye):(Ce=$,$=r)):(Ce=$,$=r),Yt--,$===r&&(ye=r,Yt===0&&Ze(me)),$}function _t(){var $,ye,Le;for($=Ce,ye=[],t.charCodeAt(Ce)===32?(Le=he,Ce++):(Le=r,Yt===0&&Ze(Be));Le!==r;)ye.push(Le),t.charCodeAt(Ce)===32?(Le=he,Ce++):(Le=r,Yt===0&&Ze(Be));return ye!==r?(Rt=Ce,Le=g(ye),Le?Le=void 0:Le=r,Le!==r?(ye=[ye,Le],$=ye):(Ce=$,$=r)):(Ce=$,$=r),$}function Fn(){var $;return Rt=Ce,$=Ee(),$?$=void 0:$=r,$}function Ci(){var $;return Rt=Ce,$=Se(),$?$=void 0:$=r,$}function oa(){var $;return $=ds(),$===r&&($=la()),$}function co(){var $,ye,Le;if($=ds(),$===r){if($=Ce,ye=[],Le=Ho(),Le!==r)for(;Le!==r;)ye.push(Le),Le=Ho();else ye=r;ye!==r&&(Rt=$,ye=le()),$=ye}return $}function Us(){var $;return $=wi(),$===r&&($=gs(),$===r&&($=ds(),$===r&&($=la()))),$}function aa(){var $;return $=wi(),$===r&&($=ds(),$===r&&($=Ho())),$}function la(){var $,ye,Le,pt,ht,Tt;if(Yt++,$=Ce,ee.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(Ie)),ye!==r){for(Le=[],pt=Ce,ht=Sn(),ht===r&&(ht=null),ht!==r?(Fe.test(t.charAt(Ce))?(Tt=t.charAt(Ce),Ce++):(Tt=r,Yt===0&&Ze(At)),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);pt!==r;)Le.push(pt),pt=Ce,ht=Sn(),ht===r&&(ht=null),ht!==r?(Fe.test(t.charAt(Ce))?(Tt=t.charAt(Ce),Ce++):(Tt=r,Yt===0&&Ze(At)),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);Le!==r?(Rt=$,ye=H(),$=ye):(Ce=$,$=r)}else Ce=$,$=r;return Yt--,$===r&&(ye=r,Yt===0&&Ze(ne)),$}function Ho(){var $,ye,Le,pt,ht;if($=Ce,t.substr(Ce,2)===at?(ye=at,Ce+=2):(ye=r,Yt===0&&Ze(Re)),ye===r&&(ye=null),ye!==r)if(ke.test(t.charAt(Ce))?(Le=t.charAt(Ce),Ce++):(Le=r,Yt===0&&Ze(xe)),Le!==r){for(pt=[],He.test(t.charAt(Ce))?(ht=t.charAt(Ce),Ce++):(ht=r,Yt===0&&Ze(Te));ht!==r;)pt.push(ht),He.test(t.charAt(Ce))?(ht=t.charAt(Ce),Ce++):(ht=r,Yt===0&&Ze(Te));pt!==r?(Rt=$,ye=H(),$=ye):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;return $}function wi(){var $,ye;return $=Ce,t.substr(Ce,4)===Je?(ye=Je,Ce+=4):(ye=r,Yt===0&&Ze(qe)),ye!==r&&(Rt=$,ye=b()),$=ye,$}function gs(){var $,ye;return $=Ce,t.substr(Ce,4)===w?(ye=w,Ce+=4):(ye=r,Yt===0&&Ze(P)),ye!==r&&(Rt=$,ye=y()),$=ye,$===r&&($=Ce,t.substr(Ce,5)===F?(ye=F,Ce+=5):(ye=r,Yt===0&&Ze(z)),ye!==r&&(Rt=$,ye=X()),$=ye),$}function ds(){var $,ye,Le,pt;return Yt++,$=Ce,t.charCodeAt(Ce)===34?(ye=ie,Ce++):(ye=r,Yt===0&&Ze(Pe)),ye!==r?(t.charCodeAt(Ce)===34?(Le=ie,Ce++):(Le=r,Yt===0&&Ze(Pe)),Le!==r?(Rt=$,ye=Ne(),$=ye):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,t.charCodeAt(Ce)===34?(ye=ie,Ce++):(ye=r,Yt===0&&Ze(Pe)),ye!==r?(Le=ms(),Le!==r?(t.charCodeAt(Ce)===34?(pt=ie,Ce++):(pt=r,Yt===0&&Ze(Pe)),pt!==r?(Rt=$,ye=ot(Le),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)),Yt--,$===r&&(ye=r,Yt===0&&Ze(Z)),$}function ms(){var $,ye,Le;if($=Ce,ye=[],Le=_s(),Le!==r)for(;Le!==r;)ye.push(Le),Le=_s();else ye=r;return ye!==r&&(Rt=$,ye=dt(ye)),$=ye,$}function _s(){var $,ye,Le,pt,ht,Tt;return jt.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze($t)),$===r&&($=Ce,t.substr(Ce,2)===bt?(ye=bt,Ce+=2):(ye=r,Yt===0&&Ze(an)),ye!==r&&(Rt=$,ye=Qr()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===mr?(ye=mr,Ce+=2):(ye=r,Yt===0&&Ze(br)),ye!==r&&(Rt=$,ye=Wr()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Kn?(ye=Kn,Ce+=2):(ye=r,Yt===0&&Ze(Ns)),ye!==r&&(Rt=$,ye=Ti()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===ps?(ye=ps,Ce+=2):(ye=r,Yt===0&&Ze(io)),ye!==r&&(Rt=$,ye=Pi()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Ls?(ye=Ls,Ce+=2):(ye=r,Yt===0&&Ze(so)),ye!==r&&(Rt=$,ye=cc()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===cu?(ye=cu,Ce+=2):(ye=r,Yt===0&&Ze(lp)),ye!==r&&(Rt=$,ye=cp()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Os?(ye=Os,Ce+=2):(ye=r,Yt===0&&Ze(Dn)),ye!==r&&(Rt=$,ye=oo()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Ms?(ye=Ms,Ce+=2):(ye=r,Yt===0&&Ze(ml)),ye!==r&&(Rt=$,ye=yl()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===ao?(ye=ao,Ce+=2):(ye=r,Yt===0&&Ze(Vn)),ye!==r?(Le=Un(),Le!==r?(pt=Un(),pt!==r?(ht=Un(),ht!==r?(Tt=Un(),Tt!==r?(Rt=$,ye=On(Le,pt,ht,Tt),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)))))))))),$}function Un(){var $;return Ni.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze(Mn)),$}function Sn(){var $,ye;if(Yt++,$=[],tr.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(Oe)),ye!==r)for(;ye!==r;)$.push(ye),tr.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(Oe));else $=r;return Yt--,$===r&&(ye=r,Yt===0&&Ze(_i)),$}function ys(){var $,ye;if(Yt++,$=[],Ma.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(hr)),ye!==r)for(;ye!==r;)$.push(ye),Ma.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(hr));else $=r;return Yt--,$===r&&(ye=r,Yt===0&&Ze(ii)),$}function We(){var $,ye,Le,pt,ht,Tt;if($=Ce,ye=tt(),ye!==r){for(Le=[],pt=Ce,ht=Sn(),ht===r&&(ht=null),ht!==r?(Tt=tt(),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);pt!==r;)Le.push(pt),pt=Ce,ht=Sn(),ht===r&&(ht=null),ht!==r?(Tt=tt(),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);Le!==r?(ye=[ye,Le],$=ye):(Ce=$,$=r)}else Ce=$,$=r;return $}function tt(){var $;return t.substr(Ce,2)===uc?($=uc,Ce+=2):($=r,Yt===0&&Ze(uu)),$===r&&(t.charCodeAt(Ce)===10?($=Ac,Ce++):($=r,Yt===0&&Ze(El)),$===r&&(t.charCodeAt(Ce)===13?($=DA,Ce++):($=r,Yt===0&&Ze(Au)))),$}let It=2,nr=0;if(Cl=a(),Cl!==r&&Ce===t.length)return Cl;throw Cl!==r&&Ce"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>rV(t[e])):!1}function BT(t,e,r){if(t===null)return`null `;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} -`;if(typeof t=="string")return`${rK(t)} +`;if(typeof t=="string")return`${eV(t)} `;if(Array.isArray(t)){if(t.length===0)return`[] `;let o=" ".repeat(e);return` -${t.map(n=>`${o}- ${DR(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[o,a]=t instanceof XD?[t.data,!1]:[t,!0],n=" ".repeat(e),u=Object.keys(o);a&&u.sort((p,h)=>{let E=tK.indexOf(p),I=tK.indexOf(h);return E===-1&&I===-1?ph?1:0:E!==-1&&I===-1?-1:E===-1&&I!==-1?1:E-I});let A=u.filter(p=>!iK(o[p])).map((p,h)=>{let E=o[p],I=rK(p),v=DR(E,e+1,!0),b=h>0||r?n:"",C=I.length>1024?`? ${I} -${b}:`:`${I}:`,T=v.startsWith(` -`)?v:` ${v}`;return`${b}${C}${T}`}).join(e===0?` +${t.map(n=>`${o}- ${BT(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[o,a]=t instanceof zD?[t.data,!1]:[t,!0],n=" ".repeat(e),u=Object.keys(o);a&&u.sort((p,h)=>{let E=$K.indexOf(p),I=$K.indexOf(h);return E===-1&&I===-1?ph?1:0:E!==-1&&I===-1?-1:E===-1&&I!==-1?1:E-I});let A=u.filter(p=>!rV(o[p])).map((p,h)=>{let E=o[p],I=eV(p),v=BT(E,e+1,!0),x=h>0||r?n:"",C=I.length>1024?`? ${I} +${x}:`:`${I}:`,R=v.startsWith(` +`)?v:` ${v}`;return`${x}${C}${R}`}).join(e===0?` `:"")||` `;return r?` -${A}`:`${A}`}throw new Error(`Unsupported value type (${t})`)}function Ba(t){try{let e=DR(t,0,!1);return e!==` -`?e:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}function $6e(t){return t.endsWith(` +${A}`:`${A}`}throw new Error(`Unsupported value type (${t})`)}function Ba(t){try{let e=BT(t,0,!1);return e!==` +`?e:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}function V6e(t){return t.endsWith(` `)||(t+=` -`),(0,nK.parse)(t)}function tje(t){if(eje.test(t))return $6e(t);let e=(0,ZD.safeLoad)(t,{schema:ZD.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!="object")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return e}function Vi(t){return tje(t)}var ZD,nK,Z6e,tK,XD,eje,sK=Et(()=>{ZD=$e(ZV()),nK=$e(eK()),Z6e=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,tK=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],XD=class{constructor(e){this.data=e}};Ba.PreserveOrdering=XD;eje=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var tI={};Kt(tI,{parseResolution:()=>UD,parseShell:()=>LD,parseSyml:()=>Vi,stringifyArgument:()=>AR,stringifyArgumentSegment:()=>fR,stringifyArithmeticExpression:()=>OD,stringifyCommand:()=>uR,stringifyCommandChain:()=>cy,stringifyCommandChainThen:()=>cR,stringifyCommandLine:()=>MD,stringifyCommandLineThen:()=>lR,stringifyEnvSegment:()=>ND,stringifyRedirectArgument:()=>Kw,stringifyResolution:()=>_D,stringifyShell:()=>ly,stringifyShellLine:()=>ly,stringifySyml:()=>Ba,stringifyValueArgument:()=>Gg});var Nl=Et(()=>{iW();lW();sK()});var aK=_((Cbt,PR)=>{"use strict";var rje=t=>{let e=!1,r=!1,o=!1;for(let a=0;a{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=rje(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};PR.exports=oK;PR.exports.default=oK});var lK=_((wbt,nje)=>{nje.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var ed=_(Xa=>{"use strict";var uK=lK(),ju=process.env;Object.defineProperty(Xa,"_vendors",{value:uK.map(function(t){return t.constant})});Xa.name=null;Xa.isPR=null;uK.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(o){return cK(o)});if(Xa[t.constant]=r,r)switch(Xa.name=t.name,typeof t.pr){case"string":Xa.isPR=!!ju[t.pr];break;case"object":"env"in t.pr?Xa.isPR=t.pr.env in ju&&ju[t.pr.env]!==t.pr.ne:"any"in t.pr?Xa.isPR=t.pr.any.some(function(o){return!!ju[o]}):Xa.isPR=cK(t.pr);break;default:Xa.isPR=null}});Xa.isCI=!!(ju.CI||ju.CONTINUOUS_INTEGRATION||ju.BUILD_NUMBER||ju.RUN_ID||Xa.name);function cK(t){return typeof t=="string"?!!ju[t]:Object.keys(t).every(function(e){return ju[e]===t[e]})}});var Hn,cn,td,SR,$D,AK,xR,bR,eP=Et(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(Hn||(Hn={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(cn||(cn={}));td=-1,SR=/^(-h|--help)(?:=([0-9]+))?$/,$D=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,AK=/^-[a-zA-Z]{2,}$/,xR=/^([^=]+)=([\s\S]*)$/,bR=process.env.DEBUG_CLI==="1"});var it,my,tP,kR,rP=Et(()=>{eP();it=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},my=class extends Error{constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(o=>o.reason!==null&&o.reason===r[0].reason)){let[{reason:o}]=this.candidates;this.message=`${o} +`),(0,tV.parse)(t)}function z6e(t){if(J6e.test(t))return V6e(t);let e=(0,XD.safeLoad)(t,{schema:XD.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!="object")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return e}function Ki(t){return z6e(t)}var XD,tV,K6e,$K,zD,J6e,nV=Et(()=>{XD=$e(zK()),tV=$e(ZK()),K6e=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,$K=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],zD=class{constructor(e){this.data=e}};Ba.PreserveOrdering=zD;J6e=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var rI={};Vt(rI,{parseResolution:()=>MD,parseShell:()=>ND,parseSyml:()=>Ki,stringifyArgument:()=>cT,stringifyArgumentSegment:()=>uT,stringifyArithmeticExpression:()=>OD,stringifyCommand:()=>lT,stringifyCommandChain:()=>uy,stringifyCommandChainThen:()=>aT,stringifyCommandLine:()=>LD,stringifyCommandLineThen:()=>oT,stringifyEnvSegment:()=>TD,stringifyRedirectArgument:()=>Jw,stringifyResolution:()=>UD,stringifyShell:()=>cy,stringifyShellLine:()=>cy,stringifySyml:()=>Ba,stringifyValueArgument:()=>Yg});var Nl=Et(()=>{rW();oW();nV()});var sV=_((Ext,vT)=>{"use strict";var X6e=t=>{let e=!1,r=!1,o=!1;for(let a=0;a{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=X6e(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};vT.exports=iV;vT.exports.default=iV});var oV=_((Cxt,Z6e)=>{Z6e.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var td=_(Xa=>{"use strict";var lV=oV(),qu=process.env;Object.defineProperty(Xa,"_vendors",{value:lV.map(function(t){return t.constant})});Xa.name=null;Xa.isPR=null;lV.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(o){return aV(o)});if(Xa[t.constant]=r,r)switch(Xa.name=t.name,typeof t.pr){case"string":Xa.isPR=!!qu[t.pr];break;case"object":"env"in t.pr?Xa.isPR=t.pr.env in qu&&qu[t.pr.env]!==t.pr.ne:"any"in t.pr?Xa.isPR=t.pr.any.some(function(o){return!!qu[o]}):Xa.isPR=aV(t.pr);break;default:Xa.isPR=null}});Xa.isCI=!!(qu.CI||qu.CONTINUOUS_INTEGRATION||qu.BUILD_NUMBER||qu.RUN_ID||Xa.name);function aV(t){return typeof t=="string"?!!qu[t]:Object.keys(t).every(function(e){return qu[e]===t[e]})}});var Hn,cn,rd,DT,ZD,cV,ST,PT,$D=Et(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(Hn||(Hn={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(cn||(cn={}));rd=-1,DT=/^(-h|--help)(?:=([0-9]+))?$/,ZD=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,cV=/^-[a-zA-Z]{2,}$/,ST=/^([^=]+)=([\s\S]*)$/,PT=process.env.DEBUG_CLI==="1"});var it,yy,eS,bT,tS=Et(()=>{$D();it=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},yy=class extends Error{constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(o=>o.reason!==null&&o.reason===r[0].reason)){let[{reason:o}]=this.candidates;this.message=`${o} ${this.candidates.map(({usage:a})=>`$ ${a}`).join(` `)}`}else if(this.candidates.length===1){let[{usage:o}]=this.candidates;this.message=`Command not found; did you mean: $ ${o} -${kR(e)}`}else this.message=`Command not found; did you mean one of: +${bT(e)}`}else this.message=`Command not found; did you mean one of: ${this.candidates.map(({usage:o},a)=>`${`${a}.`.padStart(4)} ${o}`).join(` `)} -${kR(e)}`}},tP=class extends Error{constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: +${bT(e)}`}},eS=class extends Error{constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: ${this.usages.map((o,a)=>`${`${a}.`.padStart(4)} ${o}`).join(` `)} -${kR(e)}`}},kR=t=>`While running ${t.filter(e=>e!==Hn.EndOfInput&&e!==Hn.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function ije(t){let e=t.split(` +${bT(e)}`}},bT=t=>`While running ${t.filter(e=>e!==Hn.EndOfInput&&e!==Hn.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function $6e(t){let e=t.split(` `),r=e.filter(a=>a.match(/\S/)),o=r.length>0?r.reduce((a,n)=>Math.min(a,n.length-n.trimStart().length),Number.MAX_VALUE):0;return e.map(a=>a.slice(o).trimRight()).join(` `)}function Do(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` -`),t=ije(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 +`),t=$6e(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 `),t=t.replace(/\n(\n)?\n*/g,(o,a)=>a||" "),r&&(t=t.split(/\n/).map(o=>{let a=o.match(/^\s*[*-][\t ]+(.*)/);if(!a)return o.match(/(.{1,80})(?: |$)/g).join(` `);let n=o.length-o.trimStart().length;return a[1].match(new RegExp(`(.{1,${78-n}})(?: |$)`,"g")).map((u,A)=>" ".repeat(n)+(A===0?"- ":" ")+u).join(` `)}).join(` `)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(o,a,n)=>e.code(a+n+a)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(o,a,n)=>e.bold(a+n+a)),t?`${t} -`:""}var QR,fK,pK,FR=Et(()=>{QR=Array(80).fill("\u2501");for(let t=0;t<=24;++t)QR[QR.length-t]=`\x1B[38;5;${232+t}m\u2501`;fK={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<80-5?` ${QR.slice(t.length+5).join("")}`:":"}\x1B[0m`,bold:t=>`\x1B[1m${t}\x1B[22m`,error:t=>`\x1B[31m\x1B[1m${t}\x1B[22m\x1B[39m`,code:t=>`\x1B[36m${t}\x1B[39m`},pK={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Vo(t){return{...t,[rI]:!0}}function qu(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function nP(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,o,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=o!=="."||!e?`${o.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function nI(t,e){return e.length===1?new it(`${t}${nP(e[0],{mergeName:!0})}`):new it(`${t}: +`:""}var xT,uV,AV,kT=Et(()=>{xT=Array(80).fill("\u2501");for(let t=0;t<=24;++t)xT[xT.length-t]=`\x1B[38;5;${232+t}m\u2501`;uV={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<80-5?` ${xT.slice(t.length+5).join("")}`:":"}\x1B[0m`,bold:t=>`\x1B[1m${t}\x1B[22m`,error:t=>`\x1B[31m\x1B[1m${t}\x1B[22m\x1B[39m`,code:t=>`\x1B[36m${t}\x1B[39m`},AV={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Ko(t){return{...t,[nI]:!0}}function ju(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function rS(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,o,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=o!=="."||!e?`${o.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function iI(t,e){return e.length===1?new it(`${t}${rS(e[0],{mergeName:!0})}`):new it(`${t}: ${e.map(r=>` -- ${nP(r)}`).join("")}`)}function rd(t,e,r){if(typeof r>"u")return e;let o=[],a=[],n=A=>{let p=e;return e=A,n.bind(null,p)};if(!r(e,{errors:o,coercions:a,coercion:n}))throw nI(`Invalid value for ${t}`,o);for(let[,A]of a)A();return e}var rI,yf=Et(()=>{rP();rI=Symbol("clipanion/isOption")});var Ko={};Kt(Ko,{KeyRelationship:()=>Gu,TypeAssertionError:()=>Wp,applyCascade:()=>oI,as:()=>Bje,assert:()=>Cje,assertWithErrors:()=>wje,cascade:()=>aP,fn:()=>vje,hasAtLeastOneKey:()=>UR,hasExactLength:()=>yK,hasForbiddenKeys:()=>qje,hasKeyRelationship:()=>lI,hasMaxLength:()=>Pje,hasMinLength:()=>Dje,hasMutuallyExclusiveKeys:()=>Gje,hasRequiredKeys:()=>jje,hasUniqueItems:()=>Sje,isArray:()=>iP,isAtLeast:()=>MR,isAtMost:()=>kje,isBase64:()=>Oje,isBoolean:()=>fje,isDate:()=>hje,isDict:()=>mje,isEnum:()=>Vs,isHexColor:()=>Mje,isISO8601:()=>Lje,isInExclusiveRange:()=>Fje,isInInclusiveRange:()=>Qje,isInstanceOf:()=>Eje,isInteger:()=>OR,isJSON:()=>Uje,isLiteral:()=>gK,isLowerCase:()=>Tje,isMap:()=>dje,isNegative:()=>xje,isNullable:()=>Hje,isNumber:()=>NR,isObject:()=>dK,isOneOf:()=>LR,isOptional:()=>_je,isPartial:()=>yje,isPayload:()=>pje,isPositive:()=>bje,isRecord:()=>oP,isSet:()=>gje,isString:()=>Ey,isTuple:()=>sP,isUUID4:()=>Nje,isUnknown:()=>RR,isUpperCase:()=>Rje,makeTrait:()=>mK,makeValidator:()=>Hr,matchesRegExp:()=>sI,softAssert:()=>Ije});function jn(t){return t===null?"null":t===void 0?"undefined":t===""?"an empty string":typeof t=="symbol"?`<${t.toString()}>`:Array.isArray(t)?"an array":JSON.stringify(t)}function yy(t,e){if(t.length===0)return"nothing";if(t.length===1)return jn(t[0]);let r=t.slice(0,-1),o=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>jn(n)).join(", ")}${a}${jn(o)}`}function Yp(t,e){var r,o,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:sje.test(e)?`${(o=t?.p)!==null&&o!==void 0?o:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function TR(t,e,r){return t===1?e:r}function pr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function uje(t,e){return r=>{t[e]=r}}function Yu(t,e){return r=>{let o=t[e];return t[e]=r,Yu(t,e).bind(null,o)}}function iI(t,e,r){let o=()=>(t(r()),a),a=()=>(t(e),o);return o}function RR(){return Hr({test:(t,e)=>!0})}function gK(t){return Hr({test:(e,r)=>e!==t?pr(r,`Expected ${jn(t)} (got ${jn(e)})`):!0})}function Ey(){return Hr({test:(t,e)=>typeof t!="string"?pr(e,`Expected a string (got ${jn(t)})`):!0})}function Vs(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),o=new Set(e);return o.size===1?gK([...o][0]):Hr({test:(a,n)=>o.has(a)?!0:r?pr(n,`Expected one of ${yy(e,"or")} (got ${jn(a)})`):pr(n,`Expected a valid enumeration value (got ${jn(a)})`)})}function fje(){return Hr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o=Aje.get(t);if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a boolean (got ${jn(t)})`)}return!0}})}function NR(){return Hr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)o=a;else return pr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a number (got ${jn(t)})`)}return!0}})}function pje(t){return Hr({test:(e,r)=>{var o;if(typeof r?.coercions>"u")return pr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return pr(r,"Unbound coercion result");if(typeof e!="string")return pr(r,`Expected a string (got ${jn(e)})`);let a;try{a=JSON.parse(e)}catch{return pr(r,`Expected a JSON string (got ${jn(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Yu(n,"value")}))?(r.coercions.push([(o=r.p)!==null&&o!==void 0?o:".",r.coercion.bind(null,n.value)]),!0):!1}})}function hje(){return Hr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"&&hK.test(t))o=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))o=new Date(a*1e3);else return pr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a date (got ${jn(t)})`)}return!0}})}function iP(t,{delimiter:e}={}){return Hr({test:(r,o)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof o?.coercions<"u"){if(typeof o?.coercion>"u")return pr(o,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return pr(o,`Expected an array (got ${jn(r)})`);let u=!0;for(let A=0,p=r.length;A{var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,I)=>E!==A[I])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",iI(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Yu(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",iI(a.coercion,o,()=>new Set(A.value))]),!0):!1}return pr(a,`Expected a set (got ${jn(o)})`)}})}function dje(t,e){let r=iP(sP([t,e])),o=oP(e,{keys:t});return Hr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let I=()=>E.some((v,b)=>v[0]!==h[b][0]||v[1]!==h[b][1])?new Map(E):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",iI(n.coercion,a,I)]),!0}else{let h=!0;for(let[E,I]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(I,Object.assign(Object.assign({},n),{p:Yp(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",iI(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Yu(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",iI(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return pr(n,`Expected a map (got ${jn(a)})`)}})}function sP(t,{delimiter:e}={}){let r=yK(t.length);return Hr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return pr(a,`Expected a tuple (got ${jn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A{var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?pr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return pr(a,`Expected an object (got ${jn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p{if(typeof a!="object"||a===null)return pr(n,`Expected an object (got ${jn(a)})`);let u=new Set([...r,...Object.keys(a)]),A={},p=!0;for(let h of u){if(h==="constructor"||h==="__proto__")p=pr(Object.assign(Object.assign({},n),{p:Yp(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,I=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(I,Object.assign(Object.assign({},n),{p:Yp(n,h),coercion:Yu(a,h)}))&&p:e===null?p=pr(Object.assign(Object.assign({},n),{p:Yp(n,h)}),`Extraneous property (got ${jn(I)})`):Object.defineProperty(A,h,{enumerable:!0,get:()=>I,set:uje(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(A,n)&&p),p}});return Object.assign(o,{properties:t})}function yje(t){return dK(t,{extra:oP(RR())})}function mK(t){return()=>t}function Hr({test:t}){return mK(t)()}function Cje(t,e){if(!e(t))throw new Wp}function wje(t,e){let r=[];if(!e(t,{errors:r}))throw new Wp({errors:r})}function Ije(t,e){}function Bje(t,e,{coerce:r=!1,errors:o,throw:a}={}){let n=o?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new Wp({errors:n});return{value:void 0,errors:n??!0}}let u={value:t},A=Yu(u,"value"),p=[];if(!e(t,{errors:n,coercion:A,coercions:p})){if(a)throw new Wp({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?u.value:{value:u.value,errors:void 0}}function vje(t,e){let r=sP(t);return(...o)=>{if(!r(o))throw new Wp;return e(...o)}}function Dje(t){return Hr({test:(e,r)=>e.length>=t?!0:pr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function Pje(t){return Hr({test:(e,r)=>e.length<=t?!0:pr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function yK(t){return Hr({test:(e,r)=>e.length!==t?pr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function Sje({map:t}={}){return Hr({test:(e,r)=>{let o=new Set,a=new Set;for(let n=0,u=e.length;nt<=0?!0:pr(e,`Expected to be negative (got ${t})`)})}function bje(){return Hr({test:(t,e)=>t>=0?!0:pr(e,`Expected to be positive (got ${t})`)})}function MR(t){return Hr({test:(e,r)=>e>=t?!0:pr(r,`Expected to be at least ${t} (got ${e})`)})}function kje(t){return Hr({test:(e,r)=>e<=t?!0:pr(r,`Expected to be at most ${t} (got ${e})`)})}function Qje(t,e){return Hr({test:(r,o)=>r>=t&&r<=e?!0:pr(o,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function Fje(t,e){return Hr({test:(r,o)=>r>=t&&re!==Math.round(e)?pr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?pr(r,`Expected to be a safe integer (got ${e})`):!0})}function sI(t){return Hr({test:(e,r)=>t.test(e)?!0:pr(r,`Expected to match the pattern ${t.toString()} (got ${jn(e)})`)})}function Tje(){return Hr({test:(t,e)=>t!==t.toLowerCase()?pr(e,`Expected to be all-lowercase (got ${t})`):!0})}function Rje(){return Hr({test:(t,e)=>t!==t.toUpperCase()?pr(e,`Expected to be all-uppercase (got ${t})`):!0})}function Nje(){return Hr({test:(t,e)=>cje.test(t)?!0:pr(e,`Expected to be a valid UUID v4 (got ${jn(t)})`)})}function Lje(){return Hr({test:(t,e)=>hK.test(t)?!0:pr(e,`Expected to be a valid ISO 8601 date string (got ${jn(t)})`)})}function Mje({alpha:t=!1}){return Hr({test:(e,r)=>(t?oje.test(e):aje.test(e))?!0:pr(r,`Expected to be a valid hexadecimal color string (got ${jn(e)})`)})}function Oje(){return Hr({test:(t,e)=>lje.test(t)?!0:pr(e,`Expected to be a valid base 64 string (got ${jn(t)})`)})}function Uje(t=RR()){return Hr({test:(e,r)=>{let o;try{o=JSON.parse(e)}catch{return pr(r,`Expected to be a valid JSON string (got ${jn(e)})`)}return t(o,r)}})}function aP(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Hr({test:(o,a)=>{var n,u;let A={value:o},p=typeof a?.coercions<"u"?Yu(A,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(o,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,I]of h)E.push(I());try{if(typeof a?.coercions<"u"){if(A.value!==o){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,A.value)])}(u=a?.coercions)===null||u===void 0||u.push(...h)}return r.every(I=>I(A.value,a))}finally{for(let I of E)I()}}})}function oI(t,...e){let r=Array.isArray(e[0])?e[0]:e;return aP(t,r)}function _je(t){return Hr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function Hje(t){return Hr({test:(e,r)=>e===null?!0:t(e,r)})}function jje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)||p.push(h);return p.length>0?pr(u,`Missing required ${TR(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function UR(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>Object.keys(n).some(h=>a(o,h,n))?!0:pr(u,`Missing at least one property from ${yy(Array.from(o),"or")}`)})}function qje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>0?pr(u,`Forbidden ${TR(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function Gje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>1?pr(u,`Mutually exclusive properties ${yy(p,"and")}`):!0}})}function lI(t,e,r,o){var a,n;let u=new Set((a=o?.ignore)!==null&&a!==void 0?a:[]),A=aI[(n=o?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=Yje[e],E=e===Gu.Forbids?"or":"and";return Hr({test:(I,v)=>{let b=new Set(Object.keys(I));if(!A(b,t,I)||u.has(I[t]))return!0;let C=[];for(let T of p)(A(b,T,I)&&!u.has(I[T]))!==h.expect&&C.push(T);return C.length>=1?pr(v,`Property "${t}" ${h.message} ${TR(C.length,"property","properties")} ${yy(C,E)}`):!0}})}var sje,oje,aje,lje,cje,hK,Aje,Eje,LR,Wp,aI,Gu,Yje,Za=Et(()=>{sje=/^[a-zA-Z_][a-zA-Z0-9_]*$/;oje=/^#[0-9a-f]{6}$/i,aje=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,lje=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,cje=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,hK=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/;Aje=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);Eje=t=>Hr({test:(e,r)=>e instanceof t?!0:pr(r,`Expected an instance of ${t.name} (got ${jn(e)})`)}),LR=(t,{exclusive:e=!1}={})=>Hr({test:(r,o)=>{var a,n,u;let A=[],p=typeof o?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?pr(o,`Expected to match exactly a single predicate (matched ${A.join(", ")})`):(u=o?.errors)===null||u===void 0||u.push(...p),!1}});Wp=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` +- ${rS(r)}`).join("")}`)}function nd(t,e,r){if(typeof r>"u")return e;let o=[],a=[],n=A=>{let p=e;return e=A,n.bind(null,p)};if(!r(e,{errors:o,coercions:a,coercion:n}))throw iI(`Invalid value for ${t}`,o);for(let[,A]of a)A();return e}var nI,Ef=Et(()=>{tS();nI=Symbol("clipanion/isOption")});var Vo={};Vt(Vo,{KeyRelationship:()=>Gu,TypeAssertionError:()=>Kp,applyCascade:()=>aI,as:()=>yqe,assert:()=>gqe,assertWithErrors:()=>dqe,cascade:()=>oS,fn:()=>Eqe,hasAtLeastOneKey:()=>OT,hasExactLength:()=>dV,hasForbiddenKeys:()=>Mqe,hasKeyRelationship:()=>cI,hasMaxLength:()=>wqe,hasMinLength:()=>Cqe,hasMutuallyExclusiveKeys:()=>Uqe,hasRequiredKeys:()=>Oqe,hasUniqueItems:()=>Iqe,isArray:()=>nS,isAtLeast:()=>NT,isAtMost:()=>Dqe,isBase64:()=>Rqe,isBoolean:()=>aqe,isDate:()=>cqe,isDict:()=>fqe,isEnum:()=>Ks,isHexColor:()=>Fqe,isISO8601:()=>Qqe,isInExclusiveRange:()=>Pqe,isInInclusiveRange:()=>Sqe,isInstanceOf:()=>hqe,isInteger:()=>LT,isJSON:()=>Tqe,isLiteral:()=>pV,isLowerCase:()=>bqe,isMap:()=>Aqe,isNegative:()=>Bqe,isNullable:()=>Lqe,isNumber:()=>RT,isObject:()=>hV,isOneOf:()=>TT,isOptional:()=>Nqe,isPartial:()=>pqe,isPayload:()=>lqe,isPositive:()=>vqe,isRecord:()=>sS,isSet:()=>uqe,isString:()=>Cy,isTuple:()=>iS,isUUID4:()=>kqe,isUnknown:()=>FT,isUpperCase:()=>xqe,makeTrait:()=>gV,makeValidator:()=>Hr,matchesRegExp:()=>oI,softAssert:()=>mqe});function qn(t){return t===null?"null":t===void 0?"undefined":t===""?"an empty string":typeof t=="symbol"?`<${t.toString()}>`:Array.isArray(t)?"an array":JSON.stringify(t)}function Ey(t,e){if(t.length===0)return"nothing";if(t.length===1)return qn(t[0]);let r=t.slice(0,-1),o=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>qn(n)).join(", ")}${a}${qn(o)}`}function Wp(t,e){var r,o,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:eqe.test(e)?`${(o=t?.p)!==null&&o!==void 0?o:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function QT(t,e,r){return t===1?e:r}function pr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function sqe(t,e){return r=>{t[e]=r}}function Yu(t,e){return r=>{let o=t[e];return t[e]=r,Yu(t,e).bind(null,o)}}function sI(t,e,r){let o=()=>(t(r()),a),a=()=>(t(e),o);return o}function FT(){return Hr({test:(t,e)=>!0})}function pV(t){return Hr({test:(e,r)=>e!==t?pr(r,`Expected ${qn(t)} (got ${qn(e)})`):!0})}function Cy(){return Hr({test:(t,e)=>typeof t!="string"?pr(e,`Expected a string (got ${qn(t)})`):!0})}function Ks(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),o=new Set(e);return o.size===1?pV([...o][0]):Hr({test:(a,n)=>o.has(a)?!0:r?pr(n,`Expected one of ${Ey(e,"or")} (got ${qn(a)})`):pr(n,`Expected a valid enumeration value (got ${qn(a)})`)})}function aqe(){return Hr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o=oqe.get(t);if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a boolean (got ${qn(t)})`)}return!0}})}function RT(){return Hr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)o=a;else return pr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a number (got ${qn(t)})`)}return!0}})}function lqe(t){return Hr({test:(e,r)=>{var o;if(typeof r?.coercions>"u")return pr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return pr(r,"Unbound coercion result");if(typeof e!="string")return pr(r,`Expected a string (got ${qn(e)})`);let a;try{a=JSON.parse(e)}catch{return pr(r,`Expected a JSON string (got ${qn(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Yu(n,"value")}))?(r.coercions.push([(o=r.p)!==null&&o!==void 0?o:".",r.coercion.bind(null,n.value)]),!0):!1}})}function cqe(){return Hr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"&&fV.test(t))o=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))o=new Date(a*1e3);else return pr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a date (got ${qn(t)})`)}return!0}})}function nS(t,{delimiter:e}={}){return Hr({test:(r,o)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof o?.coercions<"u"){if(typeof o?.coercion>"u")return pr(o,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return pr(o,`Expected an array (got ${qn(r)})`);let u=!0;for(let A=0,p=r.length;A{var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,I)=>E!==A[I])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",sI(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Yu(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",sI(a.coercion,o,()=>new Set(A.value))]),!0):!1}return pr(a,`Expected a set (got ${qn(o)})`)}})}function Aqe(t,e){let r=nS(iS([t,e])),o=sS(e,{keys:t});return Hr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let I=()=>E.some((v,x)=>v[0]!==h[x][0]||v[1]!==h[x][1])?new Map(E):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",sI(n.coercion,a,I)]),!0}else{let h=!0;for(let[E,I]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(I,Object.assign(Object.assign({},n),{p:Wp(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",sI(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Yu(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",sI(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return pr(n,`Expected a map (got ${qn(a)})`)}})}function iS(t,{delimiter:e}={}){let r=dV(t.length);return Hr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return pr(a,`Expected a tuple (got ${qn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A{var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?pr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return pr(a,`Expected an object (got ${qn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p{if(typeof a!="object"||a===null)return pr(n,`Expected an object (got ${qn(a)})`);let u=new Set([...r,...Object.keys(a)]),A={},p=!0;for(let h of u){if(h==="constructor"||h==="__proto__")p=pr(Object.assign(Object.assign({},n),{p:Wp(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,I=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(I,Object.assign(Object.assign({},n),{p:Wp(n,h),coercion:Yu(a,h)}))&&p:e===null?p=pr(Object.assign(Object.assign({},n),{p:Wp(n,h)}),`Extraneous property (got ${qn(I)})`):Object.defineProperty(A,h,{enumerable:!0,get:()=>I,set:sqe(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(A,n)&&p),p}});return Object.assign(o,{properties:t})}function pqe(t){return hV(t,{extra:sS(FT())})}function gV(t){return()=>t}function Hr({test:t}){return gV(t)()}function gqe(t,e){if(!e(t))throw new Kp}function dqe(t,e){let r=[];if(!e(t,{errors:r}))throw new Kp({errors:r})}function mqe(t,e){}function yqe(t,e,{coerce:r=!1,errors:o,throw:a}={}){let n=o?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new Kp({errors:n});return{value:void 0,errors:n??!0}}let u={value:t},A=Yu(u,"value"),p=[];if(!e(t,{errors:n,coercion:A,coercions:p})){if(a)throw new Kp({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?u.value:{value:u.value,errors:void 0}}function Eqe(t,e){let r=iS(t);return(...o)=>{if(!r(o))throw new Kp;return e(...o)}}function Cqe(t){return Hr({test:(e,r)=>e.length>=t?!0:pr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function wqe(t){return Hr({test:(e,r)=>e.length<=t?!0:pr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function dV(t){return Hr({test:(e,r)=>e.length!==t?pr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function Iqe({map:t}={}){return Hr({test:(e,r)=>{let o=new Set,a=new Set;for(let n=0,u=e.length;nt<=0?!0:pr(e,`Expected to be negative (got ${t})`)})}function vqe(){return Hr({test:(t,e)=>t>=0?!0:pr(e,`Expected to be positive (got ${t})`)})}function NT(t){return Hr({test:(e,r)=>e>=t?!0:pr(r,`Expected to be at least ${t} (got ${e})`)})}function Dqe(t){return Hr({test:(e,r)=>e<=t?!0:pr(r,`Expected to be at most ${t} (got ${e})`)})}function Sqe(t,e){return Hr({test:(r,o)=>r>=t&&r<=e?!0:pr(o,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function Pqe(t,e){return Hr({test:(r,o)=>r>=t&&re!==Math.round(e)?pr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?pr(r,`Expected to be a safe integer (got ${e})`):!0})}function oI(t){return Hr({test:(e,r)=>t.test(e)?!0:pr(r,`Expected to match the pattern ${t.toString()} (got ${qn(e)})`)})}function bqe(){return Hr({test:(t,e)=>t!==t.toLowerCase()?pr(e,`Expected to be all-lowercase (got ${t})`):!0})}function xqe(){return Hr({test:(t,e)=>t!==t.toUpperCase()?pr(e,`Expected to be all-uppercase (got ${t})`):!0})}function kqe(){return Hr({test:(t,e)=>iqe.test(t)?!0:pr(e,`Expected to be a valid UUID v4 (got ${qn(t)})`)})}function Qqe(){return Hr({test:(t,e)=>fV.test(t)?!0:pr(e,`Expected to be a valid ISO 8601 date string (got ${qn(t)})`)})}function Fqe({alpha:t=!1}){return Hr({test:(e,r)=>(t?tqe.test(e):rqe.test(e))?!0:pr(r,`Expected to be a valid hexadecimal color string (got ${qn(e)})`)})}function Rqe(){return Hr({test:(t,e)=>nqe.test(t)?!0:pr(e,`Expected to be a valid base 64 string (got ${qn(t)})`)})}function Tqe(t=FT()){return Hr({test:(e,r)=>{let o;try{o=JSON.parse(e)}catch{return pr(r,`Expected to be a valid JSON string (got ${qn(e)})`)}return t(o,r)}})}function oS(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Hr({test:(o,a)=>{var n,u;let A={value:o},p=typeof a?.coercions<"u"?Yu(A,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(o,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,I]of h)E.push(I());try{if(typeof a?.coercions<"u"){if(A.value!==o){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,A.value)])}(u=a?.coercions)===null||u===void 0||u.push(...h)}return r.every(I=>I(A.value,a))}finally{for(let I of E)I()}}})}function aI(t,...e){let r=Array.isArray(e[0])?e[0]:e;return oS(t,r)}function Nqe(t){return Hr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function Lqe(t){return Hr({test:(e,r)=>e===null?!0:t(e,r)})}function Oqe(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)||p.push(h);return p.length>0?pr(u,`Missing required ${QT(p.length,"property","properties")} ${Ey(p,"and")}`):!0}})}function OT(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>Object.keys(n).some(h=>a(o,h,n))?!0:pr(u,`Missing at least one property from ${Ey(Array.from(o),"or")}`)})}function Mqe(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>0?pr(u,`Forbidden ${QT(p.length,"property","properties")} ${Ey(p,"and")}`):!0}})}function Uqe(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>1?pr(u,`Mutually exclusive properties ${Ey(p,"and")}`):!0}})}function cI(t,e,r,o){var a,n;let u=new Set((a=o?.ignore)!==null&&a!==void 0?a:[]),A=lI[(n=o?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=_qe[e],E=e===Gu.Forbids?"or":"and";return Hr({test:(I,v)=>{let x=new Set(Object.keys(I));if(!A(x,t,I)||u.has(I[t]))return!0;let C=[];for(let R of p)(A(x,R,I)&&!u.has(I[R]))!==h.expect&&C.push(R);return C.length>=1?pr(v,`Property "${t}" ${h.message} ${QT(C.length,"property","properties")} ${Ey(C,E)}`):!0}})}var eqe,tqe,rqe,nqe,iqe,fV,oqe,hqe,TT,Kp,lI,Gu,_qe,Za=Et(()=>{eqe=/^[a-zA-Z_][a-zA-Z0-9_]*$/;tqe=/^#[0-9a-f]{6}$/i,rqe=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,nqe=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,iqe=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,fV=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/;oqe=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);hqe=t=>Hr({test:(e,r)=>e instanceof t?!0:pr(r,`Expected an instance of ${t.name} (got ${qn(e)})`)}),TT=(t,{exclusive:e=!1}={})=>Hr({test:(r,o)=>{var a,n,u;let A=[],p=typeof o?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?pr(o,`Expected to match exactly a single predicate (matched ${A.join(", ")})`):(u=o?.errors)===null||u===void 0||u.push(...p),!1}});Kp=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` `;for(let o of e)r+=` -- ${o}`}super(r)}};aI={missing:(t,e)=>t.has(e),undefined:(t,e,r)=>t.has(e)&&typeof r[e]<"u",nil:(t,e,r)=>t.has(e)&&r[e]!=null,falsy:(t,e,r)=>t.has(e)&&!!r[e]};(function(t){t.Forbids="Forbids",t.Requires="Requires"})(Gu||(Gu={}));Yje={[Gu.Forbids]:{expect:!1,message:"forbids using"},[Gu.Requires]:{expect:!0,message:"requires using"}}});var nt,Vp=Et(()=>{yf();nt=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:u}=await Promise.resolve().then(()=>(Za(),Ko)),A=u(a(n()),r),p=[],h=[];if(!A(this,{errors:p,coercions:h}))throw nI("Invalid option schema",p);for(let[,I]of h)I()}else if(r!=null)throw new Error("Invalid command schema");let o=await this.execute();return typeof o<"u"?o:0}};nt.isOption=rI;nt.Default=[]});function va(t){bR&&console.log(t)}function CK(){let t={nodes:[]};for(let e=0;e{if(e.has(o))return;e.add(o);let a=t.nodes[o];for(let u of Object.values(a.statics))for(let{to:A}of u)r(A);for(let[,{to:u}]of a.dynamics)r(u);for(let{to:u}of a.shortcuts)r(u);let n=new Set(a.shortcuts.map(({to:u})=>u));for(;a.shortcuts.length>0;){let{to:u}=a.shortcuts.shift(),A=t.nodes[u];for(let[p,h]of Object.entries(A.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let I of h)E.some(({to:v})=>I.to===v)||E.push(I)}for(let[p,h]of A.dynamics)a.dynamics.some(([E,{to:I}])=>p===E&&h.to===I)||a.dynamics.push([p,h]);for(let p of A.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(cn.InitialNode)}function Kje(t,{prefix:e=""}={}){if(bR){va(`${e}Nodes are:`);for(let r=0;rE!==cn.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===cn.ErrorNode))throw new my(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));o=Xje(h)}if(o.length>0){va(" Results:");for(let n of o)va(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else va(" No results");return o}function zje(t,e,{endToken:r=Hn.EndOfInput}={}){let o=Jje(t,[...e,r]);return Zje(e,o.map(({state:a})=>a))}function Xje(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path.length);return t.filter(({state:r})=>r.path.length===e)}function Zje(t,e){let r=e.filter(v=>v.selectedIndex!==null),o=r.filter(v=>!v.partial);if(o.length>0&&(r=o),r.length===0)throw new Error;let a=r.filter(v=>v.selectedIndex===td||v.requiredOptions.every(b=>b.some(C=>v.options.find(T=>T.name===C))));if(a.length===0)throw new my(t,r.map(v=>({usage:v.candidateUsage,reason:null})));let n=0;for(let v of a)v.path.length>n&&(n=v.path.length);let u=a.filter(v=>v.path.length===n),A=v=>v.positionals.filter(({extra:b})=>!b).length+v.options.length,p=u.map(v=>({state:v,positionalCount:A(v)})),h=0;for(let{positionalCount:v}of p)v>h&&(h=v);let E=p.filter(({positionalCount:v})=>v===h).map(({state:v})=>v),I=$je(E);if(I.length>1)throw new tP(t,I.map(v=>v.candidateUsage));return I[0]}function $je(t){let e=[],r=[];for(let o of t)o.selectedIndex===td?r.push(o):e.push(o);return r.length>0&&e.push({...EK,path:wK(...r.map(o=>o.path)),options:r.reduce((o,a)=>o.concat(a.options),[])}),e}function wK(t,e,...r){return e===void 0?Array.from(t):wK(t.filter((o,a)=>o===e[a]),...r)}function $a(){return{dynamics:[],shortcuts:[],statics:{}}}function IK(t){return t===cn.SuccessNode||t===cn.ErrorNode}function _R(t,e=0){return{to:IK(t.to)?t.to:t.to>=cn.CustomNode?t.to+e-cn.CustomNode+1:t.to+e,reducer:t.reducer}}function eqe(t,e=0){let r=$a();for(let[o,a]of t.dynamics)r.dynamics.push([o,_R(a,e)]);for(let o of t.shortcuts)r.shortcuts.push(_R(o,e));for(let[o,a]of Object.entries(t.statics))r.statics[o]=a.map(n=>_R(n,e));return r}function Ss(t,e,r,o,a){t.nodes[e].dynamics.push([r,{to:o,reducer:a}])}function Cy(t,e,r,o){t.nodes[e].shortcuts.push({to:r,reducer:o})}function Jo(t,e,r,o,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:o,reducer:a})}function lP(t,e,r,o,a){if(Array.isArray(e)){let[n,...u]=e;return t[n](r,o,a,...u)}else return t[e](r,o,a)}var EK,tqe,HR,el,jR,wy,cP=Et(()=>{eP();rP();EK={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:td,partial:!1,tokens:[]};tqe={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,o)=>!t.ignoreOptions&&e===o,isBatchOption:(t,e,r,o)=>!t.ignoreOptions&&AK.test(e)&&[...e.slice(1)].every(a=>o.has(`-${a}`)),isBoundOption:(t,e,r,o,a)=>{let n=e.match(xR);return!t.ignoreOptions&&!!n&&$D.test(n[1])&&o.has(n[1])&&a.filter(u=>u.nameSet.includes(n[1])).every(u=>u.allowBinding)},isNegatedOption:(t,e,r,o)=>!t.ignoreOptions&&e===`--no-${o.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&SR.test(e),isUnsupportedOption:(t,e,r,o)=>!t.ignoreOptions&&e.startsWith("-")&&$D.test(e)&&!o.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!$D.test(e)},HR={setCandidateState:(t,e,r,o)=>({...t,...o}),setSelectedIndex:(t,e,r,o)=>({...t,selectedIndex:o}),setPartialIndex:(t,e,r,o)=>({...t,selectedIndex:o,partial:!0}),pushBatch:(t,e,r,o)=>{let a=t.options.slice(),n=t.tokens.slice();for(let u=1;u{let[,o,a]=e.match(xR),n=t.options.concat({name:o,value:a}),u=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,o.length],option:o},{segmentIndex:r,type:"assign",slice:[o.length,o.length+1]},{segmentIndex:r,type:"value",slice:[o.length+1,o.length+a.length+1]}]);return{...t,options:n,tokens:u}},pushPath:(t,e,r)=>{let o=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:o,tokens:a}},pushPositional:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtra:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:el}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushTrue:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,o)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var o;let a=t.options[t.options.length-1],n=t.options.slice(),u=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((o=a.value)!==null&&o!==void 0?o:[]).concat([e]),{...t,options:n,tokens:u}},setStringValue:(t,e,r)=>{let o=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return o.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,o)=>{let[,,a]=e.match(SR);return typeof a<"u"?{...t,options:[{name:"-c",value:String(o)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(o)}]}},setError:(t,e,r,o)=>e===Hn.EndOfInput||e===Hn.EndOfPartialInput?{...t,errorMessage:`${o}.`}:{...t,errorMessage:`${o} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},el=Symbol(),jR=class{constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:o=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:o,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===el)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!r&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!r&&this.arity.extra!==el?this.arity.extra.push(e):this.arity.extra!==el&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===el)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let o=0;o1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(o))throw new Error(`The arity must be an integer, got ${o}`);if(o<0)throw new Error(`The arity must be positive, got ${o}`);let A=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,A);this.options.push({preferredName:A,nameSet:e,description:r,arity:o,hidden:a,required:n,allowBinding:u})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let o=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&o.push(...this.paths[0]),e){for(let{preferredName:u,nameSet:A,arity:p,hidden:h,description:E,required:I}of this.options){if(h)continue;let v=[];for(let C=0;C`:`[${b}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===el?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=CK(),r=cn.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=Mc(e,$a()),Jo(e,cn.InitialNode,Hn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let v=Mc(e,$a());Cy(e,p,v),this.registerOptions(e,v),p=v}for(let v=0;v0||!this.arity.proxy){let v=Mc(e,$a());Ss(e,p,"isHelp",v,["useHelp",this.cliIndex]),Ss(e,v,"always",v,"pushExtra"),Jo(e,v,Hn.EndOfInput,cn.SuccessNode,["setSelectedIndex",td]),this.registerOptions(e,p)}this.arity.leading.length>0&&(Jo(e,p,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,p,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let v=0;v0||v+1!==this.arity.leading.length)&&(Jo(e,b,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,b,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex])),Ss(e,h,"isNotOptionLike",b,"pushPositional"),h=b}let E=h;if(this.arity.extra===el||this.arity.extra.length>0){let v=Mc(e,$a());if(Cy(e,h,v),this.arity.extra===el){let b=Mc(e,$a());this.arity.proxy||this.registerOptions(e,b),Ss(e,h,n,b,"pushExtraNoLimits"),Ss(e,b,n,b,"pushExtraNoLimits"),Cy(e,b,v)}else for(let b=0;b0)&&this.registerOptions(e,C),Ss(e,E,n,C,"pushExtra"),Cy(e,C,v),E=C}E=v}this.arity.trailing.length>0&&(Jo(e,E,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,E,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let I=E;for(let v=0;v=0&&e{let u=n?Hn.EndOfPartialInput:Hn.EndOfInput;return zje(o,a,{endToken:u})}}}}});function vK(){return uP.default&&"getColorDepth"in uP.default.WriteStream.prototype?uP.default.WriteStream.prototype.getColorDepth():process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}function DK(t){let e=BK;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=Be("async_hooks");e=BK=new r;let o=process.stdout._write;process.stdout._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?o.call(this,n,u,A):p.stdout.write(n,u,A)};let a=process.stderr._write;process.stderr._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?a.call(this,n,u,A):p.stderr.write(n,u,A)}}return r=>e.run(t,r)}var uP,BK,PK=Et(()=>{uP=$e(Be("tty"),1)});var Iy,SK=Et(()=>{Vp();Iy=class extends nt{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let o=new Iy(r);o.path=e.path;for(let a of e.options)switch(a.name){case"-c":o.commands.push(Number(a.value));break;case"-i":o.index=Number(a.value);break}return o}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: +- ${o}`}super(r)}};lI={missing:(t,e)=>t.has(e),undefined:(t,e,r)=>t.has(e)&&typeof r[e]<"u",nil:(t,e,r)=>t.has(e)&&r[e]!=null,falsy:(t,e,r)=>t.has(e)&&!!r[e]};(function(t){t.Forbids="Forbids",t.Requires="Requires"})(Gu||(Gu={}));_qe={[Gu.Forbids]:{expect:!1,message:"forbids using"},[Gu.Requires]:{expect:!0,message:"requires using"}}});var nt,Vp=Et(()=>{Ef();nt=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:u}=await Promise.resolve().then(()=>(Za(),Vo)),A=u(a(n()),r),p=[],h=[];if(!A(this,{errors:p,coercions:h}))throw iI("Invalid option schema",p);for(let[,I]of h)I()}else if(r!=null)throw new Error("Invalid command schema");let o=await this.execute();return typeof o<"u"?o:0}};nt.isOption=nI;nt.Default=[]});function va(t){PT&&console.log(t)}function yV(){let t={nodes:[]};for(let e=0;e{if(e.has(o))return;e.add(o);let a=t.nodes[o];for(let u of Object.values(a.statics))for(let{to:A}of u)r(A);for(let[,{to:u}]of a.dynamics)r(u);for(let{to:u}of a.shortcuts)r(u);let n=new Set(a.shortcuts.map(({to:u})=>u));for(;a.shortcuts.length>0;){let{to:u}=a.shortcuts.shift(),A=t.nodes[u];for(let[p,h]of Object.entries(A.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let I of h)E.some(({to:v})=>I.to===v)||E.push(I)}for(let[p,h]of A.dynamics)a.dynamics.some(([E,{to:I}])=>p===E&&h.to===I)||a.dynamics.push([p,h]);for(let p of A.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(cn.InitialNode)}function jqe(t,{prefix:e=""}={}){if(PT){va(`${e}Nodes are:`);for(let r=0;rE!==cn.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===cn.ErrorNode))throw new yy(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));o=Wqe(h)}if(o.length>0){va(" Results:");for(let n of o)va(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else va(" No results");return o}function Yqe(t,e,{endToken:r=Hn.EndOfInput}={}){let o=Gqe(t,[...e,r]);return Kqe(e,o.map(({state:a})=>a))}function Wqe(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path.length);return t.filter(({state:r})=>r.path.length===e)}function Kqe(t,e){let r=e.filter(v=>v.selectedIndex!==null),o=r.filter(v=>!v.partial);if(o.length>0&&(r=o),r.length===0)throw new Error;let a=r.filter(v=>v.selectedIndex===rd||v.requiredOptions.every(x=>x.some(C=>v.options.find(R=>R.name===C))));if(a.length===0)throw new yy(t,r.map(v=>({usage:v.candidateUsage,reason:null})));let n=0;for(let v of a)v.path.length>n&&(n=v.path.length);let u=a.filter(v=>v.path.length===n),A=v=>v.positionals.filter(({extra:x})=>!x).length+v.options.length,p=u.map(v=>({state:v,positionalCount:A(v)})),h=0;for(let{positionalCount:v}of p)v>h&&(h=v);let E=p.filter(({positionalCount:v})=>v===h).map(({state:v})=>v),I=Vqe(E);if(I.length>1)throw new eS(t,I.map(v=>v.candidateUsage));return I[0]}function Vqe(t){let e=[],r=[];for(let o of t)o.selectedIndex===rd?r.push(o):e.push(o);return r.length>0&&e.push({...mV,path:EV(...r.map(o=>o.path)),options:r.reduce((o,a)=>o.concat(a.options),[])}),e}function EV(t,e,...r){return e===void 0?Array.from(t):EV(t.filter((o,a)=>o===e[a]),...r)}function $a(){return{dynamics:[],shortcuts:[],statics:{}}}function CV(t){return t===cn.SuccessNode||t===cn.ErrorNode}function MT(t,e=0){return{to:CV(t.to)?t.to:t.to>=cn.CustomNode?t.to+e-cn.CustomNode+1:t.to+e,reducer:t.reducer}}function Jqe(t,e=0){let r=$a();for(let[o,a]of t.dynamics)r.dynamics.push([o,MT(a,e)]);for(let o of t.shortcuts)r.shortcuts.push(MT(o,e));for(let[o,a]of Object.entries(t.statics))r.statics[o]=a.map(n=>MT(n,e));return r}function Ps(t,e,r,o,a){t.nodes[e].dynamics.push([r,{to:o,reducer:a}])}function wy(t,e,r,o){t.nodes[e].shortcuts.push({to:r,reducer:o})}function Jo(t,e,r,o,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:o,reducer:a})}function aS(t,e,r,o,a){if(Array.isArray(e)){let[n,...u]=e;return t[n](r,o,a,...u)}else return t[e](r,o,a)}var mV,zqe,UT,el,_T,Iy,lS=Et(()=>{$D();tS();mV={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:rd,partial:!1,tokens:[]};zqe={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,o)=>!t.ignoreOptions&&e===o,isBatchOption:(t,e,r,o)=>!t.ignoreOptions&&cV.test(e)&&[...e.slice(1)].every(a=>o.has(`-${a}`)),isBoundOption:(t,e,r,o,a)=>{let n=e.match(ST);return!t.ignoreOptions&&!!n&&ZD.test(n[1])&&o.has(n[1])&&a.filter(u=>u.nameSet.includes(n[1])).every(u=>u.allowBinding)},isNegatedOption:(t,e,r,o)=>!t.ignoreOptions&&e===`--no-${o.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&DT.test(e),isUnsupportedOption:(t,e,r,o)=>!t.ignoreOptions&&e.startsWith("-")&&ZD.test(e)&&!o.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!ZD.test(e)},UT={setCandidateState:(t,e,r,o)=>({...t,...o}),setSelectedIndex:(t,e,r,o)=>({...t,selectedIndex:o}),setPartialIndex:(t,e,r,o)=>({...t,selectedIndex:o,partial:!0}),pushBatch:(t,e,r,o)=>{let a=t.options.slice(),n=t.tokens.slice();for(let u=1;u{let[,o,a]=e.match(ST),n=t.options.concat({name:o,value:a}),u=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,o.length],option:o},{segmentIndex:r,type:"assign",slice:[o.length,o.length+1]},{segmentIndex:r,type:"value",slice:[o.length+1,o.length+a.length+1]}]);return{...t,options:n,tokens:u}},pushPath:(t,e,r)=>{let o=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:o,tokens:a}},pushPositional:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtra:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:el}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushTrue:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,o)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var o;let a=t.options[t.options.length-1],n=t.options.slice(),u=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((o=a.value)!==null&&o!==void 0?o:[]).concat([e]),{...t,options:n,tokens:u}},setStringValue:(t,e,r)=>{let o=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return o.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,o)=>{let[,,a]=e.match(DT);return typeof a<"u"?{...t,options:[{name:"-c",value:String(o)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(o)}]}},setError:(t,e,r,o)=>e===Hn.EndOfInput||e===Hn.EndOfPartialInput?{...t,errorMessage:`${o}.`}:{...t,errorMessage:`${o} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},el=Symbol(),_T=class{constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:o=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:o,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===el)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!r&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!r&&this.arity.extra!==el?this.arity.extra.push(e):this.arity.extra!==el&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===el)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let o=0;o1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(o))throw new Error(`The arity must be an integer, got ${o}`);if(o<0)throw new Error(`The arity must be positive, got ${o}`);let A=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,A);this.options.push({preferredName:A,nameSet:e,description:r,arity:o,hidden:a,required:n,allowBinding:u})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let o=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&o.push(...this.paths[0]),e){for(let{preferredName:u,nameSet:A,arity:p,hidden:h,description:E,required:I}of this.options){if(h)continue;let v=[];for(let C=0;C`:`[${x}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===el?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=yV(),r=cn.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=Oc(e,$a()),Jo(e,cn.InitialNode,Hn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let v=Oc(e,$a());wy(e,p,v),this.registerOptions(e,v),p=v}for(let v=0;v0||!this.arity.proxy){let v=Oc(e,$a());Ps(e,p,"isHelp",v,["useHelp",this.cliIndex]),Ps(e,v,"always",v,"pushExtra"),Jo(e,v,Hn.EndOfInput,cn.SuccessNode,["setSelectedIndex",rd]),this.registerOptions(e,p)}this.arity.leading.length>0&&(Jo(e,p,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,p,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let v=0;v0||v+1!==this.arity.leading.length)&&(Jo(e,x,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,x,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex])),Ps(e,h,"isNotOptionLike",x,"pushPositional"),h=x}let E=h;if(this.arity.extra===el||this.arity.extra.length>0){let v=Oc(e,$a());if(wy(e,h,v),this.arity.extra===el){let x=Oc(e,$a());this.arity.proxy||this.registerOptions(e,x),Ps(e,h,n,x,"pushExtraNoLimits"),Ps(e,x,n,x,"pushExtraNoLimits"),wy(e,x,v)}else for(let x=0;x0)&&this.registerOptions(e,C),Ps(e,E,n,C,"pushExtra"),wy(e,C,v),E=C}E=v}this.arity.trailing.length>0&&(Jo(e,E,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,E,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let I=E;for(let v=0;v=0&&e{let u=n?Hn.EndOfPartialInput:Hn.EndOfInput;return Yqe(o,a,{endToken:u})}}}}});function IV(){return cS.default&&"getColorDepth"in cS.default.WriteStream.prototype?cS.default.WriteStream.prototype.getColorDepth():process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}function BV(t){let e=wV;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=ve("async_hooks");e=wV=new r;let o=process.stdout._write;process.stdout._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?o.call(this,n,u,A):p.stdout.write(n,u,A)};let a=process.stderr._write;process.stderr._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?a.call(this,n,u,A):p.stderr.write(n,u,A)}}return r=>e.run(t,r)}var cS,wV,vV=Et(()=>{cS=$e(ve("tty"),1)});var By,DV=Et(()=>{Vp();By=class extends nt{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let o=new By(r);o.path=e.path;for(let a of e.options)switch(a.name){case"-c":o.commands.push(Number(a.value));break;case"-i":o.index=Number(a.value);break}return o}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: `),this.context.stdout.write(` `);let r=0;for(let o of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[o].commandClass,{prefix:`${r++}. `.padStart(5)}));this.context.stdout.write(` `),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. -`)}}}});async function kK(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=FK(t);return as.from(r,e).runExit(o,a)}async function QK(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=FK(t);return as.from(r,e).run(o,a)}function FK(t){let e,r,o,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(o=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?o=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],o=t[2]):t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],o=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],o=t[2],a=t[3];break}if(typeof o>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}}function bK(t){return t()}var xK,as,TK=Et(()=>{eP();cP();FR();PK();Vp();SK();xK=Symbol("clipanion/errorCommand");as=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:o,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new wy({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=o,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let o=new as(r),a=Array.isArray(e)?e:[e];for(let n of a)o.register(n);return o}register(e){var r;let o=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[nt.isOption]&&o.set(p,h)}let n=this.builder.command(),u=n.cliIndex,A=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof A<"u")for(let p of A)n.addPath(p);this.registrations.set(e,{specs:o,builder:n,index:u});for(let[p,{definition:h}]of o.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:o,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:u,process:A}=this.builder.compile(),p=A(o,{partial:n}),h={...as.defaultContext,...a};switch(p.selectedIndex){case td:{let E=Iy.from(p,u);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=u[p.selectedIndex],I=this.registrations.get(E);if(typeof I>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let v=new E;v.context=h,v.tokens=p.tokens,v.path=p.path;try{for(let[b,{transformer:C}]of I.specs.entries())v[b]=C(I.builder,b,p,h);return v}catch(b){throw b[xK]=v,b}}break}}async run(e,r){var o,a;let n,u={...as.defaultContext,...r},A=(o=this.enableColors)!==null&&o!==void 0?o:u.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,u)}catch(E){return u.stdout.write(this.error(E,{colored:A})),1}if(n.help)return u.stdout.write(this.usage(n,{colored:A,detailed:!0})),0;n.context=u,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:E=>this.definition(E),error:(E,I)=>this.error(E,I),format:E=>this.format(E),process:(E,I)=>this.process(E,{...u,...I}),run:(E,I)=>this.run(E,{...u,...I}),usage:(E,I)=>this.usage(E,I)};let p=this.enableCapture&&(a=DK(u))!==null&&a!==void 0?a:bK,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return u.stdout.write(this.error(E,{colored:A,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:o}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),u=typeof e.usage.category<"u"?Do(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,A=typeof e.usage.description<"u"?Do(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?Do(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,I])=>[Do(E,{format:this.format(r),paragraphs:!1}),I.replace(/\$0/g,this.binaryName)]):void 0;return{path:o,usage:a,category:u,description:A,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let o of this.registrations.keys()){let a=this.definition(o,{colored:e});!a||r.push(a)}return r}usage(e=null,{colored:r,detailed:o=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,E=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(b=>b.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(E){e=null;continue}}e&&(o=!0)}let u=e!==null&&e instanceof nt?e.constructor:e,A="";if(u)if(o){let{description:p="",details:h="",examples:E=[]}=u.usage||{};p!==""&&(A+=Do(p,{format:this.format(r),paragraphs:!1}).replace(/^./,b=>b.toUpperCase()),A+=` +`)}}}});async function bV(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=kV(t);return as.from(r,e).runExit(o,a)}async function xV(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=kV(t);return as.from(r,e).run(o,a)}function kV(t){let e,r,o,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(o=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?o=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],o=t[2]):t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],o=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],o=t[2],a=t[3];break}if(typeof o>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}}function PV(t){return t()}var SV,as,QV=Et(()=>{$D();lS();kT();vV();Vp();DV();SV=Symbol("clipanion/errorCommand");as=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:o,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new Iy({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=o,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let o=new as(r),a=Array.isArray(e)?e:[e];for(let n of a)o.register(n);return o}register(e){var r;let o=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[nt.isOption]&&o.set(p,h)}let n=this.builder.command(),u=n.cliIndex,A=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof A<"u")for(let p of A)n.addPath(p);this.registrations.set(e,{specs:o,builder:n,index:u});for(let[p,{definition:h}]of o.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:o,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:u,process:A}=this.builder.compile(),p=A(o,{partial:n}),h={...as.defaultContext,...a};switch(p.selectedIndex){case rd:{let E=By.from(p,u);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=u[p.selectedIndex],I=this.registrations.get(E);if(typeof I>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let v=new E;v.context=h,v.tokens=p.tokens,v.path=p.path;try{for(let[x,{transformer:C}]of I.specs.entries())v[x]=C(I.builder,x,p,h);return v}catch(x){throw x[SV]=v,x}}break}}async run(e,r){var o,a;let n,u={...as.defaultContext,...r},A=(o=this.enableColors)!==null&&o!==void 0?o:u.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,u)}catch(E){return u.stdout.write(this.error(E,{colored:A})),1}if(n.help)return u.stdout.write(this.usage(n,{colored:A,detailed:!0})),0;n.context=u,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:E=>this.definition(E),error:(E,I)=>this.error(E,I),format:E=>this.format(E),process:(E,I)=>this.process(E,{...u,...I}),run:(E,I)=>this.run(E,{...u,...I}),usage:(E,I)=>this.usage(E,I)};let p=this.enableCapture&&(a=BV(u))!==null&&a!==void 0?a:PV,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return u.stdout.write(this.error(E,{colored:A,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:o}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),u=typeof e.usage.category<"u"?Do(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,A=typeof e.usage.description<"u"?Do(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?Do(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,I])=>[Do(E,{format:this.format(r),paragraphs:!1}),I.replace(/\$0/g,this.binaryName)]):void 0;return{path:o,usage:a,category:u,description:A,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let o of this.registrations.keys()){let a=this.definition(o,{colored:e});!a||r.push(a)}return r}usage(e=null,{colored:r,detailed:o=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,E=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(x=>x.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(E){e=null;continue}}e&&(o=!0)}let u=e!==null&&e instanceof nt?e.constructor:e,A="";if(u)if(o){let{description:p="",details:h="",examples:E=[]}=u.usage||{};p!==""&&(A+=Do(p,{format:this.format(r),paragraphs:!1}).replace(/^./,x=>x.toUpperCase()),A+=` `),(h!==""||E.length>0)&&(A+=`${this.format(r).header("Usage")} `,A+=` `);let{usage:I,options:v}=this.getUsageByRegistration(u,{inlineOptions:!1});if(A+=`${this.format(r).bold(a)}${I} `,v.length>0){A+=` `,A+=`${this.format(r).header("Options")} -`;let b=v.reduce((C,T)=>Math.max(C,T.definition.length),0);A+=` -`;for(let{definition:C,description:T}of v)A+=` ${this.format(r).bold(C.padEnd(b))} ${Do(T,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(A+=` +`;let x=v.reduce((C,R)=>Math.max(C,R.definition.length),0);A+=` +`;for(let{definition:C,description:R}of v)A+=` ${this.format(r).bold(C.padEnd(x))} ${Do(R,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(A+=` `,A+=`${this.format(r).header("Details")} `,A+=` `,A+=Do(h,{format:this.format(r),paragraphs:!0})),E.length>0){A+=` `,A+=`${this.format(r).header("Examples")} -`;for(let[b,C]of E)A+=` -`,A+=Do(b,{format:this.format(r),paragraphs:!1}),A+=`${C.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} +`;for(let[x,C]of E)A+=` +`,A+=Do(x,{format:this.format(r),paragraphs:!1}),A+=`${C.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} `}}else{let{usage:p}=this.getUsageByRegistration(u);A+=`${this.format(r).bold(a)}${p} -`}else{let p=new Map;for(let[v,{index:b}]of this.registrations.entries()){if(typeof v.usage>"u")continue;let C=typeof v.usage.category<"u"?Do(v.usage.category,{format:this.format(r),paragraphs:!1}):null,T=p.get(C);typeof T>"u"&&p.set(C,T=[]);let{usage:L}=this.getUsageByIndex(b);T.push({commandClass:v,usage:L})}let h=Array.from(p.keys()).sort((v,b)=>v===null?-1:b===null?1:v.localeCompare(b,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",I=typeof this.binaryVersion<"u";E||I?(E&&I?A+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} +`}else{let p=new Map;for(let[v,{index:x}]of this.registrations.entries()){if(typeof v.usage>"u")continue;let C=typeof v.usage.category<"u"?Do(v.usage.category,{format:this.format(r),paragraphs:!1}):null,R=p.get(C);typeof R>"u"&&p.set(C,R=[]);let{usage:L}=this.getUsageByIndex(x);R.push({commandClass:v,usage:L})}let h=Array.from(p.keys()).sort((v,x)=>v===null?-1:x===null?1:v.localeCompare(x,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",I=typeof this.binaryVersion<"u";E||I?(E&&I?A+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} `:E?A+=`${this.format(r).header(`${this.binaryLabel}`)} `:A+=`${this.format(r).header(`${this.binaryVersion}`)} `,A+=` ${this.format(r).bold(a)}${this.binaryName} `):A+=`${this.format(r).bold(a)}${this.binaryName} -`;for(let v of h){let b=p.get(v).slice().sort((T,L)=>T.usage.localeCompare(L.usage,"en",{usage:"sort",caseFirst:"upper"})),C=v!==null?v.trim():"General commands";A+=` +`;for(let v of h){let x=p.get(v).slice().sort((R,L)=>R.usage.localeCompare(L.usage,"en",{usage:"sort",caseFirst:"upper"})),C=v!==null?v.trim():"General commands";A+=` `,A+=`${this.format(r).header(`${C}`)} -`;for(let{commandClass:T,usage:L}of b){let U=T.usage.description||"undocumented";A+=` +`;for(let{commandClass:R,usage:L}of x){let U=R.usage.description||"undocumented";A+=` `,A+=` ${this.format(r).bold(L)} `,A+=` ${Do(U,{format:this.format(r),paragraphs:!1})}`}}A+=` -`,A+=Do("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return A}error(e,r){var o,{colored:a,command:n=(o=e[xK])!==null&&o!==void 0?o:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let u="",A=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");A==="Error"&&(A="Internal Error"),u+=`${this.format(a).error(A)}: ${e.message} +`,A+=Do("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return A}error(e,r){var o,{colored:a,command:n=(o=e[SV])!==null&&o!==void 0?o:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let u="",A=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");A==="Error"&&(A="Internal Error"),u+=`${this.format(a).error(A)}: ${e.message} `;let p=e.clipanion;return typeof p<"u"?p.type==="usage"&&(u+=` `,u+=this.usage(n)):e.stack&&(u+=`${e.stack.replace(/^.*\n/,"")} -`),u}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:as.defaultContext.colorDepth>1)?fK:pK}getUsageByRegistration(e,r){let o=this.registrations.get(e);if(typeof o>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(o.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};as.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:vK()}});var cI,RK=Et(()=>{Vp();cI=class extends nt{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} -`)}};cI.paths=[["--clipanion=definitions"]]});var uI,NK=Et(()=>{Vp();uI=class extends nt{async execute(){this.context.stdout.write(this.cli.usage())}};uI.paths=[["-h"],["--help"]]});function AP(t={}){return Vo({definition(e,r){var o;e.addProxy({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){return o.positionals.map(({value:a})=>a)}})}var qR=Et(()=>{yf()});var AI,LK=Et(()=>{Vp();qR();AI=class extends nt{constructor(){super(...arguments),this.args=AP()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} -`)}};AI.paths=[["--clipanion=tokens"]]});var fI,MK=Et(()=>{Vp();fI=class extends nt{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} -`)}};fI.paths=[["-v"],["--version"]]});var GR={};Kt(GR,{DefinitionsCommand:()=>cI,HelpCommand:()=>uI,TokensCommand:()=>AI,VersionCommand:()=>fI});var OK=Et(()=>{RK();NK();LK();MK()});function UK(t,e,r){let[o,a]=qu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Vo({definition(p){p.addOption({names:u,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let I,v=typeof o<"u"?[...o]:void 0;for(let{name:b,value:C}of E.options)!A.has(b)||(I=b,v=v??[],v.push(C));return typeof v<"u"?rd(I??h,v,a.validator):v}})}var _K=Et(()=>{yf()});function HK(t,e,r){let[o,a]=qu(e,r??{}),n=t.split(","),u=new Set(n);return Vo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E=v);return E}})}var jK=Et(()=>{yf()});function qK(t,e,r){let[o,a]=qu(e,r??{}),n=t.split(","),u=new Set(n);return Vo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E??(E=0),v?E+=1:E=0);return E}})}var GK=Et(()=>{yf()});function YK(t={}){return Vo({definition(e,r){var o;e.addRest({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){let a=u=>{let A=o.positionals[u];return A.extra===el||A.extra===!1&&uu)}})}var WK=Et(()=>{cP();yf()});function rqe(t,e,r){let[o,a]=qu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Vo({definition(p){p.addOption({names:u,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,I){let v,b=o;typeof a.env<"u"&&I.env[a.env]&&(v=a.env,b=I.env[a.env]);for(let{name:C,value:T}of E.options)!A.has(C)||(v=C,b=T);return typeof b=="string"?rd(v??h,b,a.validator):b}})}function nqe(t={}){let{required:e=!0}=t;return Vo({definition(r,o){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:o,required:t.required})},transformer(r,o,a){var n;for(let u=0;u{cP();yf()});var ge={};Kt(ge,{Array:()=>UK,Boolean:()=>HK,Counter:()=>qK,Proxy:()=>AP,Rest:()=>YK,String:()=>VK,applyValidator:()=>rd,cleanValidationError:()=>nP,formatError:()=>nI,isOptionSymbol:()=>rI,makeCommandOption:()=>Vo,rerouteArguments:()=>qu});var JK=Et(()=>{yf();qR();_K();jK();GK();WK();KK()});var pI={};Kt(pI,{Builtins:()=>GR,Cli:()=>as,Command:()=>nt,Option:()=>ge,UsageError:()=>it,formatMarkdownish:()=>Do,run:()=>QK,runExit:()=>kK});var qt=Et(()=>{rP();FR();Vp();TK();OK();JK()});var zK=_((xkt,iqe)=>{iqe.exports={name:"dotenv",version:"16.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://github.com/motdotla/dotenv?sponsor=1",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var eJ=_((bkt,Ef)=>{var XK=Be("fs"),WR=Be("path"),sqe=Be("os"),oqe=Be("crypto"),aqe=zK(),VR=aqe.version,lqe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function cqe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` -`);let o;for(;(o=lqe.exec(r))!=null;){let a=o[1],n=o[2]||"";n=n.trim();let u=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),u==='"'&&(n=n.replace(/\\n/g,` -`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function uqe(t){let e=$K(t),r=xs.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let o=ZK(t).split(","),a=o.length,n;for(let u=0;u=a)throw A}return xs.parse(n)}function Aqe(t){console.log(`[dotenv@${VR}][INFO] ${t}`)}function fqe(t){console.log(`[dotenv@${VR}][WARN] ${t}`)}function YR(t){console.log(`[dotenv@${VR}][DEBUG] ${t}`)}function ZK(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function pqe(t,e){let r;try{r=new URL(e)}catch(A){throw A.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):A}let o=r.password;if(!o)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,u=t.parsed[n];if(!u)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:u,key:o}}function $K(t){let e=WR.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function hqe(t){return t[0]==="~"?WR.join(sqe.homedir(),t.slice(1)):t}function gqe(t){Aqe("Loading env from encrypted .env.vault");let e=xs._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),xs.populate(r,e,t),{parsed:e}}function dqe(t){let e=WR.resolve(process.cwd(),".env"),r="utf8",o=Boolean(t&&t.debug);t&&(t.path!=null&&(e=hqe(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=xs.parse(XK.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),xs.populate(n,a,t),{parsed:a}}catch(a){return o&&YR(`Failed to load ${e} ${a.message}`),{error:a}}}function mqe(t){let e=$K(t);return ZK(t).length===0?xs.configDotenv(t):XK.existsSync(e)?xs._configVault(t):(fqe(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),xs.configDotenv(t))}function yqe(t,e){let r=Buffer.from(e.slice(-64),"hex"),o=Buffer.from(t,"base64"),a=o.slice(0,12),n=o.slice(-16);o=o.slice(12,-16);try{let u=oqe.createDecipheriv("aes-256-gcm",r,a);return u.setAuthTag(n),`${u.update(o)}${u.final()}`}catch(u){let A=u instanceof RangeError,p=u.message==="Invalid key length",h=u.message==="Unsupported state or unable to authenticate data";if(A||p){let E="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(E)}else if(h){let E="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(E)}else throw console.error("Error: ",u.code),console.error("Error: ",u.message),u}}function Eqe(t,e,r={}){let o=Boolean(r&&r.debug),a=Boolean(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),o&&YR(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var xs={configDotenv:dqe,_configVault:gqe,_parseVault:uqe,config:mqe,decrypt:yqe,parse:cqe,populate:Eqe};Ef.exports.configDotenv=xs.configDotenv;Ef.exports._configVault=xs._configVault;Ef.exports._parseVault=xs._parseVault;Ef.exports.config=xs.config;Ef.exports.decrypt=xs.decrypt;Ef.exports.parse=xs.parse;Ef.exports.populate=xs.populate;Ef.exports=xs});var rJ=_((kkt,tJ)=>{"use strict";tJ.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var nd=_((Qkt,KR)=>{"use strict";var Cqe=rJ(),nJ=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,o=()=>{r--,e.length>0&&e.shift()()},a=(A,p,...h)=>{r++;let E=Cqe(A,...h);p(E),E.then(o,o)},n=(A,p,...h)=>{rnew Promise(h=>n(A,h,...p));return Object.defineProperties(u,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),u};KR.exports=nJ;KR.exports.default=nJ});function Wu(t){return`YN${t.toString(10).padStart(4,"0")}`}function fP(t){let e=Number(t.slice(2));if(typeof wr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var wr,pP=Et(()=>{wr=(Me=>(Me[Me.UNNAMED=0]="UNNAMED",Me[Me.EXCEPTION=1]="EXCEPTION",Me[Me.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Me[Me.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Me[Me.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Me[Me.BUILD_DISABLED=5]="BUILD_DISABLED",Me[Me.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Me[Me.MUST_BUILD=7]="MUST_BUILD",Me[Me.MUST_REBUILD=8]="MUST_REBUILD",Me[Me.BUILD_FAILED=9]="BUILD_FAILED",Me[Me.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Me[Me.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Me[Me.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Me[Me.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Me[Me.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Me[Me.REMOTE_INVALID=15]="REMOTE_INVALID",Me[Me.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Me[Me.RESOLUTION_PACK=17]="RESOLUTION_PACK",Me[Me.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Me[Me.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Me[Me.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Me[Me.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Me[Me.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Me[Me.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Me[Me.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Me[Me.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Me[Me.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Me[Me.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Me[Me.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Me[Me.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Me[Me.FETCH_FAILED=30]="FETCH_FAILED",Me[Me.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Me[Me.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Me[Me.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Me[Me.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Me[Me.NETWORK_ERROR=35]="NETWORK_ERROR",Me[Me.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Me[Me.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Me[Me.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Me[Me.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Me[Me.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Me[Me.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Me[Me.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Me[Me.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Me[Me.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Me[Me.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Me[Me.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Me[Me.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Me[Me.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Me[Me.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Me[Me.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Me[Me.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Me[Me.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Me[Me.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Me[Me.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Me[Me.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Me[Me.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Me[Me.INVALID_MANIFEST=57]="INVALID_MANIFEST",Me[Me.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Me[Me.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Me[Me.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Me[Me.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Me[Me.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Me[Me.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Me[Me.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Me[Me.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Me[Me.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Me[Me.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Me[Me.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Me[Me.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Me[Me.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Me[Me.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Me[Me.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Me[Me.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Me[Me.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Me[Me.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Me[Me.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Me[Me.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Me[Me.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Me[Me.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Me[Me.NETWORK_DISABLED=80]="NETWORK_DISABLED",Me[Me.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Me[Me.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Me[Me.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Me[Me.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Me[Me.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Me[Me.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Me[Me.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Me[Me.VERSION_NOTICE=88]="VERSION_NOTICE",Me[Me.TIPS_NOTICE=89]="TIPS_NOTICE",Me[Me.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Me))(wr||{})});var hI=_((Tkt,iJ)=>{var wqe="2.0.0",Iqe=Number.MAX_SAFE_INTEGER||9007199254740991,Bqe=16,vqe=256-6,Dqe=["major","premajor","minor","preminor","patch","prepatch","prerelease"];iJ.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Bqe,MAX_SAFE_BUILD_LENGTH:vqe,MAX_SAFE_INTEGER:Iqe,RELEASE_TYPES:Dqe,SEMVER_SPEC_VERSION:wqe,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var gI=_((Rkt,sJ)=>{var Pqe=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};sJ.exports=Pqe});var By=_((Cf,oJ)=>{var{MAX_SAFE_COMPONENT_LENGTH:JR,MAX_SAFE_BUILD_LENGTH:Sqe,MAX_LENGTH:xqe}=hI(),bqe=gI();Cf=oJ.exports={};var kqe=Cf.re=[],Qqe=Cf.safeRe=[],lr=Cf.src=[],cr=Cf.t={},Fqe=0,zR="[a-zA-Z0-9-]",Tqe=[["\\s",1],["\\d",xqe],[zR,Sqe]],Rqe=t=>{for(let[e,r]of Tqe)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Jr=(t,e,r)=>{let o=Rqe(e),a=Fqe++;bqe(t,a,e),cr[t]=a,lr[a]=e,kqe[a]=new RegExp(e,r?"g":void 0),Qqe[a]=new RegExp(o,r?"g":void 0)};Jr("NUMERICIDENTIFIER","0|[1-9]\\d*");Jr("NUMERICIDENTIFIERLOOSE","\\d+");Jr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${zR}*`);Jr("MAINVERSION",`(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})`);Jr("MAINVERSIONLOOSE",`(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})`);Jr("PRERELEASEIDENTIFIER",`(?:${lr[cr.NUMERICIDENTIFIER]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASEIDENTIFIERLOOSE",`(?:${lr[cr.NUMERICIDENTIFIERLOOSE]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASE",`(?:-(${lr[cr.PRERELEASEIDENTIFIER]}(?:\\.${lr[cr.PRERELEASEIDENTIFIER]})*))`);Jr("PRERELEASELOOSE",`(?:-?(${lr[cr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${lr[cr.PRERELEASEIDENTIFIERLOOSE]})*))`);Jr("BUILDIDENTIFIER",`${zR}+`);Jr("BUILD",`(?:\\+(${lr[cr.BUILDIDENTIFIER]}(?:\\.${lr[cr.BUILDIDENTIFIER]})*))`);Jr("FULLPLAIN",`v?${lr[cr.MAINVERSION]}${lr[cr.PRERELEASE]}?${lr[cr.BUILD]}?`);Jr("FULL",`^${lr[cr.FULLPLAIN]}$`);Jr("LOOSEPLAIN",`[v=\\s]*${lr[cr.MAINVERSIONLOOSE]}${lr[cr.PRERELEASELOOSE]}?${lr[cr.BUILD]}?`);Jr("LOOSE",`^${lr[cr.LOOSEPLAIN]}$`);Jr("GTLT","((?:<|>)?=?)");Jr("XRANGEIDENTIFIERLOOSE",`${lr[cr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Jr("XRANGEIDENTIFIER",`${lr[cr.NUMERICIDENTIFIER]}|x|X|\\*`);Jr("XRANGEPLAIN",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:${lr[cr.PRERELEASE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGEPLAINLOOSE",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:${lr[cr.PRERELEASELOOSE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAIN]}$`);Jr("XRANGELOOSE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COERCE",`(^|[^\\d])(\\d{1,${JR}})(?:\\.(\\d{1,${JR}}))?(?:\\.(\\d{1,${JR}}))?(?:$|[^\\d])`);Jr("COERCERTL",lr[cr.COERCE],!0);Jr("LONETILDE","(?:~>?)");Jr("TILDETRIM",`(\\s*)${lr[cr.LONETILDE]}\\s+`,!0);Cf.tildeTrimReplace="$1~";Jr("TILDE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAIN]}$`);Jr("TILDELOOSE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("LONECARET","(?:\\^)");Jr("CARETTRIM",`(\\s*)${lr[cr.LONECARET]}\\s+`,!0);Cf.caretTrimReplace="$1^";Jr("CARET",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAIN]}$`);Jr("CARETLOOSE",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COMPARATORLOOSE",`^${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]})$|^$`);Jr("COMPARATOR",`^${lr[cr.GTLT]}\\s*(${lr[cr.FULLPLAIN]})$|^$`);Jr("COMPARATORTRIM",`(\\s*)${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]}|${lr[cr.XRANGEPLAIN]})`,!0);Cf.comparatorTrimReplace="$1$2$3";Jr("HYPHENRANGE",`^\\s*(${lr[cr.XRANGEPLAIN]})\\s+-\\s+(${lr[cr.XRANGEPLAIN]})\\s*$`);Jr("HYPHENRANGELOOSE",`^\\s*(${lr[cr.XRANGEPLAINLOOSE]})\\s+-\\s+(${lr[cr.XRANGEPLAINLOOSE]})\\s*$`);Jr("STAR","(<|>)?=?\\s*\\*");Jr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Jr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var hP=_((Nkt,aJ)=>{var Nqe=Object.freeze({loose:!0}),Lqe=Object.freeze({}),Mqe=t=>t?typeof t!="object"?Nqe:t:Lqe;aJ.exports=Mqe});var XR=_((Lkt,uJ)=>{var lJ=/^[0-9]+$/,cJ=(t,e)=>{let r=lJ.test(t),o=lJ.test(e);return r&&o&&(t=+t,e=+e),t===e?0:r&&!o?-1:o&&!r?1:tcJ(e,t);uJ.exports={compareIdentifiers:cJ,rcompareIdentifiers:Oqe}});var Po=_((Mkt,hJ)=>{var gP=gI(),{MAX_LENGTH:AJ,MAX_SAFE_INTEGER:dP}=hI(),{safeRe:fJ,t:pJ}=By(),Uqe=hP(),{compareIdentifiers:vy}=XR(),tl=class{constructor(e,r){if(r=Uqe(r),e instanceof tl){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>AJ)throw new TypeError(`version is longer than ${AJ} characters`);gP("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let o=e.trim().match(r.loose?fJ[pJ.LOOSE]:fJ[pJ.FULL]);if(!o)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>dP||this.major<0)throw new TypeError("Invalid major version");if(this.minor>dP||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>dP||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&o===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];o===!1&&(n=[r]),vy(this.prerelease[0],r)===0?isNaN(this.prerelease[1])&&(this.prerelease=n):this.prerelease=n}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};hJ.exports=tl});var id=_((Okt,dJ)=>{var gJ=Po(),_qe=(t,e,r=!1)=>{if(t instanceof gJ)return t;try{return new gJ(t,e)}catch(o){if(!r)return null;throw o}};dJ.exports=_qe});var yJ=_((Ukt,mJ)=>{var Hqe=id(),jqe=(t,e)=>{let r=Hqe(t,e);return r?r.version:null};mJ.exports=jqe});var CJ=_((_kt,EJ)=>{var qqe=id(),Gqe=(t,e)=>{let r=qqe(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};EJ.exports=Gqe});var BJ=_((Hkt,IJ)=>{var wJ=Po(),Yqe=(t,e,r,o,a)=>{typeof r=="string"&&(a=o,o=r,r=void 0);try{return new wJ(t instanceof wJ?t.version:t,r).inc(e,o,a).version}catch{return null}};IJ.exports=Yqe});var PJ=_((jkt,DJ)=>{var vJ=id(),Wqe=(t,e)=>{let r=vJ(t,null,!0),o=vJ(e,null,!0),a=r.compare(o);if(a===0)return null;let n=a>0,u=n?r:o,A=n?o:r,p=!!u.prerelease.length;if(!!A.prerelease.length&&!p)return!A.patch&&!A.minor?"major":u.patch?"patch":u.minor?"minor":"major";let E=p?"pre":"";return r.major!==o.major?E+"major":r.minor!==o.minor?E+"minor":r.patch!==o.patch?E+"patch":"prerelease"};DJ.exports=Wqe});var xJ=_((qkt,SJ)=>{var Vqe=Po(),Kqe=(t,e)=>new Vqe(t,e).major;SJ.exports=Kqe});var kJ=_((Gkt,bJ)=>{var Jqe=Po(),zqe=(t,e)=>new Jqe(t,e).minor;bJ.exports=zqe});var FJ=_((Ykt,QJ)=>{var Xqe=Po(),Zqe=(t,e)=>new Xqe(t,e).patch;QJ.exports=Zqe});var RJ=_((Wkt,TJ)=>{var $qe=id(),eGe=(t,e)=>{let r=$qe(t,e);return r&&r.prerelease.length?r.prerelease:null};TJ.exports=eGe});var Ll=_((Vkt,LJ)=>{var NJ=Po(),tGe=(t,e,r)=>new NJ(t,r).compare(new NJ(e,r));LJ.exports=tGe});var OJ=_((Kkt,MJ)=>{var rGe=Ll(),nGe=(t,e,r)=>rGe(e,t,r);MJ.exports=nGe});var _J=_((Jkt,UJ)=>{var iGe=Ll(),sGe=(t,e)=>iGe(t,e,!0);UJ.exports=sGe});var mP=_((zkt,jJ)=>{var HJ=Po(),oGe=(t,e,r)=>{let o=new HJ(t,r),a=new HJ(e,r);return o.compare(a)||o.compareBuild(a)};jJ.exports=oGe});var GJ=_((Xkt,qJ)=>{var aGe=mP(),lGe=(t,e)=>t.sort((r,o)=>aGe(r,o,e));qJ.exports=lGe});var WJ=_((Zkt,YJ)=>{var cGe=mP(),uGe=(t,e)=>t.sort((r,o)=>cGe(o,r,e));YJ.exports=uGe});var dI=_(($kt,VJ)=>{var AGe=Ll(),fGe=(t,e,r)=>AGe(t,e,r)>0;VJ.exports=fGe});var yP=_((eQt,KJ)=>{var pGe=Ll(),hGe=(t,e,r)=>pGe(t,e,r)<0;KJ.exports=hGe});var ZR=_((tQt,JJ)=>{var gGe=Ll(),dGe=(t,e,r)=>gGe(t,e,r)===0;JJ.exports=dGe});var $R=_((rQt,zJ)=>{var mGe=Ll(),yGe=(t,e,r)=>mGe(t,e,r)!==0;zJ.exports=yGe});var EP=_((nQt,XJ)=>{var EGe=Ll(),CGe=(t,e,r)=>EGe(t,e,r)>=0;XJ.exports=CGe});var CP=_((iQt,ZJ)=>{var wGe=Ll(),IGe=(t,e,r)=>wGe(t,e,r)<=0;ZJ.exports=IGe});var eN=_((sQt,$J)=>{var BGe=ZR(),vGe=$R(),DGe=dI(),PGe=EP(),SGe=yP(),xGe=CP(),bGe=(t,e,r,o)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return BGe(t,r,o);case"!=":return vGe(t,r,o);case">":return DGe(t,r,o);case">=":return PGe(t,r,o);case"<":return SGe(t,r,o);case"<=":return xGe(t,r,o);default:throw new TypeError(`Invalid operator: ${e}`)}};$J.exports=bGe});var tz=_((oQt,ez)=>{var kGe=Po(),QGe=id(),{safeRe:wP,t:IP}=By(),FGe=(t,e)=>{if(t instanceof kGe)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(wP[IP.COERCE]);else{let o;for(;(o=wP[IP.COERCERTL].exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||o.index+o[0].length!==r.index+r[0].length)&&(r=o),wP[IP.COERCERTL].lastIndex=o.index+o[1].length+o[2].length;wP[IP.COERCERTL].lastIndex=-1}return r===null?null:QGe(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,e)};ez.exports=FGe});var nz=_((aQt,rz)=>{"use strict";rz.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var BP=_((lQt,iz)=>{"use strict";iz.exports=Cn;Cn.Node=sd;Cn.create=Cn;function Cn(t){var e=this;if(e instanceof Cn||(e=new Cn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,o=arguments.length;r1)r=e;else if(this.head)o=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;o!==null;a++)r=t(r,o.value,a),o=o.next;return r};Cn.prototype.reduceReverse=function(t,e){var r,o=this.tail;if(arguments.length>1)r=e;else if(this.tail)o=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;o!==null;a--)r=t(r,o.value,a),o=o.prev;return r};Cn.prototype.toArray=function(){for(var t=new Array(this.length),e=0,r=this.head;r!==null;e++)t[e]=r.value,r=r.next;return t};Cn.prototype.toArrayReverse=function(){for(var t=new Array(this.length),e=0,r=this.tail;r!==null;e++)t[e]=r.value,r=r.prev;return t};Cn.prototype.slice=function(t,e){e=e||this.length,e<0&&(e+=this.length),t=t||0,t<0&&(t+=this.length);var r=new Cn;if(ethis.length&&(e=this.length);for(var o=0,a=this.head;a!==null&&othis.length&&(e=this.length);for(var o=this.length,a=this.tail;a!==null&&o>e;o--)a=a.prev;for(;a!==null&&o>t;o--,a=a.prev)r.push(a.value);return r};Cn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var o=0,a=this.head;a!==null&&o{"use strict";var LGe=BP(),od=Symbol("max"),If=Symbol("length"),Dy=Symbol("lengthCalculator"),yI=Symbol("allowStale"),ad=Symbol("maxAge"),wf=Symbol("dispose"),sz=Symbol("noDisposeOnSet"),bs=Symbol("lruList"),Oc=Symbol("cache"),az=Symbol("updateAgeOnGet"),tN=()=>1,nN=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let r=this[od]=e.max||1/0,o=e.length||tN;if(this[Dy]=typeof o!="function"?tN:o,this[yI]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[ad]=e.maxAge||0,this[wf]=e.dispose,this[sz]=e.noDisposeOnSet||!1,this[az]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[od]=e||1/0,mI(this)}get max(){return this[od]}set allowStale(e){this[yI]=!!e}get allowStale(){return this[yI]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[ad]=e,mI(this)}get maxAge(){return this[ad]}set lengthCalculator(e){typeof e!="function"&&(e=tN),e!==this[Dy]&&(this[Dy]=e,this[If]=0,this[bs].forEach(r=>{r.length=this[Dy](r.value,r.key),this[If]+=r.length})),mI(this)}get lengthCalculator(){return this[Dy]}get length(){return this[If]}get itemCount(){return this[bs].length}rforEach(e,r){r=r||this;for(let o=this[bs].tail;o!==null;){let a=o.prev;oz(this,e,o,r),o=a}}forEach(e,r){r=r||this;for(let o=this[bs].head;o!==null;){let a=o.next;oz(this,e,o,r),o=a}}keys(){return this[bs].toArray().map(e=>e.key)}values(){return this[bs].toArray().map(e=>e.value)}reset(){this[wf]&&this[bs]&&this[bs].length&&this[bs].forEach(e=>this[wf](e.key,e.value)),this[Oc]=new Map,this[bs]=new LGe,this[If]=0}dump(){return this[bs].map(e=>vP(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[bs]}set(e,r,o){if(o=o||this[ad],o&&typeof o!="number")throw new TypeError("maxAge must be a number");let a=o?Date.now():0,n=this[Dy](r,e);if(this[Oc].has(e)){if(n>this[od])return Py(this,this[Oc].get(e)),!1;let p=this[Oc].get(e).value;return this[wf]&&(this[sz]||this[wf](e,p.value)),p.now=a,p.maxAge=o,p.value=r,this[If]+=n-p.length,p.length=n,this.get(e),mI(this),!0}let u=new iN(e,r,n,a,o);return u.length>this[od]?(this[wf]&&this[wf](e,r),!1):(this[If]+=u.length,this[bs].unshift(u),this[Oc].set(e,this[bs].head),mI(this),!0)}has(e){if(!this[Oc].has(e))return!1;let r=this[Oc].get(e).value;return!vP(this,r)}get(e){return rN(this,e,!0)}peek(e){return rN(this,e,!1)}pop(){let e=this[bs].tail;return e?(Py(this,e),e.value):null}del(e){Py(this,this[Oc].get(e))}load(e){this.reset();let r=Date.now();for(let o=e.length-1;o>=0;o--){let a=e[o],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let u=n-r;u>0&&this.set(a.k,a.v,u)}}}prune(){this[Oc].forEach((e,r)=>rN(this,r,!1))}},rN=(t,e,r)=>{let o=t[Oc].get(e);if(o){let a=o.value;if(vP(t,a)){if(Py(t,o),!t[yI])return}else r&&(t[az]&&(o.value.now=Date.now()),t[bs].unshiftNode(o));return a.value}},vP=(t,e)=>{if(!e||!e.maxAge&&!t[ad])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[ad]&&r>t[ad]},mI=t=>{if(t[If]>t[od])for(let e=t[bs].tail;t[If]>t[od]&&e!==null;){let r=e.prev;Py(t,e),e=r}},Py=(t,e)=>{if(e){let r=e.value;t[wf]&&t[wf](r.key,r.value),t[If]-=r.length,t[Oc].delete(r.key),t[bs].removeNode(e)}},iN=class{constructor(e,r,o,a,n){this.key=e,this.value=r,this.length=o,this.now=a,this.maxAge=n||0}},oz=(t,e,r,o)=>{let a=r.value;vP(t,a)&&(Py(t,r),t[yI]||(a=void 0)),a&&e.call(o,a.value,a.key,t)};lz.exports=nN});var Ml=_((uQt,pz)=>{var ld=class{constructor(e,r){if(r=OGe(r),e instanceof ld)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new ld(e.raw,r);if(e instanceof sN)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(o=>this.parseRange(o.trim())).filter(o=>o.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let o=this.set[0];if(this.set=this.set.filter(a=>!Az(a[0])),this.set.length===0)this.set=[o];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&YGe(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let o=((this.options.includePrerelease&&qGe)|(this.options.loose&&GGe))+":"+e,a=uz.get(o);if(a)return a;let n=this.options.loose,u=n?Da[zo.HYPHENRANGELOOSE]:Da[zo.HYPHENRANGE];e=e.replace(u,t5e(this.options.includePrerelease)),ci("hyphen replace",e),e=e.replace(Da[zo.COMPARATORTRIM],_Ge),ci("comparator trim",e),e=e.replace(Da[zo.TILDETRIM],HGe),ci("tilde trim",e),e=e.replace(Da[zo.CARETTRIM],jGe),ci("caret trim",e);let A=e.split(" ").map(I=>WGe(I,this.options)).join(" ").split(/\s+/).map(I=>e5e(I,this.options));n&&(A=A.filter(I=>(ci("loose invalid filter",I,this.options),!!I.match(Da[zo.COMPARATORLOOSE])))),ci("range list",A);let p=new Map,h=A.map(I=>new sN(I,this.options));for(let I of h){if(Az(I))return[I];p.set(I.value,I)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return uz.set(o,E),E}intersects(e,r){if(!(e instanceof ld))throw new TypeError("a Range is required");return this.set.some(o=>fz(o,r)&&e.set.some(a=>fz(a,r)&&o.every(n=>a.every(u=>n.intersects(u,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new UGe(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",YGe=t=>t.value==="",fz=(t,e)=>{let r=!0,o=t.slice(),a=o.pop();for(;r&&o.length;)r=o.every(n=>a.intersects(n,e)),a=o.pop();return r},WGe=(t,e)=>(ci("comp",t,e),t=JGe(t,e),ci("caret",t),t=VGe(t,e),ci("tildes",t),t=XGe(t,e),ci("xrange",t),t=$Ge(t,e),ci("stars",t),t),Xo=t=>!t||t.toLowerCase()==="x"||t==="*",VGe=(t,e)=>t.trim().split(/\s+/).map(r=>KGe(r,e)).join(" "),KGe=(t,e)=>{let r=e.loose?Da[zo.TILDELOOSE]:Da[zo.TILDE];return t.replace(r,(o,a,n,u,A)=>{ci("tilde",t,o,a,n,u,A);let p;return Xo(a)?p="":Xo(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:Xo(u)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:A?(ci("replaceTilde pr",A),p=`>=${a}.${n}.${u}-${A} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${u} <${a}.${+n+1}.0-0`,ci("tilde return",p),p})},JGe=(t,e)=>t.trim().split(/\s+/).map(r=>zGe(r,e)).join(" "),zGe=(t,e)=>{ci("caret",t,e);let r=e.loose?Da[zo.CARETLOOSE]:Da[zo.CARET],o=e.includePrerelease?"-0":"";return t.replace(r,(a,n,u,A,p)=>{ci("caret",t,a,n,u,A,p);let h;return Xo(n)?h="":Xo(u)?h=`>=${n}.0.0${o} <${+n+1}.0.0-0`:Xo(A)?n==="0"?h=`>=${n}.${u}.0${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.0${o} <${+n+1}.0.0-0`:p?(ci("replaceCaret pr",p),n==="0"?u==="0"?h=`>=${n}.${u}.${A}-${p} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}-${p} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A}-${p} <${+n+1}.0.0-0`):(ci("no pr"),n==="0"?u==="0"?h=`>=${n}.${u}.${A}${o} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A} <${+n+1}.0.0-0`),ci("caret return",h),h})},XGe=(t,e)=>(ci("replaceXRanges",t,e),t.split(/\s+/).map(r=>ZGe(r,e)).join(" ")),ZGe=(t,e)=>{t=t.trim();let r=e.loose?Da[zo.XRANGELOOSE]:Da[zo.XRANGE];return t.replace(r,(o,a,n,u,A,p)=>{ci("xRange",t,o,a,n,u,A,p);let h=Xo(n),E=h||Xo(u),I=E||Xo(A),v=I;return a==="="&&v&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?o="<0.0.0-0":o="*":a&&v?(E&&(u=0),A=0,a===">"?(a=">=",E?(n=+n+1,u=0,A=0):(u=+u+1,A=0)):a==="<="&&(a="<",E?n=+n+1:u=+u+1),a==="<"&&(p="-0"),o=`${a+n}.${u}.${A}${p}`):E?o=`>=${n}.0.0${p} <${+n+1}.0.0-0`:I&&(o=`>=${n}.${u}.0${p} <${n}.${+u+1}.0-0`),ci("xRange return",o),o})},$Ge=(t,e)=>(ci("replaceStars",t,e),t.trim().replace(Da[zo.STAR],"")),e5e=(t,e)=>(ci("replaceGTE0",t,e),t.trim().replace(Da[e.includePrerelease?zo.GTE0PRE:zo.GTE0],"")),t5e=t=>(e,r,o,a,n,u,A,p,h,E,I,v,b)=>(Xo(o)?r="":Xo(a)?r=`>=${o}.0.0${t?"-0":""}`:Xo(n)?r=`>=${o}.${a}.0${t?"-0":""}`:u?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Xo(h)?p="":Xo(E)?p=`<${+h+1}.0.0-0`:Xo(I)?p=`<${h}.${+E+1}.0-0`:v?p=`<=${h}.${E}.${I}-${v}`:t?p=`<${h}.${E}.${+I+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),r5e=(t,e,r)=>{for(let o=0;o0){let a=t[o].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var EI=_((AQt,Ez)=>{var CI=Symbol("SemVer ANY"),Sy=class{static get ANY(){return CI}constructor(e,r){if(r=hz(r),e instanceof Sy){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),aN("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===CI?this.value="":this.value=this.operator+this.semver.version,aN("comp",this)}parse(e){let r=this.options.loose?gz[dz.COMPARATORLOOSE]:gz[dz.COMPARATOR],o=e.match(r);if(!o)throw new TypeError(`Invalid comparator: ${e}`);this.operator=o[1]!==void 0?o[1]:"",this.operator==="="&&(this.operator=""),o[2]?this.semver=new mz(o[2],this.options.loose):this.semver=CI}toString(){return this.value}test(e){if(aN("Comparator.test",e,this.options.loose),this.semver===CI||e===CI)return!0;if(typeof e=="string")try{e=new mz(e,this.options)}catch{return!1}return oN(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Sy))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new yz(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new yz(this.value,r).test(e.semver):(r=hz(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||oN(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||oN(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Ez.exports=Sy;var hz=hP(),{safeRe:gz,t:dz}=By(),oN=eN(),aN=gI(),mz=Po(),yz=Ml()});var wI=_((fQt,Cz)=>{var n5e=Ml(),i5e=(t,e,r)=>{try{e=new n5e(e,r)}catch{return!1}return e.test(t)};Cz.exports=i5e});var Iz=_((pQt,wz)=>{var s5e=Ml(),o5e=(t,e)=>new s5e(t,e).set.map(r=>r.map(o=>o.value).join(" ").trim().split(" "));wz.exports=o5e});var vz=_((hQt,Bz)=>{var a5e=Po(),l5e=Ml(),c5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new l5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===-1)&&(o=u,a=new a5e(o,r))}),o};Bz.exports=c5e});var Pz=_((gQt,Dz)=>{var u5e=Po(),A5e=Ml(),f5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new A5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===1)&&(o=u,a=new u5e(o,r))}),o};Dz.exports=f5e});var bz=_((dQt,xz)=>{var lN=Po(),p5e=Ml(),Sz=dI(),h5e=(t,e)=>{t=new p5e(t,e);let r=new lN("0.0.0");if(t.test(r)||(r=new lN("0.0.0-0"),t.test(r)))return r;r=null;for(let o=0;o{let A=new lN(u.semver.version);switch(u.operator){case">":A.prerelease.length===0?A.patch++:A.prerelease.push(0),A.raw=A.format();case"":case">=":(!n||Sz(A,n))&&(n=A);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),n&&(!r||Sz(r,n))&&(r=n)}return r&&t.test(r)?r:null};xz.exports=h5e});var Qz=_((mQt,kz)=>{var g5e=Ml(),d5e=(t,e)=>{try{return new g5e(t,e).range||"*"}catch{return null}};kz.exports=d5e});var DP=_((yQt,Nz)=>{var m5e=Po(),Rz=EI(),{ANY:y5e}=Rz,E5e=Ml(),C5e=wI(),Fz=dI(),Tz=yP(),w5e=CP(),I5e=EP(),B5e=(t,e,r,o)=>{t=new m5e(t,o),e=new E5e(e,o);let a,n,u,A,p;switch(r){case">":a=Fz,n=w5e,u=Tz,A=">",p=">=";break;case"<":a=Tz,n=I5e,u=Fz,A="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(C5e(t,e,o))return!1;for(let h=0;h{b.semver===y5e&&(b=new Rz(">=0.0.0")),I=I||b,v=v||b,a(b.semver,I.semver,o)?I=b:u(b.semver,v.semver,o)&&(v=b)}),I.operator===A||I.operator===p||(!v.operator||v.operator===A)&&n(t,v.semver))return!1;if(v.operator===p&&u(t,v.semver))return!1}return!0};Nz.exports=B5e});var Mz=_((EQt,Lz)=>{var v5e=DP(),D5e=(t,e,r)=>v5e(t,e,">",r);Lz.exports=D5e});var Uz=_((CQt,Oz)=>{var P5e=DP(),S5e=(t,e,r)=>P5e(t,e,"<",r);Oz.exports=S5e});var jz=_((wQt,Hz)=>{var _z=Ml(),x5e=(t,e,r)=>(t=new _z(t,r),e=new _z(e,r),t.intersects(e,r));Hz.exports=x5e});var Gz=_((IQt,qz)=>{var b5e=wI(),k5e=Ll();qz.exports=(t,e,r)=>{let o=[],a=null,n=null,u=t.sort((E,I)=>k5e(E,I,r));for(let E of u)b5e(E,e,r)?(n=E,a||(a=E)):(n&&o.push([a,n]),n=null,a=null);a&&o.push([a,null]);let A=[];for(let[E,I]of o)E===I?A.push(E):!I&&E===u[0]?A.push("*"):I?E===u[0]?A.push(`<=${I}`):A.push(`${E} - ${I}`):A.push(`>=${E}`);let p=A.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var Yz=Ml(),uN=EI(),{ANY:cN}=uN,II=wI(),AN=Ll(),Q5e=(t,e,r={})=>{if(t===e)return!0;t=new Yz(t,r),e=new Yz(e,r);let o=!1;e:for(let a of t.set){for(let n of e.set){let u=T5e(a,n,r);if(o=o||u!==null,u)continue e}if(o)return!1}return!0},F5e=[new uN(">=0.0.0-0")],Wz=[new uN(">=0.0.0")],T5e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===cN){if(e.length===1&&e[0].semver===cN)return!0;r.includePrerelease?t=F5e:t=Wz}if(e.length===1&&e[0].semver===cN){if(r.includePrerelease)return!0;e=Wz}let o=new Set,a,n;for(let b of t)b.operator===">"||b.operator===">="?a=Vz(a,b,r):b.operator==="<"||b.operator==="<="?n=Kz(n,b,r):o.add(b.semver);if(o.size>1)return null;let u;if(a&&n){if(u=AN(a.semver,n.semver,r),u>0)return null;if(u===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let b of o){if(a&&!II(b,String(a),r)||n&&!II(b,String(n),r))return null;for(let C of e)if(!II(b,String(C),r))return!1;return!0}let A,p,h,E,I=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,v=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;I&&I.prerelease.length===1&&n.operator==="<"&&I.prerelease[0]===0&&(I=!1);for(let b of e){if(E=E||b.operator===">"||b.operator===">=",h=h||b.operator==="<"||b.operator==="<=",a){if(v&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===v.major&&b.semver.minor===v.minor&&b.semver.patch===v.patch&&(v=!1),b.operator===">"||b.operator===">="){if(A=Vz(a,b,r),A===b&&A!==a)return!1}else if(a.operator===">="&&!II(a.semver,String(b),r))return!1}if(n){if(I&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===I.major&&b.semver.minor===I.minor&&b.semver.patch===I.patch&&(I=!1),b.operator==="<"||b.operator==="<="){if(p=Kz(n,b,r),p===b&&p!==n)return!1}else if(n.operator==="<="&&!II(n.semver,String(b),r))return!1}if(!b.operator&&(n||a)&&u!==0)return!1}return!(a&&h&&!n&&u!==0||n&&E&&!a&&u!==0||v||I)},Vz=(t,e,r)=>{if(!t)return e;let o=AN(t.semver,e.semver,r);return o>0?t:o<0||e.operator===">"&&t.operator===">="?e:t},Kz=(t,e,r)=>{if(!t)return e;let o=AN(t.semver,e.semver,r);return o<0?t:o>0||e.operator==="<"&&t.operator==="<="?e:t};Jz.exports=Q5e});var zn=_((vQt,$z)=>{var fN=By(),Xz=hI(),R5e=Po(),Zz=XR(),N5e=id(),L5e=yJ(),M5e=CJ(),O5e=BJ(),U5e=PJ(),_5e=xJ(),H5e=kJ(),j5e=FJ(),q5e=RJ(),G5e=Ll(),Y5e=OJ(),W5e=_J(),V5e=mP(),K5e=GJ(),J5e=WJ(),z5e=dI(),X5e=yP(),Z5e=ZR(),$5e=$R(),e9e=EP(),t9e=CP(),r9e=eN(),n9e=tz(),i9e=EI(),s9e=Ml(),o9e=wI(),a9e=Iz(),l9e=vz(),c9e=Pz(),u9e=bz(),A9e=Qz(),f9e=DP(),p9e=Mz(),h9e=Uz(),g9e=jz(),d9e=Gz(),m9e=zz();$z.exports={parse:N5e,valid:L5e,clean:M5e,inc:O5e,diff:U5e,major:_5e,minor:H5e,patch:j5e,prerelease:q5e,compare:G5e,rcompare:Y5e,compareLoose:W5e,compareBuild:V5e,sort:K5e,rsort:J5e,gt:z5e,lt:X5e,eq:Z5e,neq:$5e,gte:e9e,lte:t9e,cmp:r9e,coerce:n9e,Comparator:i9e,Range:s9e,satisfies:o9e,toComparators:a9e,maxSatisfying:l9e,minSatisfying:c9e,minVersion:u9e,validRange:A9e,outside:f9e,gtr:p9e,ltr:h9e,intersects:g9e,simplifyRange:d9e,subset:m9e,SemVer:R5e,re:fN.re,src:fN.src,tokens:fN.t,SEMVER_SPEC_VERSION:Xz.SEMVER_SPEC_VERSION,RELEASE_TYPES:Xz.RELEASE_TYPES,compareIdentifiers:Zz.compareIdentifiers,rcompareIdentifiers:Zz.rcompareIdentifiers}});var tX=_((DQt,eX)=>{"use strict";function y9e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function cd(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,cd)}y9e(cd,Error);cd.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I{switch(Ne[1]){case"|":return Se|Ne[3];case"&":return Se&Ne[3];case"^":return Se^Ne[3]}},Z)},v="!",b=Re("!",!1),C=function(Z){return!Z},T="(",L=Re("(",!1),U=")",J=Re(")",!1),te=function(Z){return Z},le=/^[^ \t\n\r()!|&\^]/,pe=Qe([" "," ",` -`,"\r","(",")","!","|","&","^"],!0,!1),Ae=function(Z){return e.queryPattern.test(Z)},ye=function(Z){return e.checkFn(Z)},ae=Te("whitespace"),we=/^[ \t\n\r]/,Pe=Qe([" "," ",` -`,"\r"],!1,!1),g=0,Ee=0,De=[{line:1,column:1}],ce=0,ne=[],ee=0,Ie;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function ke(){return t.substring(Ee,g)}function ht(){return He(Ee,g)}function H(Z,ie){throw ie=ie!==void 0?ie:He(Ee,g),S([Te(Z)],t.substring(Ee,g),ie)}function lt(Z,ie){throw ie=ie!==void 0?ie:He(Ee,g),w(Z,ie)}function Re(Z,ie){return{type:"literal",text:Z,ignoreCase:ie}}function Qe(Z,ie,Se){return{type:"class",parts:Z,inverted:ie,ignoreCase:Se}}function be(){return{type:"any"}}function _e(){return{type:"end"}}function Te(Z){return{type:"other",description:Z}}function Je(Z){var ie=De[Z],Se;if(ie)return ie;for(Se=Z-1;!De[Se];)Se--;for(ie=De[Se],ie={line:ie.line,column:ie.column};Sece&&(ce=g,ne=[]),ne.push(Z))}function w(Z,ie){return new cd(Z,null,null,ie)}function S(Z,ie,Se){return new cd(cd.buildMessage(Z,ie),Z,ie,Se)}function y(){var Z,ie,Se,Ne,ot,dt,jt,$t;if(Z=g,ie=F(),ie!==r){for(Se=[],Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&x(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&x(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&x(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Ne!==r;)Se.push(Ne),Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&x(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&x(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&x(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Se!==r?(Ee=Z,ie=I(ie,Se),Z=ie):(g=Z,Z=r)}else g=Z,Z=r;return Z}function F(){var Z,ie,Se,Ne,ot,dt;return Z=g,t.charCodeAt(g)===33?(ie=v,g++):(ie=r,ee===0&&x(b)),ie!==r?(Se=F(),Se!==r?(Ee=Z,ie=C(Se),Z=ie):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=g,t.charCodeAt(g)===40?(ie=T,g++):(ie=r,ee===0&&x(L)),ie!==r?(Se=X(),Se!==r?(Ne=y(),Ne!==r?(ot=X(),ot!==r?(t.charCodeAt(g)===41?(dt=U,g++):(dt=r,ee===0&&x(J)),dt!==r?(Ee=Z,ie=te(Ne),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=z())),Z}function z(){var Z,ie,Se,Ne,ot;if(Z=g,ie=X(),ie!==r){if(Se=g,Ne=[],le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&x(pe)),ot!==r)for(;ot!==r;)Ne.push(ot),le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&x(pe));else Ne=r;Ne!==r?Se=t.substring(Se,g):Se=Ne,Se!==r?(Ee=g,Ne=Ae(Se),Ne?Ne=void 0:Ne=r,Ne!==r?(Ee=Z,ie=ye(Se),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)}else g=Z,Z=r;return Z}function X(){var Z,ie;for(ee++,Z=[],we.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&x(Pe));ie!==r;)Z.push(ie),we.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&x(Pe));return ee--,Z===r&&(ie=r,ee===0&&x(ae)),Z}if(Ie=a(),Ie!==r&&g===t.length)return Ie;throw Ie!==r&&g{var{parse:C9e}=tX();PP.makeParser=(t=/[a-z]+/)=>(e,r)=>C9e(e,{queryPattern:t,checkFn:r});PP.parse=PP.makeParser()});var iX=_((SQt,nX)=>{"use strict";nX.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var pN=_((xQt,oX)=>{var BI=iX(),sX={};for(let t of Object.keys(BI))sX[BI[t]]=t;var Ar={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};oX.exports=Ar;for(let t of Object.keys(Ar)){if(!("channels"in Ar[t]))throw new Error("missing channels property: "+t);if(!("labels"in Ar[t]))throw new Error("missing channel labels property: "+t);if(Ar[t].labels.length!==Ar[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=Ar[t];delete Ar[t].channels,delete Ar[t].labels,Object.defineProperty(Ar[t],"channels",{value:e}),Object.defineProperty(Ar[t],"labels",{value:r})}Ar.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(e,r,o),n=Math.max(e,r,o),u=n-a,A,p;n===a?A=0:e===n?A=(r-o)/u:r===n?A=2+(o-e)/u:o===n&&(A=4+(e-r)/u),A=Math.min(A*60,360),A<0&&(A+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=u/(n+a):p=u/(2-n-a),[A,p*100,h*100]};Ar.rgb.hsv=function(t){let e,r,o,a,n,u=t[0]/255,A=t[1]/255,p=t[2]/255,h=Math.max(u,A,p),E=h-Math.min(u,A,p),I=function(v){return(h-v)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=I(u),r=I(A),o=I(p),u===h?a=o-r:A===h?a=1/3+e-o:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};Ar.rgb.hwb=function(t){let e=t[0],r=t[1],o=t[2],a=Ar.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,o));return o=1-1/255*Math.max(e,Math.max(r,o)),[a,n*100,o*100]};Ar.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(1-e,1-r,1-o),n=(1-e-a)/(1-a)||0,u=(1-r-a)/(1-a)||0,A=(1-o-a)/(1-a)||0;return[n*100,u*100,A*100,a*100]};function w9e(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}Ar.rgb.keyword=function(t){let e=sX[t];if(e)return e;let r=1/0,o;for(let a of Object.keys(BI)){let n=BI[a],u=w9e(t,n);u.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let a=e*.4124+r*.3576+o*.1805,n=e*.2126+r*.7152+o*.0722,u=e*.0193+r*.1192+o*.9505;return[a*100,n*100,u*100]};Ar.rgb.lab=function(t){let e=Ar.rgb.xyz(t),r=e[0],o=e[1],a=e[2];r/=95.047,o/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*o-16,u=500*(r-o),A=200*(o-a);return[n,u,A]};Ar.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a,n,u;if(r===0)return u=o*255,[u,u,u];o<.5?a=o*(1+r):a=o+r-o*r;let A=2*o-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?u=A+(a-A)*6*n:2*n<1?u=a:3*n<2?u=A+(a-A)*(2/3-n)*6:u=A,p[h]=u*255;return p};Ar.hsl.hsv=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=r,n=Math.max(o,.01);o*=2,r*=o<=1?o:2-o,a*=n<=1?n:2-n;let u=(o+r)/2,A=o===0?2*a/(n+a):2*r/(o+r);return[e,A*100,u*100]};Ar.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,o=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),u=255*o*(1-r),A=255*o*(1-r*n),p=255*o*(1-r*(1-n));switch(o*=255,a){case 0:return[o,p,u];case 1:return[A,o,u];case 2:return[u,o,p];case 3:return[u,A,o];case 4:return[p,u,o];case 5:return[o,u,A]}};Ar.hsv.hsl=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=Math.max(o,.01),n,u;u=(2-r)*o;let A=(2-r)*a;return n=r*a,n/=A<=1?A:2-A,n=n||0,u/=2,[e,n*100,u*100]};Ar.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a=r+o,n;a>1&&(r/=a,o/=a);let u=Math.floor(6*e),A=1-o;n=6*e-u,(u&1)!==0&&(n=1-n);let p=r+n*(A-r),h,E,I;switch(u){default:case 6:case 0:h=A,E=p,I=r;break;case 1:h=p,E=A,I=r;break;case 2:h=r,E=A,I=p;break;case 3:h=r,E=p,I=A;break;case 4:h=p,E=r,I=A;break;case 5:h=A,E=r,I=p;break}return[h*255,E*255,I*255]};Ar.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),u=1-Math.min(1,r*(1-a)+a),A=1-Math.min(1,o*(1-a)+a);return[n*255,u*255,A*255]};Ar.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a,n,u;return a=e*3.2406+r*-1.5372+o*-.4986,n=e*-.9689+r*1.8758+o*.0415,u=e*.0557+r*-.204+o*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,u=u>.0031308?1.055*u**(1/2.4)-.055:u*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),u=Math.min(Math.max(0,u),1),[a*255,n*255,u*255]};Ar.xyz.lab=function(t){let e=t[0],r=t[1],o=t[2];e/=95.047,r/=100,o/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let a=116*r-16,n=500*(e-r),u=200*(r-o);return[a,n,u]};Ar.lab.xyz=function(t){let e=t[0],r=t[1],o=t[2],a,n,u;n=(e+16)/116,a=r/500+n,u=n-o/200;let A=n**3,p=a**3,h=u**3;return n=A>.008856?A:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,u=h>.008856?h:(u-16/116)/7.787,a*=95.047,n*=100,u*=108.883,[a,n,u]};Ar.lab.lch=function(t){let e=t[0],r=t[1],o=t[2],a;a=Math.atan2(o,r)*360/2/Math.PI,a<0&&(a+=360);let u=Math.sqrt(r*r+o*o);return[e,u,a]};Ar.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),u=r*Math.sin(a);return[e,n,u]};Ar.rgb.ansi16=function(t,e=null){let[r,o,a]=t,n=e===null?Ar.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let u=30+(Math.round(a/255)<<2|Math.round(o/255)<<1|Math.round(r/255));return n===2&&(u+=60),u};Ar.hsv.ansi16=function(t){return Ar.rgb.ansi16(Ar.hsv.rgb(t),t[2])};Ar.rgb.ansi256=function(t){let e=t[0],r=t[1],o=t[2];return e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)};Ar.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,o=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[o,a,n]};Ar.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,o=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,o,a]};Ar.rgb.hex=function(t){let r=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};Ar.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(A=>A+A).join(""));let o=parseInt(r,16),a=o>>16&255,n=o>>8&255,u=o&255;return[a,n,u]};Ar.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.max(Math.max(e,r),o),n=Math.min(Math.min(e,r),o),u=a-n,A,p;return u<1?A=n/(1-u):A=0,u<=0?p=0:a===e?p=(r-o)/u%6:a===r?p=2+(o-e)/u:p=4+(e-r)/u,p/=6,p%=1,[p*360,u*100,A*100]};Ar.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=r<.5?2*e*r:2*e*(1-r),a=0;return o<1&&(a=(r-.5*o)/(1-o)),[t[0],o*100,a*100]};Ar.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=e*r,a=0;return o<1&&(a=(r-o)/(1-o)),[t[0],o*100,a*100]};Ar.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100;if(r===0)return[o*255,o*255,o*255];let a=[0,0,0],n=e%1*6,u=n%1,A=1-u,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=u,a[2]=0;break;case 1:a[0]=A,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=u;break;case 3:a[0]=0,a[1]=A,a[2]=1;break;case 4:a[0]=u,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=A}return p=(1-r)*o,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};Ar.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e),a=0;return o>0&&(a=e/o),[t[0],a*100,o*100]};Ar.hcg.hsl=function(t){let e=t[1]/100,o=t[2]/100*(1-e)+.5*e,a=0;return o>0&&o<.5?a=e/(2*o):o>=.5&&o<1&&(a=e/(2*(1-o))),[t[0],a*100,o*100]};Ar.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e);return[t[0],(o-e)*100,(1-o)*100]};Ar.hwb.hcg=function(t){let e=t[1]/100,o=1-t[2]/100,a=o-e,n=0;return a<1&&(n=(o-a)/(1-a)),[t[0],a*100,n*100]};Ar.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};Ar.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};Ar.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};Ar.gray.hsl=function(t){return[0,0,t[0]]};Ar.gray.hsv=Ar.gray.hsl;Ar.gray.hwb=function(t){return[0,100,t[0]]};Ar.gray.cmyk=function(t){return[0,0,0,t[0]]};Ar.gray.lab=function(t){return[t[0],0,0]};Ar.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,o=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(o.length)+o};Ar.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var lX=_((bQt,aX)=>{var SP=pN();function I9e(){let t={},e=Object.keys(SP);for(let r=e.length,o=0;o{var hN=pN(),P9e=lX(),xy={},S9e=Object.keys(hN);function x9e(t){let e=function(...r){let o=r[0];return o==null?o:(o.length>1&&(r=o),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function b9e(t){let e=function(...r){let o=r[0];if(o==null)return o;o.length>1&&(r=o);let a=t(r);if(typeof a=="object")for(let n=a.length,u=0;u{xy[t]={},Object.defineProperty(xy[t],"channels",{value:hN[t].channels}),Object.defineProperty(xy[t],"labels",{value:hN[t].labels});let e=P9e(t);Object.keys(e).forEach(o=>{let a=e[o];xy[t][o]=b9e(a),xy[t][o].raw=x9e(a)})});cX.exports=xy});var vI=_((QQt,gX)=>{"use strict";var AX=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,fX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};5;${o}m`},pX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};2;${o[0]};${o[1]};${o[2]}m`},xP=t=>t,hX=(t,e,r)=>[t,e,r],by=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let o=r();return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0}),o},enumerable:!0,configurable:!0})},gN,ky=(t,e,r,o)=>{gN===void 0&&(gN=uX());let a=o?10:0,n={};for(let[u,A]of Object.entries(gN)){let p=u==="ansi16"?"ansi":u;u===e?n[p]=t(r,a):typeof A=="object"&&(n[p]=t(A[e],a))}return n};function k9e(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,o]of Object.entries(e)){for(let[a,n]of Object.entries(o))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:o,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",by(e.color,"ansi",()=>ky(AX,"ansi16",xP,!1)),by(e.color,"ansi256",()=>ky(fX,"ansi256",xP,!1)),by(e.color,"ansi16m",()=>ky(pX,"rgb",hX,!1)),by(e.bgColor,"ansi",()=>ky(AX,"ansi16",xP,!0)),by(e.bgColor,"ansi256",()=>ky(fX,"ansi256",xP,!0)),by(e.bgColor,"ansi16m",()=>ky(pX,"rgb",hX,!0)),e}Object.defineProperty(gX,"exports",{enumerable:!0,get:k9e})});var mX=_((FQt,dX)=>{"use strict";dX.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(r+t),a=e.indexOf("--");return o!==-1&&(a===-1||o{"use strict";var Q9e=Be("os"),yX=Be("tty"),Ol=mX(),{env:ls}=process,Kp;Ol("no-color")||Ol("no-colors")||Ol("color=false")||Ol("color=never")?Kp=0:(Ol("color")||Ol("colors")||Ol("color=true")||Ol("color=always"))&&(Kp=1);"FORCE_COLOR"in ls&&(ls.FORCE_COLOR==="true"?Kp=1:ls.FORCE_COLOR==="false"?Kp=0:Kp=ls.FORCE_COLOR.length===0?1:Math.min(parseInt(ls.FORCE_COLOR,10),3));function dN(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function mN(t,e){if(Kp===0)return 0;if(Ol("color=16m")||Ol("color=full")||Ol("color=truecolor"))return 3;if(Ol("color=256"))return 2;if(t&&!e&&Kp===void 0)return 0;let r=Kp||0;if(ls.TERM==="dumb")return r;if(process.platform==="win32"){let o=Q9e.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in ls)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in ls)||ls.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ls)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ls.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in ls)return 1;if(ls.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ls){let o=parseInt((ls.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ls.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ls.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ls.TERM)||"COLORTERM"in ls?1:r}function F9e(t){let e=mN(t,t&&t.isTTY);return dN(e)}EX.exports={supportsColor:F9e,stdout:dN(mN(!0,yX.isatty(1))),stderr:dN(mN(!0,yX.isatty(2)))}});var wX=_((RQt,CX)=>{"use strict";var T9e=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},R9e=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`),u}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:as.defaultContext.colorDepth>1)?uV:AV}getUsageByRegistration(e,r){let o=this.registrations.get(e);if(typeof o>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(o.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};as.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:IV()}});var uI,FV=Et(()=>{Vp();uI=class extends nt{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} +`)}};uI.paths=[["--clipanion=definitions"]]});var AI,RV=Et(()=>{Vp();AI=class extends nt{async execute(){this.context.stdout.write(this.cli.usage())}};AI.paths=[["-h"],["--help"]]});function uS(t={}){return Ko({definition(e,r){var o;e.addProxy({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){return o.positionals.map(({value:a})=>a)}})}var HT=Et(()=>{Ef()});var fI,TV=Et(()=>{Vp();HT();fI=class extends nt{constructor(){super(...arguments),this.args=uS()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} +`)}};fI.paths=[["--clipanion=tokens"]]});var pI,NV=Et(()=>{Vp();pI=class extends nt{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} +`)}};pI.paths=[["-v"],["--version"]]});var qT={};Vt(qT,{DefinitionsCommand:()=>uI,HelpCommand:()=>AI,TokensCommand:()=>fI,VersionCommand:()=>pI});var LV=Et(()=>{FV();RV();TV();NV()});function OV(t,e,r){let[o,a]=ju(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Ko({definition(p){p.addOption({names:u,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let I,v=typeof o<"u"?[...o]:void 0;for(let{name:x,value:C}of E.options)!A.has(x)||(I=x,v=v??[],v.push(C));return typeof v<"u"?nd(I??h,v,a.validator):v}})}var MV=Et(()=>{Ef()});function UV(t,e,r){let[o,a]=ju(e,r??{}),n=t.split(","),u=new Set(n);return Ko({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E=v);return E}})}var _V=Et(()=>{Ef()});function HV(t,e,r){let[o,a]=ju(e,r??{}),n=t.split(","),u=new Set(n);return Ko({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E??(E=0),v?E+=1:E=0);return E}})}var qV=Et(()=>{Ef()});function jV(t={}){return Ko({definition(e,r){var o;e.addRest({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){let a=u=>{let A=o.positionals[u];return A.extra===el||A.extra===!1&&uu)}})}var GV=Et(()=>{lS();Ef()});function Xqe(t,e,r){let[o,a]=ju(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Ko({definition(p){p.addOption({names:u,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,I){let v,x=o;typeof a.env<"u"&&I.env[a.env]&&(v=a.env,x=I.env[a.env]);for(let{name:C,value:R}of E.options)!A.has(C)||(v=C,x=R);return typeof x=="string"?nd(v??h,x,a.validator):x}})}function Zqe(t={}){let{required:e=!0}=t;return Ko({definition(r,o){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:o,required:t.required})},transformer(r,o,a){var n;for(let u=0;u{lS();Ef()});var ge={};Vt(ge,{Array:()=>OV,Boolean:()=>UV,Counter:()=>HV,Proxy:()=>uS,Rest:()=>jV,String:()=>YV,applyValidator:()=>nd,cleanValidationError:()=>rS,formatError:()=>iI,isOptionSymbol:()=>nI,makeCommandOption:()=>Ko,rerouteArguments:()=>ju});var KV=Et(()=>{Ef();HT();MV();_V();qV();GV();WV()});var hI={};Vt(hI,{Builtins:()=>qT,Cli:()=>as,Command:()=>nt,Option:()=>ge,UsageError:()=>it,formatMarkdownish:()=>Do,run:()=>xV,runExit:()=>bV});var qt=Et(()=>{tS();kT();Vp();QV();LV();KV()});var VV=_((Pkt,$qe)=>{$qe.exports={name:"dotenv",version:"16.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://github.com/motdotla/dotenv?sponsor=1",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var ZV=_((bkt,Cf)=>{var JV=ve("fs"),GT=ve("path"),eje=ve("os"),tje=ve("crypto"),rje=VV(),YT=rje.version,nje=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function ije(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` +`);let o;for(;(o=nje.exec(r))!=null;){let a=o[1],n=o[2]||"";n=n.trim();let u=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),u==='"'&&(n=n.replace(/\\n/g,` +`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function sje(t){let e=XV(t),r=bs.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let o=zV(t).split(","),a=o.length,n;for(let u=0;u=a)throw A}return bs.parse(n)}function oje(t){console.log(`[dotenv@${YT}][INFO] ${t}`)}function aje(t){console.log(`[dotenv@${YT}][WARN] ${t}`)}function jT(t){console.log(`[dotenv@${YT}][DEBUG] ${t}`)}function zV(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function lje(t,e){let r;try{r=new URL(e)}catch(A){throw A.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):A}let o=r.password;if(!o)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,u=t.parsed[n];if(!u)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:u,key:o}}function XV(t){let e=GT.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function cje(t){return t[0]==="~"?GT.join(eje.homedir(),t.slice(1)):t}function uje(t){oje("Loading env from encrypted .env.vault");let e=bs._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),bs.populate(r,e,t),{parsed:e}}function Aje(t){let e=GT.resolve(process.cwd(),".env"),r="utf8",o=Boolean(t&&t.debug);t&&(t.path!=null&&(e=cje(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=bs.parse(JV.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),bs.populate(n,a,t),{parsed:a}}catch(a){return o&&jT(`Failed to load ${e} ${a.message}`),{error:a}}}function fje(t){let e=XV(t);return zV(t).length===0?bs.configDotenv(t):JV.existsSync(e)?bs._configVault(t):(aje(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),bs.configDotenv(t))}function pje(t,e){let r=Buffer.from(e.slice(-64),"hex"),o=Buffer.from(t,"base64"),a=o.slice(0,12),n=o.slice(-16);o=o.slice(12,-16);try{let u=tje.createDecipheriv("aes-256-gcm",r,a);return u.setAuthTag(n),`${u.update(o)}${u.final()}`}catch(u){let A=u instanceof RangeError,p=u.message==="Invalid key length",h=u.message==="Unsupported state or unable to authenticate data";if(A||p){let E="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(E)}else if(h){let E="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(E)}else throw console.error("Error: ",u.code),console.error("Error: ",u.message),u}}function hje(t,e,r={}){let o=Boolean(r&&r.debug),a=Boolean(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),o&&jT(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var bs={configDotenv:Aje,_configVault:uje,_parseVault:sje,config:fje,decrypt:pje,parse:ije,populate:hje};Cf.exports.configDotenv=bs.configDotenv;Cf.exports._configVault=bs._configVault;Cf.exports._parseVault=bs._parseVault;Cf.exports.config=bs.config;Cf.exports.decrypt=bs.decrypt;Cf.exports.parse=bs.parse;Cf.exports.populate=bs.populate;Cf.exports=bs});var eJ=_((xkt,$V)=>{"use strict";$V.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var id=_((kkt,WT)=>{"use strict";var gje=eJ(),tJ=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,o=()=>{r--,e.length>0&&e.shift()()},a=(A,p,...h)=>{r++;let E=gje(A,...h);p(E),E.then(o,o)},n=(A,p,...h)=>{rnew Promise(h=>n(A,h,...p));return Object.defineProperties(u,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),u};WT.exports=tJ;WT.exports.default=tJ});function Wu(t){return`YN${t.toString(10).padStart(4,"0")}`}function AS(t){let e=Number(t.slice(2));if(typeof wr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var wr,fS=Et(()=>{wr=(Oe=>(Oe[Oe.UNNAMED=0]="UNNAMED",Oe[Oe.EXCEPTION=1]="EXCEPTION",Oe[Oe.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Oe[Oe.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Oe[Oe.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Oe[Oe.BUILD_DISABLED=5]="BUILD_DISABLED",Oe[Oe.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Oe[Oe.MUST_BUILD=7]="MUST_BUILD",Oe[Oe.MUST_REBUILD=8]="MUST_REBUILD",Oe[Oe.BUILD_FAILED=9]="BUILD_FAILED",Oe[Oe.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Oe[Oe.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Oe[Oe.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Oe[Oe.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Oe[Oe.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Oe[Oe.REMOTE_INVALID=15]="REMOTE_INVALID",Oe[Oe.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Oe[Oe.RESOLUTION_PACK=17]="RESOLUTION_PACK",Oe[Oe.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Oe[Oe.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Oe[Oe.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Oe[Oe.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Oe[Oe.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Oe[Oe.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Oe[Oe.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Oe[Oe.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Oe[Oe.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Oe[Oe.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Oe[Oe.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Oe[Oe.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Oe[Oe.FETCH_FAILED=30]="FETCH_FAILED",Oe[Oe.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Oe[Oe.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Oe[Oe.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Oe[Oe.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Oe[Oe.NETWORK_ERROR=35]="NETWORK_ERROR",Oe[Oe.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Oe[Oe.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Oe[Oe.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Oe[Oe.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Oe[Oe.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Oe[Oe.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Oe[Oe.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Oe[Oe.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Oe[Oe.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Oe[Oe.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Oe[Oe.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Oe[Oe.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Oe[Oe.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Oe[Oe.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Oe[Oe.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Oe[Oe.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Oe[Oe.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Oe[Oe.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Oe[Oe.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Oe[Oe.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Oe[Oe.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Oe[Oe.INVALID_MANIFEST=57]="INVALID_MANIFEST",Oe[Oe.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Oe[Oe.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Oe[Oe.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Oe[Oe.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Oe[Oe.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Oe[Oe.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Oe[Oe.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Oe[Oe.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Oe[Oe.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Oe[Oe.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Oe[Oe.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Oe[Oe.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Oe[Oe.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Oe[Oe.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Oe[Oe.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Oe[Oe.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Oe[Oe.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Oe[Oe.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Oe[Oe.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Oe[Oe.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Oe[Oe.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Oe[Oe.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Oe[Oe.NETWORK_DISABLED=80]="NETWORK_DISABLED",Oe[Oe.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Oe[Oe.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Oe[Oe.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Oe[Oe.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Oe[Oe.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Oe[Oe.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Oe[Oe.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Oe[Oe.VERSION_NOTICE=88]="VERSION_NOTICE",Oe[Oe.TIPS_NOTICE=89]="TIPS_NOTICE",Oe[Oe.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Oe))(wr||{})});var gI=_((Fkt,rJ)=>{var dje="2.0.0",mje=Number.MAX_SAFE_INTEGER||9007199254740991,yje=16,Eje=256-6,Cje=["major","premajor","minor","preminor","patch","prepatch","prerelease"];rJ.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:yje,MAX_SAFE_BUILD_LENGTH:Eje,MAX_SAFE_INTEGER:mje,RELEASE_TYPES:Cje,SEMVER_SPEC_VERSION:dje,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var dI=_((Rkt,nJ)=>{var wje=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};nJ.exports=wje});var vy=_((wf,iJ)=>{var{MAX_SAFE_COMPONENT_LENGTH:KT,MAX_SAFE_BUILD_LENGTH:Ije,MAX_LENGTH:Bje}=gI(),vje=dI();wf=iJ.exports={};var Dje=wf.re=[],Sje=wf.safeRe=[],lr=wf.src=[],cr=wf.t={},Pje=0,VT="[a-zA-Z0-9-]",bje=[["\\s",1],["\\d",Bje],[VT,Ije]],xje=t=>{for(let[e,r]of bje)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Jr=(t,e,r)=>{let o=xje(e),a=Pje++;vje(t,a,e),cr[t]=a,lr[a]=e,Dje[a]=new RegExp(e,r?"g":void 0),Sje[a]=new RegExp(o,r?"g":void 0)};Jr("NUMERICIDENTIFIER","0|[1-9]\\d*");Jr("NUMERICIDENTIFIERLOOSE","\\d+");Jr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${VT}*`);Jr("MAINVERSION",`(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})`);Jr("MAINVERSIONLOOSE",`(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})`);Jr("PRERELEASEIDENTIFIER",`(?:${lr[cr.NUMERICIDENTIFIER]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASEIDENTIFIERLOOSE",`(?:${lr[cr.NUMERICIDENTIFIERLOOSE]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASE",`(?:-(${lr[cr.PRERELEASEIDENTIFIER]}(?:\\.${lr[cr.PRERELEASEIDENTIFIER]})*))`);Jr("PRERELEASELOOSE",`(?:-?(${lr[cr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${lr[cr.PRERELEASEIDENTIFIERLOOSE]})*))`);Jr("BUILDIDENTIFIER",`${VT}+`);Jr("BUILD",`(?:\\+(${lr[cr.BUILDIDENTIFIER]}(?:\\.${lr[cr.BUILDIDENTIFIER]})*))`);Jr("FULLPLAIN",`v?${lr[cr.MAINVERSION]}${lr[cr.PRERELEASE]}?${lr[cr.BUILD]}?`);Jr("FULL",`^${lr[cr.FULLPLAIN]}$`);Jr("LOOSEPLAIN",`[v=\\s]*${lr[cr.MAINVERSIONLOOSE]}${lr[cr.PRERELEASELOOSE]}?${lr[cr.BUILD]}?`);Jr("LOOSE",`^${lr[cr.LOOSEPLAIN]}$`);Jr("GTLT","((?:<|>)?=?)");Jr("XRANGEIDENTIFIERLOOSE",`${lr[cr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Jr("XRANGEIDENTIFIER",`${lr[cr.NUMERICIDENTIFIER]}|x|X|\\*`);Jr("XRANGEPLAIN",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:${lr[cr.PRERELEASE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGEPLAINLOOSE",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:${lr[cr.PRERELEASELOOSE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAIN]}$`);Jr("XRANGELOOSE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COERCE",`(^|[^\\d])(\\d{1,${KT}})(?:\\.(\\d{1,${KT}}))?(?:\\.(\\d{1,${KT}}))?(?:$|[^\\d])`);Jr("COERCERTL",lr[cr.COERCE],!0);Jr("LONETILDE","(?:~>?)");Jr("TILDETRIM",`(\\s*)${lr[cr.LONETILDE]}\\s+`,!0);wf.tildeTrimReplace="$1~";Jr("TILDE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAIN]}$`);Jr("TILDELOOSE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("LONECARET","(?:\\^)");Jr("CARETTRIM",`(\\s*)${lr[cr.LONECARET]}\\s+`,!0);wf.caretTrimReplace="$1^";Jr("CARET",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAIN]}$`);Jr("CARETLOOSE",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COMPARATORLOOSE",`^${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]})$|^$`);Jr("COMPARATOR",`^${lr[cr.GTLT]}\\s*(${lr[cr.FULLPLAIN]})$|^$`);Jr("COMPARATORTRIM",`(\\s*)${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]}|${lr[cr.XRANGEPLAIN]})`,!0);wf.comparatorTrimReplace="$1$2$3";Jr("HYPHENRANGE",`^\\s*(${lr[cr.XRANGEPLAIN]})\\s+-\\s+(${lr[cr.XRANGEPLAIN]})\\s*$`);Jr("HYPHENRANGELOOSE",`^\\s*(${lr[cr.XRANGEPLAINLOOSE]})\\s+-\\s+(${lr[cr.XRANGEPLAINLOOSE]})\\s*$`);Jr("STAR","(<|>)?=?\\s*\\*");Jr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Jr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var pS=_((Tkt,sJ)=>{var kje=Object.freeze({loose:!0}),Qje=Object.freeze({}),Fje=t=>t?typeof t!="object"?kje:t:Qje;sJ.exports=Fje});var JT=_((Nkt,lJ)=>{var oJ=/^[0-9]+$/,aJ=(t,e)=>{let r=oJ.test(t),o=oJ.test(e);return r&&o&&(t=+t,e=+e),t===e?0:r&&!o?-1:o&&!r?1:taJ(e,t);lJ.exports={compareIdentifiers:aJ,rcompareIdentifiers:Rje}});var So=_((Lkt,fJ)=>{var hS=dI(),{MAX_LENGTH:cJ,MAX_SAFE_INTEGER:gS}=gI(),{safeRe:uJ,t:AJ}=vy(),Tje=pS(),{compareIdentifiers:Dy}=JT(),tl=class{constructor(e,r){if(r=Tje(r),e instanceof tl){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>cJ)throw new TypeError(`version is longer than ${cJ} characters`);hS("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let o=e.trim().match(r.loose?uJ[AJ.LOOSE]:uJ[AJ.FULL]);if(!o)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>gS||this.major<0)throw new TypeError("Invalid major version");if(this.minor>gS||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>gS||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&o===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];o===!1&&(n=[r]),Dy(this.prerelease[0],r)===0?isNaN(this.prerelease[1])&&(this.prerelease=n):this.prerelease=n}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};fJ.exports=tl});var sd=_((Okt,hJ)=>{var pJ=So(),Nje=(t,e,r=!1)=>{if(t instanceof pJ)return t;try{return new pJ(t,e)}catch(o){if(!r)return null;throw o}};hJ.exports=Nje});var dJ=_((Mkt,gJ)=>{var Lje=sd(),Oje=(t,e)=>{let r=Lje(t,e);return r?r.version:null};gJ.exports=Oje});var yJ=_((Ukt,mJ)=>{var Mje=sd(),Uje=(t,e)=>{let r=Mje(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};mJ.exports=Uje});var wJ=_((_kt,CJ)=>{var EJ=So(),_je=(t,e,r,o,a)=>{typeof r=="string"&&(a=o,o=r,r=void 0);try{return new EJ(t instanceof EJ?t.version:t,r).inc(e,o,a).version}catch{return null}};CJ.exports=_je});var vJ=_((Hkt,BJ)=>{var IJ=sd(),Hje=(t,e)=>{let r=IJ(t,null,!0),o=IJ(e,null,!0),a=r.compare(o);if(a===0)return null;let n=a>0,u=n?r:o,A=n?o:r,p=!!u.prerelease.length;if(!!A.prerelease.length&&!p)return!A.patch&&!A.minor?"major":u.patch?"patch":u.minor?"minor":"major";let E=p?"pre":"";return r.major!==o.major?E+"major":r.minor!==o.minor?E+"minor":r.patch!==o.patch?E+"patch":"prerelease"};BJ.exports=Hje});var SJ=_((qkt,DJ)=>{var qje=So(),jje=(t,e)=>new qje(t,e).major;DJ.exports=jje});var bJ=_((jkt,PJ)=>{var Gje=So(),Yje=(t,e)=>new Gje(t,e).minor;PJ.exports=Yje});var kJ=_((Gkt,xJ)=>{var Wje=So(),Kje=(t,e)=>new Wje(t,e).patch;xJ.exports=Kje});var FJ=_((Ykt,QJ)=>{var Vje=sd(),Jje=(t,e)=>{let r=Vje(t,e);return r&&r.prerelease.length?r.prerelease:null};QJ.exports=Jje});var Ll=_((Wkt,TJ)=>{var RJ=So(),zje=(t,e,r)=>new RJ(t,r).compare(new RJ(e,r));TJ.exports=zje});var LJ=_((Kkt,NJ)=>{var Xje=Ll(),Zje=(t,e,r)=>Xje(e,t,r);NJ.exports=Zje});var MJ=_((Vkt,OJ)=>{var $je=Ll(),eGe=(t,e)=>$je(t,e,!0);OJ.exports=eGe});var dS=_((Jkt,_J)=>{var UJ=So(),tGe=(t,e,r)=>{let o=new UJ(t,r),a=new UJ(e,r);return o.compare(a)||o.compareBuild(a)};_J.exports=tGe});var qJ=_((zkt,HJ)=>{var rGe=dS(),nGe=(t,e)=>t.sort((r,o)=>rGe(r,o,e));HJ.exports=nGe});var GJ=_((Xkt,jJ)=>{var iGe=dS(),sGe=(t,e)=>t.sort((r,o)=>iGe(o,r,e));jJ.exports=sGe});var mI=_((Zkt,YJ)=>{var oGe=Ll(),aGe=(t,e,r)=>oGe(t,e,r)>0;YJ.exports=aGe});var mS=_(($kt,WJ)=>{var lGe=Ll(),cGe=(t,e,r)=>lGe(t,e,r)<0;WJ.exports=cGe});var zT=_((eQt,KJ)=>{var uGe=Ll(),AGe=(t,e,r)=>uGe(t,e,r)===0;KJ.exports=AGe});var XT=_((tQt,VJ)=>{var fGe=Ll(),pGe=(t,e,r)=>fGe(t,e,r)!==0;VJ.exports=pGe});var yS=_((rQt,JJ)=>{var hGe=Ll(),gGe=(t,e,r)=>hGe(t,e,r)>=0;JJ.exports=gGe});var ES=_((nQt,zJ)=>{var dGe=Ll(),mGe=(t,e,r)=>dGe(t,e,r)<=0;zJ.exports=mGe});var ZT=_((iQt,XJ)=>{var yGe=zT(),EGe=XT(),CGe=mI(),wGe=yS(),IGe=mS(),BGe=ES(),vGe=(t,e,r,o)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return yGe(t,r,o);case"!=":return EGe(t,r,o);case">":return CGe(t,r,o);case">=":return wGe(t,r,o);case"<":return IGe(t,r,o);case"<=":return BGe(t,r,o);default:throw new TypeError(`Invalid operator: ${e}`)}};XJ.exports=vGe});var $J=_((sQt,ZJ)=>{var DGe=So(),SGe=sd(),{safeRe:CS,t:wS}=vy(),PGe=(t,e)=>{if(t instanceof DGe)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(CS[wS.COERCE]);else{let o;for(;(o=CS[wS.COERCERTL].exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||o.index+o[0].length!==r.index+r[0].length)&&(r=o),CS[wS.COERCERTL].lastIndex=o.index+o[1].length+o[2].length;CS[wS.COERCERTL].lastIndex=-1}return r===null?null:SGe(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,e)};ZJ.exports=PGe});var tz=_((oQt,ez)=>{"use strict";ez.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var IS=_((aQt,rz)=>{"use strict";rz.exports=Cn;Cn.Node=od;Cn.create=Cn;function Cn(t){var e=this;if(e instanceof Cn||(e=new Cn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,o=arguments.length;r1)r=e;else if(this.head)o=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;o!==null;a++)r=t(r,o.value,a),o=o.next;return r};Cn.prototype.reduceReverse=function(t,e){var r,o=this.tail;if(arguments.length>1)r=e;else if(this.tail)o=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;o!==null;a--)r=t(r,o.value,a),o=o.prev;return r};Cn.prototype.toArray=function(){for(var t=new Array(this.length),e=0,r=this.head;r!==null;e++)t[e]=r.value,r=r.next;return t};Cn.prototype.toArrayReverse=function(){for(var t=new Array(this.length),e=0,r=this.tail;r!==null;e++)t[e]=r.value,r=r.prev;return t};Cn.prototype.slice=function(t,e){e=e||this.length,e<0&&(e+=this.length),t=t||0,t<0&&(t+=this.length);var r=new Cn;if(ethis.length&&(e=this.length);for(var o=0,a=this.head;a!==null&&othis.length&&(e=this.length);for(var o=this.length,a=this.tail;a!==null&&o>e;o--)a=a.prev;for(;a!==null&&o>t;o--,a=a.prev)r.push(a.value);return r};Cn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var o=0,a=this.head;a!==null&&o{"use strict";var QGe=IS(),ad=Symbol("max"),Bf=Symbol("length"),Sy=Symbol("lengthCalculator"),EI=Symbol("allowStale"),ld=Symbol("maxAge"),If=Symbol("dispose"),nz=Symbol("noDisposeOnSet"),xs=Symbol("lruList"),Mc=Symbol("cache"),sz=Symbol("updateAgeOnGet"),$T=()=>1,tN=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let r=this[ad]=e.max||1/0,o=e.length||$T;if(this[Sy]=typeof o!="function"?$T:o,this[EI]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[ld]=e.maxAge||0,this[If]=e.dispose,this[nz]=e.noDisposeOnSet||!1,this[sz]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[ad]=e||1/0,yI(this)}get max(){return this[ad]}set allowStale(e){this[EI]=!!e}get allowStale(){return this[EI]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[ld]=e,yI(this)}get maxAge(){return this[ld]}set lengthCalculator(e){typeof e!="function"&&(e=$T),e!==this[Sy]&&(this[Sy]=e,this[Bf]=0,this[xs].forEach(r=>{r.length=this[Sy](r.value,r.key),this[Bf]+=r.length})),yI(this)}get lengthCalculator(){return this[Sy]}get length(){return this[Bf]}get itemCount(){return this[xs].length}rforEach(e,r){r=r||this;for(let o=this[xs].tail;o!==null;){let a=o.prev;iz(this,e,o,r),o=a}}forEach(e,r){r=r||this;for(let o=this[xs].head;o!==null;){let a=o.next;iz(this,e,o,r),o=a}}keys(){return this[xs].toArray().map(e=>e.key)}values(){return this[xs].toArray().map(e=>e.value)}reset(){this[If]&&this[xs]&&this[xs].length&&this[xs].forEach(e=>this[If](e.key,e.value)),this[Mc]=new Map,this[xs]=new QGe,this[Bf]=0}dump(){return this[xs].map(e=>BS(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[xs]}set(e,r,o){if(o=o||this[ld],o&&typeof o!="number")throw new TypeError("maxAge must be a number");let a=o?Date.now():0,n=this[Sy](r,e);if(this[Mc].has(e)){if(n>this[ad])return Py(this,this[Mc].get(e)),!1;let p=this[Mc].get(e).value;return this[If]&&(this[nz]||this[If](e,p.value)),p.now=a,p.maxAge=o,p.value=r,this[Bf]+=n-p.length,p.length=n,this.get(e),yI(this),!0}let u=new rN(e,r,n,a,o);return u.length>this[ad]?(this[If]&&this[If](e,r),!1):(this[Bf]+=u.length,this[xs].unshift(u),this[Mc].set(e,this[xs].head),yI(this),!0)}has(e){if(!this[Mc].has(e))return!1;let r=this[Mc].get(e).value;return!BS(this,r)}get(e){return eN(this,e,!0)}peek(e){return eN(this,e,!1)}pop(){let e=this[xs].tail;return e?(Py(this,e),e.value):null}del(e){Py(this,this[Mc].get(e))}load(e){this.reset();let r=Date.now();for(let o=e.length-1;o>=0;o--){let a=e[o],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let u=n-r;u>0&&this.set(a.k,a.v,u)}}}prune(){this[Mc].forEach((e,r)=>eN(this,r,!1))}},eN=(t,e,r)=>{let o=t[Mc].get(e);if(o){let a=o.value;if(BS(t,a)){if(Py(t,o),!t[EI])return}else r&&(t[sz]&&(o.value.now=Date.now()),t[xs].unshiftNode(o));return a.value}},BS=(t,e)=>{if(!e||!e.maxAge&&!t[ld])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[ld]&&r>t[ld]},yI=t=>{if(t[Bf]>t[ad])for(let e=t[xs].tail;t[Bf]>t[ad]&&e!==null;){let r=e.prev;Py(t,e),e=r}},Py=(t,e)=>{if(e){let r=e.value;t[If]&&t[If](r.key,r.value),t[Bf]-=r.length,t[Mc].delete(r.key),t[xs].removeNode(e)}},rN=class{constructor(e,r,o,a,n){this.key=e,this.value=r,this.length=o,this.now=a,this.maxAge=n||0}},iz=(t,e,r,o)=>{let a=r.value;BS(t,a)&&(Py(t,r),t[EI]||(a=void 0)),a&&e.call(o,a.value,a.key,t)};oz.exports=tN});var Ol=_((cQt,Az)=>{var cd=class{constructor(e,r){if(r=RGe(r),e instanceof cd)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new cd(e.raw,r);if(e instanceof nN)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(o=>this.parseRange(o.trim())).filter(o=>o.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let o=this.set[0];if(this.set=this.set.filter(a=>!cz(a[0])),this.set.length===0)this.set=[o];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&_Ge(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let o=((this.options.includePrerelease&&MGe)|(this.options.loose&&UGe))+":"+e,a=lz.get(o);if(a)return a;let n=this.options.loose,u=n?Da[zo.HYPHENRANGELOOSE]:Da[zo.HYPHENRANGE];e=e.replace(u,zGe(this.options.includePrerelease)),ci("hyphen replace",e),e=e.replace(Da[zo.COMPARATORTRIM],NGe),ci("comparator trim",e),e=e.replace(Da[zo.TILDETRIM],LGe),ci("tilde trim",e),e=e.replace(Da[zo.CARETTRIM],OGe),ci("caret trim",e);let A=e.split(" ").map(I=>HGe(I,this.options)).join(" ").split(/\s+/).map(I=>JGe(I,this.options));n&&(A=A.filter(I=>(ci("loose invalid filter",I,this.options),!!I.match(Da[zo.COMPARATORLOOSE])))),ci("range list",A);let p=new Map,h=A.map(I=>new nN(I,this.options));for(let I of h){if(cz(I))return[I];p.set(I.value,I)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return lz.set(o,E),E}intersects(e,r){if(!(e instanceof cd))throw new TypeError("a Range is required");return this.set.some(o=>uz(o,r)&&e.set.some(a=>uz(a,r)&&o.every(n=>a.every(u=>n.intersects(u,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new TGe(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",_Ge=t=>t.value==="",uz=(t,e)=>{let r=!0,o=t.slice(),a=o.pop();for(;r&&o.length;)r=o.every(n=>a.intersects(n,e)),a=o.pop();return r},HGe=(t,e)=>(ci("comp",t,e),t=GGe(t,e),ci("caret",t),t=qGe(t,e),ci("tildes",t),t=WGe(t,e),ci("xrange",t),t=VGe(t,e),ci("stars",t),t),Xo=t=>!t||t.toLowerCase()==="x"||t==="*",qGe=(t,e)=>t.trim().split(/\s+/).map(r=>jGe(r,e)).join(" "),jGe=(t,e)=>{let r=e.loose?Da[zo.TILDELOOSE]:Da[zo.TILDE];return t.replace(r,(o,a,n,u,A)=>{ci("tilde",t,o,a,n,u,A);let p;return Xo(a)?p="":Xo(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:Xo(u)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:A?(ci("replaceTilde pr",A),p=`>=${a}.${n}.${u}-${A} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${u} <${a}.${+n+1}.0-0`,ci("tilde return",p),p})},GGe=(t,e)=>t.trim().split(/\s+/).map(r=>YGe(r,e)).join(" "),YGe=(t,e)=>{ci("caret",t,e);let r=e.loose?Da[zo.CARETLOOSE]:Da[zo.CARET],o=e.includePrerelease?"-0":"";return t.replace(r,(a,n,u,A,p)=>{ci("caret",t,a,n,u,A,p);let h;return Xo(n)?h="":Xo(u)?h=`>=${n}.0.0${o} <${+n+1}.0.0-0`:Xo(A)?n==="0"?h=`>=${n}.${u}.0${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.0${o} <${+n+1}.0.0-0`:p?(ci("replaceCaret pr",p),n==="0"?u==="0"?h=`>=${n}.${u}.${A}-${p} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}-${p} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A}-${p} <${+n+1}.0.0-0`):(ci("no pr"),n==="0"?u==="0"?h=`>=${n}.${u}.${A}${o} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A} <${+n+1}.0.0-0`),ci("caret return",h),h})},WGe=(t,e)=>(ci("replaceXRanges",t,e),t.split(/\s+/).map(r=>KGe(r,e)).join(" ")),KGe=(t,e)=>{t=t.trim();let r=e.loose?Da[zo.XRANGELOOSE]:Da[zo.XRANGE];return t.replace(r,(o,a,n,u,A,p)=>{ci("xRange",t,o,a,n,u,A,p);let h=Xo(n),E=h||Xo(u),I=E||Xo(A),v=I;return a==="="&&v&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?o="<0.0.0-0":o="*":a&&v?(E&&(u=0),A=0,a===">"?(a=">=",E?(n=+n+1,u=0,A=0):(u=+u+1,A=0)):a==="<="&&(a="<",E?n=+n+1:u=+u+1),a==="<"&&(p="-0"),o=`${a+n}.${u}.${A}${p}`):E?o=`>=${n}.0.0${p} <${+n+1}.0.0-0`:I&&(o=`>=${n}.${u}.0${p} <${n}.${+u+1}.0-0`),ci("xRange return",o),o})},VGe=(t,e)=>(ci("replaceStars",t,e),t.trim().replace(Da[zo.STAR],"")),JGe=(t,e)=>(ci("replaceGTE0",t,e),t.trim().replace(Da[e.includePrerelease?zo.GTE0PRE:zo.GTE0],"")),zGe=t=>(e,r,o,a,n,u,A,p,h,E,I,v,x)=>(Xo(o)?r="":Xo(a)?r=`>=${o}.0.0${t?"-0":""}`:Xo(n)?r=`>=${o}.${a}.0${t?"-0":""}`:u?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Xo(h)?p="":Xo(E)?p=`<${+h+1}.0.0-0`:Xo(I)?p=`<${h}.${+E+1}.0-0`:v?p=`<=${h}.${E}.${I}-${v}`:t?p=`<${h}.${E}.${+I+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),XGe=(t,e,r)=>{for(let o=0;o0){let a=t[o].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var CI=_((uQt,mz)=>{var wI=Symbol("SemVer ANY"),by=class{static get ANY(){return wI}constructor(e,r){if(r=fz(r),e instanceof by){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),sN("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===wI?this.value="":this.value=this.operator+this.semver.version,sN("comp",this)}parse(e){let r=this.options.loose?pz[hz.COMPARATORLOOSE]:pz[hz.COMPARATOR],o=e.match(r);if(!o)throw new TypeError(`Invalid comparator: ${e}`);this.operator=o[1]!==void 0?o[1]:"",this.operator==="="&&(this.operator=""),o[2]?this.semver=new gz(o[2],this.options.loose):this.semver=wI}toString(){return this.value}test(e){if(sN("Comparator.test",e,this.options.loose),this.semver===wI||e===wI)return!0;if(typeof e=="string")try{e=new gz(e,this.options)}catch{return!1}return iN(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof by))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new dz(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new dz(this.value,r).test(e.semver):(r=fz(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||iN(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||iN(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};mz.exports=by;var fz=pS(),{safeRe:pz,t:hz}=vy(),iN=ZT(),sN=dI(),gz=So(),dz=Ol()});var II=_((AQt,yz)=>{var ZGe=Ol(),$Ge=(t,e,r)=>{try{e=new ZGe(e,r)}catch{return!1}return e.test(t)};yz.exports=$Ge});var Cz=_((fQt,Ez)=>{var e5e=Ol(),t5e=(t,e)=>new e5e(t,e).set.map(r=>r.map(o=>o.value).join(" ").trim().split(" "));Ez.exports=t5e});var Iz=_((pQt,wz)=>{var r5e=So(),n5e=Ol(),i5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new n5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===-1)&&(o=u,a=new r5e(o,r))}),o};wz.exports=i5e});var vz=_((hQt,Bz)=>{var s5e=So(),o5e=Ol(),a5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new o5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===1)&&(o=u,a=new s5e(o,r))}),o};Bz.exports=a5e});var Pz=_((gQt,Sz)=>{var oN=So(),l5e=Ol(),Dz=mI(),c5e=(t,e)=>{t=new l5e(t,e);let r=new oN("0.0.0");if(t.test(r)||(r=new oN("0.0.0-0"),t.test(r)))return r;r=null;for(let o=0;o{let A=new oN(u.semver.version);switch(u.operator){case">":A.prerelease.length===0?A.patch++:A.prerelease.push(0),A.raw=A.format();case"":case">=":(!n||Dz(A,n))&&(n=A);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),n&&(!r||Dz(r,n))&&(r=n)}return r&&t.test(r)?r:null};Sz.exports=c5e});var xz=_((dQt,bz)=>{var u5e=Ol(),A5e=(t,e)=>{try{return new u5e(t,e).range||"*"}catch{return null}};bz.exports=A5e});var vS=_((mQt,Rz)=>{var f5e=So(),Fz=CI(),{ANY:p5e}=Fz,h5e=Ol(),g5e=II(),kz=mI(),Qz=mS(),d5e=ES(),m5e=yS(),y5e=(t,e,r,o)=>{t=new f5e(t,o),e=new h5e(e,o);let a,n,u,A,p;switch(r){case">":a=kz,n=d5e,u=Qz,A=">",p=">=";break;case"<":a=Qz,n=m5e,u=kz,A="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(g5e(t,e,o))return!1;for(let h=0;h{x.semver===p5e&&(x=new Fz(">=0.0.0")),I=I||x,v=v||x,a(x.semver,I.semver,o)?I=x:u(x.semver,v.semver,o)&&(v=x)}),I.operator===A||I.operator===p||(!v.operator||v.operator===A)&&n(t,v.semver))return!1;if(v.operator===p&&u(t,v.semver))return!1}return!0};Rz.exports=y5e});var Nz=_((yQt,Tz)=>{var E5e=vS(),C5e=(t,e,r)=>E5e(t,e,">",r);Tz.exports=C5e});var Oz=_((EQt,Lz)=>{var w5e=vS(),I5e=(t,e,r)=>w5e(t,e,"<",r);Lz.exports=I5e});var _z=_((CQt,Uz)=>{var Mz=Ol(),B5e=(t,e,r)=>(t=new Mz(t,r),e=new Mz(e,r),t.intersects(e,r));Uz.exports=B5e});var qz=_((wQt,Hz)=>{var v5e=II(),D5e=Ll();Hz.exports=(t,e,r)=>{let o=[],a=null,n=null,u=t.sort((E,I)=>D5e(E,I,r));for(let E of u)v5e(E,e,r)?(n=E,a||(a=E)):(n&&o.push([a,n]),n=null,a=null);a&&o.push([a,null]);let A=[];for(let[E,I]of o)E===I?A.push(E):!I&&E===u[0]?A.push("*"):I?E===u[0]?A.push(`<=${I}`):A.push(`${E} - ${I}`):A.push(`>=${E}`);let p=A.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var jz=Ol(),lN=CI(),{ANY:aN}=lN,BI=II(),cN=Ll(),S5e=(t,e,r={})=>{if(t===e)return!0;t=new jz(t,r),e=new jz(e,r);let o=!1;e:for(let a of t.set){for(let n of e.set){let u=b5e(a,n,r);if(o=o||u!==null,u)continue e}if(o)return!1}return!0},P5e=[new lN(">=0.0.0-0")],Gz=[new lN(">=0.0.0")],b5e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===aN){if(e.length===1&&e[0].semver===aN)return!0;r.includePrerelease?t=P5e:t=Gz}if(e.length===1&&e[0].semver===aN){if(r.includePrerelease)return!0;e=Gz}let o=new Set,a,n;for(let x of t)x.operator===">"||x.operator===">="?a=Yz(a,x,r):x.operator==="<"||x.operator==="<="?n=Wz(n,x,r):o.add(x.semver);if(o.size>1)return null;let u;if(a&&n){if(u=cN(a.semver,n.semver,r),u>0)return null;if(u===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let x of o){if(a&&!BI(x,String(a),r)||n&&!BI(x,String(n),r))return null;for(let C of e)if(!BI(x,String(C),r))return!1;return!0}let A,p,h,E,I=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,v=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;I&&I.prerelease.length===1&&n.operator==="<"&&I.prerelease[0]===0&&(I=!1);for(let x of e){if(E=E||x.operator===">"||x.operator===">=",h=h||x.operator==="<"||x.operator==="<=",a){if(v&&x.semver.prerelease&&x.semver.prerelease.length&&x.semver.major===v.major&&x.semver.minor===v.minor&&x.semver.patch===v.patch&&(v=!1),x.operator===">"||x.operator===">="){if(A=Yz(a,x,r),A===x&&A!==a)return!1}else if(a.operator===">="&&!BI(a.semver,String(x),r))return!1}if(n){if(I&&x.semver.prerelease&&x.semver.prerelease.length&&x.semver.major===I.major&&x.semver.minor===I.minor&&x.semver.patch===I.patch&&(I=!1),x.operator==="<"||x.operator==="<="){if(p=Wz(n,x,r),p===x&&p!==n)return!1}else if(n.operator==="<="&&!BI(n.semver,String(x),r))return!1}if(!x.operator&&(n||a)&&u!==0)return!1}return!(a&&h&&!n&&u!==0||n&&E&&!a&&u!==0||v||I)},Yz=(t,e,r)=>{if(!t)return e;let o=cN(t.semver,e.semver,r);return o>0?t:o<0||e.operator===">"&&t.operator===">="?e:t},Wz=(t,e,r)=>{if(!t)return e;let o=cN(t.semver,e.semver,r);return o<0?t:o>0||e.operator==="<"&&t.operator==="<="?e:t};Kz.exports=S5e});var zn=_((BQt,Xz)=>{var uN=vy(),Jz=gI(),x5e=So(),zz=JT(),k5e=sd(),Q5e=dJ(),F5e=yJ(),R5e=wJ(),T5e=vJ(),N5e=SJ(),L5e=bJ(),O5e=kJ(),M5e=FJ(),U5e=Ll(),_5e=LJ(),H5e=MJ(),q5e=dS(),j5e=qJ(),G5e=GJ(),Y5e=mI(),W5e=mS(),K5e=zT(),V5e=XT(),J5e=yS(),z5e=ES(),X5e=ZT(),Z5e=$J(),$5e=CI(),e9e=Ol(),t9e=II(),r9e=Cz(),n9e=Iz(),i9e=vz(),s9e=Pz(),o9e=xz(),a9e=vS(),l9e=Nz(),c9e=Oz(),u9e=_z(),A9e=qz(),f9e=Vz();Xz.exports={parse:k5e,valid:Q5e,clean:F5e,inc:R5e,diff:T5e,major:N5e,minor:L5e,patch:O5e,prerelease:M5e,compare:U5e,rcompare:_5e,compareLoose:H5e,compareBuild:q5e,sort:j5e,rsort:G5e,gt:Y5e,lt:W5e,eq:K5e,neq:V5e,gte:J5e,lte:z5e,cmp:X5e,coerce:Z5e,Comparator:$5e,Range:e9e,satisfies:t9e,toComparators:r9e,maxSatisfying:n9e,minSatisfying:i9e,minVersion:s9e,validRange:o9e,outside:a9e,gtr:l9e,ltr:c9e,intersects:u9e,simplifyRange:A9e,subset:f9e,SemVer:x5e,re:uN.re,src:uN.src,tokens:uN.t,SEMVER_SPEC_VERSION:Jz.SEMVER_SPEC_VERSION,RELEASE_TYPES:Jz.RELEASE_TYPES,compareIdentifiers:zz.compareIdentifiers,rcompareIdentifiers:zz.rcompareIdentifiers}});var $z=_((vQt,Zz)=>{"use strict";function p9e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function ud(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,ud)}p9e(ud,Error);ud.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I{switch(Ne[1]){case"|":return Pe|Ne[3];case"&":return Pe&Ne[3];case"^":return Pe^Ne[3]}},Z)},v="!",x=Re("!",!1),C=function(Z){return!Z},R="(",L=Re("(",!1),U=")",J=Re(")",!1),te=function(Z){return Z},ae=/^[^ \t\n\r()!|&\^]/,fe=ke([" "," ",` +`,"\r","(",")","!","|","&","^"],!0,!1),ce=function(Z){return e.queryPattern.test(Z)},me=function(Z){return e.checkFn(Z)},he=Te("whitespace"),Be=/^[ \t\n\r]/,we=ke([" "," ",` +`,"\r"],!1,!1),g=0,Ee=0,Se=[{line:1,column:1}],le=0,ne=[],ee=0,Ie;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function Fe(){return t.substring(Ee,g)}function At(){return qe(Ee,g)}function H(Z,ie){throw ie=ie!==void 0?ie:qe(Ee,g),P([Te(Z)],t.substring(Ee,g),ie)}function at(Z,ie){throw ie=ie!==void 0?ie:qe(Ee,g),w(Z,ie)}function Re(Z,ie){return{type:"literal",text:Z,ignoreCase:ie}}function ke(Z,ie,Pe){return{type:"class",parts:Z,inverted:ie,ignoreCase:Pe}}function xe(){return{type:"any"}}function He(){return{type:"end"}}function Te(Z){return{type:"other",description:Z}}function Je(Z){var ie=Se[Z],Pe;if(ie)return ie;for(Pe=Z-1;!Se[Pe];)Pe--;for(ie=Se[Pe],ie={line:ie.line,column:ie.column};Pele&&(le=g,ne=[]),ne.push(Z))}function w(Z,ie){return new ud(Z,null,null,ie)}function P(Z,ie,Pe){return new ud(ud.buildMessage(Z,ie),Z,ie,Pe)}function y(){var Z,ie,Pe,Ne,ot,dt,jt,$t;if(Z=g,ie=F(),ie!==r){for(Pe=[],Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&b(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&b(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&b(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Ne!==r;)Pe.push(Ne),Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&b(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&b(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&b(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Pe!==r?(Ee=Z,ie=I(ie,Pe),Z=ie):(g=Z,Z=r)}else g=Z,Z=r;return Z}function F(){var Z,ie,Pe,Ne,ot,dt;return Z=g,t.charCodeAt(g)===33?(ie=v,g++):(ie=r,ee===0&&b(x)),ie!==r?(Pe=F(),Pe!==r?(Ee=Z,ie=C(Pe),Z=ie):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=g,t.charCodeAt(g)===40?(ie=R,g++):(ie=r,ee===0&&b(L)),ie!==r?(Pe=X(),Pe!==r?(Ne=y(),Ne!==r?(ot=X(),ot!==r?(t.charCodeAt(g)===41?(dt=U,g++):(dt=r,ee===0&&b(J)),dt!==r?(Ee=Z,ie=te(Ne),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=z())),Z}function z(){var Z,ie,Pe,Ne,ot;if(Z=g,ie=X(),ie!==r){if(Pe=g,Ne=[],ae.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&b(fe)),ot!==r)for(;ot!==r;)Ne.push(ot),ae.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&b(fe));else Ne=r;Ne!==r?Pe=t.substring(Pe,g):Pe=Ne,Pe!==r?(Ee=g,Ne=ce(Pe),Ne?Ne=void 0:Ne=r,Ne!==r?(Ee=Z,ie=me(Pe),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)}else g=Z,Z=r;return Z}function X(){var Z,ie;for(ee++,Z=[],Be.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&b(we));ie!==r;)Z.push(ie),Be.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&b(we));return ee--,Z===r&&(ie=r,ee===0&&b(he)),Z}if(Ie=a(),Ie!==r&&g===t.length)return Ie;throw Ie!==r&&g{var{parse:g9e}=$z();DS.makeParser=(t=/[a-z]+/)=>(e,r)=>g9e(e,{queryPattern:t,checkFn:r});DS.parse=DS.makeParser()});var rX=_((SQt,tX)=>{"use strict";tX.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var AN=_((PQt,iX)=>{var vI=rX(),nX={};for(let t of Object.keys(vI))nX[vI[t]]=t;var Ar={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};iX.exports=Ar;for(let t of Object.keys(Ar)){if(!("channels"in Ar[t]))throw new Error("missing channels property: "+t);if(!("labels"in Ar[t]))throw new Error("missing channel labels property: "+t);if(Ar[t].labels.length!==Ar[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=Ar[t];delete Ar[t].channels,delete Ar[t].labels,Object.defineProperty(Ar[t],"channels",{value:e}),Object.defineProperty(Ar[t],"labels",{value:r})}Ar.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(e,r,o),n=Math.max(e,r,o),u=n-a,A,p;n===a?A=0:e===n?A=(r-o)/u:r===n?A=2+(o-e)/u:o===n&&(A=4+(e-r)/u),A=Math.min(A*60,360),A<0&&(A+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=u/(n+a):p=u/(2-n-a),[A,p*100,h*100]};Ar.rgb.hsv=function(t){let e,r,o,a,n,u=t[0]/255,A=t[1]/255,p=t[2]/255,h=Math.max(u,A,p),E=h-Math.min(u,A,p),I=function(v){return(h-v)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=I(u),r=I(A),o=I(p),u===h?a=o-r:A===h?a=1/3+e-o:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};Ar.rgb.hwb=function(t){let e=t[0],r=t[1],o=t[2],a=Ar.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,o));return o=1-1/255*Math.max(e,Math.max(r,o)),[a,n*100,o*100]};Ar.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(1-e,1-r,1-o),n=(1-e-a)/(1-a)||0,u=(1-r-a)/(1-a)||0,A=(1-o-a)/(1-a)||0;return[n*100,u*100,A*100,a*100]};function d9e(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}Ar.rgb.keyword=function(t){let e=nX[t];if(e)return e;let r=1/0,o;for(let a of Object.keys(vI)){let n=vI[a],u=d9e(t,n);u.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let a=e*.4124+r*.3576+o*.1805,n=e*.2126+r*.7152+o*.0722,u=e*.0193+r*.1192+o*.9505;return[a*100,n*100,u*100]};Ar.rgb.lab=function(t){let e=Ar.rgb.xyz(t),r=e[0],o=e[1],a=e[2];r/=95.047,o/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*o-16,u=500*(r-o),A=200*(o-a);return[n,u,A]};Ar.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a,n,u;if(r===0)return u=o*255,[u,u,u];o<.5?a=o*(1+r):a=o+r-o*r;let A=2*o-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?u=A+(a-A)*6*n:2*n<1?u=a:3*n<2?u=A+(a-A)*(2/3-n)*6:u=A,p[h]=u*255;return p};Ar.hsl.hsv=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=r,n=Math.max(o,.01);o*=2,r*=o<=1?o:2-o,a*=n<=1?n:2-n;let u=(o+r)/2,A=o===0?2*a/(n+a):2*r/(o+r);return[e,A*100,u*100]};Ar.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,o=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),u=255*o*(1-r),A=255*o*(1-r*n),p=255*o*(1-r*(1-n));switch(o*=255,a){case 0:return[o,p,u];case 1:return[A,o,u];case 2:return[u,o,p];case 3:return[u,A,o];case 4:return[p,u,o];case 5:return[o,u,A]}};Ar.hsv.hsl=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=Math.max(o,.01),n,u;u=(2-r)*o;let A=(2-r)*a;return n=r*a,n/=A<=1?A:2-A,n=n||0,u/=2,[e,n*100,u*100]};Ar.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a=r+o,n;a>1&&(r/=a,o/=a);let u=Math.floor(6*e),A=1-o;n=6*e-u,(u&1)!==0&&(n=1-n);let p=r+n*(A-r),h,E,I;switch(u){default:case 6:case 0:h=A,E=p,I=r;break;case 1:h=p,E=A,I=r;break;case 2:h=r,E=A,I=p;break;case 3:h=r,E=p,I=A;break;case 4:h=p,E=r,I=A;break;case 5:h=A,E=r,I=p;break}return[h*255,E*255,I*255]};Ar.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),u=1-Math.min(1,r*(1-a)+a),A=1-Math.min(1,o*(1-a)+a);return[n*255,u*255,A*255]};Ar.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a,n,u;return a=e*3.2406+r*-1.5372+o*-.4986,n=e*-.9689+r*1.8758+o*.0415,u=e*.0557+r*-.204+o*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,u=u>.0031308?1.055*u**(1/2.4)-.055:u*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),u=Math.min(Math.max(0,u),1),[a*255,n*255,u*255]};Ar.xyz.lab=function(t){let e=t[0],r=t[1],o=t[2];e/=95.047,r/=100,o/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let a=116*r-16,n=500*(e-r),u=200*(r-o);return[a,n,u]};Ar.lab.xyz=function(t){let e=t[0],r=t[1],o=t[2],a,n,u;n=(e+16)/116,a=r/500+n,u=n-o/200;let A=n**3,p=a**3,h=u**3;return n=A>.008856?A:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,u=h>.008856?h:(u-16/116)/7.787,a*=95.047,n*=100,u*=108.883,[a,n,u]};Ar.lab.lch=function(t){let e=t[0],r=t[1],o=t[2],a;a=Math.atan2(o,r)*360/2/Math.PI,a<0&&(a+=360);let u=Math.sqrt(r*r+o*o);return[e,u,a]};Ar.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),u=r*Math.sin(a);return[e,n,u]};Ar.rgb.ansi16=function(t,e=null){let[r,o,a]=t,n=e===null?Ar.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let u=30+(Math.round(a/255)<<2|Math.round(o/255)<<1|Math.round(r/255));return n===2&&(u+=60),u};Ar.hsv.ansi16=function(t){return Ar.rgb.ansi16(Ar.hsv.rgb(t),t[2])};Ar.rgb.ansi256=function(t){let e=t[0],r=t[1],o=t[2];return e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)};Ar.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,o=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[o,a,n]};Ar.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,o=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,o,a]};Ar.rgb.hex=function(t){let r=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};Ar.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(A=>A+A).join(""));let o=parseInt(r,16),a=o>>16&255,n=o>>8&255,u=o&255;return[a,n,u]};Ar.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.max(Math.max(e,r),o),n=Math.min(Math.min(e,r),o),u=a-n,A,p;return u<1?A=n/(1-u):A=0,u<=0?p=0:a===e?p=(r-o)/u%6:a===r?p=2+(o-e)/u:p=4+(e-r)/u,p/=6,p%=1,[p*360,u*100,A*100]};Ar.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=r<.5?2*e*r:2*e*(1-r),a=0;return o<1&&(a=(r-.5*o)/(1-o)),[t[0],o*100,a*100]};Ar.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=e*r,a=0;return o<1&&(a=(r-o)/(1-o)),[t[0],o*100,a*100]};Ar.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100;if(r===0)return[o*255,o*255,o*255];let a=[0,0,0],n=e%1*6,u=n%1,A=1-u,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=u,a[2]=0;break;case 1:a[0]=A,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=u;break;case 3:a[0]=0,a[1]=A,a[2]=1;break;case 4:a[0]=u,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=A}return p=(1-r)*o,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};Ar.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e),a=0;return o>0&&(a=e/o),[t[0],a*100,o*100]};Ar.hcg.hsl=function(t){let e=t[1]/100,o=t[2]/100*(1-e)+.5*e,a=0;return o>0&&o<.5?a=e/(2*o):o>=.5&&o<1&&(a=e/(2*(1-o))),[t[0],a*100,o*100]};Ar.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e);return[t[0],(o-e)*100,(1-o)*100]};Ar.hwb.hcg=function(t){let e=t[1]/100,o=1-t[2]/100,a=o-e,n=0;return a<1&&(n=(o-a)/(1-a)),[t[0],a*100,n*100]};Ar.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};Ar.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};Ar.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};Ar.gray.hsl=function(t){return[0,0,t[0]]};Ar.gray.hsv=Ar.gray.hsl;Ar.gray.hwb=function(t){return[0,100,t[0]]};Ar.gray.cmyk=function(t){return[0,0,0,t[0]]};Ar.gray.lab=function(t){return[t[0],0,0]};Ar.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,o=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(o.length)+o};Ar.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var oX=_((bQt,sX)=>{var SS=AN();function m9e(){let t={},e=Object.keys(SS);for(let r=e.length,o=0;o{var fN=AN(),w9e=oX(),xy={},I9e=Object.keys(fN);function B9e(t){let e=function(...r){let o=r[0];return o==null?o:(o.length>1&&(r=o),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function v9e(t){let e=function(...r){let o=r[0];if(o==null)return o;o.length>1&&(r=o);let a=t(r);if(typeof a=="object")for(let n=a.length,u=0;u{xy[t]={},Object.defineProperty(xy[t],"channels",{value:fN[t].channels}),Object.defineProperty(xy[t],"labels",{value:fN[t].labels});let e=w9e(t);Object.keys(e).forEach(o=>{let a=e[o];xy[t][o]=v9e(a),xy[t][o].raw=B9e(a)})});aX.exports=xy});var DI=_((kQt,pX)=>{"use strict";var cX=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,uX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};5;${o}m`},AX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};2;${o[0]};${o[1]};${o[2]}m`},PS=t=>t,fX=(t,e,r)=>[t,e,r],ky=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let o=r();return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0}),o},enumerable:!0,configurable:!0})},pN,Qy=(t,e,r,o)=>{pN===void 0&&(pN=lX());let a=o?10:0,n={};for(let[u,A]of Object.entries(pN)){let p=u==="ansi16"?"ansi":u;u===e?n[p]=t(r,a):typeof A=="object"&&(n[p]=t(A[e],a))}return n};function D9e(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,o]of Object.entries(e)){for(let[a,n]of Object.entries(o))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:o,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",ky(e.color,"ansi",()=>Qy(cX,"ansi16",PS,!1)),ky(e.color,"ansi256",()=>Qy(uX,"ansi256",PS,!1)),ky(e.color,"ansi16m",()=>Qy(AX,"rgb",fX,!1)),ky(e.bgColor,"ansi",()=>Qy(cX,"ansi16",PS,!0)),ky(e.bgColor,"ansi256",()=>Qy(uX,"ansi256",PS,!0)),ky(e.bgColor,"ansi16m",()=>Qy(AX,"rgb",fX,!0)),e}Object.defineProperty(pX,"exports",{enumerable:!0,get:D9e})});var gX=_((QQt,hX)=>{"use strict";hX.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(r+t),a=e.indexOf("--");return o!==-1&&(a===-1||o{"use strict";var S9e=ve("os"),dX=ve("tty"),Ml=gX(),{env:ls}=process,Jp;Ml("no-color")||Ml("no-colors")||Ml("color=false")||Ml("color=never")?Jp=0:(Ml("color")||Ml("colors")||Ml("color=true")||Ml("color=always"))&&(Jp=1);"FORCE_COLOR"in ls&&(ls.FORCE_COLOR==="true"?Jp=1:ls.FORCE_COLOR==="false"?Jp=0:Jp=ls.FORCE_COLOR.length===0?1:Math.min(parseInt(ls.FORCE_COLOR,10),3));function hN(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function gN(t,e){if(Jp===0)return 0;if(Ml("color=16m")||Ml("color=full")||Ml("color=truecolor"))return 3;if(Ml("color=256"))return 2;if(t&&!e&&Jp===void 0)return 0;let r=Jp||0;if(ls.TERM==="dumb")return r;if(process.platform==="win32"){let o=S9e.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in ls)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in ls)||ls.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ls)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ls.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in ls)return 1;if(ls.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ls){let o=parseInt((ls.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ls.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ls.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ls.TERM)||"COLORTERM"in ls?1:r}function P9e(t){let e=gN(t,t&&t.isTTY);return hN(e)}mX.exports={supportsColor:P9e,stdout:hN(gN(!0,dX.isatty(1))),stderr:hN(gN(!0,dX.isatty(2)))}});var EX=_((RQt,yX)=>{"use strict";var b9e=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},x9e=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r `:` `)+r,a=o+1,o=t.indexOf(` -`,a)}while(o!==-1);return n+=t.substr(a),n};CX.exports={stringReplaceAll:T9e,stringEncaseCRLFWithFirstIndex:R9e}});var PX=_((NQt,DX)=>{"use strict";var N9e=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,IX=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,L9e=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,M9e=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,O9e=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function vX(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):O9e.get(t)||t}function U9e(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(L9e))r.push(a[2].replace(M9e,(A,p,h)=>p?vX(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function _9e(t){IX.lastIndex=0;let e=[],r;for(;(r=IX.exec(t))!==null;){let o=r[1];if(r[2]){let a=U9e(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function BX(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}DX.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(N9e,(n,u,A,p,h,E)=>{if(u)a.push(vX(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:BX(t,r)(I)),r.push({inverse:A,styles:_9e(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(BX(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var vN=_((LQt,kX)=>{"use strict";var DI=vI(),{stdout:CN,stderr:wN}=yN(),{stringReplaceAll:H9e,stringEncaseCRLFWithFirstIndex:j9e}=wX(),SX=["ansi","ansi","ansi256","ansi16m"],Qy=Object.create(null),q9e=(t,e={})=>{if(e.level>3||e.level<0)throw new Error("The `level` option should be an integer from 0 to 3");let r=CN?CN.level:0;t.level=e.level===void 0?r:e.level},IN=class{constructor(e){return xX(e)}},xX=t=>{let e={};return q9e(e,t),e.template=(...r)=>W9e(e.template,...r),Object.setPrototypeOf(e,bP.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=IN,e.template};function bP(t){return xX(t)}for(let[t,e]of Object.entries(DI))Qy[t]={get(){let r=kP(this,BN(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Qy.visible={get(){let t=kP(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var bX=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of bX)Qy[t]={get(){let{level:e}=this;return function(...r){let o=BN(DI.color[SX[e]][t](...r),DI.color.close,this._styler);return kP(this,o,this._isEmpty)}}};for(let t of bX){let e="bg"+t[0].toUpperCase()+t.slice(1);Qy[e]={get(){let{level:r}=this;return function(...o){let a=BN(DI.bgColor[SX[r]][t](...o),DI.bgColor.close,this._styler);return kP(this,a,this._isEmpty)}}}}var G9e=Object.defineProperties(()=>{},{...Qy,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),BN=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},kP=(t,e,r)=>{let o=(...a)=>Y9e(o,a.length===1?""+a[0]:a.join(" "));return o.__proto__=G9e,o._generator=t,o._styler=e,o._isEmpty=r,o},Y9e=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=H9e(e,r.close,r.open),r=r.parent;let n=e.indexOf(` -`);return n!==-1&&(e=j9e(e,a,o,n)),o+e+a},EN,W9e=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";Ul.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Ul.find=(t,e)=>t.nodes.find(r=>r.type===e);Ul.exceedsLimit=(t,e,r=1,o)=>o===!1||!Ul.isInteger(t)||!Ul.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=o;Ul.escapeNode=(t,e=0,r)=>{let o=t.nodes[e];!o||(r&&o.type===r||o.type==="open"||o.type==="close")&&o.escaped!==!0&&(o.value="\\"+o.value,o.escaped=!0)};Ul.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Ul.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;Ul.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Ul.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Ul.flatten=(...t)=>{let e=[],r=o=>{for(let a=0;a{"use strict";var QX=QP();FX.exports=(t,e={})=>{let r=(o,a={})=>{let n=e.escapeInvalid&&QX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A="";if(o.value)return(n||u)&&QX.isOpenOrClose(o)?"\\"+o.value:o.value;if(o.value)return o.value;if(o.nodes)for(let p of o.nodes)A+=r(p);return A};return r(t)}});var RX=_((UQt,TX)=>{"use strict";TX.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var qX=_((_Qt,jX)=>{"use strict";var NX=RX(),ud=(t,e,r)=>{if(NX(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(NX(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};typeof o.strictZeros=="boolean"&&(o.relaxZeros=o.strictZeros===!1);let a=String(o.relaxZeros),n=String(o.shorthand),u=String(o.capture),A=String(o.wrap),p=t+":"+e+"="+a+n+u+A;if(ud.cache.hasOwnProperty(p))return ud.cache[p].result;let h=Math.min(t,e),E=Math.max(t,e);if(Math.abs(h-E)===1){let T=t+"|"+e;return o.capture?`(${T})`:o.wrap===!1?T:`(?:${T})`}let I=HX(t)||HX(e),v={min:t,max:e,a:h,b:E},b=[],C=[];if(I&&(v.isPadded=I,v.maxLen=String(v.max).length),h<0){let T=E<0?Math.abs(E):1;C=LX(T,Math.abs(h),v,o),h=v.a=0}return E>=0&&(b=LX(h,E,v,o)),v.negatives=C,v.positives=b,v.result=V9e(C,b,o),o.capture===!0?v.result=`(${v.result})`:o.wrap!==!1&&b.length+C.length>1&&(v.result=`(?:${v.result})`),ud.cache[p]=v,v.result};function V9e(t,e,r){let o=DN(t,e,"-",!1,r)||[],a=DN(e,t,"",!1,r)||[],n=DN(t,e,"-?",!0,r)||[];return o.concat(n).concat(a).join("|")}function K9e(t,e){let r=1,o=1,a=OX(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=OX(t,r);for(a=UX(e+1,o)-1;t1&&A.count.pop(),A.count.push(E.count[0]),A.string=A.pattern+_X(A.count),u=h+1;continue}r.isPadded&&(I=$9e(h,r,o)),E.string=I+E.pattern+_X(E.count),n.push(E),u=h+1,A=E}return n}function DN(t,e,r,o,a){let n=[];for(let u of t){let{string:A}=u;!o&&!MX(e,"string",A)&&n.push(r+A),o&&MX(e,"string",A)&&n.push(r+A)}return n}function z9e(t,e){let r=[];for(let o=0;oe?1:e>t?-1:0}function MX(t,e,r){return t.some(o=>o[e]===r)}function OX(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function UX(t,e){return t-t%Math.pow(10,e)}function _X(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function Z9e(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function HX(t){return/^-?(0+)\d/.test(t)}function $9e(t,e,r){if(!e.isPadded)return t;let o=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(o){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${o}}`:`0{${o}}`}}ud.cache={};ud.clearCache=()=>ud.cache={};jX.exports=ud});var xN=_((HQt,XX)=>{"use strict";var e7e=Be("util"),WX=qX(),GX=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),t7e=t=>e=>t===!0?Number(e):String(e),PN=t=>typeof t=="number"||typeof t=="string"&&t!=="",SI=t=>Number.isInteger(+t),SN=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},r7e=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,n7e=(t,e,r)=>{if(e>0){let o=t[0]==="-"?"-":"";o&&(t=t.slice(1)),t=o+t.padStart(o?e-1:e,"0")}return r===!1?String(t):t},YX=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((u,A)=>uA?1:0),t.positives.sort((u,A)=>uA?1:0);let r=e.capture?"":"?:",o="",a="",n;return t.positives.length&&(o=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),o&&a?n=`${o}|${a}`:n=o||a,e.wrap?`(${r}${n})`:n},VX=(t,e,r,o)=>{if(r)return WX(t,e,{wrap:!1,...o});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},KX=(t,e,r)=>{if(Array.isArray(t)){let o=r.wrap===!0,a=r.capture?"":"?:";return o?`(${a}${t.join("|")})`:t.join("|")}return WX(t,e,r)},JX=(...t)=>new RangeError("Invalid range arguments: "+e7e.inspect(...t)),zX=(t,e,r)=>{if(r.strictRanges===!0)throw JX([t,e]);return[]},s7e=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},o7e=(t,e,r=1,o={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(o.strictRanges===!0)throw JX([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let u=a>n,A=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=SN(A)||SN(p)||SN(h),I=E?Math.max(A.length,p.length,h.length):0,v=E===!1&&r7e(t,e,o)===!1,b=o.transform||t7e(v);if(o.toRegex&&r===1)return VX(YX(t,I),YX(e,I),!0,o);let C={negatives:[],positives:[]},T=J=>C[J<0?"negatives":"positives"].push(Math.abs(J)),L=[],U=0;for(;u?a>=n:a<=n;)o.toRegex===!0&&r>1?T(a):L.push(n7e(b(a,U),I,v)),a=u?a-r:a+r,U++;return o.toRegex===!0?r>1?i7e(C,o):KX(L,null,{wrap:!1,...o}):L},a7e=(t,e,r=1,o={})=>{if(!SI(t)&&t.length>1||!SI(e)&&e.length>1)return zX(t,e,o);let a=o.transform||(v=>String.fromCharCode(v)),n=`${t}`.charCodeAt(0),u=`${e}`.charCodeAt(0),A=n>u,p=Math.min(n,u),h=Math.max(n,u);if(o.toRegex&&r===1)return VX(p,h,!1,o);let E=[],I=0;for(;A?n>=u:n<=u;)E.push(a(n,I)),n=A?n-r:n+r,I++;return o.toRegex===!0?KX(E,null,{wrap:!1,options:o}):E},TP=(t,e,r,o={})=>{if(e==null&&PN(t))return[t];if(!PN(t)||!PN(e))return zX(t,e,o);if(typeof r=="function")return TP(t,e,1,{transform:r});if(GX(r))return TP(t,e,0,r);let a={...o};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,SI(r)?SI(t)&&SI(e)?o7e(t,e,r,a):a7e(t,e,Math.max(Math.abs(r),1),a):r!=null&&!GX(r)?s7e(r,a):TP(t,e,1,r)};XX.exports=TP});var eZ=_((jQt,$X)=>{"use strict";var l7e=xN(),ZX=QP(),c7e=(t,e={})=>{let r=(o,a={})=>{let n=ZX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A=n===!0||u===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(o.isOpen===!0||o.isClose===!0)return p+o.value;if(o.type==="open")return A?p+o.value:"(";if(o.type==="close")return A?p+o.value:")";if(o.type==="comma")return o.prev.type==="comma"?"":A?o.value:"|";if(o.value)return o.value;if(o.nodes&&o.ranges>0){let E=ZX.reduce(o.nodes),I=l7e(...E,{...e,wrap:!1,toRegex:!0});if(I.length!==0)return E.length>1&&I.length>1?`(${I})`:I}if(o.nodes)for(let E of o.nodes)h+=r(E,o);return h};return r(t)};$X.exports=c7e});var nZ=_((qQt,rZ)=>{"use strict";var u7e=xN(),tZ=FP(),Fy=QP(),Ad=(t="",e="",r=!1)=>{let o=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Fy.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)o.push(Ad(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),o.push(Array.isArray(n)?Ad(a,n,r):a+n);return Fy.flatten(o)},A7e=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,o=(a,n={})=>{a.queue=[];let u=n,A=n.queue;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,A=u.queue;if(a.invalid||a.dollar){A.push(Ad(A.pop(),tZ(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){A.push(Ad(A.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let I=Fy.reduce(a.nodes);if(Fy.exceedsLimit(...I,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let v=u7e(...I,e);v.length===0&&(v=tZ(a,e)),A.push(Ad(A.pop(),v)),a.nodes=[];return}let p=Fy.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let I=0;I{"use strict";iZ.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` -`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var uZ=_((YQt,cZ)=>{"use strict";var f7e=FP(),{MAX_LENGTH:oZ,CHAR_BACKSLASH:bN,CHAR_BACKTICK:p7e,CHAR_COMMA:h7e,CHAR_DOT:g7e,CHAR_LEFT_PARENTHESES:d7e,CHAR_RIGHT_PARENTHESES:m7e,CHAR_LEFT_CURLY_BRACE:y7e,CHAR_RIGHT_CURLY_BRACE:E7e,CHAR_LEFT_SQUARE_BRACKET:aZ,CHAR_RIGHT_SQUARE_BRACKET:lZ,CHAR_DOUBLE_QUOTE:C7e,CHAR_SINGLE_QUOTE:w7e,CHAR_NO_BREAK_SPACE:I7e,CHAR_ZERO_WIDTH_NOBREAK_SPACE:B7e}=sZ(),v7e=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},o=typeof r.maxLength=="number"?Math.min(oZ,r.maxLength):oZ;if(t.length>o)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${o})`);let a={type:"root",input:t,nodes:[]},n=[a],u=a,A=a,p=0,h=t.length,E=0,I=0,v,b={},C=()=>t[E++],T=L=>{if(L.type==="text"&&A.type==="dot"&&(A.type="text"),A&&A.type==="text"&&L.type==="text"){A.value+=L.value;return}return u.nodes.push(L),L.parent=u,L.prev=A,A=L,L};for(T({type:"bos"});E0){if(u.ranges>0){u.ranges=0;let L=u.nodes.shift();u.nodes=[L,{type:"text",value:f7e(u)}]}T({type:"comma",value:v}),u.commas++;continue}if(v===g7e&&I>0&&u.commas===0){let L=u.nodes;if(I===0||L.length===0){T({type:"text",value:v});continue}if(A.type==="dot"){if(u.range=[],A.value+=v,A.type="range",u.nodes.length!==3&&u.nodes.length!==5){u.invalid=!0,u.ranges=0,A.type="text";continue}u.ranges++,u.args=[];continue}if(A.type==="range"){L.pop();let U=L[L.length-1];U.value+=A.value+v,A=U,u.ranges--;continue}T({type:"dot",value:v});continue}T({type:"text",value:v})}do if(u=n.pop(),u.type!=="root"){u.nodes.forEach(J=>{J.nodes||(J.type==="open"&&(J.isOpen=!0),J.type==="close"&&(J.isClose=!0),J.nodes||(J.type="text"),J.invalid=!0)});let L=n[n.length-1],U=L.nodes.indexOf(u);L.nodes.splice(U,1,...u.nodes)}while(n.length>0);return T({type:"eos"}),a};cZ.exports=v7e});var pZ=_((WQt,fZ)=>{"use strict";var AZ=FP(),D7e=eZ(),P7e=nZ(),S7e=uZ(),rl=(t,e={})=>{let r=[];if(Array.isArray(t))for(let o of t){let a=rl.create(o,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(rl.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};rl.parse=(t,e={})=>S7e(t,e);rl.stringify=(t,e={})=>AZ(typeof t=="string"?rl.parse(t,e):t,e);rl.compile=(t,e={})=>(typeof t=="string"&&(t=rl.parse(t,e)),D7e(t,e));rl.expand=(t,e={})=>{typeof t=="string"&&(t=rl.parse(t,e));let r=P7e(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};rl.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?rl.compile(t,e):rl.expand(t,e);fZ.exports=rl});var xI=_((VQt,yZ)=>{"use strict";var x7e=Be("path"),Vu="\\\\/",hZ=`[^${Vu}]`,Bf="\\.",b7e="\\+",k7e="\\?",RP="\\/",Q7e="(?=.)",gZ="[^/]",kN=`(?:${RP}|$)`,dZ=`(?:^|${RP})`,QN=`${Bf}{1,2}${kN}`,F7e=`(?!${Bf})`,T7e=`(?!${dZ}${QN})`,R7e=`(?!${Bf}{0,1}${kN})`,N7e=`(?!${QN})`,L7e=`[^.${RP}]`,M7e=`${gZ}*?`,mZ={DOT_LITERAL:Bf,PLUS_LITERAL:b7e,QMARK_LITERAL:k7e,SLASH_LITERAL:RP,ONE_CHAR:Q7e,QMARK:gZ,END_ANCHOR:kN,DOTS_SLASH:QN,NO_DOT:F7e,NO_DOTS:T7e,NO_DOT_SLASH:R7e,NO_DOTS_SLASH:N7e,QMARK_NO_DOT:L7e,STAR:M7e,START_ANCHOR:dZ},O7e={...mZ,SLASH_LITERAL:`[${Vu}]`,QMARK:hZ,STAR:`${hZ}*?`,DOTS_SLASH:`${Bf}{1,2}(?:[${Vu}]|$)`,NO_DOT:`(?!${Bf})`,NO_DOTS:`(?!(?:^|[${Vu}])${Bf}{1,2}(?:[${Vu}]|$))`,NO_DOT_SLASH:`(?!${Bf}{0,1}(?:[${Vu}]|$))`,NO_DOTS_SLASH:`(?!${Bf}{1,2}(?:[${Vu}]|$))`,QMARK_NO_DOT:`[^.${Vu}]`,START_ANCHOR:`(?:^|[${Vu}])`,END_ANCHOR:`(?:[${Vu}]|$)`},U7e={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};yZ.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:U7e,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:x7e.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?O7e:mZ}}});var bI=_(Pa=>{"use strict";var _7e=Be("path"),H7e=process.platform==="win32",{REGEX_BACKSLASH:j7e,REGEX_REMOVE_BACKSLASH:q7e,REGEX_SPECIAL_CHARS:G7e,REGEX_SPECIAL_CHARS_GLOBAL:Y7e}=xI();Pa.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Pa.hasRegexChars=t=>G7e.test(t);Pa.isRegexChar=t=>t.length===1&&Pa.hasRegexChars(t);Pa.escapeRegex=t=>t.replace(Y7e,"\\$1");Pa.toPosixSlashes=t=>t.replace(j7e,"/");Pa.removeBackslashes=t=>t.replace(q7e,e=>e==="\\"?"":e);Pa.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};Pa.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:H7e===!0||_7e.sep==="\\";Pa.escapeLast=(t,e,r)=>{let o=t.lastIndexOf(e,r);return o===-1?t:t[o-1]==="\\"?Pa.escapeLast(t,e,o-1):`${t.slice(0,o)}\\${t.slice(o)}`};Pa.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};Pa.wrapOutput=(t,e={},r={})=>{let o=r.contains?"":"^",a=r.contains?"":"$",n=`${o}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var PZ=_((JQt,DZ)=>{"use strict";var EZ=bI(),{CHAR_ASTERISK:FN,CHAR_AT:W7e,CHAR_BACKWARD_SLASH:kI,CHAR_COMMA:V7e,CHAR_DOT:TN,CHAR_EXCLAMATION_MARK:RN,CHAR_FORWARD_SLASH:vZ,CHAR_LEFT_CURLY_BRACE:NN,CHAR_LEFT_PARENTHESES:LN,CHAR_LEFT_SQUARE_BRACKET:K7e,CHAR_PLUS:J7e,CHAR_QUESTION_MARK:CZ,CHAR_RIGHT_CURLY_BRACE:z7e,CHAR_RIGHT_PARENTHESES:wZ,CHAR_RIGHT_SQUARE_BRACKET:X7e}=xI(),IZ=t=>t===vZ||t===kI,BZ=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},Z7e=(t,e)=>{let r=e||{},o=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],u=[],A=[],p=t,h=-1,E=0,I=0,v=!1,b=!1,C=!1,T=!1,L=!1,U=!1,J=!1,te=!1,le=!1,pe=!1,Ae=0,ye,ae,we={value:"",depth:0,isGlob:!1},Pe=()=>h>=o,g=()=>p.charCodeAt(h+1),Ee=()=>(ye=ae,p.charCodeAt(++h));for(;h0&&(ce=p.slice(0,E),p=p.slice(E),I-=E),De&&C===!0&&I>0?(De=p.slice(0,I),ne=p.slice(I)):C===!0?(De="",ne=p):De=p,De&&De!==""&&De!=="/"&&De!==p&&IZ(De.charCodeAt(De.length-1))&&(De=De.slice(0,-1)),r.unescape===!0&&(ne&&(ne=EZ.removeBackslashes(ne)),De&&J===!0&&(De=EZ.removeBackslashes(De)));let ee={prefix:ce,input:t,start:E,base:De,glob:ne,isBrace:v,isBracket:b,isGlob:C,isExtglob:T,isGlobstar:L,negated:te,negatedExtglob:le};if(r.tokens===!0&&(ee.maxDepth=0,IZ(ae)||u.push(we),ee.tokens=u),r.parts===!0||r.tokens===!0){let Ie;for(let ke=0;ke{"use strict";var NP=xI(),nl=bI(),{MAX_LENGTH:LP,POSIX_REGEX_SOURCE:$7e,REGEX_NON_SPECIAL_CHARS:eYe,REGEX_SPECIAL_CHARS_BACKREF:tYe,REPLACEMENTS:SZ}=NP,rYe=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(a=>nl.escapeRegex(a)).join("..")}return r},Ty=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,MN=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=SZ[t]||t;let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);let n={type:"bos",value:"",output:r.prepend||""},u=[n],A=r.capture?"":"?:",p=nl.isWindows(e),h=NP.globChars(p),E=NP.extglobChars(h),{DOT_LITERAL:I,PLUS_LITERAL:v,SLASH_LITERAL:b,ONE_CHAR:C,DOTS_SLASH:T,NO_DOT:L,NO_DOT_SLASH:U,NO_DOTS_SLASH:J,QMARK:te,QMARK_NO_DOT:le,STAR:pe,START_ANCHOR:Ae}=h,ye=x=>`(${A}(?:(?!${Ae}${x.dot?T:I}).)*?)`,ae=r.dot?"":L,we=r.dot?te:le,Pe=r.bash===!0?ye(r):pe;r.capture&&(Pe=`(${Pe})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:u};t=nl.removePrefix(t,g),a=t.length;let Ee=[],De=[],ce=[],ne=n,ee,Ie=()=>g.index===a-1,ke=g.peek=(x=1)=>t[g.index+x],ht=g.advance=()=>t[++g.index]||"",H=()=>t.slice(g.index+1),lt=(x="",w=0)=>{g.consumed+=x,g.index+=w},Re=x=>{g.output+=x.output!=null?x.output:x.value,lt(x.value)},Qe=()=>{let x=1;for(;ke()==="!"&&(ke(2)!=="("||ke(3)==="?");)ht(),g.start++,x++;return x%2===0?!1:(g.negated=!0,g.start++,!0)},be=x=>{g[x]++,ce.push(x)},_e=x=>{g[x]--,ce.pop()},Te=x=>{if(ne.type==="globstar"){let w=g.braces>0&&(x.type==="comma"||x.type==="brace"),S=x.extglob===!0||Ee.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!w&&!S&&(g.output=g.output.slice(0,-ne.output.length),ne.type="star",ne.value="*",ne.output=Pe,g.output+=ne.output)}if(Ee.length&&x.type!=="paren"&&(Ee[Ee.length-1].inner+=x.value),(x.value||x.output)&&Re(x),ne&&ne.type==="text"&&x.type==="text"){ne.value+=x.value,ne.output=(ne.output||"")+x.value;return}x.prev=ne,u.push(x),ne=x},Je=(x,w)=>{let S={...E[w],conditions:1,inner:""};S.prev=ne,S.parens=g.parens,S.output=g.output;let y=(r.capture?"(":"")+S.open;be("parens"),Te({type:x,value:w,output:g.output?"":C}),Te({type:"paren",extglob:!0,value:ht(),output:y}),Ee.push(S)},He=x=>{let w=x.close+(r.capture?")":""),S;if(x.type==="negate"){let y=Pe;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(y=ye(r)),(y!==Pe||Ie()||/^\)+$/.test(H()))&&(w=x.close=`)$))${y}`),x.inner.includes("*")&&(S=H())&&/^\.[^\\/.]+$/.test(S)){let F=MN(S,{...e,fastpaths:!1}).output;w=x.close=`)${F})${y})`}x.prev.type==="bos"&&(g.negatedExtglob=!0)}Te({type:"paren",extglob:!0,value:ee,output:w}),_e("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,w=t.replace(tYe,(S,y,F,z,X,Z)=>z==="\\"?(x=!0,S):z==="?"?y?y+z+(X?te.repeat(X.length):""):Z===0?we+(X?te.repeat(X.length):""):te.repeat(F.length):z==="."?I.repeat(F.length):z==="*"?y?y+z+(X?Pe:""):Pe:y?S:`\\${S}`);return x===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,S=>S.length%2===0?"\\\\":S?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=nl.wrapOutput(w,g,e),g)}for(;!Ie();){if(ee=ht(),ee==="\0")continue;if(ee==="\\"){let S=ke();if(S==="/"&&r.bash!==!0||S==="."||S===";")continue;if(!S){ee+="\\",Te({type:"text",value:ee});continue}let y=/^\\+/.exec(H()),F=0;if(y&&y[0].length>2&&(F=y[0].length,g.index+=F,F%2!==0&&(ee+="\\")),r.unescape===!0?ee=ht():ee+=ht(),g.brackets===0){Te({type:"text",value:ee});continue}}if(g.brackets>0&&(ee!=="]"||ne.value==="["||ne.value==="[^")){if(r.posix!==!1&&ee===":"){let S=ne.value.slice(1);if(S.includes("[")&&(ne.posix=!0,S.includes(":"))){let y=ne.value.lastIndexOf("["),F=ne.value.slice(0,y),z=ne.value.slice(y+2),X=$7e[z];if(X){ne.value=F+X,g.backtrack=!0,ht(),!n.output&&u.indexOf(ne)===1&&(n.output=C);continue}}}(ee==="["&&ke()!==":"||ee==="-"&&ke()==="]")&&(ee=`\\${ee}`),ee==="]"&&(ne.value==="["||ne.value==="[^")&&(ee=`\\${ee}`),r.posix===!0&&ee==="!"&&ne.value==="["&&(ee="^"),ne.value+=ee,Re({value:ee});continue}if(g.quotes===1&&ee!=='"'){ee=nl.escapeRegex(ee),ne.value+=ee,Re({value:ee});continue}if(ee==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&Te({type:"text",value:ee});continue}if(ee==="("){be("parens"),Te({type:"paren",value:ee});continue}if(ee===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Ty("opening","("));let S=Ee[Ee.length-1];if(S&&g.parens===S.parens+1){He(Ee.pop());continue}Te({type:"paren",value:ee,output:g.parens?")":"\\)"}),_e("parens");continue}if(ee==="["){if(r.nobracket===!0||!H().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));ee=`\\${ee}`}else be("brackets");Te({type:"bracket",value:ee});continue}if(ee==="]"){if(r.nobracket===!0||ne&&ne.type==="bracket"&&ne.value.length===1){Te({type:"text",value:ee,output:`\\${ee}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Ty("opening","["));Te({type:"text",value:ee,output:`\\${ee}`});continue}_e("brackets");let S=ne.value.slice(1);if(ne.posix!==!0&&S[0]==="^"&&!S.includes("/")&&(ee=`/${ee}`),ne.value+=ee,Re({value:ee}),r.literalBrackets===!1||nl.hasRegexChars(S))continue;let y=nl.escapeRegex(ne.value);if(g.output=g.output.slice(0,-ne.value.length),r.literalBrackets===!0){g.output+=y,ne.value=y;continue}ne.value=`(${A}${y}|${ne.value})`,g.output+=ne.value;continue}if(ee==="{"&&r.nobrace!==!0){be("braces");let S={type:"brace",value:ee,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};De.push(S),Te(S);continue}if(ee==="}"){let S=De[De.length-1];if(r.nobrace===!0||!S){Te({type:"text",value:ee,output:ee});continue}let y=")";if(S.dots===!0){let F=u.slice(),z=[];for(let X=F.length-1;X>=0&&(u.pop(),F[X].type!=="brace");X--)F[X].type!=="dots"&&z.unshift(F[X].value);y=rYe(z,r),g.backtrack=!0}if(S.comma!==!0&&S.dots!==!0){let F=g.output.slice(0,S.outputIndex),z=g.tokens.slice(S.tokensIndex);S.value=S.output="\\{",ee=y="\\}",g.output=F;for(let X of z)g.output+=X.output||X.value}Te({type:"brace",value:ee,output:y}),_e("braces"),De.pop();continue}if(ee==="|"){Ee.length>0&&Ee[Ee.length-1].conditions++,Te({type:"text",value:ee});continue}if(ee===","){let S=ee,y=De[De.length-1];y&&ce[ce.length-1]==="braces"&&(y.comma=!0,S="|"),Te({type:"comma",value:ee,output:S});continue}if(ee==="/"){if(ne.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",u.pop(),ne=n;continue}Te({type:"slash",value:ee,output:b});continue}if(ee==="."){if(g.braces>0&&ne.type==="dot"){ne.value==="."&&(ne.output=I);let S=De[De.length-1];ne.type="dots",ne.output+=ee,ne.value+=ee,S.dots=!0;continue}if(g.braces+g.parens===0&&ne.type!=="bos"&&ne.type!=="slash"){Te({type:"text",value:ee,output:I});continue}Te({type:"dot",value:ee,output:I});continue}if(ee==="?"){if(!(ne&&ne.value==="(")&&r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Je("qmark",ee);continue}if(ne&&ne.type==="paren"){let y=ke(),F=ee;if(y==="<"&&!nl.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(ne.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(H()))&&(F=`\\${ee}`),Te({type:"text",value:ee,output:F});continue}if(r.dot!==!0&&(ne.type==="slash"||ne.type==="bos")){Te({type:"qmark",value:ee,output:le});continue}Te({type:"qmark",value:ee,output:te});continue}if(ee==="!"){if(r.noextglob!==!0&&ke()==="("&&(ke(2)!=="?"||!/[!=<:]/.test(ke(3)))){Je("negate",ee);continue}if(r.nonegate!==!0&&g.index===0){Qe();continue}}if(ee==="+"){if(r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Je("plus",ee);continue}if(ne&&ne.value==="("||r.regex===!1){Te({type:"plus",value:ee,output:v});continue}if(ne&&(ne.type==="bracket"||ne.type==="paren"||ne.type==="brace")||g.parens>0){Te({type:"plus",value:ee});continue}Te({type:"plus",value:v});continue}if(ee==="@"){if(r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Te({type:"at",extglob:!0,value:ee,output:""});continue}Te({type:"text",value:ee});continue}if(ee!=="*"){(ee==="$"||ee==="^")&&(ee=`\\${ee}`);let S=eYe.exec(H());S&&(ee+=S[0],g.index+=S[0].length),Te({type:"text",value:ee});continue}if(ne&&(ne.type==="globstar"||ne.star===!0)){ne.type="star",ne.star=!0,ne.value+=ee,ne.output=Pe,g.backtrack=!0,g.globstar=!0,lt(ee);continue}let x=H();if(r.noextglob!==!0&&/^\([^?]/.test(x)){Je("star",ee);continue}if(ne.type==="star"){if(r.noglobstar===!0){lt(ee);continue}let S=ne.prev,y=S.prev,F=S.type==="slash"||S.type==="bos",z=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!F||x[0]&&x[0]!=="/")){Te({type:"star",value:ee,output:""});continue}let X=g.braces>0&&(S.type==="comma"||S.type==="brace"),Z=Ee.length&&(S.type==="pipe"||S.type==="paren");if(!F&&S.type!=="paren"&&!X&&!Z){Te({type:"star",value:ee,output:""});continue}for(;x.slice(0,3)==="/**";){let ie=t[g.index+4];if(ie&&ie!=="/")break;x=x.slice(3),lt("/**",3)}if(S.type==="bos"&&Ie()){ne.type="globstar",ne.value+=ee,ne.output=ye(r),g.output=ne.output,g.globstar=!0,lt(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&!z&&Ie()){g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=ye(r)+(r.strictSlashes?")":"|$)"),ne.value+=ee,g.globstar=!0,g.output+=S.output+ne.output,lt(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&x[0]==="/"){let ie=x[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=`${ye(r)}${b}|${b}${ie})`,ne.value+=ee,g.output+=S.output+ne.output,g.globstar=!0,lt(ee+ht()),Te({type:"slash",value:"/",output:""});continue}if(S.type==="bos"&&x[0]==="/"){ne.type="globstar",ne.value+=ee,ne.output=`(?:^|${b}|${ye(r)}${b})`,g.output=ne.output,g.globstar=!0,lt(ee+ht()),Te({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-ne.output.length),ne.type="globstar",ne.output=ye(r),ne.value+=ee,g.output+=ne.output,g.globstar=!0,lt(ee);continue}let w={type:"star",value:ee,output:Pe};if(r.bash===!0){w.output=".*?",(ne.type==="bos"||ne.type==="slash")&&(w.output=ae+w.output),Te(w);continue}if(ne&&(ne.type==="bracket"||ne.type==="paren")&&r.regex===!0){w.output=ee,Te(w);continue}(g.index===g.start||ne.type==="slash"||ne.type==="dot")&&(ne.type==="dot"?(g.output+=U,ne.output+=U):r.dot===!0?(g.output+=J,ne.output+=J):(g.output+=ae,ne.output+=ae),ke()!=="*"&&(g.output+=C,ne.output+=C)),Te(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));g.output=nl.escapeLast(g.output,"["),_e("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing",")"));g.output=nl.escapeLast(g.output,"("),_e("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","}"));g.output=nl.escapeLast(g.output,"{"),_e("braces")}if(r.strictSlashes!==!0&&(ne.type==="star"||ne.type==="bracket")&&Te({type:"maybe_slash",value:"",output:`${b}?`}),g.backtrack===!0){g.output="";for(let x of g.tokens)g.output+=x.output!=null?x.output:x.value,x.suffix&&(g.output+=x.suffix)}return g};MN.fastpaths=(t,e)=>{let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);t=SZ[t]||t;let n=nl.isWindows(e),{DOT_LITERAL:u,SLASH_LITERAL:A,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:I,NO_DOTS_SLASH:v,STAR:b,START_ANCHOR:C}=NP.globChars(n),T=r.dot?I:E,L=r.dot?v:E,U=r.capture?"":"?:",J={negated:!1,prefix:""},te=r.bash===!0?".*?":b;r.capture&&(te=`(${te})`);let le=ae=>ae.noglobstar===!0?te:`(${U}(?:(?!${C}${ae.dot?h:u}).)*?)`,pe=ae=>{switch(ae){case"*":return`${T}${p}${te}`;case".*":return`${u}${p}${te}`;case"*.*":return`${T}${te}${u}${p}${te}`;case"*/*":return`${T}${te}${A}${p}${L}${te}`;case"**":return T+le(r);case"**/*":return`(?:${T}${le(r)}${A})?${L}${p}${te}`;case"**/*.*":return`(?:${T}${le(r)}${A})?${L}${te}${u}${p}${te}`;case"**/.*":return`(?:${T}${le(r)}${A})?${u}${p}${te}`;default:{let we=/^(.*?)\.(\w+)$/.exec(ae);if(!we)return;let Pe=pe(we[1]);return Pe?Pe+u+we[2]:void 0}}},Ae=nl.removePrefix(t,J),ye=pe(Ae);return ye&&r.strictSlashes!==!0&&(ye+=`${A}?`),ye};xZ.exports=MN});var QZ=_((XQt,kZ)=>{"use strict";var nYe=Be("path"),iYe=PZ(),ON=bZ(),UN=bI(),sYe=xI(),oYe=t=>t&&typeof t=="object"&&!Array.isArray(t),Oi=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(v=>Oi(v,e,r));return v=>{for(let b of E){let C=b(v);if(C)return C}return!1}}let o=oYe(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=UN.isWindows(e),u=o?Oi.compileRe(t,e):Oi.makeRe(t,e,!1,!0),A=u.state;delete u.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=Oi(a.ignore,E,r)}let h=(E,I=!1)=>{let{isMatch:v,match:b,output:C}=Oi.test(E,u,e,{glob:t,posix:n}),T={glob:t,state:A,regex:u,posix:n,input:E,output:C,match:b,isMatch:v};return typeof a.onResult=="function"&&a.onResult(T),v===!1?(T.isMatch=!1,I?T:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(T),T.isMatch=!1,I?T:!1):(typeof a.onMatch=="function"&&a.onMatch(T),I?T:!0)};return r&&(h.state=A),h};Oi.test=(t,e,r,{glob:o,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},u=n.format||(a?UN.toPosixSlashes:null),A=t===o,p=A&&u?u(t):t;return A===!1&&(p=u?u(t):t,A=p===o),(A===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?A=Oi.matchBase(t,e,r,a):A=e.exec(p)),{isMatch:Boolean(A),match:A,output:p}};Oi.matchBase=(t,e,r,o=UN.isWindows(r))=>(e instanceof RegExp?e:Oi.makeRe(e,r)).test(nYe.basename(t));Oi.isMatch=(t,e,r)=>Oi(e,r)(t);Oi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Oi.parse(r,e)):ON(t,{...e,fastpaths:!1});Oi.scan=(t,e)=>iYe(t,e);Oi.compileRe=(t,e,r=!1,o=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",u=a.contains?"":"$",A=`${n}(?:${t.output})${u}`;t&&t.negated===!0&&(A=`^(?!${A}).*$`);let p=Oi.toRegex(A,e);return o===!0&&(p.state=t),p};Oi.makeRe=(t,e={},r=!1,o=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=ON.fastpaths(t,e)),a.output||(a=ON(t,e)),Oi.compileRe(a,e,r,o)};Oi.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Oi.constants=sYe;kZ.exports=Oi});var TZ=_((ZQt,FZ)=>{"use strict";FZ.exports=QZ()});var Zo=_(($Qt,MZ)=>{"use strict";var NZ=Be("util"),LZ=pZ(),Ku=TZ(),_N=bI(),RZ=t=>t===""||t==="./",yi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let o=new Set,a=new Set,n=new Set,u=0,A=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!o.has(E));if(r&&h.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(E=>E.replace(/\\/g,"")):e}return h};yi.match=yi;yi.matcher=(t,e)=>Ku(t,e);yi.isMatch=(t,e,r)=>Ku(e,r)(t);yi.any=yi.isMatch;yi.not=(t,e,r={})=>{e=[].concat(e).map(String);let o=new Set,a=[],n=A=>{r.onResult&&r.onResult(A),a.push(A.output)},u=new Set(yi(t,e,{...r,onResult:n}));for(let A of a)u.has(A)||o.add(A);return[...o]};yi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${NZ.inspect(t)}"`);if(Array.isArray(e))return e.some(o=>yi.contains(t,o,r));if(typeof e=="string"){if(RZ(t)||RZ(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return yi.isMatch(t,e,{...r,contains:!0})};yi.matchKeys=(t,e,r)=>{if(!_N.isObject(t))throw new TypeError("Expected the first argument to be an object");let o=yi(Object.keys(t),e,r),a={};for(let n of o)a[n]=t[n];return a};yi.some=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Ku(String(a),r);if(o.some(u=>n(u)))return!0}return!1};yi.every=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Ku(String(a),r);if(!o.every(u=>n(u)))return!1}return!0};yi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${NZ.inspect(t)}"`);return[].concat(e).every(o=>Ku(o,r)(t))};yi.capture=(t,e,r)=>{let o=_N.isWindows(r),n=Ku.makeRe(String(t),{...r,capture:!0}).exec(o?_N.toPosixSlashes(e):e);if(n)return n.slice(1).map(u=>u===void 0?"":u)};yi.makeRe=(...t)=>Ku.makeRe(...t);yi.scan=(...t)=>Ku.scan(...t);yi.parse=(t,e)=>{let r=[];for(let o of[].concat(t||[]))for(let a of LZ(String(o),e))r.push(Ku.parse(a,e));return r};yi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:LZ(t,e)};yi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return yi.braces(t,{...e,expand:!0})};MZ.exports=yi});var UZ=_((eFt,OZ)=>{"use strict";OZ.exports=({onlyFirst:t=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}});var MP=_((tFt,_Z)=>{"use strict";var aYe=UZ();_Z.exports=t=>typeof t=="string"?t.replace(aYe(),""):t});var jZ=_((rFt,HZ)=>{function lYe(){this.__data__=[],this.size=0}HZ.exports=lYe});var Ry=_((nFt,qZ)=>{function cYe(t,e){return t===e||t!==t&&e!==e}qZ.exports=cYe});var QI=_((iFt,GZ)=>{var uYe=Ry();function AYe(t,e){for(var r=t.length;r--;)if(uYe(t[r][0],e))return r;return-1}GZ.exports=AYe});var WZ=_((sFt,YZ)=>{var fYe=QI(),pYe=Array.prototype,hYe=pYe.splice;function gYe(t){var e=this.__data__,r=fYe(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():hYe.call(e,r,1),--this.size,!0}YZ.exports=gYe});var KZ=_((oFt,VZ)=>{var dYe=QI();function mYe(t){var e=this.__data__,r=dYe(e,t);return r<0?void 0:e[r][1]}VZ.exports=mYe});var zZ=_((aFt,JZ)=>{var yYe=QI();function EYe(t){return yYe(this.__data__,t)>-1}JZ.exports=EYe});var ZZ=_((lFt,XZ)=>{var CYe=QI();function wYe(t,e){var r=this.__data__,o=CYe(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}XZ.exports=wYe});var FI=_((cFt,$Z)=>{var IYe=jZ(),BYe=WZ(),vYe=KZ(),DYe=zZ(),PYe=ZZ();function Ny(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var SYe=FI();function xYe(){this.__data__=new SYe,this.size=0}e$.exports=xYe});var n$=_((AFt,r$)=>{function bYe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}r$.exports=bYe});var s$=_((fFt,i$)=>{function kYe(t){return this.__data__.get(t)}i$.exports=kYe});var a$=_((pFt,o$)=>{function QYe(t){return this.__data__.has(t)}o$.exports=QYe});var HN=_((hFt,l$)=>{var FYe=typeof global=="object"&&global&&global.Object===Object&&global;l$.exports=FYe});var _l=_((gFt,c$)=>{var TYe=HN(),RYe=typeof self=="object"&&self&&self.Object===Object&&self,NYe=TYe||RYe||Function("return this")();c$.exports=NYe});var fd=_((dFt,u$)=>{var LYe=_l(),MYe=LYe.Symbol;u$.exports=MYe});var h$=_((mFt,p$)=>{var A$=fd(),f$=Object.prototype,OYe=f$.hasOwnProperty,UYe=f$.toString,TI=A$?A$.toStringTag:void 0;function _Ye(t){var e=OYe.call(t,TI),r=t[TI];try{t[TI]=void 0;var o=!0}catch{}var a=UYe.call(t);return o&&(e?t[TI]=r:delete t[TI]),a}p$.exports=_Ye});var d$=_((yFt,g$)=>{var HYe=Object.prototype,jYe=HYe.toString;function qYe(t){return jYe.call(t)}g$.exports=qYe});var pd=_((EFt,E$)=>{var m$=fd(),GYe=h$(),YYe=d$(),WYe="[object Null]",VYe="[object Undefined]",y$=m$?m$.toStringTag:void 0;function KYe(t){return t==null?t===void 0?VYe:WYe:y$&&y$ in Object(t)?GYe(t):YYe(t)}E$.exports=KYe});var il=_((CFt,C$)=>{function JYe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}C$.exports=JYe});var OP=_((wFt,w$)=>{var zYe=pd(),XYe=il(),ZYe="[object AsyncFunction]",$Ye="[object Function]",eWe="[object GeneratorFunction]",tWe="[object Proxy]";function rWe(t){if(!XYe(t))return!1;var e=zYe(t);return e==$Ye||e==eWe||e==ZYe||e==tWe}w$.exports=rWe});var B$=_((IFt,I$)=>{var nWe=_l(),iWe=nWe["__core-js_shared__"];I$.exports=iWe});var P$=_((BFt,D$)=>{var jN=B$(),v$=function(){var t=/[^.]+$/.exec(jN&&jN.keys&&jN.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function sWe(t){return!!v$&&v$ in t}D$.exports=sWe});var qN=_((vFt,S$)=>{var oWe=Function.prototype,aWe=oWe.toString;function lWe(t){if(t!=null){try{return aWe.call(t)}catch{}try{return t+""}catch{}}return""}S$.exports=lWe});var b$=_((DFt,x$)=>{var cWe=OP(),uWe=P$(),AWe=il(),fWe=qN(),pWe=/[\\^$.*+?()[\]{}|]/g,hWe=/^\[object .+?Constructor\]$/,gWe=Function.prototype,dWe=Object.prototype,mWe=gWe.toString,yWe=dWe.hasOwnProperty,EWe=RegExp("^"+mWe.call(yWe).replace(pWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function CWe(t){if(!AWe(t)||uWe(t))return!1;var e=cWe(t)?EWe:hWe;return e.test(fWe(t))}x$.exports=CWe});var Q$=_((PFt,k$)=>{function wWe(t,e){return t?.[e]}k$.exports=wWe});var Jp=_((SFt,F$)=>{var IWe=b$(),BWe=Q$();function vWe(t,e){var r=BWe(t,e);return IWe(r)?r:void 0}F$.exports=vWe});var UP=_((xFt,T$)=>{var DWe=Jp(),PWe=_l(),SWe=DWe(PWe,"Map");T$.exports=SWe});var RI=_((bFt,R$)=>{var xWe=Jp(),bWe=xWe(Object,"create");R$.exports=bWe});var M$=_((kFt,L$)=>{var N$=RI();function kWe(){this.__data__=N$?N$(null):{},this.size=0}L$.exports=kWe});var U$=_((QFt,O$)=>{function QWe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}O$.exports=QWe});var H$=_((FFt,_$)=>{var FWe=RI(),TWe="__lodash_hash_undefined__",RWe=Object.prototype,NWe=RWe.hasOwnProperty;function LWe(t){var e=this.__data__;if(FWe){var r=e[t];return r===TWe?void 0:r}return NWe.call(e,t)?e[t]:void 0}_$.exports=LWe});var q$=_((TFt,j$)=>{var MWe=RI(),OWe=Object.prototype,UWe=OWe.hasOwnProperty;function _We(t){var e=this.__data__;return MWe?e[t]!==void 0:UWe.call(e,t)}j$.exports=_We});var Y$=_((RFt,G$)=>{var HWe=RI(),jWe="__lodash_hash_undefined__";function qWe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=HWe&&e===void 0?jWe:e,this}G$.exports=qWe});var V$=_((NFt,W$)=>{var GWe=M$(),YWe=U$(),WWe=H$(),VWe=q$(),KWe=Y$();function Ly(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var K$=V$(),JWe=FI(),zWe=UP();function XWe(){this.size=0,this.__data__={hash:new K$,map:new(zWe||JWe),string:new K$}}J$.exports=XWe});var Z$=_((MFt,X$)=>{function ZWe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}X$.exports=ZWe});var NI=_((OFt,$$)=>{var $We=Z$();function eVe(t,e){var r=t.__data__;return $We(e)?r[typeof e=="string"?"string":"hash"]:r.map}$$.exports=eVe});var tee=_((UFt,eee)=>{var tVe=NI();function rVe(t){var e=tVe(this,t).delete(t);return this.size-=e?1:0,e}eee.exports=rVe});var nee=_((_Ft,ree)=>{var nVe=NI();function iVe(t){return nVe(this,t).get(t)}ree.exports=iVe});var see=_((HFt,iee)=>{var sVe=NI();function oVe(t){return sVe(this,t).has(t)}iee.exports=oVe});var aee=_((jFt,oee)=>{var aVe=NI();function lVe(t,e){var r=aVe(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}oee.exports=lVe});var _P=_((qFt,lee)=>{var cVe=z$(),uVe=tee(),AVe=nee(),fVe=see(),pVe=aee();function My(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var hVe=FI(),gVe=UP(),dVe=_P(),mVe=200;function yVe(t,e){var r=this.__data__;if(r instanceof hVe){var o=r.__data__;if(!gVe||o.length{var EVe=FI(),CVe=t$(),wVe=n$(),IVe=s$(),BVe=a$(),vVe=uee();function Oy(t){var e=this.__data__=new EVe(t);this.size=e.size}Oy.prototype.clear=CVe;Oy.prototype.delete=wVe;Oy.prototype.get=IVe;Oy.prototype.has=BVe;Oy.prototype.set=vVe;Aee.exports=Oy});var pee=_((WFt,fee)=>{var DVe="__lodash_hash_undefined__";function PVe(t){return this.__data__.set(t,DVe),this}fee.exports=PVe});var gee=_((VFt,hee)=>{function SVe(t){return this.__data__.has(t)}hee.exports=SVe});var mee=_((KFt,dee)=>{var xVe=_P(),bVe=pee(),kVe=gee();function jP(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new xVe;++e{function QVe(t,e){for(var r=-1,o=t==null?0:t.length;++r{function FVe(t,e){return t.has(e)}Cee.exports=FVe});var GN=_((XFt,Iee)=>{var TVe=mee(),RVe=Eee(),NVe=wee(),LVe=1,MVe=2;function OVe(t,e,r,o,a,n){var u=r&LVe,A=t.length,p=e.length;if(A!=p&&!(u&&p>A))return!1;var h=n.get(t),E=n.get(e);if(h&&E)return h==e&&E==t;var I=-1,v=!0,b=r&MVe?new TVe:void 0;for(n.set(t,e),n.set(e,t);++I{var UVe=_l(),_Ve=UVe.Uint8Array;Bee.exports=_Ve});var Dee=_(($Ft,vee)=>{function HVe(t){var e=-1,r=Array(t.size);return t.forEach(function(o,a){r[++e]=[a,o]}),r}vee.exports=HVe});var See=_((eTt,Pee)=>{function jVe(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}Pee.exports=jVe});var Fee=_((tTt,Qee)=>{var xee=fd(),bee=YN(),qVe=Ry(),GVe=GN(),YVe=Dee(),WVe=See(),VVe=1,KVe=2,JVe="[object Boolean]",zVe="[object Date]",XVe="[object Error]",ZVe="[object Map]",$Ve="[object Number]",eKe="[object RegExp]",tKe="[object Set]",rKe="[object String]",nKe="[object Symbol]",iKe="[object ArrayBuffer]",sKe="[object DataView]",kee=xee?xee.prototype:void 0,WN=kee?kee.valueOf:void 0;function oKe(t,e,r,o,a,n,u){switch(r){case sKe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case iKe:return!(t.byteLength!=e.byteLength||!n(new bee(t),new bee(e)));case JVe:case zVe:case $Ve:return qVe(+t,+e);case XVe:return t.name==e.name&&t.message==e.message;case eKe:case rKe:return t==e+"";case ZVe:var A=YVe;case tKe:var p=o&VVe;if(A||(A=WVe),t.size!=e.size&&!p)return!1;var h=u.get(t);if(h)return h==e;o|=KVe,u.set(t,e);var E=GVe(A(t),A(e),o,a,n,u);return u.delete(t),E;case nKe:if(WN)return WN.call(t)==WN.call(e)}return!1}Qee.exports=oKe});var qP=_((rTt,Tee)=>{function aKe(t,e){for(var r=-1,o=e.length,a=t.length;++r{var lKe=Array.isArray;Ree.exports=lKe});var VN=_((iTt,Nee)=>{var cKe=qP(),uKe=Hl();function AKe(t,e,r){var o=e(t);return uKe(t)?o:cKe(o,r(t))}Nee.exports=AKe});var Mee=_((sTt,Lee)=>{function fKe(t,e){for(var r=-1,o=t==null?0:t.length,a=0,n=[];++r{function pKe(){return[]}Oee.exports=pKe});var GP=_((aTt,_ee)=>{var hKe=Mee(),gKe=KN(),dKe=Object.prototype,mKe=dKe.propertyIsEnumerable,Uee=Object.getOwnPropertySymbols,yKe=Uee?function(t){return t==null?[]:(t=Object(t),hKe(Uee(t),function(e){return mKe.call(t,e)}))}:gKe;_ee.exports=yKe});var jee=_((lTt,Hee)=>{function EKe(t,e){for(var r=-1,o=Array(t);++r{function CKe(t){return t!=null&&typeof t=="object"}qee.exports=CKe});var Yee=_((uTt,Gee)=>{var wKe=pd(),IKe=Ju(),BKe="[object Arguments]";function vKe(t){return IKe(t)&&wKe(t)==BKe}Gee.exports=vKe});var LI=_((ATt,Kee)=>{var Wee=Yee(),DKe=Ju(),Vee=Object.prototype,PKe=Vee.hasOwnProperty,SKe=Vee.propertyIsEnumerable,xKe=Wee(function(){return arguments}())?Wee:function(t){return DKe(t)&&PKe.call(t,"callee")&&!SKe.call(t,"callee")};Kee.exports=xKe});var zee=_((fTt,Jee)=>{function bKe(){return!1}Jee.exports=bKe});var OI=_((MI,Uy)=>{var kKe=_l(),QKe=zee(),$ee=typeof MI=="object"&&MI&&!MI.nodeType&&MI,Xee=$ee&&typeof Uy=="object"&&Uy&&!Uy.nodeType&&Uy,FKe=Xee&&Xee.exports===$ee,Zee=FKe?kKe.Buffer:void 0,TKe=Zee?Zee.isBuffer:void 0,RKe=TKe||QKe;Uy.exports=RKe});var UI=_((pTt,ete)=>{var NKe=9007199254740991,LKe=/^(?:0|[1-9]\d*)$/;function MKe(t,e){var r=typeof t;return e=e??NKe,!!e&&(r=="number"||r!="symbol"&&LKe.test(t))&&t>-1&&t%1==0&&t{var OKe=9007199254740991;function UKe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=OKe}tte.exports=UKe});var nte=_((gTt,rte)=>{var _Ke=pd(),HKe=YP(),jKe=Ju(),qKe="[object Arguments]",GKe="[object Array]",YKe="[object Boolean]",WKe="[object Date]",VKe="[object Error]",KKe="[object Function]",JKe="[object Map]",zKe="[object Number]",XKe="[object Object]",ZKe="[object RegExp]",$Ke="[object Set]",eJe="[object String]",tJe="[object WeakMap]",rJe="[object ArrayBuffer]",nJe="[object DataView]",iJe="[object Float32Array]",sJe="[object Float64Array]",oJe="[object Int8Array]",aJe="[object Int16Array]",lJe="[object Int32Array]",cJe="[object Uint8Array]",uJe="[object Uint8ClampedArray]",AJe="[object Uint16Array]",fJe="[object Uint32Array]",ui={};ui[iJe]=ui[sJe]=ui[oJe]=ui[aJe]=ui[lJe]=ui[cJe]=ui[uJe]=ui[AJe]=ui[fJe]=!0;ui[qKe]=ui[GKe]=ui[rJe]=ui[YKe]=ui[nJe]=ui[WKe]=ui[VKe]=ui[KKe]=ui[JKe]=ui[zKe]=ui[XKe]=ui[ZKe]=ui[$Ke]=ui[eJe]=ui[tJe]=!1;function pJe(t){return jKe(t)&&HKe(t.length)&&!!ui[_Ke(t)]}rte.exports=pJe});var WP=_((dTt,ite)=>{function hJe(t){return function(e){return t(e)}}ite.exports=hJe});var VP=_((_I,_y)=>{var gJe=HN(),ste=typeof _I=="object"&&_I&&!_I.nodeType&&_I,HI=ste&&typeof _y=="object"&&_y&&!_y.nodeType&&_y,dJe=HI&&HI.exports===ste,JN=dJe&&gJe.process,mJe=function(){try{var t=HI&&HI.require&&HI.require("util").types;return t||JN&&JN.binding&&JN.binding("util")}catch{}}();_y.exports=mJe});var KP=_((mTt,lte)=>{var yJe=nte(),EJe=WP(),ote=VP(),ate=ote&&ote.isTypedArray,CJe=ate?EJe(ate):yJe;lte.exports=CJe});var zN=_((yTt,cte)=>{var wJe=jee(),IJe=LI(),BJe=Hl(),vJe=OI(),DJe=UI(),PJe=KP(),SJe=Object.prototype,xJe=SJe.hasOwnProperty;function bJe(t,e){var r=BJe(t),o=!r&&IJe(t),a=!r&&!o&&vJe(t),n=!r&&!o&&!a&&PJe(t),u=r||o||a||n,A=u?wJe(t.length,String):[],p=A.length;for(var h in t)(e||xJe.call(t,h))&&!(u&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||DJe(h,p)))&&A.push(h);return A}cte.exports=bJe});var JP=_((ETt,ute)=>{var kJe=Object.prototype;function QJe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||kJe;return t===r}ute.exports=QJe});var XN=_((CTt,Ate)=>{function FJe(t,e){return function(r){return t(e(r))}}Ate.exports=FJe});var pte=_((wTt,fte)=>{var TJe=XN(),RJe=TJe(Object.keys,Object);fte.exports=RJe});var gte=_((ITt,hte)=>{var NJe=JP(),LJe=pte(),MJe=Object.prototype,OJe=MJe.hasOwnProperty;function UJe(t){if(!NJe(t))return LJe(t);var e=[];for(var r in Object(t))OJe.call(t,r)&&r!="constructor"&&e.push(r);return e}hte.exports=UJe});var jI=_((BTt,dte)=>{var _Je=OP(),HJe=YP();function jJe(t){return t!=null&&HJe(t.length)&&!_Je(t)}dte.exports=jJe});var zP=_((vTt,mte)=>{var qJe=zN(),GJe=gte(),YJe=jI();function WJe(t){return YJe(t)?qJe(t):GJe(t)}mte.exports=WJe});var ZN=_((DTt,yte)=>{var VJe=VN(),KJe=GP(),JJe=zP();function zJe(t){return VJe(t,JJe,KJe)}yte.exports=zJe});var wte=_((PTt,Cte)=>{var Ete=ZN(),XJe=1,ZJe=Object.prototype,$Je=ZJe.hasOwnProperty;function eze(t,e,r,o,a,n){var u=r&XJe,A=Ete(t),p=A.length,h=Ete(e),E=h.length;if(p!=E&&!u)return!1;for(var I=p;I--;){var v=A[I];if(!(u?v in e:$Je.call(e,v)))return!1}var b=n.get(t),C=n.get(e);if(b&&C)return b==e&&C==t;var T=!0;n.set(t,e),n.set(e,t);for(var L=u;++I{var tze=Jp(),rze=_l(),nze=tze(rze,"DataView");Ite.exports=nze});var Dte=_((xTt,vte)=>{var ize=Jp(),sze=_l(),oze=ize(sze,"Promise");vte.exports=oze});var Ste=_((bTt,Pte)=>{var aze=Jp(),lze=_l(),cze=aze(lze,"Set");Pte.exports=cze});var bte=_((kTt,xte)=>{var uze=Jp(),Aze=_l(),fze=uze(Aze,"WeakMap");xte.exports=fze});var qI=_((QTt,Lte)=>{var $N=Bte(),eL=UP(),tL=Dte(),rL=Ste(),nL=bte(),Nte=pd(),Hy=qN(),kte="[object Map]",pze="[object Object]",Qte="[object Promise]",Fte="[object Set]",Tte="[object WeakMap]",Rte="[object DataView]",hze=Hy($N),gze=Hy(eL),dze=Hy(tL),mze=Hy(rL),yze=Hy(nL),hd=Nte;($N&&hd(new $N(new ArrayBuffer(1)))!=Rte||eL&&hd(new eL)!=kte||tL&&hd(tL.resolve())!=Qte||rL&&hd(new rL)!=Fte||nL&&hd(new nL)!=Tte)&&(hd=function(t){var e=Nte(t),r=e==pze?t.constructor:void 0,o=r?Hy(r):"";if(o)switch(o){case hze:return Rte;case gze:return kte;case dze:return Qte;case mze:return Fte;case yze:return Tte}return e});Lte.exports=hd});var Gte=_((FTt,qte)=>{var iL=HP(),Eze=GN(),Cze=Fee(),wze=wte(),Mte=qI(),Ote=Hl(),Ute=OI(),Ize=KP(),Bze=1,_te="[object Arguments]",Hte="[object Array]",XP="[object Object]",vze=Object.prototype,jte=vze.hasOwnProperty;function Dze(t,e,r,o,a,n){var u=Ote(t),A=Ote(e),p=u?Hte:Mte(t),h=A?Hte:Mte(e);p=p==_te?XP:p,h=h==_te?XP:h;var E=p==XP,I=h==XP,v=p==h;if(v&&Ute(t)){if(!Ute(e))return!1;u=!0,E=!1}if(v&&!E)return n||(n=new iL),u||Ize(t)?Eze(t,e,r,o,a,n):Cze(t,e,p,r,o,a,n);if(!(r&Bze)){var b=E&&jte.call(t,"__wrapped__"),C=I&&jte.call(e,"__wrapped__");if(b||C){var T=b?t.value():t,L=C?e.value():e;return n||(n=new iL),a(T,L,r,o,n)}}return v?(n||(n=new iL),wze(t,e,r,o,a,n)):!1}qte.exports=Dze});var Kte=_((TTt,Vte)=>{var Pze=Gte(),Yte=Ju();function Wte(t,e,r,o,a){return t===e?!0:t==null||e==null||!Yte(t)&&!Yte(e)?t!==t&&e!==e:Pze(t,e,r,o,Wte,a)}Vte.exports=Wte});var zte=_((RTt,Jte)=>{var Sze=Kte();function xze(t,e){return Sze(t,e)}Jte.exports=xze});var sL=_((NTt,Xte)=>{var bze=Jp(),kze=function(){try{var t=bze(Object,"defineProperty");return t({},"",{}),t}catch{}}();Xte.exports=kze});var ZP=_((LTt,$te)=>{var Zte=sL();function Qze(t,e,r){e=="__proto__"&&Zte?Zte(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}$te.exports=Qze});var oL=_((MTt,ere)=>{var Fze=ZP(),Tze=Ry();function Rze(t,e,r){(r!==void 0&&!Tze(t[e],r)||r===void 0&&!(e in t))&&Fze(t,e,r)}ere.exports=Rze});var rre=_((OTt,tre)=>{function Nze(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}tre.exports=Nze});var ire=_((UTt,nre)=>{var Lze=rre(),Mze=Lze();nre.exports=Mze});var aL=_((GI,jy)=>{var Oze=_l(),lre=typeof GI=="object"&&GI&&!GI.nodeType&&GI,sre=lre&&typeof jy=="object"&&jy&&!jy.nodeType&&jy,Uze=sre&&sre.exports===lre,ore=Uze?Oze.Buffer:void 0,are=ore?ore.allocUnsafe:void 0;function _ze(t,e){if(e)return t.slice();var r=t.length,o=are?are(r):new t.constructor(r);return t.copy(o),o}jy.exports=_ze});var $P=_((_Tt,ure)=>{var cre=YN();function Hze(t){var e=new t.constructor(t.byteLength);return new cre(e).set(new cre(t)),e}ure.exports=Hze});var lL=_((HTt,Are)=>{var jze=$P();function qze(t,e){var r=e?jze(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}Are.exports=qze});var eS=_((jTt,fre)=>{function Gze(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r{var Yze=il(),pre=Object.create,Wze=function(){function t(){}return function(e){if(!Yze(e))return{};if(pre)return pre(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();hre.exports=Wze});var tS=_((GTt,dre)=>{var Vze=XN(),Kze=Vze(Object.getPrototypeOf,Object);dre.exports=Kze});var cL=_((YTt,mre)=>{var Jze=gre(),zze=tS(),Xze=JP();function Zze(t){return typeof t.constructor=="function"&&!Xze(t)?Jze(zze(t)):{}}mre.exports=Zze});var Ere=_((WTt,yre)=>{var $ze=jI(),eXe=Ju();function tXe(t){return eXe(t)&&$ze(t)}yre.exports=tXe});var uL=_((VTt,wre)=>{var rXe=pd(),nXe=tS(),iXe=Ju(),sXe="[object Object]",oXe=Function.prototype,aXe=Object.prototype,Cre=oXe.toString,lXe=aXe.hasOwnProperty,cXe=Cre.call(Object);function uXe(t){if(!iXe(t)||rXe(t)!=sXe)return!1;var e=nXe(t);if(e===null)return!0;var r=lXe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Cre.call(r)==cXe}wre.exports=uXe});var AL=_((KTt,Ire)=>{function AXe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}Ire.exports=AXe});var rS=_((JTt,Bre)=>{var fXe=ZP(),pXe=Ry(),hXe=Object.prototype,gXe=hXe.hasOwnProperty;function dXe(t,e,r){var o=t[e];(!(gXe.call(t,e)&&pXe(o,r))||r===void 0&&!(e in t))&&fXe(t,e,r)}Bre.exports=dXe});var gd=_((zTt,vre)=>{var mXe=rS(),yXe=ZP();function EXe(t,e,r,o){var a=!r;r||(r={});for(var n=-1,u=e.length;++n{function CXe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}Dre.exports=CXe});var xre=_((ZTt,Sre)=>{var wXe=il(),IXe=JP(),BXe=Pre(),vXe=Object.prototype,DXe=vXe.hasOwnProperty;function PXe(t){if(!wXe(t))return BXe(t);var e=IXe(t),r=[];for(var o in t)o=="constructor"&&(e||!DXe.call(t,o))||r.push(o);return r}Sre.exports=PXe});var qy=_(($Tt,bre)=>{var SXe=zN(),xXe=xre(),bXe=jI();function kXe(t){return bXe(t)?SXe(t,!0):xXe(t)}bre.exports=kXe});var Qre=_((eRt,kre)=>{var QXe=gd(),FXe=qy();function TXe(t){return QXe(t,FXe(t))}kre.exports=TXe});var Mre=_((tRt,Lre)=>{var Fre=oL(),RXe=aL(),NXe=lL(),LXe=eS(),MXe=cL(),Tre=LI(),Rre=Hl(),OXe=Ere(),UXe=OI(),_Xe=OP(),HXe=il(),jXe=uL(),qXe=KP(),Nre=AL(),GXe=Qre();function YXe(t,e,r,o,a,n,u){var A=Nre(t,r),p=Nre(e,r),h=u.get(p);if(h){Fre(t,r,h);return}var E=n?n(A,p,r+"",t,e,u):void 0,I=E===void 0;if(I){var v=Rre(p),b=!v&&UXe(p),C=!v&&!b&&qXe(p);E=p,v||b||C?Rre(A)?E=A:OXe(A)?E=LXe(A):b?(I=!1,E=RXe(p,!0)):C?(I=!1,E=NXe(p,!0)):E=[]:jXe(p)||Tre(p)?(E=A,Tre(A)?E=GXe(A):(!HXe(A)||_Xe(A))&&(E=MXe(p))):I=!1}I&&(u.set(p,E),a(E,p,o,n,u),u.delete(p)),Fre(t,r,E)}Lre.exports=YXe});var _re=_((rRt,Ure)=>{var WXe=HP(),VXe=oL(),KXe=ire(),JXe=Mre(),zXe=il(),XXe=qy(),ZXe=AL();function Ore(t,e,r,o,a){t!==e&&KXe(e,function(n,u){if(a||(a=new WXe),zXe(n))JXe(t,e,u,r,Ore,o,a);else{var A=o?o(ZXe(t,u),n,u+"",t,e,a):void 0;A===void 0&&(A=n),VXe(t,u,A)}},XXe)}Ure.exports=Ore});var fL=_((nRt,Hre)=>{function $Xe(t){return t}Hre.exports=$Xe});var qre=_((iRt,jre)=>{function eZe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}jre.exports=eZe});var pL=_((sRt,Yre)=>{var tZe=qre(),Gre=Math.max;function rZe(t,e,r){return e=Gre(e===void 0?t.length-1:e,0),function(){for(var o=arguments,a=-1,n=Gre(o.length-e,0),u=Array(n);++a{function nZe(t){return function(){return t}}Wre.exports=nZe});var zre=_((aRt,Jre)=>{var iZe=Vre(),Kre=sL(),sZe=fL(),oZe=Kre?function(t,e){return Kre(t,"toString",{configurable:!0,enumerable:!1,value:iZe(e),writable:!0})}:sZe;Jre.exports=oZe});var Zre=_((lRt,Xre)=>{var aZe=800,lZe=16,cZe=Date.now;function uZe(t){var e=0,r=0;return function(){var o=cZe(),a=lZe-(o-r);if(r=o,a>0){if(++e>=aZe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}Xre.exports=uZe});var hL=_((cRt,$re)=>{var AZe=zre(),fZe=Zre(),pZe=fZe(AZe);$re.exports=pZe});var tne=_((uRt,ene)=>{var hZe=fL(),gZe=pL(),dZe=hL();function mZe(t,e){return dZe(gZe(t,e,hZe),t+"")}ene.exports=mZe});var nne=_((ARt,rne)=>{var yZe=Ry(),EZe=jI(),CZe=UI(),wZe=il();function IZe(t,e,r){if(!wZe(r))return!1;var o=typeof e;return(o=="number"?EZe(r)&&CZe(e,r.length):o=="string"&&e in r)?yZe(r[e],t):!1}rne.exports=IZe});var sne=_((fRt,ine)=>{var BZe=tne(),vZe=nne();function DZe(t){return BZe(function(e,r){var o=-1,a=r.length,n=a>1?r[a-1]:void 0,u=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,u&&vZe(r[0],r[1],u)&&(n=a<3?void 0:n,a=1),e=Object(e);++o{var PZe=_re(),SZe=sne(),xZe=SZe(function(t,e,r,o){PZe(t,e,r,o)});one.exports=xZe});var je={};Kt(je,{AsyncActions:()=>mL,BufferStream:()=>dL,CachingStrategy:()=>Ene,DefaultStream:()=>yL,allSettledSafe:()=>Uc,assertNever:()=>CL,bufferStream:()=>Vy,buildIgnorePattern:()=>NZe,convertMapsToIndexableObjects:()=>iS,dynamicRequire:()=>vf,escapeRegExp:()=>kZe,getArrayWithDefault:()=>Gy,getFactoryWithDefault:()=>ol,getMapWithDefault:()=>Yy,getSetWithDefault:()=>dd,groupBy:()=>BL,isIndexableObject:()=>gL,isPathLike:()=>LZe,isTaggedYarnVersion:()=>bZe,makeDeferred:()=>dne,mapAndFilter:()=>sl,mapAndFind:()=>WI,mergeIntoTarget:()=>wne,overrideType:()=>QZe,parseBoolean:()=>VI,parseInt:()=>Ky,parseOptionalBoolean:()=>Cne,plural:()=>nS,prettifyAsyncErrors:()=>Wy,prettifySyncErrors:()=>wL,releaseAfterUseAsync:()=>TZe,replaceEnvVariables:()=>sS,sortMap:()=>ks,toMerged:()=>MZe,tryParseOptionalBoolean:()=>IL,validateEnum:()=>FZe});function bZe(t){return!!(pne.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function nS(t,{one:e,more:r,zero:o=r}){return t===0?o:t===1?e:r}function kZe(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function QZe(t){}function CL(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function FZe(t,e){let r=Object.values(t);if(!r.includes(e))throw new it(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(o=>JSON.stringify(o)).join(", ")})`);return e}function sl(t,e){let r=[];for(let o of t){let a=e(o);a!==hne&&r.push(a)}return r}function WI(t,e){for(let r of t){let o=e(r);if(o!==gne)return o}}function gL(t){return typeof t=="object"&&t!==null}async function Uc(t){let e=await Promise.allSettled(t),r=[];for(let o of e){if(o.status==="rejected")throw o.reason;r.push(o.value)}return r}function iS(t){if(t instanceof Map&&(t=Object.fromEntries(t)),gL(t))for(let e of Object.keys(t)){let r=t[e];gL(r)&&(t[e]=iS(r))}return t}function ol(t,e,r){let o=t.get(e);return typeof o>"u"&&t.set(e,o=r()),o}function Gy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function dd(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function Yy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function TZe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function Wy(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function wL(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function Vy(t){return await new Promise((e,r)=>{let o=[];t.on("error",a=>{r(a)}),t.on("data",a=>{o.push(a)}),t.on("end",()=>{e(Buffer.concat(o))})})}function dne(){let t,e;return{promise:new Promise((o,a)=>{t=o,e=a}),resolve:t,reject:e}}function mne(t){return YI(ue.fromPortablePath(t))}function yne(path){let physicalPath=ue.fromPortablePath(path),currentCacheEntry=YI.cache[physicalPath];delete YI.cache[physicalPath];let result;try{result=mne(physicalPath);let freshCacheEntry=YI.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{YI.cache[physicalPath]=currentCacheEntry}return result}function RZe(t){let e=lne.get(t),r=oe.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let o=yne(t);return lne.set(t,{mtime:r.mtimeMs,instance:o}),o}function vf(t,{cachingStrategy:e=2}={}){switch(e){case 0:return yne(t);case 1:return RZe(t);case 2:return mne(t);default:throw new Error("Unsupported caching strategy")}}function ks(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function NZe(t){return t.length===0?null:t.map(e=>`(${Ane.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function sS(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...o)=>{let{variableName:a,colon:n,fallback:u}=o[o.length-1],A=Object.hasOwn(e,a),p=e[a];if(p||A&&!n)return p;if(u!=null)return u;throw new it(`Environment variable not found (${a})`)})}function VI(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${t}" as a boolean`)}}function Cne(t){return typeof t>"u"?t:VI(t)}function IL(t){try{return Cne(t)}catch{return null}}function LZe(t){return!!(ue.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function wne(t,...e){let r=u=>({value:u}),o=r(t),a=e.map(u=>r(u)),{value:n}=(0,une.default)(o,...a,(u,A)=>{if(Array.isArray(u)&&Array.isArray(A)){for(let p of A)u.find(h=>(0,cne.default)(h,p))||u.push(p);return u}});return n}function MZe(...t){return wne({},...t)}function BL(t,e){let r=Object.create(null);for(let o of t){let a=o[e];r[a]??=[],r[a].push(o)}return r}function Ky(t){return typeof t=="string"?Number.parseInt(t,10):t}var cne,une,Ane,fne,pne,EL,hne,gne,dL,mL,yL,YI,lne,Ene,jl=Et(()=>{Pt();qt();cne=$e(zte()),une=$e(ane()),Ane=$e(Zo()),fne=$e(nd()),pne=$e(zn()),EL=Be("stream");hne=Symbol();sl.skip=hne;gne=Symbol();WI.skip=gne;dL=class extends EL.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};mL=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,fne.default)(e)}set(e,r){let o=this.deferred.get(e);typeof o>"u"&&this.deferred.set(e,o=dne());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&o.resolve()},n=>{this.promises.get(e)===a&&o.reject(n)}),o.promise}reduce(e,r){let o=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(o))}async wait(){await Promise.all(this.promises.values())}},yL=class extends EL.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},YI=eval("require");lne=new Map;Ene=(o=>(o[o.NoCache=0]="NoCache",o[o.FsTime=1]="FsTime",o[o.Node=2]="Node",o))(Ene||{})});var Jy,vL,DL,Ine=Et(()=>{Jy=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(Jy||{}),vL=(o=>(o.Dependency="Dependency",o.PeerDependency="PeerDependency",o.PeerDependencyMeta="PeerDependencyMeta",o))(vL||{}),DL=(o=>(o.Inactive="inactive",o.Redundant="redundant",o.Active="active",o))(DL||{})});var de={};Kt(de,{LogLevel:()=>uS,Style:()=>aS,Type:()=>yt,addLogFilterSupport:()=>zI,applyColor:()=>Ks,applyHyperlink:()=>Xy,applyStyle:()=>md,json:()=>yd,jsonOrPretty:()=>_Ze,mark:()=>kL,pretty:()=>Ot,prettyField:()=>zu,prettyList:()=>bL,prettyTruncatedLocatorList:()=>cS,stripAnsi:()=>zy.default,supportsColor:()=>lS,supportsHyperlinks:()=>xL,tuple:()=>_c});function Bne(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let o=1024**r;return`${Math.floor(t*100/o)/100} ${e[r-1]}`}function _c(t,e){return[e,t]}function md(t,e,r){return t.get("enableColors")&&r&2&&(e=JI.default.bold(e)),e}function Ks(t,e,r){if(!t.get("enableColors"))return e;let o=OZe.get(r);if(o===null)return e;let a=typeof o>"u"?r:SL.level>=3?o[0]:o[1],n=typeof a=="number"?PL.ansi256(a):a.startsWith("#")?PL.hex(a):PL[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function Xy(t,e,r){return t.get("enableHyperlinks")?UZe?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Ot(t,e,r){if(e===null)return Ks(t,"null",yt.NULL);if(Object.hasOwn(oS,r))return oS[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Ks(t,e,r)}function bL(t,e,r,{separator:o=", "}={}){return[...e].map(a=>Ot(t,a,r)).join(o)}function yd(t,e){if(t===null)return null;if(Object.hasOwn(oS,e))return oS[e].json(t);if(typeof t!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof t}`);return t}function _Ze(t,e,[r,o]){return t?yd(r,o):Ot(e,r,o)}function kL(t){return{Check:Ks(t,"\u2713","green"),Cross:Ks(t,"\u2718","red"),Question:Ks(t,"?","cyan")}}function zu(t,{label:e,value:[r,o]}){return`${Ot(t,e,yt.CODE)}: ${Ot(t,r,o)}`}function cS(t,e,r){let o=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${jr(t,h)}, `,I=QL(h).length+2;if(o.length>0&&nh).join("").slice(0,-2);let u="X".repeat(a.length.toString().length),A=`and ${u} more.`,p=a.length;for(;o.length>1&&nh).join(""),A.replace(u,Ot(t,p,yt.NUMBER))].join("")}function zI(t,{configuration:e}){let r=e.get("logFilters"),o=new Map,a=new Map,n=[];for(let I of r){let v=I.get("level");if(typeof v>"u")continue;let b=I.get("code");typeof b<"u"&&o.set(b,v);let C=I.get("text");typeof C<"u"&&a.set(C,v);let T=I.get("pattern");typeof T<"u"&&n.push([vne.default.matcher(T,{contains:!0}),v])}n.reverse();let u=(I,v,b)=>{if(I===null||I===0)return b;let C=a.size>0||n.length>0?(0,zy.default)(v):v;if(a.size>0){let T=a.get(C);if(typeof T<"u")return T??b}if(n.length>0){for(let[T,L]of n)if(T(C))return L??b}if(o.size>0){let T=o.get(Wu(I));if(typeof T<"u")return T??b}return b},A=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(I,v,b,C){switch(u(v,b,C)){case"info":A.call(I,v,b);break;case"warning":p.call(I,v??0,b);break;case"error":h.call(I,v??0,b);break}};t.reportInfo=function(...I){return E(this,...I,"info")},t.reportWarning=function(...I){return E(this,...I,"warning")},t.reportError=function(...I){return E(this,...I,"error")}}var JI,KI,vne,zy,Dne,yt,aS,SL,lS,xL,PL,OZe,So,oS,UZe,uS,ql=Et(()=>{Pt();JI=$e(vN()),KI=$e(ed());qt();vne=$e(Zo()),zy=$e(MP()),Dne=Be("util");pP();xo();yt={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},aS=(e=>(e[e.BOLD=2]="BOLD",e))(aS||{}),SL=KI.default.GITHUB_ACTIONS?{level:2}:JI.default.supportsColor?{level:JI.default.supportsColor.level}:{level:0},lS=SL.level!==0,xL=lS&&!KI.default.GITHUB_ACTIONS&&!KI.default.CIRCLE&&!KI.default.GITLAB,PL=new JI.default.Instance(SL),OZe=new Map([[yt.NO_HINT,null],[yt.NULL,["#a853b5",129]],[yt.SCOPE,["#d75f00",166]],[yt.NAME,["#d7875f",173]],[yt.RANGE,["#00afaf",37]],[yt.REFERENCE,["#87afff",111]],[yt.NUMBER,["#ffd700",220]],[yt.PATH,["#d75fd7",170]],[yt.URL,["#d75fd7",170]],[yt.ADDED,["#5faf00",70]],[yt.REMOVED,["#ff3131",160]],[yt.CODE,["#87afff",111]],[yt.SIZE,["#ffd700",220]]]),So=t=>t;oS={[yt.ID]:So({pretty:(t,e)=>typeof e=="number"?Ks(t,`${e}`,yt.NUMBER):Ks(t,e,yt.CODE),json:t=>t}),[yt.INSPECT]:So({pretty:(t,e)=>(0,Dne.inspect)(e,{depth:1/0,colors:t.get("enableColors"),compact:!0,breakLength:1/0}),json:t=>t}),[yt.NUMBER]:So({pretty:(t,e)=>Ks(t,`${e}`,yt.NUMBER),json:t=>t}),[yt.IDENT]:So({pretty:(t,e)=>cs(t,e),json:t=>fn(t)}),[yt.LOCATOR]:So({pretty:(t,e)=>jr(t,e),json:t=>xa(t)}),[yt.DESCRIPTOR]:So({pretty:(t,e)=>qn(t,e),json:t=>Sa(t)}),[yt.RESOLUTION]:So({pretty:(t,{descriptor:e,locator:r})=>XI(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:Sa(t),locator:e!==null?xa(e):null})}),[yt.DEPENDENT]:So({pretty:(t,{locator:e,descriptor:r})=>FL(t,e,r),json:({locator:t,descriptor:e})=>({locator:xa(t),descriptor:Sa(e)})}),[yt.PACKAGE_EXTENSION]:So({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"dependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"peerDependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependencyMeta":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"peerDependenciesMeta",yt.CODE)} \u27A4 ${cs(t,Js(e.selector))} \u27A4 ${Ks(t,e.key,yt.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${fn(t.parentDescriptor)} > ${fn(t.descriptor)}`;case"PeerDependency":return`${fn(t.parentDescriptor)} >> ${fn(t.descriptor)}`;case"PeerDependencyMeta":return`${fn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[yt.SETTING]:So({pretty:(t,e)=>(t.get(e),Xy(t,Ks(t,e,yt.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[yt.DURATION]:So({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),o=Math.ceil((e-r*60*1e3)/1e3);return o===0?`${r}m`:`${r}m ${o}s`}else{let r=Math.floor(e/1e3),o=e-r*1e3;return o===0?`${r}s`:`${r}s ${o}ms`}},json:t=>t}),[yt.SIZE]:So({pretty:(t,e)=>Ks(t,Bne(e),yt.NUMBER),json:t=>t}),[yt.SIZE_DIFF]:So({pretty:(t,e)=>{let r=e>=0?"+":"-",o=r==="+"?yt.REMOVED:yt.ADDED;return Ks(t,`${r} ${Bne(Math.max(Math.abs(e),1))}`,o)},json:t=>t}),[yt.PATH]:So({pretty:(t,e)=>Ks(t,ue.fromPortablePath(e),yt.PATH),json:t=>ue.fromPortablePath(t)}),[yt.MARKDOWN]:So({pretty:(t,{text:e,format:r,paragraphs:o})=>Do(e,{format:r,paragraphs:o}),json:({text:t})=>t}),[yt.MARKDOWN_INLINE]:So({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,o,a)=>Ot(t,o+a+o,yt.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,o,a)=>md(t,a,2)),e),json:t=>t})};UZe=!!process.env.KONSOLE_VERSION;uS=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(uS||{})});var Pne=_(Zy=>{"use strict";Object.defineProperty(Zy,"__esModule",{value:!0});Zy.splitWhen=Zy.flatten=void 0;function HZe(t){return t.reduce((e,r)=>[].concat(e,r),[])}Zy.flatten=HZe;function jZe(t,e){let r=[[]],o=0;for(let a of t)e(a)?(o++,r[o]=[]):r[o].push(a);return r}Zy.splitWhen=jZe});var Sne=_(AS=>{"use strict";Object.defineProperty(AS,"__esModule",{value:!0});AS.isEnoentCodeError=void 0;function qZe(t){return t.code==="ENOENT"}AS.isEnoentCodeError=qZe});var xne=_(fS=>{"use strict";Object.defineProperty(fS,"__esModule",{value:!0});fS.createDirentFromStats=void 0;var TL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function GZe(t,e){return new TL(t,e)}fS.createDirentFromStats=GZe});var bne=_(Xu=>{"use strict";Object.defineProperty(Xu,"__esModule",{value:!0});Xu.removeLeadingDotSegment=Xu.escape=Xu.makeAbsolute=Xu.unixify=void 0;var YZe=Be("path"),WZe=2,VZe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function KZe(t){return t.replace(/\\/g,"/")}Xu.unixify=KZe;function JZe(t,e){return YZe.resolve(t,e)}Xu.makeAbsolute=JZe;function zZe(t){return t.replace(VZe,"\\$2")}Xu.escape=zZe;function XZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(WZe)}return t}Xu.removeLeadingDotSegment=XZe});var Qne=_((xRt,kne)=>{kne.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var Rne=_((bRt,Tne)=>{var ZZe=Qne(),Fne={"{":"}","(":")","[":"]"},$Ze=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,o=-2,a=-2,n=-2,u=-2;ee&&(u===-1||u>o||(u=t.indexOf("\\",e),u===-1||u>o)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(u=t.indexOf("\\",e),u===-1||u>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(u=t.indexOf("\\",e),u===-1||u>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(u=t.indexOf("\\",r),u===-1||u>n))))return!0;if(t[e]==="\\"){var A=t[e+1];e+=2;var p=Fne[A];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},e$e=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var t$e=Rne(),r$e=Be("path").posix.dirname,n$e=Be("os").platform()==="win32",RL="/",i$e=/\\/g,s$e=/[\{\[].*[\}\]]$/,o$e=/(^|[^\\])([\{\[]|\([^\)]+$)/,a$e=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Nne.exports=function(e,r){var o=Object.assign({flipBackslashes:!0},r);o.flipBackslashes&&n$e&&e.indexOf(RL)<0&&(e=e.replace(i$e,RL)),s$e.test(e)&&(e+=RL),e+="a";do e=r$e(e);while(t$e(e)||o$e.test(e));return e.replace(a$e,"$1")}});var Gne=_(qr=>{"use strict";Object.defineProperty(qr,"__esModule",{value:!0});qr.matchAny=qr.convertPatternsToRe=qr.makeRe=qr.getPatternParts=qr.expandBraceExpansion=qr.expandPatternsWithBraceExpansion=qr.isAffectDepthOfReadingPattern=qr.endsWithSlashGlobStar=qr.hasGlobStar=qr.getBaseDirectory=qr.isPatternRelatedToParentDirectory=qr.getPatternsOutsideCurrentDirectory=qr.getPatternsInsideCurrentDirectory=qr.getPositivePatterns=qr.getNegativePatterns=qr.isPositivePattern=qr.isNegativePattern=qr.convertToNegativePattern=qr.convertToPositivePattern=qr.isDynamicPattern=qr.isStaticPattern=void 0;var l$e=Be("path"),c$e=Lne(),NL=Zo(),Mne="**",u$e="\\",A$e=/[*?]|^!/,f$e=/\[[^[]*]/,p$e=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,h$e=/[!*+?@]\([^(]*\)/,g$e=/,|\.\./;function One(t,e={}){return!Une(t,e)}qr.isStaticPattern=One;function Une(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(u$e)||A$e.test(t)||f$e.test(t)||p$e.test(t)||e.extglob!==!1&&h$e.test(t)||e.braceExpansion!==!1&&d$e(t))}qr.isDynamicPattern=Une;function d$e(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let o=t.slice(e,r);return g$e.test(o)}function m$e(t){return pS(t)?t.slice(1):t}qr.convertToPositivePattern=m$e;function y$e(t){return"!"+t}qr.convertToNegativePattern=y$e;function pS(t){return t.startsWith("!")&&t[1]!=="("}qr.isNegativePattern=pS;function _ne(t){return!pS(t)}qr.isPositivePattern=_ne;function E$e(t){return t.filter(pS)}qr.getNegativePatterns=E$e;function C$e(t){return t.filter(_ne)}qr.getPositivePatterns=C$e;function w$e(t){return t.filter(e=>!LL(e))}qr.getPatternsInsideCurrentDirectory=w$e;function I$e(t){return t.filter(LL)}qr.getPatternsOutsideCurrentDirectory=I$e;function LL(t){return t.startsWith("..")||t.startsWith("./..")}qr.isPatternRelatedToParentDirectory=LL;function B$e(t){return c$e(t,{flipBackslashes:!1})}qr.getBaseDirectory=B$e;function v$e(t){return t.includes(Mne)}qr.hasGlobStar=v$e;function Hne(t){return t.endsWith("/"+Mne)}qr.endsWithSlashGlobStar=Hne;function D$e(t){let e=l$e.basename(t);return Hne(t)||One(e)}qr.isAffectDepthOfReadingPattern=D$e;function P$e(t){return t.reduce((e,r)=>e.concat(jne(r)),[])}qr.expandPatternsWithBraceExpansion=P$e;function jne(t){return NL.braces(t,{expand:!0,nodupes:!0})}qr.expandBraceExpansion=jne;function S$e(t,e){let{parts:r}=NL.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}qr.getPatternParts=S$e;function qne(t,e){return NL.makeRe(t,e)}qr.makeRe=qne;function x$e(t,e){return t.map(r=>qne(r,e))}qr.convertPatternsToRe=x$e;function b$e(t,e){return e.some(r=>r.test(t))}qr.matchAny=b$e});var Kne=_((FRt,Vne)=>{"use strict";var k$e=Be("stream"),Yne=k$e.PassThrough,Q$e=Array.prototype.slice;Vne.exports=F$e;function F$e(){let t=[],e=Q$e.call(arguments),r=!1,o=e[e.length-1];o&&!Array.isArray(o)&&o.pipe==null?e.pop():o={};let a=o.end!==!1,n=o.pipeError===!0;o.objectMode==null&&(o.objectMode=!0),o.highWaterMark==null&&(o.highWaterMark=64*1024);let u=Yne(o);function A(){for(let E=0,I=arguments.length;E0||(r=!1,p())}function b(C){function T(){C.removeListener("merge2UnpipeEnd",T),C.removeListener("end",T),n&&C.removeListener("error",L),v()}function L(U){u.emit("error",U)}if(C._readableState.endEmitted)return v();C.on("merge2UnpipeEnd",T),C.on("end",T),n&&C.on("error",L),C.pipe(u,{end:!1}),C.resume()}for(let C=0;C{"use strict";Object.defineProperty(hS,"__esModule",{value:!0});hS.merge=void 0;var T$e=Kne();function R$e(t){let e=T$e(t);return t.forEach(r=>{r.once("error",o=>e.emit("error",o))}),e.once("close",()=>Jne(t)),e.once("end",()=>Jne(t)),e}hS.merge=R$e;function Jne(t){t.forEach(e=>e.emit("close"))}});var Xne=_($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.isEmpty=$y.isString=void 0;function N$e(t){return typeof t=="string"}$y.isString=N$e;function L$e(t){return t===""}$y.isEmpty=L$e});var Df=_(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.string=bo.stream=bo.pattern=bo.path=bo.fs=bo.errno=bo.array=void 0;var M$e=Pne();bo.array=M$e;var O$e=Sne();bo.errno=O$e;var U$e=xne();bo.fs=U$e;var _$e=bne();bo.path=_$e;var H$e=Gne();bo.pattern=H$e;var j$e=zne();bo.stream=j$e;var q$e=Xne();bo.string=q$e});var eie=_(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.convertPatternGroupToTask=ko.convertPatternGroupsToTasks=ko.groupPatternsByBaseDirectory=ko.getNegativePatternsAsPositive=ko.getPositivePatterns=ko.convertPatternsToTasks=ko.generate=void 0;var Pf=Df();function G$e(t,e){let r=Zne(t),o=$ne(t,e.ignore),a=r.filter(p=>Pf.pattern.isStaticPattern(p,e)),n=r.filter(p=>Pf.pattern.isDynamicPattern(p,e)),u=ML(a,o,!1),A=ML(n,o,!0);return u.concat(A)}ko.generate=G$e;function ML(t,e,r){let o=[],a=Pf.pattern.getPatternsOutsideCurrentDirectory(t),n=Pf.pattern.getPatternsInsideCurrentDirectory(t),u=OL(a),A=OL(n);return o.push(...UL(u,e,r)),"."in A?o.push(_L(".",n,e,r)):o.push(...UL(A,e,r)),o}ko.convertPatternsToTasks=ML;function Zne(t){return Pf.pattern.getPositivePatterns(t)}ko.getPositivePatterns=Zne;function $ne(t,e){return Pf.pattern.getNegativePatterns(t).concat(e).map(Pf.pattern.convertToPositivePattern)}ko.getNegativePatternsAsPositive=$ne;function OL(t){let e={};return t.reduce((r,o)=>{let a=Pf.pattern.getBaseDirectory(o);return a in r?r[a].push(o):r[a]=[o],r},e)}ko.groupPatternsByBaseDirectory=OL;function UL(t,e,r){return Object.keys(t).map(o=>_L(o,t[o],e,r))}ko.convertPatternGroupsToTasks=UL;function _L(t,e,r,o){return{dynamic:o,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Pf.pattern.convertToNegativePattern))}}ko.convertPatternGroupToTask=_L});var rie=_(eE=>{"use strict";Object.defineProperty(eE,"__esModule",{value:!0});eE.removeDuplicateSlashes=eE.transform=void 0;var Y$e=/(?!^)\/{2,}/g;function W$e(t){return t.map(e=>tie(e))}eE.transform=W$e;function tie(t){return t.replace(Y$e,"/")}eE.removeDuplicateSlashes=tie});var iie=_(gS=>{"use strict";Object.defineProperty(gS,"__esModule",{value:!0});gS.read=void 0;function V$e(t,e,r){e.fs.lstat(t,(o,a)=>{if(o!==null){nie(r,o);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){HL(r,a);return}e.fs.stat(t,(n,u)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){nie(r,n);return}HL(r,a);return}e.markSymbolicLink&&(u.isSymbolicLink=()=>!0),HL(r,u)})})}gS.read=V$e;function nie(t,e){t(e)}function HL(t,e){t(null,e)}});var sie=_(dS=>{"use strict";Object.defineProperty(dS,"__esModule",{value:!0});dS.read=void 0;function K$e(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let o=e.fs.statSync(t);return e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),o}catch(o){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw o}}dS.read=K$e});var oie=_(zp=>{"use strict";Object.defineProperty(zp,"__esModule",{value:!0});zp.createFileSystemAdapter=zp.FILE_SYSTEM_ADAPTER=void 0;var mS=Be("fs");zp.FILE_SYSTEM_ADAPTER={lstat:mS.lstat,stat:mS.stat,lstatSync:mS.lstatSync,statSync:mS.statSync};function J$e(t){return t===void 0?zp.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},zp.FILE_SYSTEM_ADAPTER),t)}zp.createFileSystemAdapter=J$e});var aie=_(qL=>{"use strict";Object.defineProperty(qL,"__esModule",{value:!0});var z$e=oie(),jL=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=z$e.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};qL.default=jL});var Ed=_(Xp=>{"use strict";Object.defineProperty(Xp,"__esModule",{value:!0});Xp.statSync=Xp.stat=Xp.Settings=void 0;var lie=iie(),X$e=sie(),YL=aie();Xp.Settings=YL.default;function Z$e(t,e,r){if(typeof e=="function"){lie.read(t,WL(),e);return}lie.read(t,WL(e),r)}Xp.stat=Z$e;function $$e(t,e){let r=WL(e);return X$e.read(t,r)}Xp.statSync=$$e;function WL(t={}){return t instanceof YL.default?t:new YL.default(t)}});var uie=_((qRt,cie)=>{cie.exports=eet;function eet(t,e){var r,o,a,n=!0;Array.isArray(t)?(r=[],o=t.length):(a=Object.keys(t),r={},o=a.length);function u(p){function h(){e&&e(p,r),e=null}n?process.nextTick(h):h()}function A(p,h,E){r[p]=E,(--o===0||h)&&u(h)}o?a?a.forEach(function(p){t[p](function(h,E){A(p,h,E)})}):t.forEach(function(p,h){p(function(E,I){A(h,E,I)})}):u(null),n=!1}});var VL=_(ES=>{"use strict";Object.defineProperty(ES,"__esModule",{value:!0});ES.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var yS=process.versions.node.split(".");if(yS[0]===void 0||yS[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var Aie=Number.parseInt(yS[0],10),tet=Number.parseInt(yS[1],10),fie=10,ret=10,net=Aie>fie,iet=Aie===fie&&tet>=ret;ES.IS_SUPPORT_READDIR_WITH_FILE_TYPES=net||iet});var pie=_(CS=>{"use strict";Object.defineProperty(CS,"__esModule",{value:!0});CS.createDirentFromStats=void 0;var KL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function set(t,e){return new KL(t,e)}CS.createDirentFromStats=set});var JL=_(wS=>{"use strict";Object.defineProperty(wS,"__esModule",{value:!0});wS.fs=void 0;var oet=pie();wS.fs=oet});var zL=_(IS=>{"use strict";Object.defineProperty(IS,"__esModule",{value:!0});IS.joinPathSegments=void 0;function aet(t,e,r){return t.endsWith(r)?t+e:t+r+e}IS.joinPathSegments=aet});var Eie=_(Zp=>{"use strict";Object.defineProperty(Zp,"__esModule",{value:!0});Zp.readdir=Zp.readdirWithFileTypes=Zp.read=void 0;var cet=Ed(),hie=uie(),uet=VL(),gie=JL(),die=zL();function Aet(t,e,r){if(!e.stats&&uet.IS_SUPPORT_READDIR_WITH_FILE_TYPES){mie(t,e,r);return}yie(t,e,r)}Zp.read=Aet;function mie(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(o,a)=>{if(o!==null){BS(r,o);return}let n=a.map(A=>({dirent:A,name:A.name,path:die.joinPathSegments(t,A.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){XL(r,n);return}let u=n.map(A=>fet(A,e));hie(u,(A,p)=>{if(A!==null){BS(r,A);return}XL(r,p)})})}Zp.readdirWithFileTypes=mie;function fet(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(o,a)=>{if(o!==null){if(e.throwErrorOnBrokenSymbolicLink){r(o);return}r(null,t);return}t.dirent=gie.fs.createDirentFromStats(t.name,a),r(null,t)})}}function yie(t,e,r){e.fs.readdir(t,(o,a)=>{if(o!==null){BS(r,o);return}let n=a.map(u=>{let A=die.joinPathSegments(t,u,e.pathSegmentSeparator);return p=>{cet.stat(A,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let I={name:u,path:A,dirent:gie.fs.createDirentFromStats(u,E)};e.stats&&(I.stats=E),p(null,I)})}});hie(n,(u,A)=>{if(u!==null){BS(r,u);return}XL(r,A)})})}Zp.readdir=yie;function BS(t,e){t(e)}function XL(t,e){t(null,e)}});var vie=_($p=>{"use strict";Object.defineProperty($p,"__esModule",{value:!0});$p.readdir=$p.readdirWithFileTypes=$p.read=void 0;var pet=Ed(),het=VL(),Cie=JL(),wie=zL();function get(t,e){return!e.stats&&het.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Iie(t,e):Bie(t,e)}$p.read=get;function Iie(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(o=>{let a={dirent:o,name:o.name,path:wie.joinPathSegments(t,o.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=Cie.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}$p.readdirWithFileTypes=Iie;function Bie(t,e){return e.fs.readdirSync(t).map(o=>{let a=wie.joinPathSegments(t,o,e.pathSegmentSeparator),n=pet.statSync(a,e.fsStatSettings),u={name:o,path:a,dirent:Cie.fs.createDirentFromStats(o,n)};return e.stats&&(u.stats=n),u})}$p.readdir=Bie});var Die=_(eh=>{"use strict";Object.defineProperty(eh,"__esModule",{value:!0});eh.createFileSystemAdapter=eh.FILE_SYSTEM_ADAPTER=void 0;var tE=Be("fs");eh.FILE_SYSTEM_ADAPTER={lstat:tE.lstat,stat:tE.stat,lstatSync:tE.lstatSync,statSync:tE.statSync,readdir:tE.readdir,readdirSync:tE.readdirSync};function det(t){return t===void 0?eh.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},eh.FILE_SYSTEM_ADAPTER),t)}eh.createFileSystemAdapter=det});var Pie=_($L=>{"use strict";Object.defineProperty($L,"__esModule",{value:!0});var met=Be("path"),yet=Ed(),Eet=Die(),ZL=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Eet.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,met.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new yet.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};$L.default=ZL});var vS=_(th=>{"use strict";Object.defineProperty(th,"__esModule",{value:!0});th.Settings=th.scandirSync=th.scandir=void 0;var Sie=Eie(),Cet=vie(),eM=Pie();th.Settings=eM.default;function wet(t,e,r){if(typeof e=="function"){Sie.read(t,tM(),e);return}Sie.read(t,tM(e),r)}th.scandir=wet;function Iet(t,e){let r=tM(e);return Cet.read(t,r)}th.scandirSync=Iet;function tM(t={}){return t instanceof eM.default?t:new eM.default(t)}});var bie=_(($Rt,xie)=>{"use strict";function Bet(t){var e=new t,r=e;function o(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:o,release:a}}xie.exports=Bet});var Qie=_((eNt,rM)=>{"use strict";var vet=bie();function kie(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var o=vet(Det),a=null,n=null,u=0,A=null,p={push:T,drain:Gl,saturated:Gl,pause:E,paused:!1,concurrency:r,running:h,resume:b,idle:C,length:I,getQueue:v,unshift:L,empty:Gl,kill:J,killAndDrain:te,error:le};return p;function h(){return u}function E(){p.paused=!0}function I(){for(var pe=a,Ae=0;pe;)pe=pe.next,Ae++;return Ae}function v(){for(var pe=a,Ae=[];pe;)Ae.push(pe.value),pe=pe.next;return Ae}function b(){if(!!p.paused){p.paused=!1;for(var pe=0;pe{"use strict";Object.defineProperty(Zu,"__esModule",{value:!0});Zu.joinPathSegments=Zu.replacePathSegmentSeparator=Zu.isAppliedFilter=Zu.isFatalError=void 0;function xet(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zu.isFatalError=xet;function bet(t,e){return t===null||t(e)}Zu.isAppliedFilter=bet;function ket(t,e){return t.split(/[/\\]/).join(e)}Zu.replacePathSegmentSeparator=ket;function Qet(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zu.joinPathSegments=Qet});var sM=_(iM=>{"use strict";Object.defineProperty(iM,"__esModule",{value:!0});var Fet=DS(),nM=class{constructor(e,r){this._root=e,this._settings=r,this._root=Fet.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};iM.default=nM});var lM=_(aM=>{"use strict";Object.defineProperty(aM,"__esModule",{value:!0});var Tet=Be("events"),Ret=vS(),Net=Qie(),PS=DS(),Let=sM(),oM=class extends Let.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=Ret.scandir,this._emitter=new Tet.EventEmitter,this._queue=Net(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let o={directory:e,base:r};this._queue.push(o,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(o,a)=>{if(o!==null){r(o,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!PS.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let o=e.path;r!==void 0&&(e.path=PS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),PS.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&PS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};aM.default=oM});var Fie=_(uM=>{"use strict";Object.defineProperty(uM,"__esModule",{value:!0});var Met=lM(),cM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Met.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{Oet(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{Uet(e,this._storage)}),this._reader.read()}};uM.default=cM;function Oet(t,e){t(e)}function Uet(t,e){t(null,e)}});var Tie=_(fM=>{"use strict";Object.defineProperty(fM,"__esModule",{value:!0});var _et=Be("stream"),Het=lM(),AM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Het.default(this._root,this._settings),this._stream=new _et.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};fM.default=AM});var Rie=_(hM=>{"use strict";Object.defineProperty(hM,"__esModule",{value:!0});var jet=vS(),SS=DS(),qet=sM(),pM=class extends qet.default{constructor(){super(...arguments),this._scandir=jet.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let o=this._scandir(e,this._settings.fsScandirSettings);for(let a of o)this._handleEntry(a,r)}catch(o){this._handleError(o)}}_handleError(e){if(!!SS.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let o=e.path;r!==void 0&&(e.path=SS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),SS.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&SS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};hM.default=pM});var Nie=_(dM=>{"use strict";Object.defineProperty(dM,"__esModule",{value:!0});var Get=Rie(),gM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Get.default(this._root,this._settings)}read(){return this._reader.read()}};dM.default=gM});var Lie=_(yM=>{"use strict";Object.defineProperty(yM,"__esModule",{value:!0});var Yet=Be("path"),Wet=vS(),mM=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Yet.sep),this.fsScandirSettings=new Wet.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};yM.default=mM});var bS=_($u=>{"use strict";Object.defineProperty($u,"__esModule",{value:!0});$u.Settings=$u.walkStream=$u.walkSync=$u.walk=void 0;var Mie=Fie(),Vet=Tie(),Ket=Nie(),EM=Lie();$u.Settings=EM.default;function Jet(t,e,r){if(typeof e=="function"){new Mie.default(t,xS()).read(e);return}new Mie.default(t,xS(e)).read(r)}$u.walk=Jet;function zet(t,e){let r=xS(e);return new Ket.default(t,r).read()}$u.walkSync=zet;function Xet(t,e){let r=xS(e);return new Vet.default(t,r).read()}$u.walkStream=Xet;function xS(t={}){return t instanceof EM.default?t:new EM.default(t)}});var kS=_(wM=>{"use strict";Object.defineProperty(wM,"__esModule",{value:!0});var Zet=Be("path"),$et=Ed(),Oie=Df(),CM=class{constructor(e){this._settings=e,this._fsStatSettings=new $et.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return Zet.resolve(this._settings.cwd,e)}_makeEntry(e,r){let o={name:r,path:r,dirent:Oie.fs.createDirentFromStats(r,e)};return this._settings.stats&&(o.stats=e),o}_isFatalError(e){return!Oie.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};wM.default=CM});var vM=_(BM=>{"use strict";Object.defineProperty(BM,"__esModule",{value:!0});var ett=Be("stream"),ttt=Ed(),rtt=bS(),ntt=kS(),IM=class extends ntt.default{constructor(){super(...arguments),this._walkStream=rtt.walkStream,this._stat=ttt.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let o=e.map(this._getFullEntryPath,this),a=new ett.PassThrough({objectMode:!0});a._write=(n,u,A)=>this._getEntry(o[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===o.length-1&&a.end(),A()}).catch(A);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(o.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,o)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):o(a))})}};BM.default=IM});var Uie=_(PM=>{"use strict";Object.defineProperty(PM,"__esModule",{value:!0});var itt=bS(),stt=kS(),ott=vM(),DM=class extends stt.default{constructor(){super(...arguments),this._walkAsync=itt.walk,this._readerStream=new ott.default(this._settings)}dynamic(e,r){return new Promise((o,a)=>{this._walkAsync(e,r,(n,u)=>{n===null?o(u):a(n)})})}async static(e,r){let o=[],a=this._readerStream.static(e,r);return new Promise((n,u)=>{a.once("error",u),a.on("data",A=>o.push(A)),a.once("end",()=>n(o))})}};PM.default=DM});var _ie=_(xM=>{"use strict";Object.defineProperty(xM,"__esModule",{value:!0});var rE=Df(),SM=class{constructor(e,r,o){this._patterns=e,this._settings=r,this._micromatchOptions=o,this._storage=[],this._fillStorage()}_fillStorage(){let e=rE.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let o=this._getPatternSegments(r),a=this._splitSegmentsIntoSections(o);this._storage.push({complete:a.length<=1,pattern:r,segments:o,sections:a})}}_getPatternSegments(e){return rE.pattern.getPatternParts(e,this._micromatchOptions).map(o=>rE.pattern.isDynamicPattern(o,this._settings)?{dynamic:!0,pattern:o,patternRe:rE.pattern.makeRe(o,this._micromatchOptions)}:{dynamic:!1,pattern:o})}_splitSegmentsIntoSections(e){return rE.array.splitWhen(e,r=>r.dynamic&&rE.pattern.hasGlobStar(r.pattern))}};xM.default=SM});var Hie=_(kM=>{"use strict";Object.defineProperty(kM,"__esModule",{value:!0});var att=_ie(),bM=class extends att.default{match(e){let r=e.split("/"),o=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>o);for(let n of a){let u=n.sections[0];if(!n.complete&&o>u.length||r.every((p,h)=>{let E=n.segments[h];return!!(E.dynamic&&E.patternRe.test(p)||!E.dynamic&&E.pattern===p)}))return!0}return!1}};kM.default=bM});var jie=_(FM=>{"use strict";Object.defineProperty(FM,"__esModule",{value:!0});var QS=Df(),ltt=Hie(),QM=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,o){let a=this._getMatcher(r),n=this._getNegativePatternsRe(o);return u=>this._filter(e,u,a,n)}_getMatcher(e){return new ltt.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(QS.pattern.isAffectDepthOfReadingPattern);return QS.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,o,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=QS.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,o)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let o=r.split("/").length;if(e==="")return o;let a=e.split("/").length;return o-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!QS.pattern.matchAny(e,r)}};FM.default=QM});var qie=_(RM=>{"use strict";Object.defineProperty(RM,"__esModule",{value:!0});var Cd=Df(),TM=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let o=Cd.pattern.convertPatternsToRe(e,this._micromatchOptions),a=Cd.pattern.convertPatternsToRe(r,this._micromatchOptions);return n=>this._filter(n,o,a)}_filter(e,r,o){if(this._settings.unique&&this._isDuplicateEntry(e)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e.path,o))return!1;let a=this._settings.baseNameMatch?e.name:e.path,n=e.dirent.isDirectory(),u=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(e.path,o,n);return this._settings.unique&&u&&this._createIndexRecord(e),u}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let o=Cd.path.makeAbsolute(this._settings.cwd,e);return Cd.pattern.matchAny(o,r)}_isMatchToPatterns(e,r,o){let a=Cd.path.removeLeadingDotSegment(e),n=Cd.pattern.matchAny(a,r);return!n&&o?Cd.pattern.matchAny(a+"/",r):n}};RM.default=TM});var Gie=_(LM=>{"use strict";Object.defineProperty(LM,"__esModule",{value:!0});var ctt=Df(),NM=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return ctt.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};LM.default=NM});var Wie=_(OM=>{"use strict";Object.defineProperty(OM,"__esModule",{value:!0});var Yie=Df(),MM=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Yie.path.makeAbsolute(this._settings.cwd,r),r=Yie.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};OM.default=MM});var TS=_(_M=>{"use strict";Object.defineProperty(_M,"__esModule",{value:!0});var utt=Be("path"),Att=jie(),ftt=qie(),ptt=Gie(),htt=Wie(),UM=class{constructor(e){this._settings=e,this.errorFilter=new ptt.default(this._settings),this.entryFilter=new ftt.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new Att.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new htt.default(this._settings)}_getRootDirectory(e){return utt.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};_M.default=UM});var Vie=_(jM=>{"use strict";Object.defineProperty(jM,"__esModule",{value:!0});var gtt=Uie(),dtt=TS(),HM=class extends dtt.default{constructor(){super(...arguments),this._reader=new gtt.default(this._settings)}async read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return(await this.api(r,e,o)).map(n=>o.transform(n))}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};jM.default=HM});var Kie=_(GM=>{"use strict";Object.defineProperty(GM,"__esModule",{value:!0});var mtt=Be("stream"),ytt=vM(),Ett=TS(),qM=class extends Ett.default{constructor(){super(...arguments),this._reader=new ytt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e),a=this.api(r,e,o),n=new mtt.Readable({objectMode:!0,read:()=>{}});return a.once("error",u=>n.emit("error",u)).on("data",u=>n.emit("data",o.transform(u))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};GM.default=qM});var Jie=_(WM=>{"use strict";Object.defineProperty(WM,"__esModule",{value:!0});var Ctt=Ed(),wtt=bS(),Itt=kS(),YM=class extends Itt.default{constructor(){super(...arguments),this._walkSync=wtt.walkSync,this._statSync=Ctt.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let o=[];for(let a of e){let n=this._getFullEntryPath(a),u=this._getEntry(n,a,r);u===null||!r.entryFilter(u)||o.push(u)}return o}_getEntry(e,r,o){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(o.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};WM.default=YM});var zie=_(KM=>{"use strict";Object.defineProperty(KM,"__esModule",{value:!0});var Btt=Jie(),vtt=TS(),VM=class extends vtt.default{constructor(){super(...arguments),this._reader=new Btt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return this.api(r,e,o).map(o.transform)}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};KM.default=VM});var Xie=_(iE=>{"use strict";Object.defineProperty(iE,"__esModule",{value:!0});iE.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var nE=Be("fs"),Dtt=Be("os"),Ptt=Math.max(Dtt.cpus().length,1);iE.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:nE.lstat,lstatSync:nE.lstatSync,stat:nE.stat,statSync:nE.statSync,readdir:nE.readdir,readdirSync:nE.readdirSync};var JM=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,Ptt),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},iE.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};iE.default=JM});var RS=_((DNt,ese)=>{"use strict";var Zie=eie(),$ie=rie(),Stt=Vie(),xtt=Kie(),btt=zie(),zM=Xie(),wd=Df();async function XM(t,e){sE(t);let r=ZM(t,Stt.default,e),o=await Promise.all(r);return wd.array.flatten(o)}(function(t){function e(u,A){sE(u);let p=ZM(u,btt.default,A);return wd.array.flatten(p)}t.sync=e;function r(u,A){sE(u);let p=ZM(u,xtt.default,A);return wd.stream.merge(p)}t.stream=r;function o(u,A){sE(u);let p=$ie.transform([].concat(u)),h=new zM.default(A);return Zie.generate(p,h)}t.generateTasks=o;function a(u,A){sE(u);let p=new zM.default(A);return wd.pattern.isDynamicPattern(u,p)}t.isDynamicPattern=a;function n(u){return sE(u),wd.path.escape(u)}t.escapePath=n})(XM||(XM={}));function ZM(t,e,r){let o=$ie.transform([].concat(t)),a=new zM.default(r),n=Zie.generate(o,a),u=new e(a);return n.map(u.read,u)}function sE(t){if(![].concat(t).every(o=>wd.string.isString(o)&&!wd.string.isEmpty(o)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}ese.exports=XM});var wn={};Kt(wn,{checksumFile:()=>LS,checksumPattern:()=>MS,makeHash:()=>zs});function zs(...t){let e=(0,NS.createHash)("sha512"),r="";for(let o of t)typeof o=="string"?r+=o:o&&(r&&(e.update(r),r=""),e.update(o));return r&&e.update(r),e.digest("hex")}async function LS(t,{baseFs:e,algorithm:r}={baseFs:oe,algorithm:"sha512"}){let o=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,NS.createHash)(r),A=0;for(;(A=await e.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await e.closePromise(o)}}async function MS(t,{cwd:e}){let o=(await(0,$M.default)(t,{cwd:ue.fromPortablePath(e),onlyDirectories:!0})).map(A=>`${A}/**/*`),a=await(0,$M.default)([t,...o],{cwd:ue.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async A=>{let p=[Buffer.from(A)],h=ue.toPortablePath(A),E=await oe.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await oe.readlinkPromise(h))):E.isFile()&&p.push(await oe.readFilePromise(h)),p.join("\0")})),u=(0,NS.createHash)("sha512");for(let A of n)u.update(A);return u.digest("hex")}var NS,$M,rh=Et(()=>{Pt();NS=Be("crypto"),$M=$e(RS())});var W={};Kt(W,{areDescriptorsEqual:()=>sse,areIdentsEqual:()=>r1,areLocatorsEqual:()=>n1,areVirtualPackagesEquivalent:()=>Ott,bindDescriptor:()=>Ltt,bindLocator:()=>Mtt,convertDescriptorToLocator:()=>OS,convertLocatorToDescriptor:()=>tO,convertPackageToLocator:()=>Ttt,convertToIdent:()=>Ftt,convertToManifestRange:()=>Ktt,copyPackage:()=>$I,devirtualizeDescriptor:()=>e1,devirtualizeLocator:()=>t1,ensureDevirtualizedDescriptor:()=>Rtt,ensureDevirtualizedLocator:()=>Ntt,getIdentVendorPath:()=>sO,isPackageCompatible:()=>qS,isVirtualDescriptor:()=>Sf,isVirtualLocator:()=>Hc,makeDescriptor:()=>In,makeIdent:()=>eA,makeLocator:()=>Qs,makeRange:()=>HS,parseDescriptor:()=>nh,parseFileStyleRange:()=>Wtt,parseIdent:()=>Js,parseLocator:()=>xf,parseRange:()=>Id,prettyDependent:()=>FL,prettyDescriptor:()=>qn,prettyIdent:()=>cs,prettyLocator:()=>jr,prettyLocatorNoColors:()=>QL,prettyRange:()=>lE,prettyReference:()=>s1,prettyResolution:()=>XI,prettyWorkspace:()=>o1,renamePackage:()=>rO,slugifyIdent:()=>eO,slugifyLocator:()=>aE,sortDescriptors:()=>cE,stringifyDescriptor:()=>Sa,stringifyIdent:()=>fn,stringifyLocator:()=>xa,tryParseDescriptor:()=>i1,tryParseIdent:()=>ose,tryParseLocator:()=>_S,tryParseRange:()=>Ytt,virtualizeDescriptor:()=>nO,virtualizePackage:()=>iO});function eA(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:zs(t,e),scope:t,name:e}}function In(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:zs(t.identHash,e),range:e}}function Qs(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:zs(t.identHash,e),reference:e}}function Ftt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function OS(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function tO(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function Ttt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function rO(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function $I(t){return rO(t,t)}function nO(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return In(t,`virtual:${e}#${t.range}`)}function iO(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return rO(t,Qs(t,`virtual:${e}#${t.reference}`))}function Sf(t){return t.range.startsWith(ZI)}function Hc(t){return t.reference.startsWith(ZI)}function e1(t){if(!Sf(t))throw new Error("Not a virtual descriptor");return In(t,t.range.replace(US,""))}function t1(t){if(!Hc(t))throw new Error("Not a virtual descriptor");return Qs(t,t.reference.replace(US,""))}function Rtt(t){return Sf(t)?In(t,t.range.replace(US,"")):t}function Ntt(t){return Hc(t)?Qs(t,t.reference.replace(US,"")):t}function Ltt(t,e){return t.range.includes("::")?t:In(t,`${t.range}::${oE.default.stringify(e)}`)}function Mtt(t,e){return t.reference.includes("::")?t:Qs(t,`${t.reference}::${oE.default.stringify(e)}`)}function r1(t,e){return t.identHash===e.identHash}function sse(t,e){return t.descriptorHash===e.descriptorHash}function n1(t,e){return t.locatorHash===e.locatorHash}function Ott(t,e){if(!Hc(t))throw new Error("Invalid package type");if(!Hc(e))throw new Error("Invalid package type");if(!r1(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let o=e.dependencies.get(r.identHash);if(!o||!sse(r,o))return!1}return!0}function Js(t){let e=ose(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function ose(t){let e=t.match(Utt);if(!e)return null;let[,r,o]=e;return eA(typeof r<"u"?r:null,o)}function nh(t,e=!1){let r=i1(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function i1(t,e=!1){let r=e?t.match(_tt):t.match(Htt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return In(eA(u,a),A)}function xf(t,e=!1){let r=_S(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function _S(t,e=!1){let r=e?t.match(jtt):t.match(qtt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return Qs(eA(u,a),A)}function Id(t,e){let r=t.match(Gtt);if(r===null)throw new Error(`Invalid range (${t})`);let o=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&o!==e.requireProtocol)throw new Error(`Invalid protocol (${o})`);if(e?.requireProtocol&&o===null)throw new Error(`Missing protocol (${o})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),u=e?.parseSelector?oE.default.parse(n):n,A=typeof r[4]<"u"?oE.default.parse(r[4]):null;return{protocol:o,source:a,selector:u,params:A}}function Ytt(t,e){try{return Id(t,e)}catch{return null}}function Wtt(t,{protocol:e}){let{selector:r,params:o}=Id(t,{requireProtocol:e,requireBindings:!0});if(typeof o.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:xf(o.locator,!0),path:r}}function tse(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function Vtt(t){return t===null?!1:Object.entries(t).length>0}function HS({protocol:t,source:e,selector:r,params:o}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${tse(e)}#`),a+=tse(r),Vtt(o)&&(a+=`::${oE.default.stringify(o)}`),a}function Ktt(t){let{params:e,protocol:r,source:o,selector:a}=Id(t);for(let n in e)n.startsWith("__")&&delete e[n];return HS({protocol:r,source:o,params:e,selector:a})}function fn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function Sa(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function xa(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function eO(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function aE(t){let{protocol:e,selector:r}=Id(t.reference),o=e!==null?e.replace(Jtt,""):"exotic",a=rse.default.valid(r),n=a!==null?`${o}-${a}`:`${o}`,u=10;return t.scope?`${eO(t)}-${n}-${t.locatorHash.slice(0,u)}`:`${eO(t)}-${n}-${t.locatorHash.slice(0,u)}`}function cs(t,e){return e.scope?`${Ot(t,`@${e.scope}/`,yt.SCOPE)}${Ot(t,e.name,yt.NAME)}`:`${Ot(t,e.name,yt.NAME)}`}function jS(t){if(t.startsWith(ZI)){let e=jS(t.substring(t.indexOf("#")+1)),r=t.substring(ZI.length,ZI.length+ktt);return`${e} [${r}]`}else return t.replace(ztt,"?[...]")}function lE(t,e){return`${Ot(t,jS(e),yt.RANGE)}`}function qn(t,e){return`${cs(t,e)}${Ot(t,"@",yt.RANGE)}${lE(t,e.range)}`}function s1(t,e){return`${Ot(t,jS(e),yt.REFERENCE)}`}function jr(t,e){return`${cs(t,e)}${Ot(t,"@",yt.REFERENCE)}${s1(t,e.reference)}`}function QL(t){return`${fn(t)}@${jS(t.reference)}`}function cE(t){return ks(t,[e=>fn(e),e=>e.range])}function o1(t,e){return cs(t,e.anchoredLocator)}function XI(t,e,r){let o=Sf(e)?e1(e):e;return r===null?`${qn(t,o)} \u2192 ${kL(t).Cross}`:o.identHash===r.identHash?`${qn(t,o)} \u2192 ${s1(t,r.reference)}`:`${qn(t,o)} \u2192 ${jr(t,r)}`}function FL(t,e,r){return r===null?`${jr(t,e)}`:`${jr(t,e)} (via ${lE(t,r.range)})`}function sO(t){return`node_modules/${fn(t)}`}function qS(t,e){return t.conditions?Qtt(t.conditions,r=>{let[,o,a]=r.match(ise),n=e[o];return n?n.includes(a):!0}):!0}var oE,rse,nse,ZI,ktt,ise,Qtt,US,Utt,_tt,Htt,jtt,qtt,Gtt,Jtt,ztt,xo=Et(()=>{oE=$e(Be("querystring")),rse=$e(zn()),nse=$e(rX());ql();rh();jl();xo();ZI="virtual:",ktt=5,ise=/(os|cpu|libc)=([a-z0-9_-]+)/,Qtt=(0,nse.makeParser)(ise);US=/^[^#]*#/;Utt=/^(?:@([^/]+?)\/)?([^@/]+)$/;_tt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Htt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;jtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,qtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Gtt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;Jtt=/:$/;ztt=/\?.*/});var ase,lse=Et(()=>{xo();ase={hooks:{reduceDependency:(t,e,r,o,{resolver:a,resolveOptions:n})=>{for(let{pattern:u,reference:A}of e.topLevelWorkspace.manifest.resolutions){if(u.from&&(u.from.fullName!==fn(r)||e.configuration.normalizeLocator(Qs(Js(u.from.fullName),u.from.description??r.reference)).locatorHash!==r.locatorHash)||u.descriptor.fullName!==fn(t)||e.configuration.normalizeDependency(In(xf(u.descriptor.fullName),u.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(In(t,A)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let o=o1(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${o}: ${n}`),reportError:(a,n)=>e.reportError(a,`${o}: ${n}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let o of r.errors)e.reportWarning(57,o.message)}}}});var a1,Xn,Bd=Et(()=>{a1=class{supportsDescriptor(e,r){return!!(e.range.startsWith(a1.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(a1.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[o.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.getWorkspaceByCwd(e.reference.slice(a1.protocol.length));return{...e,version:o.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...o.manifest.dependencies,...o.manifest.devDependencies])),peerDependencies:new Map([...o.manifest.peerDependencies]),dependenciesMeta:o.manifest.dependenciesMeta,peerDependenciesMeta:o.manifest.peerDependenciesMeta,bin:o.manifest.bin}}},Xn=a1;Xn.protocol="workspace:"});var kr={};Kt(kr,{SemVer:()=>pse.SemVer,clean:()=>Ztt,getComparator:()=>Ase,mergeComparators:()=>oO,satisfiesWithPrereleases:()=>bf,simplifyRanges:()=>aO,stringifyComparator:()=>fse,validRange:()=>ba});function bf(t,e,r=!1){if(!t)return!1;let o=`${e}${r}`,a=cse.get(o);if(typeof a>"u")try{a=new ih.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{cse.set(o,a||null)}else if(a===null)return!1;let n;try{n=new ih.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(u=>{for(let A of u)A.semver.prerelease&&(A.semver.prerelease=[]);return u.every(A=>A.test(n))}))}function ba(t){if(t.indexOf(":")!==-1)return null;let e=use.get(t);if(typeof e<"u")return e;try{e=new ih.default.Range(t)}catch{e=null}return use.set(t,e),e}function Ztt(t){let e=Xtt.exec(t);return e?e[1]:null}function Ase(t){if(t.semver===ih.default.Comparator.ANY)return{gt:null,lt:null};switch(t.operator){case"":return{gt:[">=",t.semver],lt:["<=",t.semver]};case">":case">=":return{gt:[t.operator,t.semver],lt:null};case"<":case"<=":return{gt:null,lt:[t.operator,t.semver]};default:throw new Error(`Assertion failed: Unexpected comparator operator (${t.operator})`)}}function oO(t){if(t.length===0)return null;let e=null,r=null;for(let o of t){if(o.gt){let a=e!==null?ih.default.compare(o.gt[1],e[1]):null;(a===null||a>0||a===0&&o.gt[0]===">")&&(e=o.gt)}if(o.lt){let a=r!==null?ih.default.compare(o.lt[1],r[1]):null;(a===null||a<0||a===0&&o.lt[0]==="<")&&(r=o.lt)}}if(e&&r){let o=ih.default.compare(e[1],r[1]);if(o===0&&(e[0]===">"||r[0]==="<")||o>0)return null}return{gt:e,lt:r}}function fse(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1].version===t.lt[1].version)return t.gt[1].version;if(t.gt[0]===">="&&t.lt[0]==="<"){if(t.lt[1].version===`${t.gt[1].major+1}.0.0-0`)return`^${t.gt[1].version}`;if(t.lt[1].version===`${t.gt[1].major}.${t.gt[1].minor+1}.0-0`)return`~${t.gt[1].version}`}}let e=[];return t.gt&&e.push(t.gt[0]+t.gt[1].version),t.lt&&e.push(t.lt[0]+t.lt[1].version),e.length?e.join(" "):"*"}function aO(t){let e=t.map(o=>ba(o).set.map(a=>a.map(n=>Ase(n)))),r=e.shift().map(o=>oO(o)).filter(o=>o!==null);for(let o of e){let a=[];for(let n of r)for(let u of o){let A=oO([n,...u]);A!==null&&a.push(A)}r=a}return r.length===0?null:r.map(o=>fse(o)).join(" || ")}var ih,pse,cse,use,Xtt,kf=Et(()=>{ih=$e(zn()),pse=$e(zn()),cse=new Map;use=new Map;Xtt=/^(?:[\sv=]*?)((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\s*)$/});function hse(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function gse(t){return t.charCodeAt(0)===65279?t.slice(1):t}function $o(t){return t.replace(/\\/g,"/")}function GS(t,{yamlCompatibilityMode:e}){return e?IL(t):typeof t>"u"||typeof t=="boolean"?t:null}function dse(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let o=r%2===0?"":"!",a=e.slice(r);return`${o}${t}=${a}`}function lO(t,e){return e.length===1?dse(t,e[0]):`(${e.map(r=>dse(t,r)).join(" | ")})`}var mse,uE,Mt,AE=Et(()=>{Pt();Nl();mse=$e(zn());Bd();jl();kf();xo();uE=class{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:r=new Rn}={}){let o=K.join(e,"package.json");try{return await uE.fromFile(o,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let o=await uE.tryFind(e,{baseFs:r});if(o===null)throw new Error("Manifest not found");return o}static async fromFile(e,{baseFs:r=new Rn}={}){let o=new uE;return await o.loadFile(e,{baseFs:r}),o}static fromText(e){let r=new uE;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(gse(e)||"{}")}catch(o){throw o.message+=` (when parsing ${e})`,o}this.load(r),this.indent=hse(e)}async loadFile(e,{baseFs:r=new Rn}){let o=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(gse(o)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=hse(o)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let o=[];if(this.name=null,typeof e.name=="string")try{this.name=Js(e.name)}catch{o.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let n=[];this.os=n;for(let u of e.os)typeof u!="string"?o.push(new Error("Parsing failed for the 'os' field")):n.push(u)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let u of e.cpu)typeof u!="string"?o.push(new Error("Parsing failed for the 'cpu' field")):n.push(u)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let u of e.libc)typeof u!="string"?o.push(new Error("Parsing failed for the 'libc' field")):n.push(u)}else this.libc=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=$o(e.main):this.main=null,typeof e.module=="string"?this.module=$o(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=$o(e.browser);else{this.browser=new Map;for(let[n,u]of Object.entries(e.browser))this.browser.set($o(n),typeof u=="string"?$o(u):u)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?o.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,$o(e.bin)):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,u]of Object.entries(e.bin)){if(typeof u!="string"||u.trim()===""){o.push(new Error(`Invalid bin definition for '${n}'`));continue}let A=Js(n);this.bin.set(A.name,$o(u))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,u]of Object.entries(e.scripts)){if(typeof u!="string"){o.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,u)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,u]of Object.entries(e.dependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,u]of Object.entries(e.devDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,u]of Object.entries(e.peerDependencies)){let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof u!="string"||!u.startsWith(Xn.protocol)&&!ba(u))&&(o.push(new Error(`Invalid dependency range for '${n}'`)),u="*");let p=In(A,u);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&o.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let n of a){if(typeof n!="string"){o.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,u]of Object.entries(e.dependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}`));continue}let A=nh(n),p=this.ensureDependencyMeta(A),h=GS(u.built,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=GS(u.optional,{yamlCompatibilityMode:r});if(E===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}let I=GS(u.unplugged,{yamlCompatibilityMode:r});if(I===null){o.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:I})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,u]of Object.entries(e.peerDependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}'`));continue}let A=nh(n),p=this.ensurePeerDependencyMeta(A),h=GS(u.optional,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,u]of Object.entries(e.resolutions)){if(typeof u!="string"){o.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:UD(n),reference:u})}catch(A){o.push(A);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){o.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=$o(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=$o(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=$o(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,u]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set($o(n),typeof u=="string"?$o(u):u)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,$o(e.publishConfig.bin)]]):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[n,u]of Object.entries(e.publishConfig.bin)){if(typeof u!="string"){o.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,$o(u))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){o.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add($o(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:o.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:o.push(new Error("Invalid selfReferences definition, must be a boolean value")):o.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,u]of Object.entries(e.optionalDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p);let h=In(A,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=o}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(lO("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(lO("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(lO("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!mse.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(o);return n||a.set(o,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=this.peerDependenciesMeta.get(r);return o||this.peerDependenciesMeta.set(r,o={}),o}setRawField(e,r,{after:o=[]}={}){let a=new Set(o.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,u=this.raw={},A=!1;for(let p of Object.keys(n))u[p]=n[p],A||(a.delete(p),a.size===0&&(u[e]=r,A=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=fn(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(u=>({[u]:n.get(u)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let o=[],a=[];for(let n of this.dependencies.values()){let u=this.dependenciesMeta.get(fn(n)),A=!1;if(r&&u){let p=u.get(null);p&&p.optional&&(A=!0)}A?a.push(n):o.push(n)}o.length>0?e.dependencies=Object.assign({},...cE(o).map(n=>({[fn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...cE(a).map(n=>({[fn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...cE(this.devDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...cE(this.peerDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,u]of ks(this.dependenciesMeta.entries(),([A,p])=>A))for(let[A,p]of ks(u.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=A!==null?Sa(In(Js(n),A)):n,E={...p};r&&A===null&&delete E.optional,Object.keys(E).length!==0&&(e.dependenciesMeta[h]=E)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...ks(this.peerDependenciesMeta.entries(),([n,u])=>n).map(([n,u])=>({[n]:u}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:u})=>({[_D(n)]:u}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,u]of this.scripts.entries())e.scripts[n]=u}else delete e.scripts;return e}},Mt=uE;Mt.fileName="package.json",Mt.allDependencies=["dependencies","devDependencies","peerDependencies"],Mt.hardDependencies=["dependencies","devDependencies"]});var Ese=_((_Nt,yse)=>{var $tt=_l(),ert=function(){return $tt.Date.now()};yse.exports=ert});var wse=_((HNt,Cse)=>{var trt=/\s/;function rrt(t){for(var e=t.length;e--&&trt.test(t.charAt(e)););return e}Cse.exports=rrt});var Bse=_((jNt,Ise)=>{var nrt=wse(),irt=/^\s+/;function srt(t){return t&&t.slice(0,nrt(t)+1).replace(irt,"")}Ise.exports=srt});var fE=_((qNt,vse)=>{var ort=pd(),art=Ju(),lrt="[object Symbol]";function crt(t){return typeof t=="symbol"||art(t)&&ort(t)==lrt}vse.exports=crt});var xse=_((GNt,Sse)=>{var urt=Bse(),Dse=il(),Art=fE(),Pse=0/0,frt=/^[-+]0x[0-9a-f]+$/i,prt=/^0b[01]+$/i,hrt=/^0o[0-7]+$/i,grt=parseInt;function drt(t){if(typeof t=="number")return t;if(Art(t))return Pse;if(Dse(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Dse(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=urt(t);var r=prt.test(t);return r||hrt.test(t)?grt(t.slice(2),r?2:8):frt.test(t)?Pse:+t}Sse.exports=drt});var Qse=_((YNt,kse)=>{var mrt=il(),cO=Ese(),bse=xse(),yrt="Expected a function",Ert=Math.max,Crt=Math.min;function wrt(t,e,r){var o,a,n,u,A,p,h=0,E=!1,I=!1,v=!0;if(typeof t!="function")throw new TypeError(yrt);e=bse(e)||0,mrt(r)&&(E=!!r.leading,I="maxWait"in r,n=I?Ert(bse(r.maxWait)||0,e):n,v="trailing"in r?!!r.trailing:v);function b(Ae){var ye=o,ae=a;return o=a=void 0,h=Ae,u=t.apply(ae,ye),u}function C(Ae){return h=Ae,A=setTimeout(U,e),E?b(Ae):u}function T(Ae){var ye=Ae-p,ae=Ae-h,we=e-ye;return I?Crt(we,n-ae):we}function L(Ae){var ye=Ae-p,ae=Ae-h;return p===void 0||ye>=e||ye<0||I&&ae>=n}function U(){var Ae=cO();if(L(Ae))return J(Ae);A=setTimeout(U,T(Ae))}function J(Ae){return A=void 0,v&&o?b(Ae):(o=a=void 0,u)}function te(){A!==void 0&&clearTimeout(A),h=0,o=p=a=A=void 0}function le(){return A===void 0?u:J(cO())}function pe(){var Ae=cO(),ye=L(Ae);if(o=arguments,a=this,p=Ae,ye){if(A===void 0)return C(p);if(I)return clearTimeout(A),A=setTimeout(U,e),b(p)}return A===void 0&&(A=setTimeout(U,e)),u}return pe.cancel=te,pe.flush=le,pe}kse.exports=wrt});var uO=_((WNt,Fse)=>{var Irt=Qse(),Brt=il(),vrt="Expected a function";function Drt(t,e,r){var o=!0,a=!0;if(typeof t!="function")throw new TypeError(vrt);return Brt(r)&&(o="leading"in r?!!r.leading:o,a="trailing"in r?!!r.trailing:a),Irt(t,e,{leading:o,maxWait:e,trailing:a})}Fse.exports=Drt});function Srt(t){return typeof t.reportCode<"u"}var Tse,Rse,Nse,Prt,zt,Xs,Yl=Et(()=>{Tse=$e(uO()),Rse=Be("stream"),Nse=Be("string_decoder"),Prt=15,zt=class extends Error{constructor(r,o,a){super(o);this.reportExtra=a;this.reportCode=r}};Xs=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,o,a=new Promise(p=>{o=p}),n=p=>{let h=o;a=new Promise(E=>{o=E}),r=p,h()},u=(p=0)=>{n(r+1)},A=async function*(){for(;r{r=u}),a=(0,Tse.default)(u=>{let A=r;o=new Promise(p=>{r=p}),e=u,A()},1e3/Prt),n=async function*(){for(;;)await o,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let o=this.reportProgress(e);try{return await r(e)}finally{o.stop()}}startProgressSync(e,r){let o=this.reportProgress(e);try{return r(e)}finally{o.stop()}}reportInfoOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),o?.reportExtra?.(this))}reportWarningOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),o?.reportExtra?.(this))}reportErrorOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),o?.reportExtra?.(this))}reportExceptionOnce(e){Srt(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let r=new Rse.PassThrough,o=new Nse.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` -`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var pE,AO=Et(()=>{Yl();xo();pE=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));return o||null}getFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));if(!o)throw new zt(11,`${jr(r.project.configuration,e)} isn't supported by any available fetcher`);return o}}});var vd,fO=Et(()=>{xo();vd=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.getResolverByDescriptor(e,o).bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,o){return await this.getResolverByDescriptor(e,o).getCandidates(e,r,o)}async getSatisfying(e,r,o,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,o,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));return o||null}getResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!o)throw new Error(`${qn(r.project.configuration,e)} isn't supported by any available resolver`);return o}tryResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));return o||null}getResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));if(!o)throw new Error(`${jr(r.project.configuration,e)} isn't supported by any available resolver`);return o}}});var hE,pO=Et(()=>{Pt();xo();hE=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a),u=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,u,r)}getLocatorFilename(e){return aE(e)}async ensureVirtualLink(e,r,o){let a=r.packageFs.getRealPath(),n=o.project.configuration.get("virtualFolder"),u=this.getLocatorFilename(e),A=mi.makeVirtualPath(n,u,a),p=new Uu(A,{baseFs:r.packageFs,pathUtils:K});return{...r,packageFs:p}}}});var gE,l1,Lse=Et(()=>{gE=class{static isVirtualDescriptor(e){return!!e.range.startsWith(gE.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(gE.protocol)}supportsDescriptor(e,r){return gE.isVirtualDescriptor(e)}supportsLocator(e,r){return gE.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,o){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,o,a){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},l1=gE;l1.protocol="virtual:"});var dE,hO=Et(()=>{Pt();Bd();dE=class{supports(e){return!!e.reference.startsWith(Xn.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let o=this.getWorkspace(e,r).cwd;return{packageFs:new gn(o),prefixPath:Bt.dot,localPath:o}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Xn.protocol.length))}}});function c1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Mse(t){return typeof t>"u"?3:c1(t)?0:Array.isArray(t)?1:2}function mO(t,e){return Object.hasOwn(t,e)}function brt(t){return c1(t)&&mO(t,"onConflict")&&typeof t.onConflict=="string"}function krt(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!brt(t))return{onConflict:"default",value:t};if(mO(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function Ose(t,e){let r=c1(t)&&mO(t,e)?t[e]:void 0;return krt(r)}function mE(t,e){return[t,e,Use]}function yO(t){return Array.isArray(t)?t[2]===Use:!1}function gO(t,e){if(c1(t)){let r={};for(let o of Object.keys(t))r[o]=gO(t[o],e);return mE(e,r)}return Array.isArray(t)?mE(e,t.map(r=>gO(r,e))):mE(e,t)}function dO(t,e,r,o,a){let n,u=[],A=a,p=0;for(let E=a-1;E>=o;--E){let[I,v]=t[E],{onConflict:b,value:C}=Ose(v,r),T=Mse(C);if(T!==3){if(n??=T,T!==n||b==="hardReset"){p=A;break}if(T===2)return mE(I,C);if(u.unshift([I,C]),b==="reset"){p=E;break}b==="extend"&&E===o&&(o=0),A=E}}if(typeof n>"u")return null;let h=u.map(([E])=>E).join(", ");switch(n){case 1:return mE(h,new Array().concat(...u.map(([E,I])=>I.map(v=>gO(v,E)))));case 0:{let E=Object.assign({},...u.map(([,T])=>T)),I=Object.keys(E),v={},b=t.map(([T,L])=>[T,Ose(L,r).value]),C=xrt(b,([T,L])=>{let U=Mse(L);return U!==0&&U!==3});if(C!==-1){let T=b.slice(C+1);for(let L of I)v[L]=dO(T,e,L,0,T.length)}else for(let T of I)v[T]=dO(b,e,T,p,b.length);return mE(h,v)}default:throw new Error("Assertion failed: Non-extendable value type")}}function _se(t){return dO(t.map(([e,r])=>[e,{["."]:r}]),[],".",0,t.length)}function u1(t){return yO(t)?t[1]:t}function YS(t){let e=yO(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>YS(r));if(c1(e)){let r={};for(let[o,a]of Object.entries(e))r[o]=YS(a);return r}return e}function EO(t){return yO(t)?t[0]:null}var xrt,Use,Hse=Et(()=>{xrt=(t,e,r)=>{let o=[...t];return o.reverse(),o.findIndex(e,r)};Use=Symbol()});var WS={};Kt(WS,{getDefaultGlobalFolder:()=>wO,getHomeFolder:()=>yE,isFolderInside:()=>IO});function wO(){if(process.platform==="win32"){let t=ue.toPortablePath(process.env.LOCALAPPDATA||ue.join((0,CO.homedir)(),"AppData","Local"));return K.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=ue.toPortablePath(process.env.XDG_DATA_HOME);return K.resolve(t,"yarn/berry")}return K.resolve(yE(),".yarn/berry")}function yE(){return ue.toPortablePath((0,CO.homedir)()||"/usr/local/share")}function IO(t,e){let r=K.relative(e,t);return r&&!r.startsWith("..")&&!K.isAbsolute(r)}var CO,VS=Et(()=>{Pt();CO=Be("os")});var Yse=_(EE=>{"use strict";var sLt=Be("net"),Frt=Be("tls"),BO=Be("http"),jse=Be("https"),Trt=Be("events"),oLt=Be("assert"),Rrt=Be("util");EE.httpOverHttp=Nrt;EE.httpsOverHttp=Lrt;EE.httpOverHttps=Mrt;EE.httpsOverHttps=Ort;function Nrt(t){var e=new Qf(t);return e.request=BO.request,e}function Lrt(t){var e=new Qf(t);return e.request=BO.request,e.createSocket=qse,e.defaultPort=443,e}function Mrt(t){var e=new Qf(t);return e.request=jse.request,e}function Ort(t){var e=new Qf(t);return e.request=jse.request,e.createSocket=qse,e.defaultPort=443,e}function Qf(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||BO.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(o,a,n,u){for(var A=Gse(a,n,u),p=0,h=e.requests.length;p=this.maxSockets){n.requests.push(u);return}n.createSocket(u,function(A){A.on("free",p),A.on("close",h),A.on("agentRemove",h),e.onSocket(A);function p(){n.emit("free",A,u)}function h(E){n.removeSocket(A),A.removeListener("free",p),A.removeListener("close",h),A.removeListener("agentRemove",h)}})};Qf.prototype.createSocket=function(e,r){var o=this,a={};o.sockets.push(a);var n=vO({},o.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),sh("making CONNECT request");var u=o.request(n);u.useChunkedEncodingByDefault=!1,u.once("response",A),u.once("upgrade",p),u.once("connect",h),u.once("error",E),u.end();function A(I){I.upgrade=!0}function p(I,v,b){process.nextTick(function(){h(I,v,b)})}function h(I,v,b){if(u.removeAllListeners(),v.removeAllListeners(),I.statusCode!==200){sh("tunneling socket could not be established, statusCode=%d",I.statusCode),v.destroy();var C=new Error("tunneling socket could not be established, statusCode="+I.statusCode);C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}if(b.length>0){sh("got illegal response body from proxy"),v.destroy();var C=new Error("got illegal response body from proxy");C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}return sh("tunneling connection has established"),o.sockets[o.sockets.indexOf(a)]=v,r(v)}function E(I){u.removeAllListeners(),sh(`tunneling socket could not be established, cause=%s -`,I.message,I.stack);var v=new Error("tunneling socket could not be established, cause="+I.message);v.code="ECONNRESET",e.request.emit("error",v),o.removeSocket(a)}};Qf.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var o=this.requests.shift();o&&this.createSocket(o,function(a){o.request.onSocket(a)})}};function qse(t,e){var r=this;Qf.prototype.createSocket.call(r,t,function(o){var a=t.request.getHeader("host"),n=vO({},r.options,{socket:o,servername:a?a.replace(/:.*$/,""):t.host}),u=Frt.connect(0,n);r.sockets[r.sockets.indexOf(o)]=u,e(u)})}function Gse(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function vO(t){for(var e=1,r=arguments.length;e{Wse.exports=Yse()});var Tf=_((Ff,KS)=>{"use strict";Object.defineProperty(Ff,"__esModule",{value:!0});var Kse=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Urt(t){return Kse.includes(t)}var _rt=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","FormData","URLSearchParams","HTMLElement",...Kse];function Hrt(t){return _rt.includes(t)}var jrt=["null","undefined","string","number","bigint","boolean","symbol"];function qrt(t){return jrt.includes(t)}function CE(t){return e=>typeof e===t}var{toString:Jse}=Object.prototype,A1=t=>{let e=Jse.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&xe.domElement(t))return"HTMLElement";if(Hrt(e))return e},ei=t=>e=>A1(e)===t;function xe(t){if(t===null)return"null";switch(typeof t){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol";default:}if(xe.observable(t))return"Observable";if(xe.array(t))return"Array";if(xe.buffer(t))return"Buffer";let e=A1(t);if(e)return e;if(t instanceof String||t instanceof Boolean||t instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}xe.undefined=CE("undefined");xe.string=CE("string");var Grt=CE("number");xe.number=t=>Grt(t)&&!xe.nan(t);xe.bigint=CE("bigint");xe.function_=CE("function");xe.null_=t=>t===null;xe.class_=t=>xe.function_(t)&&t.toString().startsWith("class ");xe.boolean=t=>t===!0||t===!1;xe.symbol=CE("symbol");xe.numericString=t=>xe.string(t)&&!xe.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));xe.array=(t,e)=>Array.isArray(t)?xe.function_(e)?t.every(e):!0:!1;xe.buffer=t=>{var e,r,o,a;return(a=(o=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||o===void 0?void 0:o.call(r,t))!==null&&a!==void 0?a:!1};xe.nullOrUndefined=t=>xe.null_(t)||xe.undefined(t);xe.object=t=>!xe.null_(t)&&(typeof t=="object"||xe.function_(t));xe.iterable=t=>{var e;return xe.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};xe.asyncIterable=t=>{var e;return xe.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};xe.generator=t=>xe.iterable(t)&&xe.function_(t.next)&&xe.function_(t.throw);xe.asyncGenerator=t=>xe.asyncIterable(t)&&xe.function_(t.next)&&xe.function_(t.throw);xe.nativePromise=t=>ei("Promise")(t);var Yrt=t=>{var e,r;return xe.function_((e=t)===null||e===void 0?void 0:e.then)&&xe.function_((r=t)===null||r===void 0?void 0:r.catch)};xe.promise=t=>xe.nativePromise(t)||Yrt(t);xe.generatorFunction=ei("GeneratorFunction");xe.asyncGeneratorFunction=t=>A1(t)==="AsyncGeneratorFunction";xe.asyncFunction=t=>A1(t)==="AsyncFunction";xe.boundFunction=t=>xe.function_(t)&&!t.hasOwnProperty("prototype");xe.regExp=ei("RegExp");xe.date=ei("Date");xe.error=ei("Error");xe.map=t=>ei("Map")(t);xe.set=t=>ei("Set")(t);xe.weakMap=t=>ei("WeakMap")(t);xe.weakSet=t=>ei("WeakSet")(t);xe.int8Array=ei("Int8Array");xe.uint8Array=ei("Uint8Array");xe.uint8ClampedArray=ei("Uint8ClampedArray");xe.int16Array=ei("Int16Array");xe.uint16Array=ei("Uint16Array");xe.int32Array=ei("Int32Array");xe.uint32Array=ei("Uint32Array");xe.float32Array=ei("Float32Array");xe.float64Array=ei("Float64Array");xe.bigInt64Array=ei("BigInt64Array");xe.bigUint64Array=ei("BigUint64Array");xe.arrayBuffer=ei("ArrayBuffer");xe.sharedArrayBuffer=ei("SharedArrayBuffer");xe.dataView=ei("DataView");xe.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;xe.urlInstance=t=>ei("URL")(t);xe.urlString=t=>{if(!xe.string(t))return!1;try{return new URL(t),!0}catch{return!1}};xe.truthy=t=>Boolean(t);xe.falsy=t=>!t;xe.nan=t=>Number.isNaN(t);xe.primitive=t=>xe.null_(t)||qrt(typeof t);xe.integer=t=>Number.isInteger(t);xe.safeInteger=t=>Number.isSafeInteger(t);xe.plainObject=t=>{if(Jse.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};xe.typedArray=t=>Urt(A1(t));var Wrt=t=>xe.safeInteger(t)&&t>=0;xe.arrayLike=t=>!xe.nullOrUndefined(t)&&!xe.function_(t)&&Wrt(t.length);xe.inRange=(t,e)=>{if(xe.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(xe.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var Vrt=1,Krt=["innerHTML","ownerDocument","style","attributes","nodeValue"];xe.domElement=t=>xe.object(t)&&t.nodeType===Vrt&&xe.string(t.nodeName)&&!xe.plainObject(t)&&Krt.every(e=>e in t);xe.observable=t=>{var e,r,o,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(o=t)["@@observable"])===null||a===void 0?void 0:a.call(o)):!1};xe.nodeStream=t=>xe.object(t)&&xe.function_(t.pipe)&&!xe.observable(t);xe.infinite=t=>t===1/0||t===-1/0;var zse=t=>e=>xe.integer(e)&&Math.abs(e%2)===t;xe.evenInteger=zse(0);xe.oddInteger=zse(1);xe.emptyArray=t=>xe.array(t)&&t.length===0;xe.nonEmptyArray=t=>xe.array(t)&&t.length>0;xe.emptyString=t=>xe.string(t)&&t.length===0;xe.nonEmptyString=t=>xe.string(t)&&t.length>0;var Jrt=t=>xe.string(t)&&!/\S/.test(t);xe.emptyStringOrWhitespace=t=>xe.emptyString(t)||Jrt(t);xe.emptyObject=t=>xe.object(t)&&!xe.map(t)&&!xe.set(t)&&Object.keys(t).length===0;xe.nonEmptyObject=t=>xe.object(t)&&!xe.map(t)&&!xe.set(t)&&Object.keys(t).length>0;xe.emptySet=t=>xe.set(t)&&t.size===0;xe.nonEmptySet=t=>xe.set(t)&&t.size>0;xe.emptyMap=t=>xe.map(t)&&t.size===0;xe.nonEmptyMap=t=>xe.map(t)&&t.size>0;xe.propertyKey=t=>xe.any([xe.string,xe.number,xe.symbol],t);xe.formData=t=>ei("FormData")(t);xe.urlSearchParams=t=>ei("URLSearchParams")(t);var Xse=(t,e,r)=>{if(!xe.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(r.length===0)throw new TypeError("Invalid number of values");return t.call(r,e)};xe.any=(t,...e)=>(xe.array(t)?t:[t]).some(o=>Xse(Array.prototype.some,o,e));xe.all=(t,...e)=>Xse(Array.prototype.every,t,e);var Ht=(t,e,r,o={})=>{if(!t){let{multipleValues:a}=o,n=a?`received values of types ${[...new Set(r.map(u=>`\`${xe(u)}\``))].join(", ")}`:`received value of type \`${xe(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Ff.assert={undefined:t=>Ht(xe.undefined(t),"undefined",t),string:t=>Ht(xe.string(t),"string",t),number:t=>Ht(xe.number(t),"number",t),bigint:t=>Ht(xe.bigint(t),"bigint",t),function_:t=>Ht(xe.function_(t),"Function",t),null_:t=>Ht(xe.null_(t),"null",t),class_:t=>Ht(xe.class_(t),"Class",t),boolean:t=>Ht(xe.boolean(t),"boolean",t),symbol:t=>Ht(xe.symbol(t),"symbol",t),numericString:t=>Ht(xe.numericString(t),"string with a number",t),array:(t,e)=>{Ht(xe.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Ht(xe.buffer(t),"Buffer",t),nullOrUndefined:t=>Ht(xe.nullOrUndefined(t),"null or undefined",t),object:t=>Ht(xe.object(t),"Object",t),iterable:t=>Ht(xe.iterable(t),"Iterable",t),asyncIterable:t=>Ht(xe.asyncIterable(t),"AsyncIterable",t),generator:t=>Ht(xe.generator(t),"Generator",t),asyncGenerator:t=>Ht(xe.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Ht(xe.nativePromise(t),"native Promise",t),promise:t=>Ht(xe.promise(t),"Promise",t),generatorFunction:t=>Ht(xe.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Ht(xe.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Ht(xe.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Ht(xe.boundFunction(t),"Function",t),regExp:t=>Ht(xe.regExp(t),"RegExp",t),date:t=>Ht(xe.date(t),"Date",t),error:t=>Ht(xe.error(t),"Error",t),map:t=>Ht(xe.map(t),"Map",t),set:t=>Ht(xe.set(t),"Set",t),weakMap:t=>Ht(xe.weakMap(t),"WeakMap",t),weakSet:t=>Ht(xe.weakSet(t),"WeakSet",t),int8Array:t=>Ht(xe.int8Array(t),"Int8Array",t),uint8Array:t=>Ht(xe.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Ht(xe.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Ht(xe.int16Array(t),"Int16Array",t),uint16Array:t=>Ht(xe.uint16Array(t),"Uint16Array",t),int32Array:t=>Ht(xe.int32Array(t),"Int32Array",t),uint32Array:t=>Ht(xe.uint32Array(t),"Uint32Array",t),float32Array:t=>Ht(xe.float32Array(t),"Float32Array",t),float64Array:t=>Ht(xe.float64Array(t),"Float64Array",t),bigInt64Array:t=>Ht(xe.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Ht(xe.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Ht(xe.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Ht(xe.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Ht(xe.dataView(t),"DataView",t),urlInstance:t=>Ht(xe.urlInstance(t),"URL",t),urlString:t=>Ht(xe.urlString(t),"string with a URL",t),truthy:t=>Ht(xe.truthy(t),"truthy",t),falsy:t=>Ht(xe.falsy(t),"falsy",t),nan:t=>Ht(xe.nan(t),"NaN",t),primitive:t=>Ht(xe.primitive(t),"primitive",t),integer:t=>Ht(xe.integer(t),"integer",t),safeInteger:t=>Ht(xe.safeInteger(t),"integer",t),plainObject:t=>Ht(xe.plainObject(t),"plain object",t),typedArray:t=>Ht(xe.typedArray(t),"TypedArray",t),arrayLike:t=>Ht(xe.arrayLike(t),"array-like",t),domElement:t=>Ht(xe.domElement(t),"HTMLElement",t),observable:t=>Ht(xe.observable(t),"Observable",t),nodeStream:t=>Ht(xe.nodeStream(t),"Node.js Stream",t),infinite:t=>Ht(xe.infinite(t),"infinite number",t),emptyArray:t=>Ht(xe.emptyArray(t),"empty array",t),nonEmptyArray:t=>Ht(xe.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Ht(xe.emptyString(t),"empty string",t),nonEmptyString:t=>Ht(xe.nonEmptyString(t),"non-empty string",t),emptyStringOrWhitespace:t=>Ht(xe.emptyStringOrWhitespace(t),"empty string or whitespace",t),emptyObject:t=>Ht(xe.emptyObject(t),"empty object",t),nonEmptyObject:t=>Ht(xe.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Ht(xe.emptySet(t),"empty set",t),nonEmptySet:t=>Ht(xe.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Ht(xe.emptyMap(t),"empty map",t),nonEmptyMap:t=>Ht(xe.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Ht(xe.propertyKey(t),"PropertyKey",t),formData:t=>Ht(xe.formData(t),"FormData",t),urlSearchParams:t=>Ht(xe.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Ht(xe.evenInteger(t),"even integer",t),oddInteger:t=>Ht(xe.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Ht(xe.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Ht(xe.inRange(t,e),"in range",t),any:(t,...e)=>Ht(xe.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Ht(xe.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(xe,{class:{value:xe.class_},function:{value:xe.function_},null:{value:xe.null_}});Object.defineProperties(Ff.assert,{class:{value:Ff.assert.class_},function:{value:Ff.assert.function_},null:{value:Ff.assert.null_}});Ff.default=xe;KS.exports=xe;KS.exports.default=xe;KS.exports.assert=Ff.assert});var Zse=_((cLt,DO)=>{"use strict";var JS=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},wE=class{static fn(e){return(...r)=>new wE((o,a,n)=>{r.push(n),e(...r).then(o,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,o)=>{this._reject=o;let a=A=>{this._isPending=!1,r(A)},n=A=>{this._isPending=!1,o(A)},u=A=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(A)};return Object.defineProperties(u,{shouldReject:{get:()=>this._rejectOnCancel,set:A=>{this._rejectOnCancel=A}}}),e(a,n,u)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new JS(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(wE.prototype,Promise.prototype);DO.exports=wE;DO.exports.CancelError=JS});var $se=_((SO,xO)=>{"use strict";Object.defineProperty(SO,"__esModule",{value:!0});var zrt=Be("tls"),PO=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let o=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",u=()=>{o&&r.connect(),t instanceof zrt.TLSSocket&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?u():t.connecting?t.once("connect",u):t.destroyed&&n&&r.close(t._hadError)};SO.default=PO;xO.exports=PO;xO.exports.default=PO});var eoe=_((kO,QO)=>{"use strict";Object.defineProperty(kO,"__esModule",{value:!0});var Xrt=$se(),Zrt=Number(process.versions.node.split(".")[0]),bO=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=u=>{let A=u.emit.bind(u);u.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,u.emit=A),A(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||Zrt>=13)&&(e.phases.total=Date.now()-e.start)});let o=u=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let A=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};u.prependOnceListener("lookup",A),Xrt.default(u,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(u.removeListener("lookup",A),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?o(t.socket):t.prependOnceListener("socket",o);let a=()=>{var u;e.upload=Date.now(),e.phases.request=e.upload-(u=e.secureConnect,u??e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",u=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,u.timings=e,r(u),u.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};kO.default=bO;QO.exports=bO;QO.exports.default=bO});var aoe=_((uLt,RO)=>{"use strict";var{V4MAPPED:$rt,ADDRCONFIG:ent,ALL:ooe,promises:{Resolver:toe},lookup:tnt}=Be("dns"),{promisify:FO}=Be("util"),rnt=Be("os"),IE=Symbol("cacheableLookupCreateConnection"),TO=Symbol("cacheableLookupInstance"),roe=Symbol("expires"),nnt=typeof ooe=="number",noe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},int=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},ioe=()=>{let t=!1,e=!1;for(let r of Object.values(rnt.networkInterfaces()))for(let o of r)if(!o.internal&&(o.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},snt=t=>Symbol.iterator in t,soe={ttl:!0},ont={all:!0},zS=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:o=3600,errorTtl:a=.15,resolver:n=new toe,lookup:u=tnt}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=FO(u),this._resolver instanceof toe?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=FO(this._resolver.resolve4.bind(this._resolver)),this._resolve6=FO(this._resolver.resolve6.bind(this._resolver))),this._iface=ioe(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,o<1)this._fallback=!1;else{this._fallback=!0;let A=setInterval(()=>{this._hostnamesToFallback.clear()},o*1e3);A.unref&&A.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,o){if(typeof r=="function"?(o=r,r={}):typeof r=="number"&&(r={family:r}),!o)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?o(null,a):o(null,a.address,a.family,a.expires,a.ttl)},o)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let o=await this.query(e);if(r.family===6){let a=o.filter(n=>n.family===6);r.hints&$rt&&(nnt&&r.hints&ooe||a.length===0)?int(o):o=a}else r.family===4&&(o=o.filter(a=>a.family===4));if(r.hints&ent){let{_iface:a}=this;o=o.filter(n=>n.family===6?a.has6:a.has4)}if(o.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?o:o[0]}async query(e){let r=await this._cache.get(e);if(!r){let o=this._pending[e];if(o)r=await o;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(o=>({...o})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[o,a]=await Promise.all([this._resolve4(e,soe),this._resolve6(e,soe)].map(h=>r(h))),n=0,u=0,A=0,p=Date.now();for(let h of o)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,u=Math.max(u,h.ttl);return o.length>0?a.length>0?A=Math.min(n,u):A=n:A=u,{entries:[...o,...a],cacheTtl:A}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,o){if(this.maxTtl>0&&o>0){o=Math.min(o,this.maxTtl)*1e3,r[roe]=Date.now()+o;try{await this._cache.set(e,r,o)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}snt(this._cache)&&this._tick(o)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,ont);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let o=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,o),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let o=1/0,a=Date.now();for(let[n,u]of this._cache){let A=u[roe];a>=A?this._cache.delete(n):A("lookup"in r||(r.lookup=this.lookup),e[IE](r,o))}uninstall(e){if(noe(e),e[IE]){if(e[TO]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[IE],delete e[IE],delete e[TO]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=ioe(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};RO.exports=zS;RO.exports.default=zS});var uoe=_((ALt,NO)=>{"use strict";var ant=typeof URL>"u"?Be("url").URL:URL,lnt="text/plain",cnt="us-ascii",loe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),unt=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let o=r[1].split(";"),a=r[2],n=e?"":r[3],u=!1;o[o.length-1]==="base64"&&(o.pop(),u=!0);let A=(o.shift()||"").toLowerCase(),h=[...o.map(E=>{let[I,v=""]=E.split("=").map(b=>b.trim());return I==="charset"&&(v=v.toLowerCase(),v===cnt)?"":`${I}${v?`=${v}`:""}`}).filter(Boolean)];return u&&h.push("base64"),(h.length!==0||A&&A!==lnt)&&h.unshift(A),`data:${h.join(";")},${u?a.trim():a}${n?`#${n}`:""}`},coe=(t,e)=>{if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return unt(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new ant(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,u)=>/^(?!\/)/g.test(u)?`${u}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),u=n[n.length-1];loe(u,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])loe(n,e.removeQueryParameters)&&a.searchParams.delete(n);return e.sortQueryParameters&&a.searchParams.sort(),e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,"")),t=a.toString(),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};NO.exports=coe;NO.exports.default=coe});var poe=_((fLt,foe)=>{foe.exports=Aoe;function Aoe(t,e){if(t&&e)return Aoe(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(o){r[o]=t[o]}),r;function r(){for(var o=new Array(arguments.length),a=0;a{var hoe=poe();LO.exports=hoe(XS);LO.exports.strict=hoe(goe);XS.proto=XS(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return XS(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return goe(this)},configurable:!0})});function XS(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function goe(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var OO=_((hLt,moe)=>{var Ant=MO(),fnt=function(){},pnt=function(t){return t.setHeader&&typeof t.abort=="function"},hnt=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},doe=function(t,e,r){if(typeof e=="function")return doe(t,null,e);e||(e={}),r=Ant(r||fnt);var o=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,u=e.writable||e.writable!==!1&&t.writable,A=function(){t.writable||p()},p=function(){u=!1,n||r.call(t)},h=function(){n=!1,u||r.call(t)},E=function(C){r.call(t,C?new Error("exited with error code: "+C):null)},I=function(C){r.call(t,C)},v=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(u&&!(o&&o.ended))return r.call(t,new Error("premature close"))},b=function(){t.req.on("finish",p)};return pnt(t)?(t.on("complete",p),t.on("abort",v),t.req?b():t.on("request",b)):u&&!o&&(t.on("end",A),t.on("close",A)),hnt(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",I),t.on("close",v),function(){t.removeListener("complete",p),t.removeListener("abort",v),t.removeListener("request",b),t.req&&t.req.removeListener("finish",p),t.removeListener("end",A),t.removeListener("close",A),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",I),t.removeListener("close",v)}};moe.exports=doe});var Coe=_((gLt,Eoe)=>{var gnt=MO(),dnt=OO(),UO=Be("fs"),f1=function(){},mnt=/^v?\.0/.test(process.version),ZS=function(t){return typeof t=="function"},ynt=function(t){return!mnt||!UO?!1:(t instanceof(UO.ReadStream||f1)||t instanceof(UO.WriteStream||f1))&&ZS(t.close)},Ent=function(t){return t.setHeader&&ZS(t.abort)},Cnt=function(t,e,r,o){o=gnt(o);var a=!1;t.on("close",function(){a=!0}),dnt(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,ynt(t))return t.close(f1);if(Ent(t))return t.abort();if(ZS(t.destroy))return t.destroy();o(u||new Error("stream was destroyed"))}}},yoe=function(t){t()},wnt=function(t,e){return t.pipe(e)},Int=function(){var t=Array.prototype.slice.call(arguments),e=ZS(t[t.length-1]||f1)&&t.pop()||f1;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,o=t.map(function(a,n){var u=n0;return Cnt(a,u,A,function(p){r||(r=p),p&&o.forEach(yoe),!u&&(o.forEach(yoe),e(r))})});return t.reduce(wnt)};Eoe.exports=Int});var Ioe=_((dLt,woe)=>{"use strict";var{PassThrough:Bnt}=Be("stream");woe.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,o=r==="buffer",a=!1;e?a=!(r||o):r=r||"utf8",o&&(r=null);let n=new Bnt({objectMode:a});r&&n.setEncoding(r);let u=0,A=[];return n.on("data",p=>{A.push(p),a?u=A.length:u+=p.length}),n.getBufferedValue=()=>e?A:o?Buffer.concat(A,u):A.join(""),n.getBufferedLength=()=>u,n}});var Boe=_((mLt,BE)=>{"use strict";var vnt=Coe(),Dnt=Ioe(),$S=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function ex(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,o;return await new Promise((a,n)=>{let u=A=>{A&&(A.bufferedData=o.getBufferedValue()),n(A)};o=vnt(t,Dnt(e),A=>{if(A){u(A);return}a()}),o.on("data",()=>{o.getBufferedLength()>r&&u(new $S)})}),o.getBufferedValue()}BE.exports=ex;BE.exports.default=ex;BE.exports.buffer=(t,e)=>ex(t,{...e,encoding:"buffer"});BE.exports.array=(t,e)=>ex(t,{...e,array:!0});BE.exports.MaxBufferError=$S});var Doe=_((ELt,voe)=>{"use strict";var Pnt=new Set([200,203,204,206,300,301,404,405,410,414,501]),Snt=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),xnt=new Set([500,502,503,504]),bnt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},knt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Dd(t){let e=parseInt(t,10);return isFinite(e)?e:0}function Qnt(t){return t?xnt.has(t.status):!0}function _O(t){let e={};if(!t)return e;let r=t.trim().split(/\s*,\s*/);for(let o of r){let[a,n]=o.split(/\s*=\s*/,2);e[a]=n===void 0?!0:n.replace(/^"|"$/g,"")}return e}function Fnt(t){let e=[];for(let r in t){let o=t[r];e.push(o===!0?r:r+"="+o)}if(!!e.length)return e.join(", ")}voe.exports=class{constructor(e,r,{shared:o,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:u,_fromObject:A}={}){if(A){this._fromObject(A);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=o!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=_O(r.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=r.headers.vary?e.headers:null,this._reqcc=_O(e.headers["cache-control"]),u&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":Fnt(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),r.headers["cache-control"]==null&&/no-cache/.test(r.headers.pragma)&&(this._rescc["no-cache"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||this._method==="HEAD"||this._method==="POST"&&this._hasExplicitExpiration())&&Snt.has(this._status)&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc["max-age"]||this._isShared&&this._rescc["s-maxage"]||this._rescc.public||Pnt.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=_O(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let o of r)if(e.headers[o]!==this._reqHeaders[o])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let o in e)bnt[o]||(r[o]=e[o]);if(e.connection){let o=e.connection.trim().split(/\s*,\s*/);for(let a of o)delete r[a]}if(r.warning){let o=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));o.length?r.warning=o.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return Dd(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary==="*")return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return Dd(this._rescc["s-maxage"])}if(this._rescc["max-age"])return Dd(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let o=Date.parse(this._resHeaders.expires);return Number.isNaN(o)||oo)return Math.max(e,(r-o)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+Dd(this._rescc["stale-if-error"]),o=e+Dd(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,o)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Dd(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Dd(this._rescc["stale-while-revalidate"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||e.v!==1)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copyWithoutHopByHopHeaders(e.headers);if(delete r["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete r["if-none-match"],delete r["if-modified-since"],r;if(this._resHeaders.etag&&(r["if-none-match"]=r["if-none-match"]?`${r["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),r["accept-ranges"]||r["if-match"]||r["if-unmodified-since"]||this._method&&this._method!="GET"){if(delete r["if-modified-since"],r["if-none-match"]){let a=r["if-none-match"].split(/,/).filter(n=>!/^\s*W\//.test(n));a.length?r["if-none-match"]=a.join(",").trim():delete r["if-none-match"]}}else this._resHeaders["last-modified"]&&!r["if-modified-since"]&&(r["if-modified-since"]=this._resHeaders["last-modified"]);return r}revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Qnt(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let o=!1;if(r.status!==void 0&&r.status!=304?o=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?o=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?o=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?o=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(o=!0),!o)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let u in this._resHeaders)a[u]=u in r.headers&&!knt[u]?r.headers[u]:this._resHeaders[u];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var tx=_((CLt,Poe)=>{"use strict";Poe.exports=t=>{let e={};for(let[r,o]of Object.entries(t))e[r.toLowerCase()]=o;return e}});var xoe=_((wLt,Soe)=>{"use strict";var Tnt=Be("stream").Readable,Rnt=tx(),HO=class extends Tnt{constructor(e,r,o,a){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(o instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=Rnt(r),this.body=o,this.url=a}_read(){this.push(this.body),this.push(null)}};Soe.exports=HO});var koe=_((ILt,boe)=>{"use strict";var Nnt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];boe.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(Nnt));for(let o of r)o in e||(e[o]=typeof t[o]=="function"?t[o].bind(t):t[o])}});var Foe=_((BLt,Qoe)=>{"use strict";var Lnt=Be("stream").PassThrough,Mnt=koe(),Ont=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Lnt;return Mnt(t,e),t.pipe(e)};Qoe.exports=Ont});var Toe=_(jO=>{jO.stringify=function t(e){if(typeof e>"u")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",o=Array.isArray(e);r=o?"[":"{";var a=!0;for(var n in e){var u=typeof e[n]=="function"||!o&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!u&&(a||(r+=","),a=!1,o?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=o?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};jO.parse=function(t){return JSON.parse(t,function(e,r){return typeof r=="string"?/^:base64:/.test(r)?Buffer.from(r.substring(8),"base64"):/^:/.test(r)?r.substring(1):r:r})}});var Loe=_((DLt,Noe)=>{"use strict";var Unt=Be("events"),Roe=Toe(),_nt=t=>{let e={redis:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql"};if(t.adapter||t.uri){let r=t.adapter||/^[^:]*/.exec(t.uri)[0];return new(Be(e[r]))(t)}return new Map},qO=class extends Unt{constructor(e,r){if(super(),this.opts=Object.assign({namespace:"keyv",serialize:Roe.stringify,deserialize:Roe.parse},typeof e=="string"?{uri:e}:e,r),!this.opts.store){let o=Object.assign({},this.opts);this.opts.store=_nt(o)}typeof this.opts.store.on=="function"&&this.opts.store.on("error",o=>this.emit("error",o)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,r){e=this._getKeyPrefix(e);let{store:o}=this.opts;return Promise.resolve().then(()=>o.get(e)).then(a=>typeof a=="string"?this.opts.deserialize(a):a).then(a=>{if(a!==void 0){if(typeof a.expires=="number"&&Date.now()>a.expires){this.delete(e);return}return r&&r.raw?a:a.value}})}set(e,r,o){e=this._getKeyPrefix(e),typeof o>"u"&&(o=this.opts.ttl),o===0&&(o=void 0);let{store:a}=this.opts;return Promise.resolve().then(()=>{let n=typeof o=="number"?Date.now()+o:null;return r={value:r,expires:n},this.opts.serialize(r)}).then(n=>a.set(e,n,o)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:r}=this.opts;return Promise.resolve().then(()=>r.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};Noe.exports=qO});var Uoe=_((SLt,Ooe)=>{"use strict";var Hnt=Be("events"),rx=Be("url"),jnt=uoe(),qnt=Boe(),GO=Doe(),Moe=xoe(),Gnt=tx(),Ynt=Foe(),Wnt=Loe(),jc=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Wnt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,o)=>{let a;if(typeof r=="string")a=YO(rx.parse(r)),r={};else if(r instanceof rx.URL)a=YO(rx.parse(r.toString())),r={};else{let[I,...v]=(r.path||"").split("?"),b=v.length>0?`?${v.join("?")}`:"";a=YO({...r,pathname:I,search:b})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...Vnt(a)},r.headers=Gnt(r.headers);let n=new Hnt,u=jnt(rx.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),A=`${r.method}:${u}`,p=!1,h=!1,E=I=>{h=!0;let v=!1,b,C=new Promise(L=>{b=()=>{v||(v=!0,L())}}),T=L=>{if(p&&!I.forceRefresh){L.status=L.statusCode;let J=GO.fromObject(p.cachePolicy).revalidatedPolicy(I,L);if(!J.modified){let te=J.policy.responseHeaders();L=new Moe(p.statusCode,te,p.body,p.url),L.cachePolicy=J.policy,L.fromCache=!0}}L.fromCache||(L.cachePolicy=new GO(I,L,I),L.fromCache=!1);let U;I.cache&&L.cachePolicy.storable()?(U=Ynt(L),(async()=>{try{let J=qnt.buffer(L);if(await Promise.race([C,new Promise(Ae=>L.once("end",Ae))]),v)return;let te=await J,le={cachePolicy:L.cachePolicy.toObject(),url:L.url,statusCode:L.fromCache?p.statusCode:L.statusCode,body:te},pe=I.strictTtl?L.cachePolicy.timeToLive():void 0;I.maxTtl&&(pe=pe?Math.min(pe,I.maxTtl):I.maxTtl),await this.cache.set(A,le,pe)}catch(J){n.emit("error",new jc.CacheError(J))}})()):I.cache&&p&&(async()=>{try{await this.cache.delete(A)}catch(J){n.emit("error",new jc.CacheError(J))}})(),n.emit("response",U||L),typeof o=="function"&&o(U||L)};try{let L=e(I,T);L.once("error",b),L.once("abort",b),n.emit("request",L)}catch(L){n.emit("error",new jc.RequestError(L))}};return(async()=>{let I=async b=>{await Promise.resolve();let C=b.cache?await this.cache.get(A):void 0;if(typeof C>"u")return E(b);let T=GO.fromObject(C.cachePolicy);if(T.satisfiesWithoutRevalidation(b)&&!b.forceRefresh){let L=T.responseHeaders(),U=new Moe(C.statusCode,L,C.body,C.url);U.cachePolicy=T,U.fromCache=!0,n.emit("response",U),typeof o=="function"&&o(U)}else p=C,b.headers=T.revalidationHeaders(b),E(b)},v=b=>n.emit("error",new jc.CacheError(b));this.cache.once("error",v),n.on("response",()=>this.cache.removeListener("error",v));try{await I(r)}catch(b){r.automaticFailover&&!h&&E(r),n.emit("error",new jc.CacheError(b))}})(),n}}};function Vnt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function YO(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}jc.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};jc.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};Ooe.exports=jc});var Hoe=_((kLt,_oe)=>{"use strict";var Knt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];_oe.exports=(t,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let r=new Set(Object.keys(t).concat(Knt)),o={};for(let a of r)a in e||(o[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,o),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var qoe=_((QLt,joe)=>{"use strict";var{Transform:Jnt,PassThrough:znt}=Be("stream"),WO=Be("zlib"),Xnt=Hoe();joe.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof WO.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let o=!0,a=new Jnt({transform(A,p,h){o=!1,h(null,A)},flush(A){A()}}),n=new znt({autoDestroy:!1,destroy(A,p){t.destroy(),p(A)}}),u=r?WO.createBrotliDecompress():WO.createUnzip();return u.once("error",A=>{if(o&&!t.readable){n.end();return}n.destroy(A)}),Xnt(t,n),t.pipe(a).pipe(u).pipe(n),n}});var KO=_((FLt,Goe)=>{"use strict";var VO=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[o,a]of this.oldCache.entries())this.onEviction(o,a);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};Goe.exports=VO});var zO=_((TLt,Koe)=>{"use strict";var Znt=Be("events"),$nt=Be("tls"),eit=Be("http2"),tit=KO(),ea=Symbol("currentStreamsCount"),Yoe=Symbol("request"),Wl=Symbol("cachedOriginSet"),vE=Symbol("gracefullyClosing"),rit=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],nit=(t,e,r)=>{let o=0,a=t.length;for(;o>>1;r(t[n],e)?o=n+1:a=n}return o},iit=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,JO=(t,e)=>{for(let r of t)r[Wl].lengthe[Wl].includes(o))&&r[ea]+e[ea]<=e.remoteSettings.maxConcurrentStreams&&Voe(r)},sit=(t,e)=>{for(let r of t)e[Wl].lengthr[Wl].includes(o))&&e[ea]+r[ea]<=r.remoteSettings.maxConcurrentStreams&&Voe(e)},Woe=({agent:t,isFree:e})=>{let r={};for(let o in t.sessions){let n=t.sessions[o].filter(u=>{let A=u[tA.kCurrentStreamsCount]{t[vE]=!0,t[ea]===0&&t.close()},tA=class extends Znt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:o=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=o,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new tit({maxSize:a})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let o of rit)e[o]&&(r+=`:${e[o]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let o=this.queue[e][r];this._sessionsCount{Array.isArray(o)?(o=[...o],a()):o=[{resolve:a,reject:n}];let u=this.normalizeOptions(r),A=tA.normalizeOrigin(e,r&&r.servername);if(A===void 0){for(let{reject:E}of o)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(u in this.sessions){let E=this.sessions[u],I=-1,v=-1,b;for(let C of E){let T=C.remoteSettings.maxConcurrentStreams;if(T=T||C[vE]||C.destroyed)continue;b||(I=T),L>v&&(b=C,v=L)}}if(b){if(o.length!==1){for(let{reject:C}of o){let T=new Error(`Expected the length of listeners to be 1, got ${o.length}. -Please report this to https://github.com/szmarczak/http2-wrapper/`);C(T)}return}o[0].resolve(b);return}}if(u in this.queue){if(A in this.queue[u]){this.queue[u][A].listeners.push(...o),this._tryToCreateNewSession(u,A);return}}else this.queue[u]={};let p=()=>{u in this.queue&&this.queue[u][A]===h&&(delete this.queue[u][A],Object.keys(this.queue[u]).length===0&&delete this.queue[u])},h=()=>{let E=`${A}:${u}`,I=!1;try{let v=eit.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});v[ea]=0,v[vE]=!1;let b=()=>v[ea]{this.tlsSessionCache.set(E,L)}),v.once("error",L=>{for(let{reject:U}of o)U(L);this.tlsSessionCache.delete(E)}),v.setTimeout(this.timeout,()=>{v.destroy()}),v.once("close",()=>{if(I){C&&this._freeSessionsCount--,this._sessionsCount--;let L=this.sessions[u];L.splice(L.indexOf(v),1),L.length===0&&delete this.sessions[u]}else{let L=new Error("Session closed without receiving a SETTINGS frame");L.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of o)U(L);p()}this._tryToCreateNewSession(u,A)});let T=()=>{if(!(!(u in this.queue)||!b())){for(let L of v[Wl])if(L in this.queue[u]){let{listeners:U}=this.queue[u][L];for(;U.length!==0&&b();)U.shift().resolve(v);let J=this.queue[u];if(J[L].listeners.length===0&&(delete J[L],Object.keys(J).length===0)){delete this.queue[u];break}if(!b())break}}};v.on("origin",()=>{v[Wl]=v.originSet,b()&&(T(),JO(this.sessions[u],v))}),v.once("remoteSettings",()=>{if(v.ref(),v.unref(),this._sessionsCount++,h.destroyed){let L=new Error("Agent has been destroyed");for(let U of o)U.reject(L);v.destroy();return}v[Wl]=v.originSet;{let L=this.sessions;if(u in L){let U=L[u];U.splice(nit(U,v,iit),0,v)}else L[u]=[v]}this._freeSessionsCount+=1,I=!0,this.emit("session",v),T(),p(),v[ea]===0&&this._freeSessionsCount>this.maxFreeSessions&&v.close(),o.length!==0&&(this.getSession(A,r,o),o.length=0),v.on("remoteSettings",()=>{T(),JO(this.sessions[u],v)})}),v[Yoe]=v.request,v.request=(L,U)=>{if(v[vE])throw new Error("The session is gracefully closing. No new streams are allowed.");let J=v[Yoe](L,U);return v.ref(),++v[ea],v[ea]===v.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,J.once("close",()=>{if(C=b(),--v[ea],!v.destroyed&&!v.closed&&(sit(this.sessions[u],v),b()&&!v.closed)){C||(this._freeSessionsCount++,C=!0);let te=v[ea]===0;te&&v.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||v[vE])?v.close():(JO(this.sessions[u],v),T())}}),J}}catch(v){for(let b of o)b.reject(v);p()}};h.listeners=o,h.completed=!1,h.destroyed=!1,this.queue[u][A]=h,this._tryToCreateNewSession(u,A)})}request(e,r,o,a){return new Promise((n,u)=>{this.getSession(e,r,[{reject:u,resolve:A=>{try{n(A.request(o,a))}catch(p){u(p)}}}])})}createConnection(e,r){return tA.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let o=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),$nt.connect(o,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ea]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let o of r)o.destroy(e);for(let r of Object.values(this.queue))for(let o of Object.values(r))o.destroyed=!0;this.queue={}}get freeSessions(){return Woe({agent:this,isFree:!0})}get busySessions(){return Woe({agent:this,isFree:!1})}};tA.kCurrentStreamsCount=ea;tA.kGracefullyClosing=vE;Koe.exports={Agent:tA,globalAgent:new tA}});var ZO=_((RLt,Joe)=>{"use strict";var{Readable:oit}=Be("stream"),XO=class extends oit{constructor(e,r){super({highWaterMark:r,autoDestroy:!1}),this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,r){return this.req.setTimeout(e,r),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}};Joe.exports=XO});var $O=_((NLt,zoe)=>{"use strict";zoe.exports=t=>{let e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return typeof t.port=="string"&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var Zoe=_((LLt,Xoe)=>{"use strict";Xoe.exports=(t,e,r)=>{for(let o of r)t.on(o,(...a)=>e.emit(o,...a))}});var eae=_((MLt,$oe)=>{"use strict";$oe.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var rae=_((ULt,tae)=>{"use strict";var DE=(t,e,r)=>{tae.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};DE(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],o=Array.isArray(r);return o&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${o?"one of":"of"} type ${r}. Received ${typeof t[2]}`});DE(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);DE(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);DE(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);DE(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);DE(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var i4=_((_Lt,cae)=>{"use strict";var ait=Be("http2"),{Writable:lit}=Be("stream"),{Agent:nae,globalAgent:cit}=zO(),uit=ZO(),Ait=$O(),fit=Zoe(),pit=eae(),{ERR_INVALID_ARG_TYPE:e4,ERR_INVALID_PROTOCOL:hit,ERR_HTTP_HEADERS_SENT:iae,ERR_INVALID_HTTP_TOKEN:git,ERR_HTTP_INVALID_HEADER_VALUE:dit,ERR_INVALID_CHAR:mit}=rae(),{HTTP2_HEADER_STATUS:sae,HTTP2_HEADER_METHOD:oae,HTTP2_HEADER_PATH:aae,HTTP2_METHOD_CONNECT:yit}=ait.constants,Qo=Symbol("headers"),t4=Symbol("origin"),r4=Symbol("session"),lae=Symbol("options"),nx=Symbol("flushedHeaders"),p1=Symbol("jobs"),Eit=/^[\^`\-\w!#$%&*+.|~]+$/,Cit=/[^\t\u0020-\u007E\u0080-\u00FF]/,n4=class extends lit{constructor(e,r,o){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=Ait(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(o=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[r4]=r.h2session;else if(r.agent===!1)this.agent=new nae({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new nae({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=cit;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new e4("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new hit(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,u=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:A}=r;if(r.timeout=void 0,this[Qo]=Object.create(null),this[p1]=[],this.socket=null,this.connection=null,this.method=r.method||"GET",this.path=r.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,r.headers)for(let[p,h]of Object.entries(r.headers))this.setHeader(p,h);r.auth&&!("authorization"in this[Qo])&&(this[Qo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[lae]=r,n===443?(this[t4]=`https://${u}`,":authority"in this[Qo]||(this[Qo][":authority"]=u)):(this[t4]=`https://${u}:${n}`,":authority"in this[Qo]||(this[Qo][":authority"]=`${u}:${n}`)),A&&this.setTimeout(A),o&&this.once("response",o),this[nx]=!1}get method(){return this[Qo][oae]}set method(e){e&&(this[Qo][oae]=e.toUpperCase())}get path(){return this[Qo][aae]}set path(e){e&&(this[Qo][aae]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,o){if(this._mustNotHaveABody){o(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,o);this._request?a():this[p1].push(a)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[p1].push(r)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.destroy(),r(e)}async flushHeaders(){if(this[nx]||this.destroyed)return;this[nx]=!0;let e=this.method===yit,r=o=>{if(this._request=o,this.destroyed){o.destroy();return}e||fit(o,this,["timeout","continue","close","error"]);let a=u=>(...A)=>{!this.writable&&!this.destroyed?u(...A):this.once("finish",()=>{u(...A)})};o.once("response",a((u,A,p)=>{let h=new uit(this.socket,o.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=u[sae],h.headers=u,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,o,Buffer.alloc(0))?this.emit("close"):o.destroy()):(o.on("data",E=>{!h._dumped&&!h.push(E)&&o.pause()}),o.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),o.once("headers",a(u=>this.emit("information",{statusCode:u[sae]}))),o.once("trailers",a((u,A,p)=>{let{res:h}=this;h.trailers=u,h.rawTrailers=p}));let{socket:n}=o.session;this.socket=n,this.connection=n;for(let u of this[p1])u();this.emit("socket",this.socket)};if(this[r4])try{r(this[r4].request(this[Qo]))}catch(o){this.emit("error",o)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[t4],this[lae],this[Qo]))}catch(o){this.emit("error",o)}}}getHeader(e){if(typeof e!="string")throw new e4("name","string",e);return this[Qo][e.toLowerCase()]}get headersSent(){return this[nx]}removeHeader(e){if(typeof e!="string")throw new e4("name","string",e);if(this.headersSent)throw new iae("remove");delete this[Qo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new iae("set");if(typeof e!="string"||!Eit.test(e)&&!pit(e))throw new git("Header name",e);if(typeof r>"u")throw new dit(r,e);if(Cit.test(r))throw new mit("header content",e);this[Qo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let o=()=>this._request.setTimeout(e,r);return this._request?o():this[p1].push(o),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};cae.exports=n4});var Aae=_((HLt,uae)=>{"use strict";var wit=Be("tls");uae.exports=(t={})=>new Promise((e,r)=>{let o=wit.connect(t,()=>{t.resolveSocket?(o.off("error",r),e({alpnProtocol:o.alpnProtocol,socket:o})):(o.destroy(),e({alpnProtocol:o.alpnProtocol}))});o.on("error",r)})});var pae=_((jLt,fae)=>{"use strict";var Iit=Be("net");fae.exports=t=>{let e=t.host,r=t.headers&&t.headers.host;return r&&(r.startsWith("[")?r.indexOf("]")===-1?e=r:e=r.slice(1,-1):e=r.split(":",1)[0]),Iit.isIP(e)?"":e}});var dae=_((qLt,o4)=>{"use strict";var hae=Be("http"),s4=Be("https"),Bit=Aae(),vit=KO(),Dit=i4(),Pit=pae(),Sit=$O(),ix=new vit({maxSize:100}),h1=new Map,gae=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let o=()=>{t.emit("free",e,r)};e.on("free",o);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",o),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},xit=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!ix.has(e)){if(h1.has(e))return(await h1.get(e)).alpnProtocol;let{path:r,agent:o}=t;t.path=t.socketPath;let a=Bit(t);h1.set(e,a);try{let{socket:n,alpnProtocol:u}=await a;if(ix.set(e,u),t.path=r,u==="h2")n.destroy();else{let{globalAgent:A}=s4,p=s4.Agent.prototype.createConnection;o?o.createConnection===p?gae(o,n,t):n.destroy():A.createConnection===p?gae(A,n,t):n.destroy()}return h1.delete(e),u}catch(n){throw h1.delete(e),n}}return ix.get(e)};o4.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=Sit(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={ALPNProtocols:["h2","http/1.1"],...t,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let o=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||Pit(e),e.port=e.port||(o?443:80),e._defaultAgent=o?s4.globalAgent:hae.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[o?"https":"http"]}return o&&await xit(e)==="h2"?(a&&(e.agent=a.http2),new Dit(e,r)):hae.request(e,r)};o4.exports.protocolCache=ix});var yae=_((GLt,mae)=>{"use strict";var bit=Be("http2"),kit=zO(),a4=i4(),Qit=ZO(),Fit=dae(),Tit=(t,e,r)=>new a4(t,e,r),Rit=(t,e,r)=>{let o=new a4(t,e,r);return o.end(),o};mae.exports={...bit,ClientRequest:a4,IncomingMessage:Qit,...kit,request:Tit,get:Rit,auto:Fit}});var c4=_(l4=>{"use strict";Object.defineProperty(l4,"__esModule",{value:!0});var Eae=Tf();l4.default=t=>Eae.default.nodeStream(t)&&Eae.default.function_(t.getBoundary)});var Bae=_(u4=>{"use strict";Object.defineProperty(u4,"__esModule",{value:!0});var wae=Be("fs"),Iae=Be("util"),Cae=Tf(),Nit=c4(),Lit=Iae.promisify(wae.stat);u4.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(Cae.default.string(t))return Buffer.byteLength(t);if(Cae.default.buffer(t))return t.length;if(Nit.default(t))return Iae.promisify(t.getLength.bind(t))();if(t instanceof wae.ReadStream){let{size:r}=await Lit(t.path);return r===0?void 0:r}}});var f4=_(A4=>{"use strict";Object.defineProperty(A4,"__esModule",{value:!0});function Mit(t,e,r){let o={};for(let a of r)o[a]=(...n)=>{e.emit(a,...n)},t.on(a,o[a]);return()=>{for(let a of r)t.off(a,o[a])}}A4.default=Mit});var vae=_(p4=>{"use strict";Object.defineProperty(p4,"__esModule",{value:!0});p4.default=()=>{let t=[];return{once(e,r,o){e.once(r,o),t.push({origin:e,event:r,fn:o})},unhandleAll(){for(let e of t){let{origin:r,event:o,fn:a}=e;r.removeListener(o,a)}t.length=0}}}});var Pae=_(g1=>{"use strict";Object.defineProperty(g1,"__esModule",{value:!0});g1.TimeoutError=void 0;var Oit=Be("net"),Uit=vae(),Dae=Symbol("reentry"),_it=()=>{},sx=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};g1.TimeoutError=sx;g1.default=(t,e,r)=>{if(Dae in t)return _it;t[Dae]=!0;let o=[],{once:a,unhandleAll:n}=Uit.default(),u=(I,v,b)=>{var C;let T=setTimeout(v,I,I,b);(C=T.unref)===null||C===void 0||C.call(T);let L=()=>{clearTimeout(T)};return o.push(L),L},{host:A,hostname:p}=r,h=(I,v)=>{t.destroy(new sx(I,v))},E=()=>{for(let I of o)I();n()};if(t.once("error",I=>{if(E(),t.listenerCount("error")===0)throw I}),t.once("close",E),a(t,"response",I=>{a(I,"end",E)}),typeof e.request<"u"&&u(e.request,h,"request"),typeof e.socket<"u"){let I=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,I),o.push(()=>{t.removeListener("timeout",I)})}return a(t,"socket",I=>{var v;let{socketPath:b}=t;if(I.connecting){let C=Boolean(b??Oit.isIP((v=p??A)!==null&&v!==void 0?v:"")!==0);if(typeof e.lookup<"u"&&!C&&typeof I.address().address>"u"){let T=u(e.lookup,h,"lookup");a(I,"lookup",T)}if(typeof e.connect<"u"){let T=()=>u(e.connect,h,"connect");C?a(I,"connect",T()):a(I,"lookup",L=>{L===null&&a(I,"connect",T())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(I,"connect",()=>{let T=u(e.secureConnect,h,"secureConnect");a(I,"secureConnect",T)})}if(typeof e.send<"u"){let C=()=>u(e.send,h,"send");I.connecting?a(I,"connect",()=>{a(t,"upload-complete",C())}):a(t,"upload-complete",C())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let I=u(e.response,h,"response");a(t,"response",I)}),E}});var xae=_(h4=>{"use strict";Object.defineProperty(h4,"__esModule",{value:!0});var Sae=Tf();h4.default=t=>{t=t;let e={protocol:t.protocol,hostname:Sae.default.string(t.hostname)&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return Sae.default.string(t.port)&&t.port.length>0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var bae=_(g4=>{"use strict";Object.defineProperty(g4,"__esModule",{value:!0});var Hit=Be("url"),jit=["protocol","host","hostname","port","pathname","search"];g4.default=(t,e)=>{var r,o;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(o=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&o!==void 0?o:""}`}let a=new Hit.URL(t);if(e.path){let n=e.path.indexOf("?");n===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,n),e.search=e.path.slice(n+1)),delete e.path}for(let n of jit)e[n]&&(a[n]=e[n].toString());return a}});var kae=_(m4=>{"use strict";Object.defineProperty(m4,"__esModule",{value:!0});var d4=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}};m4.default=d4});var E4=_(y4=>{"use strict";Object.defineProperty(y4,"__esModule",{value:!0});var qit=async t=>{let e=[],r=0;for await(let o of t)e.push(o),r+=Buffer.byteLength(o);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};y4.default=qit});var Fae=_(Pd=>{"use strict";Object.defineProperty(Pd,"__esModule",{value:!0});Pd.dnsLookupIpVersionToFamily=Pd.isDnsLookupIpVersion=void 0;var Qae={auto:0,ipv4:4,ipv6:6};Pd.isDnsLookupIpVersion=t=>t in Qae;Pd.dnsLookupIpVersionToFamily=t=>{if(Pd.isDnsLookupIpVersion(t))return Qae[t];throw new Error("Invalid DNS lookup IP version")}});var C4=_(ox=>{"use strict";Object.defineProperty(ox,"__esModule",{value:!0});ox.isResponseOk=void 0;ox.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var Rae=_(w4=>{"use strict";Object.defineProperty(w4,"__esModule",{value:!0});var Tae=new Set;w4.default=t=>{Tae.has(t)||(Tae.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var Nae=_(I4=>{"use strict";Object.defineProperty(I4,"__esModule",{value:!0});var Ai=Tf(),Git=(t,e)=>{if(Ai.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Ai.assert.any([Ai.default.string,Ai.default.undefined],t.encoding),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.resolveBodyOnly),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.methodRewriting),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.isStream),Ai.assert.any([Ai.default.string,Ai.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:o=>o.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Ai.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(o=>o.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Ai.default.number(r)&&(t.retry.limit=r),Ai.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Ai.default.number))),Ai.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:o}=t;if(!Ai.default.function_(o.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Ai.default.function_(o.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Ai.default.function_(o.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Ai.default.function_(o.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};I4.default=Git});var Lae=_(d1=>{"use strict";Object.defineProperty(d1,"__esModule",{value:!0});d1.retryAfterStatusCodes=void 0;d1.retryAfterStatusCodes=new Set([413,429,503]);var Yit=({attemptCount:t,retryOptions:e,error:r,retryAfter:o})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),u=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!u)return 0;if(r.response){if(o)return e.maxRetryAfter===void 0||o>e.maxRetryAfter?0:o;if(r.response.statusCode===413)return 0}let A=Math.random()*100;return 2**(t-1)*1e3+A};d1.default=Yit});var E1=_(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.UnsupportedProtocolError=Bn.ReadError=Bn.TimeoutError=Bn.UploadError=Bn.CacheError=Bn.HTTPError=Bn.MaxRedirectsError=Bn.RequestError=Bn.setNonEnumerableProperties=Bn.knownHookEvents=Bn.withoutBody=Bn.kIsNormalizedAlready=void 0;var Mae=Be("util"),Oae=Be("stream"),Wit=Be("fs"),oh=Be("url"),Uae=Be("http"),B4=Be("http"),Vit=Be("https"),Kit=eoe(),Jit=aoe(),_ae=Uoe(),zit=qoe(),Xit=yae(),Zit=tx(),st=Tf(),$it=Bae(),Hae=c4(),est=f4(),jae=Pae(),tst=xae(),qae=bae(),rst=kae(),nst=E4(),Gae=Fae(),ist=C4(),ah=Rae(),sst=Nae(),ost=Lae(),v4,Zs=Symbol("request"),cx=Symbol("response"),PE=Symbol("responseSize"),SE=Symbol("downloadedSize"),xE=Symbol("bodySize"),bE=Symbol("uploadedSize"),ax=Symbol("serverResponsesPiped"),Yae=Symbol("unproxyEvents"),Wae=Symbol("isFromCache"),D4=Symbol("cancelTimeouts"),Vae=Symbol("startedReading"),kE=Symbol("stopReading"),lx=Symbol("triggerRead"),lh=Symbol("body"),m1=Symbol("jobs"),Kae=Symbol("originalResponse"),Jae=Symbol("retryTimeout");Bn.kIsNormalizedAlready=Symbol("isNormalizedAlready");var ast=st.default.string(process.versions.brotli);Bn.withoutBody=new Set(["GET","HEAD"]);Bn.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function lst(t){for(let e in t){let r=t[e];if(!st.default.string(r)&&!st.default.number(r)&&!st.default.boolean(r)&&!st.default.null_(r)&&!st.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function cst(t){return st.default.object(t)&&!("statusCode"in t)}var P4=new rst.default,ust=async t=>new Promise((e,r)=>{let o=a=>{r(a)};t.pending||e(),t.once("error",o),t.once("ready",()=>{t.off("error",o),e()})}),Ast=new Set([300,301,302,303,304,307,308]),fst=["context","body","json","form"];Bn.setNonEnumerableProperties=(t,e)=>{let r={};for(let o of t)if(!!o)for(let a of fst)a in o&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:o[a]});Object.defineProperties(e,r)};var Ki=class extends Error{constructor(e,r,o){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,o instanceof dx?(Object.defineProperty(this,"request",{enumerable:!1,value:o}),Object.defineProperty(this,"response",{enumerable:!1,value:o[cx]}),Object.defineProperty(this,"options",{enumerable:!1,value:o.options})):Object.defineProperty(this,"options",{enumerable:!1,value:o}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,st.default.string(r.stack)&&st.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,u=this.stack.slice(n).split(` +`,a)}while(o!==-1);return n+=t.substr(a),n};yX.exports={stringReplaceAll:b9e,stringEncaseCRLFWithFirstIndex:x9e}});var vX=_((TQt,BX)=>{"use strict";var k9e=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,CX=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,Q9e=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,F9e=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,R9e=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function IX(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):R9e.get(t)||t}function T9e(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(Q9e))r.push(a[2].replace(F9e,(A,p,h)=>p?IX(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function N9e(t){CX.lastIndex=0;let e=[],r;for(;(r=CX.exec(t))!==null;){let o=r[1];if(r[2]){let a=T9e(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function wX(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}BX.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(k9e,(n,u,A,p,h,E)=>{if(u)a.push(IX(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:wX(t,r)(I)),r.push({inverse:A,styles:N9e(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(wX(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var IN=_((NQt,bX)=>{"use strict";var SI=DI(),{stdout:yN,stderr:EN}=dN(),{stringReplaceAll:L9e,stringEncaseCRLFWithFirstIndex:O9e}=EX(),DX=["ansi","ansi","ansi256","ansi16m"],Fy=Object.create(null),M9e=(t,e={})=>{if(e.level>3||e.level<0)throw new Error("The `level` option should be an integer from 0 to 3");let r=yN?yN.level:0;t.level=e.level===void 0?r:e.level},CN=class{constructor(e){return SX(e)}},SX=t=>{let e={};return M9e(e,t),e.template=(...r)=>H9e(e.template,...r),Object.setPrototypeOf(e,bS.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=CN,e.template};function bS(t){return SX(t)}for(let[t,e]of Object.entries(SI))Fy[t]={get(){let r=xS(this,wN(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Fy.visible={get(){let t=xS(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var PX=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of PX)Fy[t]={get(){let{level:e}=this;return function(...r){let o=wN(SI.color[DX[e]][t](...r),SI.color.close,this._styler);return xS(this,o,this._isEmpty)}}};for(let t of PX){let e="bg"+t[0].toUpperCase()+t.slice(1);Fy[e]={get(){let{level:r}=this;return function(...o){let a=wN(SI.bgColor[DX[r]][t](...o),SI.bgColor.close,this._styler);return xS(this,a,this._isEmpty)}}}}var U9e=Object.defineProperties(()=>{},{...Fy,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),wN=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},xS=(t,e,r)=>{let o=(...a)=>_9e(o,a.length===1?""+a[0]:a.join(" "));return o.__proto__=U9e,o._generator=t,o._styler=e,o._isEmpty=r,o},_9e=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=L9e(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=O9e(e,a,o,n)),o+e+a},mN,H9e=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";Ul.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Ul.find=(t,e)=>t.nodes.find(r=>r.type===e);Ul.exceedsLimit=(t,e,r=1,o)=>o===!1||!Ul.isInteger(t)||!Ul.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=o;Ul.escapeNode=(t,e=0,r)=>{let o=t.nodes[e];!o||(r&&o.type===r||o.type==="open"||o.type==="close")&&o.escaped!==!0&&(o.value="\\"+o.value,o.escaped=!0)};Ul.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Ul.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;Ul.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Ul.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Ul.flatten=(...t)=>{let e=[],r=o=>{for(let a=0;a{"use strict";var xX=kS();kX.exports=(t,e={})=>{let r=(o,a={})=>{let n=e.escapeInvalid&&xX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A="";if(o.value)return(n||u)&&xX.isOpenOrClose(o)?"\\"+o.value:o.value;if(o.value)return o.value;if(o.nodes)for(let p of o.nodes)A+=r(p);return A};return r(t)}});var FX=_((MQt,QX)=>{"use strict";QX.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var HX=_((UQt,_X)=>{"use strict";var RX=FX(),Ad=(t,e,r)=>{if(RX(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(RX(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};typeof o.strictZeros=="boolean"&&(o.relaxZeros=o.strictZeros===!1);let a=String(o.relaxZeros),n=String(o.shorthand),u=String(o.capture),A=String(o.wrap),p=t+":"+e+"="+a+n+u+A;if(Ad.cache.hasOwnProperty(p))return Ad.cache[p].result;let h=Math.min(t,e),E=Math.max(t,e);if(Math.abs(h-E)===1){let R=t+"|"+e;return o.capture?`(${R})`:o.wrap===!1?R:`(?:${R})`}let I=UX(t)||UX(e),v={min:t,max:e,a:h,b:E},x=[],C=[];if(I&&(v.isPadded=I,v.maxLen=String(v.max).length),h<0){let R=E<0?Math.abs(E):1;C=TX(R,Math.abs(h),v,o),h=v.a=0}return E>=0&&(x=TX(h,E,v,o)),v.negatives=C,v.positives=x,v.result=q9e(C,x,o),o.capture===!0?v.result=`(${v.result})`:o.wrap!==!1&&x.length+C.length>1&&(v.result=`(?:${v.result})`),Ad.cache[p]=v,v.result};function q9e(t,e,r){let o=BN(t,e,"-",!1,r)||[],a=BN(e,t,"",!1,r)||[],n=BN(t,e,"-?",!0,r)||[];return o.concat(n).concat(a).join("|")}function j9e(t,e){let r=1,o=1,a=LX(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=LX(t,r);for(a=OX(e+1,o)-1;t1&&A.count.pop(),A.count.push(E.count[0]),A.string=A.pattern+MX(A.count),u=h+1;continue}r.isPadded&&(I=V9e(h,r,o)),E.string=I+E.pattern+MX(E.count),n.push(E),u=h+1,A=E}return n}function BN(t,e,r,o,a){let n=[];for(let u of t){let{string:A}=u;!o&&!NX(e,"string",A)&&n.push(r+A),o&&NX(e,"string",A)&&n.push(r+A)}return n}function Y9e(t,e){let r=[];for(let o=0;oe?1:e>t?-1:0}function NX(t,e,r){return t.some(o=>o[e]===r)}function LX(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function OX(t,e){return t-t%Math.pow(10,e)}function MX(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function K9e(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function UX(t){return/^-?(0+)\d/.test(t)}function V9e(t,e,r){if(!e.isPadded)return t;let o=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(o){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${o}}`:`0{${o}}`}}Ad.cache={};Ad.clearCache=()=>Ad.cache={};_X.exports=Ad});var SN=_((_Qt,JX)=>{"use strict";var J9e=ve("util"),GX=HX(),qX=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),z9e=t=>e=>t===!0?Number(e):String(e),vN=t=>typeof t=="number"||typeof t=="string"&&t!=="",bI=t=>Number.isInteger(+t),DN=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},X9e=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,Z9e=(t,e,r)=>{if(e>0){let o=t[0]==="-"?"-":"";o&&(t=t.slice(1)),t=o+t.padStart(o?e-1:e,"0")}return r===!1?String(t):t},jX=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((u,A)=>uA?1:0),t.positives.sort((u,A)=>uA?1:0);let r=e.capture?"":"?:",o="",a="",n;return t.positives.length&&(o=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),o&&a?n=`${o}|${a}`:n=o||a,e.wrap?`(${r}${n})`:n},YX=(t,e,r,o)=>{if(r)return GX(t,e,{wrap:!1,...o});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},WX=(t,e,r)=>{if(Array.isArray(t)){let o=r.wrap===!0,a=r.capture?"":"?:";return o?`(${a}${t.join("|")})`:t.join("|")}return GX(t,e,r)},KX=(...t)=>new RangeError("Invalid range arguments: "+J9e.inspect(...t)),VX=(t,e,r)=>{if(r.strictRanges===!0)throw KX([t,e]);return[]},e7e=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},t7e=(t,e,r=1,o={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(o.strictRanges===!0)throw KX([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let u=a>n,A=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=DN(A)||DN(p)||DN(h),I=E?Math.max(A.length,p.length,h.length):0,v=E===!1&&X9e(t,e,o)===!1,x=o.transform||z9e(v);if(o.toRegex&&r===1)return YX(jX(t,I),jX(e,I),!0,o);let C={negatives:[],positives:[]},R=J=>C[J<0?"negatives":"positives"].push(Math.abs(J)),L=[],U=0;for(;u?a>=n:a<=n;)o.toRegex===!0&&r>1?R(a):L.push(Z9e(x(a,U),I,v)),a=u?a-r:a+r,U++;return o.toRegex===!0?r>1?$9e(C,o):WX(L,null,{wrap:!1,...o}):L},r7e=(t,e,r=1,o={})=>{if(!bI(t)&&t.length>1||!bI(e)&&e.length>1)return VX(t,e,o);let a=o.transform||(v=>String.fromCharCode(v)),n=`${t}`.charCodeAt(0),u=`${e}`.charCodeAt(0),A=n>u,p=Math.min(n,u),h=Math.max(n,u);if(o.toRegex&&r===1)return YX(p,h,!1,o);let E=[],I=0;for(;A?n>=u:n<=u;)E.push(a(n,I)),n=A?n-r:n+r,I++;return o.toRegex===!0?WX(E,null,{wrap:!1,options:o}):E},RS=(t,e,r,o={})=>{if(e==null&&vN(t))return[t];if(!vN(t)||!vN(e))return VX(t,e,o);if(typeof r=="function")return RS(t,e,1,{transform:r});if(qX(r))return RS(t,e,0,r);let a={...o};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,bI(r)?bI(t)&&bI(e)?t7e(t,e,r,a):r7e(t,e,Math.max(Math.abs(r),1),a):r!=null&&!qX(r)?e7e(r,a):RS(t,e,1,r)};JX.exports=RS});var ZX=_((HQt,XX)=>{"use strict";var n7e=SN(),zX=kS(),i7e=(t,e={})=>{let r=(o,a={})=>{let n=zX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A=n===!0||u===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(o.isOpen===!0||o.isClose===!0)return p+o.value;if(o.type==="open")return A?p+o.value:"(";if(o.type==="close")return A?p+o.value:")";if(o.type==="comma")return o.prev.type==="comma"?"":A?o.value:"|";if(o.value)return o.value;if(o.nodes&&o.ranges>0){let E=zX.reduce(o.nodes),I=n7e(...E,{...e,wrap:!1,toRegex:!0});if(I.length!==0)return E.length>1&&I.length>1?`(${I})`:I}if(o.nodes)for(let E of o.nodes)h+=r(E,o);return h};return r(t)};XX.exports=i7e});var tZ=_((qQt,eZ)=>{"use strict";var s7e=SN(),$X=QS(),Ry=kS(),fd=(t="",e="",r=!1)=>{let o=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Ry.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)o.push(fd(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),o.push(Array.isArray(n)?fd(a,n,r):a+n);return Ry.flatten(o)},o7e=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,o=(a,n={})=>{a.queue=[];let u=n,A=n.queue;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,A=u.queue;if(a.invalid||a.dollar){A.push(fd(A.pop(),$X(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){A.push(fd(A.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let I=Ry.reduce(a.nodes);if(Ry.exceedsLimit(...I,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let v=s7e(...I,e);v.length===0&&(v=$X(a,e)),A.push(fd(A.pop(),v)),a.nodes=[];return}let p=Ry.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let I=0;I{"use strict";rZ.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` +`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var lZ=_((GQt,aZ)=>{"use strict";var a7e=QS(),{MAX_LENGTH:iZ,CHAR_BACKSLASH:PN,CHAR_BACKTICK:l7e,CHAR_COMMA:c7e,CHAR_DOT:u7e,CHAR_LEFT_PARENTHESES:A7e,CHAR_RIGHT_PARENTHESES:f7e,CHAR_LEFT_CURLY_BRACE:p7e,CHAR_RIGHT_CURLY_BRACE:h7e,CHAR_LEFT_SQUARE_BRACKET:sZ,CHAR_RIGHT_SQUARE_BRACKET:oZ,CHAR_DOUBLE_QUOTE:g7e,CHAR_SINGLE_QUOTE:d7e,CHAR_NO_BREAK_SPACE:m7e,CHAR_ZERO_WIDTH_NOBREAK_SPACE:y7e}=nZ(),E7e=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},o=typeof r.maxLength=="number"?Math.min(iZ,r.maxLength):iZ;if(t.length>o)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${o})`);let a={type:"root",input:t,nodes:[]},n=[a],u=a,A=a,p=0,h=t.length,E=0,I=0,v,x={},C=()=>t[E++],R=L=>{if(L.type==="text"&&A.type==="dot"&&(A.type="text"),A&&A.type==="text"&&L.type==="text"){A.value+=L.value;return}return u.nodes.push(L),L.parent=u,L.prev=A,A=L,L};for(R({type:"bos"});E0){if(u.ranges>0){u.ranges=0;let L=u.nodes.shift();u.nodes=[L,{type:"text",value:a7e(u)}]}R({type:"comma",value:v}),u.commas++;continue}if(v===u7e&&I>0&&u.commas===0){let L=u.nodes;if(I===0||L.length===0){R({type:"text",value:v});continue}if(A.type==="dot"){if(u.range=[],A.value+=v,A.type="range",u.nodes.length!==3&&u.nodes.length!==5){u.invalid=!0,u.ranges=0,A.type="text";continue}u.ranges++,u.args=[];continue}if(A.type==="range"){L.pop();let U=L[L.length-1];U.value+=A.value+v,A=U,u.ranges--;continue}R({type:"dot",value:v});continue}R({type:"text",value:v})}do if(u=n.pop(),u.type!=="root"){u.nodes.forEach(J=>{J.nodes||(J.type==="open"&&(J.isOpen=!0),J.type==="close"&&(J.isClose=!0),J.nodes||(J.type="text"),J.invalid=!0)});let L=n[n.length-1],U=L.nodes.indexOf(u);L.nodes.splice(U,1,...u.nodes)}while(n.length>0);return R({type:"eos"}),a};aZ.exports=E7e});var AZ=_((YQt,uZ)=>{"use strict";var cZ=QS(),C7e=ZX(),w7e=tZ(),I7e=lZ(),rl=(t,e={})=>{let r=[];if(Array.isArray(t))for(let o of t){let a=rl.create(o,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(rl.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};rl.parse=(t,e={})=>I7e(t,e);rl.stringify=(t,e={})=>cZ(typeof t=="string"?rl.parse(t,e):t,e);rl.compile=(t,e={})=>(typeof t=="string"&&(t=rl.parse(t,e)),C7e(t,e));rl.expand=(t,e={})=>{typeof t=="string"&&(t=rl.parse(t,e));let r=w7e(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};rl.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?rl.compile(t,e):rl.expand(t,e);uZ.exports=rl});var xI=_((WQt,dZ)=>{"use strict";var B7e=ve("path"),Ku="\\\\/",fZ=`[^${Ku}]`,vf="\\.",v7e="\\+",D7e="\\?",TS="\\/",S7e="(?=.)",pZ="[^/]",bN=`(?:${TS}|$)`,hZ=`(?:^|${TS})`,xN=`${vf}{1,2}${bN}`,P7e=`(?!${vf})`,b7e=`(?!${hZ}${xN})`,x7e=`(?!${vf}{0,1}${bN})`,k7e=`(?!${xN})`,Q7e=`[^.${TS}]`,F7e=`${pZ}*?`,gZ={DOT_LITERAL:vf,PLUS_LITERAL:v7e,QMARK_LITERAL:D7e,SLASH_LITERAL:TS,ONE_CHAR:S7e,QMARK:pZ,END_ANCHOR:bN,DOTS_SLASH:xN,NO_DOT:P7e,NO_DOTS:b7e,NO_DOT_SLASH:x7e,NO_DOTS_SLASH:k7e,QMARK_NO_DOT:Q7e,STAR:F7e,START_ANCHOR:hZ},R7e={...gZ,SLASH_LITERAL:`[${Ku}]`,QMARK:fZ,STAR:`${fZ}*?`,DOTS_SLASH:`${vf}{1,2}(?:[${Ku}]|$)`,NO_DOT:`(?!${vf})`,NO_DOTS:`(?!(?:^|[${Ku}])${vf}{1,2}(?:[${Ku}]|$))`,NO_DOT_SLASH:`(?!${vf}{0,1}(?:[${Ku}]|$))`,NO_DOTS_SLASH:`(?!${vf}{1,2}(?:[${Ku}]|$))`,QMARK_NO_DOT:`[^.${Ku}]`,START_ANCHOR:`(?:^|[${Ku}])`,END_ANCHOR:`(?:[${Ku}]|$)`},T7e={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};dZ.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:T7e,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:B7e.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?R7e:gZ}}});var kI=_(Sa=>{"use strict";var N7e=ve("path"),L7e=process.platform==="win32",{REGEX_BACKSLASH:O7e,REGEX_REMOVE_BACKSLASH:M7e,REGEX_SPECIAL_CHARS:U7e,REGEX_SPECIAL_CHARS_GLOBAL:_7e}=xI();Sa.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Sa.hasRegexChars=t=>U7e.test(t);Sa.isRegexChar=t=>t.length===1&&Sa.hasRegexChars(t);Sa.escapeRegex=t=>t.replace(_7e,"\\$1");Sa.toPosixSlashes=t=>t.replace(O7e,"/");Sa.removeBackslashes=t=>t.replace(M7e,e=>e==="\\"?"":e);Sa.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};Sa.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:L7e===!0||N7e.sep==="\\";Sa.escapeLast=(t,e,r)=>{let o=t.lastIndexOf(e,r);return o===-1?t:t[o-1]==="\\"?Sa.escapeLast(t,e,o-1):`${t.slice(0,o)}\\${t.slice(o)}`};Sa.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};Sa.wrapOutput=(t,e={},r={})=>{let o=r.contains?"":"^",a=r.contains?"":"$",n=`${o}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var vZ=_((VQt,BZ)=>{"use strict";var mZ=kI(),{CHAR_ASTERISK:kN,CHAR_AT:H7e,CHAR_BACKWARD_SLASH:QI,CHAR_COMMA:q7e,CHAR_DOT:QN,CHAR_EXCLAMATION_MARK:FN,CHAR_FORWARD_SLASH:IZ,CHAR_LEFT_CURLY_BRACE:RN,CHAR_LEFT_PARENTHESES:TN,CHAR_LEFT_SQUARE_BRACKET:j7e,CHAR_PLUS:G7e,CHAR_QUESTION_MARK:yZ,CHAR_RIGHT_CURLY_BRACE:Y7e,CHAR_RIGHT_PARENTHESES:EZ,CHAR_RIGHT_SQUARE_BRACKET:W7e}=xI(),CZ=t=>t===IZ||t===QI,wZ=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},K7e=(t,e)=>{let r=e||{},o=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],u=[],A=[],p=t,h=-1,E=0,I=0,v=!1,x=!1,C=!1,R=!1,L=!1,U=!1,J=!1,te=!1,ae=!1,fe=!1,ce=0,me,he,Be={value:"",depth:0,isGlob:!1},we=()=>h>=o,g=()=>p.charCodeAt(h+1),Ee=()=>(me=he,p.charCodeAt(++h));for(;h0&&(le=p.slice(0,E),p=p.slice(E),I-=E),Se&&C===!0&&I>0?(Se=p.slice(0,I),ne=p.slice(I)):C===!0?(Se="",ne=p):Se=p,Se&&Se!==""&&Se!=="/"&&Se!==p&&CZ(Se.charCodeAt(Se.length-1))&&(Se=Se.slice(0,-1)),r.unescape===!0&&(ne&&(ne=mZ.removeBackslashes(ne)),Se&&J===!0&&(Se=mZ.removeBackslashes(Se)));let ee={prefix:le,input:t,start:E,base:Se,glob:ne,isBrace:v,isBracket:x,isGlob:C,isExtglob:R,isGlobstar:L,negated:te,negatedExtglob:ae};if(r.tokens===!0&&(ee.maxDepth=0,CZ(he)||u.push(Be),ee.tokens=u),r.parts===!0||r.tokens===!0){let Ie;for(let Fe=0;Fe{"use strict";var NS=xI(),nl=kI(),{MAX_LENGTH:LS,POSIX_REGEX_SOURCE:V7e,REGEX_NON_SPECIAL_CHARS:J7e,REGEX_SPECIAL_CHARS_BACKREF:z7e,REPLACEMENTS:DZ}=NS,X7e=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(a=>nl.escapeRegex(a)).join("..")}return r},Ty=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,NN=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=DZ[t]||t;let r={...e},o=typeof r.maxLength=="number"?Math.min(LS,r.maxLength):LS,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);let n={type:"bos",value:"",output:r.prepend||""},u=[n],A=r.capture?"":"?:",p=nl.isWindows(e),h=NS.globChars(p),E=NS.extglobChars(h),{DOT_LITERAL:I,PLUS_LITERAL:v,SLASH_LITERAL:x,ONE_CHAR:C,DOTS_SLASH:R,NO_DOT:L,NO_DOT_SLASH:U,NO_DOTS_SLASH:J,QMARK:te,QMARK_NO_DOT:ae,STAR:fe,START_ANCHOR:ce}=h,me=b=>`(${A}(?:(?!${ce}${b.dot?R:I}).)*?)`,he=r.dot?"":L,Be=r.dot?te:ae,we=r.bash===!0?me(r):fe;r.capture&&(we=`(${we})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:u};t=nl.removePrefix(t,g),a=t.length;let Ee=[],Se=[],le=[],ne=n,ee,Ie=()=>g.index===a-1,Fe=g.peek=(b=1)=>t[g.index+b],At=g.advance=()=>t[++g.index]||"",H=()=>t.slice(g.index+1),at=(b="",w=0)=>{g.consumed+=b,g.index+=w},Re=b=>{g.output+=b.output!=null?b.output:b.value,at(b.value)},ke=()=>{let b=1;for(;Fe()==="!"&&(Fe(2)!=="("||Fe(3)==="?");)At(),g.start++,b++;return b%2===0?!1:(g.negated=!0,g.start++,!0)},xe=b=>{g[b]++,le.push(b)},He=b=>{g[b]--,le.pop()},Te=b=>{if(ne.type==="globstar"){let w=g.braces>0&&(b.type==="comma"||b.type==="brace"),P=b.extglob===!0||Ee.length&&(b.type==="pipe"||b.type==="paren");b.type!=="slash"&&b.type!=="paren"&&!w&&!P&&(g.output=g.output.slice(0,-ne.output.length),ne.type="star",ne.value="*",ne.output=we,g.output+=ne.output)}if(Ee.length&&b.type!=="paren"&&(Ee[Ee.length-1].inner+=b.value),(b.value||b.output)&&Re(b),ne&&ne.type==="text"&&b.type==="text"){ne.value+=b.value,ne.output=(ne.output||"")+b.value;return}b.prev=ne,u.push(b),ne=b},Je=(b,w)=>{let P={...E[w],conditions:1,inner:""};P.prev=ne,P.parens=g.parens,P.output=g.output;let y=(r.capture?"(":"")+P.open;xe("parens"),Te({type:b,value:w,output:g.output?"":C}),Te({type:"paren",extglob:!0,value:At(),output:y}),Ee.push(P)},qe=b=>{let w=b.close+(r.capture?")":""),P;if(b.type==="negate"){let y=we;if(b.inner&&b.inner.length>1&&b.inner.includes("/")&&(y=me(r)),(y!==we||Ie()||/^\)+$/.test(H()))&&(w=b.close=`)$))${y}`),b.inner.includes("*")&&(P=H())&&/^\.[^\\/.]+$/.test(P)){let F=NN(P,{...e,fastpaths:!1}).output;w=b.close=`)${F})${y})`}b.prev.type==="bos"&&(g.negatedExtglob=!0)}Te({type:"paren",extglob:!0,value:ee,output:w}),He("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let b=!1,w=t.replace(z7e,(P,y,F,z,X,Z)=>z==="\\"?(b=!0,P):z==="?"?y?y+z+(X?te.repeat(X.length):""):Z===0?Be+(X?te.repeat(X.length):""):te.repeat(F.length):z==="."?I.repeat(F.length):z==="*"?y?y+z+(X?we:""):we:y?P:`\\${P}`);return b===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,P=>P.length%2===0?"\\\\":P?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=nl.wrapOutput(w,g,e),g)}for(;!Ie();){if(ee=At(),ee==="\0")continue;if(ee==="\\"){let P=Fe();if(P==="/"&&r.bash!==!0||P==="."||P===";")continue;if(!P){ee+="\\",Te({type:"text",value:ee});continue}let y=/^\\+/.exec(H()),F=0;if(y&&y[0].length>2&&(F=y[0].length,g.index+=F,F%2!==0&&(ee+="\\")),r.unescape===!0?ee=At():ee+=At(),g.brackets===0){Te({type:"text",value:ee});continue}}if(g.brackets>0&&(ee!=="]"||ne.value==="["||ne.value==="[^")){if(r.posix!==!1&&ee===":"){let P=ne.value.slice(1);if(P.includes("[")&&(ne.posix=!0,P.includes(":"))){let y=ne.value.lastIndexOf("["),F=ne.value.slice(0,y),z=ne.value.slice(y+2),X=V7e[z];if(X){ne.value=F+X,g.backtrack=!0,At(),!n.output&&u.indexOf(ne)===1&&(n.output=C);continue}}}(ee==="["&&Fe()!==":"||ee==="-"&&Fe()==="]")&&(ee=`\\${ee}`),ee==="]"&&(ne.value==="["||ne.value==="[^")&&(ee=`\\${ee}`),r.posix===!0&&ee==="!"&&ne.value==="["&&(ee="^"),ne.value+=ee,Re({value:ee});continue}if(g.quotes===1&&ee!=='"'){ee=nl.escapeRegex(ee),ne.value+=ee,Re({value:ee});continue}if(ee==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&Te({type:"text",value:ee});continue}if(ee==="("){xe("parens"),Te({type:"paren",value:ee});continue}if(ee===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Ty("opening","("));let P=Ee[Ee.length-1];if(P&&g.parens===P.parens+1){qe(Ee.pop());continue}Te({type:"paren",value:ee,output:g.parens?")":"\\)"}),He("parens");continue}if(ee==="["){if(r.nobracket===!0||!H().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));ee=`\\${ee}`}else xe("brackets");Te({type:"bracket",value:ee});continue}if(ee==="]"){if(r.nobracket===!0||ne&&ne.type==="bracket"&&ne.value.length===1){Te({type:"text",value:ee,output:`\\${ee}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Ty("opening","["));Te({type:"text",value:ee,output:`\\${ee}`});continue}He("brackets");let P=ne.value.slice(1);if(ne.posix!==!0&&P[0]==="^"&&!P.includes("/")&&(ee=`/${ee}`),ne.value+=ee,Re({value:ee}),r.literalBrackets===!1||nl.hasRegexChars(P))continue;let y=nl.escapeRegex(ne.value);if(g.output=g.output.slice(0,-ne.value.length),r.literalBrackets===!0){g.output+=y,ne.value=y;continue}ne.value=`(${A}${y}|${ne.value})`,g.output+=ne.value;continue}if(ee==="{"&&r.nobrace!==!0){xe("braces");let P={type:"brace",value:ee,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};Se.push(P),Te(P);continue}if(ee==="}"){let P=Se[Se.length-1];if(r.nobrace===!0||!P){Te({type:"text",value:ee,output:ee});continue}let y=")";if(P.dots===!0){let F=u.slice(),z=[];for(let X=F.length-1;X>=0&&(u.pop(),F[X].type!=="brace");X--)F[X].type!=="dots"&&z.unshift(F[X].value);y=X7e(z,r),g.backtrack=!0}if(P.comma!==!0&&P.dots!==!0){let F=g.output.slice(0,P.outputIndex),z=g.tokens.slice(P.tokensIndex);P.value=P.output="\\{",ee=y="\\}",g.output=F;for(let X of z)g.output+=X.output||X.value}Te({type:"brace",value:ee,output:y}),He("braces"),Se.pop();continue}if(ee==="|"){Ee.length>0&&Ee[Ee.length-1].conditions++,Te({type:"text",value:ee});continue}if(ee===","){let P=ee,y=Se[Se.length-1];y&&le[le.length-1]==="braces"&&(y.comma=!0,P="|"),Te({type:"comma",value:ee,output:P});continue}if(ee==="/"){if(ne.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",u.pop(),ne=n;continue}Te({type:"slash",value:ee,output:x});continue}if(ee==="."){if(g.braces>0&&ne.type==="dot"){ne.value==="."&&(ne.output=I);let P=Se[Se.length-1];ne.type="dots",ne.output+=ee,ne.value+=ee,P.dots=!0;continue}if(g.braces+g.parens===0&&ne.type!=="bos"&&ne.type!=="slash"){Te({type:"text",value:ee,output:I});continue}Te({type:"dot",value:ee,output:I});continue}if(ee==="?"){if(!(ne&&ne.value==="(")&&r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){Je("qmark",ee);continue}if(ne&&ne.type==="paren"){let y=Fe(),F=ee;if(y==="<"&&!nl.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(ne.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(H()))&&(F=`\\${ee}`),Te({type:"text",value:ee,output:F});continue}if(r.dot!==!0&&(ne.type==="slash"||ne.type==="bos")){Te({type:"qmark",value:ee,output:ae});continue}Te({type:"qmark",value:ee,output:te});continue}if(ee==="!"){if(r.noextglob!==!0&&Fe()==="("&&(Fe(2)!=="?"||!/[!=<:]/.test(Fe(3)))){Je("negate",ee);continue}if(r.nonegate!==!0&&g.index===0){ke();continue}}if(ee==="+"){if(r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){Je("plus",ee);continue}if(ne&&ne.value==="("||r.regex===!1){Te({type:"plus",value:ee,output:v});continue}if(ne&&(ne.type==="bracket"||ne.type==="paren"||ne.type==="brace")||g.parens>0){Te({type:"plus",value:ee});continue}Te({type:"plus",value:v});continue}if(ee==="@"){if(r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){Te({type:"at",extglob:!0,value:ee,output:""});continue}Te({type:"text",value:ee});continue}if(ee!=="*"){(ee==="$"||ee==="^")&&(ee=`\\${ee}`);let P=J7e.exec(H());P&&(ee+=P[0],g.index+=P[0].length),Te({type:"text",value:ee});continue}if(ne&&(ne.type==="globstar"||ne.star===!0)){ne.type="star",ne.star=!0,ne.value+=ee,ne.output=we,g.backtrack=!0,g.globstar=!0,at(ee);continue}let b=H();if(r.noextglob!==!0&&/^\([^?]/.test(b)){Je("star",ee);continue}if(ne.type==="star"){if(r.noglobstar===!0){at(ee);continue}let P=ne.prev,y=P.prev,F=P.type==="slash"||P.type==="bos",z=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!F||b[0]&&b[0]!=="/")){Te({type:"star",value:ee,output:""});continue}let X=g.braces>0&&(P.type==="comma"||P.type==="brace"),Z=Ee.length&&(P.type==="pipe"||P.type==="paren");if(!F&&P.type!=="paren"&&!X&&!Z){Te({type:"star",value:ee,output:""});continue}for(;b.slice(0,3)==="/**";){let ie=t[g.index+4];if(ie&&ie!=="/")break;b=b.slice(3),at("/**",3)}if(P.type==="bos"&&Ie()){ne.type="globstar",ne.value+=ee,ne.output=me(r),g.output=ne.output,g.globstar=!0,at(ee);continue}if(P.type==="slash"&&P.prev.type!=="bos"&&!z&&Ie()){g.output=g.output.slice(0,-(P.output+ne.output).length),P.output=`(?:${P.output}`,ne.type="globstar",ne.output=me(r)+(r.strictSlashes?")":"|$)"),ne.value+=ee,g.globstar=!0,g.output+=P.output+ne.output,at(ee);continue}if(P.type==="slash"&&P.prev.type!=="bos"&&b[0]==="/"){let ie=b[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(P.output+ne.output).length),P.output=`(?:${P.output}`,ne.type="globstar",ne.output=`${me(r)}${x}|${x}${ie})`,ne.value+=ee,g.output+=P.output+ne.output,g.globstar=!0,at(ee+At()),Te({type:"slash",value:"/",output:""});continue}if(P.type==="bos"&&b[0]==="/"){ne.type="globstar",ne.value+=ee,ne.output=`(?:^|${x}|${me(r)}${x})`,g.output=ne.output,g.globstar=!0,at(ee+At()),Te({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-ne.output.length),ne.type="globstar",ne.output=me(r),ne.value+=ee,g.output+=ne.output,g.globstar=!0,at(ee);continue}let w={type:"star",value:ee,output:we};if(r.bash===!0){w.output=".*?",(ne.type==="bos"||ne.type==="slash")&&(w.output=he+w.output),Te(w);continue}if(ne&&(ne.type==="bracket"||ne.type==="paren")&&r.regex===!0){w.output=ee,Te(w);continue}(g.index===g.start||ne.type==="slash"||ne.type==="dot")&&(ne.type==="dot"?(g.output+=U,ne.output+=U):r.dot===!0?(g.output+=J,ne.output+=J):(g.output+=he,ne.output+=he),Fe()!=="*"&&(g.output+=C,ne.output+=C)),Te(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));g.output=nl.escapeLast(g.output,"["),He("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing",")"));g.output=nl.escapeLast(g.output,"("),He("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","}"));g.output=nl.escapeLast(g.output,"{"),He("braces")}if(r.strictSlashes!==!0&&(ne.type==="star"||ne.type==="bracket")&&Te({type:"maybe_slash",value:"",output:`${x}?`}),g.backtrack===!0){g.output="";for(let b of g.tokens)g.output+=b.output!=null?b.output:b.value,b.suffix&&(g.output+=b.suffix)}return g};NN.fastpaths=(t,e)=>{let r={...e},o=typeof r.maxLength=="number"?Math.min(LS,r.maxLength):LS,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);t=DZ[t]||t;let n=nl.isWindows(e),{DOT_LITERAL:u,SLASH_LITERAL:A,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:I,NO_DOTS_SLASH:v,STAR:x,START_ANCHOR:C}=NS.globChars(n),R=r.dot?I:E,L=r.dot?v:E,U=r.capture?"":"?:",J={negated:!1,prefix:""},te=r.bash===!0?".*?":x;r.capture&&(te=`(${te})`);let ae=he=>he.noglobstar===!0?te:`(${U}(?:(?!${C}${he.dot?h:u}).)*?)`,fe=he=>{switch(he){case"*":return`${R}${p}${te}`;case".*":return`${u}${p}${te}`;case"*.*":return`${R}${te}${u}${p}${te}`;case"*/*":return`${R}${te}${A}${p}${L}${te}`;case"**":return R+ae(r);case"**/*":return`(?:${R}${ae(r)}${A})?${L}${p}${te}`;case"**/*.*":return`(?:${R}${ae(r)}${A})?${L}${te}${u}${p}${te}`;case"**/.*":return`(?:${R}${ae(r)}${A})?${u}${p}${te}`;default:{let Be=/^(.*?)\.(\w+)$/.exec(he);if(!Be)return;let we=fe(Be[1]);return we?we+u+Be[2]:void 0}}},ce=nl.removePrefix(t,J),me=fe(ce);return me&&r.strictSlashes!==!0&&(me+=`${A}?`),me};SZ.exports=NN});var xZ=_((zQt,bZ)=>{"use strict";var Z7e=ve("path"),$7e=vZ(),LN=PZ(),ON=kI(),eYe=xI(),tYe=t=>t&&typeof t=="object"&&!Array.isArray(t),Mi=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(v=>Mi(v,e,r));return v=>{for(let x of E){let C=x(v);if(C)return C}return!1}}let o=tYe(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=ON.isWindows(e),u=o?Mi.compileRe(t,e):Mi.makeRe(t,e,!1,!0),A=u.state;delete u.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=Mi(a.ignore,E,r)}let h=(E,I=!1)=>{let{isMatch:v,match:x,output:C}=Mi.test(E,u,e,{glob:t,posix:n}),R={glob:t,state:A,regex:u,posix:n,input:E,output:C,match:x,isMatch:v};return typeof a.onResult=="function"&&a.onResult(R),v===!1?(R.isMatch=!1,I?R:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(R),R.isMatch=!1,I?R:!1):(typeof a.onMatch=="function"&&a.onMatch(R),I?R:!0)};return r&&(h.state=A),h};Mi.test=(t,e,r,{glob:o,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},u=n.format||(a?ON.toPosixSlashes:null),A=t===o,p=A&&u?u(t):t;return A===!1&&(p=u?u(t):t,A=p===o),(A===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?A=Mi.matchBase(t,e,r,a):A=e.exec(p)),{isMatch:Boolean(A),match:A,output:p}};Mi.matchBase=(t,e,r,o=ON.isWindows(r))=>(e instanceof RegExp?e:Mi.makeRe(e,r)).test(Z7e.basename(t));Mi.isMatch=(t,e,r)=>Mi(e,r)(t);Mi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Mi.parse(r,e)):LN(t,{...e,fastpaths:!1});Mi.scan=(t,e)=>$7e(t,e);Mi.compileRe=(t,e,r=!1,o=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",u=a.contains?"":"$",A=`${n}(?:${t.output})${u}`;t&&t.negated===!0&&(A=`^(?!${A}).*$`);let p=Mi.toRegex(A,e);return o===!0&&(p.state=t),p};Mi.makeRe=(t,e={},r=!1,o=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=LN.fastpaths(t,e)),a.output||(a=LN(t,e)),Mi.compileRe(a,e,r,o)};Mi.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Mi.constants=eYe;bZ.exports=Mi});var QZ=_((XQt,kZ)=>{"use strict";kZ.exports=xZ()});var Zo=_((ZQt,NZ)=>{"use strict";var RZ=ve("util"),TZ=AZ(),Vu=QZ(),MN=kI(),FZ=t=>t===""||t==="./",yi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let o=new Set,a=new Set,n=new Set,u=0,A=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!o.has(E));if(r&&h.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(E=>E.replace(/\\/g,"")):e}return h};yi.match=yi;yi.matcher=(t,e)=>Vu(t,e);yi.isMatch=(t,e,r)=>Vu(e,r)(t);yi.any=yi.isMatch;yi.not=(t,e,r={})=>{e=[].concat(e).map(String);let o=new Set,a=[],n=A=>{r.onResult&&r.onResult(A),a.push(A.output)},u=new Set(yi(t,e,{...r,onResult:n}));for(let A of a)u.has(A)||o.add(A);return[...o]};yi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${RZ.inspect(t)}"`);if(Array.isArray(e))return e.some(o=>yi.contains(t,o,r));if(typeof e=="string"){if(FZ(t)||FZ(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return yi.isMatch(t,e,{...r,contains:!0})};yi.matchKeys=(t,e,r)=>{if(!MN.isObject(t))throw new TypeError("Expected the first argument to be an object");let o=yi(Object.keys(t),e,r),a={};for(let n of o)a[n]=t[n];return a};yi.some=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Vu(String(a),r);if(o.some(u=>n(u)))return!0}return!1};yi.every=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Vu(String(a),r);if(!o.every(u=>n(u)))return!1}return!0};yi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${RZ.inspect(t)}"`);return[].concat(e).every(o=>Vu(o,r)(t))};yi.capture=(t,e,r)=>{let o=MN.isWindows(r),n=Vu.makeRe(String(t),{...r,capture:!0}).exec(o?MN.toPosixSlashes(e):e);if(n)return n.slice(1).map(u=>u===void 0?"":u)};yi.makeRe=(...t)=>Vu.makeRe(...t);yi.scan=(...t)=>Vu.scan(...t);yi.parse=(t,e)=>{let r=[];for(let o of[].concat(t||[]))for(let a of TZ(String(o),e))r.push(Vu.parse(a,e));return r};yi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:TZ(t,e)};yi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return yi.braces(t,{...e,expand:!0})};NZ.exports=yi});var OZ=_(($Qt,LZ)=>{"use strict";LZ.exports=({onlyFirst:t=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}});var OS=_((eFt,MZ)=>{"use strict";var rYe=OZ();MZ.exports=t=>typeof t=="string"?t.replace(rYe(),""):t});var _Z=_((tFt,UZ)=>{function nYe(){this.__data__=[],this.size=0}UZ.exports=nYe});var Ny=_((rFt,HZ)=>{function iYe(t,e){return t===e||t!==t&&e!==e}HZ.exports=iYe});var FI=_((nFt,qZ)=>{var sYe=Ny();function oYe(t,e){for(var r=t.length;r--;)if(sYe(t[r][0],e))return r;return-1}qZ.exports=oYe});var GZ=_((iFt,jZ)=>{var aYe=FI(),lYe=Array.prototype,cYe=lYe.splice;function uYe(t){var e=this.__data__,r=aYe(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():cYe.call(e,r,1),--this.size,!0}jZ.exports=uYe});var WZ=_((sFt,YZ)=>{var AYe=FI();function fYe(t){var e=this.__data__,r=AYe(e,t);return r<0?void 0:e[r][1]}YZ.exports=fYe});var VZ=_((oFt,KZ)=>{var pYe=FI();function hYe(t){return pYe(this.__data__,t)>-1}KZ.exports=hYe});var zZ=_((aFt,JZ)=>{var gYe=FI();function dYe(t,e){var r=this.__data__,o=gYe(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}JZ.exports=dYe});var RI=_((lFt,XZ)=>{var mYe=_Z(),yYe=GZ(),EYe=WZ(),CYe=VZ(),wYe=zZ();function Ly(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var IYe=RI();function BYe(){this.__data__=new IYe,this.size=0}ZZ.exports=BYe});var t$=_((uFt,e$)=>{function vYe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}e$.exports=vYe});var n$=_((AFt,r$)=>{function DYe(t){return this.__data__.get(t)}r$.exports=DYe});var s$=_((fFt,i$)=>{function SYe(t){return this.__data__.has(t)}i$.exports=SYe});var UN=_((pFt,o$)=>{var PYe=typeof global=="object"&&global&&global.Object===Object&&global;o$.exports=PYe});var _l=_((hFt,a$)=>{var bYe=UN(),xYe=typeof self=="object"&&self&&self.Object===Object&&self,kYe=bYe||xYe||Function("return this")();a$.exports=kYe});var pd=_((gFt,l$)=>{var QYe=_l(),FYe=QYe.Symbol;l$.exports=FYe});var f$=_((dFt,A$)=>{var c$=pd(),u$=Object.prototype,RYe=u$.hasOwnProperty,TYe=u$.toString,TI=c$?c$.toStringTag:void 0;function NYe(t){var e=RYe.call(t,TI),r=t[TI];try{t[TI]=void 0;var o=!0}catch{}var a=TYe.call(t);return o&&(e?t[TI]=r:delete t[TI]),a}A$.exports=NYe});var h$=_((mFt,p$)=>{var LYe=Object.prototype,OYe=LYe.toString;function MYe(t){return OYe.call(t)}p$.exports=MYe});var hd=_((yFt,m$)=>{var g$=pd(),UYe=f$(),_Ye=h$(),HYe="[object Null]",qYe="[object Undefined]",d$=g$?g$.toStringTag:void 0;function jYe(t){return t==null?t===void 0?qYe:HYe:d$&&d$ in Object(t)?UYe(t):_Ye(t)}m$.exports=jYe});var il=_((EFt,y$)=>{function GYe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}y$.exports=GYe});var MS=_((CFt,E$)=>{var YYe=hd(),WYe=il(),KYe="[object AsyncFunction]",VYe="[object Function]",JYe="[object GeneratorFunction]",zYe="[object Proxy]";function XYe(t){if(!WYe(t))return!1;var e=YYe(t);return e==VYe||e==JYe||e==KYe||e==zYe}E$.exports=XYe});var w$=_((wFt,C$)=>{var ZYe=_l(),$Ye=ZYe["__core-js_shared__"];C$.exports=$Ye});var v$=_((IFt,B$)=>{var _N=w$(),I$=function(){var t=/[^.]+$/.exec(_N&&_N.keys&&_N.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function eWe(t){return!!I$&&I$ in t}B$.exports=eWe});var HN=_((BFt,D$)=>{var tWe=Function.prototype,rWe=tWe.toString;function nWe(t){if(t!=null){try{return rWe.call(t)}catch{}try{return t+""}catch{}}return""}D$.exports=nWe});var P$=_((vFt,S$)=>{var iWe=MS(),sWe=v$(),oWe=il(),aWe=HN(),lWe=/[\\^$.*+?()[\]{}|]/g,cWe=/^\[object .+?Constructor\]$/,uWe=Function.prototype,AWe=Object.prototype,fWe=uWe.toString,pWe=AWe.hasOwnProperty,hWe=RegExp("^"+fWe.call(pWe).replace(lWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function gWe(t){if(!oWe(t)||sWe(t))return!1;var e=iWe(t)?hWe:cWe;return e.test(aWe(t))}S$.exports=gWe});var x$=_((DFt,b$)=>{function dWe(t,e){return t?.[e]}b$.exports=dWe});var zp=_((SFt,k$)=>{var mWe=P$(),yWe=x$();function EWe(t,e){var r=yWe(t,e);return mWe(r)?r:void 0}k$.exports=EWe});var US=_((PFt,Q$)=>{var CWe=zp(),wWe=_l(),IWe=CWe(wWe,"Map");Q$.exports=IWe});var NI=_((bFt,F$)=>{var BWe=zp(),vWe=BWe(Object,"create");F$.exports=vWe});var N$=_((xFt,T$)=>{var R$=NI();function DWe(){this.__data__=R$?R$(null):{},this.size=0}T$.exports=DWe});var O$=_((kFt,L$)=>{function SWe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}L$.exports=SWe});var U$=_((QFt,M$)=>{var PWe=NI(),bWe="__lodash_hash_undefined__",xWe=Object.prototype,kWe=xWe.hasOwnProperty;function QWe(t){var e=this.__data__;if(PWe){var r=e[t];return r===bWe?void 0:r}return kWe.call(e,t)?e[t]:void 0}M$.exports=QWe});var H$=_((FFt,_$)=>{var FWe=NI(),RWe=Object.prototype,TWe=RWe.hasOwnProperty;function NWe(t){var e=this.__data__;return FWe?e[t]!==void 0:TWe.call(e,t)}_$.exports=NWe});var j$=_((RFt,q$)=>{var LWe=NI(),OWe="__lodash_hash_undefined__";function MWe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=LWe&&e===void 0?OWe:e,this}q$.exports=MWe});var Y$=_((TFt,G$)=>{var UWe=N$(),_We=O$(),HWe=U$(),qWe=H$(),jWe=j$();function Oy(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var W$=Y$(),GWe=RI(),YWe=US();function WWe(){this.size=0,this.__data__={hash:new W$,map:new(YWe||GWe),string:new W$}}K$.exports=WWe});var z$=_((LFt,J$)=>{function KWe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}J$.exports=KWe});var LI=_((OFt,X$)=>{var VWe=z$();function JWe(t,e){var r=t.__data__;return VWe(e)?r[typeof e=="string"?"string":"hash"]:r.map}X$.exports=JWe});var $$=_((MFt,Z$)=>{var zWe=LI();function XWe(t){var e=zWe(this,t).delete(t);return this.size-=e?1:0,e}Z$.exports=XWe});var tee=_((UFt,eee)=>{var ZWe=LI();function $We(t){return ZWe(this,t).get(t)}eee.exports=$We});var nee=_((_Ft,ree)=>{var eKe=LI();function tKe(t){return eKe(this,t).has(t)}ree.exports=tKe});var see=_((HFt,iee)=>{var rKe=LI();function nKe(t,e){var r=rKe(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}iee.exports=nKe});var _S=_((qFt,oee)=>{var iKe=V$(),sKe=$$(),oKe=tee(),aKe=nee(),lKe=see();function My(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var cKe=RI(),uKe=US(),AKe=_S(),fKe=200;function pKe(t,e){var r=this.__data__;if(r instanceof cKe){var o=r.__data__;if(!uKe||o.length{var hKe=RI(),gKe=$Z(),dKe=t$(),mKe=n$(),yKe=s$(),EKe=lee();function Uy(t){var e=this.__data__=new hKe(t);this.size=e.size}Uy.prototype.clear=gKe;Uy.prototype.delete=dKe;Uy.prototype.get=mKe;Uy.prototype.has=yKe;Uy.prototype.set=EKe;cee.exports=Uy});var Aee=_((YFt,uee)=>{var CKe="__lodash_hash_undefined__";function wKe(t){return this.__data__.set(t,CKe),this}uee.exports=wKe});var pee=_((WFt,fee)=>{function IKe(t){return this.__data__.has(t)}fee.exports=IKe});var gee=_((KFt,hee)=>{var BKe=_S(),vKe=Aee(),DKe=pee();function qS(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new BKe;++e{function SKe(t,e){for(var r=-1,o=t==null?0:t.length;++r{function PKe(t,e){return t.has(e)}yee.exports=PKe});var qN=_((zFt,Cee)=>{var bKe=gee(),xKe=mee(),kKe=Eee(),QKe=1,FKe=2;function RKe(t,e,r,o,a,n){var u=r&QKe,A=t.length,p=e.length;if(A!=p&&!(u&&p>A))return!1;var h=n.get(t),E=n.get(e);if(h&&E)return h==e&&E==t;var I=-1,v=!0,x=r&FKe?new bKe:void 0;for(n.set(t,e),n.set(e,t);++I{var TKe=_l(),NKe=TKe.Uint8Array;wee.exports=NKe});var Bee=_((ZFt,Iee)=>{function LKe(t){var e=-1,r=Array(t.size);return t.forEach(function(o,a){r[++e]=[a,o]}),r}Iee.exports=LKe});var Dee=_(($Ft,vee)=>{function OKe(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}vee.exports=OKe});var kee=_((eRt,xee)=>{var See=pd(),Pee=jN(),MKe=Ny(),UKe=qN(),_Ke=Bee(),HKe=Dee(),qKe=1,jKe=2,GKe="[object Boolean]",YKe="[object Date]",WKe="[object Error]",KKe="[object Map]",VKe="[object Number]",JKe="[object RegExp]",zKe="[object Set]",XKe="[object String]",ZKe="[object Symbol]",$Ke="[object ArrayBuffer]",eVe="[object DataView]",bee=See?See.prototype:void 0,GN=bee?bee.valueOf:void 0;function tVe(t,e,r,o,a,n,u){switch(r){case eVe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case $Ke:return!(t.byteLength!=e.byteLength||!n(new Pee(t),new Pee(e)));case GKe:case YKe:case VKe:return MKe(+t,+e);case WKe:return t.name==e.name&&t.message==e.message;case JKe:case XKe:return t==e+"";case KKe:var A=_Ke;case zKe:var p=o&qKe;if(A||(A=HKe),t.size!=e.size&&!p)return!1;var h=u.get(t);if(h)return h==e;o|=jKe,u.set(t,e);var E=UKe(A(t),A(e),o,a,n,u);return u.delete(t),E;case ZKe:if(GN)return GN.call(t)==GN.call(e)}return!1}xee.exports=tVe});var jS=_((tRt,Qee)=>{function rVe(t,e){for(var r=-1,o=e.length,a=t.length;++r{var nVe=Array.isArray;Fee.exports=nVe});var YN=_((nRt,Ree)=>{var iVe=jS(),sVe=Hl();function oVe(t,e,r){var o=e(t);return sVe(t)?o:iVe(o,r(t))}Ree.exports=oVe});var Nee=_((iRt,Tee)=>{function aVe(t,e){for(var r=-1,o=t==null?0:t.length,a=0,n=[];++r{function lVe(){return[]}Lee.exports=lVe});var GS=_((oRt,Mee)=>{var cVe=Nee(),uVe=WN(),AVe=Object.prototype,fVe=AVe.propertyIsEnumerable,Oee=Object.getOwnPropertySymbols,pVe=Oee?function(t){return t==null?[]:(t=Object(t),cVe(Oee(t),function(e){return fVe.call(t,e)}))}:uVe;Mee.exports=pVe});var _ee=_((aRt,Uee)=>{function hVe(t,e){for(var r=-1,o=Array(t);++r{function gVe(t){return t!=null&&typeof t=="object"}Hee.exports=gVe});var jee=_((cRt,qee)=>{var dVe=hd(),mVe=Ju(),yVe="[object Arguments]";function EVe(t){return mVe(t)&&dVe(t)==yVe}qee.exports=EVe});var OI=_((uRt,Wee)=>{var Gee=jee(),CVe=Ju(),Yee=Object.prototype,wVe=Yee.hasOwnProperty,IVe=Yee.propertyIsEnumerable,BVe=Gee(function(){return arguments}())?Gee:function(t){return CVe(t)&&wVe.call(t,"callee")&&!IVe.call(t,"callee")};Wee.exports=BVe});var Vee=_((ARt,Kee)=>{function vVe(){return!1}Kee.exports=vVe});var UI=_((MI,_y)=>{var DVe=_l(),SVe=Vee(),Xee=typeof MI=="object"&&MI&&!MI.nodeType&&MI,Jee=Xee&&typeof _y=="object"&&_y&&!_y.nodeType&&_y,PVe=Jee&&Jee.exports===Xee,zee=PVe?DVe.Buffer:void 0,bVe=zee?zee.isBuffer:void 0,xVe=bVe||SVe;_y.exports=xVe});var _I=_((fRt,Zee)=>{var kVe=9007199254740991,QVe=/^(?:0|[1-9]\d*)$/;function FVe(t,e){var r=typeof t;return e=e??kVe,!!e&&(r=="number"||r!="symbol"&&QVe.test(t))&&t>-1&&t%1==0&&t{var RVe=9007199254740991;function TVe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=RVe}$ee.exports=TVe});var tte=_((hRt,ete)=>{var NVe=hd(),LVe=YS(),OVe=Ju(),MVe="[object Arguments]",UVe="[object Array]",_Ve="[object Boolean]",HVe="[object Date]",qVe="[object Error]",jVe="[object Function]",GVe="[object Map]",YVe="[object Number]",WVe="[object Object]",KVe="[object RegExp]",VVe="[object Set]",JVe="[object String]",zVe="[object WeakMap]",XVe="[object ArrayBuffer]",ZVe="[object DataView]",$Ve="[object Float32Array]",eJe="[object Float64Array]",tJe="[object Int8Array]",rJe="[object Int16Array]",nJe="[object Int32Array]",iJe="[object Uint8Array]",sJe="[object Uint8ClampedArray]",oJe="[object Uint16Array]",aJe="[object Uint32Array]",ui={};ui[$Ve]=ui[eJe]=ui[tJe]=ui[rJe]=ui[nJe]=ui[iJe]=ui[sJe]=ui[oJe]=ui[aJe]=!0;ui[MVe]=ui[UVe]=ui[XVe]=ui[_Ve]=ui[ZVe]=ui[HVe]=ui[qVe]=ui[jVe]=ui[GVe]=ui[YVe]=ui[WVe]=ui[KVe]=ui[VVe]=ui[JVe]=ui[zVe]=!1;function lJe(t){return OVe(t)&&LVe(t.length)&&!!ui[NVe(t)]}ete.exports=lJe});var WS=_((gRt,rte)=>{function cJe(t){return function(e){return t(e)}}rte.exports=cJe});var KS=_((HI,Hy)=>{var uJe=UN(),nte=typeof HI=="object"&&HI&&!HI.nodeType&&HI,qI=nte&&typeof Hy=="object"&&Hy&&!Hy.nodeType&&Hy,AJe=qI&&qI.exports===nte,KN=AJe&&uJe.process,fJe=function(){try{var t=qI&&qI.require&&qI.require("util").types;return t||KN&&KN.binding&&KN.binding("util")}catch{}}();Hy.exports=fJe});var VS=_((dRt,ote)=>{var pJe=tte(),hJe=WS(),ite=KS(),ste=ite&&ite.isTypedArray,gJe=ste?hJe(ste):pJe;ote.exports=gJe});var VN=_((mRt,ate)=>{var dJe=_ee(),mJe=OI(),yJe=Hl(),EJe=UI(),CJe=_I(),wJe=VS(),IJe=Object.prototype,BJe=IJe.hasOwnProperty;function vJe(t,e){var r=yJe(t),o=!r&&mJe(t),a=!r&&!o&&EJe(t),n=!r&&!o&&!a&&wJe(t),u=r||o||a||n,A=u?dJe(t.length,String):[],p=A.length;for(var h in t)(e||BJe.call(t,h))&&!(u&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||CJe(h,p)))&&A.push(h);return A}ate.exports=vJe});var JS=_((yRt,lte)=>{var DJe=Object.prototype;function SJe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||DJe;return t===r}lte.exports=SJe});var JN=_((ERt,cte)=>{function PJe(t,e){return function(r){return t(e(r))}}cte.exports=PJe});var Ate=_((CRt,ute)=>{var bJe=JN(),xJe=bJe(Object.keys,Object);ute.exports=xJe});var pte=_((wRt,fte)=>{var kJe=JS(),QJe=Ate(),FJe=Object.prototype,RJe=FJe.hasOwnProperty;function TJe(t){if(!kJe(t))return QJe(t);var e=[];for(var r in Object(t))RJe.call(t,r)&&r!="constructor"&&e.push(r);return e}fte.exports=TJe});var jI=_((IRt,hte)=>{var NJe=MS(),LJe=YS();function OJe(t){return t!=null&&LJe(t.length)&&!NJe(t)}hte.exports=OJe});var zS=_((BRt,gte)=>{var MJe=VN(),UJe=pte(),_Je=jI();function HJe(t){return _Je(t)?MJe(t):UJe(t)}gte.exports=HJe});var zN=_((vRt,dte)=>{var qJe=YN(),jJe=GS(),GJe=zS();function YJe(t){return qJe(t,GJe,jJe)}dte.exports=YJe});var Ete=_((DRt,yte)=>{var mte=zN(),WJe=1,KJe=Object.prototype,VJe=KJe.hasOwnProperty;function JJe(t,e,r,o,a,n){var u=r&WJe,A=mte(t),p=A.length,h=mte(e),E=h.length;if(p!=E&&!u)return!1;for(var I=p;I--;){var v=A[I];if(!(u?v in e:VJe.call(e,v)))return!1}var x=n.get(t),C=n.get(e);if(x&&C)return x==e&&C==t;var R=!0;n.set(t,e),n.set(e,t);for(var L=u;++I{var zJe=zp(),XJe=_l(),ZJe=zJe(XJe,"DataView");Cte.exports=ZJe});var Bte=_((PRt,Ite)=>{var $Je=zp(),eze=_l(),tze=$Je(eze,"Promise");Ite.exports=tze});var Dte=_((bRt,vte)=>{var rze=zp(),nze=_l(),ize=rze(nze,"Set");vte.exports=ize});var Pte=_((xRt,Ste)=>{var sze=zp(),oze=_l(),aze=sze(oze,"WeakMap");Ste.exports=aze});var GI=_((kRt,Tte)=>{var XN=wte(),ZN=US(),$N=Bte(),eL=Dte(),tL=Pte(),Rte=hd(),qy=HN(),bte="[object Map]",lze="[object Object]",xte="[object Promise]",kte="[object Set]",Qte="[object WeakMap]",Fte="[object DataView]",cze=qy(XN),uze=qy(ZN),Aze=qy($N),fze=qy(eL),pze=qy(tL),gd=Rte;(XN&&gd(new XN(new ArrayBuffer(1)))!=Fte||ZN&&gd(new ZN)!=bte||$N&&gd($N.resolve())!=xte||eL&&gd(new eL)!=kte||tL&&gd(new tL)!=Qte)&&(gd=function(t){var e=Rte(t),r=e==lze?t.constructor:void 0,o=r?qy(r):"";if(o)switch(o){case cze:return Fte;case uze:return bte;case Aze:return xte;case fze:return kte;case pze:return Qte}return e});Tte.exports=gd});var qte=_((QRt,Hte)=>{var rL=HS(),hze=qN(),gze=kee(),dze=Ete(),Nte=GI(),Lte=Hl(),Ote=UI(),mze=VS(),yze=1,Mte="[object Arguments]",Ute="[object Array]",XS="[object Object]",Eze=Object.prototype,_te=Eze.hasOwnProperty;function Cze(t,e,r,o,a,n){var u=Lte(t),A=Lte(e),p=u?Ute:Nte(t),h=A?Ute:Nte(e);p=p==Mte?XS:p,h=h==Mte?XS:h;var E=p==XS,I=h==XS,v=p==h;if(v&&Ote(t)){if(!Ote(e))return!1;u=!0,E=!1}if(v&&!E)return n||(n=new rL),u||mze(t)?hze(t,e,r,o,a,n):gze(t,e,p,r,o,a,n);if(!(r&yze)){var x=E&&_te.call(t,"__wrapped__"),C=I&&_te.call(e,"__wrapped__");if(x||C){var R=x?t.value():t,L=C?e.value():e;return n||(n=new rL),a(R,L,r,o,n)}}return v?(n||(n=new rL),dze(t,e,r,o,a,n)):!1}Hte.exports=Cze});var Wte=_((FRt,Yte)=>{var wze=qte(),jte=Ju();function Gte(t,e,r,o,a){return t===e?!0:t==null||e==null||!jte(t)&&!jte(e)?t!==t&&e!==e:wze(t,e,r,o,Gte,a)}Yte.exports=Gte});var Vte=_((RRt,Kte)=>{var Ize=Wte();function Bze(t,e){return Ize(t,e)}Kte.exports=Bze});var nL=_((TRt,Jte)=>{var vze=zp(),Dze=function(){try{var t=vze(Object,"defineProperty");return t({},"",{}),t}catch{}}();Jte.exports=Dze});var ZS=_((NRt,Xte)=>{var zte=nL();function Sze(t,e,r){e=="__proto__"&&zte?zte(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}Xte.exports=Sze});var iL=_((LRt,Zte)=>{var Pze=ZS(),bze=Ny();function xze(t,e,r){(r!==void 0&&!bze(t[e],r)||r===void 0&&!(e in t))&&Pze(t,e,r)}Zte.exports=xze});var ere=_((ORt,$te)=>{function kze(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}$te.exports=kze});var rre=_((MRt,tre)=>{var Qze=ere(),Fze=Qze();tre.exports=Fze});var sL=_((YI,jy)=>{var Rze=_l(),ore=typeof YI=="object"&&YI&&!YI.nodeType&&YI,nre=ore&&typeof jy=="object"&&jy&&!jy.nodeType&&jy,Tze=nre&&nre.exports===ore,ire=Tze?Rze.Buffer:void 0,sre=ire?ire.allocUnsafe:void 0;function Nze(t,e){if(e)return t.slice();var r=t.length,o=sre?sre(r):new t.constructor(r);return t.copy(o),o}jy.exports=Nze});var $S=_((URt,lre)=>{var are=jN();function Lze(t){var e=new t.constructor(t.byteLength);return new are(e).set(new are(t)),e}lre.exports=Lze});var oL=_((_Rt,cre)=>{var Oze=$S();function Mze(t,e){var r=e?Oze(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}cre.exports=Mze});var eP=_((HRt,ure)=>{function Uze(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r{var _ze=il(),Are=Object.create,Hze=function(){function t(){}return function(e){if(!_ze(e))return{};if(Are)return Are(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();fre.exports=Hze});var tP=_((jRt,hre)=>{var qze=JN(),jze=qze(Object.getPrototypeOf,Object);hre.exports=jze});var aL=_((GRt,gre)=>{var Gze=pre(),Yze=tP(),Wze=JS();function Kze(t){return typeof t.constructor=="function"&&!Wze(t)?Gze(Yze(t)):{}}gre.exports=Kze});var mre=_((YRt,dre)=>{var Vze=jI(),Jze=Ju();function zze(t){return Jze(t)&&Vze(t)}dre.exports=zze});var lL=_((WRt,Ere)=>{var Xze=hd(),Zze=tP(),$ze=Ju(),eXe="[object Object]",tXe=Function.prototype,rXe=Object.prototype,yre=tXe.toString,nXe=rXe.hasOwnProperty,iXe=yre.call(Object);function sXe(t){if(!$ze(t)||Xze(t)!=eXe)return!1;var e=Zze(t);if(e===null)return!0;var r=nXe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&yre.call(r)==iXe}Ere.exports=sXe});var cL=_((KRt,Cre)=>{function oXe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}Cre.exports=oXe});var rP=_((VRt,wre)=>{var aXe=ZS(),lXe=Ny(),cXe=Object.prototype,uXe=cXe.hasOwnProperty;function AXe(t,e,r){var o=t[e];(!(uXe.call(t,e)&&lXe(o,r))||r===void 0&&!(e in t))&&aXe(t,e,r)}wre.exports=AXe});var dd=_((JRt,Ire)=>{var fXe=rP(),pXe=ZS();function hXe(t,e,r,o){var a=!r;r||(r={});for(var n=-1,u=e.length;++n{function gXe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}Bre.exports=gXe});var Sre=_((XRt,Dre)=>{var dXe=il(),mXe=JS(),yXe=vre(),EXe=Object.prototype,CXe=EXe.hasOwnProperty;function wXe(t){if(!dXe(t))return yXe(t);var e=mXe(t),r=[];for(var o in t)o=="constructor"&&(e||!CXe.call(t,o))||r.push(o);return r}Dre.exports=wXe});var Gy=_((ZRt,Pre)=>{var IXe=VN(),BXe=Sre(),vXe=jI();function DXe(t){return vXe(t)?IXe(t,!0):BXe(t)}Pre.exports=DXe});var xre=_(($Rt,bre)=>{var SXe=dd(),PXe=Gy();function bXe(t){return SXe(t,PXe(t))}bre.exports=bXe});var Nre=_((eTt,Tre)=>{var kre=iL(),xXe=sL(),kXe=oL(),QXe=eP(),FXe=aL(),Qre=OI(),Fre=Hl(),RXe=mre(),TXe=UI(),NXe=MS(),LXe=il(),OXe=lL(),MXe=VS(),Rre=cL(),UXe=xre();function _Xe(t,e,r,o,a,n,u){var A=Rre(t,r),p=Rre(e,r),h=u.get(p);if(h){kre(t,r,h);return}var E=n?n(A,p,r+"",t,e,u):void 0,I=E===void 0;if(I){var v=Fre(p),x=!v&&TXe(p),C=!v&&!x&&MXe(p);E=p,v||x||C?Fre(A)?E=A:RXe(A)?E=QXe(A):x?(I=!1,E=xXe(p,!0)):C?(I=!1,E=kXe(p,!0)):E=[]:OXe(p)||Qre(p)?(E=A,Qre(A)?E=UXe(A):(!LXe(A)||NXe(A))&&(E=FXe(p))):I=!1}I&&(u.set(p,E),a(E,p,o,n,u),u.delete(p)),kre(t,r,E)}Tre.exports=_Xe});var Mre=_((tTt,Ore)=>{var HXe=HS(),qXe=iL(),jXe=rre(),GXe=Nre(),YXe=il(),WXe=Gy(),KXe=cL();function Lre(t,e,r,o,a){t!==e&&jXe(e,function(n,u){if(a||(a=new HXe),YXe(n))GXe(t,e,u,r,Lre,o,a);else{var A=o?o(KXe(t,u),n,u+"",t,e,a):void 0;A===void 0&&(A=n),qXe(t,u,A)}},WXe)}Ore.exports=Lre});var uL=_((rTt,Ure)=>{function VXe(t){return t}Ure.exports=VXe});var Hre=_((nTt,_re)=>{function JXe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}_re.exports=JXe});var AL=_((iTt,jre)=>{var zXe=Hre(),qre=Math.max;function XXe(t,e,r){return e=qre(e===void 0?t.length-1:e,0),function(){for(var o=arguments,a=-1,n=qre(o.length-e,0),u=Array(n);++a{function ZXe(t){return function(){return t}}Gre.exports=ZXe});var Vre=_((oTt,Kre)=>{var $Xe=Yre(),Wre=nL(),eZe=uL(),tZe=Wre?function(t,e){return Wre(t,"toString",{configurable:!0,enumerable:!1,value:$Xe(e),writable:!0})}:eZe;Kre.exports=tZe});var zre=_((aTt,Jre)=>{var rZe=800,nZe=16,iZe=Date.now;function sZe(t){var e=0,r=0;return function(){var o=iZe(),a=nZe-(o-r);if(r=o,a>0){if(++e>=rZe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}Jre.exports=sZe});var fL=_((lTt,Xre)=>{var oZe=Vre(),aZe=zre(),lZe=aZe(oZe);Xre.exports=lZe});var $re=_((cTt,Zre)=>{var cZe=uL(),uZe=AL(),AZe=fL();function fZe(t,e){return AZe(uZe(t,e,cZe),t+"")}Zre.exports=fZe});var tne=_((uTt,ene)=>{var pZe=Ny(),hZe=jI(),gZe=_I(),dZe=il();function mZe(t,e,r){if(!dZe(r))return!1;var o=typeof e;return(o=="number"?hZe(r)&&gZe(e,r.length):o=="string"&&e in r)?pZe(r[e],t):!1}ene.exports=mZe});var nne=_((ATt,rne)=>{var yZe=$re(),EZe=tne();function CZe(t){return yZe(function(e,r){var o=-1,a=r.length,n=a>1?r[a-1]:void 0,u=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,u&&EZe(r[0],r[1],u)&&(n=a<3?void 0:n,a=1),e=Object(e);++o{var wZe=Mre(),IZe=nne(),BZe=IZe(function(t,e,r,o){wZe(t,e,r,o)});ine.exports=BZe});var _e={};Vt(_e,{AsyncActions:()=>gL,BufferStream:()=>hL,CachingStrategy:()=>mne,DefaultStream:()=>dL,allSettledSafe:()=>Uc,assertNever:()=>yL,bufferStream:()=>Vy,buildIgnorePattern:()=>kZe,convertMapsToIndexableObjects:()=>iP,dynamicRequire:()=>Df,escapeRegExp:()=>DZe,getArrayWithDefault:()=>Yy,getFactoryWithDefault:()=>ol,getMapWithDefault:()=>Wy,getSetWithDefault:()=>md,groupBy:()=>wL,isIndexableObject:()=>pL,isPathLike:()=>QZe,isTaggedYarnVersion:()=>vZe,makeDeferred:()=>hne,mapAndFilter:()=>sl,mapAndFind:()=>KI,mergeIntoTarget:()=>Ene,overrideType:()=>SZe,parseBoolean:()=>VI,parseInt:()=>Jy,parseOptionalBoolean:()=>yne,plural:()=>nP,prettifyAsyncErrors:()=>Ky,prettifySyncErrors:()=>EL,releaseAfterUseAsync:()=>bZe,replaceEnvVariables:()=>sP,sortMap:()=>ks,toMerged:()=>FZe,tryParseOptionalBoolean:()=>CL,validateEnum:()=>PZe});function vZe(t){return!!(Ane.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function nP(t,{one:e,more:r,zero:o=r}){return t===0?o:t===1?e:r}function DZe(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function SZe(t){}function yL(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function PZe(t,e){let r=Object.values(t);if(!r.includes(e))throw new it(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(o=>JSON.stringify(o)).join(", ")})`);return e}function sl(t,e){let r=[];for(let o of t){let a=e(o);a!==fne&&r.push(a)}return r}function KI(t,e){for(let r of t){let o=e(r);if(o!==pne)return o}}function pL(t){return typeof t=="object"&&t!==null}async function Uc(t){let e=await Promise.allSettled(t),r=[];for(let o of e){if(o.status==="rejected")throw o.reason;r.push(o.value)}return r}function iP(t){if(t instanceof Map&&(t=Object.fromEntries(t)),pL(t))for(let e of Object.keys(t)){let r=t[e];pL(r)&&(t[e]=iP(r))}return t}function ol(t,e,r){let o=t.get(e);return typeof o>"u"&&t.set(e,o=r()),o}function Yy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function md(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function Wy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function bZe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function Ky(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function EL(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function Vy(t){return await new Promise((e,r)=>{let o=[];t.on("error",a=>{r(a)}),t.on("data",a=>{o.push(a)}),t.on("end",()=>{e(Buffer.concat(o))})})}function hne(){let t,e;return{promise:new Promise((o,a)=>{t=o,e=a}),resolve:t,reject:e}}function gne(t){return WI(ue.fromPortablePath(t))}function dne(path){let physicalPath=ue.fromPortablePath(path),currentCacheEntry=WI.cache[physicalPath];delete WI.cache[physicalPath];let result;try{result=gne(physicalPath);let freshCacheEntry=WI.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{WI.cache[physicalPath]=currentCacheEntry}return result}function xZe(t){let e=one.get(t),r=oe.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let o=dne(t);return one.set(t,{mtime:r.mtimeMs,instance:o}),o}function Df(t,{cachingStrategy:e=2}={}){switch(e){case 0:return dne(t);case 1:return xZe(t);case 2:return gne(t);default:throw new Error("Unsupported caching strategy")}}function ks(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function kZe(t){return t.length===0?null:t.map(e=>`(${cne.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function sP(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...o)=>{let{variableName:a,colon:n,fallback:u}=o[o.length-1],A=Object.hasOwn(e,a),p=e[a];if(p||A&&!n)return p;if(u!=null)return u;throw new it(`Environment variable not found (${a})`)})}function VI(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${t}" as a boolean`)}}function yne(t){return typeof t>"u"?t:VI(t)}function CL(t){try{return yne(t)}catch{return null}}function QZe(t){return!!(ue.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function Ene(t,...e){let r=u=>({value:u}),o=r(t),a=e.map(u=>r(u)),{value:n}=(0,lne.default)(o,...a,(u,A)=>{if(Array.isArray(u)&&Array.isArray(A)){for(let p of A)u.find(h=>(0,ane.default)(h,p))||u.push(p);return u}});return n}function FZe(...t){return Ene({},...t)}function wL(t,e){let r=Object.create(null);for(let o of t){let a=o[e];r[a]??=[],r[a].push(o)}return r}function Jy(t){return typeof t=="string"?Number.parseInt(t,10):t}var ane,lne,cne,une,Ane,mL,fne,pne,hL,gL,dL,WI,one,mne,ql=Et(()=>{St();qt();ane=$e(Vte()),lne=$e(sne()),cne=$e(Zo()),une=$e(id()),Ane=$e(zn()),mL=ve("stream");fne=Symbol();sl.skip=fne;pne=Symbol();KI.skip=pne;hL=class extends mL.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};gL=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,une.default)(e)}set(e,r){let o=this.deferred.get(e);typeof o>"u"&&this.deferred.set(e,o=hne());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&o.resolve()},n=>{this.promises.get(e)===a&&o.reject(n)}),o.promise}reduce(e,r){let o=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(o))}async wait(){await Promise.all(this.promises.values())}},dL=class extends mL.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},WI=eval("require");one=new Map;mne=(o=>(o[o.NoCache=0]="NoCache",o[o.FsTime=1]="FsTime",o[o.Node=2]="Node",o))(mne||{})});var zy,IL,BL,Cne=Et(()=>{zy=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(zy||{}),IL=(o=>(o.Dependency="Dependency",o.PeerDependency="PeerDependency",o.PeerDependencyMeta="PeerDependencyMeta",o))(IL||{}),BL=(o=>(o.Inactive="inactive",o.Redundant="redundant",o.Active="active",o))(BL||{})});var de={};Vt(de,{LogLevel:()=>uP,Style:()=>aP,Type:()=>yt,addLogFilterSupport:()=>XI,applyColor:()=>Vs,applyHyperlink:()=>Zy,applyStyle:()=>yd,json:()=>Ed,jsonOrPretty:()=>NZe,mark:()=>bL,pretty:()=>Mt,prettyField:()=>zu,prettyList:()=>PL,prettyTruncatedLocatorList:()=>cP,stripAnsi:()=>Xy.default,supportsColor:()=>lP,supportsHyperlinks:()=>SL,tuple:()=>_c});function wne(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let o=1024**r;return`${Math.floor(t*100/o)/100} ${e[r-1]}`}function _c(t,e){return[e,t]}function yd(t,e,r){return t.get("enableColors")&&r&2&&(e=zI.default.bold(e)),e}function Vs(t,e,r){if(!t.get("enableColors"))return e;let o=RZe.get(r);if(o===null)return e;let a=typeof o>"u"?r:DL.level>=3?o[0]:o[1],n=typeof a=="number"?vL.ansi256(a):a.startsWith("#")?vL.hex(a):vL[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function Zy(t,e,r){return t.get("enableHyperlinks")?TZe?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Mt(t,e,r){if(e===null)return Vs(t,"null",yt.NULL);if(Object.hasOwn(oP,r))return oP[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Vs(t,e,r)}function PL(t,e,r,{separator:o=", "}={}){return[...e].map(a=>Mt(t,a,r)).join(o)}function Ed(t,e){if(t===null)return null;if(Object.hasOwn(oP,e))return oP[e].json(t);if(typeof t!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof t}`);return t}function NZe(t,e,[r,o]){return t?Ed(r,o):Mt(e,r,o)}function bL(t){return{Check:Vs(t,"\u2713","green"),Cross:Vs(t,"\u2718","red"),Question:Vs(t,"?","cyan")}}function zu(t,{label:e,value:[r,o]}){return`${Mt(t,e,yt.CODE)}: ${Mt(t,r,o)}`}function cP(t,e,r){let o=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${qr(t,h)}, `,I=xL(h).length+2;if(o.length>0&&nh).join("").slice(0,-2);let u="X".repeat(a.length.toString().length),A=`and ${u} more.`,p=a.length;for(;o.length>1&&nh).join(""),A.replace(u,Mt(t,p,yt.NUMBER))].join("")}function XI(t,{configuration:e}){let r=e.get("logFilters"),o=new Map,a=new Map,n=[];for(let I of r){let v=I.get("level");if(typeof v>"u")continue;let x=I.get("code");typeof x<"u"&&o.set(x,v);let C=I.get("text");typeof C<"u"&&a.set(C,v);let R=I.get("pattern");typeof R<"u"&&n.push([Ine.default.matcher(R,{contains:!0}),v])}n.reverse();let u=(I,v,x)=>{if(I===null||I===0)return x;let C=a.size>0||n.length>0?(0,Xy.default)(v):v;if(a.size>0){let R=a.get(C);if(typeof R<"u")return R??x}if(n.length>0){for(let[R,L]of n)if(R(C))return L??x}if(o.size>0){let R=o.get(Wu(I));if(typeof R<"u")return R??x}return x},A=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(I,v,x,C){switch(u(v,x,C)){case"info":A.call(I,v,x);break;case"warning":p.call(I,v??0,x);break;case"error":h.call(I,v??0,x);break}};t.reportInfo=function(...I){return E(this,...I,"info")},t.reportWarning=function(...I){return E(this,...I,"warning")},t.reportError=function(...I){return E(this,...I,"error")}}var zI,JI,Ine,Xy,Bne,yt,aP,DL,lP,SL,vL,RZe,Po,oP,TZe,uP,jl=Et(()=>{St();zI=$e(IN()),JI=$e(td());qt();Ine=$e(Zo()),Xy=$e(OS()),Bne=ve("util");fS();bo();yt={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},aP=(e=>(e[e.BOLD=2]="BOLD",e))(aP||{}),DL=JI.default.GITHUB_ACTIONS?{level:2}:zI.default.supportsColor?{level:zI.default.supportsColor.level}:{level:0},lP=DL.level!==0,SL=lP&&!JI.default.GITHUB_ACTIONS&&!JI.default.CIRCLE&&!JI.default.GITLAB,vL=new zI.default.Instance(DL),RZe=new Map([[yt.NO_HINT,null],[yt.NULL,["#a853b5",129]],[yt.SCOPE,["#d75f00",166]],[yt.NAME,["#d7875f",173]],[yt.RANGE,["#00afaf",37]],[yt.REFERENCE,["#87afff",111]],[yt.NUMBER,["#ffd700",220]],[yt.PATH,["#d75fd7",170]],[yt.URL,["#d75fd7",170]],[yt.ADDED,["#5faf00",70]],[yt.REMOVED,["#ff3131",160]],[yt.CODE,["#87afff",111]],[yt.SIZE,["#ffd700",220]]]),Po=t=>t;oP={[yt.ID]:Po({pretty:(t,e)=>typeof e=="number"?Vs(t,`${e}`,yt.NUMBER):Vs(t,e,yt.CODE),json:t=>t}),[yt.INSPECT]:Po({pretty:(t,e)=>(0,Bne.inspect)(e,{depth:1/0,colors:t.get("enableColors"),compact:!0,breakLength:1/0}),json:t=>t}),[yt.NUMBER]:Po({pretty:(t,e)=>Vs(t,`${e}`,yt.NUMBER),json:t=>t}),[yt.IDENT]:Po({pretty:(t,e)=>cs(t,e),json:t=>fn(t)}),[yt.LOCATOR]:Po({pretty:(t,e)=>qr(t,e),json:t=>ba(t)}),[yt.DESCRIPTOR]:Po({pretty:(t,e)=>jn(t,e),json:t=>Pa(t)}),[yt.RESOLUTION]:Po({pretty:(t,{descriptor:e,locator:r})=>ZI(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:Pa(t),locator:e!==null?ba(e):null})}),[yt.DEPENDENT]:Po({pretty:(t,{locator:e,descriptor:r})=>kL(t,e,r),json:({locator:t,descriptor:e})=>({locator:ba(t),descriptor:Pa(e)})}),[yt.PACKAGE_EXTENSION]:Po({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Vs(t,"dependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Vs(t,"peerDependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependencyMeta":return`${cs(t,e.parentDescriptor)} \u27A4 ${Vs(t,"peerDependenciesMeta",yt.CODE)} \u27A4 ${cs(t,Js(e.selector))} \u27A4 ${Vs(t,e.key,yt.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${fn(t.parentDescriptor)} > ${fn(t.descriptor)}`;case"PeerDependency":return`${fn(t.parentDescriptor)} >> ${fn(t.descriptor)}`;case"PeerDependencyMeta":return`${fn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[yt.SETTING]:Po({pretty:(t,e)=>(t.get(e),Zy(t,Vs(t,e,yt.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[yt.DURATION]:Po({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),o=Math.ceil((e-r*60*1e3)/1e3);return o===0?`${r}m`:`${r}m ${o}s`}else{let r=Math.floor(e/1e3),o=e-r*1e3;return o===0?`${r}s`:`${r}s ${o}ms`}},json:t=>t}),[yt.SIZE]:Po({pretty:(t,e)=>Vs(t,wne(e),yt.NUMBER),json:t=>t}),[yt.SIZE_DIFF]:Po({pretty:(t,e)=>{let r=e>=0?"+":"-",o=r==="+"?yt.REMOVED:yt.ADDED;return Vs(t,`${r} ${wne(Math.max(Math.abs(e),1))}`,o)},json:t=>t}),[yt.PATH]:Po({pretty:(t,e)=>Vs(t,ue.fromPortablePath(e),yt.PATH),json:t=>ue.fromPortablePath(t)}),[yt.MARKDOWN]:Po({pretty:(t,{text:e,format:r,paragraphs:o})=>Do(e,{format:r,paragraphs:o}),json:({text:t})=>t}),[yt.MARKDOWN_INLINE]:Po({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,o,a)=>Mt(t,o+a+o,yt.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,o,a)=>yd(t,a,2)),e),json:t=>t})};TZe=!!process.env.KONSOLE_VERSION;uP=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(uP||{})});var vne=_($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.splitWhen=$y.flatten=void 0;function LZe(t){return t.reduce((e,r)=>[].concat(e,r),[])}$y.flatten=LZe;function OZe(t,e){let r=[[]],o=0;for(let a of t)e(a)?(o++,r[o]=[]):r[o].push(a);return r}$y.splitWhen=OZe});var Dne=_(AP=>{"use strict";Object.defineProperty(AP,"__esModule",{value:!0});AP.isEnoentCodeError=void 0;function MZe(t){return t.code==="ENOENT"}AP.isEnoentCodeError=MZe});var Sne=_(fP=>{"use strict";Object.defineProperty(fP,"__esModule",{value:!0});fP.createDirentFromStats=void 0;var QL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function UZe(t,e){return new QL(t,e)}fP.createDirentFromStats=UZe});var Pne=_(Xu=>{"use strict";Object.defineProperty(Xu,"__esModule",{value:!0});Xu.removeLeadingDotSegment=Xu.escape=Xu.makeAbsolute=Xu.unixify=void 0;var _Ze=ve("path"),HZe=2,qZe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function jZe(t){return t.replace(/\\/g,"/")}Xu.unixify=jZe;function GZe(t,e){return _Ze.resolve(t,e)}Xu.makeAbsolute=GZe;function YZe(t){return t.replace(qZe,"\\$2")}Xu.escape=YZe;function WZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(HZe)}return t}Xu.removeLeadingDotSegment=WZe});var xne=_((PTt,bne)=>{bne.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var Fne=_((bTt,Qne)=>{var KZe=xne(),kne={"{":"}","(":")","[":"]"},VZe=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,o=-2,a=-2,n=-2,u=-2;ee&&(u===-1||u>o||(u=t.indexOf("\\",e),u===-1||u>o)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(u=t.indexOf("\\",e),u===-1||u>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(u=t.indexOf("\\",e),u===-1||u>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(u=t.indexOf("\\",r),u===-1||u>n))))return!0;if(t[e]==="\\"){var A=t[e+1];e+=2;var p=kne[A];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},JZe=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var zZe=Fne(),XZe=ve("path").posix.dirname,ZZe=ve("os").platform()==="win32",FL="/",$Ze=/\\/g,e$e=/[\{\[].*[\}\]]$/,t$e=/(^|[^\\])([\{\[]|\([^\)]+$)/,r$e=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Rne.exports=function(e,r){var o=Object.assign({flipBackslashes:!0},r);o.flipBackslashes&&ZZe&&e.indexOf(FL)<0&&(e=e.replace($Ze,FL)),e$e.test(e)&&(e+=FL),e+="a";do e=XZe(e);while(zZe(e)||t$e.test(e));return e.replace(r$e,"$1")}});var qne=_(jr=>{"use strict";Object.defineProperty(jr,"__esModule",{value:!0});jr.matchAny=jr.convertPatternsToRe=jr.makeRe=jr.getPatternParts=jr.expandBraceExpansion=jr.expandPatternsWithBraceExpansion=jr.isAffectDepthOfReadingPattern=jr.endsWithSlashGlobStar=jr.hasGlobStar=jr.getBaseDirectory=jr.isPatternRelatedToParentDirectory=jr.getPatternsOutsideCurrentDirectory=jr.getPatternsInsideCurrentDirectory=jr.getPositivePatterns=jr.getNegativePatterns=jr.isPositivePattern=jr.isNegativePattern=jr.convertToNegativePattern=jr.convertToPositivePattern=jr.isDynamicPattern=jr.isStaticPattern=void 0;var n$e=ve("path"),i$e=Tne(),RL=Zo(),Nne="**",s$e="\\",o$e=/[*?]|^!/,a$e=/\[[^[]*]/,l$e=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,c$e=/[!*+?@]\([^(]*\)/,u$e=/,|\.\./;function Lne(t,e={}){return!One(t,e)}jr.isStaticPattern=Lne;function One(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(s$e)||o$e.test(t)||a$e.test(t)||l$e.test(t)||e.extglob!==!1&&c$e.test(t)||e.braceExpansion!==!1&&A$e(t))}jr.isDynamicPattern=One;function A$e(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let o=t.slice(e,r);return u$e.test(o)}function f$e(t){return pP(t)?t.slice(1):t}jr.convertToPositivePattern=f$e;function p$e(t){return"!"+t}jr.convertToNegativePattern=p$e;function pP(t){return t.startsWith("!")&&t[1]!=="("}jr.isNegativePattern=pP;function Mne(t){return!pP(t)}jr.isPositivePattern=Mne;function h$e(t){return t.filter(pP)}jr.getNegativePatterns=h$e;function g$e(t){return t.filter(Mne)}jr.getPositivePatterns=g$e;function d$e(t){return t.filter(e=>!TL(e))}jr.getPatternsInsideCurrentDirectory=d$e;function m$e(t){return t.filter(TL)}jr.getPatternsOutsideCurrentDirectory=m$e;function TL(t){return t.startsWith("..")||t.startsWith("./..")}jr.isPatternRelatedToParentDirectory=TL;function y$e(t){return i$e(t,{flipBackslashes:!1})}jr.getBaseDirectory=y$e;function E$e(t){return t.includes(Nne)}jr.hasGlobStar=E$e;function Une(t){return t.endsWith("/"+Nne)}jr.endsWithSlashGlobStar=Une;function C$e(t){let e=n$e.basename(t);return Une(t)||Lne(e)}jr.isAffectDepthOfReadingPattern=C$e;function w$e(t){return t.reduce((e,r)=>e.concat(_ne(r)),[])}jr.expandPatternsWithBraceExpansion=w$e;function _ne(t){return RL.braces(t,{expand:!0,nodupes:!0})}jr.expandBraceExpansion=_ne;function I$e(t,e){let{parts:r}=RL.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}jr.getPatternParts=I$e;function Hne(t,e){return RL.makeRe(t,e)}jr.makeRe=Hne;function B$e(t,e){return t.map(r=>Hne(r,e))}jr.convertPatternsToRe=B$e;function v$e(t,e){return e.some(r=>r.test(t))}jr.matchAny=v$e});var Wne=_((QTt,Yne)=>{"use strict";var D$e=ve("stream"),jne=D$e.PassThrough,S$e=Array.prototype.slice;Yne.exports=P$e;function P$e(){let t=[],e=S$e.call(arguments),r=!1,o=e[e.length-1];o&&!Array.isArray(o)&&o.pipe==null?e.pop():o={};let a=o.end!==!1,n=o.pipeError===!0;o.objectMode==null&&(o.objectMode=!0),o.highWaterMark==null&&(o.highWaterMark=64*1024);let u=jne(o);function A(){for(let E=0,I=arguments.length;E0||(r=!1,p())}function x(C){function R(){C.removeListener("merge2UnpipeEnd",R),C.removeListener("end",R),n&&C.removeListener("error",L),v()}function L(U){u.emit("error",U)}if(C._readableState.endEmitted)return v();C.on("merge2UnpipeEnd",R),C.on("end",R),n&&C.on("error",L),C.pipe(u,{end:!1}),C.resume()}for(let C=0;C{"use strict";Object.defineProperty(hP,"__esModule",{value:!0});hP.merge=void 0;var b$e=Wne();function x$e(t){let e=b$e(t);return t.forEach(r=>{r.once("error",o=>e.emit("error",o))}),e.once("close",()=>Kne(t)),e.once("end",()=>Kne(t)),e}hP.merge=x$e;function Kne(t){t.forEach(e=>e.emit("close"))}});var Jne=_(eE=>{"use strict";Object.defineProperty(eE,"__esModule",{value:!0});eE.isEmpty=eE.isString=void 0;function k$e(t){return typeof t=="string"}eE.isString=k$e;function Q$e(t){return t===""}eE.isEmpty=Q$e});var Sf=_(xo=>{"use strict";Object.defineProperty(xo,"__esModule",{value:!0});xo.string=xo.stream=xo.pattern=xo.path=xo.fs=xo.errno=xo.array=void 0;var F$e=vne();xo.array=F$e;var R$e=Dne();xo.errno=R$e;var T$e=Sne();xo.fs=T$e;var N$e=Pne();xo.path=N$e;var L$e=qne();xo.pattern=L$e;var O$e=Vne();xo.stream=O$e;var M$e=Jne();xo.string=M$e});var Zne=_(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.convertPatternGroupToTask=ko.convertPatternGroupsToTasks=ko.groupPatternsByBaseDirectory=ko.getNegativePatternsAsPositive=ko.getPositivePatterns=ko.convertPatternsToTasks=ko.generate=void 0;var Pf=Sf();function U$e(t,e){let r=zne(t),o=Xne(t,e.ignore),a=r.filter(p=>Pf.pattern.isStaticPattern(p,e)),n=r.filter(p=>Pf.pattern.isDynamicPattern(p,e)),u=NL(a,o,!1),A=NL(n,o,!0);return u.concat(A)}ko.generate=U$e;function NL(t,e,r){let o=[],a=Pf.pattern.getPatternsOutsideCurrentDirectory(t),n=Pf.pattern.getPatternsInsideCurrentDirectory(t),u=LL(a),A=LL(n);return o.push(...OL(u,e,r)),"."in A?o.push(ML(".",n,e,r)):o.push(...OL(A,e,r)),o}ko.convertPatternsToTasks=NL;function zne(t){return Pf.pattern.getPositivePatterns(t)}ko.getPositivePatterns=zne;function Xne(t,e){return Pf.pattern.getNegativePatterns(t).concat(e).map(Pf.pattern.convertToPositivePattern)}ko.getNegativePatternsAsPositive=Xne;function LL(t){let e={};return t.reduce((r,o)=>{let a=Pf.pattern.getBaseDirectory(o);return a in r?r[a].push(o):r[a]=[o],r},e)}ko.groupPatternsByBaseDirectory=LL;function OL(t,e,r){return Object.keys(t).map(o=>ML(o,t[o],e,r))}ko.convertPatternGroupsToTasks=OL;function ML(t,e,r,o){return{dynamic:o,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Pf.pattern.convertToNegativePattern))}}ko.convertPatternGroupToTask=ML});var eie=_(tE=>{"use strict";Object.defineProperty(tE,"__esModule",{value:!0});tE.removeDuplicateSlashes=tE.transform=void 0;var _$e=/(?!^)\/{2,}/g;function H$e(t){return t.map(e=>$ne(e))}tE.transform=H$e;function $ne(t){return t.replace(_$e,"/")}tE.removeDuplicateSlashes=$ne});var rie=_(gP=>{"use strict";Object.defineProperty(gP,"__esModule",{value:!0});gP.read=void 0;function q$e(t,e,r){e.fs.lstat(t,(o,a)=>{if(o!==null){tie(r,o);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){UL(r,a);return}e.fs.stat(t,(n,u)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){tie(r,n);return}UL(r,a);return}e.markSymbolicLink&&(u.isSymbolicLink=()=>!0),UL(r,u)})})}gP.read=q$e;function tie(t,e){t(e)}function UL(t,e){t(null,e)}});var nie=_(dP=>{"use strict";Object.defineProperty(dP,"__esModule",{value:!0});dP.read=void 0;function j$e(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let o=e.fs.statSync(t);return e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),o}catch(o){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw o}}dP.read=j$e});var iie=_(Xp=>{"use strict";Object.defineProperty(Xp,"__esModule",{value:!0});Xp.createFileSystemAdapter=Xp.FILE_SYSTEM_ADAPTER=void 0;var mP=ve("fs");Xp.FILE_SYSTEM_ADAPTER={lstat:mP.lstat,stat:mP.stat,lstatSync:mP.lstatSync,statSync:mP.statSync};function G$e(t){return t===void 0?Xp.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Xp.FILE_SYSTEM_ADAPTER),t)}Xp.createFileSystemAdapter=G$e});var sie=_(HL=>{"use strict";Object.defineProperty(HL,"__esModule",{value:!0});var Y$e=iie(),_L=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Y$e.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};HL.default=_L});var Cd=_(Zp=>{"use strict";Object.defineProperty(Zp,"__esModule",{value:!0});Zp.statSync=Zp.stat=Zp.Settings=void 0;var oie=rie(),W$e=nie(),qL=sie();Zp.Settings=qL.default;function K$e(t,e,r){if(typeof e=="function"){oie.read(t,jL(),e);return}oie.read(t,jL(e),r)}Zp.stat=K$e;function V$e(t,e){let r=jL(e);return W$e.read(t,r)}Zp.statSync=V$e;function jL(t={}){return t instanceof qL.default?t:new qL.default(t)}});var lie=_((qTt,aie)=>{aie.exports=J$e;function J$e(t,e){var r,o,a,n=!0;Array.isArray(t)?(r=[],o=t.length):(a=Object.keys(t),r={},o=a.length);function u(p){function h(){e&&e(p,r),e=null}n?process.nextTick(h):h()}function A(p,h,E){r[p]=E,(--o===0||h)&&u(h)}o?a?a.forEach(function(p){t[p](function(h,E){A(p,h,E)})}):t.forEach(function(p,h){p(function(E,I){A(h,E,I)})}):u(null),n=!1}});var YL=_(EP=>{"use strict";Object.defineProperty(EP,"__esModule",{value:!0});EP.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var yP=process.versions.node.split(".");if(yP[0]===void 0||yP[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var cie=Number.parseInt(yP[0],10),z$e=Number.parseInt(yP[1],10),uie=10,X$e=10,Z$e=cie>uie,$$e=cie===uie&&z$e>=X$e;EP.IS_SUPPORT_READDIR_WITH_FILE_TYPES=Z$e||$$e});var Aie=_(CP=>{"use strict";Object.defineProperty(CP,"__esModule",{value:!0});CP.createDirentFromStats=void 0;var WL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function eet(t,e){return new WL(t,e)}CP.createDirentFromStats=eet});var KL=_(wP=>{"use strict";Object.defineProperty(wP,"__esModule",{value:!0});wP.fs=void 0;var tet=Aie();wP.fs=tet});var VL=_(IP=>{"use strict";Object.defineProperty(IP,"__esModule",{value:!0});IP.joinPathSegments=void 0;function ret(t,e,r){return t.endsWith(r)?t+e:t+r+e}IP.joinPathSegments=ret});var mie=_($p=>{"use strict";Object.defineProperty($p,"__esModule",{value:!0});$p.readdir=$p.readdirWithFileTypes=$p.read=void 0;var net=Cd(),fie=lie(),iet=YL(),pie=KL(),hie=VL();function set(t,e,r){if(!e.stats&&iet.IS_SUPPORT_READDIR_WITH_FILE_TYPES){gie(t,e,r);return}die(t,e,r)}$p.read=set;function gie(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(o,a)=>{if(o!==null){BP(r,o);return}let n=a.map(A=>({dirent:A,name:A.name,path:hie.joinPathSegments(t,A.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){JL(r,n);return}let u=n.map(A=>oet(A,e));fie(u,(A,p)=>{if(A!==null){BP(r,A);return}JL(r,p)})})}$p.readdirWithFileTypes=gie;function oet(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(o,a)=>{if(o!==null){if(e.throwErrorOnBrokenSymbolicLink){r(o);return}r(null,t);return}t.dirent=pie.fs.createDirentFromStats(t.name,a),r(null,t)})}}function die(t,e,r){e.fs.readdir(t,(o,a)=>{if(o!==null){BP(r,o);return}let n=a.map(u=>{let A=hie.joinPathSegments(t,u,e.pathSegmentSeparator);return p=>{net.stat(A,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let I={name:u,path:A,dirent:pie.fs.createDirentFromStats(u,E)};e.stats&&(I.stats=E),p(null,I)})}});fie(n,(u,A)=>{if(u!==null){BP(r,u);return}JL(r,A)})})}$p.readdir=die;function BP(t,e){t(e)}function JL(t,e){t(null,e)}});var Iie=_(eh=>{"use strict";Object.defineProperty(eh,"__esModule",{value:!0});eh.readdir=eh.readdirWithFileTypes=eh.read=void 0;var aet=Cd(),cet=YL(),yie=KL(),Eie=VL();function uet(t,e){return!e.stats&&cet.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Cie(t,e):wie(t,e)}eh.read=uet;function Cie(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(o=>{let a={dirent:o,name:o.name,path:Eie.joinPathSegments(t,o.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=yie.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}eh.readdirWithFileTypes=Cie;function wie(t,e){return e.fs.readdirSync(t).map(o=>{let a=Eie.joinPathSegments(t,o,e.pathSegmentSeparator),n=aet.statSync(a,e.fsStatSettings),u={name:o,path:a,dirent:yie.fs.createDirentFromStats(o,n)};return e.stats&&(u.stats=n),u})}eh.readdir=wie});var Bie=_(th=>{"use strict";Object.defineProperty(th,"__esModule",{value:!0});th.createFileSystemAdapter=th.FILE_SYSTEM_ADAPTER=void 0;var rE=ve("fs");th.FILE_SYSTEM_ADAPTER={lstat:rE.lstat,stat:rE.stat,lstatSync:rE.lstatSync,statSync:rE.statSync,readdir:rE.readdir,readdirSync:rE.readdirSync};function Aet(t){return t===void 0?th.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},th.FILE_SYSTEM_ADAPTER),t)}th.createFileSystemAdapter=Aet});var vie=_(XL=>{"use strict";Object.defineProperty(XL,"__esModule",{value:!0});var fet=ve("path"),pet=Cd(),het=Bie(),zL=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=het.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fet.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new pet.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};XL.default=zL});var vP=_(rh=>{"use strict";Object.defineProperty(rh,"__esModule",{value:!0});rh.Settings=rh.scandirSync=rh.scandir=void 0;var Die=mie(),get=Iie(),ZL=vie();rh.Settings=ZL.default;function det(t,e,r){if(typeof e=="function"){Die.read(t,$L(),e);return}Die.read(t,$L(e),r)}rh.scandir=det;function met(t,e){let r=$L(e);return get.read(t,r)}rh.scandirSync=met;function $L(t={}){return t instanceof ZL.default?t:new ZL.default(t)}});var Pie=_((ZTt,Sie)=>{"use strict";function yet(t){var e=new t,r=e;function o(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:o,release:a}}Sie.exports=yet});var xie=_(($Tt,eO)=>{"use strict";var Eet=Pie();function bie(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var o=Eet(Cet),a=null,n=null,u=0,A=null,p={push:R,drain:Gl,saturated:Gl,pause:E,paused:!1,concurrency:r,running:h,resume:x,idle:C,length:I,getQueue:v,unshift:L,empty:Gl,kill:J,killAndDrain:te,error:ae};return p;function h(){return u}function E(){p.paused=!0}function I(){for(var fe=a,ce=0;fe;)fe=fe.next,ce++;return ce}function v(){for(var fe=a,ce=[];fe;)ce.push(fe.value),fe=fe.next;return ce}function x(){if(!!p.paused){p.paused=!1;for(var fe=0;fe{"use strict";Object.defineProperty(Zu,"__esModule",{value:!0});Zu.joinPathSegments=Zu.replacePathSegmentSeparator=Zu.isAppliedFilter=Zu.isFatalError=void 0;function Iet(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zu.isFatalError=Iet;function Bet(t,e){return t===null||t(e)}Zu.isAppliedFilter=Bet;function vet(t,e){return t.split(/[/\\]/).join(e)}Zu.replacePathSegmentSeparator=vet;function Det(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zu.joinPathSegments=Det});var nO=_(rO=>{"use strict";Object.defineProperty(rO,"__esModule",{value:!0});var Pet=DP(),tO=class{constructor(e,r){this._root=e,this._settings=r,this._root=Pet.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};rO.default=tO});var oO=_(sO=>{"use strict";Object.defineProperty(sO,"__esModule",{value:!0});var bet=ve("events"),xet=vP(),ket=xie(),SP=DP(),Qet=nO(),iO=class extends Qet.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=xet.scandir,this._emitter=new bet.EventEmitter,this._queue=ket(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let o={directory:e,base:r};this._queue.push(o,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(o,a)=>{if(o!==null){r(o,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!SP.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let o=e.path;r!==void 0&&(e.path=SP.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),SP.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&SP.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};sO.default=iO});var kie=_(lO=>{"use strict";Object.defineProperty(lO,"__esModule",{value:!0});var Fet=oO(),aO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Fet.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{Ret(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{Tet(e,this._storage)}),this._reader.read()}};lO.default=aO;function Ret(t,e){t(e)}function Tet(t,e){t(null,e)}});var Qie=_(uO=>{"use strict";Object.defineProperty(uO,"__esModule",{value:!0});var Net=ve("stream"),Let=oO(),cO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Let.default(this._root,this._settings),this._stream=new Net.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};uO.default=cO});var Fie=_(fO=>{"use strict";Object.defineProperty(fO,"__esModule",{value:!0});var Oet=vP(),PP=DP(),Met=nO(),AO=class extends Met.default{constructor(){super(...arguments),this._scandir=Oet.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let o=this._scandir(e,this._settings.fsScandirSettings);for(let a of o)this._handleEntry(a,r)}catch(o){this._handleError(o)}}_handleError(e){if(!!PP.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let o=e.path;r!==void 0&&(e.path=PP.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),PP.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&PP.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};fO.default=AO});var Rie=_(hO=>{"use strict";Object.defineProperty(hO,"__esModule",{value:!0});var Uet=Fie(),pO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Uet.default(this._root,this._settings)}read(){return this._reader.read()}};hO.default=pO});var Tie=_(dO=>{"use strict";Object.defineProperty(dO,"__esModule",{value:!0});var _et=ve("path"),Het=vP(),gO=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,_et.sep),this.fsScandirSettings=new Het.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};dO.default=gO});var xP=_($u=>{"use strict";Object.defineProperty($u,"__esModule",{value:!0});$u.Settings=$u.walkStream=$u.walkSync=$u.walk=void 0;var Nie=kie(),qet=Qie(),jet=Rie(),mO=Tie();$u.Settings=mO.default;function Get(t,e,r){if(typeof e=="function"){new Nie.default(t,bP()).read(e);return}new Nie.default(t,bP(e)).read(r)}$u.walk=Get;function Yet(t,e){let r=bP(e);return new jet.default(t,r).read()}$u.walkSync=Yet;function Wet(t,e){let r=bP(e);return new qet.default(t,r).read()}$u.walkStream=Wet;function bP(t={}){return t instanceof mO.default?t:new mO.default(t)}});var kP=_(EO=>{"use strict";Object.defineProperty(EO,"__esModule",{value:!0});var Ket=ve("path"),Vet=Cd(),Lie=Sf(),yO=class{constructor(e){this._settings=e,this._fsStatSettings=new Vet.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return Ket.resolve(this._settings.cwd,e)}_makeEntry(e,r){let o={name:r,path:r,dirent:Lie.fs.createDirentFromStats(r,e)};return this._settings.stats&&(o.stats=e),o}_isFatalError(e){return!Lie.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};EO.default=yO});var IO=_(wO=>{"use strict";Object.defineProperty(wO,"__esModule",{value:!0});var Jet=ve("stream"),zet=Cd(),Xet=xP(),Zet=kP(),CO=class extends Zet.default{constructor(){super(...arguments),this._walkStream=Xet.walkStream,this._stat=zet.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let o=e.map(this._getFullEntryPath,this),a=new Jet.PassThrough({objectMode:!0});a._write=(n,u,A)=>this._getEntry(o[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===o.length-1&&a.end(),A()}).catch(A);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(o.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,o)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):o(a))})}};wO.default=CO});var Oie=_(vO=>{"use strict";Object.defineProperty(vO,"__esModule",{value:!0});var $et=xP(),ett=kP(),ttt=IO(),BO=class extends ett.default{constructor(){super(...arguments),this._walkAsync=$et.walk,this._readerStream=new ttt.default(this._settings)}dynamic(e,r){return new Promise((o,a)=>{this._walkAsync(e,r,(n,u)=>{n===null?o(u):a(n)})})}async static(e,r){let o=[],a=this._readerStream.static(e,r);return new Promise((n,u)=>{a.once("error",u),a.on("data",A=>o.push(A)),a.once("end",()=>n(o))})}};vO.default=BO});var Mie=_(SO=>{"use strict";Object.defineProperty(SO,"__esModule",{value:!0});var nE=Sf(),DO=class{constructor(e,r,o){this._patterns=e,this._settings=r,this._micromatchOptions=o,this._storage=[],this._fillStorage()}_fillStorage(){let e=nE.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let o=this._getPatternSegments(r),a=this._splitSegmentsIntoSections(o);this._storage.push({complete:a.length<=1,pattern:r,segments:o,sections:a})}}_getPatternSegments(e){return nE.pattern.getPatternParts(e,this._micromatchOptions).map(o=>nE.pattern.isDynamicPattern(o,this._settings)?{dynamic:!0,pattern:o,patternRe:nE.pattern.makeRe(o,this._micromatchOptions)}:{dynamic:!1,pattern:o})}_splitSegmentsIntoSections(e){return nE.array.splitWhen(e,r=>r.dynamic&&nE.pattern.hasGlobStar(r.pattern))}};SO.default=DO});var Uie=_(bO=>{"use strict";Object.defineProperty(bO,"__esModule",{value:!0});var rtt=Mie(),PO=class extends rtt.default{match(e){let r=e.split("/"),o=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>o);for(let n of a){let u=n.sections[0];if(!n.complete&&o>u.length||r.every((p,h)=>{let E=n.segments[h];return!!(E.dynamic&&E.patternRe.test(p)||!E.dynamic&&E.pattern===p)}))return!0}return!1}};bO.default=PO});var _ie=_(kO=>{"use strict";Object.defineProperty(kO,"__esModule",{value:!0});var QP=Sf(),ntt=Uie(),xO=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,o){let a=this._getMatcher(r),n=this._getNegativePatternsRe(o);return u=>this._filter(e,u,a,n)}_getMatcher(e){return new ntt.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(QP.pattern.isAffectDepthOfReadingPattern);return QP.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,o,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=QP.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,o)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let o=r.split("/").length;if(e==="")return o;let a=e.split("/").length;return o-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!QP.pattern.matchAny(e,r)}};kO.default=xO});var Hie=_(FO=>{"use strict";Object.defineProperty(FO,"__esModule",{value:!0});var wd=Sf(),QO=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let o=wd.pattern.convertPatternsToRe(e,this._micromatchOptions),a=wd.pattern.convertPatternsToRe(r,this._micromatchOptions);return n=>this._filter(n,o,a)}_filter(e,r,o){if(this._settings.unique&&this._isDuplicateEntry(e)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e.path,o))return!1;let a=this._settings.baseNameMatch?e.name:e.path,n=e.dirent.isDirectory(),u=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(e.path,o,n);return this._settings.unique&&u&&this._createIndexRecord(e),u}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let o=wd.path.makeAbsolute(this._settings.cwd,e);return wd.pattern.matchAny(o,r)}_isMatchToPatterns(e,r,o){let a=wd.path.removeLeadingDotSegment(e),n=wd.pattern.matchAny(a,r);return!n&&o?wd.pattern.matchAny(a+"/",r):n}};FO.default=QO});var qie=_(TO=>{"use strict";Object.defineProperty(TO,"__esModule",{value:!0});var itt=Sf(),RO=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return itt.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};TO.default=RO});var Gie=_(LO=>{"use strict";Object.defineProperty(LO,"__esModule",{value:!0});var jie=Sf(),NO=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=jie.path.makeAbsolute(this._settings.cwd,r),r=jie.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};LO.default=NO});var FP=_(MO=>{"use strict";Object.defineProperty(MO,"__esModule",{value:!0});var stt=ve("path"),ott=_ie(),att=Hie(),ltt=qie(),ctt=Gie(),OO=class{constructor(e){this._settings=e,this.errorFilter=new ltt.default(this._settings),this.entryFilter=new att.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new ott.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new ctt.default(this._settings)}_getRootDirectory(e){return stt.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};MO.default=OO});var Yie=_(_O=>{"use strict";Object.defineProperty(_O,"__esModule",{value:!0});var utt=Oie(),Att=FP(),UO=class extends Att.default{constructor(){super(...arguments),this._reader=new utt.default(this._settings)}async read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return(await this.api(r,e,o)).map(n=>o.transform(n))}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};_O.default=UO});var Wie=_(qO=>{"use strict";Object.defineProperty(qO,"__esModule",{value:!0});var ftt=ve("stream"),ptt=IO(),htt=FP(),HO=class extends htt.default{constructor(){super(...arguments),this._reader=new ptt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e),a=this.api(r,e,o),n=new ftt.Readable({objectMode:!0,read:()=>{}});return a.once("error",u=>n.emit("error",u)).on("data",u=>n.emit("data",o.transform(u))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};qO.default=HO});var Kie=_(GO=>{"use strict";Object.defineProperty(GO,"__esModule",{value:!0});var gtt=Cd(),dtt=xP(),mtt=kP(),jO=class extends mtt.default{constructor(){super(...arguments),this._walkSync=dtt.walkSync,this._statSync=gtt.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let o=[];for(let a of e){let n=this._getFullEntryPath(a),u=this._getEntry(n,a,r);u===null||!r.entryFilter(u)||o.push(u)}return o}_getEntry(e,r,o){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(o.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};GO.default=jO});var Vie=_(WO=>{"use strict";Object.defineProperty(WO,"__esModule",{value:!0});var ytt=Kie(),Ett=FP(),YO=class extends Ett.default{constructor(){super(...arguments),this._reader=new ytt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return this.api(r,e,o).map(o.transform)}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};WO.default=YO});var Jie=_(sE=>{"use strict";Object.defineProperty(sE,"__esModule",{value:!0});sE.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var iE=ve("fs"),Ctt=ve("os"),wtt=Math.max(Ctt.cpus().length,1);sE.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:iE.lstat,lstatSync:iE.lstatSync,stat:iE.stat,statSync:iE.statSync,readdir:iE.readdir,readdirSync:iE.readdirSync};var KO=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,wtt),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},sE.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};sE.default=KO});var RP=_((vNt,Zie)=>{"use strict";var zie=Zne(),Xie=eie(),Itt=Yie(),Btt=Wie(),vtt=Vie(),VO=Jie(),Id=Sf();async function JO(t,e){oE(t);let r=zO(t,Itt.default,e),o=await Promise.all(r);return Id.array.flatten(o)}(function(t){function e(u,A){oE(u);let p=zO(u,vtt.default,A);return Id.array.flatten(p)}t.sync=e;function r(u,A){oE(u);let p=zO(u,Btt.default,A);return Id.stream.merge(p)}t.stream=r;function o(u,A){oE(u);let p=Xie.transform([].concat(u)),h=new VO.default(A);return zie.generate(p,h)}t.generateTasks=o;function a(u,A){oE(u);let p=new VO.default(A);return Id.pattern.isDynamicPattern(u,p)}t.isDynamicPattern=a;function n(u){return oE(u),Id.path.escape(u)}t.escapePath=n})(JO||(JO={}));function zO(t,e,r){let o=Xie.transform([].concat(t)),a=new VO.default(r),n=zie.generate(o,a),u=new e(a);return n.map(u.read,u)}function oE(t){if(![].concat(t).every(o=>Id.string.isString(o)&&!Id.string.isEmpty(o)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}Zie.exports=JO});var wn={};Vt(wn,{checksumFile:()=>NP,checksumPattern:()=>LP,makeHash:()=>zs});function zs(...t){let e=(0,TP.createHash)("sha512"),r="";for(let o of t)typeof o=="string"?r+=o:o&&(r&&(e.update(r),r=""),e.update(o));return r&&e.update(r),e.digest("hex")}async function NP(t,{baseFs:e,algorithm:r}={baseFs:oe,algorithm:"sha512"}){let o=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,TP.createHash)(r),A=0;for(;(A=await e.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await e.closePromise(o)}}async function LP(t,{cwd:e}){let o=(await(0,XO.default)(t,{cwd:ue.fromPortablePath(e),onlyDirectories:!0})).map(A=>`${A}/**/*`),a=await(0,XO.default)([t,...o],{cwd:ue.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async A=>{let p=[Buffer.from(A)],h=ue.toPortablePath(A),E=await oe.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await oe.readlinkPromise(h))):E.isFile()&&p.push(await oe.readFilePromise(h)),p.join("\0")})),u=(0,TP.createHash)("sha512");for(let A of n)u.update(A);return u.digest("hex")}var TP,XO,nh=Et(()=>{St();TP=ve("crypto"),XO=$e(RP())});var W={};Vt(W,{areDescriptorsEqual:()=>nse,areIdentsEqual:()=>n1,areLocatorsEqual:()=>i1,areVirtualPackagesEquivalent:()=>Rtt,bindDescriptor:()=>Qtt,bindLocator:()=>Ftt,convertDescriptorToLocator:()=>OP,convertLocatorToDescriptor:()=>$O,convertPackageToLocator:()=>btt,convertToIdent:()=>Ptt,convertToManifestRange:()=>jtt,copyPackage:()=>e1,devirtualizeDescriptor:()=>t1,devirtualizeLocator:()=>r1,ensureDevirtualizedDescriptor:()=>xtt,ensureDevirtualizedLocator:()=>ktt,getIdentVendorPath:()=>nM,isPackageCompatible:()=>qP,isVirtualDescriptor:()=>bf,isVirtualLocator:()=>Hc,makeDescriptor:()=>In,makeIdent:()=>eA,makeLocator:()=>Qs,makeRange:()=>_P,parseDescriptor:()=>ih,parseFileStyleRange:()=>Htt,parseIdent:()=>Js,parseLocator:()=>xf,parseRange:()=>Bd,prettyDependent:()=>kL,prettyDescriptor:()=>jn,prettyIdent:()=>cs,prettyLocator:()=>qr,prettyLocatorNoColors:()=>xL,prettyRange:()=>cE,prettyReference:()=>o1,prettyResolution:()=>ZI,prettyWorkspace:()=>a1,renamePackage:()=>eM,slugifyIdent:()=>ZO,slugifyLocator:()=>lE,sortDescriptors:()=>uE,stringifyDescriptor:()=>Pa,stringifyIdent:()=>fn,stringifyLocator:()=>ba,tryParseDescriptor:()=>s1,tryParseIdent:()=>ise,tryParseLocator:()=>UP,tryParseRange:()=>_tt,virtualizeDescriptor:()=>tM,virtualizePackage:()=>rM});function eA(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:zs(t,e),scope:t,name:e}}function In(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:zs(t.identHash,e),range:e}}function Qs(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:zs(t.identHash,e),reference:e}}function Ptt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function OP(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function $O(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function btt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function eM(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function e1(t){return eM(t,t)}function tM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return In(t,`virtual:${e}#${t.range}`)}function rM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return eM(t,Qs(t,`virtual:${e}#${t.reference}`))}function bf(t){return t.range.startsWith($I)}function Hc(t){return t.reference.startsWith($I)}function t1(t){if(!bf(t))throw new Error("Not a virtual descriptor");return In(t,t.range.replace(MP,""))}function r1(t){if(!Hc(t))throw new Error("Not a virtual descriptor");return Qs(t,t.reference.replace(MP,""))}function xtt(t){return bf(t)?In(t,t.range.replace(MP,"")):t}function ktt(t){return Hc(t)?Qs(t,t.reference.replace(MP,"")):t}function Qtt(t,e){return t.range.includes("::")?t:In(t,`${t.range}::${aE.default.stringify(e)}`)}function Ftt(t,e){return t.reference.includes("::")?t:Qs(t,`${t.reference}::${aE.default.stringify(e)}`)}function n1(t,e){return t.identHash===e.identHash}function nse(t,e){return t.descriptorHash===e.descriptorHash}function i1(t,e){return t.locatorHash===e.locatorHash}function Rtt(t,e){if(!Hc(t))throw new Error("Invalid package type");if(!Hc(e))throw new Error("Invalid package type");if(!n1(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let o=e.dependencies.get(r.identHash);if(!o||!nse(r,o))return!1}return!0}function Js(t){let e=ise(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function ise(t){let e=t.match(Ttt);if(!e)return null;let[,r,o]=e;return eA(typeof r<"u"?r:null,o)}function ih(t,e=!1){let r=s1(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function s1(t,e=!1){let r=e?t.match(Ntt):t.match(Ltt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return In(eA(u,a),A)}function xf(t,e=!1){let r=UP(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function UP(t,e=!1){let r=e?t.match(Ott):t.match(Mtt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return Qs(eA(u,a),A)}function Bd(t,e){let r=t.match(Utt);if(r===null)throw new Error(`Invalid range (${t})`);let o=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&o!==e.requireProtocol)throw new Error(`Invalid protocol (${o})`);if(e?.requireProtocol&&o===null)throw new Error(`Missing protocol (${o})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),u=e?.parseSelector?aE.default.parse(n):n,A=typeof r[4]<"u"?aE.default.parse(r[4]):null;return{protocol:o,source:a,selector:u,params:A}}function _tt(t,e){try{return Bd(t,e)}catch{return null}}function Htt(t,{protocol:e}){let{selector:r,params:o}=Bd(t,{requireProtocol:e,requireBindings:!0});if(typeof o.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:xf(o.locator,!0),path:r}}function $ie(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function qtt(t){return t===null?!1:Object.entries(t).length>0}function _P({protocol:t,source:e,selector:r,params:o}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${$ie(e)}#`),a+=$ie(r),qtt(o)&&(a+=`::${aE.default.stringify(o)}`),a}function jtt(t){let{params:e,protocol:r,source:o,selector:a}=Bd(t);for(let n in e)n.startsWith("__")&&delete e[n];return _P({protocol:r,source:o,params:e,selector:a})}function fn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function Pa(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function ba(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function ZO(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function lE(t){let{protocol:e,selector:r}=Bd(t.reference),o=e!==null?e.replace(Gtt,""):"exotic",a=ese.default.valid(r),n=a!==null?`${o}-${a}`:`${o}`,u=10;return t.scope?`${ZO(t)}-${n}-${t.locatorHash.slice(0,u)}`:`${ZO(t)}-${n}-${t.locatorHash.slice(0,u)}`}function cs(t,e){return e.scope?`${Mt(t,`@${e.scope}/`,yt.SCOPE)}${Mt(t,e.name,yt.NAME)}`:`${Mt(t,e.name,yt.NAME)}`}function HP(t){if(t.startsWith($I)){let e=HP(t.substring(t.indexOf("#")+1)),r=t.substring($I.length,$I.length+Dtt);return`${e} [${r}]`}else return t.replace(Ytt,"?[...]")}function cE(t,e){return`${Mt(t,HP(e),yt.RANGE)}`}function jn(t,e){return`${cs(t,e)}${Mt(t,"@",yt.RANGE)}${cE(t,e.range)}`}function o1(t,e){return`${Mt(t,HP(e),yt.REFERENCE)}`}function qr(t,e){return`${cs(t,e)}${Mt(t,"@",yt.REFERENCE)}${o1(t,e.reference)}`}function xL(t){return`${fn(t)}@${HP(t.reference)}`}function uE(t){return ks(t,[e=>fn(e),e=>e.range])}function a1(t,e){return cs(t,e.anchoredLocator)}function ZI(t,e,r){let o=bf(e)?t1(e):e;return r===null?`${jn(t,o)} \u2192 ${bL(t).Cross}`:o.identHash===r.identHash?`${jn(t,o)} \u2192 ${o1(t,r.reference)}`:`${jn(t,o)} \u2192 ${qr(t,r)}`}function kL(t,e,r){return r===null?`${qr(t,e)}`:`${qr(t,e)} (via ${cE(t,r.range)})`}function nM(t){return`node_modules/${fn(t)}`}function qP(t,e){return t.conditions?Stt(t.conditions,r=>{let[,o,a]=r.match(rse),n=e[o];return n?n.includes(a):!0}):!0}var aE,ese,tse,$I,Dtt,rse,Stt,MP,Ttt,Ntt,Ltt,Ott,Mtt,Utt,Gtt,Ytt,bo=Et(()=>{aE=$e(ve("querystring")),ese=$e(zn()),tse=$e(eX());jl();nh();ql();bo();$I="virtual:",Dtt=5,rse=/(os|cpu|libc)=([a-z0-9_-]+)/,Stt=(0,tse.makeParser)(rse);MP=/^[^#]*#/;Ttt=/^(?:@([^/]+?)\/)?([^@/]+)$/;Ntt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Ltt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Ott=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Mtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Utt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;Gtt=/:$/;Ytt=/\?.*/});var sse,ose=Et(()=>{bo();sse={hooks:{reduceDependency:(t,e,r,o,{resolver:a,resolveOptions:n})=>{for(let{pattern:u,reference:A}of e.topLevelWorkspace.manifest.resolutions){if(u.from&&(u.from.fullName!==fn(r)||e.configuration.normalizeLocator(Qs(Js(u.from.fullName),u.from.description??r.reference)).locatorHash!==r.locatorHash)||u.descriptor.fullName!==fn(t)||e.configuration.normalizeDependency(In(xf(u.descriptor.fullName),u.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(In(t,A)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let o=a1(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${o}: ${n}`),reportError:(a,n)=>e.reportError(a,`${o}: ${n}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let o of r.errors)e.reportWarning(57,o.message)}}}});var l1,Xn,vd=Et(()=>{l1=class{supportsDescriptor(e,r){return!!(e.range.startsWith(l1.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(l1.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[o.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.getWorkspaceByCwd(e.reference.slice(l1.protocol.length));return{...e,version:o.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...o.manifest.dependencies,...o.manifest.devDependencies])),peerDependencies:new Map([...o.manifest.peerDependencies]),dependenciesMeta:o.manifest.dependenciesMeta,peerDependenciesMeta:o.manifest.peerDependenciesMeta,bin:o.manifest.bin}}},Xn=l1;Xn.protocol="workspace:"});var kr={};Vt(kr,{SemVer:()=>Ase.SemVer,clean:()=>Ktt,getComparator:()=>cse,mergeComparators:()=>iM,satisfiesWithPrereleases:()=>kf,simplifyRanges:()=>sM,stringifyComparator:()=>use,validRange:()=>xa});function kf(t,e,r=!1){if(!t)return!1;let o=`${e}${r}`,a=ase.get(o);if(typeof a>"u")try{a=new sh.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{ase.set(o,a||null)}else if(a===null)return!1;let n;try{n=new sh.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(u=>{for(let A of u)A.semver.prerelease&&(A.semver.prerelease=[]);return u.every(A=>A.test(n))}))}function xa(t){if(t.indexOf(":")!==-1)return null;let e=lse.get(t);if(typeof e<"u")return e;try{e=new sh.default.Range(t)}catch{e=null}return lse.set(t,e),e}function Ktt(t){let e=Wtt.exec(t);return e?e[1]:null}function cse(t){if(t.semver===sh.default.Comparator.ANY)return{gt:null,lt:null};switch(t.operator){case"":return{gt:[">=",t.semver],lt:["<=",t.semver]};case">":case">=":return{gt:[t.operator,t.semver],lt:null};case"<":case"<=":return{gt:null,lt:[t.operator,t.semver]};default:throw new Error(`Assertion failed: Unexpected comparator operator (${t.operator})`)}}function iM(t){if(t.length===0)return null;let e=null,r=null;for(let o of t){if(o.gt){let a=e!==null?sh.default.compare(o.gt[1],e[1]):null;(a===null||a>0||a===0&&o.gt[0]===">")&&(e=o.gt)}if(o.lt){let a=r!==null?sh.default.compare(o.lt[1],r[1]):null;(a===null||a<0||a===0&&o.lt[0]==="<")&&(r=o.lt)}}if(e&&r){let o=sh.default.compare(e[1],r[1]);if(o===0&&(e[0]===">"||r[0]==="<")||o>0)return null}return{gt:e,lt:r}}function use(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1].version===t.lt[1].version)return t.gt[1].version;if(t.gt[0]===">="&&t.lt[0]==="<"){if(t.lt[1].version===`${t.gt[1].major+1}.0.0-0`)return`^${t.gt[1].version}`;if(t.lt[1].version===`${t.gt[1].major}.${t.gt[1].minor+1}.0-0`)return`~${t.gt[1].version}`}}let e=[];return t.gt&&e.push(t.gt[0]+t.gt[1].version),t.lt&&e.push(t.lt[0]+t.lt[1].version),e.length?e.join(" "):"*"}function sM(t){let e=t.map(o=>xa(o).set.map(a=>a.map(n=>cse(n)))),r=e.shift().map(o=>iM(o)).filter(o=>o!==null);for(let o of e){let a=[];for(let n of r)for(let u of o){let A=iM([n,...u]);A!==null&&a.push(A)}r=a}return r.length===0?null:r.map(o=>use(o)).join(" || ")}var sh,Ase,ase,lse,Wtt,Qf=Et(()=>{sh=$e(zn()),Ase=$e(zn()),ase=new Map;lse=new Map;Wtt=/^(?:[\sv=]*?)((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\s*)$/});function fse(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function pse(t){return t.charCodeAt(0)===65279?t.slice(1):t}function $o(t){return t.replace(/\\/g,"/")}function jP(t,{yamlCompatibilityMode:e}){return e?CL(t):typeof t>"u"||typeof t=="boolean"?t:null}function hse(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let o=r%2===0?"":"!",a=e.slice(r);return`${o}${t}=${a}`}function oM(t,e){return e.length===1?hse(t,e[0]):`(${e.map(r=>hse(t,r)).join(" | ")})`}var gse,AE,Ot,fE=Et(()=>{St();Nl();gse=$e(zn());vd();ql();Qf();bo();AE=class{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:r=new Tn}={}){let o=V.join(e,"package.json");try{return await AE.fromFile(o,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let o=await AE.tryFind(e,{baseFs:r});if(o===null)throw new Error("Manifest not found");return o}static async fromFile(e,{baseFs:r=new Tn}={}){let o=new AE;return await o.loadFile(e,{baseFs:r}),o}static fromText(e){let r=new AE;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(pse(e)||"{}")}catch(o){throw o.message+=` (when parsing ${e})`,o}this.load(r),this.indent=fse(e)}async loadFile(e,{baseFs:r=new Tn}){let o=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(pse(o)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=fse(o)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let o=[];if(this.name=null,typeof e.name=="string")try{this.name=Js(e.name)}catch{o.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let n=[];this.os=n;for(let u of e.os)typeof u!="string"?o.push(new Error("Parsing failed for the 'os' field")):n.push(u)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let u of e.cpu)typeof u!="string"?o.push(new Error("Parsing failed for the 'cpu' field")):n.push(u)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let u of e.libc)typeof u!="string"?o.push(new Error("Parsing failed for the 'libc' field")):n.push(u)}else this.libc=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=$o(e.main):this.main=null,typeof e.module=="string"?this.module=$o(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=$o(e.browser);else{this.browser=new Map;for(let[n,u]of Object.entries(e.browser))this.browser.set($o(n),typeof u=="string"?$o(u):u)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?o.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,$o(e.bin)):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,u]of Object.entries(e.bin)){if(typeof u!="string"||u.trim()===""){o.push(new Error(`Invalid bin definition for '${n}'`));continue}let A=Js(n);this.bin.set(A.name,$o(u))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,u]of Object.entries(e.scripts)){if(typeof u!="string"){o.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,u)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,u]of Object.entries(e.dependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,u]of Object.entries(e.devDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,u]of Object.entries(e.peerDependencies)){let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof u!="string"||!u.startsWith(Xn.protocol)&&!xa(u))&&(o.push(new Error(`Invalid dependency range for '${n}'`)),u="*");let p=In(A,u);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&o.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let n of a){if(typeof n!="string"){o.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,u]of Object.entries(e.dependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}`));continue}let A=ih(n),p=this.ensureDependencyMeta(A),h=jP(u.built,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=jP(u.optional,{yamlCompatibilityMode:r});if(E===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}let I=jP(u.unplugged,{yamlCompatibilityMode:r});if(I===null){o.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:I})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,u]of Object.entries(e.peerDependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}'`));continue}let A=ih(n),p=this.ensurePeerDependencyMeta(A),h=jP(u.optional,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,u]of Object.entries(e.resolutions)){if(typeof u!="string"){o.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:MD(n),reference:u})}catch(A){o.push(A);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){o.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=$o(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=$o(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=$o(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,u]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set($o(n),typeof u=="string"?$o(u):u)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,$o(e.publishConfig.bin)]]):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[n,u]of Object.entries(e.publishConfig.bin)){if(typeof u!="string"){o.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,$o(u))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){o.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add($o(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:o.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:o.push(new Error("Invalid selfReferences definition, must be a boolean value")):o.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,u]of Object.entries(e.optionalDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p);let h=In(A,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=o}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(oM("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(oM("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(oM("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!gse.default.valid(e.range))throw new Error(`Invalid meta field range for '${Pa(e)}'`);let r=fn(e),o=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(o);return n||a.set(o,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${Pa(e)}'`);let r=fn(e),o=this.peerDependenciesMeta.get(r);return o||this.peerDependenciesMeta.set(r,o={}),o}setRawField(e,r,{after:o=[]}={}){let a=new Set(o.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,u=this.raw={},A=!1;for(let p of Object.keys(n))u[p]=n[p],A||(a.delete(p),a.size===0&&(u[e]=r,A=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=fn(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(u=>({[u]:n.get(u)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let o=[],a=[];for(let n of this.dependencies.values()){let u=this.dependenciesMeta.get(fn(n)),A=!1;if(r&&u){let p=u.get(null);p&&p.optional&&(A=!0)}A?a.push(n):o.push(n)}o.length>0?e.dependencies=Object.assign({},...uE(o).map(n=>({[fn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...uE(a).map(n=>({[fn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...uE(this.devDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...uE(this.peerDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,u]of ks(this.dependenciesMeta.entries(),([A,p])=>A))for(let[A,p]of ks(u.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=A!==null?Pa(In(Js(n),A)):n,E={...p};r&&A===null&&delete E.optional,Object.keys(E).length!==0&&(e.dependenciesMeta[h]=E)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...ks(this.peerDependenciesMeta.entries(),([n,u])=>n).map(([n,u])=>({[n]:u}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:u})=>({[UD(n)]:u}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,u]of this.scripts.entries())e.scripts[n]=u}else delete e.scripts;return e}},Ot=AE;Ot.fileName="package.json",Ot.allDependencies=["dependencies","devDependencies","peerDependencies"],Ot.hardDependencies=["dependencies","devDependencies"]});var mse=_((UNt,dse)=>{var Vtt=_l(),Jtt=function(){return Vtt.Date.now()};dse.exports=Jtt});var Ese=_((_Nt,yse)=>{var ztt=/\s/;function Xtt(t){for(var e=t.length;e--&&ztt.test(t.charAt(e)););return e}yse.exports=Xtt});var wse=_((HNt,Cse)=>{var Ztt=Ese(),$tt=/^\s+/;function ert(t){return t&&t.slice(0,Ztt(t)+1).replace($tt,"")}Cse.exports=ert});var pE=_((qNt,Ise)=>{var trt=hd(),rrt=Ju(),nrt="[object Symbol]";function irt(t){return typeof t=="symbol"||rrt(t)&&trt(t)==nrt}Ise.exports=irt});var Sse=_((jNt,Dse)=>{var srt=wse(),Bse=il(),ort=pE(),vse=0/0,art=/^[-+]0x[0-9a-f]+$/i,lrt=/^0b[01]+$/i,crt=/^0o[0-7]+$/i,urt=parseInt;function Art(t){if(typeof t=="number")return t;if(ort(t))return vse;if(Bse(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Bse(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=srt(t);var r=lrt.test(t);return r||crt.test(t)?urt(t.slice(2),r?2:8):art.test(t)?vse:+t}Dse.exports=Art});var xse=_((GNt,bse)=>{var frt=il(),aM=mse(),Pse=Sse(),prt="Expected a function",hrt=Math.max,grt=Math.min;function drt(t,e,r){var o,a,n,u,A,p,h=0,E=!1,I=!1,v=!0;if(typeof t!="function")throw new TypeError(prt);e=Pse(e)||0,frt(r)&&(E=!!r.leading,I="maxWait"in r,n=I?hrt(Pse(r.maxWait)||0,e):n,v="trailing"in r?!!r.trailing:v);function x(ce){var me=o,he=a;return o=a=void 0,h=ce,u=t.apply(he,me),u}function C(ce){return h=ce,A=setTimeout(U,e),E?x(ce):u}function R(ce){var me=ce-p,he=ce-h,Be=e-me;return I?grt(Be,n-he):Be}function L(ce){var me=ce-p,he=ce-h;return p===void 0||me>=e||me<0||I&&he>=n}function U(){var ce=aM();if(L(ce))return J(ce);A=setTimeout(U,R(ce))}function J(ce){return A=void 0,v&&o?x(ce):(o=a=void 0,u)}function te(){A!==void 0&&clearTimeout(A),h=0,o=p=a=A=void 0}function ae(){return A===void 0?u:J(aM())}function fe(){var ce=aM(),me=L(ce);if(o=arguments,a=this,p=ce,me){if(A===void 0)return C(p);if(I)return clearTimeout(A),A=setTimeout(U,e),x(p)}return A===void 0&&(A=setTimeout(U,e)),u}return fe.cancel=te,fe.flush=ae,fe}bse.exports=drt});var lM=_((YNt,kse)=>{var mrt=xse(),yrt=il(),Ert="Expected a function";function Crt(t,e,r){var o=!0,a=!0;if(typeof t!="function")throw new TypeError(Ert);return yrt(r)&&(o="leading"in r?!!r.leading:o,a="trailing"in r?!!r.trailing:a),mrt(t,e,{leading:o,maxWait:e,trailing:a})}kse.exports=Crt});function Irt(t){return typeof t.reportCode<"u"}var Qse,Fse,Rse,wrt,zt,Xs,Yl=Et(()=>{Qse=$e(lM()),Fse=ve("stream"),Rse=ve("string_decoder"),wrt=15,zt=class extends Error{constructor(r,o,a){super(o);this.reportExtra=a;this.reportCode=r}};Xs=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,o,a=new Promise(p=>{o=p}),n=p=>{let h=o;a=new Promise(E=>{o=E}),r=p,h()},u=(p=0)=>{n(r+1)},A=async function*(){for(;r{r=u}),a=(0,Qse.default)(u=>{let A=r;o=new Promise(p=>{r=p}),e=u,A()},1e3/wrt),n=async function*(){for(;;)await o,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let o=this.reportProgress(e);try{return await r(e)}finally{o.stop()}}startProgressSync(e,r){let o=this.reportProgress(e);try{return r(e)}finally{o.stop()}}reportInfoOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),o?.reportExtra?.(this))}reportWarningOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),o?.reportExtra?.(this))}reportErrorOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),o?.reportExtra?.(this))}reportExceptionOnce(e){Irt(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let r=new Fse.PassThrough,o=new Rse.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var hE,cM=Et(()=>{Yl();bo();hE=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));return o||null}getFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));if(!o)throw new zt(11,`${qr(r.project.configuration,e)} isn't supported by any available fetcher`);return o}}});var Dd,uM=Et(()=>{bo();Dd=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.getResolverByDescriptor(e,o).bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,o){return await this.getResolverByDescriptor(e,o).getCandidates(e,r,o)}async getSatisfying(e,r,o,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,o,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));return o||null}getResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!o)throw new Error(`${jn(r.project.configuration,e)} isn't supported by any available resolver`);return o}tryResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));return o||null}getResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));if(!o)throw new Error(`${qr(r.project.configuration,e)} isn't supported by any available resolver`);return o}}});var gE,AM=Et(()=>{St();bo();gE=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a),u=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,u,r)}getLocatorFilename(e){return lE(e)}async ensureVirtualLink(e,r,o){let a=r.packageFs.getRealPath(),n=o.project.configuration.get("virtualFolder"),u=this.getLocatorFilename(e),A=mi.makeVirtualPath(n,u,a),p=new Uu(A,{baseFs:r.packageFs,pathUtils:V});return{...r,packageFs:p}}}});var dE,c1,Tse=Et(()=>{dE=class{static isVirtualDescriptor(e){return!!e.range.startsWith(dE.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(dE.protocol)}supportsDescriptor(e,r){return dE.isVirtualDescriptor(e)}supportsLocator(e,r){return dE.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,o){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,o,a){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},c1=dE;c1.protocol="virtual:"});var mE,fM=Et(()=>{St();vd();mE=class{supports(e){return!!e.reference.startsWith(Xn.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let o=this.getWorkspace(e,r).cwd;return{packageFs:new gn(o),prefixPath:Bt.dot,localPath:o}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Xn.protocol.length))}}});function u1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Nse(t){return typeof t>"u"?3:u1(t)?0:Array.isArray(t)?1:2}function gM(t,e){return Object.hasOwn(t,e)}function vrt(t){return u1(t)&&gM(t,"onConflict")&&typeof t.onConflict=="string"}function Drt(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!vrt(t))return{onConflict:"default",value:t};if(gM(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function Lse(t,e){let r=u1(t)&&gM(t,e)?t[e]:void 0;return Drt(r)}function yE(t,e){return[t,e,Ose]}function dM(t){return Array.isArray(t)?t[2]===Ose:!1}function pM(t,e){if(u1(t)){let r={};for(let o of Object.keys(t))r[o]=pM(t[o],e);return yE(e,r)}return Array.isArray(t)?yE(e,t.map(r=>pM(r,e))):yE(e,t)}function hM(t,e,r,o,a){let n,u=[],A=a,p=0;for(let E=a-1;E>=o;--E){let[I,v]=t[E],{onConflict:x,value:C}=Lse(v,r),R=Nse(C);if(R!==3){if(n??=R,R!==n||x==="hardReset"){p=A;break}if(R===2)return yE(I,C);if(u.unshift([I,C]),x==="reset"){p=E;break}x==="extend"&&E===o&&(o=0),A=E}}if(typeof n>"u")return null;let h=u.map(([E])=>E).join(", ");switch(n){case 1:return yE(h,new Array().concat(...u.map(([E,I])=>I.map(v=>pM(v,E)))));case 0:{let E=Object.assign({},...u.map(([,R])=>R)),I=Object.keys(E),v={},x=t.map(([R,L])=>[R,Lse(L,r).value]),C=Brt(x,([R,L])=>{let U=Nse(L);return U!==0&&U!==3});if(C!==-1){let R=x.slice(C+1);for(let L of I)v[L]=hM(R,e,L,0,R.length)}else for(let R of I)v[R]=hM(x,e,R,p,x.length);return yE(h,v)}default:throw new Error("Assertion failed: Non-extendable value type")}}function Mse(t){return hM(t.map(([e,r])=>[e,{["."]:r}]),[],".",0,t.length)}function A1(t){return dM(t)?t[1]:t}function GP(t){let e=dM(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>GP(r));if(u1(e)){let r={};for(let[o,a]of Object.entries(e))r[o]=GP(a);return r}return e}function mM(t){return dM(t)?t[0]:null}var Brt,Ose,Use=Et(()=>{Brt=(t,e,r)=>{let o=[...t];return o.reverse(),o.findIndex(e,r)};Ose=Symbol()});var YP={};Vt(YP,{getDefaultGlobalFolder:()=>EM,getHomeFolder:()=>EE,isFolderInside:()=>CM});function EM(){if(process.platform==="win32"){let t=ue.toPortablePath(process.env.LOCALAPPDATA||ue.join((0,yM.homedir)(),"AppData","Local"));return V.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=ue.toPortablePath(process.env.XDG_DATA_HOME);return V.resolve(t,"yarn/berry")}return V.resolve(EE(),".yarn/berry")}function EE(){return ue.toPortablePath((0,yM.homedir)()||"/usr/local/share")}function CM(t,e){let r=V.relative(e,t);return r&&!r.startsWith("..")&&!V.isAbsolute(r)}var yM,WP=Et(()=>{St();yM=ve("os")});var jse=_(CE=>{"use strict";var iLt=ve("net"),Prt=ve("tls"),wM=ve("http"),_se=ve("https"),brt=ve("events"),sLt=ve("assert"),xrt=ve("util");CE.httpOverHttp=krt;CE.httpsOverHttp=Qrt;CE.httpOverHttps=Frt;CE.httpsOverHttps=Rrt;function krt(t){var e=new Ff(t);return e.request=wM.request,e}function Qrt(t){var e=new Ff(t);return e.request=wM.request,e.createSocket=Hse,e.defaultPort=443,e}function Frt(t){var e=new Ff(t);return e.request=_se.request,e}function Rrt(t){var e=new Ff(t);return e.request=_se.request,e.createSocket=Hse,e.defaultPort=443,e}function Ff(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||wM.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(o,a,n,u){for(var A=qse(a,n,u),p=0,h=e.requests.length;p=this.maxSockets){n.requests.push(u);return}n.createSocket(u,function(A){A.on("free",p),A.on("close",h),A.on("agentRemove",h),e.onSocket(A);function p(){n.emit("free",A,u)}function h(E){n.removeSocket(A),A.removeListener("free",p),A.removeListener("close",h),A.removeListener("agentRemove",h)}})};Ff.prototype.createSocket=function(e,r){var o=this,a={};o.sockets.push(a);var n=IM({},o.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),oh("making CONNECT request");var u=o.request(n);u.useChunkedEncodingByDefault=!1,u.once("response",A),u.once("upgrade",p),u.once("connect",h),u.once("error",E),u.end();function A(I){I.upgrade=!0}function p(I,v,x){process.nextTick(function(){h(I,v,x)})}function h(I,v,x){if(u.removeAllListeners(),v.removeAllListeners(),I.statusCode!==200){oh("tunneling socket could not be established, statusCode=%d",I.statusCode),v.destroy();var C=new Error("tunneling socket could not be established, statusCode="+I.statusCode);C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}if(x.length>0){oh("got illegal response body from proxy"),v.destroy();var C=new Error("got illegal response body from proxy");C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}return oh("tunneling connection has established"),o.sockets[o.sockets.indexOf(a)]=v,r(v)}function E(I){u.removeAllListeners(),oh(`tunneling socket could not be established, cause=%s +`,I.message,I.stack);var v=new Error("tunneling socket could not be established, cause="+I.message);v.code="ECONNRESET",e.request.emit("error",v),o.removeSocket(a)}};Ff.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var o=this.requests.shift();o&&this.createSocket(o,function(a){o.request.onSocket(a)})}};function Hse(t,e){var r=this;Ff.prototype.createSocket.call(r,t,function(o){var a=t.request.getHeader("host"),n=IM({},r.options,{socket:o,servername:a?a.replace(/:.*$/,""):t.host}),u=Prt.connect(0,n);r.sockets[r.sockets.indexOf(o)]=u,e(u)})}function qse(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function IM(t){for(var e=1,r=arguments.length;e{Gse.exports=jse()});var Tf=_((Rf,KP)=>{"use strict";Object.defineProperty(Rf,"__esModule",{value:!0});var Wse=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Trt(t){return Wse.includes(t)}var Nrt=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","FormData","URLSearchParams","HTMLElement",...Wse];function Lrt(t){return Nrt.includes(t)}var Ort=["null","undefined","string","number","bigint","boolean","symbol"];function Mrt(t){return Ort.includes(t)}function wE(t){return e=>typeof e===t}var{toString:Kse}=Object.prototype,f1=t=>{let e=Kse.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&be.domElement(t))return"HTMLElement";if(Lrt(e))return e},ei=t=>e=>f1(e)===t;function be(t){if(t===null)return"null";switch(typeof t){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol";default:}if(be.observable(t))return"Observable";if(be.array(t))return"Array";if(be.buffer(t))return"Buffer";let e=f1(t);if(e)return e;if(t instanceof String||t instanceof Boolean||t instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}be.undefined=wE("undefined");be.string=wE("string");var Urt=wE("number");be.number=t=>Urt(t)&&!be.nan(t);be.bigint=wE("bigint");be.function_=wE("function");be.null_=t=>t===null;be.class_=t=>be.function_(t)&&t.toString().startsWith("class ");be.boolean=t=>t===!0||t===!1;be.symbol=wE("symbol");be.numericString=t=>be.string(t)&&!be.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));be.array=(t,e)=>Array.isArray(t)?be.function_(e)?t.every(e):!0:!1;be.buffer=t=>{var e,r,o,a;return(a=(o=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||o===void 0?void 0:o.call(r,t))!==null&&a!==void 0?a:!1};be.nullOrUndefined=t=>be.null_(t)||be.undefined(t);be.object=t=>!be.null_(t)&&(typeof t=="object"||be.function_(t));be.iterable=t=>{var e;return be.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};be.asyncIterable=t=>{var e;return be.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};be.generator=t=>be.iterable(t)&&be.function_(t.next)&&be.function_(t.throw);be.asyncGenerator=t=>be.asyncIterable(t)&&be.function_(t.next)&&be.function_(t.throw);be.nativePromise=t=>ei("Promise")(t);var _rt=t=>{var e,r;return be.function_((e=t)===null||e===void 0?void 0:e.then)&&be.function_((r=t)===null||r===void 0?void 0:r.catch)};be.promise=t=>be.nativePromise(t)||_rt(t);be.generatorFunction=ei("GeneratorFunction");be.asyncGeneratorFunction=t=>f1(t)==="AsyncGeneratorFunction";be.asyncFunction=t=>f1(t)==="AsyncFunction";be.boundFunction=t=>be.function_(t)&&!t.hasOwnProperty("prototype");be.regExp=ei("RegExp");be.date=ei("Date");be.error=ei("Error");be.map=t=>ei("Map")(t);be.set=t=>ei("Set")(t);be.weakMap=t=>ei("WeakMap")(t);be.weakSet=t=>ei("WeakSet")(t);be.int8Array=ei("Int8Array");be.uint8Array=ei("Uint8Array");be.uint8ClampedArray=ei("Uint8ClampedArray");be.int16Array=ei("Int16Array");be.uint16Array=ei("Uint16Array");be.int32Array=ei("Int32Array");be.uint32Array=ei("Uint32Array");be.float32Array=ei("Float32Array");be.float64Array=ei("Float64Array");be.bigInt64Array=ei("BigInt64Array");be.bigUint64Array=ei("BigUint64Array");be.arrayBuffer=ei("ArrayBuffer");be.sharedArrayBuffer=ei("SharedArrayBuffer");be.dataView=ei("DataView");be.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;be.urlInstance=t=>ei("URL")(t);be.urlString=t=>{if(!be.string(t))return!1;try{return new URL(t),!0}catch{return!1}};be.truthy=t=>Boolean(t);be.falsy=t=>!t;be.nan=t=>Number.isNaN(t);be.primitive=t=>be.null_(t)||Mrt(typeof t);be.integer=t=>Number.isInteger(t);be.safeInteger=t=>Number.isSafeInteger(t);be.plainObject=t=>{if(Kse.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};be.typedArray=t=>Trt(f1(t));var Hrt=t=>be.safeInteger(t)&&t>=0;be.arrayLike=t=>!be.nullOrUndefined(t)&&!be.function_(t)&&Hrt(t.length);be.inRange=(t,e)=>{if(be.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(be.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var qrt=1,jrt=["innerHTML","ownerDocument","style","attributes","nodeValue"];be.domElement=t=>be.object(t)&&t.nodeType===qrt&&be.string(t.nodeName)&&!be.plainObject(t)&&jrt.every(e=>e in t);be.observable=t=>{var e,r,o,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(o=t)["@@observable"])===null||a===void 0?void 0:a.call(o)):!1};be.nodeStream=t=>be.object(t)&&be.function_(t.pipe)&&!be.observable(t);be.infinite=t=>t===1/0||t===-1/0;var Vse=t=>e=>be.integer(e)&&Math.abs(e%2)===t;be.evenInteger=Vse(0);be.oddInteger=Vse(1);be.emptyArray=t=>be.array(t)&&t.length===0;be.nonEmptyArray=t=>be.array(t)&&t.length>0;be.emptyString=t=>be.string(t)&&t.length===0;be.nonEmptyString=t=>be.string(t)&&t.length>0;var Grt=t=>be.string(t)&&!/\S/.test(t);be.emptyStringOrWhitespace=t=>be.emptyString(t)||Grt(t);be.emptyObject=t=>be.object(t)&&!be.map(t)&&!be.set(t)&&Object.keys(t).length===0;be.nonEmptyObject=t=>be.object(t)&&!be.map(t)&&!be.set(t)&&Object.keys(t).length>0;be.emptySet=t=>be.set(t)&&t.size===0;be.nonEmptySet=t=>be.set(t)&&t.size>0;be.emptyMap=t=>be.map(t)&&t.size===0;be.nonEmptyMap=t=>be.map(t)&&t.size>0;be.propertyKey=t=>be.any([be.string,be.number,be.symbol],t);be.formData=t=>ei("FormData")(t);be.urlSearchParams=t=>ei("URLSearchParams")(t);var Jse=(t,e,r)=>{if(!be.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(r.length===0)throw new TypeError("Invalid number of values");return t.call(r,e)};be.any=(t,...e)=>(be.array(t)?t:[t]).some(o=>Jse(Array.prototype.some,o,e));be.all=(t,...e)=>Jse(Array.prototype.every,t,e);var Ht=(t,e,r,o={})=>{if(!t){let{multipleValues:a}=o,n=a?`received values of types ${[...new Set(r.map(u=>`\`${be(u)}\``))].join(", ")}`:`received value of type \`${be(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Rf.assert={undefined:t=>Ht(be.undefined(t),"undefined",t),string:t=>Ht(be.string(t),"string",t),number:t=>Ht(be.number(t),"number",t),bigint:t=>Ht(be.bigint(t),"bigint",t),function_:t=>Ht(be.function_(t),"Function",t),null_:t=>Ht(be.null_(t),"null",t),class_:t=>Ht(be.class_(t),"Class",t),boolean:t=>Ht(be.boolean(t),"boolean",t),symbol:t=>Ht(be.symbol(t),"symbol",t),numericString:t=>Ht(be.numericString(t),"string with a number",t),array:(t,e)=>{Ht(be.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Ht(be.buffer(t),"Buffer",t),nullOrUndefined:t=>Ht(be.nullOrUndefined(t),"null or undefined",t),object:t=>Ht(be.object(t),"Object",t),iterable:t=>Ht(be.iterable(t),"Iterable",t),asyncIterable:t=>Ht(be.asyncIterable(t),"AsyncIterable",t),generator:t=>Ht(be.generator(t),"Generator",t),asyncGenerator:t=>Ht(be.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Ht(be.nativePromise(t),"native Promise",t),promise:t=>Ht(be.promise(t),"Promise",t),generatorFunction:t=>Ht(be.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Ht(be.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Ht(be.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Ht(be.boundFunction(t),"Function",t),regExp:t=>Ht(be.regExp(t),"RegExp",t),date:t=>Ht(be.date(t),"Date",t),error:t=>Ht(be.error(t),"Error",t),map:t=>Ht(be.map(t),"Map",t),set:t=>Ht(be.set(t),"Set",t),weakMap:t=>Ht(be.weakMap(t),"WeakMap",t),weakSet:t=>Ht(be.weakSet(t),"WeakSet",t),int8Array:t=>Ht(be.int8Array(t),"Int8Array",t),uint8Array:t=>Ht(be.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Ht(be.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Ht(be.int16Array(t),"Int16Array",t),uint16Array:t=>Ht(be.uint16Array(t),"Uint16Array",t),int32Array:t=>Ht(be.int32Array(t),"Int32Array",t),uint32Array:t=>Ht(be.uint32Array(t),"Uint32Array",t),float32Array:t=>Ht(be.float32Array(t),"Float32Array",t),float64Array:t=>Ht(be.float64Array(t),"Float64Array",t),bigInt64Array:t=>Ht(be.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Ht(be.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Ht(be.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Ht(be.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Ht(be.dataView(t),"DataView",t),urlInstance:t=>Ht(be.urlInstance(t),"URL",t),urlString:t=>Ht(be.urlString(t),"string with a URL",t),truthy:t=>Ht(be.truthy(t),"truthy",t),falsy:t=>Ht(be.falsy(t),"falsy",t),nan:t=>Ht(be.nan(t),"NaN",t),primitive:t=>Ht(be.primitive(t),"primitive",t),integer:t=>Ht(be.integer(t),"integer",t),safeInteger:t=>Ht(be.safeInteger(t),"integer",t),plainObject:t=>Ht(be.plainObject(t),"plain object",t),typedArray:t=>Ht(be.typedArray(t),"TypedArray",t),arrayLike:t=>Ht(be.arrayLike(t),"array-like",t),domElement:t=>Ht(be.domElement(t),"HTMLElement",t),observable:t=>Ht(be.observable(t),"Observable",t),nodeStream:t=>Ht(be.nodeStream(t),"Node.js Stream",t),infinite:t=>Ht(be.infinite(t),"infinite number",t),emptyArray:t=>Ht(be.emptyArray(t),"empty array",t),nonEmptyArray:t=>Ht(be.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Ht(be.emptyString(t),"empty string",t),nonEmptyString:t=>Ht(be.nonEmptyString(t),"non-empty string",t),emptyStringOrWhitespace:t=>Ht(be.emptyStringOrWhitespace(t),"empty string or whitespace",t),emptyObject:t=>Ht(be.emptyObject(t),"empty object",t),nonEmptyObject:t=>Ht(be.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Ht(be.emptySet(t),"empty set",t),nonEmptySet:t=>Ht(be.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Ht(be.emptyMap(t),"empty map",t),nonEmptyMap:t=>Ht(be.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Ht(be.propertyKey(t),"PropertyKey",t),formData:t=>Ht(be.formData(t),"FormData",t),urlSearchParams:t=>Ht(be.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Ht(be.evenInteger(t),"even integer",t),oddInteger:t=>Ht(be.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Ht(be.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Ht(be.inRange(t,e),"in range",t),any:(t,...e)=>Ht(be.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Ht(be.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(be,{class:{value:be.class_},function:{value:be.function_},null:{value:be.null_}});Object.defineProperties(Rf.assert,{class:{value:Rf.assert.class_},function:{value:Rf.assert.function_},null:{value:Rf.assert.null_}});Rf.default=be;KP.exports=be;KP.exports.default=be;KP.exports.assert=Rf.assert});var zse=_((lLt,BM)=>{"use strict";var VP=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},IE=class{static fn(e){return(...r)=>new IE((o,a,n)=>{r.push(n),e(...r).then(o,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,o)=>{this._reject=o;let a=A=>{this._isPending=!1,r(A)},n=A=>{this._isPending=!1,o(A)},u=A=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(A)};return Object.defineProperties(u,{shouldReject:{get:()=>this._rejectOnCancel,set:A=>{this._rejectOnCancel=A}}}),e(a,n,u)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new VP(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(IE.prototype,Promise.prototype);BM.exports=IE;BM.exports.CancelError=VP});var Xse=_((DM,SM)=>{"use strict";Object.defineProperty(DM,"__esModule",{value:!0});var Yrt=ve("tls"),vM=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let o=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",u=()=>{o&&r.connect(),t instanceof Yrt.TLSSocket&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?u():t.connecting?t.once("connect",u):t.destroyed&&n&&r.close(t._hadError)};DM.default=vM;SM.exports=vM;SM.exports.default=vM});var Zse=_((bM,xM)=>{"use strict";Object.defineProperty(bM,"__esModule",{value:!0});var Wrt=Xse(),Krt=Number(process.versions.node.split(".")[0]),PM=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=u=>{let A=u.emit.bind(u);u.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,u.emit=A),A(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||Krt>=13)&&(e.phases.total=Date.now()-e.start)});let o=u=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let A=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};u.prependOnceListener("lookup",A),Wrt.default(u,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(u.removeListener("lookup",A),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?o(t.socket):t.prependOnceListener("socket",o);let a=()=>{var u;e.upload=Date.now(),e.phases.request=e.upload-(u=e.secureConnect,u??e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",u=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,u.timings=e,r(u),u.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};bM.default=PM;xM.exports=PM;xM.exports.default=PM});var soe=_((cLt,FM)=>{"use strict";var{V4MAPPED:Vrt,ADDRCONFIG:Jrt,ALL:ioe,promises:{Resolver:$se},lookup:zrt}=ve("dns"),{promisify:kM}=ve("util"),Xrt=ve("os"),BE=Symbol("cacheableLookupCreateConnection"),QM=Symbol("cacheableLookupInstance"),eoe=Symbol("expires"),Zrt=typeof ioe=="number",toe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},$rt=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},roe=()=>{let t=!1,e=!1;for(let r of Object.values(Xrt.networkInterfaces()))for(let o of r)if(!o.internal&&(o.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},ent=t=>Symbol.iterator in t,noe={ttl:!0},tnt={all:!0},JP=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:o=3600,errorTtl:a=.15,resolver:n=new $se,lookup:u=zrt}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=kM(u),this._resolver instanceof $se?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=kM(this._resolver.resolve4.bind(this._resolver)),this._resolve6=kM(this._resolver.resolve6.bind(this._resolver))),this._iface=roe(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,o<1)this._fallback=!1;else{this._fallback=!0;let A=setInterval(()=>{this._hostnamesToFallback.clear()},o*1e3);A.unref&&A.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,o){if(typeof r=="function"?(o=r,r={}):typeof r=="number"&&(r={family:r}),!o)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?o(null,a):o(null,a.address,a.family,a.expires,a.ttl)},o)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let o=await this.query(e);if(r.family===6){let a=o.filter(n=>n.family===6);r.hints&Vrt&&(Zrt&&r.hints&ioe||a.length===0)?$rt(o):o=a}else r.family===4&&(o=o.filter(a=>a.family===4));if(r.hints&Jrt){let{_iface:a}=this;o=o.filter(n=>n.family===6?a.has6:a.has4)}if(o.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?o:o[0]}async query(e){let r=await this._cache.get(e);if(!r){let o=this._pending[e];if(o)r=await o;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(o=>({...o})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[o,a]=await Promise.all([this._resolve4(e,noe),this._resolve6(e,noe)].map(h=>r(h))),n=0,u=0,A=0,p=Date.now();for(let h of o)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,u=Math.max(u,h.ttl);return o.length>0?a.length>0?A=Math.min(n,u):A=n:A=u,{entries:[...o,...a],cacheTtl:A}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,o){if(this.maxTtl>0&&o>0){o=Math.min(o,this.maxTtl)*1e3,r[eoe]=Date.now()+o;try{await this._cache.set(e,r,o)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}ent(this._cache)&&this._tick(o)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,tnt);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let o=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,o),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let o=1/0,a=Date.now();for(let[n,u]of this._cache){let A=u[eoe];a>=A?this._cache.delete(n):A("lookup"in r||(r.lookup=this.lookup),e[BE](r,o))}uninstall(e){if(toe(e),e[BE]){if(e[QM]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[BE],delete e[BE],delete e[QM]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=roe(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};FM.exports=JP;FM.exports.default=JP});var loe=_((uLt,RM)=>{"use strict";var rnt=typeof URL>"u"?ve("url").URL:URL,nnt="text/plain",int="us-ascii",ooe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),snt=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let o=r[1].split(";"),a=r[2],n=e?"":r[3],u=!1;o[o.length-1]==="base64"&&(o.pop(),u=!0);let A=(o.shift()||"").toLowerCase(),h=[...o.map(E=>{let[I,v=""]=E.split("=").map(x=>x.trim());return I==="charset"&&(v=v.toLowerCase(),v===int)?"":`${I}${v?`=${v}`:""}`}).filter(Boolean)];return u&&h.push("base64"),(h.length!==0||A&&A!==nnt)&&h.unshift(A),`data:${h.join(";")},${u?a.trim():a}${n?`#${n}`:""}`},aoe=(t,e)=>{if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return snt(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new rnt(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,u)=>/^(?!\/)/g.test(u)?`${u}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),u=n[n.length-1];ooe(u,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])ooe(n,e.removeQueryParameters)&&a.searchParams.delete(n);return e.sortQueryParameters&&a.searchParams.sort(),e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,"")),t=a.toString(),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};RM.exports=aoe;RM.exports.default=aoe});var Aoe=_((ALt,uoe)=>{uoe.exports=coe;function coe(t,e){if(t&&e)return coe(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(o){r[o]=t[o]}),r;function r(){for(var o=new Array(arguments.length),a=0;a{var foe=Aoe();TM.exports=foe(zP);TM.exports.strict=foe(poe);zP.proto=zP(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return zP(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return poe(this)},configurable:!0})});function zP(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function poe(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var LM=_((pLt,goe)=>{var ont=NM(),ant=function(){},lnt=function(t){return t.setHeader&&typeof t.abort=="function"},cnt=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},hoe=function(t,e,r){if(typeof e=="function")return hoe(t,null,e);e||(e={}),r=ont(r||ant);var o=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,u=e.writable||e.writable!==!1&&t.writable,A=function(){t.writable||p()},p=function(){u=!1,n||r.call(t)},h=function(){n=!1,u||r.call(t)},E=function(C){r.call(t,C?new Error("exited with error code: "+C):null)},I=function(C){r.call(t,C)},v=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(u&&!(o&&o.ended))return r.call(t,new Error("premature close"))},x=function(){t.req.on("finish",p)};return lnt(t)?(t.on("complete",p),t.on("abort",v),t.req?x():t.on("request",x)):u&&!o&&(t.on("end",A),t.on("close",A)),cnt(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",I),t.on("close",v),function(){t.removeListener("complete",p),t.removeListener("abort",v),t.removeListener("request",x),t.req&&t.req.removeListener("finish",p),t.removeListener("end",A),t.removeListener("close",A),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",I),t.removeListener("close",v)}};goe.exports=hoe});var yoe=_((hLt,moe)=>{var unt=NM(),Ant=LM(),OM=ve("fs"),p1=function(){},fnt=/^v?\.0/.test(process.version),XP=function(t){return typeof t=="function"},pnt=function(t){return!fnt||!OM?!1:(t instanceof(OM.ReadStream||p1)||t instanceof(OM.WriteStream||p1))&&XP(t.close)},hnt=function(t){return t.setHeader&&XP(t.abort)},gnt=function(t,e,r,o){o=unt(o);var a=!1;t.on("close",function(){a=!0}),Ant(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,pnt(t))return t.close(p1);if(hnt(t))return t.abort();if(XP(t.destroy))return t.destroy();o(u||new Error("stream was destroyed"))}}},doe=function(t){t()},dnt=function(t,e){return t.pipe(e)},mnt=function(){var t=Array.prototype.slice.call(arguments),e=XP(t[t.length-1]||p1)&&t.pop()||p1;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,o=t.map(function(a,n){var u=n0;return gnt(a,u,A,function(p){r||(r=p),p&&o.forEach(doe),!u&&(o.forEach(doe),e(r))})});return t.reduce(dnt)};moe.exports=mnt});var Coe=_((gLt,Eoe)=>{"use strict";var{PassThrough:ynt}=ve("stream");Eoe.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,o=r==="buffer",a=!1;e?a=!(r||o):r=r||"utf8",o&&(r=null);let n=new ynt({objectMode:a});r&&n.setEncoding(r);let u=0,A=[];return n.on("data",p=>{A.push(p),a?u=A.length:u+=p.length}),n.getBufferedValue=()=>e?A:o?Buffer.concat(A,u):A.join(""),n.getBufferedLength=()=>u,n}});var woe=_((dLt,vE)=>{"use strict";var Ent=yoe(),Cnt=Coe(),ZP=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function $P(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,o;return await new Promise((a,n)=>{let u=A=>{A&&(A.bufferedData=o.getBufferedValue()),n(A)};o=Ent(t,Cnt(e),A=>{if(A){u(A);return}a()}),o.on("data",()=>{o.getBufferedLength()>r&&u(new ZP)})}),o.getBufferedValue()}vE.exports=$P;vE.exports.default=$P;vE.exports.buffer=(t,e)=>$P(t,{...e,encoding:"buffer"});vE.exports.array=(t,e)=>$P(t,{...e,array:!0});vE.exports.MaxBufferError=ZP});var Boe=_((yLt,Ioe)=>{"use strict";var wnt=new Set([200,203,204,206,300,301,404,405,410,414,501]),Int=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Bnt=new Set([500,502,503,504]),vnt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},Dnt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Sd(t){let e=parseInt(t,10);return isFinite(e)?e:0}function Snt(t){return t?Bnt.has(t.status):!0}function MM(t){let e={};if(!t)return e;let r=t.trim().split(/\s*,\s*/);for(let o of r){let[a,n]=o.split(/\s*=\s*/,2);e[a]=n===void 0?!0:n.replace(/^"|"$/g,"")}return e}function Pnt(t){let e=[];for(let r in t){let o=t[r];e.push(o===!0?r:r+"="+o)}if(!!e.length)return e.join(", ")}Ioe.exports=class{constructor(e,r,{shared:o,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:u,_fromObject:A}={}){if(A){this._fromObject(A);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=o!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=MM(r.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=r.headers.vary?e.headers:null,this._reqcc=MM(e.headers["cache-control"]),u&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":Pnt(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),r.headers["cache-control"]==null&&/no-cache/.test(r.headers.pragma)&&(this._rescc["no-cache"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||this._method==="HEAD"||this._method==="POST"&&this._hasExplicitExpiration())&&Int.has(this._status)&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc["max-age"]||this._isShared&&this._rescc["s-maxage"]||this._rescc.public||wnt.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=MM(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let o of r)if(e.headers[o]!==this._reqHeaders[o])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let o in e)vnt[o]||(r[o]=e[o]);if(e.connection){let o=e.connection.trim().split(/\s*,\s*/);for(let a of o)delete r[a]}if(r.warning){let o=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));o.length?r.warning=o.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return Sd(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary==="*")return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return Sd(this._rescc["s-maxage"])}if(this._rescc["max-age"])return Sd(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let o=Date.parse(this._resHeaders.expires);return Number.isNaN(o)||oo)return Math.max(e,(r-o)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+Sd(this._rescc["stale-if-error"]),o=e+Sd(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,o)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Sd(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Sd(this._rescc["stale-while-revalidate"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||e.v!==1)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copyWithoutHopByHopHeaders(e.headers);if(delete r["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete r["if-none-match"],delete r["if-modified-since"],r;if(this._resHeaders.etag&&(r["if-none-match"]=r["if-none-match"]?`${r["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),r["accept-ranges"]||r["if-match"]||r["if-unmodified-since"]||this._method&&this._method!="GET"){if(delete r["if-modified-since"],r["if-none-match"]){let a=r["if-none-match"].split(/,/).filter(n=>!/^\s*W\//.test(n));a.length?r["if-none-match"]=a.join(",").trim():delete r["if-none-match"]}}else this._resHeaders["last-modified"]&&!r["if-modified-since"]&&(r["if-modified-since"]=this._resHeaders["last-modified"]);return r}revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Snt(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let o=!1;if(r.status!==void 0&&r.status!=304?o=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?o=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?o=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?o=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(o=!0),!o)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let u in this._resHeaders)a[u]=u in r.headers&&!Dnt[u]?r.headers[u]:this._resHeaders[u];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var eb=_((ELt,voe)=>{"use strict";voe.exports=t=>{let e={};for(let[r,o]of Object.entries(t))e[r.toLowerCase()]=o;return e}});var Soe=_((CLt,Doe)=>{"use strict";var bnt=ve("stream").Readable,xnt=eb(),UM=class extends bnt{constructor(e,r,o,a){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(o instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=xnt(r),this.body=o,this.url=a}_read(){this.push(this.body),this.push(null)}};Doe.exports=UM});var boe=_((wLt,Poe)=>{"use strict";var knt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];Poe.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(knt));for(let o of r)o in e||(e[o]=typeof t[o]=="function"?t[o].bind(t):t[o])}});var koe=_((ILt,xoe)=>{"use strict";var Qnt=ve("stream").PassThrough,Fnt=boe(),Rnt=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Qnt;return Fnt(t,e),t.pipe(e)};xoe.exports=Rnt});var Qoe=_(_M=>{_M.stringify=function t(e){if(typeof e>"u")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",o=Array.isArray(e);r=o?"[":"{";var a=!0;for(var n in e){var u=typeof e[n]=="function"||!o&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!u&&(a||(r+=","),a=!1,o?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=o?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};_M.parse=function(t){return JSON.parse(t,function(e,r){return typeof r=="string"?/^:base64:/.test(r)?Buffer.from(r.substring(8),"base64"):/^:/.test(r)?r.substring(1):r:r})}});var Toe=_((vLt,Roe)=>{"use strict";var Tnt=ve("events"),Foe=Qoe(),Nnt=t=>{let e={redis:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql"};if(t.adapter||t.uri){let r=t.adapter||/^[^:]*/.exec(t.uri)[0];return new(ve(e[r]))(t)}return new Map},HM=class extends Tnt{constructor(e,r){if(super(),this.opts=Object.assign({namespace:"keyv",serialize:Foe.stringify,deserialize:Foe.parse},typeof e=="string"?{uri:e}:e,r),!this.opts.store){let o=Object.assign({},this.opts);this.opts.store=Nnt(o)}typeof this.opts.store.on=="function"&&this.opts.store.on("error",o=>this.emit("error",o)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,r){e=this._getKeyPrefix(e);let{store:o}=this.opts;return Promise.resolve().then(()=>o.get(e)).then(a=>typeof a=="string"?this.opts.deserialize(a):a).then(a=>{if(a!==void 0){if(typeof a.expires=="number"&&Date.now()>a.expires){this.delete(e);return}return r&&r.raw?a:a.value}})}set(e,r,o){e=this._getKeyPrefix(e),typeof o>"u"&&(o=this.opts.ttl),o===0&&(o=void 0);let{store:a}=this.opts;return Promise.resolve().then(()=>{let n=typeof o=="number"?Date.now()+o:null;return r={value:r,expires:n},this.opts.serialize(r)}).then(n=>a.set(e,n,o)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:r}=this.opts;return Promise.resolve().then(()=>r.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};Roe.exports=HM});var Ooe=_((SLt,Loe)=>{"use strict";var Lnt=ve("events"),tb=ve("url"),Ont=loe(),Mnt=woe(),qM=Boe(),Noe=Soe(),Unt=eb(),_nt=koe(),Hnt=Toe(),qc=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Hnt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,o)=>{let a;if(typeof r=="string")a=jM(tb.parse(r)),r={};else if(r instanceof tb.URL)a=jM(tb.parse(r.toString())),r={};else{let[I,...v]=(r.path||"").split("?"),x=v.length>0?`?${v.join("?")}`:"";a=jM({...r,pathname:I,search:x})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...qnt(a)},r.headers=Unt(r.headers);let n=new Lnt,u=Ont(tb.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),A=`${r.method}:${u}`,p=!1,h=!1,E=I=>{h=!0;let v=!1,x,C=new Promise(L=>{x=()=>{v||(v=!0,L())}}),R=L=>{if(p&&!I.forceRefresh){L.status=L.statusCode;let J=qM.fromObject(p.cachePolicy).revalidatedPolicy(I,L);if(!J.modified){let te=J.policy.responseHeaders();L=new Noe(p.statusCode,te,p.body,p.url),L.cachePolicy=J.policy,L.fromCache=!0}}L.fromCache||(L.cachePolicy=new qM(I,L,I),L.fromCache=!1);let U;I.cache&&L.cachePolicy.storable()?(U=_nt(L),(async()=>{try{let J=Mnt.buffer(L);if(await Promise.race([C,new Promise(ce=>L.once("end",ce))]),v)return;let te=await J,ae={cachePolicy:L.cachePolicy.toObject(),url:L.url,statusCode:L.fromCache?p.statusCode:L.statusCode,body:te},fe=I.strictTtl?L.cachePolicy.timeToLive():void 0;I.maxTtl&&(fe=fe?Math.min(fe,I.maxTtl):I.maxTtl),await this.cache.set(A,ae,fe)}catch(J){n.emit("error",new qc.CacheError(J))}})()):I.cache&&p&&(async()=>{try{await this.cache.delete(A)}catch(J){n.emit("error",new qc.CacheError(J))}})(),n.emit("response",U||L),typeof o=="function"&&o(U||L)};try{let L=e(I,R);L.once("error",x),L.once("abort",x),n.emit("request",L)}catch(L){n.emit("error",new qc.RequestError(L))}};return(async()=>{let I=async x=>{await Promise.resolve();let C=x.cache?await this.cache.get(A):void 0;if(typeof C>"u")return E(x);let R=qM.fromObject(C.cachePolicy);if(R.satisfiesWithoutRevalidation(x)&&!x.forceRefresh){let L=R.responseHeaders(),U=new Noe(C.statusCode,L,C.body,C.url);U.cachePolicy=R,U.fromCache=!0,n.emit("response",U),typeof o=="function"&&o(U)}else p=C,x.headers=R.revalidationHeaders(x),E(x)},v=x=>n.emit("error",new qc.CacheError(x));this.cache.once("error",v),n.on("response",()=>this.cache.removeListener("error",v));try{await I(r)}catch(x){r.automaticFailover&&!h&&E(r),n.emit("error",new qc.CacheError(x))}})(),n}}};function qnt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function jM(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}qc.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};qc.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};Loe.exports=qc});var Uoe=_((xLt,Moe)=>{"use strict";var jnt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];Moe.exports=(t,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let r=new Set(Object.keys(t).concat(jnt)),o={};for(let a of r)a in e||(o[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,o),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var Hoe=_((kLt,_oe)=>{"use strict";var{Transform:Gnt,PassThrough:Ynt}=ve("stream"),GM=ve("zlib"),Wnt=Uoe();_oe.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof GM.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let o=!0,a=new Gnt({transform(A,p,h){o=!1,h(null,A)},flush(A){A()}}),n=new Ynt({autoDestroy:!1,destroy(A,p){t.destroy(),p(A)}}),u=r?GM.createBrotliDecompress():GM.createUnzip();return u.once("error",A=>{if(o&&!t.readable){n.end();return}n.destroy(A)}),Wnt(t,n),t.pipe(a).pipe(u).pipe(n),n}});var WM=_((QLt,qoe)=>{"use strict";var YM=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[o,a]of this.oldCache.entries())this.onEviction(o,a);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};qoe.exports=YM});var VM=_((FLt,Woe)=>{"use strict";var Knt=ve("events"),Vnt=ve("tls"),Jnt=ve("http2"),znt=WM(),ea=Symbol("currentStreamsCount"),joe=Symbol("request"),Wl=Symbol("cachedOriginSet"),DE=Symbol("gracefullyClosing"),Xnt=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],Znt=(t,e,r)=>{let o=0,a=t.length;for(;o>>1;r(t[n],e)?o=n+1:a=n}return o},$nt=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,KM=(t,e)=>{for(let r of t)r[Wl].lengthe[Wl].includes(o))&&r[ea]+e[ea]<=e.remoteSettings.maxConcurrentStreams&&Yoe(r)},eit=(t,e)=>{for(let r of t)e[Wl].lengthr[Wl].includes(o))&&e[ea]+r[ea]<=r.remoteSettings.maxConcurrentStreams&&Yoe(e)},Goe=({agent:t,isFree:e})=>{let r={};for(let o in t.sessions){let n=t.sessions[o].filter(u=>{let A=u[tA.kCurrentStreamsCount]{t[DE]=!0,t[ea]===0&&t.close()},tA=class extends Knt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:o=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=o,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new znt({maxSize:a})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let o of Xnt)e[o]&&(r+=`:${e[o]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let o=this.queue[e][r];this._sessionsCount{Array.isArray(o)?(o=[...o],a()):o=[{resolve:a,reject:n}];let u=this.normalizeOptions(r),A=tA.normalizeOrigin(e,r&&r.servername);if(A===void 0){for(let{reject:E}of o)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(u in this.sessions){let E=this.sessions[u],I=-1,v=-1,x;for(let C of E){let R=C.remoteSettings.maxConcurrentStreams;if(R=R||C[DE]||C.destroyed)continue;x||(I=R),L>v&&(x=C,v=L)}}if(x){if(o.length!==1){for(let{reject:C}of o){let R=new Error(`Expected the length of listeners to be 1, got ${o.length}. +Please report this to https://github.com/szmarczak/http2-wrapper/`);C(R)}return}o[0].resolve(x);return}}if(u in this.queue){if(A in this.queue[u]){this.queue[u][A].listeners.push(...o),this._tryToCreateNewSession(u,A);return}}else this.queue[u]={};let p=()=>{u in this.queue&&this.queue[u][A]===h&&(delete this.queue[u][A],Object.keys(this.queue[u]).length===0&&delete this.queue[u])},h=()=>{let E=`${A}:${u}`,I=!1;try{let v=Jnt.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});v[ea]=0,v[DE]=!1;let x=()=>v[ea]{this.tlsSessionCache.set(E,L)}),v.once("error",L=>{for(let{reject:U}of o)U(L);this.tlsSessionCache.delete(E)}),v.setTimeout(this.timeout,()=>{v.destroy()}),v.once("close",()=>{if(I){C&&this._freeSessionsCount--,this._sessionsCount--;let L=this.sessions[u];L.splice(L.indexOf(v),1),L.length===0&&delete this.sessions[u]}else{let L=new Error("Session closed without receiving a SETTINGS frame");L.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of o)U(L);p()}this._tryToCreateNewSession(u,A)});let R=()=>{if(!(!(u in this.queue)||!x())){for(let L of v[Wl])if(L in this.queue[u]){let{listeners:U}=this.queue[u][L];for(;U.length!==0&&x();)U.shift().resolve(v);let J=this.queue[u];if(J[L].listeners.length===0&&(delete J[L],Object.keys(J).length===0)){delete this.queue[u];break}if(!x())break}}};v.on("origin",()=>{v[Wl]=v.originSet,x()&&(R(),KM(this.sessions[u],v))}),v.once("remoteSettings",()=>{if(v.ref(),v.unref(),this._sessionsCount++,h.destroyed){let L=new Error("Agent has been destroyed");for(let U of o)U.reject(L);v.destroy();return}v[Wl]=v.originSet;{let L=this.sessions;if(u in L){let U=L[u];U.splice(Znt(U,v,$nt),0,v)}else L[u]=[v]}this._freeSessionsCount+=1,I=!0,this.emit("session",v),R(),p(),v[ea]===0&&this._freeSessionsCount>this.maxFreeSessions&&v.close(),o.length!==0&&(this.getSession(A,r,o),o.length=0),v.on("remoteSettings",()=>{R(),KM(this.sessions[u],v)})}),v[joe]=v.request,v.request=(L,U)=>{if(v[DE])throw new Error("The session is gracefully closing. No new streams are allowed.");let J=v[joe](L,U);return v.ref(),++v[ea],v[ea]===v.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,J.once("close",()=>{if(C=x(),--v[ea],!v.destroyed&&!v.closed&&(eit(this.sessions[u],v),x()&&!v.closed)){C||(this._freeSessionsCount++,C=!0);let te=v[ea]===0;te&&v.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||v[DE])?v.close():(KM(this.sessions[u],v),R())}}),J}}catch(v){for(let x of o)x.reject(v);p()}};h.listeners=o,h.completed=!1,h.destroyed=!1,this.queue[u][A]=h,this._tryToCreateNewSession(u,A)})}request(e,r,o,a){return new Promise((n,u)=>{this.getSession(e,r,[{reject:u,resolve:A=>{try{n(A.request(o,a))}catch(p){u(p)}}}])})}createConnection(e,r){return tA.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let o=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),Vnt.connect(o,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ea]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let o of r)o.destroy(e);for(let r of Object.values(this.queue))for(let o of Object.values(r))o.destroyed=!0;this.queue={}}get freeSessions(){return Goe({agent:this,isFree:!0})}get busySessions(){return Goe({agent:this,isFree:!1})}};tA.kCurrentStreamsCount=ea;tA.kGracefullyClosing=DE;Woe.exports={Agent:tA,globalAgent:new tA}});var zM=_((RLt,Koe)=>{"use strict";var{Readable:tit}=ve("stream"),JM=class extends tit{constructor(e,r){super({highWaterMark:r,autoDestroy:!1}),this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,r){return this.req.setTimeout(e,r),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}};Koe.exports=JM});var XM=_((TLt,Voe)=>{"use strict";Voe.exports=t=>{let e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return typeof t.port=="string"&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var zoe=_((NLt,Joe)=>{"use strict";Joe.exports=(t,e,r)=>{for(let o of r)t.on(o,(...a)=>e.emit(o,...a))}});var Zoe=_((LLt,Xoe)=>{"use strict";Xoe.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var eae=_((MLt,$oe)=>{"use strict";var SE=(t,e,r)=>{$oe.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};SE(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],o=Array.isArray(r);return o&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${o?"one of":"of"} type ${r}. Received ${typeof t[2]}`});SE(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);SE(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);SE(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);SE(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);SE(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var r4=_((ULt,aae)=>{"use strict";var rit=ve("http2"),{Writable:nit}=ve("stream"),{Agent:tae,globalAgent:iit}=VM(),sit=zM(),oit=XM(),ait=zoe(),lit=Zoe(),{ERR_INVALID_ARG_TYPE:ZM,ERR_INVALID_PROTOCOL:cit,ERR_HTTP_HEADERS_SENT:rae,ERR_INVALID_HTTP_TOKEN:uit,ERR_HTTP_INVALID_HEADER_VALUE:Ait,ERR_INVALID_CHAR:fit}=eae(),{HTTP2_HEADER_STATUS:nae,HTTP2_HEADER_METHOD:iae,HTTP2_HEADER_PATH:sae,HTTP2_METHOD_CONNECT:pit}=rit.constants,Qo=Symbol("headers"),$M=Symbol("origin"),e4=Symbol("session"),oae=Symbol("options"),rb=Symbol("flushedHeaders"),h1=Symbol("jobs"),hit=/^[\^`\-\w!#$%&*+.|~]+$/,git=/[^\t\u0020-\u007E\u0080-\u00FF]/,t4=class extends nit{constructor(e,r,o){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=oit(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(o=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[e4]=r.h2session;else if(r.agent===!1)this.agent=new tae({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new tae({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=iit;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new ZM("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new cit(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,u=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:A}=r;if(r.timeout=void 0,this[Qo]=Object.create(null),this[h1]=[],this.socket=null,this.connection=null,this.method=r.method||"GET",this.path=r.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,r.headers)for(let[p,h]of Object.entries(r.headers))this.setHeader(p,h);r.auth&&!("authorization"in this[Qo])&&(this[Qo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[oae]=r,n===443?(this[$M]=`https://${u}`,":authority"in this[Qo]||(this[Qo][":authority"]=u)):(this[$M]=`https://${u}:${n}`,":authority"in this[Qo]||(this[Qo][":authority"]=`${u}:${n}`)),A&&this.setTimeout(A),o&&this.once("response",o),this[rb]=!1}get method(){return this[Qo][iae]}set method(e){e&&(this[Qo][iae]=e.toUpperCase())}get path(){return this[Qo][sae]}set path(e){e&&(this[Qo][sae]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,o){if(this._mustNotHaveABody){o(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,o);this._request?a():this[h1].push(a)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[h1].push(r)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.destroy(),r(e)}async flushHeaders(){if(this[rb]||this.destroyed)return;this[rb]=!0;let e=this.method===pit,r=o=>{if(this._request=o,this.destroyed){o.destroy();return}e||ait(o,this,["timeout","continue","close","error"]);let a=u=>(...A)=>{!this.writable&&!this.destroyed?u(...A):this.once("finish",()=>{u(...A)})};o.once("response",a((u,A,p)=>{let h=new sit(this.socket,o.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=u[nae],h.headers=u,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,o,Buffer.alloc(0))?this.emit("close"):o.destroy()):(o.on("data",E=>{!h._dumped&&!h.push(E)&&o.pause()}),o.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),o.once("headers",a(u=>this.emit("information",{statusCode:u[nae]}))),o.once("trailers",a((u,A,p)=>{let{res:h}=this;h.trailers=u,h.rawTrailers=p}));let{socket:n}=o.session;this.socket=n,this.connection=n;for(let u of this[h1])u();this.emit("socket",this.socket)};if(this[e4])try{r(this[e4].request(this[Qo]))}catch(o){this.emit("error",o)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[$M],this[oae],this[Qo]))}catch(o){this.emit("error",o)}}}getHeader(e){if(typeof e!="string")throw new ZM("name","string",e);return this[Qo][e.toLowerCase()]}get headersSent(){return this[rb]}removeHeader(e){if(typeof e!="string")throw new ZM("name","string",e);if(this.headersSent)throw new rae("remove");delete this[Qo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new rae("set");if(typeof e!="string"||!hit.test(e)&&!lit(e))throw new uit("Header name",e);if(typeof r>"u")throw new Ait(r,e);if(git.test(r))throw new fit("header content",e);this[Qo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let o=()=>this._request.setTimeout(e,r);return this._request?o():this[h1].push(o),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};aae.exports=t4});var cae=_((_Lt,lae)=>{"use strict";var dit=ve("tls");lae.exports=(t={})=>new Promise((e,r)=>{let o=dit.connect(t,()=>{t.resolveSocket?(o.off("error",r),e({alpnProtocol:o.alpnProtocol,socket:o})):(o.destroy(),e({alpnProtocol:o.alpnProtocol}))});o.on("error",r)})});var Aae=_((HLt,uae)=>{"use strict";var mit=ve("net");uae.exports=t=>{let e=t.host,r=t.headers&&t.headers.host;return r&&(r.startsWith("[")?r.indexOf("]")===-1?e=r:e=r.slice(1,-1):e=r.split(":",1)[0]),mit.isIP(e)?"":e}});var hae=_((qLt,i4)=>{"use strict";var fae=ve("http"),n4=ve("https"),yit=cae(),Eit=WM(),Cit=r4(),wit=Aae(),Iit=XM(),nb=new Eit({maxSize:100}),g1=new Map,pae=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let o=()=>{t.emit("free",e,r)};e.on("free",o);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",o),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},Bit=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!nb.has(e)){if(g1.has(e))return(await g1.get(e)).alpnProtocol;let{path:r,agent:o}=t;t.path=t.socketPath;let a=yit(t);g1.set(e,a);try{let{socket:n,alpnProtocol:u}=await a;if(nb.set(e,u),t.path=r,u==="h2")n.destroy();else{let{globalAgent:A}=n4,p=n4.Agent.prototype.createConnection;o?o.createConnection===p?pae(o,n,t):n.destroy():A.createConnection===p?pae(A,n,t):n.destroy()}return g1.delete(e),u}catch(n){throw g1.delete(e),n}}return nb.get(e)};i4.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=Iit(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={ALPNProtocols:["h2","http/1.1"],...t,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let o=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||wit(e),e.port=e.port||(o?443:80),e._defaultAgent=o?n4.globalAgent:fae.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[o?"https":"http"]}return o&&await Bit(e)==="h2"?(a&&(e.agent=a.http2),new Cit(e,r)):fae.request(e,r)};i4.exports.protocolCache=nb});var dae=_((jLt,gae)=>{"use strict";var vit=ve("http2"),Dit=VM(),s4=r4(),Sit=zM(),Pit=hae(),bit=(t,e,r)=>new s4(t,e,r),xit=(t,e,r)=>{let o=new s4(t,e,r);return o.end(),o};gae.exports={...vit,ClientRequest:s4,IncomingMessage:Sit,...Dit,request:bit,get:xit,auto:Pit}});var a4=_(o4=>{"use strict";Object.defineProperty(o4,"__esModule",{value:!0});var mae=Tf();o4.default=t=>mae.default.nodeStream(t)&&mae.default.function_(t.getBoundary)});var wae=_(l4=>{"use strict";Object.defineProperty(l4,"__esModule",{value:!0});var Eae=ve("fs"),Cae=ve("util"),yae=Tf(),kit=a4(),Qit=Cae.promisify(Eae.stat);l4.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(yae.default.string(t))return Buffer.byteLength(t);if(yae.default.buffer(t))return t.length;if(kit.default(t))return Cae.promisify(t.getLength.bind(t))();if(t instanceof Eae.ReadStream){let{size:r}=await Qit(t.path);return r===0?void 0:r}}});var u4=_(c4=>{"use strict";Object.defineProperty(c4,"__esModule",{value:!0});function Fit(t,e,r){let o={};for(let a of r)o[a]=(...n)=>{e.emit(a,...n)},t.on(a,o[a]);return()=>{for(let a of r)t.off(a,o[a])}}c4.default=Fit});var Iae=_(A4=>{"use strict";Object.defineProperty(A4,"__esModule",{value:!0});A4.default=()=>{let t=[];return{once(e,r,o){e.once(r,o),t.push({origin:e,event:r,fn:o})},unhandleAll(){for(let e of t){let{origin:r,event:o,fn:a}=e;r.removeListener(o,a)}t.length=0}}}});var vae=_(d1=>{"use strict";Object.defineProperty(d1,"__esModule",{value:!0});d1.TimeoutError=void 0;var Rit=ve("net"),Tit=Iae(),Bae=Symbol("reentry"),Nit=()=>{},ib=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};d1.TimeoutError=ib;d1.default=(t,e,r)=>{if(Bae in t)return Nit;t[Bae]=!0;let o=[],{once:a,unhandleAll:n}=Tit.default(),u=(I,v,x)=>{var C;let R=setTimeout(v,I,I,x);(C=R.unref)===null||C===void 0||C.call(R);let L=()=>{clearTimeout(R)};return o.push(L),L},{host:A,hostname:p}=r,h=(I,v)=>{t.destroy(new ib(I,v))},E=()=>{for(let I of o)I();n()};if(t.once("error",I=>{if(E(),t.listenerCount("error")===0)throw I}),t.once("close",E),a(t,"response",I=>{a(I,"end",E)}),typeof e.request<"u"&&u(e.request,h,"request"),typeof e.socket<"u"){let I=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,I),o.push(()=>{t.removeListener("timeout",I)})}return a(t,"socket",I=>{var v;let{socketPath:x}=t;if(I.connecting){let C=Boolean(x??Rit.isIP((v=p??A)!==null&&v!==void 0?v:"")!==0);if(typeof e.lookup<"u"&&!C&&typeof I.address().address>"u"){let R=u(e.lookup,h,"lookup");a(I,"lookup",R)}if(typeof e.connect<"u"){let R=()=>u(e.connect,h,"connect");C?a(I,"connect",R()):a(I,"lookup",L=>{L===null&&a(I,"connect",R())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(I,"connect",()=>{let R=u(e.secureConnect,h,"secureConnect");a(I,"secureConnect",R)})}if(typeof e.send<"u"){let C=()=>u(e.send,h,"send");I.connecting?a(I,"connect",()=>{a(t,"upload-complete",C())}):a(t,"upload-complete",C())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let I=u(e.response,h,"response");a(t,"response",I)}),E}});var Sae=_(f4=>{"use strict";Object.defineProperty(f4,"__esModule",{value:!0});var Dae=Tf();f4.default=t=>{t=t;let e={protocol:t.protocol,hostname:Dae.default.string(t.hostname)&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return Dae.default.string(t.port)&&t.port.length>0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var Pae=_(p4=>{"use strict";Object.defineProperty(p4,"__esModule",{value:!0});var Lit=ve("url"),Oit=["protocol","host","hostname","port","pathname","search"];p4.default=(t,e)=>{var r,o;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(o=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&o!==void 0?o:""}`}let a=new Lit.URL(t);if(e.path){let n=e.path.indexOf("?");n===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,n),e.search=e.path.slice(n+1)),delete e.path}for(let n of Oit)e[n]&&(a[n]=e[n].toString());return a}});var bae=_(g4=>{"use strict";Object.defineProperty(g4,"__esModule",{value:!0});var h4=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}};g4.default=h4});var m4=_(d4=>{"use strict";Object.defineProperty(d4,"__esModule",{value:!0});var Mit=async t=>{let e=[],r=0;for await(let o of t)e.push(o),r+=Buffer.byteLength(o);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};d4.default=Mit});var kae=_(Pd=>{"use strict";Object.defineProperty(Pd,"__esModule",{value:!0});Pd.dnsLookupIpVersionToFamily=Pd.isDnsLookupIpVersion=void 0;var xae={auto:0,ipv4:4,ipv6:6};Pd.isDnsLookupIpVersion=t=>t in xae;Pd.dnsLookupIpVersionToFamily=t=>{if(Pd.isDnsLookupIpVersion(t))return xae[t];throw new Error("Invalid DNS lookup IP version")}});var y4=_(sb=>{"use strict";Object.defineProperty(sb,"__esModule",{value:!0});sb.isResponseOk=void 0;sb.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var Fae=_(E4=>{"use strict";Object.defineProperty(E4,"__esModule",{value:!0});var Qae=new Set;E4.default=t=>{Qae.has(t)||(Qae.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var Rae=_(C4=>{"use strict";Object.defineProperty(C4,"__esModule",{value:!0});var Ai=Tf(),Uit=(t,e)=>{if(Ai.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Ai.assert.any([Ai.default.string,Ai.default.undefined],t.encoding),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.resolveBodyOnly),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.methodRewriting),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.isStream),Ai.assert.any([Ai.default.string,Ai.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:o=>o.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Ai.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(o=>o.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Ai.default.number(r)&&(t.retry.limit=r),Ai.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Ai.default.number))),Ai.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:o}=t;if(!Ai.default.function_(o.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Ai.default.function_(o.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Ai.default.function_(o.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Ai.default.function_(o.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};C4.default=Uit});var Tae=_(m1=>{"use strict";Object.defineProperty(m1,"__esModule",{value:!0});m1.retryAfterStatusCodes=void 0;m1.retryAfterStatusCodes=new Set([413,429,503]);var _it=({attemptCount:t,retryOptions:e,error:r,retryAfter:o})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),u=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!u)return 0;if(r.response){if(o)return e.maxRetryAfter===void 0||o>e.maxRetryAfter?0:o;if(r.response.statusCode===413)return 0}let A=Math.random()*100;return 2**(t-1)*1e3+A};m1.default=_it});var C1=_(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.UnsupportedProtocolError=Bn.ReadError=Bn.TimeoutError=Bn.UploadError=Bn.CacheError=Bn.HTTPError=Bn.MaxRedirectsError=Bn.RequestError=Bn.setNonEnumerableProperties=Bn.knownHookEvents=Bn.withoutBody=Bn.kIsNormalizedAlready=void 0;var Nae=ve("util"),Lae=ve("stream"),Hit=ve("fs"),ah=ve("url"),Oae=ve("http"),w4=ve("http"),qit=ve("https"),jit=Zse(),Git=soe(),Mae=Ooe(),Yit=Hoe(),Wit=dae(),Kit=eb(),st=Tf(),Vit=wae(),Uae=a4(),Jit=u4(),_ae=vae(),zit=Sae(),Hae=Pae(),Xit=bae(),Zit=m4(),qae=kae(),$it=y4(),lh=Fae(),est=Rae(),tst=Tae(),I4,Zs=Symbol("request"),lb=Symbol("response"),PE=Symbol("responseSize"),bE=Symbol("downloadedSize"),xE=Symbol("bodySize"),kE=Symbol("uploadedSize"),ob=Symbol("serverResponsesPiped"),jae=Symbol("unproxyEvents"),Gae=Symbol("isFromCache"),B4=Symbol("cancelTimeouts"),Yae=Symbol("startedReading"),QE=Symbol("stopReading"),ab=Symbol("triggerRead"),ch=Symbol("body"),y1=Symbol("jobs"),Wae=Symbol("originalResponse"),Kae=Symbol("retryTimeout");Bn.kIsNormalizedAlready=Symbol("isNormalizedAlready");var rst=st.default.string(process.versions.brotli);Bn.withoutBody=new Set(["GET","HEAD"]);Bn.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function nst(t){for(let e in t){let r=t[e];if(!st.default.string(r)&&!st.default.number(r)&&!st.default.boolean(r)&&!st.default.null_(r)&&!st.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function ist(t){return st.default.object(t)&&!("statusCode"in t)}var v4=new Xit.default,sst=async t=>new Promise((e,r)=>{let o=a=>{r(a)};t.pending||e(),t.once("error",o),t.once("ready",()=>{t.off("error",o),e()})}),ost=new Set([300,301,302,303,304,307,308]),ast=["context","body","json","form"];Bn.setNonEnumerableProperties=(t,e)=>{let r={};for(let o of t)if(!!o)for(let a of ast)a in o&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:o[a]});Object.defineProperties(e,r)};var Vi=class extends Error{constructor(e,r,o){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,o instanceof db?(Object.defineProperty(this,"request",{enumerable:!1,value:o}),Object.defineProperty(this,"response",{enumerable:!1,value:o[lb]}),Object.defineProperty(this,"options",{enumerable:!1,value:o.options})):Object.defineProperty(this,"options",{enumerable:!1,value:o}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,st.default.string(r.stack)&&st.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,u=this.stack.slice(n).split(` `).reverse(),A=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` `).reverse();for(;A.length!==0&&A[0]===u[0];)u.shift();this.stack=`${this.stack.slice(0,n)}${u.reverse().join(` `)}${A.reverse().join(` -`)}`}}};Bn.RequestError=Ki;var ux=class extends Ki{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Bn.MaxRedirectsError=ux;var Ax=class extends Ki{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Bn.HTTPError=Ax;var fx=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Bn.CacheError=fx;var px=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Bn.UploadError=px;var hx=class extends Ki{constructor(e,r,o){super(e.message,e,o),this.name="TimeoutError",this.event=e.event,this.timings=r}};Bn.TimeoutError=hx;var y1=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Bn.ReadError=y1;var gx=class extends Ki{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Bn.UnsupportedProtocolError=gx;var pst=["socket","connect","continue","information","upgrade","timeout"],dx=class extends Oae.Duplex{constructor(e,r={},o){super({autoDestroy:!1,highWaterMark:0}),this[SE]=0,this[bE]=0,this.requestInitialized=!1,this[ax]=new Set,this.redirects=[],this[kE]=!1,this[lx]=!1,this[m1]=[],this.retryCount=0,this._progressCallbacks=[];let a=()=>this._unlockWrite(),n=()=>this._lockWrite();this.on("pipe",h=>{h.prependListener("data",a),h.on("data",n),h.prependListener("end",a),h.on("end",n)}),this.on("unpipe",h=>{h.off("data",a),h.off("data",n),h.off("end",a),h.off("end",n)}),this.on("pipe",h=>{h instanceof B4.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:u,body:A,form:p}=r;if((u||A||p)&&this._lockWrite(),Bn.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,o)}catch(h){st.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof Wit.ReadStream&&await ust(this.options.body);let{url:E}=this.options;if(!E)throw new TypeError("Missing `url` property");if(this.requestUrl=E.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(h=this[Zs])===null||h===void 0||h.destroy();return}for(let I of this[m1])I();this[m1].length=0,this.requestInitialized=!0}catch(E){if(E instanceof Ki){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,o){var a,n,u,A,p;let h=r;if(st.default.object(e)&&!st.default.urlInstance(e))r={...o,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...o,...r},e!==void 0&&(r.url=e),st.default.urlInstance(r.url)&&(r.url=new oh.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),st.assert.any([st.default.string,st.default.undefined],r.method),st.assert.any([st.default.object,st.default.undefined],r.headers),st.assert.any([st.default.string,st.default.urlInstance,st.default.undefined],r.prefixUrl),st.assert.any([st.default.object,st.default.undefined],r.cookieJar),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.searchParams),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.cache),st.assert.any([st.default.object,st.default.number,st.default.undefined],r.timeout),st.assert.any([st.default.object,st.default.undefined],r.context),st.assert.any([st.default.object,st.default.undefined],r.hooks),st.assert.any([st.default.boolean,st.default.undefined],r.decompress),st.assert.any([st.default.boolean,st.default.undefined],r.ignoreInvalidCookies),st.assert.any([st.default.boolean,st.default.undefined],r.followRedirect),st.assert.any([st.default.number,st.default.undefined],r.maxRedirects),st.assert.any([st.default.boolean,st.default.undefined],r.throwHttpErrors),st.assert.any([st.default.boolean,st.default.undefined],r.http2),st.assert.any([st.default.boolean,st.default.undefined],r.allowGetBody),st.assert.any([st.default.string,st.default.undefined],r.localAddress),st.assert.any([Gae.isDnsLookupIpVersion,st.default.undefined],r.dnsLookupIpVersion),st.assert.any([st.default.object,st.default.undefined],r.https),st.assert.any([st.default.boolean,st.default.undefined],r.rejectUnauthorized),r.https&&(st.assert.any([st.default.boolean,st.default.undefined],r.https.rejectUnauthorized),st.assert.any([st.default.function_,st.default.undefined],r.https.checkServerIdentity),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificateAuthority),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.key),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificate),st.assert.any([st.default.string,st.default.undefined],r.https.passphrase),st.assert.any([st.default.string,st.default.buffer,st.default.array,st.default.undefined],r.https.pfx)),st.assert.any([st.default.object,st.default.undefined],r.cacheOptions),st.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===o?.headers?r.headers={...r.headers}:r.headers=Zit({...o?.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==o?.searchParams){let b;if(st.default.string(r.searchParams)||r.searchParams instanceof oh.URLSearchParams)b=new oh.URLSearchParams(r.searchParams);else{lst(r.searchParams),b=new oh.URLSearchParams;for(let C in r.searchParams){let T=r.searchParams[C];T===null?b.append(C,""):T!==void 0&&b.append(C,T)}}(a=o?.searchParams)===null||a===void 0||a.forEach((C,T)=>{b.has(T)||b.append(T,C)}),r.searchParams=b}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(u=r.password)!==null&&u!==void 0?u:"",st.default.undefined(r.prefixUrl)?r.prefixUrl=(A=o?.prefixUrl)!==null&&A!==void 0?A:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),st.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=qae.default(r.prefixUrl+r.url,r)}else(st.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=qae.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:b}=r;Object.defineProperty(r,"prefixUrl",{set:T=>{let L=r.url;if(!L.href.startsWith(T))throw new Error(`Cannot change \`prefixUrl\` from ${b} to ${T}: ${L.href}`);r.url=new oh.URL(T+L.href.slice(b.length)),b=T},get:()=>b});let{protocol:C}=r.url;if(C==="unix:"&&(C="http:",r.url=new oh.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),C!=="http:"&&C!=="https:")throw new gx(r);r.username===""?r.username=r.url.username:r.url.username=r.username,r.password===""?r.password=r.url.password:r.url.password=r.password}let{cookieJar:E}=r;if(E){let{setCookie:b,getCookieString:C}=E;st.assert.function_(b),st.assert.function_(C),b.length===4&&C.length===0&&(b=Mae.promisify(b.bind(r.cookieJar)),C=Mae.promisify(C.bind(r.cookieJar)),r.cookieJar={setCookie:b,getCookieString:C})}let{cache:I}=r;if(I&&(P4.has(I)||P4.set(I,new _ae((b,C)=>{let T=b[Zs](b,C);return st.default.promise(T)&&(T.once=(L,U)=>{if(L==="error")T.catch(U);else if(L==="abort")(async()=>{try{(await T).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${L}`);return T}),T},I))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)v4||(v4=new Jit.default),r.dnsCache=v4;else if(!st.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${st.default(r.dnsCache)}`);st.default.number(r.timeout)?r.timeout={request:r.timeout}:o&&r.timeout!==o.timeout?r.timeout={...o.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let v=r.hooks===o?.hooks;r.hooks={...r.hooks};for(let b of Bn.knownHookEvents)if(b in r.hooks)if(st.default.array(r.hooks[b]))r.hooks[b]=[...r.hooks[b]];else throw new TypeError(`Parameter \`${b}\` must be an Array, got ${st.default(r.hooks[b])}`);else r.hooks[b]=[];if(o&&!v)for(let b of Bn.knownHookEvents)o.hooks[b].length>0&&(r.hooks[b]=[...o.hooks[b],...r.hooks[b]]);if("family"in r&&ah.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),o?.https&&(r.https={...o.https,...r.https}),"rejectUnauthorized"in r&&ah.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&ah.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&ah.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&ah.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&ah.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&ah.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&ah.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent){for(let b in r.agent)if(b!=="http"&&b!=="https"&&b!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${b}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Bn.setNonEnumerableProperties([o,h],r),sst.default(r,o)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,o=!st.default.undefined(e.form),a=!st.default.undefined(e.json),n=!st.default.undefined(e.body),u=o||a||n,A=Bn.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=A,u){if(A)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,o,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Oae.Readable)&&!st.default.string(e.body)&&!st.default.buffer(e.body)&&!Hae.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(o&&!st.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!st.default.string(r["content-type"]);n?(Hae.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[lh]=e.body):o?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[lh]=new oh.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[lh]=e.stringifyJson(e.json));let h=await $it.default(this[lh],e.headers);st.default.undefined(r["content-length"])&&st.default.undefined(r["transfer-encoding"])&&!A&&!st.default.undefined(h)&&(r["content-length"]=String(h))}}else A?this._lockWrite():this._unlockWrite();this[xE]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:o}=r;this[Kae]=e,r.decompress&&(e=zit(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Uae.STATUS_CODES[a],n.url=r.url.toString(),n.requestUrl=this.requestUrl,n.redirectUrls=this.redirects,n.request=this,n.isFromCache=e.fromCache||!1,n.ip=this.ip,n.retryCount=this.retryCount,this[Wae]=n.isFromCache,this[PE]=Number(e.headers["content-length"])||void 0,this[cx]=e,e.once("end",()=>{this[PE]=this[SE],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",A=>{e.destroy(),this._beforeError(new y1(A,this))}),e.once("aborted",()=>{this._beforeError(new y1({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let u=e.headers["set-cookie"];if(st.default.object(r.cookieJar)&&u){let A=u.map(async p=>r.cookieJar.setCookie(p,o.toString()));r.ignoreInvalidCookies&&(A=A.map(async p=>p.catch(()=>{})));try{await Promise.all(A)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&Ast.has(a)){if(e.resume(),this[Zs]&&(this[D4](),delete this[Zs],this[Yae]()),(a===303&&r.method!=="GET"&&r.method!=="HEAD"||!r.methodRewriting)&&(r.method="GET","body"in r&&delete r.body,"json"in r&&delete r.json,"form"in r&&delete r.form,this[lh]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new ux(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new oh.URL(p,o),E=h.toString();decodeURI(E),h.hostname!==o.hostname||h.port!==o.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(h.username=r.username,h.password=r.password),this.redirects.push(E),r.url=h;for(let I of r.hooks.beforeRedirect)await I(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!ist.isResponseOk(n)){this._beforeError(new Ax(n));return}e.on("readable",()=>{this[lx]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let A of this[ax])if(!A.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&A.setHeader(p,E)}A.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:o,url:a}=r;Kit.default(e),this[D4]=jae.default(e,o,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof jae.TimeoutError?new hx(p,this.timings,this):new Ki(p.message,p,this),this._beforeError(p)}),this[Yae]=est.default(e,this,pst),this[Zs]=e,this.emit("uploadProgress",this.uploadProgress);let u=this[lh],A=this.redirects.length===0?this:e;st.default.nodeStream(u)?(u.pipe(A),u.once("error",p=>{this._beforeError(new px(p,this))})):(this._unlockWrite(),st.default.undefined(u)?(this._cannotHaveBody||this._noPipe)&&(A.end(),this._lockWrite()):(this._writeRequest(u,void 0,()=>{}),A.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((o,a)=>{Object.assign(r,tst.default(e)),delete r.url;let n,u=P4.get(r.cache)(r,async A=>{A._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",A),o(A)});r.url=e,u.once("error",a),u.once("request",async A=>{n=A,o(n)})})}async _makeRequest(){var e,r,o,a,n;let{options:u}=this,{headers:A}=u;for(let U in A)if(st.default.undefined(A[U]))delete A[U];else if(st.default.null_(A[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(u.decompress&&st.default.undefined(A["accept-encoding"])&&(A["accept-encoding"]=ast?"gzip, deflate, br":"gzip, deflate"),u.cookieJar){let U=await u.cookieJar.getCookieString(u.url.toString());st.default.nonEmptyString(U)&&(u.headers.cookie=U)}for(let U of u.hooks.beforeRequest){let J=await U(u);if(!st.default.undefined(J)){u.request=()=>J;break}}u.body&&this[lh]!==u.body&&(this[lh]=u.body);let{agent:p,request:h,timeout:E,url:I}=u;if(u.dnsCache&&!("lookup"in u)&&(u.lookup=u.dnsCache.lookup),I.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${I.pathname}${I.search}`);if(U?.groups){let{socketPath:J,path:te}=U.groups;Object.assign(u,{socketPath:J,path:te,host:""})}}let v=I.protocol==="https:",b;u.http2?b=Xit.auto:b=v?Vit.request:Uae.request;let C=(e=u.request)!==null&&e!==void 0?e:b,T=u.cache?this._createCacheableRequest:C;p&&!u.http2&&(u.agent=p[v?"https":"http"]),u[Zs]=C,delete u.request,delete u.timeout;let L=u;if(L.shared=(r=u.cacheOptions)===null||r===void 0?void 0:r.shared,L.cacheHeuristic=(o=u.cacheOptions)===null||o===void 0?void 0:o.cacheHeuristic,L.immutableMinTimeToLive=(a=u.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,L.ignoreCargoCult=(n=u.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,u.dnsLookupIpVersion!==void 0)try{L.family=Gae.dnsLookupIpVersionToFamily(u.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}u.https&&("rejectUnauthorized"in u.https&&(L.rejectUnauthorized=u.https.rejectUnauthorized),u.https.checkServerIdentity&&(L.checkServerIdentity=u.https.checkServerIdentity),u.https.certificateAuthority&&(L.ca=u.https.certificateAuthority),u.https.certificate&&(L.cert=u.https.certificate),u.https.key&&(L.key=u.https.key),u.https.passphrase&&(L.passphrase=u.https.passphrase),u.https.pfx&&(L.pfx=u.https.pfx));try{let U=await T(I,L);st.default.undefined(U)&&(U=b(I,L)),u.request=h,u.timeout=E,u.agent=p,u.https&&("rejectUnauthorized"in u.https&&delete L.rejectUnauthorized,u.https.checkServerIdentity&&delete L.checkServerIdentity,u.https.certificateAuthority&&delete L.ca,u.https.certificate&&delete L.cert,u.https.key&&delete L.key,u.https.passphrase&&delete L.passphrase,u.https.pfx&&delete L.pfx),cst(U)?this._onRequest(U):this.writable?(this.once("finish",()=>{this._onResponse(U)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(U)}catch(U){throw U instanceof _ae.CacheError?new fx(U,this):new Ki(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new Ki(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[kE])return;let{options:r}=this,o=this.retryCount+1;this[kE]=!0,e instanceof Ki||(e=new Ki(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await nst.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let u;try{let A;n&&"retry-after"in n.headers&&(A=Number(n.headers["retry-after"]),Number.isNaN(A)?(A=Date.parse(n.headers["retry-after"])-Date.now(),A<=0&&(A=1)):A*=1e3),u=await r.retry.calculateDelay({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:ost.default({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:0})})}catch(A){this._error(new Ki(A.message,A,this));return}if(u){let A=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,o)}catch(p){this._error(new Ki(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",o,e))};this[Jae]=setTimeout(A,u);return}}this._error(a)})()}_read(){this[lx]=!0;let e=this[cx];if(e&&!this[kE]){e.readableLength&&(this[lx]=!1);let r;for(;(r=e.read())!==null;){this[SE]+=r.length,this[Vae]=!0;let o=this.downloadProgress;o.percent<1&&this.emit("downloadProgress",o),this.push(r)}}}_write(e,r,o){let a=()=>{this._writeRequest(e,r,o)};this.requestInitialized?a():this[m1].push(a)}_writeRequest(e,r,o){this[Zs].destroyed||(this._progressCallbacks.push(()=>{this[bE]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[Zs].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),o(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Zs in this)){e();return}if(this[Zs].destroyed){e();return}this[Zs].end(o=>{o||(this[xE]=this[bE],this.emit("uploadProgress",this.uploadProgress),this[Zs].emit("upload-complete")),e(o)})};this.requestInitialized?r():this[m1].push(r)}_destroy(e,r){var o;this[kE]=!0,clearTimeout(this[Jae]),Zs in this&&(this[D4](),!((o=this[cx])===null||o===void 0)&&o.complete||this[Zs].destroy()),e!==null&&!st.default.undefined(e)&&!(e instanceof Ki)&&(e=new Ki(e.message,e,this)),r(e)}get _isAboutToError(){return this[kE]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,o;return((r=(e=this[Zs])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((o=this[Kae])===null||o===void 0)&&o.complete)}get socket(){var e,r;return(r=(e=this[Zs])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[PE]?e=this[SE]/this[PE]:this[PE]===this[SE]?e=1:e=0,{percent:e,transferred:this[SE],total:this[PE]}}get uploadProgress(){let e;return this[xE]?e=this[bE]/this[xE]:this[xE]===this[bE]?e=1:e=0,{percent:e,transferred:this[bE],total:this[xE]}}get timings(){var e;return(e=this[Zs])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[Wae]}pipe(e,r){if(this[Vae])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof B4.ServerResponse&&this[ax].add(e),super.pipe(e,r)}unpipe(e){return e instanceof B4.ServerResponse&&this[ax].delete(e),super.unpipe(e),this}};Bn.default=dx});var C1=_(qc=>{"use strict";var hst=qc&&qc.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),gst=qc&&qc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&hst(e,t,r)};Object.defineProperty(qc,"__esModule",{value:!0});qc.CancelError=qc.ParseError=void 0;var zae=E1(),S4=class extends zae.RequestError{constructor(e,r){let{options:o}=r.request;super(`${e.message} in "${o.url.toString()}"`,e,r.request),this.name="ParseError"}};qc.ParseError=S4;var x4=class extends zae.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};qc.CancelError=x4;gst(E1(),qc)});var Zae=_(b4=>{"use strict";Object.defineProperty(b4,"__esModule",{value:!0});var Xae=C1(),dst=(t,e,r,o)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(o);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Xae.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Xae.ParseError(n,t)}};b4.default=dst});var k4=_(ch=>{"use strict";var mst=ch&&ch.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),yst=ch&&ch.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&mst(e,t,r)};Object.defineProperty(ch,"__esModule",{value:!0});var Est=Be("events"),Cst=Tf(),wst=Zse(),mx=C1(),$ae=Zae(),ele=E1(),Ist=f4(),Bst=E4(),tle=C4(),vst=["request","response","redirect","uploadProgress","downloadProgress"];function rle(t){let e,r,o=new Est.EventEmitter,a=new wst((u,A,p)=>{let h=E=>{let I=new ele.default(void 0,t);I.retryCount=E,I._noPipe=!0,p(()=>I.destroy()),p.shouldReject=!1,p(()=>A(new mx.CancelError(I))),e=I,I.once("response",async C=>{var T;if(C.retryCount=E,C.request.aborted)return;let L;try{L=await Bst.default(I),C.rawBody=L}catch{return}if(I._isAboutToError)return;let U=((T=C.headers["content-encoding"])!==null&&T!==void 0?T:"").toLowerCase(),J=["gzip","deflate","br"].includes(U),{options:te}=I;if(J&&!te.decompress)C.body=L;else try{C.body=$ae.default(C,te.responseType,te.parseJson,te.encoding)}catch(le){if(C.body=L.toString(),tle.isResponseOk(C)){I._beforeError(le);return}}try{for(let[le,pe]of te.hooks.afterResponse.entries())C=await pe(C,async Ae=>{let ye=ele.default.normalizeArguments(void 0,{...Ae,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);ye.hooks.afterResponse=ye.hooks.afterResponse.slice(0,le);for(let we of ye.hooks.beforeRetry)await we(ye);let ae=rle(ye);return p(()=>{ae.catch(()=>{}),ae.cancel()}),ae})}catch(le){I._beforeError(new mx.RequestError(le.message,le,I));return}if(!tle.isResponseOk(C)){I._beforeError(new mx.HTTPError(C));return}r=C,u(I.options.resolveBodyOnly?C.body:C)});let v=C=>{if(a.isCanceled)return;let{options:T}=I;if(C instanceof mx.HTTPError&&!T.throwHttpErrors){let{response:L}=C;u(I.options.resolveBodyOnly?L.body:L);return}A(C)};I.once("error",v);let b=I.options.body;I.once("retry",(C,T)=>{var L,U;if(b===((L=T.request)===null||L===void 0?void 0:L.options.body)&&Cst.default.nodeStream((U=T.request)===null||U===void 0?void 0:U.options.body)){v(T);return}h(C)}),Ist.default(I,o,vst)};h(0)});a.on=(u,A)=>(o.on(u,A),a);let n=u=>{let A=(async()=>{await a;let{options:p}=r.request;return $ae.default(r,u,p.parseJson,p.encoding)})();return Object.defineProperties(A,Object.getOwnPropertyDescriptors(a)),A};return a.json=()=>{let{headers:u}=e.options;return!e.writableFinished&&u.accept===void 0&&(u.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}ch.default=rle;yst(C1(),ch)});var nle=_(Q4=>{"use strict";Object.defineProperty(Q4,"__esModule",{value:!0});var Dst=C1();function Pst(t,...e){let r=(async()=>{if(t instanceof Dst.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),o=()=>r;return r.json=o,r.text=o,r.buffer=o,r.on=o,r}Q4.default=Pst});var ole=_(F4=>{"use strict";Object.defineProperty(F4,"__esModule",{value:!0});var ile=Tf();function sle(t){for(let e of Object.values(t))(ile.default.plainObject(e)||ile.default.array(e))&&sle(e);return Object.freeze(t)}F4.default=sle});var lle=_(ale=>{"use strict";Object.defineProperty(ale,"__esModule",{value:!0})});var T4=_(Kl=>{"use strict";var Sst=Kl&&Kl.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),xst=Kl&&Kl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Sst(e,t,r)};Object.defineProperty(Kl,"__esModule",{value:!0});Kl.defaultHandler=void 0;var cle=Tf(),Vl=k4(),bst=nle(),Ex=E1(),kst=ole(),Qst={RequestError:Vl.RequestError,CacheError:Vl.CacheError,ReadError:Vl.ReadError,HTTPError:Vl.HTTPError,MaxRedirectsError:Vl.MaxRedirectsError,TimeoutError:Vl.TimeoutError,ParseError:Vl.ParseError,CancelError:Vl.CancelError,UnsupportedProtocolError:Vl.UnsupportedProtocolError,UploadError:Vl.UploadError},Fst=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:yx}=Ex.default,ule=(...t)=>{let e;for(let r of t)e=yx(void 0,r,e);return e},Tst=t=>t.isStream?new Ex.default(void 0,t):Vl.default(t),Rst=t=>"defaults"in t&&"options"in t.defaults,Nst=["get","post","put","patch","head","delete"];Kl.defaultHandler=(t,e)=>e(t);var Ale=(t,e)=>{if(t)for(let r of t)r(e)},fle=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(o=>(a,n)=>{let u,A=o(a,p=>(u=n(p),u));if(A!==u&&!a.isStream&&u){let p=A,{then:h,catch:E,finally:I}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(u)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(u)),p.then=h,p.catch=E,p.finally=I}return A});let e=(o,a={},n)=>{var u,A;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?Tst:h);if(cle.default.plainObject(o)){let E={...o,...a};Ex.setNonEnumerableProperties([o,a],E),a=E,o=void 0}try{let E;try{Ale(t.options.hooks.init,a),Ale((u=a.hooks)===null||u===void 0?void 0:u.init,a)}catch(v){E=v}let I=yx(o,a,n??t.options);if(I[Ex.kIsNormalizedAlready]=!0,E)throw new Vl.RequestError(E.message,E,I);return h(I)}catch(E){if(a.isStream)throw E;return bst.default(E,t.options.hooks.beforeError,(A=a.hooks)===null||A===void 0?void 0:A.beforeError)}};e.extend=(...o)=>{let a=[t.options],n=[...t._rawHandlers],u;for(let A of o)Rst(A)?(a.push(A.defaults.options),n.push(...A.defaults._rawHandlers),u=A.defaults.mutableDefaults):(a.push(A),"handlers"in A&&n.push(...A.handlers),u=A.mutableDefaults);return n=n.filter(A=>A!==Kl.defaultHandler),n.length===0&&n.push(Kl.defaultHandler),fle({options:ule(...a),handlers:n,mutableDefaults:Boolean(u)})};let r=async function*(o,a){let n=yx(o,a,t.options);n.resolveBodyOnly=!1;let u=n.pagination;if(!cle.default.object(u))throw new TypeError("`options.pagination` must be implemented");let A=[],{countLimit:p}=u,h=0;for(;h{let n=[];for await(let u of r(o,a))n.push(u);return n},e.paginate.each=r,e.stream=(o,a)=>e(o,{...a,isStream:!0});for(let o of Nst)e[o]=(a,n)=>e(a,{...n,method:o}),e.stream[o]=(a,n)=>e(a,{...n,method:o,isStream:!0});return Object.assign(e,Qst),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:kst.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=ule,e};Kl.default=fle;xst(lle(),Kl)});var gle=_((Rf,Cx)=>{"use strict";var Lst=Rf&&Rf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ple=Rf&&Rf.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Lst(e,t,r)};Object.defineProperty(Rf,"__esModule",{value:!0});var Mst=Be("url"),hle=T4(),Ost={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let o of e){let a=o.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Mst.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[hle.defaultHandler],mutableDefaults:!1},R4=hle.default(Ost);Rf.default=R4;Cx.exports=R4;Cx.exports.default=R4;Cx.exports.__esModule=!0;ple(T4(),Rf);ple(k4(),Rf)});var rn={};Kt(rn,{Method:()=>Ile,del:()=>qst,get:()=>O4,getNetworkSettings:()=>wle,post:()=>U4,put:()=>jst,request:()=>w1});function yle(t){let e=new wx.URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),e.username&&e.password&&(r.proxyAuth=`${e.username}:${e.password}`),{proxy:r}}async function N4(t){return ol(mle,t,()=>oe.readFilePromise(t).then(e=>(mle.set(t,e),e)))}function Hst({statusCode:t,statusMessage:e},r){let o=Ot(r,t,yt.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return Xy(r,`${o}${e?` (${e})`:""}`,a)}async function Ix(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(o){if(o.name!=="HTTPError")throw o;let a=r?.(o,e)??o.response.body?.error;a==null&&(o.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=o.message),o.code==="ETIMEDOUT"&&o.event==="socket"&&(a+=`(can be increased via ${Ot(e,"httpTimeout",yt.SETTING)})`);let n=new zt(35,a,u=>{o.response&&u.reportError(35,` ${zu(e,{label:"Response Code",value:_c(yt.NO_HINT,Hst(o.response,e))})}`),o.request&&(u.reportError(35,` ${zu(e,{label:"Request Method",value:_c(yt.NO_HINT,o.request.options.method)})}`),u.reportError(35,` ${zu(e,{label:"Request URL",value:_c(yt.URL,o.request.requestUrl)})}`)),o.request.redirects.length>0&&u.reportError(35,` ${zu(e,{label:"Request Redirects",value:_c(yt.NO_HINT,bL(e,o.request.redirects,yt.URL))})}`),o.request.retryCount===o.request.options.retry.limit&&u.reportError(35,` ${zu(e,{label:"Request Retry Count",value:_c(yt.NO_HINT,`${Ot(e,o.request.retryCount,yt.NUMBER)} (can be increased via ${Ot(e,"httpRetry",yt.SETTING)})`)})}`)});throw n.originalError=o,n}}function wle(t,e){let r=[...e.configuration.get("networkSettings")].sort(([u],[A])=>A.length-u.length),o={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(o),n=typeof t=="string"?new wx.URL(t):t;for(let[u,A]of r)if(M4.default.isMatch(n.hostname,u))for(let p of a){let h=A.get(p);h!==null&&typeof o[p]>"u"&&(o[p]=h)}for(let u of a)typeof o[u]>"u"&&(o[u]=e.configuration.get(u));return o}async function w1(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET",wrapNetworkRequest:A}){let p={target:t,body:e,configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u},h=async()=>await Gst(t,e,p),E=typeof A<"u"?await A(h,p):h;return await(await r.reduceHook(v=>v.wrapNetworkRequest,E,p))()}async function O4(t,{configuration:e,jsonResponse:r,customErrorMessage:o,wrapNetworkRequest:a,...n}){let u=()=>Ix(w1(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:o}).then(p=>p.body),A=await(typeof a<"u"?u():ol(dle,t,()=>u().then(p=>(dle.set(t,p),p))));return r?JSON.parse(A.toString()):A}async function jst(t,e,{customErrorMessage:r,...o}){return(await Ix(w1(t,e,{...o,method:"PUT"}),{customErrorMessage:r,configuration:o.configuration})).body}async function U4(t,e,{customErrorMessage:r,...o}){return(await Ix(w1(t,e,{...o,method:"POST"}),{customErrorMessage:r,configuration:o.configuration})).body}async function qst(t,{customErrorMessage:e,...r}){return(await Ix(w1(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function Gst(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET"}){let A=typeof t=="string"?new wx.URL(t):t,p=wle(A,{configuration:r});if(p.enableNetwork===!1)throw new zt(80,`Request to '${A.href}' has been blocked because of your configuration settings`);if(A.protocol==="http:"&&!M4.default.isMatch(A.hostname,r.get("unsafeHttpWhitelist")))throw new zt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${A.hostname})`);let E={agent:{http:p.httpProxy?L4.default.httpOverHttp(yle(p.httpProxy)):Ust,https:p.httpsProxy?L4.default.httpsOverHttp(yle(p.httpsProxy)):_st},headers:o,method:u};E.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?E.body=e:E.json=e);let I=r.get("httpTimeout"),v=r.get("httpRetry"),b=r.get("enableStrictSsl"),C=p.httpsCaFilePath,T=p.httpsCertFilePath,L=p.httpsKeyFilePath,{default:U}=await Promise.resolve().then(()=>$e(gle())),J=C?await N4(C):void 0,te=T?await N4(T):void 0,le=L?await N4(L):void 0,pe=U.extend({timeout:{socket:I},retry:v,https:{rejectUnauthorized:b,certificateAuthority:J,certificate:te,key:le},...E});return r.getLimit("networkConcurrency")(()=>pe(A))}var Ele,Cle,M4,L4,wx,dle,mle,Ust,_st,Ile,Bx=Et(()=>{Pt();Ele=Be("https"),Cle=Be("http"),M4=$e(Zo()),L4=$e(Vse()),wx=Be("url");Yl();ql();jl();dle=new Map,mle=new Map,Ust=new Cle.Agent({keepAlive:!0}),_st=new Ele.Agent({keepAlive:!0});Ile=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(Ile||{})});var Ji={};Kt(Ji,{availableParallelism:()=>H4,getArchitecture:()=>I1,getArchitectureName:()=>Jst,getArchitectureSet:()=>_4,getCaller:()=>$st,major:()=>Yst,openUrl:()=>Wst});function Kst(){if(process.platform==="darwin"||process.platform==="win32")return null;let t;try{t=oe.readFileSync(Vst)}catch{}if(typeof t<"u"){if(t&&t.includes("GLIBC"))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],o=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return WI(r,a=>{let n=a.match(o);if(!n)return WI.skip;if(n[1])return"glibc";if(n[2])return"musl";throw new Error("Assertion failed: Expected the libc variant to have been detected")})??null}function I1(){return vle=vle??{os:process.platform,cpu:process.arch,libc:Kst()}}function Jst(t=I1()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function _4(){let t=I1();return Dle=Dle??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function Zst(t){let e=zst.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,o=e[2]&&e[2].indexOf("eval")===0,a=Xst.exec(e[2]);return o&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function $st(){let e=new Error().stack.split(` -`)[3];return Zst(e)}function H4(){return typeof vx.default.availableParallelism<"u"?vx.default.availableParallelism():Math.max(1,vx.default.cpus().length)}var vx,Yst,Ble,Wst,Vst,vle,Dle,zst,Xst,Dx=Et(()=>{Pt();vx=$e(Be("os"));Px();jl();Yst=Number(process.versions.node.split(".")[0]),Ble=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),Wst=typeof Ble<"u"?async t=>{try{return await j4(Ble,[t],{cwd:K.cwd()}),!0}catch{return!1}}:void 0,Vst="/usr/bin/ldd";zst=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Xst=/\((\S*)(?::(\d+))(?::(\d+))\)/});function V4(t,e,r,o,a){let n=u1(r);if(o.isArray||o.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((u,A)=>q4(t,`${e}[${A}]`,u,o,a)):String(n).split(/,/).map(u=>q4(t,e,u,o,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return q4(t,e,r,o,a)}function q4(t,e,r,o,a){let n=u1(r);switch(o.type){case"ANY":return YS(n);case"SHAPE":return not(t,e,r,o,a);case"MAP":return iot(t,e,r,o,a)}if(n===null&&!o.isNullable&&o.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(o.values?.includes(n))return n;let A=(()=>{if(o.type==="BOOLEAN"&&typeof n!="string")return VI(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=sS(n,{env:t.env});switch(o.type){case"ABSOLUTE_PATH":{let h=a,E=EO(r);return E&&E[0]!=="<"&&(h=K.dirname(E)),K.resolve(h,ue.toPortablePath(p))}case"LOCATOR_LOOSE":return xf(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return xf(p);case"BOOLEAN":return VI(p);default:return p}})();if(o.values&&!o.values.includes(A))throw new Error(`Invalid value, expected one of ${o.values.join(", ")}`);return A}function not(t,e,r,o,a){let n=u1(r);if(typeof n!="object"||Array.isArray(n))throw new it(`Object configuration settings "${e}" must be an object`);let u=K4(t,o,{ignoreArrays:!0});if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=`${e}.${A}`;if(!o.properties[A])throw new it(`Unrecognized configuration settings found: ${e}.${A} - run "yarn config -v" to see the list of settings supported in Yarn`);u.set(A,V4(t,h,p,o.properties[A],a))}return u}function iot(t,e,r,o,a){let n=u1(r),u=new Map;if(typeof n!="object"||Array.isArray(n))throw new it(`Map configuration settings "${e}" must be an object`);if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=o.normalizeKeys?o.normalizeKeys(A):A,E=`${e}['${h}']`,I=o.valueDefinition;u.set(h,V4(t,E,p,I,a))}return u}function K4(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let o=new Map;for(let[a,n]of Object.entries(e.properties))o.set(a,K4(t,n));return o}case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(o=>K.normalize(o)):K.isAbsolute(e.default)?K.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(o=>K.resolve(t.projectCwd,o)):K.resolve(t.projectCwd,e.default);default:return e.default}}function xx(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return rot;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return ue.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let o=[];for(let a of t)o.push(xx(a,e,r));return o}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=xx(n,e.valueDefinition,r);typeof u<"u"&&o.set(a,u)}return o}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=e.properties[a],A=xx(n,u,r);typeof A<"u"&&o.set(a,A)}return o}return t}function sot(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(bx)&&(e=(0,Sle.default)(e.slice(bx.length)),t[e]=r);return t}function Y4(){let t=`${bx}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return W4}async function Ple(t){try{return await oe.readFilePromise(t)}catch{return Buffer.of()}}async function oot(t,e){return Buffer.compare(...await Promise.all([Ple(t),Ple(e)]))===0}async function aot(t,e){let[r,o]=await Promise.all([oe.statPromise(t),oe.statPromise(e)]);return r.dev===o.dev&&r.ino===o.ino}async function cot({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await lot(r,e)?null:r}var Sle,Nf,xle,ble,kle,G4,eot,B1,tot,QE,bx,W4,rot,v1,Qle,kx,Sx,lot,rA,Ve,D1=Et(()=>{Pt();Nl();Sle=$e(aK()),Nf=$e(ed());qt();xle=$e(eJ()),ble=Be("module"),kle=$e(nd()),G4=Be("stream");lse();AE();AO();fO();pO();Lse();hO();Bd();Hse();VS();ql();rh();Bx();jl();Dx();kf();xo();eot=function(){if(!Nf.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=ue.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=oe.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),B1=new Set(["@yarnpkg/plugin-constraints","@yarnpkg/plugin-exec","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]),tot=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),QE=/^(?!v)[a-z0-9._-]+$/i,bx="yarn_",W4=".yarnrc.yml",rot="********",v1=(E=>(E.ANY="ANY",E.BOOLEAN="BOOLEAN",E.ABSOLUTE_PATH="ABSOLUTE_PATH",E.LOCATOR="LOCATOR",E.LOCATOR_LOOSE="LOCATOR_LOOSE",E.NUMBER="NUMBER",E.STRING="STRING",E.SECRET="SECRET",E.SHAPE="SHAPE",E.MAP="MAP",E))(v1||{}),Qle=yt,kx=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(kx||{}),Sx={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:"STRING",default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:"ABSOLUTE_PATH",default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:"BOOLEAN",default:!1},globalFolder:{description:"Folder where all system-global files are stored",type:"ABSOLUTE_PATH",default:wO()},cacheFolder:{description:"Folder where the cache files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:"NUMBER",values:["mixed",0,1,2,3,4,5,6,7,8,9],default:0},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:"ABSOLUTE_PATH",default:"./.yarn/__virtual__"},installStatePath:{description:"Path of the file where the install state will be persisted",type:"ABSOLUTE_PATH",default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:"STRING",default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:"STRING",default:Y4()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:"BOOLEAN",default:!0},cacheMigrationMode:{description:"Defines the conditions under which Yarn upgrades should cause the cache archives to be regenerated.",type:"STRING",values:["always","match-spec","required-only"],default:"always"},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:"BOOLEAN",default:lS,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:xL,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Nf.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:"BOOLEAN",default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:"BOOLEAN",default:!Nf.isCI,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:"BOOLEAN",default:!0},enableTips:{description:"If true, installs will print a helpful message every day of the week",type:"BOOLEAN",default:!Nf.isCI,defaultText:""},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:"BOOLEAN",default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:"BOOLEAN",default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:"STRING",default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:"STRING",default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:"STRING",default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:"BOOLEAN",default:!0},supportedArchitectures:{description:"Architectures that Yarn will fetch and inject into the resolver",type:"SHAPE",properties:{os:{description:"Array of supported process.platform strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},cpu:{description:"Array of supported process.arch strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},libc:{description:"Array of supported libc libraries, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]}}},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:"BOOLEAN",default:!0},enableNetwork:{description:"If false, Yarn will refuse to use the network if required to",type:"BOOLEAN",default:!0},enableOfflineMode:{description:"If true, Yarn will attempt to retrieve files and metadata from the global cache rather than the network",type:"BOOLEAN",default:!1},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:"STRING",default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:"NUMBER",default:6e4},httpRetry:{description:"Retry times on http failure",type:"NUMBER",default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:"NUMBER",default:50},taskPoolConcurrency:{description:"Maximal amount of concurrent heavy task processing",type:"NUMBER",default:H4()},taskPoolMode:{description:"Execution strategy for heavy tasks",type:"STRING",values:["async","workers"],default:"workers"},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{httpsCaFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:"BOOLEAN",default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null}}}},httpsCaFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:"BOOLEAN",default:!0},logFilters:{description:"Overrides for log levels",type:"SHAPE",isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:"STRING",default:void 0},text:{description:"Code of the texts covered by this override",type:"STRING",default:void 0},pattern:{description:"Code of the patterns covered by this override",type:"STRING",default:void 0},level:{description:"Log level override, set to null to remove override",type:"STRING",values:Object.values(uS),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:"BOOLEAN",default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:"NUMBER",default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:"STRING",default:null},enableHardenedMode:{description:"If true, automatically enable --check-resolutions --refresh-lockfile on installs",type:"BOOLEAN",default:Nf.isPR&&eot,defaultText:""},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:"BOOLEAN",default:!0},enableStrictSettings:{description:"If true, unknown settings will cause Yarn to abort",type:"BOOLEAN",default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:"BOOLEAN",default:!1},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:"STRING",default:"throw"},injectEnvironmentFiles:{description:"List of all the environment files that Yarn should inject inside the process when it starts",type:"ABSOLUTE_PATH",default:[".env.yarn?"],isArray:!0},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:"MAP",valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:"SHAPE",properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:"MAP",valueDefinition:{description:"A range",type:"STRING"}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:"MAP",valueDefinition:{description:"A semver range",type:"STRING"}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:"MAP",valueDefinition:{description:"The peerDependency meta",type:"SHAPE",properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:"BOOLEAN",default:!1}}}}}}}};lot=process.platform==="win32"?oot:aot;rA=class{constructor(e){this.isCI=Nf.isCI;this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.env={};this.limits=new Map;this.packageExtensions=null;this.startingCwd=e}static create(e,r,o){let a=new rA(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(Sx);let n=typeof o<"u"?o:r instanceof Map?r:new Map;for(let[u,A]of n)a.activatePlugin(u,A);return a}static async find(e,r,{strict:o=!0,usePathCheck:a=null,useRc:n=!0}={}){let u=sot();delete u.rcFilename;let A=new rA(e),p=await rA.findRcFiles(e),h=await rA.findFolderRcFile(yE());h&&(p.find(ye=>ye.path===h.path)||p.unshift(h));let E=_se(p.map(Ae=>[Ae.path,Ae.data])),I=Bt.dot,v=new Set(Object.keys(Sx)),b=({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae})=>({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae}),C=({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae,...we})=>{let Pe={};for(let[g,Ee]of Object.entries(we))v.has(g)&&(Pe[g]=Ee);return Pe},T=({yarnPath:Ae,ignorePath:ye,...ae})=>{let we={};for(let[Pe,g]of Object.entries(ae))v.has(Pe)||(we[Pe]=g);return we};if(A.importSettings(b(Sx)),A.useWithSource("",b(u),e,{strict:!1}),E){let[Ae,ye]=E;A.useWithSource(Ae,b(ye),I,{strict:!1})}if(a){if(await cot({configuration:A,selfPath:a})!==null)return A;A.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let L=await rA.findProjectCwd(e);A.startingCwd=e,A.projectCwd=L;let U=Object.assign(Object.create(null),process.env);A.env=U;let J=await Promise.all(A.get("injectEnvironmentFiles").map(async Ae=>{let ye=Ae.endsWith("?")?await oe.readFilePromise(Ae.slice(0,-1),"utf8").catch(()=>""):await oe.readFilePromise(Ae,"utf8");return(0,xle.parse)(ye)}));for(let Ae of J)for(let[ye,ae]of Object.entries(Ae))A.env[ye]=sS(ae,{env:U});if(A.importSettings(C(Sx)),A.useWithSource("",C(u),e,{strict:o}),E){let[Ae,ye]=E;A.useWithSource(Ae,C(ye),I,{strict:o})}let te=Ae=>"default"in Ae?Ae.default:Ae,le=new Map([["@@core",ase]]);if(r!==null)for(let Ae of r.plugins.keys())le.set(Ae,te(r.modules.get(Ae)));for(let[Ae,ye]of le)A.activatePlugin(Ae,ye);let pe=new Map([]);if(r!==null){let Ae=new Map;for(let we of ble.builtinModules)Ae.set(we,()=>vf(we));for(let[we,Pe]of r.modules)Ae.set(we,()=>Pe);let ye=new Set,ae=async(we,Pe)=>{let{factory:g,name:Ee}=vf(we);if(!g||ye.has(Ee))return;let De=new Map(Ae),ce=ee=>{if(De.has(ee))return De.get(ee)();throw new it(`This plugin cannot access the package referenced via ${ee} which is neither a builtin, nor an exposed entry`)},ne=await Wy(async()=>te(await g(ce)),ee=>`${ee} (when initializing ${Ee}, defined in ${Pe})`);Ae.set(Ee,()=>ne),ye.add(Ee),pe.set(Ee,ne)};if(u.plugins)for(let we of u.plugins.split(";")){let Pe=K.resolve(e,ue.toPortablePath(we));await ae(Pe,"")}for(let{path:we,cwd:Pe,data:g}of p)if(!!n&&!!Array.isArray(g.plugins))for(let Ee of g.plugins){let De=typeof Ee!="string"?Ee.path:Ee,ce=Ee?.spec??"",ne=Ee?.checksum??"";if(B1.has(ce))continue;let ee=K.resolve(Pe,ue.toPortablePath(De));if(!await oe.existsPromise(ee)){if(!ce){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,".gitignore",yt.NAME),lt=Ot(A,A.values.get("rcFilename"),yt.NAME),Re=Ot(A,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",yt.URL);throw new it(`Missing source for the ${ht} plugin - please try to remove the plugin from ${lt} then reinstall it manually. This error usually occurs because ${H} is incorrect, check ${Re} to make sure your plugin folder isn't gitignored.`)}if(!ce.match(/^https?:/)){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,A.values.get("rcFilename"),yt.NAME);throw new it(`Failed to recognize the source for the ${ht} plugin - please try to delete the plugin from ${H} then reinstall it manually.`)}let Ie=await O4(ce,{configuration:A}),ke=zs(Ie);if(ne&&ne!==ke){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,A.values.get("rcFilename"),yt.NAME),lt=Ot(A,`yarn plugin import ${ce}`,yt.CODE);throw new it(`Failed to fetch the ${ht} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${H} then run ${lt} to reimport it.`)}await oe.mkdirPromise(K.dirname(ee),{recursive:!0}),await oe.writeFilePromise(ee,Ie)}await ae(ee,we)}}for(let[Ae,ye]of pe)A.activatePlugin(Ae,ye);if(A.useWithSource("",T(u),e,{strict:o}),E){let[Ae,ye]=E;A.useWithSource(Ae,T(ye),I,{strict:o})}return A.get("enableGlobalCache")&&(A.values.set("cacheFolder",`${A.get("globalFolder")}/cache`),A.sources.set("cacheFolder","")),A}static async findRcFiles(e){let r=Y4(),o=[],a=e,n=null;for(;a!==n;){n=a;let u=K.join(n,r);if(oe.existsSync(u)){let A=await oe.readFilePromise(u,"utf8"),p;try{p=Vi(A)}catch{let E="";throw A.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(E=" (in particular, make sure you list the colons after each key name)"),new it(`Parse error when loading ${u}; please check it's proper Yaml${E}`)}o.unshift({path:u,cwd:n,data:p})}a=K.dirname(n)}return o}static async findFolderRcFile(e){let r=K.join(e,dr.rc),o;try{o=await oe.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=Vi(o);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,o=e,a=null;for(;o!==a;){if(a=o,oe.existsSync(K.join(a,dr.lockfile)))return a;oe.existsSync(K.join(a,dr.manifest))&&(r=a),o=K.dirname(a)}return r}static async updateConfiguration(e,r,o={}){let a=Y4(),n=K.join(e,a),u=oe.existsSync(n)?Vi(await oe.readFilePromise(n,"utf8")):{},A=!1,p;if(typeof r=="function"){try{p=r(u)}catch{p=r({})}if(p===u)return!1}else{p=u;for(let h of Object.keys(r)){let E=u[h],I=r[h],v;if(typeof I=="function")try{v=I(E)}catch{v=I(void 0)}else v=I;E!==v&&(v===rA.deleteProperty?delete p[h]:p[h]=v,A=!0)}if(!A)return!1}return await oe.changeFilePromise(n,Ba(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await rA.updateConfiguration(e,o=>{let a=o.plugins??[];if(a.length===0)return{...o,plugins:r};let n=[],u=[...r];for(let A of a){let p=typeof A!="string"?A.path:A,h=u.find(E=>E.path===p);h?(n.push(h),u=u.filter(E=>E!==h)):n.push(A)}return n.push(...u),{...o,plugins:n}})}static async updateHomeConfiguration(e){let r=yE();return await rA.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,o]of Object.entries(e))if(o!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,o),this.values.set(r,K4(this,o))}}useWithSource(e,r,o,a){try{this.use(e,r,o,a)}catch(n){throw n.message+=` (in ${Ot(this,e,yt.PATH)})`,n}}use(e,r,o,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let u of["enableStrictSettings",...Object.keys(r)]){let A=r[u],p=EO(A);if(p&&(e=p),typeof A>"u"||u==="plugins"||e===""&&tot.has(u))continue;if(u==="rcFilename")throw new it(`The rcFilename settings can only be set via ${`${bx}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(u);if(!h){let I=yE(),v=e[0]!=="<"?K.dirname(e):null;if(a&&!(v!==null?I===v:!1))throw new it(`Unrecognized or legacy configuration settings found: ${u} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(u,e);continue}if(this.sources.has(u)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=V4(this,u,A,h,o)}catch(I){throw I.message+=` in ${Ot(this,e,yt.PATH)}`,I}if(u==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let I=this.values.get(u);this.values.set(u,new Map(n?[...I,...E]:[...E,...I])),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let I=this.values.get(u);this.values.set(u,n?[...I,...E]:[...E,...I]),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else this.values.set(u,E),this.sources.set(u,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:o=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new it(`Couldn't find a configuration settings named "${e}"`);return xx(a,n,{hideSecrets:r,getNativePaths:o})}getSubprocessStreams(e,{header:r,prefix:o,report:a}){let n,u,A=oe.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${o} ${Ot(this,"STDOUT","green")}`),h=a.createStreamReporter(`${o} ${Ot(this,"STDERR","red")}`);n=new G4.PassThrough,n.pipe(p),n.pipe(A),u=new G4.PassThrough,u.pipe(h),u.pipe(A)}else n=A,u=A,typeof r<"u"&&n.write(`${r} -`);return{stdout:n,stderr:u}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let o of r.resolvers||[])e.push(new o);return new vd([new l1,new Xn,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let o of r.fetchers||[])e.push(new o);return new pE([new hE,new dE,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let o of r.linkers||[])e.push(new o);return e}getSupportedArchitectures(){let e=I1(),r=this.get("supportedArchitectures"),o=r.get("os");o!==null&&(o=o.map(u=>u==="current"?e.os:u));let a=r.get("cpu");a!==null&&(a=a.map(u=>u==="current"?e.cpu:u));let n=r.get("libc");return n!==null&&(n=sl(n,u=>u==="current"?e.libc??sl.skip:u)),{os:o,cpu:a,libc:n}}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(o,a,{userProvided:n=!1}={})=>{if(!ba(o.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let u=new Mt;u.load(a,{yamlCompatibilityMode:!0});let A=Gy(e,o.identHash),p=[];A.push([o.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:o};for(let E of u.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of u.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,I]of u.peerDependenciesMeta)for(let[v,b]of Object.entries(I))p.push({...h,type:"PeerDependencyMeta",selector:E,key:v,value:b})};await this.triggerHook(o=>o.registerPackageExtensions,this,r);for(let[o,a]of this.get("packageExtensions"))r(nh(o,!0),iS(a),{userProvided:!0});return e}normalizeLocator(e){return ba(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):QE.test(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return ba(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):QE.test(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,o])=>[r,this.normalizeDependency(o)]))}normalizePackage(e,{packageExtensions:r}){let o=$I(e),a=r.get(e.identHash);if(typeof a<"u"){let u=e.version;if(u!==null){for(let[A,p]of a)if(!!bf(u,A))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof o.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof o.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=o.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",ol(o.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:CL(h)}}}let n=u=>u.scope?`${u.scope}__${u.name}`:`${u.name}`;for(let u of o.peerDependenciesMeta.keys()){let A=Js(u);o.peerDependencies.has(A.identHash)||o.peerDependencies.set(A.identHash,In(A,"*"))}for(let u of o.peerDependencies.values()){if(u.scope==="types")continue;let A=n(u),p=eA("types",A),h=fn(p);o.peerDependencies.has(p.identHash)||o.peerDependenciesMeta.has(h)||(o.peerDependencies.set(p.identHash,In(p,"*")),o.peerDependenciesMeta.set(h,{optional:!0}))}return o.dependencies=new Map(ks(o.dependencies,([,u])=>Sa(u))),o.peerDependencies=new Map(ks(o.peerDependencies,([,u])=>Sa(u))),o}getLimit(e){return ol(this.limits,e,()=>(0,kle.default)(this.get(e)))}async triggerHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);!n||await n(...r)}}async triggerMultipleHooks(e,r){for(let o of r)await this.triggerHook(e,...o)}async reduceHook(e,r,...o){let a=r;for(let n of this.plugins.values()){let u=n.hooks;if(!u)continue;let A=e(u);!A||(a=await A(a,...o))}return a}async firstHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);if(!n)continue;let u=await n(...r);if(typeof u<"u")return u}return null}},Ve=rA;Ve.deleteProperty=Symbol(),Ve.telemetry=null});var Ur={};Kt(Ur,{EndStrategy:()=>Z4,ExecError:()=>Qx,PipeError:()=>P1,execvp:()=>j4,pipevp:()=>Gc});function Sd(t){return t!==null&&typeof t.fd=="number"}function J4(){}function z4(){for(let t of xd)t.kill()}async function Gc(t,e,{cwd:r,env:o=process.env,strict:a=!1,stdin:n=null,stdout:u,stderr:A,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":Sd(n)&&(h[0]=n),Sd(u)&&(h[1]=u),Sd(A)&&(h[2]=A);let E=(0,X4.default)(t,e,{cwd:ue.fromPortablePath(r),env:{...o,PWD:ue.fromPortablePath(r)},stdio:h});xd.add(E),xd.size===1&&(process.on("SIGINT",J4),process.on("SIGTERM",z4)),!Sd(n)&&n!==null&&n.pipe(E.stdin),Sd(u)||E.stdout.pipe(u,{end:!1}),Sd(A)||E.stderr.pipe(A,{end:!1});let I=()=>{for(let v of new Set([u,A]))Sd(v)||v.end()};return new Promise((v,b)=>{E.on("error",C=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",J4),process.off("SIGTERM",z4)),(p===2||p===1)&&I(),b(C)}),E.on("close",(C,T)=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",J4),process.off("SIGTERM",z4)),(p===2||p===1&&C!==0)&&I(),C===0||!a?v({code:$4(C,T)}):b(new P1({fileName:t,code:C,signal:T}))})})}async function j4(t,e,{cwd:r,env:o=process.env,encoding:a="utf8",strict:n=!1}){let u=["ignore","pipe","pipe"],A=[],p=[],h=ue.fromPortablePath(r);typeof o.PWD<"u"&&(o={...o,PWD:h});let E=(0,X4.default)(t,e,{cwd:h,env:o,stdio:u});return E.stdout.on("data",I=>{A.push(I)}),E.stderr.on("data",I=>{p.push(I)}),await new Promise((I,v)=>{E.on("error",b=>{let C=Ve.create(r),T=Ot(C,t,yt.PATH);v(new zt(1,`Process ${T} failed to spawn`,L=>{L.reportError(1,` ${zu(C,{label:"Thrown Error",value:_c(yt.NO_HINT,b.message)})}`)}))}),E.on("close",(b,C)=>{let T=a==="buffer"?Buffer.concat(A):Buffer.concat(A).toString(a),L=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);b===0||!n?I({code:$4(b,C),stdout:T,stderr:L}):v(new Qx({fileName:t,code:b,signal:C,stdout:T,stderr:L}))})})}function $4(t,e){let r=uot.get(e);return typeof r<"u"?128+r:t??1}function Aot(t,e,{configuration:r,report:o}){o.reportError(1,` ${zu(r,t!==null?{label:"Exit Code",value:_c(yt.NUMBER,t)}:{label:"Exit Signal",value:_c(yt.CODE,e)})}`)}var X4,Z4,P1,Qx,xd,uot,Px=Et(()=>{Pt();X4=$e(aR());D1();Yl();ql();Z4=(o=>(o[o.Never=0]="Never",o[o.ErrorCode=1]="ErrorCode",o[o.Always=2]="Always",o))(Z4||{}),P1=class extends zt{constructor({fileName:r,code:o,signal:a}){let n=Ve.create(K.cwd()),u=Ot(n,r,yt.PATH);super(1,`Child ${u} reported an error`,A=>{Aot(o,a,{configuration:n,report:A})});this.code=$4(o,a)}},Qx=class extends P1{constructor({fileName:r,code:o,signal:a,stdout:n,stderr:u}){super({fileName:r,code:o,signal:a});this.stdout=n,this.stderr=u}};xd=new Set;uot=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Tle(t){Fle=t}function S1(){return typeof eU>"u"&&(eU=Fle()),eU}var eU,Fle,tU=Et(()=>{Fle=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var Rle=_((Fx,nU)=>{var fot=Object.assign({},Be("fs")),rU=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},o,a;r.ready=new Promise(function(We,tt){o=We,a=tt});var n={},u;for(u in r)r.hasOwnProperty(u)&&(n[u]=r[u]);var A=[],p="./this.program",h=function(We,tt){throw tt},E=!1,I=!0,v="";function b(We){return r.locateFile?r.locateFile(We,v):v+We}var C,T,L,U;I&&(E?v=Be("path").dirname(v)+"/":v=__dirname+"/",C=function(tt,It){var nr=ii(tt);return nr?It?nr:nr.toString():(L||(L=fot),U||(U=Be("path")),tt=U.normalize(tt),L.readFileSync(tt,It?null:"utf8"))},T=function(tt){var It=C(tt,!0);return It.buffer||(It=new Uint8Array(It)),Ee(It.buffer),It},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),A=process.argv.slice(2),h=function(We){process.exit(We)},r.inspect=function(){return"[Emscripten Module object]"});var J=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(u in n)n.hasOwnProperty(u)&&(r[u]=n[u]);n=null,r.arguments&&(A=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var le=0,pe=function(We){le=We},Ae;r.wasmBinary&&(Ae=r.wasmBinary);var ye=r.noExitRuntime||!0;typeof WebAssembly!="object"&&Ri("no native wasm support detected");function ae(We,tt,It){switch(tt=tt||"i8",tt.charAt(tt.length-1)==="*"&&(tt="i32"),tt){case"i1":return _e[We>>0];case"i8":return _e[We>>0];case"i16":return lp((We>>1)*2);case"i32":return Ms((We>>2)*4);case"i64":return Ms((We>>2)*4);case"float":return cu((We>>2)*4);case"double":return ap((We>>3)*8);default:Ri("invalid type for getValue: "+tt)}return null}var we,Pe=!1,g;function Ee(We,tt){We||Ri("Assertion failed: "+tt)}function De(We){var tt=r["_"+We];return Ee(tt,"Cannot call unknown function "+We+", make sure it is exported"),tt}function ce(We,tt,It,nr,$){var me={string:function(es){var xi=0;if(es!=null&&es!==0){var jo=(es.length<<2)+1;xi=Un(jo),ht(es,xi,jo)}return xi},array:function(es){var xi=Un(es.length);return Re(es,xi),xi}};function Le(es){return tt==="string"?Ie(es):tt==="boolean"?Boolean(es):es}var ft=De(We),pt=[],Rt=0;if(nr)for(var er=0;er=It)&&Te[nr];)++nr;return ee.decode(Te.subarray(We,nr))}function ke(We,tt,It,nr){if(!(nr>0))return 0;for(var $=It,me=It+nr-1,Le=0;Le=55296&&ft<=57343){var pt=We.charCodeAt(++Le);ft=65536+((ft&1023)<<10)|pt&1023}if(ft<=127){if(It>=me)break;tt[It++]=ft}else if(ft<=2047){if(It+1>=me)break;tt[It++]=192|ft>>6,tt[It++]=128|ft&63}else if(ft<=65535){if(It+2>=me)break;tt[It++]=224|ft>>12,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}else{if(It+3>=me)break;tt[It++]=240|ft>>18,tt[It++]=128|ft>>12&63,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}}return tt[It]=0,It-$}function ht(We,tt,It){return ke(We,Te,tt,It)}function H(We){for(var tt=0,It=0;It=55296&&nr<=57343&&(nr=65536+((nr&1023)<<10)|We.charCodeAt(++It)&1023),nr<=127?++tt:nr<=2047?tt+=2:nr<=65535?tt+=3:tt+=4}return tt}function lt(We){var tt=H(We)+1,It=Li(tt);return It&&ke(We,_e,It,tt),It}function Re(We,tt){_e.set(We,tt)}function Qe(We,tt){return We%tt>0&&(We+=tt-We%tt),We}var be,_e,Te,Je,He,x,w,S,y,F;function z(We){be=We,r.HEAP_DATA_VIEW=F=new DataView(We),r.HEAP8=_e=new Int8Array(We),r.HEAP16=Je=new Int16Array(We),r.HEAP32=x=new Int32Array(We),r.HEAPU8=Te=new Uint8Array(We),r.HEAPU16=He=new Uint16Array(We),r.HEAPU32=w=new Uint32Array(We),r.HEAPF32=S=new Float32Array(We),r.HEAPF64=y=new Float64Array(We)}var X=r.INITIAL_MEMORY||16777216,Z,ie=[],Se=[],Ne=[],ot=!1;function dt(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)xt(r.preRun.shift());oo(ie)}function jt(){ot=!0,oo(Se)}function $t(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Qr(r.postRun.shift());oo(Ne)}function xt(We){ie.unshift(We)}function an(We){Se.unshift(We)}function Qr(We){Ne.unshift(We)}var mr=0,xr=null,Wr=null;function Vn(We){mr++,r.monitorRunDependencies&&r.monitorRunDependencies(mr)}function Ns(We){if(mr--,r.monitorRunDependencies&&r.monitorRunDependencies(mr),mr==0&&(xr!==null&&(clearInterval(xr),xr=null),Wr)){var tt=Wr;Wr=null,tt()}}r.preloadedImages={},r.preloadedAudios={};function Ri(We){r.onAbort&&r.onAbort(We),We+="",te(We),Pe=!0,g=1,We="abort("+We+"). Build with -s ASSERTIONS=1 for more info.";var tt=new WebAssembly.RuntimeError(We);throw a(tt),tt}var ps="data:application/octet-stream;base64,";function io(We){return We.startsWith(ps)}var Si="data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQIAEgACgCBGogACkDmC48AAAgACAAKQOYLkIIiDcDmC4gACgCoC5BCGsLNgKgLgsLEAAgACgCCBAGIABBADYCCAvwAQECf0F/IQECQCAALQAoDQAgACgCJEEDRgRAIABBDGoEQCAAQQA2AhAgAEEXNgIMC0F/DwsCQCAAKAIgBEAgACkDGELAAINCAFINASAAQQxqBEAgAEEANgIQIABBHTYCDAtBfw8LAkAgACgCACICRQ0AIAIQMkF/Sg0AIAAoAgAhASAAQQxqIgAEQCAAIAEoAgw2AgAgACABKAIQNgIEC0F/DwsgAEEAQgBBABAOQn9VDQAgACgCACIARQ0BIAAQGhpBfw8LQQAhASAAQQA7ATQgAEEMagRAIABCADcCDAsgACAAKAIgQQFqNgIgCyABCzsAIAAtACgEfkJ/BSAAKAIgRQRAIABBDGoiAARAIABBADYCBCAAQRI2AgALQn8PCyAAQQBCAEEHEA4LC5oIAQt/IABFBEAgARAJDwsgAUFATwRAQYSEAUEwNgIAQQAPCwJ/QRAgAUELakF4cSABQQtJGyEGIABBCGsiBSgCBCIJQXhxIQQCQCAJQQNxRQRAQQAgBkGAAkkNAhogBkEEaiAETQRAIAUhAiAEIAZrQZSIASgCAEEBdE0NAgtBAAwCCyAEIAVqIQcCQCAEIAZPBEAgBCAGayIDQRBJDQEgBSAJQQFxIAZyQQJyNgIEIAUgBmoiAiADQQNyNgIEIAcgBygCBEEBcjYCBCACIAMQOwwBCyAHQcyEASgCAEYEQEHAhAEoAgAgBGoiBCAGTQ0CIAUgCUEBcSAGckECcjYCBCAFIAZqIgMgBCAGayICQQFyNgIEQcCEASACNgIAQcyEASADNgIADAELIAdByIQBKAIARgRAQbyEASgCACAEaiIDIAZJDQICQCADIAZrIgJBEE8EQCAFIAlBAXEgBnJBAnI2AgQgBSAGaiIEIAJBAXI2AgQgAyAFaiIDIAI2AgAgAyADKAIEQX5xNgIEDAELIAUgCUEBcSADckECcjYCBCADIAVqIgIgAigCBEEBcjYCBEEAIQJBACEEC0HIhAEgBDYCAEG8hAEgAjYCAAwBCyAHKAIEIgNBAnENASADQXhxIARqIgogBkkNASAKIAZrIQwCQCADQf8BTQRAIAcoAggiBCADQQN2IgJBA3RB3IQBakYaIAQgBygCDCIDRgRAQbSEAUG0hAEoAgBBfiACd3E2AgAMAgsgBCADNgIMIAMgBDYCCAwBCyAHKAIYIQsCQCAHIAcoAgwiCEcEQCAHKAIIIgJBxIQBKAIASRogAiAINgIMIAggAjYCCAwBCwJAIAdBFGoiBCgCACICDQAgB0EQaiIEKAIAIgINAEEAIQgMAQsDQCAEIQMgAiIIQRRqIgQoAgAiAg0AIAhBEGohBCAIKAIQIgINAAsgA0EANgIACyALRQ0AAkAgByAHKAIcIgNBAnRB5IYBaiICKAIARgRAIAIgCDYCACAIDQFBuIQBQbiEASgCAEF+IAN3cTYCAAwCCyALQRBBFCALKAIQIAdGG2ogCDYCACAIRQ0BCyAIIAs2AhggBygCECICBEAgCCACNgIQIAIgCDYCGAsgBygCFCICRQ0AIAggAjYCFCACIAg2AhgLIAxBD00EQCAFIAlBAXEgCnJBAnI2AgQgBSAKaiICIAIoAgRBAXI2AgQMAQsgBSAJQQFxIAZyQQJyNgIEIAUgBmoiAyAMQQNyNgIEIAUgCmoiAiACKAIEQQFyNgIEIAMgDBA7CyAFIQILIAILIgIEQCACQQhqDwsgARAJIgVFBEBBAA8LIAUgAEF8QXggAEEEaygCACICQQNxGyACQXhxaiICIAEgASACSxsQBxogABAGIAUL6QEBA38CQCABRQ0AIAJBgDBxIgIEfwJ/IAJBgCBHBEBBAiACQYAQRg0BGiADBEAgA0EANgIEIANBEjYCAAtBAA8LQQQLIQJBAAVBAQshBkEUEAkiBEUEQCADBEAgA0EANgIEIANBDjYCAAtBAA8LIAQgAUEBahAJIgU2AgAgBUUEQCAEEAZBAA8LIAUgACABEAcgAWpBADoAACAEQQA2AhAgBEIANwMIIAQgATsBBCAGDQAgBCACECNBBUcNACAEKAIAEAYgBCgCDBAGIAQQBkEAIQQgAwRAIANBADYCBCADQRI2AgALCyAEC7UBAQJ/AkACQAJAAkACQAJAAkAgAC0ABQRAIAAtAABBAnFFDQELIAAoAjAQECAAQQA2AjAgAC0ABUUNAQsgAC0AAEEIcUUNAQsgACgCNBAcIABBADYCNCAALQAFRQ0BCyAALQAAQQRxRQ0BCyAAKAI4EBAgAEEANgI4IAAtAAVFDQELIAAtAABBgAFxRQ0BCyAAKAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASELIAMhBQsgBkIuEBciA0UEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyAFEBwMAgsgA0GjEkGoEiACQYACcSIHG0EEECwgB0UEQCADIAkEf0EtBSABLwEIC0H//wNxEA0LIAMgCQR/QS0FIAEvAQoLQf//A3EQDSADIAEvAQwQDSADIAsEf0HjAAUgASgCEAtB//8DcRANIAYgASgCFDYCPAJ/IAZBPGoQjQEiCEUEQEEAIQlBIQwBCwJ/IAgoAhQiBEHQAE4EQCAEQQl0DAELIAhB0AA2AhRBgMACCyEEIAgoAgRBBXQgCCgCCEELdGogCCgCAEEBdmohCSAIKAIMIAQgCCgCEEEFdGpqQaDAAWoLIQQgAyAJQf//A3EQDSADIARB//8DcRANIAMCfyALBEBBACABKQMoQhRUDQEaCyABKAIYCxASIAEpAyAhDCADAn8gAwJ/AkAgBwRAIAxC/v///w9YBEAgASkDKEL/////D1QNAgsgA0F/EBJBfwwDC0F/IAxC/v///w9WDQEaCyAMpwsQEiABKQMoIgxC/////w8gDEL/////D1QbpwsQEiADIAEoAjAiBAR/IAQvAQQFQQALQf//A3EQDSADIAEoAjQgAhBsIAVBgAYQbGpB//8DcRANIAdFBEAgAyABKAI4IgQEfyAELwEEBUEAC0H//wNxEA0gAyABLwE8EA0gAyABLwFAEA0gAyABKAJEEBIgAyABKQNIIgxC/////w8gDEL/////D1QbpxASCyADLQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAMQCCAFEBwMAgsgACAGIAMtAAAEfiADKQMQBUIACxAbIQQgAxAIIARBf0wNACABKAIwIgMEQCAAIAMQYUF/TA0BCyAFBEAgACAFQYAGEGtBf0wNAQsgBRAcIAEoAjQiBQRAIAAgBSACEGtBAEgNAgsgBw0CIAEoAjgiAUUNAiAAIAEQYUEATg0CDAELIAUQHAtBfyEKCyAGQUBrJAAgCgtNAQJ/IAEtAAAhAgJAIAAtAAAiA0UNACACIANHDQADQCABLQABIQIgAC0AASIDRQ0BIAFBAWohASAAQQFqIQAgAiADRg0ACwsgAyACawvcAwICfgF/IAOtIQQgACkDmC4hBQJAIAACfyAAAn4gACgCoC4iBkEDaiIDQT9NBEAgBCAGrYYgBYQMAQsgBkHAAEYEQCAAKAIEIAAoAhBqIAU3AAAgACgCEEEIagwCCyAAKAIEIAAoAhBqIAQgBq2GIAWENwAAIAAgACgCEEEIajYCECAGQT1rIQMgBEHAACAGa62ICyIENwOYLiAAIAM2AqAuIANBOU4EQCAAKAIEIAAoAhBqIAQ3AAAgACAAKAIQQQhqNgIQDAILIANBGU4EQCAAKAIEIAAoAhBqIAQ+AAAgACAAKAIQQQRqNgIQIAAgACkDmC5CIIgiBDcDmC4gACAAKAKgLkEgayIDNgKgLgsgA0EJTgR/IAAoAgQgACgCEGogBD0AACAAIAAoAhBBAmo2AhAgACkDmC5CEIghBCAAKAKgLkEQawUgAwtBAUgNASAAKAIQCyIDQQFqNgIQIAAoAgQgA2ogBDwAAAsgAEEANgKgLiAAQgA3A5guIAAoAgQgACgCEGogAjsAACAAIAAoAhBBAmoiAzYCECAAKAIEIANqIAJBf3M7AAAgACAAKAIQQQJqIgM2AhAgAgRAIAAoAgQgA2ogASACEAcaIAAgACgCECACajYCEAsLrAQCAX8BfgJAIAANACABUA0AIAMEQCADQQA2AgQgA0ESNgIAC0EADwsCQAJAIAAgASACIAMQiQEiBEUNAEEYEAkiAkUEQCADBEAgA0EANgIEIANBDjYCAAsCQCAEKAIoIgBFBEAgBCkDGCEBDAELIABBADYCKCAEKAIoQgA3AyAgBCAEKQMYIgUgBCkDICIBIAEgBVQbIgE3AxgLIAQpAwggAVYEQANAIAQoAgAgAadBBHRqKAIAEAYgAUIBfCIBIAQpAwhUDQALCyAEKAIAEAYgBCgCBBAGIAQQBgwBCyACQQA2AhQgAiAENgIQIAJBABABNgIMIAJBADYCCCACQgA3AgACf0E4EAkiAEUEQCADBEAgA0EANgIEIANBDjYCAAtBAAwBCyAAQQA2AgggAEIANwMAIABCADcDICAAQoCAgIAQNwIsIABBADoAKCAAQQA2AhQgAEIANwIMIABBADsBNCAAIAI2AgggAEEkNgIEIABCPyACQQBCAEEOQSQRDAAiASABQgBTGzcDGCAACyIADQEgAigCECIDBEACQCADKAIoIgBFBEAgAykDGCEBDAELIABBADYCKCADKAIoQgA3AyAgAyADKQMYIgUgAykDICIBIAEgBVQbIgE3AxgLIAMpAwggAVYEQANAIAMoAgAgAadBBHRqKAIAEAYgAUIBfCIBIAMpAwhUDQALCyADKAIAEAYgAygCBBAGIAMQBgsgAhAGC0EAIQALIAALiwwBBn8gACABaiEFAkACQCAAKAIEIgJBAXENACACQQNxRQ0BIAAoAgAiAiABaiEBAkAgACACayIAQciEASgCAEcEQCACQf8BTQRAIAAoAggiBCACQQN2IgJBA3RB3IQBakYaIAAoAgwiAyAERw0CQbSEAUG0hAEoAgBBfiACd3E2AgAMAwsgACgCGCEGAkAgACAAKAIMIgNHBEAgACgCCCICQcSEASgCAEkaIAIgAzYCDCADIAI2AggMAQsCQCAAQRRqIgIoAgAiBA0AIABBEGoiAigCACIEDQBBACEDDAELA0AgAiEHIAQiA0EUaiICKAIAIgQNACADQRBqIQIgAygCECIEDQALIAdBADYCAAsgBkUNAgJAIAAgACgCHCIEQQJ0QeSGAWoiAigCAEYEQCACIAM2AgAgAw0BQbiEAUG4hAEoAgBBfiAEd3E2AgAMBAsgBkEQQRQgBigCECAARhtqIAM2AgAgA0UNAwsgAyAGNgIYIAAoAhAiAgRAIAMgAjYCECACIAM2AhgLIAAoAhQiAkUNAiADIAI2AhQgAiADNgIYDAILIAUoAgQiAkEDcUEDRw0BQbyEASABNgIAIAUgAkF+cTYCBCAAIAFBAXI2AgQgBSABNgIADwsgBCADNgIMIAMgBDYCCAsCQCAFKAIEIgJBAnFFBEAgBUHMhAEoAgBGBEBBzIQBIAA2AgBBwIQBQcCEASgCACABaiIBNgIAIAAgAUEBcjYCBCAAQciEASgCAEcNA0G8hAFBADYCAEHIhAFBADYCAA8LIAVByIQBKAIARgRAQciEASAANgIAQbyEAUG8hAEoAgAgAWoiATYCACAAIAFBAXI2AgQgACABaiABNgIADwsgAkF4cSABaiEBAkAgAkH/AU0EQCAFKAIIIgQgAkEDdiICQQN0QdyEAWpGGiAEIAUoAgwiA0YEQEG0hAFBtIQBKAIAQX4gAndxNgIADAILIAQgAzYCDCADIAQ2AggMAQsgBSgCGCEGAkAgBSAFKAIMIgNHBEAgBSgCCCICQcSEASgCAEkaIAIgAzYCDCADIAI2AggMAQsCQCAFQRRqIgQoAgAiAg0AIAVBEGoiBCgCACICDQBBACEDDAELA0AgBCEHIAIiA0EUaiIEKAIAIgINACADQRBqIQQgAygCECICDQALIAdBADYCAAsgBkUNAAJAIAUgBSgCHCIEQQJ0QeSGAWoiAigCAEYEQCACIAM2AgAgAw0BQbiEAUG4hAEoAgBBfiAEd3E2AgAMAgsgBkEQQRQgBigCECAFRhtqIAM2AgAgA0UNAQsgAyAGNgIYIAUoAhAiAgRAIAMgAjYCECACIAM2AhgLIAUoAhQiAkUNACADIAI2AhQgAiADNgIYCyAAIAFBAXI2AgQgACABaiABNgIAIABByIQBKAIARw0BQbyEASABNgIADwsgBSACQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALIAFB/wFNBEAgAUEDdiICQQN0QdyEAWohAQJ/QbSEASgCACIDQQEgAnQiAnFFBEBBtIQBIAIgA3I2AgAgAQwBCyABKAIICyECIAEgADYCCCACIAA2AgwgACABNgIMIAAgAjYCCA8LQR8hAiAAQgA3AhAgAUH///8HTQRAIAFBCHYiAiACQYD+P2pBEHZBCHEiBHQiAiACQYDgH2pBEHZBBHEiA3QiAiACQYCAD2pBEHZBAnEiAnRBD3YgAyAEciACcmsiAkEBdCABIAJBFWp2QQFxckEcaiECCyAAIAI2AhwgAkECdEHkhgFqIQcCQAJAQbiEASgCACIEQQEgAnQiA3FFBEBBuIQBIAMgBHI2AgAgByAANgIAIAAgBzYCGAwBCyABQQBBGSACQQF2ayACQR9GG3QhAiAHKAIAIQMDQCADIgQoAgRBeHEgAUYNAiACQR12IQMgAkEBdCECIAQgA0EEcWoiB0EQaigCACIDDQALIAcgADYCECAAIAQ2AhgLIAAgADYCDCAAIAA2AggPCyAEKAIIIgEgADYCDCAEIAA2AgggAEEANgIYIAAgBDYCDCAAIAE2AggLC1gCAX8BfgJAAn9BACAARQ0AGiAArUIChiICpyIBIABBBHJBgIAESQ0AGkF/IAEgAkIgiKcbCyIBEAkiAEUNACAAQQRrLQAAQQNxRQ0AIABBACABEBkLIAALQwEDfwJAIAJFDQADQCAALQAAIgQgAS0AACIFRgRAIAFBAWohASAAQQFqIQAgAkEBayICDQEMAgsLIAQgBWshAwsgAwsUACAAEEAgACgCABAgIAAoAgQQIAutBAIBfgV/IwBBEGsiBCQAIAAgAWshBgJAAkAgAUEBRgRAIAAgBi0AACACEBkMAQsgAUEJTwRAIAAgBikAADcAACAAIAJBAWtBB3FBAWoiBWohACACIAVrIgFFDQIgBSAGaiECA0AgACACKQAANwAAIAJBCGohAiAAQQhqIQAgAUEIayIBDQALDAILAkACQAJAAkAgAUEEaw4FAAICAgECCyAEIAYoAAAiATYCBCAEIAE2AgAMAgsgBCAGKQAANwMADAELQQghByAEQQhqIQgDQCAIIAYgByABIAEgB0sbIgUQByAFaiEIIAcgBWsiBw0ACyAEIAQpAwg3AwALAkAgBQ0AIAJBEEkNACAEKQMAIQMgAkEQayIGQQR2QQFqQQdxIgEEQANAIAAgAzcACCAAIAM3AAAgAkEQayECIABBEGohACABQQFrIgENAAsLIAZB8ABJDQADQCAAIAM3AHggACADNwBwIAAgAzcAaCAAIAM3AGAgACADNwBYIAAgAzcAUCAAIAM3AEggACADNwBAIAAgAzcAOCAAIAM3ADAgACADNwAoIAAgAzcAICAAIAM3ABggACADNwAQIAAgAzcACCAAIAM3AAAgAEGAAWohACACQYABayICQQ9LDQALCyACQQhPBEBBCCAFayEBA0AgACAEKQMANwAAIAAgAWohACACIAFrIgJBB0sNAAsLIAJFDQEgACAEIAIQBxoLIAAgAmohAAsgBEEQaiQAIAALXwECfyAAKAIIIgEEQCABEAsgAEEANgIICwJAIAAoAgQiAUUNACABKAIAIgJBAXFFDQAgASgCEEF+Rw0AIAEgAkF+cSICNgIAIAINACABECAgAEEANgIECyAAQQA6AAwL1wICBH8BfgJAAkAgACgCQCABp0EEdGooAgAiA0UEQCACBEAgAkEANgIEIAJBFDYCAAsMAQsgACgCACADKQNIIgdBABAUIQMgACgCACEAIANBf0wEQCACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAQtCACEBIwBBEGsiBiQAQX8hAwJAIABCGkEBEBRBf0wEQCACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAQsgAEIEIAZBCmogAhAtIgRFDQBBHiEAQQEhBQNAIAQQDCAAaiEAIAVBAkcEQCAFQQFqIQUMAQsLIAQtAAAEfyAEKQMQIAQpAwhRBUEAC0UEQCACBEAgAkEANgIEIAJBFDYCAAsgBBAIDAELIAQQCCAAIQMLIAZBEGokACADIgBBAEgNASAHIACtfCIBQn9VDQEgAgRAIAJBFjYCBCACQQQ2AgALC0IAIQELIAELYAIBfgF/AkAgAEUNACAAQQhqEF8iAEUNACABIAEoAjBBAWo2AjAgACADNgIIIAAgAjYCBCAAIAE2AgAgAEI/IAEgA0EAQgBBDiACEQoAIgQgBEIAUxs3AxggACEFCyAFCyIAIAAoAiRBAWtBAU0EQCAAQQBCAEEKEA4aIABBADYCJAsLbgACQAJAAkAgA0IQVA0AIAJFDQECfgJAAkACQCACKAIIDgMCAAEECyACKQMAIAB8DAILIAIpAwAgAXwMAQsgAikDAAsiA0IAUw0AIAEgA1oNAgsgBARAIARBADYCBCAEQRI2AgALC0J/IQMLIAMLggICAX8CfgJAQQEgAiADGwRAIAIgA2oQCSIFRQRAIAQEQCAEQQA2AgQgBEEONgIAC0EADwsgAq0hBgJAAkAgAARAIAAgBhATIgBFBEAgBARAIARBADYCBCAEQQ42AgALDAULIAUgACACEAcaIAMNAQwCCyABIAUgBhARIgdCf1cEQCAEBEAgBCABKAIMNgIAIAQgASgCEDYCBAsMBAsgBiAHVQRAIAQEQCAEQQA2AgQgBEERNgIACwwECyADRQ0BCyACIAVqIgBBADoAACACQQFIDQAgBSECA0AgAi0AAEUEQCACQSA6AAALIAJBAWoiAiAASQ0ACwsLIAUPCyAFEAZBAAuBAQEBfwJAIAAEQCADQYAGcSEFQQAhAwNAAkAgAC8BCCACRw0AIAUgACgCBHFFDQAgA0EATg0DIANBAWohAwsgACgCACIADQALCyAEBEAgBEEANgIEIARBCTYCAAtBAA8LIAEEQCABIAAvAQo7AQALIAAvAQpFBEBBwBQPCyAAKAIMC1cBAX9BEBAJIgNFBEBBAA8LIAMgATsBCiADIAA7AQggA0GABjYCBCADQQA2AgACQCABBEAgAyACIAEQYyIANgIMIAANASADEAZBAA8LIANBADYCDAsgAwvuBQIEfwV+IwBB4ABrIgQkACAEQQhqIgNCADcDICADQQA2AhggA0L/////DzcDECADQQA7AQwgA0G/hig2AgggA0EBOgAGIANBADsBBCADQQA2AgAgA0IANwNIIANBgIDYjXg2AkQgA0IANwMoIANCADcDMCADQgA3AzggA0FAa0EAOwEAIANCADcDUCABKQMIUCIDRQRAIAEoAgAoAgApA0ghBwsCfgJAIAMEQCAHIQkMAQsgByEJA0AgCqdBBHQiBSABKAIAaigCACIDKQNIIgggCSAIIAlUGyIJIAEpAyBWBEAgAgRAIAJBADYCBCACQRM2AgALQn8MAwsgAygCMCIGBH8gBi8BBAVBAAtB//8Dca0gCCADKQMgfHxCHnwiCCAHIAcgCFQbIgcgASkDIFYEQCACBEAgAkEANgIEIAJBEzYCAAtCfwwDCyAAKAIAIAEoAgAgBWooAgApA0hBABAUIQYgACgCACEDIAZBf0wEQCACBEAgAiADKAIMNgIAIAIgAygCEDYCBAtCfwwDCyAEQQhqIANBAEEBIAIQaEJ/UQRAIARBCGoQNkJ/DAMLAkACQCABKAIAIAVqKAIAIgMvAQogBC8BEkkNACADKAIQIAQoAhhHDQAgAygCFCAEKAIcRw0AIAMoAjAgBCgCOBBiRQ0AAkAgBCgCICIGIAMoAhhHBEAgBCkDKCEIDAELIAMpAyAiCyAEKQMoIghSDQAgCyEIIAMpAyggBCkDMFENAgsgBC0AFEEIcUUNACAGDQAgCEIAUg0AIAQpAzBQDQELIAIEQCACQQA2AgQgAkEVNgIACyAEQQhqEDZCfwwDCyABKAIAIAVqKAIAKAI0IAQoAjwQbyEDIAEoAgAgBWooAgAiBUEBOgAEIAUgAzYCNCAEQQA2AjwgBEEIahA2IApCAXwiCiABKQMIVA0ACwsgByAJfSIHQv///////////wAgB0L///////////8AVBsLIQcgBEHgAGokACAHC8YBAQJ/QdgAEAkiAUUEQCAABEAgAEEANgIEIABBDjYCAAtBAA8LIAECf0EYEAkiAkUEQCAABEAgAEEANgIEIABBDjYCAAtBAAwBCyACQQA2AhAgAkIANwMIIAJBADYCACACCyIANgJQIABFBEAgARAGQQAPCyABQgA3AwAgAUEANgIQIAFCADcCCCABQgA3AhQgAUEANgJUIAFCADcCHCABQgA3ACEgAUIANwMwIAFCADcDOCABQUBrQgA3AwAgAUIANwNIIAELgBMCD38CfiMAQdAAayIFJAAgBSABNgJMIAVBN2ohEyAFQThqIRBBACEBA0ACQCAOQQBIDQBB/////wcgDmsgAUgEQEGEhAFBPTYCAEF/IQ4MAQsgASAOaiEOCyAFKAJMIgchAQJAAkACQAJAAkACQAJAAkAgBQJ/AkAgBy0AACIGBEADQAJAAkAgBkH/AXEiBkUEQCABIQYMAQsgBkElRw0BIAEhBgNAIAEtAAFBJUcNASAFIAFBAmoiCDYCTCAGQQFqIQYgAS0AAiEMIAghASAMQSVGDQALCyAGIAdrIQEgAARAIAAgByABEC4LIAENDSAFKAJMIQEgBSgCTCwAAUEwa0EKTw0DIAEtAAJBJEcNAyABLAABQTBrIQ9BASERIAFBA2oMBAsgBSABQQFqIgg2AkwgAS0AASEGIAghAQwACwALIA4hDSAADQggEUUNAkEBIQEDQCAEIAFBAnRqKAIAIgAEQCADIAFBA3RqIAAgAhB4QQEhDSABQQFqIgFBCkcNAQwKCwtBASENIAFBCk8NCANAIAQgAUECdGooAgANCCABQQFqIgFBCkcNAAsMCAtBfyEPIAFBAWoLIgE2AkxBACEIAkAgASwAACIKQSBrIgZBH0sNAEEBIAZ0IgZBidEEcUUNAANAAkAgBSABQQFqIgg2AkwgASwAASIKQSBrIgFBIE8NAEEBIAF0IgFBidEEcUUNACABIAZyIQYgCCEBDAELCyAIIQEgBiEICwJAIApBKkYEQCAFAn8CQCABLAABQTBrQQpPDQAgBSgCTCIBLQACQSRHDQAgASwAAUECdCAEakHAAWtBCjYCACABLAABQQN0IANqQYADaygCACELQQEhESABQQNqDAELIBENCEEAIRFBACELIAAEQCACIAIoAgAiAUEEajYCACABKAIAIQsLIAUoAkxBAWoLIgE2AkwgC0F/Sg0BQQAgC2shCyAIQYDAAHIhCAwBCyAFQcwAahB3IgtBAEgNBiAFKAJMIQELQX8hCQJAIAEtAABBLkcNACABLQABQSpGBEACQCABLAACQTBrQQpPDQAgBSgCTCIBLQADQSRHDQAgASwAAkECdCAEakHAAWtBCjYCACABLAACQQN0IANqQYADaygCACEJIAUgAUEEaiIBNgJMDAILIBENByAABH8gAiACKAIAIgFBBGo2AgAgASgCAAVBAAshCSAFIAUoAkxBAmoiATYCTAwBCyAFIAFBAWo2AkwgBUHMAGoQdyEJIAUoAkwhAQtBACEGA0AgBiESQX8hDSABLAAAQcEAa0E5Sw0HIAUgAUEBaiIKNgJMIAEsAAAhBiAKIQEgBiASQTpsakGf7ABqLQAAIgZBAWtBCEkNAAsgBkETRg0CIAZFDQYgD0EATgRAIAQgD0ECdGogBjYCACAFIAMgD0EDdGopAwA3A0AMBAsgAA0BC0EAIQ0MBQsgBUFAayAGIAIQeCAFKAJMIQoMAgsgD0F/Sg0DC0EAIQEgAEUNBAsgCEH//3txIgwgCCAIQYDAAHEbIQZBACENQaQIIQ8gECEIAkACQAJAAn8CQAJAAkACQAJ/AkACQAJAAkACQAJAAkAgCkEBaywAACIBQV9xIAEgAUEPcUEDRhsgASASGyIBQdgAaw4hBBISEhISEhISDhIPBg4ODhIGEhISEgIFAxISCRIBEhIEAAsCQCABQcEAaw4HDhILEg4ODgALIAFB0wBGDQkMEQsgBSkDQCEUQaQIDAULQQAhAQJAAkACQAJAAkACQAJAIBJB/wFxDggAAQIDBBcFBhcLIAUoAkAgDjYCAAwWCyAFKAJAIA42AgAMFQsgBSgCQCAOrDcDAAwUCyAFKAJAIA47AQAMEwsgBSgCQCAOOgAADBILIAUoAkAgDjYCAAwRCyAFKAJAIA6sNwMADBALIAlBCCAJQQhLGyEJIAZBCHIhBkH4ACEBCyAQIQcgAUEgcSEMIAUpA0AiFFBFBEADQCAHQQFrIgcgFKdBD3FBsPAAai0AACAMcjoAACAUQg9WIQogFEIEiCEUIAoNAAsLIAUpA0BQDQMgBkEIcUUNAyABQQR2QaQIaiEPQQIhDQwDCyAQIQEgBSkDQCIUUEUEQANAIAFBAWsiASAUp0EHcUEwcjoAACAUQgdWIQcgFEIDiCEUIAcNAAsLIAEhByAGQQhxRQ0CIAkgECAHayIBQQFqIAEgCUgbIQkMAgsgBSkDQCIUQn9XBEAgBUIAIBR9IhQ3A0BBASENQaQIDAELIAZBgBBxBEBBASENQaUIDAELQaYIQaQIIAZBAXEiDRsLIQ8gECEBAkAgFEKAgICAEFQEQCAUIRUMAQsDQCABQQFrIgEgFCAUQgqAIhVCCn59p0EwcjoAACAUQv////+fAVYhByAVIRQgBw0ACwsgFaciBwRAA0AgAUEBayIBIAcgB0EKbiIMQQpsa0EwcjoAACAHQQlLIQogDCEHIAoNAAsLIAEhBwsgBkH//3txIAYgCUF/ShshBgJAIAUpA0AiFEIAUg0AIAkNAEEAIQkgECEHDAoLIAkgFFAgECAHa2oiASABIAlIGyEJDAkLIAUoAkAiAUGKEiABGyIHQQAgCRB6IgEgByAJaiABGyEIIAwhBiABIAdrIAkgARshCQwICyAJBEAgBSgCQAwCC0EAIQEgAEEgIAtBACAGECcMAgsgBUEANgIMIAUgBSkDQD4CCCAFIAVBCGo2AkBBfyEJIAVBCGoLIQhBACEBAkADQCAIKAIAIgdFDQECQCAFQQRqIAcQeSIHQQBIIgwNACAHIAkgAWtLDQAgCEEEaiEIIAkgASAHaiIBSw0BDAILC0F/IQ0gDA0FCyAAQSAgCyABIAYQJyABRQRAQQAhAQwBC0EAIQggBSgCQCEKA0AgCigCACIHRQ0BIAVBBGogBxB5IgcgCGoiCCABSg0BIAAgBUEEaiAHEC4gCkEEaiEKIAEgCEsNAAsLIABBICALIAEgBkGAwABzECcgCyABIAEgC0gbIQEMBQsgACAFKwNAIAsgCSAGIAFBABEdACEBDAQLIAUgBSkDQDwAN0EBIQkgEyEHIAwhBgwCC0F/IQ0LIAVB0ABqJAAgDQ8LIABBICANIAggB2siDCAJIAkgDEgbIgpqIgggCyAIIAtKGyIBIAggBhAnIAAgDyANEC4gAEEwIAEgCCAGQYCABHMQJyAAQTAgCiAMQQAQJyAAIAcgDBAuIABBICABIAggBkGAwABzECcMAAsAC54DAgR/AX4gAARAIAAoAgAiAQRAIAEQGhogACgCABALCyAAKAIcEAYgACgCIBAQIAAoAiQQECAAKAJQIgMEQCADKAIQIgIEQCADKAIAIgEEfwNAIAIgBEECdGooAgAiAgRAA0AgAigCGCEBIAIQBiABIgINAAsgAygCACEBCyABIARBAWoiBEsEQCADKAIQIQIMAQsLIAMoAhAFIAILEAYLIAMQBgsgACgCQCIBBEAgACkDMFAEfyABBSABED5CAiEFAkAgACkDMEICVA0AQQEhAgNAIAAoAkAgAkEEdGoQPiAFIAApAzBaDQEgBachAiAFQgF8IQUMAAsACyAAKAJACxAGCwJAIAAoAkRFDQBBACECQgEhBQNAIAAoAkwgAkECdGooAgAiAUEBOgAoIAFBDGoiASgCAEUEQCABBEAgAUEANgIEIAFBCDYCAAsLIAUgADUCRFoNASAFpyECIAVCAXwhBQwACwALIAAoAkwQBiAAKAJUIgIEQCACKAIIIgEEQCACKAIMIAERAwALIAIQBgsgAEEIahAxIAAQBgsL6gMCAX4EfwJAIAAEfiABRQRAIAMEQCADQQA2AgQgA0ESNgIAC0J/DwsgAkGDIHEEQAJAIAApAzBQDQBBPEE9IAJBAXEbIQcgAkECcUUEQANAIAAgBCACIAMQUyIFBEAgASAFIAcRAgBFDQYLIARCAXwiBCAAKQMwVA0ADAILAAsDQCAAIAQgAiADEFMiBQRAIAECfyAFECJBAWohBgNAQQAgBkUNARogBSAGQQFrIgZqIggtAABBL0cNAAsgCAsiBkEBaiAFIAYbIAcRAgBFDQULIARCAXwiBCAAKQMwVA0ACwsgAwRAIANBADYCBCADQQk2AgALQn8PC0ESIQYCQAJAIAAoAlAiBUUNACABRQ0AQQkhBiAFKQMIUA0AIAUoAhAgAS0AACIHBH9CpesKIQQgASEAA0AgBCAHrUL/AYN8IQQgAC0AASIHBEAgAEEBaiEAIARC/////w+DQiF+IQQMAQsLIASnBUGFKgsgBSgCAHBBAnRqKAIAIgBFDQADQCABIAAoAgAQOEUEQCACQQhxBEAgACkDCCIEQn9RDQMMBAsgACkDECIEQn9RDQIMAwsgACgCGCIADQALCyADBEAgA0EANgIEIAMgBjYCAAtCfyEECyAEBUJ/Cw8LIAMEQCADQgA3AgALIAQL3AQCB38BfgJAAkAgAEUNACABRQ0AIAJCf1UNAQsgBARAIARBADYCBCAEQRI2AgALQQAPCwJAIAAoAgAiB0UEQEGAAiEHQYACEDwiBkUNASAAKAIQEAYgAEGAAjYCACAAIAY2AhALAkACQCAAKAIQIAEtAAAiBQR/QqXrCiEMIAEhBgNAIAwgBa1C/wGDfCEMIAYtAAEiBQRAIAZBAWohBiAMQv////8Pg0IhfiEMDAELCyAMpwVBhSoLIgYgB3BBAnRqIggoAgAiBQRAA0ACQCAFKAIcIAZHDQAgASAFKAIAEDgNAAJAIANBCHEEQCAFKQMIQn9SDQELIAUpAxBCf1ENBAsgBARAIARBADYCBCAEQQo2AgALQQAPCyAFKAIYIgUNAAsLQSAQCSIFRQ0CIAUgATYCACAFIAgoAgA2AhggCCAFNgIAIAVCfzcDCCAFIAY2AhwgACAAKQMIQgF8Igw3AwggDLogB7hEAAAAAAAA6D+iZEUNACAHQQBIDQAgByAHQQF0IghGDQAgCBA8IgpFDQECQCAMQgAgBxtQBEAgACgCECEJDAELIAAoAhAhCUEAIQQDQCAJIARBAnRqKAIAIgYEQANAIAYoAhghASAGIAogBigCHCAIcEECdGoiCygCADYCGCALIAY2AgAgASIGDQALCyAEQQFqIgQgB0cNAAsLIAkQBiAAIAg2AgAgACAKNgIQCyADQQhxBEAgBSACNwMICyAFIAI3AxBBAQ8LIAQEQCAEQQA2AgQgBEEONgIAC0EADwsgBARAIARBADYCBCAEQQ42AgALQQAL3Q8BF38jAEFAaiIHQgA3AzAgB0IANwM4IAdCADcDICAHQgA3AygCQAJAAkACQAJAIAIEQCACQQNxIQggAkEBa0EDTwRAIAJBfHEhBgNAIAdBIGogASAJQQF0IgxqLwEAQQF0aiIKIAovAQBBAWo7AQAgB0EgaiABIAxBAnJqLwEAQQF0aiIKIAovAQBBAWo7AQAgB0EgaiABIAxBBHJqLwEAQQF0aiIKIAovAQBBAWo7AQAgB0EgaiABIAxBBnJqLwEAQQF0aiIKIAovAQBBAWo7AQAgCUEEaiEJIAZBBGsiBg0ACwsgCARAA0AgB0EgaiABIAlBAXRqLwEAQQF0aiIGIAYvAQBBAWo7AQAgCUEBaiEJIAhBAWsiCA0ACwsgBCgCACEJQQ8hCyAHLwE+IhENAgwBCyAEKAIAIQkLQQ4hC0EAIREgBy8BPA0AQQ0hCyAHLwE6DQBBDCELIAcvATgNAEELIQsgBy8BNg0AQQohCyAHLwE0DQBBCSELIAcvATINAEEIIQsgBy8BMA0AQQchCyAHLwEuDQBBBiELIAcvASwNAEEFIQsgBy8BKg0AQQQhCyAHLwEoDQBBAyELIAcvASYNAEECIQsgBy8BJA0AIAcvASJFBEAgAyADKAIAIgBBBGo2AgAgAEHAAjYBACADIAMoAgAiAEEEajYCACAAQcACNgEAQQEhDQwDCyAJQQBHIRtBASELQQEhCQwBCyALIAkgCSALSxshG0EBIQ5BASEJA0AgB0EgaiAJQQF0ai8BAA0BIAlBAWoiCSALRw0ACyALIQkLQX8hCCAHLwEiIg9BAksNAUEEIAcvASQiECAPQQF0amsiBkEASA0BIAZBAXQgBy8BJiISayIGQQBIDQEgBkEBdCAHLwEoIhNrIgZBAEgNASAGQQF0IAcvASoiFGsiBkEASA0BIAZBAXQgBy8BLCIVayIGQQBIDQEgBkEBdCAHLwEuIhZrIgZBAEgNASAGQQF0IAcvATAiF2siBkEASA0BIAZBAXQgBy8BMiIZayIGQQBIDQEgBkEBdCAHLwE0IhxrIgZBAEgNASAGQQF0IAcvATYiDWsiBkEASA0BIAZBAXQgBy8BOCIYayIGQQBIDQEgBkEBdCAHLwE6IgxrIgZBAEgNASAGQQF0IAcvATwiCmsiBkEASA0BIAZBAXQgEWsiBkEASA0BIAZBACAARSAOchsNASAJIBtLIRpBACEIIAdBADsBAiAHIA87AQQgByAPIBBqIgY7AQYgByAGIBJqIgY7AQggByAGIBNqIgY7AQogByAGIBRqIgY7AQwgByAGIBVqIgY7AQ4gByAGIBZqIgY7ARAgByAGIBdqIgY7ARIgByAGIBlqIgY7ARQgByAGIBxqIgY7ARYgByAGIA1qIgY7ARggByAGIBhqIgY7ARogByAGIAxqIgY7ARwgByAGIApqOwEeAkAgAkUNACACQQFHBEAgAkF+cSEGA0AgASAIQQF0ai8BACIKBEAgByAKQQF0aiIKIAovAQAiCkEBajsBACAFIApBAXRqIAg7AQALIAEgCEEBciIMQQF0ai8BACIKBEAgByAKQQF0aiIKIAovAQAiCkEBajsBACAFIApBAXRqIAw7AQALIAhBAmohCCAGQQJrIgYNAAsLIAJBAXFFDQAgASAIQQF0ai8BACICRQ0AIAcgAkEBdGoiAiACLwEAIgJBAWo7AQAgBSACQQF0aiAIOwEACyAJIBsgGhshDUEUIRBBACEWIAUiCiEYQQAhEgJAAkACQCAADgICAAELQQEhCCANQQpLDQNBgQIhEEHw2QAhGEGw2QAhCkEBIRIMAQsgAEECRiEWQQAhEEHw2gAhGEGw2gAhCiAAQQJHBEAMAQtBASEIIA1BCUsNAgtBASANdCITQQFrIRwgAygCACEUQQAhFSANIQZBACEPQQAhDkF/IQIDQEEBIAZ0IRoCQANAIAkgD2shFwJAIAUgFUEBdGovAQAiCCAQTwRAIAogCCAQa0EBdCIAai8BACERIAAgGGotAAAhAAwBC0EAQeAAIAhBAWogEEkiBhshACAIQQAgBhshEQsgDiAPdiEMQX8gF3QhBiAaIQgDQCAUIAYgCGoiCCAMakECdGoiGSAROwECIBkgFzoAASAZIAA6AAAgCA0AC0EBIAlBAWt0IQYDQCAGIgBBAXYhBiAAIA5xDQALIAdBIGogCUEBdGoiBiAGLwEAQQFrIgY7AQAgAEEBayAOcSAAakEAIAAbIQ4gFUEBaiEVIAZB//8DcUUEQCAJIAtGDQIgASAFIBVBAXRqLwEAQQF0ai8BACEJCyAJIA1NDQAgDiAccSIAIAJGDQALQQEgCSAPIA0gDxsiD2siBnQhAiAJIAtJBEAgCyAPayEMIAkhCAJAA0AgAiAHQSBqIAhBAXRqLwEAayICQQFIDQEgAkEBdCECIAZBAWoiBiAPaiIIIAtJDQALIAwhBgtBASAGdCECC0EBIQggEiACIBNqIhNBtApLcQ0DIBYgE0HQBEtxDQMgAygCACICIABBAnRqIgggDToAASAIIAY6AAAgCCAUIBpBAnRqIhQgAmtBAnY7AQIgACECDAELCyAOBEAgFCAOQQJ0aiIAQQA7AQIgACAXOgABIABBwAA6AAALIAMgAygCACATQQJ0ajYCAAsgBCANNgIAQQAhCAsgCAusAQICfgF/IAFBAmqtIQIgACkDmC4hAwJAIAAoAqAuIgFBA2oiBEE/TQRAIAIgAa2GIAOEIQIMAQsgAUHAAEYEQCAAKAIEIAAoAhBqIAM3AAAgACAAKAIQQQhqNgIQQQMhBAwBCyAAKAIEIAAoAhBqIAIgAa2GIAOENwAAIAAgACgCEEEIajYCECABQT1rIQQgAkHAACABa62IIQILIAAgAjcDmC4gACAENgKgLguXAwICfgN/QYDJADMBACECIAApA5guIQMCQCAAKAKgLiIFQYLJAC8BACIGaiIEQT9NBEAgAiAFrYYgA4QhAgwBCyAFQcAARgRAIAAoAgQgACgCEGogAzcAACAAIAAoAhBBCGo2AhAgBiEEDAELIAAoAgQgACgCEGogAiAFrYYgA4Q3AAAgACAAKAIQQQhqNgIQIARBQGohBCACQcAAIAVrrYghAgsgACACNwOYLiAAIAQ2AqAuIAEEQAJAIARBOU4EQCAAKAIEIAAoAhBqIAI3AAAgACAAKAIQQQhqNgIQDAELIARBGU4EQCAAKAIEIAAoAhBqIAI+AAAgACAAKAIQQQRqNgIQIAAgACkDmC5CIIgiAjcDmC4gACAAKAKgLkEgayIENgKgLgsgBEEJTgR/IAAoAgQgACgCEGogAj0AACAAIAAoAhBBAmo2AhAgACkDmC5CEIghAiAAKAKgLkEQawUgBAtBAUgNACAAIAAoAhAiAUEBajYCECABIAAoAgRqIAI8AAALIABBADYCoC4gAEIANwOYLgsL8hQBEn8gASgCCCICKAIAIQUgAigCDCEHIAEoAgAhCCAAQoCAgIDQxwA3A6ApQQAhAgJAAkAgB0EASgRAQX8hDANAAkAgCCACQQJ0aiIDLwEABEAgACAAKAKgKUEBaiIDNgKgKSAAIANBAnRqQawXaiACNgIAIAAgAmpBqClqQQA6AAAgAiEMDAELIANBADsBAgsgAkEBaiICIAdHDQALIABB/C1qIQ8gAEH4LWohESAAKAKgKSIEQQFKDQIMAQsgAEH8LWohDyAAQfgtaiERQX8hDAsDQCAAIARBAWoiAjYCoCkgACACQQJ0akGsF2ogDEEBaiIDQQAgDEECSCIGGyICNgIAIAggAkECdCIEakEBOwEAIAAgAmpBqClqQQA6AAAgACAAKAL4LUEBazYC+C0gBQRAIA8gDygCACAEIAVqLwECazYCAAsgAyAMIAYbIQwgACgCoCkiBEECSA0ACwsgASAMNgIEIARBAXYhBgNAIAAgBkECdGpBrBdqKAIAIQkCQCAGIgJBAXQiAyAESg0AIAggCUECdGohCiAAIAlqQagpaiENIAYhBQNAAkAgAyAETgRAIAMhAgwBCyAIIABBrBdqIgIgA0EBciIEQQJ0aigCACILQQJ0ai8BACIOIAggAiADQQJ0aigCACIQQQJ0ai8BACICTwRAIAIgDkcEQCADIQIMAgsgAyECIABBqClqIgMgC2otAAAgAyAQai0AAEsNAQsgBCECCyAKLwEAIgQgCCAAIAJBAnRqQawXaigCACIDQQJ0ai8BACILSQRAIAUhAgwCCwJAIAQgC0cNACANLQAAIAAgA2pBqClqLQAASw0AIAUhAgwCCyAAIAVBAnRqQawXaiADNgIAIAIhBSACQQF0IgMgACgCoCkiBEwNAAsLIAAgAkECdGpBrBdqIAk2AgAgBkECTgRAIAZBAWshBiAAKAKgKSEEDAELCyAAKAKgKSEDA0AgByEGIAAgA0EBayIENgKgKSAAKAKwFyEKIAAgACADQQJ0akGsF2ooAgAiCTYCsBdBASECAkAgA0EDSA0AIAggCUECdGohDSAAIAlqQagpaiELQQIhA0EBIQUDQAJAIAMgBE4EQCADIQIMAQsgCCAAQawXaiICIANBAXIiB0ECdGooAgAiBEECdGovAQAiDiAIIAIgA0ECdGooAgAiEEECdGovAQAiAk8EQCACIA5HBEAgAyECDAILIAMhAiAAQagpaiIDIARqLQAAIAMgEGotAABLDQELIAchAgsgDS8BACIHIAggACACQQJ0akGsF2ooAgAiA0ECdGovAQAiBEkEQCAFIQIMAgsCQCAEIAdHDQAgCy0AACAAIANqQagpai0AAEsNACAFIQIMAgsgACAFQQJ0akGsF2ogAzYCACACIQUgAkEBdCIDIAAoAqApIgRMDQALC0ECIQMgAEGsF2oiByACQQJ0aiAJNgIAIAAgACgCpClBAWsiBTYCpCkgACgCsBchAiAHIAVBAnRqIAo2AgAgACAAKAKkKUEBayIFNgKkKSAHIAVBAnRqIAI2AgAgCCAGQQJ0aiINIAggAkECdGoiBS8BACAIIApBAnRqIgQvAQBqOwEAIABBqClqIgkgBmoiCyACIAlqLQAAIgIgCSAKai0AACIKIAIgCksbQQFqOgAAIAUgBjsBAiAEIAY7AQIgACAGNgKwF0EBIQVBASECAkAgACgCoCkiBEECSA0AA0AgDS8BACIKIAggAAJ/IAMgAyAETg0AGiAIIAcgA0EBciICQQJ0aigCACIEQQJ0ai8BACIOIAggByADQQJ0aigCACIQQQJ0ai8BACISTwRAIAMgDiASRw0BGiADIAQgCWotAAAgCSAQai0AAEsNARoLIAILIgJBAnRqQawXaigCACIDQQJ0ai8BACIESQRAIAUhAgwCCwJAIAQgCkcNACALLQAAIAAgA2pBqClqLQAASw0AIAUhAgwCCyAAIAVBAnRqQawXaiADNgIAIAIhBSACQQF0IgMgACgCoCkiBEwNAAsLIAZBAWohByAAIAJBAnRqQawXaiAGNgIAIAAoAqApIgNBAUoNAAsgACAAKAKkKUEBayICNgKkKSAAQawXaiIDIAJBAnRqIAAoArAXNgIAIAEoAgQhCSABKAIIIgIoAhAhBiACKAIIIQogAigCBCEQIAIoAgAhDSABKAIAIQcgAEGkF2pCADcBACAAQZwXakIANwEAIABBlBdqQgA3AQAgAEGMF2oiAUIANwEAQQAhBSAHIAMgACgCpClBAnRqKAIAQQJ0akEAOwECAkAgACgCpCkiAkG7BEoNACACQQFqIQIDQCAHIAAgAkECdGpBrBdqKAIAIgRBAnQiEmoiCyAHIAsvAQJBAnRqLwECIgNBAWogBiADIAZJGyIOOwECIAMgBk8hEwJAIAQgCUoNACAAIA5BAXRqQYwXaiIDIAMvAQBBAWo7AQBBACEDIAQgCk4EQCAQIAQgCmtBAnRqKAIAIQMLIBEgESgCACALLwEAIgQgAyAOamxqNgIAIA1FDQAgDyAPKAIAIAMgDSASai8BAmogBGxqNgIACyAFIBNqIQUgAkEBaiICQb0ERw0ACyAFRQ0AIAAgBkEBdGpBjBdqIQQDQCAGIQIDQCAAIAIiA0EBayICQQF0akGMF2oiDy8BACIKRQ0ACyAPIApBAWs7AQAgACADQQF0akGMF2oiAiACLwEAQQJqOwEAIAQgBC8BAEEBayIDOwEAIAVBAkohAiAFQQJrIQUgAg0ACyAGRQ0AQb0EIQIDQCADQf//A3EiBQRAA0AgACACQQFrIgJBAnRqQawXaigCACIDIAlKDQAgByADQQJ0aiIDLwECIAZHBEAgESARKAIAIAYgAy8BAGxqIgQ2AgAgESAEIAMvAQAgAy8BAmxrNgIAIAMgBjsBAgsgBUEBayIFDQALCyAGQQFrIgZFDQEgACAGQQF0akGMF2ovAQAhAwwACwALIwBBIGsiAiABIgAvAQBBAXQiATsBAiACIAEgAC8BAmpBAXQiATsBBCACIAEgAC8BBGpBAXQiATsBBiACIAEgAC8BBmpBAXQiATsBCCACIAEgAC8BCGpBAXQiATsBCiACIAEgAC8BCmpBAXQiATsBDCACIAEgAC8BDGpBAXQiATsBDiACIAEgAC8BDmpBAXQiATsBECACIAEgAC8BEGpBAXQiATsBEiACIAEgAC8BEmpBAXQiATsBFCACIAEgAC8BFGpBAXQiATsBFiACIAEgAC8BFmpBAXQiATsBGCACIAEgAC8BGGpBAXQiATsBGiACIAEgAC8BGmpBAXQiATsBHCACIAAvARwgAWpBAXQ7AR5BACEAIAxBAE4EQANAIAggAEECdGoiAy8BAiIBBEAgAiABQQF0aiIFIAUvAQAiBUEBajsBACADIAWtQoD+A4NCCIhCgpCAgQh+QpDCiKKIAYNCgYKEiBB+QiCIp0H/AXEgBUH/AXGtQoKQgIEIfkKQwoiiiAGDQoGChIgQfkIYiKdBgP4DcXJBECABa3Y7AQALIAAgDEchASAAQQFqIQAgAQ0ACwsLcgEBfyMAQRBrIgQkAAJ/QQAgAEUNABogAEEIaiEAIAFFBEAgAlBFBEAgAARAIABBADYCBCAAQRI2AgALQQAMAgtBAEIAIAMgABA6DAELIAQgAjcDCCAEIAE2AgAgBEIBIAMgABA6CyEAIARBEGokACAACyIAIAAgASACIAMQJiIARQRAQQAPCyAAKAIwQQAgAiADECULAwABC8gFAQR/IABB//8DcSEDIABBEHYhBEEBIQAgAkEBRgRAIAMgAS0AAGpB8f8DcCIAIARqQfH/A3BBEHQgAHIPCwJAIAEEfyACQRBJDQECQCACQa8rSwRAA0AgAkGwK2shAkG1BSEFIAEhAANAIAMgAC0AAGoiAyAEaiADIAAtAAFqIgNqIAMgAC0AAmoiA2ogAyAALQADaiIDaiADIAAtAARqIgNqIAMgAC0ABWoiA2ogAyAALQAGaiIDaiADIAAtAAdqIgNqIQQgBQRAIABBCGohACAFQQFrIQUMAQsLIARB8f8DcCEEIANB8f8DcCEDIAFBsCtqIQEgAkGvK0sNAAsgAkEISQ0BCwNAIAMgAS0AAGoiACAEaiAAIAEtAAFqIgBqIAAgAS0AAmoiAGogACABLQADaiIAaiAAIAEtAARqIgBqIAAgAS0ABWoiAGogACABLQAGaiIAaiAAIAEtAAdqIgNqIQQgAUEIaiEBIAJBCGsiAkEHSw0ACwsCQCACRQ0AIAJBAWshBiACQQNxIgUEQCABIQADQCACQQFrIQIgAyAALQAAaiIDIARqIQQgAEEBaiIBIQAgBUEBayIFDQALCyAGQQNJDQADQCADIAEtAABqIgAgAS0AAWoiBSABLQACaiIGIAEtAANqIgMgBiAFIAAgBGpqamohBCABQQRqIQEgAkEEayICDQALCyADQfH/A3AgBEHx/wNwQRB0cgVBAQsPCwJAIAJFDQAgAkEBayEGIAJBA3EiBQRAIAEhAANAIAJBAWshAiADIAAtAABqIgMgBGohBCAAQQFqIgEhACAFQQFrIgUNAAsLIAZBA0kNAANAIAMgAS0AAGoiACABLQABaiIFIAEtAAJqIgYgAS0AA2oiAyAGIAUgACAEampqaiEEIAFBBGohASACQQRrIgINAAsLIANB8f8DcCAEQfH/A3BBEHRyCx8AIAAgAiADQcCAASgCABEAACEAIAEgAiADEAcaIAALIwAgACAAKAJAIAIgA0HUgAEoAgARAAA2AkAgASACIAMQBxoLzSoCGH8HfiAAKAIMIgIgACgCECIDaiEQIAMgAWshASAAKAIAIgUgACgCBGohA0F/IAAoAhwiBygCpAF0IQRBfyAHKAKgAXQhCyAHKAI4IQwCf0EAIAcoAiwiEUUNABpBACACIAxJDQAaIAJBhAJqIAwgEWpNCyEWIBBBgwJrIRMgASACaiEXIANBDmshFCAEQX9zIRggC0F/cyESIAcoApwBIRUgBygCmAEhDSAHKAKIASEIIAc1AoQBIR0gBygCNCEOIAcoAjAhGSAQQQFqIQ8DQCAIQThyIQYgBSAIQQN2QQdxayELAn8gAiANIAUpAAAgCK2GIB2EIh2nIBJxQQJ0IgFqIgMtAAAiBA0AGiACIAEgDWoiAS0AAjoAACAGIAEtAAEiAWshBiACQQFqIA0gHSABrYgiHacgEnFBAnQiAWoiAy0AACIEDQAaIAIgASANaiIDLQACOgABIAYgAy0AASIDayEGIA0gHSADrYgiHacgEnFBAnRqIgMtAAAhBCACQQJqCyEBIAtBB2ohBSAGIAMtAAEiAmshCCAdIAKtiCEdAkACQAJAIARB/wFxRQ0AAkACQAJAAkACQANAIARBEHEEQCAVIB0gBK1CD4OIIhqnIBhxQQJ0aiECAn8gCCAEQQ9xIgZrIgRBG0sEQCAEIQggBQwBCyAEQThyIQggBSkAACAErYYgGoQhGiAFIARBA3ZrQQdqCyELIAMzAQIhGyAIIAItAAEiA2shCCAaIAOtiCEaIAItAAAiBEEQcQ0CA0AgBEHAAHFFBEAgCCAVIAIvAQJBAnRqIBqnQX8gBHRBf3NxQQJ0aiICLQABIgNrIQggGiADrYghGiACLQAAIgRBEHFFDQEMBAsLIAdB0f4ANgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";io(Si)||(Si=b(Si));function Ls(We){try{if(We==Si&&Ae)return new Uint8Array(Ae);var tt=ii(We);if(tt)return tt;if(T)return T(We);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(It){Ri(It)}}function so(We,tt){var It,nr,$;try{$=Ls(We),nr=new WebAssembly.Module($),It=new WebAssembly.Instance(nr,tt)}catch(Le){var me=Le.toString();throw te("failed to compile wasm module: "+me),(me.includes("imported Memory")||me.includes("memory import"))&&te("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),Le}return[It,nr]}function cc(){var We={a:Oa};function tt($,me){var Le=$.exports;r.asm=Le,we=r.asm.g,z(we.buffer),Z=r.asm.W,an(r.asm.h),Ns("wasm-instantiate")}if(Vn("wasm-instantiate"),r.instantiateWasm)try{var It=r.instantiateWasm(We,tt);return It}catch($){return te("Module.instantiateWasm callback failed with error: "+$),!1}var nr=so(Si,We);return tt(nr[0]),r.asm}function cu(We){return F.getFloat32(We,!0)}function ap(We){return F.getFloat64(We,!0)}function lp(We){return F.getInt16(We,!0)}function Ms(We){return F.getInt32(We,!0)}function Dn(We,tt){F.setInt32(We,tt,!0)}function oo(We){for(;We.length>0;){var tt=We.shift();if(typeof tt=="function"){tt(r);continue}var It=tt.func;typeof It=="number"?tt.arg===void 0?Z.get(It)():Z.get(It)(tt.arg):It(tt.arg===void 0?null:tt.arg)}}function Os(We,tt){var It=new Date(Ms((We>>2)*4)*1e3);Dn((tt>>2)*4,It.getUTCSeconds()),Dn((tt+4>>2)*4,It.getUTCMinutes()),Dn((tt+8>>2)*4,It.getUTCHours()),Dn((tt+12>>2)*4,It.getUTCDate()),Dn((tt+16>>2)*4,It.getUTCMonth()),Dn((tt+20>>2)*4,It.getUTCFullYear()-1900),Dn((tt+24>>2)*4,It.getUTCDay()),Dn((tt+36>>2)*4,0),Dn((tt+32>>2)*4,0);var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((tt+28>>2)*4,$),Os.GMTString||(Os.GMTString=lt("GMT")),Dn((tt+40>>2)*4,Os.GMTString),tt}function ml(We,tt){return Os(We,tt)}function yl(We,tt,It){Te.copyWithin(We,tt,tt+It)}function ao(We){try{return we.grow(We-be.byteLength+65535>>>16),z(we.buffer),1}catch{}}function Kn(We){var tt=Te.length;We=We>>>0;var It=2147483648;if(We>It)return!1;for(var nr=1;nr<=4;nr*=2){var $=tt*(1+.2/nr);$=Math.min($,We+100663296);var me=Math.min(It,Qe(Math.max(We,$),65536)),Le=ao(me);if(Le)return!0}return!1}function Mn(We){pe(We)}function Ni(We){var tt=Date.now()/1e3|0;return We&&Dn((We>>2)*4,tt),tt}function On(){if(On.called)return;On.called=!0;var We=new Date().getFullYear(),tt=new Date(We,0,1),It=new Date(We,6,1),nr=tt.getTimezoneOffset(),$=It.getTimezoneOffset(),me=Math.max(nr,$);Dn((ds()>>2)*4,me*60),Dn((gs()>>2)*4,Number(nr!=$));function Le(Zr){var qi=Zr.toTimeString().match(/\(([A-Za-z ]+)\)$/);return qi?qi[1]:"GMT"}var ft=Le(tt),pt=Le(It),Rt=lt(ft),er=lt(pt);$>2)*4,Rt),Dn((wi()+4>>2)*4,er)):(Dn((wi()>>2)*4,er),Dn((wi()+4>>2)*4,Rt))}function _i(We){On();var tt=Date.UTC(Ms((We+20>>2)*4)+1900,Ms((We+16>>2)*4),Ms((We+12>>2)*4),Ms((We+8>>2)*4),Ms((We+4>>2)*4),Ms((We>>2)*4),0),It=new Date(tt);Dn((We+24>>2)*4,It.getUTCDay());var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((We+28>>2)*4,$),It.getTime()/1e3|0}var tr=typeof atob=="function"?atob:function(We){var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",It="",nr,$,me,Le,ft,pt,Rt,er=0;We=We.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Le=tt.indexOf(We.charAt(er++)),ft=tt.indexOf(We.charAt(er++)),pt=tt.indexOf(We.charAt(er++)),Rt=tt.indexOf(We.charAt(er++)),nr=Le<<2|ft>>4,$=(ft&15)<<4|pt>>2,me=(pt&3)<<6|Rt,It=It+String.fromCharCode(nr),pt!==64&&(It=It+String.fromCharCode($)),Rt!==64&&(It=It+String.fromCharCode(me));while(er0||(dt(),mr>0))return;function tt(){Pn||(Pn=!0,r.calledRun=!0,!Pe&&(jt(),o(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),$t()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),tt()},1)):tt()}if(r.run=ys,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return ys(),e}}();typeof Fx=="object"&&typeof nU=="object"?nU.exports=rU:typeof define=="function"&&define.amd?define([],function(){return rU}):typeof Fx=="object"&&(Fx.createModule=rU)});var Lf,Nle,Lle,Mle=Et(()=>{Lf=["number","number"],Nle=(ee=>(ee[ee.ZIP_ER_OK=0]="ZIP_ER_OK",ee[ee.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",ee[ee.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",ee[ee.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",ee[ee.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",ee[ee.ZIP_ER_READ=5]="ZIP_ER_READ",ee[ee.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",ee[ee.ZIP_ER_CRC=7]="ZIP_ER_CRC",ee[ee.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",ee[ee.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",ee[ee.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",ee[ee.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",ee[ee.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",ee[ee.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",ee[ee.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",ee[ee.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",ee[ee.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",ee[ee.ZIP_ER_EOF=17]="ZIP_ER_EOF",ee[ee.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",ee[ee.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",ee[ee.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",ee[ee.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",ee[ee.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",ee[ee.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",ee[ee.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",ee[ee.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",ee[ee.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",ee[ee.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",ee[ee.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",ee[ee.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",ee[ee.ZIP_ER_TELL=30]="ZIP_ER_TELL",ee[ee.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",ee))(Nle||{}),Lle=t=>({get HEAPU8(){return t.HEAPU8},errors:Nle,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_EXCL:2,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:t._malloc(1),uint32S:t._malloc(4),malloc:t._malloc,free:t._free,getValue:t.getValue,openFromSource:t.cwrap("zip_open_from_source","number",["number","number","number"]),close:t.cwrap("zip_close","number",["number"]),discard:t.cwrap("zip_discard",null,["number"]),getError:t.cwrap("zip_get_error","number",["number"]),getName:t.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:t.cwrap("zip_get_num_entries","number",["number","number"]),delete:t.cwrap("zip_delete","number",["number","number"]),statIndex:t.cwrap("zip_stat_index","number",["number",...Lf,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Lf,"number"]),fread:t.cwrap("zip_fread","number",["number","number","number","number"]),fclose:t.cwrap("zip_fclose","number",["number"]),dir:{add:t.cwrap("zip_dir_add","number",["number","string"])},file:{add:t.cwrap("zip_file_add","number",["number","string","number","number"]),getError:t.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:t.cwrap("zip_file_get_external_attributes","number",["number",...Lf,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Lf,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Lf,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Lf,"number","number"])},ext:{countSymlinks:t.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:t.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:t.cwrap("zip_error_strerror","string",["number"])},name:{locate:t.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:t.cwrap("zip_source_buffer_create","number",["number",...Lf,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Lf,"number"]),free:t.cwrap("zip_source_free",null,["number"]),keep:t.cwrap("zip_source_keep",null,["number"]),open:t.cwrap("zip_source_open","number",["number"]),close:t.cwrap("zip_source_close","number",["number"]),seek:t.cwrap("zip_source_seek","number",["number",...Lf,"number"]),tell:t.cwrap("zip_source_tell","number",["number"]),read:t.cwrap("zip_source_read","number",["number","number","number"]),error:t.cwrap("zip_source_error","number",["number"])},struct:{statS:t.cwrap("zipstruct_statS","number",[]),statSize:t.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:t.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:t.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:t.cwrap("zipstruct_stat_mtime","number",["number"]),statCrc:t.cwrap("zipstruct_stat_crc","number",["number"]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}})});function iU(t,e){let r=t.indexOf(e);if(r<=0)return null;let o=r;for(;r>=0&&(o=r+e.length,t[o]!==K.sep);){if(t[r-1]===K.sep)return null;r=t.indexOf(e,o)}return t.length>o&&t[o]!==K.sep?null:t.slice(0,o)}var Jl,Ole=Et(()=>{Pt();Pt();nA();Jl=class extends _p{static async openPromise(e,r){let o=new Jl(r);try{return await e(o)}finally{o.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,o=e.readOnlyArchives,a=typeof r>"u"?A=>iU(A,".zip"):A=>{for(let p of r){let h=iU(A,p);if(h)return h}return null},n=(A,p)=>new zi(p,{baseFs:A,readOnly:o,stats:A.statSync(p)}),u=async(A,p)=>{let h={baseFs:A,readOnly:o,stats:await A.statPromise(p)};return()=>new zi(p,h)};super({...e,factorySync:n,factoryPromise:u,getMountPoint:a})}}});function pot(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof t=="number"&&Number.isFinite(t))return t<0?Date.now()/1e3:t;if(Ule.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function Tx(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var ta,sU,Ule,oU,_le,Rx,zi,aU=Et(()=>{Pt();Pt();Pt();Pt();Pt();Pt();ta=Be("fs"),sU=Be("stream"),Ule=Be("util"),oU=$e(Be("zlib"));tU();_le="mixed";Rx=class extends Error{constructor(r,o){super(r);this.name="Libzip Error",this.code=o}},zi=class extends Ou{constructor(r,o={}){super();this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;let a=o;if(this.level=typeof a.level<"u"?a.level:_le,r??=Tx(),typeof r=="string"){let{baseFs:A=new Rn}=a;this.baseFs=A,this.path=r}else this.path=null,this.baseFs=null;if(o.stats)this.stats=o.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(A){if(A.code==="ENOENT"&&a.create)this.stats=Ea.makeDefaultStats();else throw A}else this.stats=Ea.makeDefaultStats();this.libzip=S1();let n=this.libzip.malloc(4);try{let A=0;o.readOnly&&(A|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof r=="string"&&(r=a.create?Tx():this.baseFs.readFileSync(r));let p=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(p,A,n),this.lzSource=p}catch(h){throw this.libzip.source.free(p),h}if(this.zip===0){let h=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(h,this.libzip.getValue(n,"i32")),this.makeLibzipError(h)}}finally{this.libzip.free(n)}this.listings.set(Bt.root,new Set);let u=this.libzip.getNumEntries(this.zip,0);for(let A=0;Ar)throw new Error("Overread");let n=this.libzip.HEAPU8.subarray(o,o+r);return Buffer.from(n)}finally{this.libzip.free(o)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.readOnly){this.discardAndClose();return}let r=this.baseFs.existsSync(this.path)||this.stats.mode===Ea.DEFAULT_MODE?void 0:this.stats.mode;this.baseFs.writeFileSync(this.path,this.getBufferAndClose(),{mode:r}),this.ready=!1}resolve(r){return K.resolve(Bt.root,r)}async openPromise(r,o,a){return this.openSync(r,o,a)}openSync(r,o,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(r,o){return this.opendirSync(r,o)}opendirSync(r,o={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`opendir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`opendir '${r}'`);let u=[...n],A=this.openSync(a,"r");return SD(this,a,u,{onClose:()=>{this.closeSync(A)}})}async readPromise(r,o,a,n,u){return this.readSync(r,o,a,n,u)}readSync(r,o,a=0,n=o.byteLength,u=-1){let A=this.fds.get(r);if(typeof A>"u")throw ar.EBADF("read");let p=u===-1||u===null?A.cursor:u,h=this.readFileSync(A.p);h.copy(o,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(u===-1||u===null)&&(A.cursor+=E),E}async writePromise(r,o,a,n,u){return typeof o=="string"?this.writeSync(r,o,u):this.writeSync(r,o,a,n,u)}writeSync(r,o,a,n,u){throw typeof this.fds.get(r)>"u"?ar.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw ar.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:o}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new sU.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(A,p)=>{clearImmediate(u),this.closeSync(a),p(A)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),u=setImmediate(async()=>{try{let A=await this.readFilePromise(r,o);n.bytesRead=A.length,n.end(A)}catch(A){n.destroy(A)}});return n}createWriteStream(r,{encoding:o}={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),u=Object.assign(new sU.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(A,p)=>{try{A?p(A):(this.writeFileSync(r,Buffer.concat(a),o),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){u.destroy()},bytesWritten:0,path:r,pending:!1});return u.on("data",A=>{let p=Buffer.from(A);u.bytesWritten+=p.length,a.push(p)}),u}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let o=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`lstat '${r}'`);return o}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw ar.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=K.resolve(Bt.root,r);return this.entries.has(a)||this.listings.has(a)}let o;try{o=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return o===void 0?!1:this.entries.has(o)||this.listings.has(o)}async accessPromise(r,o){return this.accessSync(r,o)}accessSync(r,o=ta.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`access '${r}'`);if(this.readOnly&&o&ta.constants.W_OK)throw ar.EROFS(`access '${r}'`)}async statPromise(r,o={bigint:!1}){return o.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,o)}}async fstatPromise(r,o){return this.fstatSync(r,o)}fstatSync(r,o){let a=this.fds.get(r);if(typeof a>"u")throw ar.EBADF("fstatSync");let{p:n}=a,u=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(u)&&!this.listings.has(u))throw ar.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(u))throw ar.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,u,o)}async lstatPromise(r,o={bigint:!1}){return o.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,o)}}statImpl(r,o,a={}){let n=this.entries.get(o);if(typeof n<"u"){let u=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,u)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let p=this.stats.uid,h=this.stats.gid,E=this.libzip.struct.statSize(u)>>>0,I=512,v=Math.ceil(E/I),b=(this.libzip.struct.statMtime(u)>>>0)*1e3,C=b,T=b,L=b,U=new Date(C),J=new Date(T),te=new Date(L),le=new Date(b),pe=this.listings.has(o)?ta.constants.S_IFDIR:this.isSymbolicLink(n)?ta.constants.S_IFLNK:ta.constants.S_IFREG,Ae=pe===ta.constants.S_IFDIR?493:420,ye=pe|this.getUnixMode(n,Ae)&511,ae=this.libzip.struct.statCrc(u),we=Object.assign(new Ea.StatEntry,{uid:p,gid:h,size:E,blksize:I,blocks:v,atime:U,birthtime:J,ctime:te,mtime:le,atimeMs:C,birthtimeMs:T,ctimeMs:L,mtimeMs:b,mode:ye,crc:ae});return a.bigint===!0?Ea.convertToBigIntStats(we):we}if(this.listings.has(o)){let u=this.stats.uid,A=this.stats.gid,p=0,h=512,E=0,I=this.stats.mtimeMs,v=this.stats.mtimeMs,b=this.stats.mtimeMs,C=this.stats.mtimeMs,T=new Date(I),L=new Date(v),U=new Date(b),J=new Date(C),te=ta.constants.S_IFDIR|493,le=0,pe=Object.assign(new Ea.StatEntry,{uid:u,gid:A,size:p,blksize:h,blocks:E,atime:T,birthtime:L,ctime:U,mtime:J,atimeMs:I,birthtimeMs:v,ctimeMs:b,mtimeMs:C,mode:te,crc:le});return a.bigint===!0?Ea.convertToBigIntStats(pe):pe}throw new Error("Unreachable")}getUnixMode(r,o){if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?o:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(r){let o=this.listings.get(r);if(o)return o;this.registerListing(K.dirname(r)).add(K.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,o){this.registerListing(K.dirname(r)).add(K.basename(r)),this.entries.set(r,o)}unregisterListing(r){this.listings.delete(r),this.listings.get(K.dirname(r))?.delete(K.basename(r))}unregisterEntry(r){this.unregisterListing(r);let o=this.entries.get(r);this.entries.delete(r),!(typeof o>"u")&&(this.fileSources.delete(o),this.isSymbolicLink(o)&&this.symlinkCount--)}deleteEntry(r,o){if(this.unregisterEntry(r),this.libzip.delete(this.zip,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(r,o,a=!0,n=!0){if(!this.ready)throw ar.EBUSY(`archive closed, ${r}`);let u=K.resolve(Bt.root,o);if(u==="/")return Bt.root;let A=this.entries.get(u);if(a&&A!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(A)){let p=this.getFileSource(A).toString();return this.resolveFilename(r,K.resolve(K.dirname(u),p),!0,n)}else return u;for(;;){let p=this.resolveFilename(r,K.dirname(u),!0,n);if(p===void 0)return p;let h=this.listings.has(p),E=this.entries.has(p);if(!h&&!E){if(n===!1)return;throw ar.ENOENT(r)}if(!h)throw ar.ENOTDIR(r);if(u=K.resolve(p,K.basename(u)),!a||this.symlinkCount===0)break;let I=this.libzip.name.locate(this.zip,u.slice(1),0);if(I===-1)break;if(this.isSymbolicLink(I)){let v=this.getFileSource(I).toString();u=K.resolve(K.dirname(u),v)}else break}return u}allocateBuffer(r){Buffer.isBuffer(r)||(r=Buffer.from(r));let o=this.libzip.malloc(r.byteLength);if(!o)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,o,r.byteLength).set(r),{buffer:o,byteLength:r.byteLength}}allocateUnattachedSource(r){let o=this.libzip.struct.errorS(),{buffer:a,byteLength:n}=this.allocateBuffer(r),u=this.libzip.source.fromUnattachedBuffer(a,n,0,1,o);if(u===0)throw this.libzip.free(o),this.makeLibzipError(o);return u}allocateSource(r){let{buffer:o,byteLength:a}=this.allocateBuffer(r),n=this.libzip.source.fromBuffer(this.zip,o,a,0,1);if(n===0)throw this.libzip.free(o),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(r,o){let a=Buffer.isBuffer(o)?o:Buffer.from(o),n=K.relative(Bt.root,r),u=this.allocateSource(o);try{let A=this.libzip.file.add(this.zip,n,u,this.libzip.ZIP_FL_OVERWRITE);if(A===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let p=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,A,0,p,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(A,a),A}catch(A){throw this.libzip.source.free(u),A}}isSymbolicLink(r){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&ta.constants.S_IFMT)===ta.constants.S_IFLNK}getFileSource(r,o={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,r,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let A=this.libzip.struct.statCompSize(n),p=this.libzip.struct.statCompMethod(n),h=this.libzip.malloc(A);try{let E=this.libzip.fopenIndex(this.zip,r,0,this.libzip.ZIP_FL_COMPRESSED);if(E===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let I=this.libzip.fread(E,h,A,0);if(I===-1)throw this.makeLibzipError(this.libzip.file.getError(E));if(IA)throw new Error("Overread");let v=this.libzip.HEAPU8.subarray(h,h+A),b=Buffer.from(v);if(p===0)return this.fileSources.set(r,b),b;if(o.asyncDecompress)return new Promise((C,T)=>{oU.default.inflateRaw(b,(L,U)=>{L?T(L):(this.fileSources.set(r,U),C(U))})});{let C=oU.default.inflateRawSync(b);return this.fileSources.set(r,C),C}}finally{this.libzip.fclose(E)}}finally{this.libzip.free(h)}}async fchmodPromise(r,o){return this.chmodPromise(this.fdToPath(r,"fchmod"),o)}fchmodSync(r,o){return this.chmodSync(this.fdToPath(r,"fchmodSync"),o)}async chmodPromise(r,o){return this.chmodSync(r,o)}chmodSync(r,o){if(this.readOnly)throw ar.EROFS(`chmod '${r}'`);o&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let A=this.getUnixMode(n,ta.constants.S_IFREG|0)&-512|o;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,A<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(r,o,a){return this.chownPromise(this.fdToPath(r,"fchown"),o,a)}fchownSync(r,o,a){return this.chownSync(this.fdToPath(r,"fchownSync"),o,a)}async chownPromise(r,o,a){return this.chownSync(r,o,a)}chownSync(r,o,a){throw new Error("Unimplemented")}async renamePromise(r,o){return this.renameSync(r,o)}renameSync(r,o){throw new Error("Unimplemented")}async copyFilePromise(r,o,a){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}copyFileSync(r,o,a=0){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=this.getFileSource(n),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}prepareCopyFile(r,o,a=0){if(this.readOnly)throw ar.EROFS(`copyfile '${r} -> '${o}'`);if((a&ta.constants.COPYFILE_FICLONE_FORCE)!==0)throw ar.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${o}'`);let n=this.resolveFilename(`copyfile '${r} -> ${o}'`,r),u=this.entries.get(n);if(typeof u>"u")throw ar.EINVAL(`copyfile '${r}' -> '${o}'`);let A=this.resolveFilename(`copyfile '${r}' -> ${o}'`,o),p=this.entries.get(A);if((a&(ta.constants.COPYFILE_EXCL|ta.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof p<"u")throw ar.EEXIST(`copyfile '${r}' -> '${o}'`);return{indexSource:u,resolvedDestP:A,indexDest:p}}async appendFilePromise(r,o,a){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,o,a)}appendFileSync(r,o,a={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,o,a)}fdToPath(r,o){let a=this.fds.get(r)?.p;if(typeof a>"u")throw ar.EBADF(o);return a}async writeFilePromise(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([await this.getFileSource(A,{asyncDecompress:!0}),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&await this.chmodPromise(p,u)}writeFileSync(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([this.getFileSource(A),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&this.chmodSync(p,u)}prepareWriteFile(r,o){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw ar.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw ar.EISDIR(`open '${r}'`);let n=null,u=null;typeof o=="string"?n=o:typeof o=="object"&&({encoding:n=null,mode:u=null}=o);let A=this.entries.get(a);return{encoding:n,mode:u,resolvedP:a,index:A}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw ar.EROFS(`unlink '${r}'`);let o=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(o))throw ar.EISDIR(`unlink '${r}'`);let a=this.entries.get(o);if(typeof a>"u")throw ar.EINVAL(`unlink '${r}'`);this.deleteEntry(o,a)}async utimesPromise(r,o,a){return this.utimesSync(r,o,a)}utimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,o,a){return this.lutimesSync(r,o,a)}lutimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,o){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,a,0,pot(o),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(r,o){return this.mkdirSync(r,o)}mkdirSync(r,{mode:o=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:o});if(this.readOnly)throw ar.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw ar.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,o)}async rmdirPromise(r,o){return this.rmdirSync(r,o)}rmdirSync(r,{recursive:o=!1}={}){if(this.readOnly)throw ar.EROFS(`rmdir '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw ar.ENOTEMPTY(`rmdir '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw ar.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,u)}hydrateDirectory(r){let o=this.libzip.dir.add(this.zip,K.relative(Bt.root,r));if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(r),this.registerEntry(r,o),o}async linkPromise(r,o){return this.linkSync(r,o)}linkSync(r,o){throw ar.EOPNOTSUPP(`link '${r}' -> '${o}'`)}async symlinkPromise(r,o){return this.symlinkSync(r,o)}symlinkSync(r,o){if(this.readOnly)throw ar.EROFS(`symlink '${r}' -> '${o}'`);let a=this.resolveFilename(`symlink '${r}' -> '${o}'`,o);if(this.listings.has(a))throw ar.EISDIR(`symlink '${r}' -> '${o}'`);if(this.entries.has(a))throw ar.EEXIST(`symlink '${r}' -> '${o}'`);let n=this.setFileSource(a,r);if(this.registerEntry(a,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(ta.constants.S_IFLNK|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return o?a.toString(o):a}readFileSync(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=this.readFileBuffer(r);return o?a.toString(o):a}readFileBuffer(r,o={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw ar.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,o)}async readdirPromise(r,o){return this.readdirSync(r,o)}readdirSync(r,o){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`scandir '${r}'`);if(o?.recursive)if(o?.withFileTypes){let u=Array.from(n,A=>Object.assign(this.statImpl("lstat",K.join(r,A)),{name:A,path:Bt.dot}));for(let A of u){if(!A.isDirectory())continue;let p=K.join(A.path,A.name),h=this.listings.get(K.join(a,p));for(let E of h)u.push(Object.assign(this.statImpl("lstat",K.join(r,p,E)),{name:E,path:p}))}return u}else{let u=[...n];for(let A of u){let p=this.listings.get(K.join(a,A));if(!(typeof p>"u"))for(let h of p)u.push(K.join(A,h))}return u}else return o?.withFileTypes?Array.from(n,u=>Object.assign(this.statImpl("lstat",K.join(r,u)),{name:u,path:void 0})):[...n]}async readlinkPromise(r){let o=this.prepareReadlink(r);return(await this.getFileSource(o,{asyncDecompress:!0})).toString()}readlinkSync(r){let o=this.prepareReadlink(r);return this.getFileSource(o).toString()}prepareReadlink(r){let o=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(o))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(o))throw ar.EINVAL(`readlink '${r}'`);let a=this.entries.get(o);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw ar.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=await this.getFileSource(n,{asyncDecompress:!0}),A=Buffer.alloc(o,0);return u.copy(A),await this.writeFilePromise(r,A)}truncateSync(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=this.getFileSource(n),A=Buffer.alloc(o,0);return u.copy(A),this.writeFileSync(r,A)}async ftruncatePromise(r,o){return this.truncatePromise(this.fdToPath(r,"ftruncate"),o)}ftruncateSync(r,o){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),o)}watch(r,o,a){let n;switch(typeof o){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=o);break}if(!n)return{on:()=>{},close:()=>{}};let u=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(u)}}}watchFile(r,o,a){let n=K.resolve(Bt.root,r);return ry(this,n,o,a)}unwatchFile(r,o){let a=K.resolve(Bt.root,r);return Mg(this,a,o)}}});function jle(t,e,r=Buffer.alloc(0),o){let a=new zi(r),n=I=>I===e||I.startsWith(`${e}/`)?I.slice(0,e.length):null,u=async(I,v)=>()=>a,A=(I,v)=>a,p={...t},h=new Rn(p),E=new _p({baseFs:h,getMountPoint:n,factoryPromise:u,factorySync:A,magicByte:21,maxAge:1/0,typeCheck:o?.typeCheck});return Ww(Hle.default,new Hp(E)),a}var Hle,qle=Et(()=>{Pt();Hle=$e(Be("fs"));aU()});var Gle=Et(()=>{Ole();aU();qle()});var x1={};Kt(x1,{DEFAULT_COMPRESSION_LEVEL:()=>_le,LibzipError:()=>Rx,ZipFS:()=>zi,ZipOpenFS:()=>Jl,getArchivePart:()=>iU,getLibzipPromise:()=>got,getLibzipSync:()=>hot,makeEmptyArchive:()=>Tx,mountMemoryDrive:()=>jle});function hot(){return S1()}async function got(){return S1()}var Yle,nA=Et(()=>{tU();Yle=$e(Rle());Mle();Gle();Tle(()=>{let t=(0,Yle.default)();return Lle(t)})});var FE,Wle=Et(()=>{Pt();qt();b1();FE=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd(),{description:"The directory to run the command in"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await TE(r,[],{cwd:ue.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}};FE.usage={description:"run a command using yarn's portable shell",details:` +`)}`}}};Bn.RequestError=Vi;var ub=class extends Vi{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Bn.MaxRedirectsError=ub;var Ab=class extends Vi{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Bn.HTTPError=Ab;var fb=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Bn.CacheError=fb;var pb=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Bn.UploadError=pb;var hb=class extends Vi{constructor(e,r,o){super(e.message,e,o),this.name="TimeoutError",this.event=e.event,this.timings=r}};Bn.TimeoutError=hb;var E1=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Bn.ReadError=E1;var gb=class extends Vi{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Bn.UnsupportedProtocolError=gb;var lst=["socket","connect","continue","information","upgrade","timeout"],db=class extends Lae.Duplex{constructor(e,r={},o){super({autoDestroy:!1,highWaterMark:0}),this[bE]=0,this[kE]=0,this.requestInitialized=!1,this[ob]=new Set,this.redirects=[],this[QE]=!1,this[ab]=!1,this[y1]=[],this.retryCount=0,this._progressCallbacks=[];let a=()=>this._unlockWrite(),n=()=>this._lockWrite();this.on("pipe",h=>{h.prependListener("data",a),h.on("data",n),h.prependListener("end",a),h.on("end",n)}),this.on("unpipe",h=>{h.off("data",a),h.off("data",n),h.off("end",a),h.off("end",n)}),this.on("pipe",h=>{h instanceof w4.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:u,body:A,form:p}=r;if((u||A||p)&&this._lockWrite(),Bn.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,o)}catch(h){st.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof Hit.ReadStream&&await sst(this.options.body);let{url:E}=this.options;if(!E)throw new TypeError("Missing `url` property");if(this.requestUrl=E.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(h=this[Zs])===null||h===void 0||h.destroy();return}for(let I of this[y1])I();this[y1].length=0,this.requestInitialized=!0}catch(E){if(E instanceof Vi){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,o){var a,n,u,A,p;let h=r;if(st.default.object(e)&&!st.default.urlInstance(e))r={...o,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...o,...r},e!==void 0&&(r.url=e),st.default.urlInstance(r.url)&&(r.url=new ah.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),st.assert.any([st.default.string,st.default.undefined],r.method),st.assert.any([st.default.object,st.default.undefined],r.headers),st.assert.any([st.default.string,st.default.urlInstance,st.default.undefined],r.prefixUrl),st.assert.any([st.default.object,st.default.undefined],r.cookieJar),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.searchParams),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.cache),st.assert.any([st.default.object,st.default.number,st.default.undefined],r.timeout),st.assert.any([st.default.object,st.default.undefined],r.context),st.assert.any([st.default.object,st.default.undefined],r.hooks),st.assert.any([st.default.boolean,st.default.undefined],r.decompress),st.assert.any([st.default.boolean,st.default.undefined],r.ignoreInvalidCookies),st.assert.any([st.default.boolean,st.default.undefined],r.followRedirect),st.assert.any([st.default.number,st.default.undefined],r.maxRedirects),st.assert.any([st.default.boolean,st.default.undefined],r.throwHttpErrors),st.assert.any([st.default.boolean,st.default.undefined],r.http2),st.assert.any([st.default.boolean,st.default.undefined],r.allowGetBody),st.assert.any([st.default.string,st.default.undefined],r.localAddress),st.assert.any([qae.isDnsLookupIpVersion,st.default.undefined],r.dnsLookupIpVersion),st.assert.any([st.default.object,st.default.undefined],r.https),st.assert.any([st.default.boolean,st.default.undefined],r.rejectUnauthorized),r.https&&(st.assert.any([st.default.boolean,st.default.undefined],r.https.rejectUnauthorized),st.assert.any([st.default.function_,st.default.undefined],r.https.checkServerIdentity),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificateAuthority),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.key),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificate),st.assert.any([st.default.string,st.default.undefined],r.https.passphrase),st.assert.any([st.default.string,st.default.buffer,st.default.array,st.default.undefined],r.https.pfx)),st.assert.any([st.default.object,st.default.undefined],r.cacheOptions),st.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===o?.headers?r.headers={...r.headers}:r.headers=Kit({...o?.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==o?.searchParams){let x;if(st.default.string(r.searchParams)||r.searchParams instanceof ah.URLSearchParams)x=new ah.URLSearchParams(r.searchParams);else{nst(r.searchParams),x=new ah.URLSearchParams;for(let C in r.searchParams){let R=r.searchParams[C];R===null?x.append(C,""):R!==void 0&&x.append(C,R)}}(a=o?.searchParams)===null||a===void 0||a.forEach((C,R)=>{x.has(R)||x.append(R,C)}),r.searchParams=x}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(u=r.password)!==null&&u!==void 0?u:"",st.default.undefined(r.prefixUrl)?r.prefixUrl=(A=o?.prefixUrl)!==null&&A!==void 0?A:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),st.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=Hae.default(r.prefixUrl+r.url,r)}else(st.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=Hae.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:x}=r;Object.defineProperty(r,"prefixUrl",{set:R=>{let L=r.url;if(!L.href.startsWith(R))throw new Error(`Cannot change \`prefixUrl\` from ${x} to ${R}: ${L.href}`);r.url=new ah.URL(R+L.href.slice(x.length)),x=R},get:()=>x});let{protocol:C}=r.url;if(C==="unix:"&&(C="http:",r.url=new ah.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),C!=="http:"&&C!=="https:")throw new gb(r);r.username===""?r.username=r.url.username:r.url.username=r.username,r.password===""?r.password=r.url.password:r.url.password=r.password}let{cookieJar:E}=r;if(E){let{setCookie:x,getCookieString:C}=E;st.assert.function_(x),st.assert.function_(C),x.length===4&&C.length===0&&(x=Nae.promisify(x.bind(r.cookieJar)),C=Nae.promisify(C.bind(r.cookieJar)),r.cookieJar={setCookie:x,getCookieString:C})}let{cache:I}=r;if(I&&(v4.has(I)||v4.set(I,new Mae((x,C)=>{let R=x[Zs](x,C);return st.default.promise(R)&&(R.once=(L,U)=>{if(L==="error")R.catch(U);else if(L==="abort")(async()=>{try{(await R).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${L}`);return R}),R},I))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)I4||(I4=new Git.default),r.dnsCache=I4;else if(!st.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${st.default(r.dnsCache)}`);st.default.number(r.timeout)?r.timeout={request:r.timeout}:o&&r.timeout!==o.timeout?r.timeout={...o.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let v=r.hooks===o?.hooks;r.hooks={...r.hooks};for(let x of Bn.knownHookEvents)if(x in r.hooks)if(st.default.array(r.hooks[x]))r.hooks[x]=[...r.hooks[x]];else throw new TypeError(`Parameter \`${x}\` must be an Array, got ${st.default(r.hooks[x])}`);else r.hooks[x]=[];if(o&&!v)for(let x of Bn.knownHookEvents)o.hooks[x].length>0&&(r.hooks[x]=[...o.hooks[x],...r.hooks[x]]);if("family"in r&&lh.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),o?.https&&(r.https={...o.https,...r.https}),"rejectUnauthorized"in r&&lh.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&lh.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&lh.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&lh.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&lh.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&lh.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&lh.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent){for(let x in r.agent)if(x!=="http"&&x!=="https"&&x!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${x}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Bn.setNonEnumerableProperties([o,h],r),est.default(r,o)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,o=!st.default.undefined(e.form),a=!st.default.undefined(e.json),n=!st.default.undefined(e.body),u=o||a||n,A=Bn.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=A,u){if(A)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,o,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Lae.Readable)&&!st.default.string(e.body)&&!st.default.buffer(e.body)&&!Uae.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(o&&!st.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!st.default.string(r["content-type"]);n?(Uae.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ch]=e.body):o?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[ch]=new ah.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[ch]=e.stringifyJson(e.json));let h=await Vit.default(this[ch],e.headers);st.default.undefined(r["content-length"])&&st.default.undefined(r["transfer-encoding"])&&!A&&!st.default.undefined(h)&&(r["content-length"]=String(h))}}else A?this._lockWrite():this._unlockWrite();this[xE]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:o}=r;this[Wae]=e,r.decompress&&(e=Yit(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Oae.STATUS_CODES[a],n.url=r.url.toString(),n.requestUrl=this.requestUrl,n.redirectUrls=this.redirects,n.request=this,n.isFromCache=e.fromCache||!1,n.ip=this.ip,n.retryCount=this.retryCount,this[Gae]=n.isFromCache,this[PE]=Number(e.headers["content-length"])||void 0,this[lb]=e,e.once("end",()=>{this[PE]=this[bE],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",A=>{e.destroy(),this._beforeError(new E1(A,this))}),e.once("aborted",()=>{this._beforeError(new E1({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let u=e.headers["set-cookie"];if(st.default.object(r.cookieJar)&&u){let A=u.map(async p=>r.cookieJar.setCookie(p,o.toString()));r.ignoreInvalidCookies&&(A=A.map(async p=>p.catch(()=>{})));try{await Promise.all(A)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&ost.has(a)){if(e.resume(),this[Zs]&&(this[B4](),delete this[Zs],this[jae]()),(a===303&&r.method!=="GET"&&r.method!=="HEAD"||!r.methodRewriting)&&(r.method="GET","body"in r&&delete r.body,"json"in r&&delete r.json,"form"in r&&delete r.form,this[ch]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new ub(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new ah.URL(p,o),E=h.toString();decodeURI(E),h.hostname!==o.hostname||h.port!==o.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(h.username=r.username,h.password=r.password),this.redirects.push(E),r.url=h;for(let I of r.hooks.beforeRedirect)await I(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!$it.isResponseOk(n)){this._beforeError(new Ab(n));return}e.on("readable",()=>{this[ab]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let A of this[ob])if(!A.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&A.setHeader(p,E)}A.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:o,url:a}=r;jit.default(e),this[B4]=_ae.default(e,o,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof _ae.TimeoutError?new hb(p,this.timings,this):new Vi(p.message,p,this),this._beforeError(p)}),this[jae]=Jit.default(e,this,lst),this[Zs]=e,this.emit("uploadProgress",this.uploadProgress);let u=this[ch],A=this.redirects.length===0?this:e;st.default.nodeStream(u)?(u.pipe(A),u.once("error",p=>{this._beforeError(new pb(p,this))})):(this._unlockWrite(),st.default.undefined(u)?(this._cannotHaveBody||this._noPipe)&&(A.end(),this._lockWrite()):(this._writeRequest(u,void 0,()=>{}),A.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((o,a)=>{Object.assign(r,zit.default(e)),delete r.url;let n,u=v4.get(r.cache)(r,async A=>{A._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",A),o(A)});r.url=e,u.once("error",a),u.once("request",async A=>{n=A,o(n)})})}async _makeRequest(){var e,r,o,a,n;let{options:u}=this,{headers:A}=u;for(let U in A)if(st.default.undefined(A[U]))delete A[U];else if(st.default.null_(A[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(u.decompress&&st.default.undefined(A["accept-encoding"])&&(A["accept-encoding"]=rst?"gzip, deflate, br":"gzip, deflate"),u.cookieJar){let U=await u.cookieJar.getCookieString(u.url.toString());st.default.nonEmptyString(U)&&(u.headers.cookie=U)}for(let U of u.hooks.beforeRequest){let J=await U(u);if(!st.default.undefined(J)){u.request=()=>J;break}}u.body&&this[ch]!==u.body&&(this[ch]=u.body);let{agent:p,request:h,timeout:E,url:I}=u;if(u.dnsCache&&!("lookup"in u)&&(u.lookup=u.dnsCache.lookup),I.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${I.pathname}${I.search}`);if(U?.groups){let{socketPath:J,path:te}=U.groups;Object.assign(u,{socketPath:J,path:te,host:""})}}let v=I.protocol==="https:",x;u.http2?x=Wit.auto:x=v?qit.request:Oae.request;let C=(e=u.request)!==null&&e!==void 0?e:x,R=u.cache?this._createCacheableRequest:C;p&&!u.http2&&(u.agent=p[v?"https":"http"]),u[Zs]=C,delete u.request,delete u.timeout;let L=u;if(L.shared=(r=u.cacheOptions)===null||r===void 0?void 0:r.shared,L.cacheHeuristic=(o=u.cacheOptions)===null||o===void 0?void 0:o.cacheHeuristic,L.immutableMinTimeToLive=(a=u.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,L.ignoreCargoCult=(n=u.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,u.dnsLookupIpVersion!==void 0)try{L.family=qae.dnsLookupIpVersionToFamily(u.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}u.https&&("rejectUnauthorized"in u.https&&(L.rejectUnauthorized=u.https.rejectUnauthorized),u.https.checkServerIdentity&&(L.checkServerIdentity=u.https.checkServerIdentity),u.https.certificateAuthority&&(L.ca=u.https.certificateAuthority),u.https.certificate&&(L.cert=u.https.certificate),u.https.key&&(L.key=u.https.key),u.https.passphrase&&(L.passphrase=u.https.passphrase),u.https.pfx&&(L.pfx=u.https.pfx));try{let U=await R(I,L);st.default.undefined(U)&&(U=x(I,L)),u.request=h,u.timeout=E,u.agent=p,u.https&&("rejectUnauthorized"in u.https&&delete L.rejectUnauthorized,u.https.checkServerIdentity&&delete L.checkServerIdentity,u.https.certificateAuthority&&delete L.ca,u.https.certificate&&delete L.cert,u.https.key&&delete L.key,u.https.passphrase&&delete L.passphrase,u.https.pfx&&delete L.pfx),ist(U)?this._onRequest(U):this.writable?(this.once("finish",()=>{this._onResponse(U)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(U)}catch(U){throw U instanceof Mae.CacheError?new fb(U,this):new Vi(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new Vi(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[QE])return;let{options:r}=this,o=this.retryCount+1;this[QE]=!0,e instanceof Vi||(e=new Vi(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await Zit.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let u;try{let A;n&&"retry-after"in n.headers&&(A=Number(n.headers["retry-after"]),Number.isNaN(A)?(A=Date.parse(n.headers["retry-after"])-Date.now(),A<=0&&(A=1)):A*=1e3),u=await r.retry.calculateDelay({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:tst.default({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:0})})}catch(A){this._error(new Vi(A.message,A,this));return}if(u){let A=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,o)}catch(p){this._error(new Vi(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",o,e))};this[Kae]=setTimeout(A,u);return}}this._error(a)})()}_read(){this[ab]=!0;let e=this[lb];if(e&&!this[QE]){e.readableLength&&(this[ab]=!1);let r;for(;(r=e.read())!==null;){this[bE]+=r.length,this[Yae]=!0;let o=this.downloadProgress;o.percent<1&&this.emit("downloadProgress",o),this.push(r)}}}_write(e,r,o){let a=()=>{this._writeRequest(e,r,o)};this.requestInitialized?a():this[y1].push(a)}_writeRequest(e,r,o){this[Zs].destroyed||(this._progressCallbacks.push(()=>{this[kE]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[Zs].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),o(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Zs in this)){e();return}if(this[Zs].destroyed){e();return}this[Zs].end(o=>{o||(this[xE]=this[kE],this.emit("uploadProgress",this.uploadProgress),this[Zs].emit("upload-complete")),e(o)})};this.requestInitialized?r():this[y1].push(r)}_destroy(e,r){var o;this[QE]=!0,clearTimeout(this[Kae]),Zs in this&&(this[B4](),!((o=this[lb])===null||o===void 0)&&o.complete||this[Zs].destroy()),e!==null&&!st.default.undefined(e)&&!(e instanceof Vi)&&(e=new Vi(e.message,e,this)),r(e)}get _isAboutToError(){return this[QE]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,o;return((r=(e=this[Zs])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((o=this[Wae])===null||o===void 0)&&o.complete)}get socket(){var e,r;return(r=(e=this[Zs])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[PE]?e=this[bE]/this[PE]:this[PE]===this[bE]?e=1:e=0,{percent:e,transferred:this[bE],total:this[PE]}}get uploadProgress(){let e;return this[xE]?e=this[kE]/this[xE]:this[xE]===this[kE]?e=1:e=0,{percent:e,transferred:this[kE],total:this[xE]}}get timings(){var e;return(e=this[Zs])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[Gae]}pipe(e,r){if(this[Yae])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof w4.ServerResponse&&this[ob].add(e),super.pipe(e,r)}unpipe(e){return e instanceof w4.ServerResponse&&this[ob].delete(e),super.unpipe(e),this}};Bn.default=db});var w1=_(jc=>{"use strict";var cst=jc&&jc.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ust=jc&&jc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&cst(e,t,r)};Object.defineProperty(jc,"__esModule",{value:!0});jc.CancelError=jc.ParseError=void 0;var Vae=C1(),D4=class extends Vae.RequestError{constructor(e,r){let{options:o}=r.request;super(`${e.message} in "${o.url.toString()}"`,e,r.request),this.name="ParseError"}};jc.ParseError=D4;var S4=class extends Vae.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};jc.CancelError=S4;ust(C1(),jc)});var zae=_(P4=>{"use strict";Object.defineProperty(P4,"__esModule",{value:!0});var Jae=w1(),Ast=(t,e,r,o)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(o);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Jae.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Jae.ParseError(n,t)}};P4.default=Ast});var b4=_(uh=>{"use strict";var fst=uh&&uh.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),pst=uh&&uh.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&fst(e,t,r)};Object.defineProperty(uh,"__esModule",{value:!0});var hst=ve("events"),gst=Tf(),dst=zse(),mb=w1(),Xae=zae(),Zae=C1(),mst=u4(),yst=m4(),$ae=y4(),Est=["request","response","redirect","uploadProgress","downloadProgress"];function ele(t){let e,r,o=new hst.EventEmitter,a=new dst((u,A,p)=>{let h=E=>{let I=new Zae.default(void 0,t);I.retryCount=E,I._noPipe=!0,p(()=>I.destroy()),p.shouldReject=!1,p(()=>A(new mb.CancelError(I))),e=I,I.once("response",async C=>{var R;if(C.retryCount=E,C.request.aborted)return;let L;try{L=await yst.default(I),C.rawBody=L}catch{return}if(I._isAboutToError)return;let U=((R=C.headers["content-encoding"])!==null&&R!==void 0?R:"").toLowerCase(),J=["gzip","deflate","br"].includes(U),{options:te}=I;if(J&&!te.decompress)C.body=L;else try{C.body=Xae.default(C,te.responseType,te.parseJson,te.encoding)}catch(ae){if(C.body=L.toString(),$ae.isResponseOk(C)){I._beforeError(ae);return}}try{for(let[ae,fe]of te.hooks.afterResponse.entries())C=await fe(C,async ce=>{let me=Zae.default.normalizeArguments(void 0,{...ce,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);me.hooks.afterResponse=me.hooks.afterResponse.slice(0,ae);for(let Be of me.hooks.beforeRetry)await Be(me);let he=ele(me);return p(()=>{he.catch(()=>{}),he.cancel()}),he})}catch(ae){I._beforeError(new mb.RequestError(ae.message,ae,I));return}if(!$ae.isResponseOk(C)){I._beforeError(new mb.HTTPError(C));return}r=C,u(I.options.resolveBodyOnly?C.body:C)});let v=C=>{if(a.isCanceled)return;let{options:R}=I;if(C instanceof mb.HTTPError&&!R.throwHttpErrors){let{response:L}=C;u(I.options.resolveBodyOnly?L.body:L);return}A(C)};I.once("error",v);let x=I.options.body;I.once("retry",(C,R)=>{var L,U;if(x===((L=R.request)===null||L===void 0?void 0:L.options.body)&&gst.default.nodeStream((U=R.request)===null||U===void 0?void 0:U.options.body)){v(R);return}h(C)}),mst.default(I,o,Est)};h(0)});a.on=(u,A)=>(o.on(u,A),a);let n=u=>{let A=(async()=>{await a;let{options:p}=r.request;return Xae.default(r,u,p.parseJson,p.encoding)})();return Object.defineProperties(A,Object.getOwnPropertyDescriptors(a)),A};return a.json=()=>{let{headers:u}=e.options;return!e.writableFinished&&u.accept===void 0&&(u.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}uh.default=ele;pst(w1(),uh)});var tle=_(x4=>{"use strict";Object.defineProperty(x4,"__esModule",{value:!0});var Cst=w1();function wst(t,...e){let r=(async()=>{if(t instanceof Cst.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),o=()=>r;return r.json=o,r.text=o,r.buffer=o,r.on=o,r}x4.default=wst});var ile=_(k4=>{"use strict";Object.defineProperty(k4,"__esModule",{value:!0});var rle=Tf();function nle(t){for(let e of Object.values(t))(rle.default.plainObject(e)||rle.default.array(e))&&nle(e);return Object.freeze(t)}k4.default=nle});var ole=_(sle=>{"use strict";Object.defineProperty(sle,"__esModule",{value:!0})});var Q4=_(Vl=>{"use strict";var Ist=Vl&&Vl.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),Bst=Vl&&Vl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Ist(e,t,r)};Object.defineProperty(Vl,"__esModule",{value:!0});Vl.defaultHandler=void 0;var ale=Tf(),Kl=b4(),vst=tle(),Eb=C1(),Dst=ile(),Sst={RequestError:Kl.RequestError,CacheError:Kl.CacheError,ReadError:Kl.ReadError,HTTPError:Kl.HTTPError,MaxRedirectsError:Kl.MaxRedirectsError,TimeoutError:Kl.TimeoutError,ParseError:Kl.ParseError,CancelError:Kl.CancelError,UnsupportedProtocolError:Kl.UnsupportedProtocolError,UploadError:Kl.UploadError},Pst=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:yb}=Eb.default,lle=(...t)=>{let e;for(let r of t)e=yb(void 0,r,e);return e},bst=t=>t.isStream?new Eb.default(void 0,t):Kl.default(t),xst=t=>"defaults"in t&&"options"in t.defaults,kst=["get","post","put","patch","head","delete"];Vl.defaultHandler=(t,e)=>e(t);var cle=(t,e)=>{if(t)for(let r of t)r(e)},ule=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(o=>(a,n)=>{let u,A=o(a,p=>(u=n(p),u));if(A!==u&&!a.isStream&&u){let p=A,{then:h,catch:E,finally:I}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(u)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(u)),p.then=h,p.catch=E,p.finally=I}return A});let e=(o,a={},n)=>{var u,A;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?bst:h);if(ale.default.plainObject(o)){let E={...o,...a};Eb.setNonEnumerableProperties([o,a],E),a=E,o=void 0}try{let E;try{cle(t.options.hooks.init,a),cle((u=a.hooks)===null||u===void 0?void 0:u.init,a)}catch(v){E=v}let I=yb(o,a,n??t.options);if(I[Eb.kIsNormalizedAlready]=!0,E)throw new Kl.RequestError(E.message,E,I);return h(I)}catch(E){if(a.isStream)throw E;return vst.default(E,t.options.hooks.beforeError,(A=a.hooks)===null||A===void 0?void 0:A.beforeError)}};e.extend=(...o)=>{let a=[t.options],n=[...t._rawHandlers],u;for(let A of o)xst(A)?(a.push(A.defaults.options),n.push(...A.defaults._rawHandlers),u=A.defaults.mutableDefaults):(a.push(A),"handlers"in A&&n.push(...A.handlers),u=A.mutableDefaults);return n=n.filter(A=>A!==Vl.defaultHandler),n.length===0&&n.push(Vl.defaultHandler),ule({options:lle(...a),handlers:n,mutableDefaults:Boolean(u)})};let r=async function*(o,a){let n=yb(o,a,t.options);n.resolveBodyOnly=!1;let u=n.pagination;if(!ale.default.object(u))throw new TypeError("`options.pagination` must be implemented");let A=[],{countLimit:p}=u,h=0;for(;h{let n=[];for await(let u of r(o,a))n.push(u);return n},e.paginate.each=r,e.stream=(o,a)=>e(o,{...a,isStream:!0});for(let o of kst)e[o]=(a,n)=>e(a,{...n,method:o}),e.stream[o]=(a,n)=>e(a,{...n,method:o,isStream:!0});return Object.assign(e,Sst),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:Dst.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=lle,e};Vl.default=ule;Bst(ole(),Vl)});var ple=_((Nf,Cb)=>{"use strict";var Qst=Nf&&Nf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),Ale=Nf&&Nf.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Qst(e,t,r)};Object.defineProperty(Nf,"__esModule",{value:!0});var Fst=ve("url"),fle=Q4(),Rst={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let o of e){let a=o.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Fst.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[fle.defaultHandler],mutableDefaults:!1},F4=fle.default(Rst);Nf.default=F4;Cb.exports=F4;Cb.exports.default=F4;Cb.exports.__esModule=!0;Ale(Q4(),Nf);Ale(b4(),Nf)});var nn={};Vt(nn,{Method:()=>Cle,del:()=>Mst,get:()=>L4,getNetworkSettings:()=>Ele,post:()=>O4,put:()=>Ost,request:()=>I1});function dle(t){let e=new URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),e.username&&e.password&&(r.proxyAuth=`${e.username}:${e.password}`),{proxy:r}}async function R4(t){return ol(gle,t,()=>oe.readFilePromise(t).then(e=>(gle.set(t,e),e)))}function Lst({statusCode:t,statusMessage:e},r){let o=Mt(r,t,yt.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return Zy(r,`${o}${e?` (${e})`:""}`,a)}async function wb(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(o){if(o.name!=="HTTPError")throw o;let a=r?.(o,e)??o.response.body?.error;a==null&&(o.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=o.message),o.code==="ETIMEDOUT"&&o.event==="socket"&&(a+=`(can be increased via ${Mt(e,"httpTimeout",yt.SETTING)})`);let n=new zt(35,a,u=>{o.response&&u.reportError(35,` ${zu(e,{label:"Response Code",value:_c(yt.NO_HINT,Lst(o.response,e))})}`),o.request&&(u.reportError(35,` ${zu(e,{label:"Request Method",value:_c(yt.NO_HINT,o.request.options.method)})}`),u.reportError(35,` ${zu(e,{label:"Request URL",value:_c(yt.URL,o.request.requestUrl)})}`)),o.request.redirects.length>0&&u.reportError(35,` ${zu(e,{label:"Request Redirects",value:_c(yt.NO_HINT,PL(e,o.request.redirects,yt.URL))})}`),o.request.retryCount===o.request.options.retry.limit&&u.reportError(35,` ${zu(e,{label:"Request Retry Count",value:_c(yt.NO_HINT,`${Mt(e,o.request.retryCount,yt.NUMBER)} (can be increased via ${Mt(e,"httpRetry",yt.SETTING)})`)})}`)});throw n.originalError=o,n}}function Ele(t,e){let r=[...e.configuration.get("networkSettings")].sort(([u],[A])=>A.length-u.length),o={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(o),n=typeof t=="string"?new URL(t):t;for(let[u,A]of r)if(N4.default.isMatch(n.hostname,u))for(let p of a){let h=A.get(p);h!==null&&typeof o[p]>"u"&&(o[p]=h)}for(let u of a)typeof o[u]>"u"&&(o[u]=e.configuration.get(u));return o}async function I1(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET",wrapNetworkRequest:A}){let p={target:t,body:e,configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u},h=async()=>await Ust(t,e,p),E=typeof A<"u"?await A(h,p):h;return await(await r.reduceHook(v=>v.wrapNetworkRequest,E,p))()}async function L4(t,{configuration:e,jsonResponse:r,customErrorMessage:o,wrapNetworkRequest:a,...n}){let u=()=>wb(I1(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:o}).then(p=>p.body),A=await(typeof a<"u"?u():ol(hle,t,()=>u().then(p=>(hle.set(t,p),p))));return r?JSON.parse(A.toString()):A}async function Ost(t,e,{customErrorMessage:r,...o}){return(await wb(I1(t,e,{...o,method:"PUT"}),{customErrorMessage:r,configuration:o.configuration})).body}async function O4(t,e,{customErrorMessage:r,...o}){return(await wb(I1(t,e,{...o,method:"POST"}),{customErrorMessage:r,configuration:o.configuration})).body}async function Mst(t,{customErrorMessage:e,...r}){return(await wb(I1(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function Ust(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET"}){let A=typeof t=="string"?new URL(t):t,p=Ele(A,{configuration:r});if(p.enableNetwork===!1)throw new zt(80,`Request to '${A.href}' has been blocked because of your configuration settings`);if(A.protocol==="http:"&&!N4.default.isMatch(A.hostname,r.get("unsafeHttpWhitelist")))throw new zt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${A.hostname})`);let E={agent:{http:p.httpProxy?T4.default.httpOverHttp(dle(p.httpProxy)):Tst,https:p.httpsProxy?T4.default.httpsOverHttp(dle(p.httpsProxy)):Nst},headers:o,method:u};E.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?E.body=e:E.json=e);let I=r.get("httpTimeout"),v=r.get("httpRetry"),x=r.get("enableStrictSsl"),C=p.httpsCaFilePath,R=p.httpsCertFilePath,L=p.httpsKeyFilePath,{default:U}=await Promise.resolve().then(()=>$e(ple())),J=C?await R4(C):void 0,te=R?await R4(R):void 0,ae=L?await R4(L):void 0,fe=U.extend({timeout:{socket:I},retry:v,https:{rejectUnauthorized:x,certificateAuthority:J,certificate:te,key:ae},...E});return r.getLimit("networkConcurrency")(()=>fe(A))}var mle,yle,N4,T4,hle,gle,Tst,Nst,Cle,Ib=Et(()=>{St();mle=ve("https"),yle=ve("http"),N4=$e(Zo()),T4=$e(Yse());Yl();jl();ql();hle=new Map,gle=new Map,Tst=new yle.Agent({keepAlive:!0}),Nst=new mle.Agent({keepAlive:!0});Cle=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(Cle||{})});var Ji={};Vt(Ji,{availableParallelism:()=>U4,getArchitecture:()=>B1,getArchitectureName:()=>Gst,getArchitectureSet:()=>M4,getCaller:()=>Vst,major:()=>_st,openUrl:()=>Hst});function jst(){if(process.platform==="darwin"||process.platform==="win32")return null;let t;try{t=oe.readFileSync(qst)}catch{}if(typeof t<"u"){if(t&&t.includes("GLIBC"))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],o=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return KI(r,a=>{let n=a.match(o);if(!n)return KI.skip;if(n[1])return"glibc";if(n[2])return"musl";throw new Error("Assertion failed: Expected the libc variant to have been detected")})??null}function B1(){return Ile=Ile??{os:process.platform,cpu:process.arch,libc:jst()}}function Gst(t=B1()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function M4(){let t=B1();return Ble=Ble??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function Kst(t){let e=Yst.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,o=e[2]&&e[2].indexOf("eval")===0,a=Wst.exec(e[2]);return o&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function Vst(){let e=new Error().stack.split(` +`)[3];return Kst(e)}function U4(){return typeof Bb.default.availableParallelism<"u"?Bb.default.availableParallelism():Math.max(1,Bb.default.cpus().length)}var Bb,_st,wle,Hst,qst,Ile,Ble,Yst,Wst,vb=Et(()=>{St();Bb=$e(ve("os"));Db();ql();_st=Number(process.versions.node.split(".")[0]),wle=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),Hst=typeof wle<"u"?async t=>{try{return await _4(wle,[t],{cwd:V.cwd()}),!0}catch{return!1}}:void 0,qst="/usr/bin/ldd";Yst=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Wst=/\((\S*)(?::(\d+))(?::(\d+))\)/});function Y4(t,e,r,o,a){let n=A1(r);if(o.isArray||o.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((u,A)=>H4(t,`${e}[${A}]`,u,o,a)):String(n).split(/,/).map(u=>H4(t,e,u,o,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return H4(t,e,r,o,a)}function H4(t,e,r,o,a){let n=A1(r);switch(o.type){case"ANY":return GP(n);case"SHAPE":return Zst(t,e,r,o,a);case"MAP":return $st(t,e,r,o,a)}if(n===null&&!o.isNullable&&o.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(o.values?.includes(n))return n;let A=(()=>{if(o.type==="BOOLEAN"&&typeof n!="string")return VI(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=sP(n,{env:t.env});switch(o.type){case"ABSOLUTE_PATH":{let h=a,E=mM(r);return E&&E[0]!=="<"&&(h=V.dirname(E)),V.resolve(h,ue.toPortablePath(p))}case"LOCATOR_LOOSE":return xf(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return xf(p);case"BOOLEAN":return VI(p);default:return p}})();if(o.values&&!o.values.includes(A))throw new Error(`Invalid value, expected one of ${o.values.join(", ")}`);return A}function Zst(t,e,r,o,a){let n=A1(r);if(typeof n!="object"||Array.isArray(n))throw new it(`Object configuration settings "${e}" must be an object`);let u=W4(t,o,{ignoreArrays:!0});if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=`${e}.${A}`;if(!o.properties[A])throw new it(`Unrecognized configuration settings found: ${e}.${A} - run "yarn config -v" to see the list of settings supported in Yarn`);u.set(A,Y4(t,h,p,o.properties[A],a))}return u}function $st(t,e,r,o,a){let n=A1(r),u=new Map;if(typeof n!="object"||Array.isArray(n))throw new it(`Map configuration settings "${e}" must be an object`);if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=o.normalizeKeys?o.normalizeKeys(A):A,E=`${e}['${h}']`,I=o.valueDefinition;u.set(h,Y4(t,E,p,I,a))}return u}function W4(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let o=new Map;for(let[a,n]of Object.entries(e.properties))o.set(a,W4(t,n));return o}case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(o=>V.normalize(o)):V.isAbsolute(e.default)?V.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(o=>V.resolve(t.projectCwd,o)):V.resolve(t.projectCwd,e.default);default:return e.default}}function Pb(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return Xst;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return ue.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let o=[];for(let a of t)o.push(Pb(a,e,r));return o}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=Pb(n,e.valueDefinition,r);typeof u<"u"&&o.set(a,u)}return o}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=e.properties[a],A=Pb(n,u,r);typeof A<"u"&&o.set(a,A)}return o}return t}function eot(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(bb)&&(e=(0,Dle.default)(e.slice(bb.length)),t[e]=r);return t}function j4(){let t=`${bb}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return G4}async function vle(t){try{return await oe.readFilePromise(t)}catch{return Buffer.of()}}async function tot(t,e){return Buffer.compare(...await Promise.all([vle(t),vle(e)]))===0}async function rot(t,e){let[r,o]=await Promise.all([oe.statPromise(t),oe.statPromise(e)]);return r.dev===o.dev&&r.ino===o.ino}async function iot({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await not(r,e)?null:r}var Dle,Lf,Sle,Ple,ble,q4,Jst,v1,zst,FE,bb,G4,Xst,D1,xle,xb,Sb,not,rA,Ke,S1=Et(()=>{St();Nl();Dle=$e(sV()),Lf=$e(td());qt();Sle=$e(ZV()),Ple=ve("module"),ble=$e(id()),q4=ve("stream");ose();fE();cM();uM();AM();Tse();fM();vd();Use();WP();jl();nh();Ib();ql();vb();Qf();bo();Jst=function(){if(!Lf.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=ue.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=oe.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),v1=new Set(["@yarnpkg/plugin-constraints","@yarnpkg/plugin-exec","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]),zst=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","zipDataEpilogue","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),FE=/^(?!v)[a-z0-9._-]+$/i,bb="yarn_",G4=".yarnrc.yml",Xst="********",D1=(E=>(E.ANY="ANY",E.BOOLEAN="BOOLEAN",E.ABSOLUTE_PATH="ABSOLUTE_PATH",E.LOCATOR="LOCATOR",E.LOCATOR_LOOSE="LOCATOR_LOOSE",E.NUMBER="NUMBER",E.STRING="STRING",E.SECRET="SECRET",E.SHAPE="SHAPE",E.MAP="MAP",E))(D1||{}),xle=yt,xb=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(xb||{}),Sb={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:"STRING",default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:"ABSOLUTE_PATH",default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:"BOOLEAN",default:!1},globalFolder:{description:"Folder where all system-global files are stored",type:"ABSOLUTE_PATH",default:EM()},cacheFolder:{description:"Folder where the cache files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:"NUMBER",values:["mixed",0,1,2,3,4,5,6,7,8,9],default:0},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:"ABSOLUTE_PATH",default:"./.yarn/__virtual__"},installStatePath:{description:"Path of the file where the install state will be persisted",type:"ABSOLUTE_PATH",default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:"STRING",default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:"STRING",default:j4()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:"BOOLEAN",default:!0},cacheMigrationMode:{description:"Defines the conditions under which Yarn upgrades should cause the cache archives to be regenerated.",type:"STRING",values:["always","match-spec","required-only"],default:"always"},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:"BOOLEAN",default:lP,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:SL,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Lf.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:"BOOLEAN",default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:"BOOLEAN",default:!Lf.isCI,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:"BOOLEAN",default:!0},enableTips:{description:"If true, installs will print a helpful message every day of the week",type:"BOOLEAN",default:!Lf.isCI,defaultText:""},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:"BOOLEAN",default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:"BOOLEAN",default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:"STRING",default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:"STRING",default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:"STRING",default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:"BOOLEAN",default:!0},supportedArchitectures:{description:"Architectures that Yarn will fetch and inject into the resolver",type:"SHAPE",properties:{os:{description:"Array of supported process.platform strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},cpu:{description:"Array of supported process.arch strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},libc:{description:"Array of supported libc libraries, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]}}},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:"BOOLEAN",default:!0},enableNetwork:{description:"If false, Yarn will refuse to use the network if required to",type:"BOOLEAN",default:!0},enableOfflineMode:{description:"If true, Yarn will attempt to retrieve files and metadata from the global cache rather than the network",type:"BOOLEAN",default:!1},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:"STRING",default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:"NUMBER",default:6e4},httpRetry:{description:"Retry times on http failure",type:"NUMBER",default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:"NUMBER",default:50},taskPoolConcurrency:{description:"Maximal amount of concurrent heavy task processing",type:"NUMBER",default:U4()},taskPoolMode:{description:"Execution strategy for heavy tasks",type:"STRING",values:["async","workers"],default:"workers"},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{httpsCaFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:"BOOLEAN",default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null}}}},httpsCaFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:"BOOLEAN",default:!0},logFilters:{description:"Overrides for log levels",type:"SHAPE",isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:"STRING",default:void 0},text:{description:"Code of the texts covered by this override",type:"STRING",default:void 0},pattern:{description:"Code of the patterns covered by this override",type:"STRING",default:void 0},level:{description:"Log level override, set to null to remove override",type:"STRING",values:Object.values(uP),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:"BOOLEAN",default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:"NUMBER",default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:"STRING",default:null},enableHardenedMode:{description:"If true, automatically enable --check-resolutions --refresh-lockfile on installs",type:"BOOLEAN",default:Lf.isPR&&Jst,defaultText:""},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:"BOOLEAN",default:!0},enableStrictSettings:{description:"If true, unknown settings will cause Yarn to abort",type:"BOOLEAN",default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:"BOOLEAN",default:!1},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:"STRING",default:"throw"},injectEnvironmentFiles:{description:"List of all the environment files that Yarn should inject inside the process when it starts",type:"ABSOLUTE_PATH",default:[".env.yarn?"],isArray:!0},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:"MAP",valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:"SHAPE",properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:"MAP",valueDefinition:{description:"A range",type:"STRING"}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:"MAP",valueDefinition:{description:"A semver range",type:"STRING"}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:"MAP",valueDefinition:{description:"The peerDependency meta",type:"SHAPE",properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:"BOOLEAN",default:!1}}}}}}}};not=process.platform==="win32"?tot:rot;rA=class{constructor(e){this.isCI=Lf.isCI;this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.env={};this.limits=new Map;this.packageExtensions=null;this.startingCwd=e}static create(e,r,o){let a=new rA(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(Sb);let n=typeof o<"u"?o:r instanceof Map?r:new Map;for(let[u,A]of n)a.activatePlugin(u,A);return a}static async find(e,r,{strict:o=!0,usePathCheck:a=null,useRc:n=!0}={}){let u=eot();delete u.rcFilename;let A=new rA(e),p=await rA.findRcFiles(e),h=await rA.findFolderRcFile(EE());h&&(p.find(me=>me.path===h.path)||p.unshift(h));let E=Mse(p.map(ce=>[ce.path,ce.data])),I=Bt.dot,v=new Set(Object.keys(Sb)),x=({yarnPath:ce,ignorePath:me,injectEnvironmentFiles:he})=>({yarnPath:ce,ignorePath:me,injectEnvironmentFiles:he}),C=({yarnPath:ce,ignorePath:me,injectEnvironmentFiles:he,...Be})=>{let we={};for(let[g,Ee]of Object.entries(Be))v.has(g)&&(we[g]=Ee);return we},R=({yarnPath:ce,ignorePath:me,...he})=>{let Be={};for(let[we,g]of Object.entries(he))v.has(we)||(Be[we]=g);return Be};if(A.importSettings(x(Sb)),A.useWithSource("",x(u),e,{strict:!1}),E){let[ce,me]=E;A.useWithSource(ce,x(me),I,{strict:!1})}if(a){if(await iot({configuration:A,selfPath:a})!==null)return A;A.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let L=await rA.findProjectCwd(e);A.startingCwd=e,A.projectCwd=L;let U=Object.assign(Object.create(null),process.env);A.env=U;let J=await Promise.all(A.get("injectEnvironmentFiles").map(async ce=>{let me=ce.endsWith("?")?await oe.readFilePromise(ce.slice(0,-1),"utf8").catch(()=>""):await oe.readFilePromise(ce,"utf8");return(0,Sle.parse)(me)}));for(let ce of J)for(let[me,he]of Object.entries(ce))A.env[me]=sP(he,{env:U});if(A.importSettings(C(Sb)),A.useWithSource("",C(u),e,{strict:o}),E){let[ce,me]=E;A.useWithSource(ce,C(me),I,{strict:o})}let te=ce=>"default"in ce?ce.default:ce,ae=new Map([["@@core",sse]]);if(r!==null)for(let ce of r.plugins.keys())ae.set(ce,te(r.modules.get(ce)));for(let[ce,me]of ae)A.activatePlugin(ce,me);let fe=new Map([]);if(r!==null){let ce=new Map;for(let Be of Ple.builtinModules)ce.set(Be,()=>Df(Be));for(let[Be,we]of r.modules)ce.set(Be,()=>we);let me=new Set,he=async(Be,we)=>{let{factory:g,name:Ee}=Df(Be);if(!g||me.has(Ee))return;let Se=new Map(ce),le=ee=>{if(Se.has(ee))return Se.get(ee)();throw new it(`This plugin cannot access the package referenced via ${ee} which is neither a builtin, nor an exposed entry`)},ne=await Ky(async()=>te(await g(le)),ee=>`${ee} (when initializing ${Ee}, defined in ${we})`);ce.set(Ee,()=>ne),me.add(Ee),fe.set(Ee,ne)};if(u.plugins)for(let Be of u.plugins.split(";")){let we=V.resolve(e,ue.toPortablePath(Be));await he(we,"")}for(let{path:Be,cwd:we,data:g}of p)if(!!n&&!!Array.isArray(g.plugins))for(let Ee of g.plugins){let Se=typeof Ee!="string"?Ee.path:Ee,le=Ee?.spec??"",ne=Ee?.checksum??"";if(v1.has(le))continue;let ee=V.resolve(we,ue.toPortablePath(Se));if(!await oe.existsPromise(ee)){if(!le){let At=Mt(A,V.basename(ee,".cjs"),yt.NAME),H=Mt(A,".gitignore",yt.NAME),at=Mt(A,A.values.get("rcFilename"),yt.NAME),Re=Mt(A,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",yt.URL);throw new it(`Missing source for the ${At} plugin - please try to remove the plugin from ${at} then reinstall it manually. This error usually occurs because ${H} is incorrect, check ${Re} to make sure your plugin folder isn't gitignored.`)}if(!le.match(/^https?:/)){let At=Mt(A,V.basename(ee,".cjs"),yt.NAME),H=Mt(A,A.values.get("rcFilename"),yt.NAME);throw new it(`Failed to recognize the source for the ${At} plugin - please try to delete the plugin from ${H} then reinstall it manually.`)}let Ie=await L4(le,{configuration:A}),Fe=zs(Ie);if(ne&&ne!==Fe){let At=Mt(A,V.basename(ee,".cjs"),yt.NAME),H=Mt(A,A.values.get("rcFilename"),yt.NAME),at=Mt(A,`yarn plugin import ${le}`,yt.CODE);throw new it(`Failed to fetch the ${At} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${H} then run ${at} to reimport it.`)}await oe.mkdirPromise(V.dirname(ee),{recursive:!0}),await oe.writeFilePromise(ee,Ie)}await he(ee,Be)}}for(let[ce,me]of fe)A.activatePlugin(ce,me);if(A.useWithSource("",R(u),e,{strict:o}),E){let[ce,me]=E;A.useWithSource(ce,R(me),I,{strict:o})}return A.get("enableGlobalCache")&&(A.values.set("cacheFolder",`${A.get("globalFolder")}/cache`),A.sources.set("cacheFolder","")),A}static async findRcFiles(e){let r=j4(),o=[],a=e,n=null;for(;a!==n;){n=a;let u=V.join(n,r);if(oe.existsSync(u)){let A=await oe.readFilePromise(u,"utf8"),p;try{p=Ki(A)}catch{let E="";throw A.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(E=" (in particular, make sure you list the colons after each key name)"),new it(`Parse error when loading ${u}; please check it's proper Yaml${E}`)}o.unshift({path:u,cwd:n,data:p})}a=V.dirname(n)}return o}static async findFolderRcFile(e){let r=V.join(e,dr.rc),o;try{o=await oe.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=Ki(o);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,o=e,a=null;for(;o!==a;){if(a=o,oe.existsSync(V.join(a,dr.lockfile)))return a;oe.existsSync(V.join(a,dr.manifest))&&(r=a),o=V.dirname(a)}return r}static async updateConfiguration(e,r,o={}){let a=j4(),n=V.join(e,a),u=oe.existsSync(n)?Ki(await oe.readFilePromise(n,"utf8")):{},A=!1,p;if(typeof r=="function"){try{p=r(u)}catch{p=r({})}if(p===u)return!1}else{p=u;for(let h of Object.keys(r)){let E=u[h],I=r[h],v;if(typeof I=="function")try{v=I(E)}catch{v=I(void 0)}else v=I;E!==v&&(v===rA.deleteProperty?delete p[h]:p[h]=v,A=!0)}if(!A)return!1}return await oe.changeFilePromise(n,Ba(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await rA.updateConfiguration(e,o=>{let a=o.plugins??[];if(a.length===0)return{...o,plugins:r};let n=[],u=[...r];for(let A of a){let p=typeof A!="string"?A.path:A,h=u.find(E=>E.path===p);h?(n.push(h),u=u.filter(E=>E!==h)):n.push(A)}return n.push(...u),{...o,plugins:n}})}static async updateHomeConfiguration(e){let r=EE();return await rA.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,o]of Object.entries(e))if(o!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,o),this.values.set(r,W4(this,o))}}useWithSource(e,r,o,a){try{this.use(e,r,o,a)}catch(n){throw n.message+=` (in ${Mt(this,e,yt.PATH)})`,n}}use(e,r,o,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let u of["enableStrictSettings",...Object.keys(r)]){let A=r[u],p=mM(A);if(p&&(e=p),typeof A>"u"||u==="plugins"||e===""&&zst.has(u))continue;if(u==="rcFilename")throw new it(`The rcFilename settings can only be set via ${`${bb}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(u);if(!h){let I=EE(),v=e[0]!=="<"?V.dirname(e):null;if(a&&!(v!==null?I===v:!1))throw new it(`Unrecognized or legacy configuration settings found: ${u} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(u,e);continue}if(this.sources.has(u)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=Y4(this,u,A,h,o)}catch(I){throw I.message+=` in ${Mt(this,e,yt.PATH)}`,I}if(u==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let I=this.values.get(u);this.values.set(u,new Map(n?[...I,...E]:[...E,...I])),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let I=this.values.get(u);this.values.set(u,n?[...I,...E]:[...E,...I]),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else this.values.set(u,E),this.sources.set(u,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:o=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new it(`Couldn't find a configuration settings named "${e}"`);return Pb(a,n,{hideSecrets:r,getNativePaths:o})}getSubprocessStreams(e,{header:r,prefix:o,report:a}){let n,u,A=oe.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${o} ${Mt(this,"STDOUT","green")}`),h=a.createStreamReporter(`${o} ${Mt(this,"STDERR","red")}`);n=new q4.PassThrough,n.pipe(p),n.pipe(A),u=new q4.PassThrough,u.pipe(h),u.pipe(A)}else n=A,u=A,typeof r<"u"&&n.write(`${r} +`);return{stdout:n,stderr:u}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let o of r.resolvers||[])e.push(new o);return new Dd([new c1,new Xn,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let o of r.fetchers||[])e.push(new o);return new hE([new gE,new mE,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let o of r.linkers||[])e.push(new o);return e}getSupportedArchitectures(){let e=B1(),r=this.get("supportedArchitectures"),o=r.get("os");o!==null&&(o=o.map(u=>u==="current"?e.os:u));let a=r.get("cpu");a!==null&&(a=a.map(u=>u==="current"?e.cpu:u));let n=r.get("libc");return n!==null&&(n=sl(n,u=>u==="current"?e.libc??sl.skip:u)),{os:o,cpu:a,libc:n}}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(o,a,{userProvided:n=!1}={})=>{if(!xa(o.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let u=new Ot;u.load(a,{yamlCompatibilityMode:!0});let A=Yy(e,o.identHash),p=[];A.push([o.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:o};for(let E of u.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of u.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,I]of u.peerDependenciesMeta)for(let[v,x]of Object.entries(I))p.push({...h,type:"PeerDependencyMeta",selector:E,key:v,value:x})};await this.triggerHook(o=>o.registerPackageExtensions,this,r);for(let[o,a]of this.get("packageExtensions"))r(ih(o,!0),iP(a),{userProvided:!0});return e}normalizeLocator(e){return xa(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):FE.test(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return xa(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):FE.test(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,o])=>[r,this.normalizeDependency(o)]))}normalizePackage(e,{packageExtensions:r}){let o=e1(e),a=r.get(e.identHash);if(typeof a<"u"){let u=e.version;if(u!==null){for(let[A,p]of a)if(!!kf(u,A))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof o.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof o.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=o.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",ol(o.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:yL(h)}}}let n=u=>u.scope?`${u.scope}__${u.name}`:`${u.name}`;for(let u of o.peerDependenciesMeta.keys()){let A=Js(u);o.peerDependencies.has(A.identHash)||o.peerDependencies.set(A.identHash,In(A,"*"))}for(let u of o.peerDependencies.values()){if(u.scope==="types")continue;let A=n(u),p=eA("types",A),h=fn(p);o.peerDependencies.has(p.identHash)||o.peerDependenciesMeta.has(h)||(o.peerDependencies.set(p.identHash,In(p,"*")),o.peerDependenciesMeta.set(h,{optional:!0}))}return o.dependencies=new Map(ks(o.dependencies,([,u])=>Pa(u))),o.peerDependencies=new Map(ks(o.peerDependencies,([,u])=>Pa(u))),o}getLimit(e){return ol(this.limits,e,()=>(0,ble.default)(this.get(e)))}async triggerHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);!n||await n(...r)}}async triggerMultipleHooks(e,r){for(let o of r)await this.triggerHook(e,...o)}async reduceHook(e,r,...o){let a=r;for(let n of this.plugins.values()){let u=n.hooks;if(!u)continue;let A=e(u);!A||(a=await A(a,...o))}return a}async firstHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);if(!n)continue;let u=await n(...r);if(typeof u<"u")return u}return null}},Ke=rA;Ke.deleteProperty=Symbol(),Ke.telemetry=null});var Ur={};Vt(Ur,{EndStrategy:()=>z4,ExecError:()=>kb,PipeError:()=>P1,execvp:()=>_4,pipevp:()=>Gc});function bd(t){return t!==null&&typeof t.fd=="number"}function K4(){}function V4(){for(let t of xd)t.kill()}async function Gc(t,e,{cwd:r,env:o=process.env,strict:a=!1,stdin:n=null,stdout:u,stderr:A,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":bd(n)&&(h[0]=n),bd(u)&&(h[1]=u),bd(A)&&(h[2]=A);let E=(0,J4.default)(t,e,{cwd:ue.fromPortablePath(r),env:{...o,PWD:ue.fromPortablePath(r)},stdio:h});xd.add(E),xd.size===1&&(process.on("SIGINT",K4),process.on("SIGTERM",V4)),!bd(n)&&n!==null&&n.pipe(E.stdin),bd(u)||E.stdout.pipe(u,{end:!1}),bd(A)||E.stderr.pipe(A,{end:!1});let I=()=>{for(let v of new Set([u,A]))bd(v)||v.end()};return new Promise((v,x)=>{E.on("error",C=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",K4),process.off("SIGTERM",V4)),(p===2||p===1)&&I(),x(C)}),E.on("close",(C,R)=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",K4),process.off("SIGTERM",V4)),(p===2||p===1&&C!==0)&&I(),C===0||!a?v({code:X4(C,R)}):x(new P1({fileName:t,code:C,signal:R}))})})}async function _4(t,e,{cwd:r,env:o=process.env,encoding:a="utf8",strict:n=!1}){let u=["ignore","pipe","pipe"],A=[],p=[],h=ue.fromPortablePath(r);typeof o.PWD<"u"&&(o={...o,PWD:h});let E=(0,J4.default)(t,e,{cwd:h,env:o,stdio:u});return E.stdout.on("data",I=>{A.push(I)}),E.stderr.on("data",I=>{p.push(I)}),await new Promise((I,v)=>{E.on("error",x=>{let C=Ke.create(r),R=Mt(C,t,yt.PATH);v(new zt(1,`Process ${R} failed to spawn`,L=>{L.reportError(1,` ${zu(C,{label:"Thrown Error",value:_c(yt.NO_HINT,x.message)})}`)}))}),E.on("close",(x,C)=>{let R=a==="buffer"?Buffer.concat(A):Buffer.concat(A).toString(a),L=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);x===0||!n?I({code:X4(x,C),stdout:R,stderr:L}):v(new kb({fileName:t,code:x,signal:C,stdout:R,stderr:L}))})})}function X4(t,e){let r=sot.get(e);return typeof r<"u"?128+r:t??1}function oot(t,e,{configuration:r,report:o}){o.reportError(1,` ${zu(r,t!==null?{label:"Exit Code",value:_c(yt.NUMBER,t)}:{label:"Exit Signal",value:_c(yt.CODE,e)})}`)}var J4,z4,P1,kb,xd,sot,Db=Et(()=>{St();J4=$e(sT());S1();Yl();jl();z4=(o=>(o[o.Never=0]="Never",o[o.ErrorCode=1]="ErrorCode",o[o.Always=2]="Always",o))(z4||{}),P1=class extends zt{constructor({fileName:r,code:o,signal:a}){let n=Ke.create(V.cwd()),u=Mt(n,r,yt.PATH);super(1,`Child ${u} reported an error`,A=>{oot(o,a,{configuration:n,report:A})});this.code=X4(o,a)}},kb=class extends P1{constructor({fileName:r,code:o,signal:a,stdout:n,stderr:u}){super({fileName:r,code:o,signal:a});this.stdout=n,this.stderr=u}};xd=new Set;sot=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Qle(t){kle=t}function b1(){return typeof Z4>"u"&&(Z4=kle()),Z4}var Z4,kle,$4=Et(()=>{kle=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var Fle=_((Qb,tU)=>{var aot=Object.assign({},ve("fs")),eU=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},o,a;r.ready=new Promise(function(We,tt){o=We,a=tt});var n={},u;for(u in r)r.hasOwnProperty(u)&&(n[u]=r[u]);var A=[],p="./this.program",h=function(We,tt){throw tt},E=!1,I=!0,v="";function x(We){return r.locateFile?r.locateFile(We,v):v+We}var C,R,L,U;I&&(E?v=ve("path").dirname(v)+"/":v=__dirname+"/",C=function(tt,It){var nr=ii(tt);return nr?It?nr:nr.toString():(L||(L=aot),U||(U=ve("path")),tt=U.normalize(tt),L.readFileSync(tt,It?null:"utf8"))},R=function(tt){var It=C(tt,!0);return It.buffer||(It=new Uint8Array(It)),Ee(It.buffer),It},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),A=process.argv.slice(2),h=function(We){process.exit(We)},r.inspect=function(){return"[Emscripten Module object]"});var J=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(u in n)n.hasOwnProperty(u)&&(r[u]=n[u]);n=null,r.arguments&&(A=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var ae=0,fe=function(We){ae=We},ce;r.wasmBinary&&(ce=r.wasmBinary);var me=r.noExitRuntime||!0;typeof WebAssembly!="object"&&Ti("no native wasm support detected");function he(We,tt,It){switch(tt=tt||"i8",tt.charAt(tt.length-1)==="*"&&(tt="i32"),tt){case"i1":return He[We>>0];case"i8":return He[We>>0];case"i16":return cp((We>>1)*2);case"i32":return Os((We>>2)*4);case"i64":return Os((We>>2)*4);case"float":return cu((We>>2)*4);case"double":return lp((We>>3)*8);default:Ti("invalid type for getValue: "+tt)}return null}var Be,we=!1,g;function Ee(We,tt){We||Ti("Assertion failed: "+tt)}function Se(We){var tt=r["_"+We];return Ee(tt,"Cannot call unknown function "+We+", make sure it is exported"),tt}function le(We,tt,It,nr,$){var ye={string:function(es){var bi=0;if(es!=null&&es!==0){var qo=(es.length<<2)+1;bi=Un(qo),At(es,bi,qo)}return bi},array:function(es){var bi=Un(es.length);return Re(es,bi),bi}};function Le(es){return tt==="string"?Ie(es):tt==="boolean"?Boolean(es):es}var pt=Se(We),ht=[],Tt=0;if(nr)for(var er=0;er=It)&&Te[nr];)++nr;return ee.decode(Te.subarray(We,nr))}function Fe(We,tt,It,nr){if(!(nr>0))return 0;for(var $=It,ye=It+nr-1,Le=0;Le=55296&&pt<=57343){var ht=We.charCodeAt(++Le);pt=65536+((pt&1023)<<10)|ht&1023}if(pt<=127){if(It>=ye)break;tt[It++]=pt}else if(pt<=2047){if(It+1>=ye)break;tt[It++]=192|pt>>6,tt[It++]=128|pt&63}else if(pt<=65535){if(It+2>=ye)break;tt[It++]=224|pt>>12,tt[It++]=128|pt>>6&63,tt[It++]=128|pt&63}else{if(It+3>=ye)break;tt[It++]=240|pt>>18,tt[It++]=128|pt>>12&63,tt[It++]=128|pt>>6&63,tt[It++]=128|pt&63}}return tt[It]=0,It-$}function At(We,tt,It){return Fe(We,Te,tt,It)}function H(We){for(var tt=0,It=0;It=55296&&nr<=57343&&(nr=65536+((nr&1023)<<10)|We.charCodeAt(++It)&1023),nr<=127?++tt:nr<=2047?tt+=2:nr<=65535?tt+=3:tt+=4}return tt}function at(We){var tt=H(We)+1,It=Li(tt);return It&&Fe(We,He,It,tt),It}function Re(We,tt){He.set(We,tt)}function ke(We,tt){return We%tt>0&&(We+=tt-We%tt),We}var xe,He,Te,Je,qe,b,w,P,y,F;function z(We){xe=We,r.HEAP_DATA_VIEW=F=new DataView(We),r.HEAP8=He=new Int8Array(We),r.HEAP16=Je=new Int16Array(We),r.HEAP32=b=new Int32Array(We),r.HEAPU8=Te=new Uint8Array(We),r.HEAPU16=qe=new Uint16Array(We),r.HEAPU32=w=new Uint32Array(We),r.HEAPF32=P=new Float32Array(We),r.HEAPF64=y=new Float64Array(We)}var X=r.INITIAL_MEMORY||16777216,Z,ie=[],Pe=[],Ne=[],ot=!1;function dt(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bt(r.preRun.shift());oo(ie)}function jt(){ot=!0,oo(Pe)}function $t(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Qr(r.postRun.shift());oo(Ne)}function bt(We){ie.unshift(We)}function an(We){Pe.unshift(We)}function Qr(We){Ne.unshift(We)}var mr=0,br=null,Wr=null;function Kn(We){mr++,r.monitorRunDependencies&&r.monitorRunDependencies(mr)}function Ns(We){if(mr--,r.monitorRunDependencies&&r.monitorRunDependencies(mr),mr==0&&(br!==null&&(clearInterval(br),br=null),Wr)){var tt=Wr;Wr=null,tt()}}r.preloadedImages={},r.preloadedAudios={};function Ti(We){r.onAbort&&r.onAbort(We),We+="",te(We),we=!0,g=1,We="abort("+We+"). Build with -s ASSERTIONS=1 for more info.";var tt=new WebAssembly.RuntimeError(We);throw a(tt),tt}var ps="data:application/octet-stream;base64,";function io(We){return We.startsWith(ps)}var Pi="data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsiAw0ACwsgAUEHSQ0BA0AgACACLQAAOgAAIAAgAi0AAToAASAAIAItAAI6AAIgACACLQADOgADIAAgAi0ABDoABCAAIAItAAU6AAUgACACLQAGOgAGIAAgAi0ABzoAByAAQQhqIQAgAkEIaiECIARBCGsiBA0ACwwBCyAERQ0AIAAgASAEED8hAAsgAAvyCAEXfyAAKAJoIgwgACgCMEGGAmsiBWtBACAFIAxJGyENIAAoAnQhAiAAKAKQASEPIAAoAkgiDiAMaiIJIAAoAnAiBUECIAUbIgVBAWsiBmoiAy0AASESIAMtAAAhEyAGIA5qIQZBAyEDIAAoApQBIRYgACgCPCEUIAAoAkwhECAAKAI4IRECQAJ/IAVBA0kEQCANIQggDgwBCyAAIABBACAJLQABIAAoAnwRAAAgCS0AAiAAKAJ8EQAAIQoDQCAAIAogAyAJai0AACAAKAJ8EQAAIQogACgCUCAKQQF0ai8BACIIIAEgCCABQf//A3FJIggbIQEgA0ECayAHIAgbIQcgA0EBaiIDIAVNDQALIAFB//8DcSAHIA1qIghB//8DcU0NASAGIAdB//8DcSIDayEGIA4gA2sLIQMCQAJAIAwgAUH//wNxTQ0AIAIgAkECdiAFIA9JGyEKIA1B//8DcSEVIAlBAmohDyAJQQRrIRcDQAJAAkAgBiABQf//A3EiC2otAAAgE0cNACAGIAtBAWoiAWotAAAgEkcNACADIAtqIgItAAAgCS0AAEcNACABIANqLQAAIAktAAFGDQELIApBAWsiCkUNAiAQIAsgEXFBAXRqLwEAIgEgCEH//wNxSw0BDAILIAJBAmohAUEAIQQgDyECAkADQCACLQAAIAEtAABHDQEgAi0AASABLQABRwRAIARBAXIhBAwCCyACLQACIAEtAAJHBEAgBEECciEEDAILIAItAAMgAS0AA0cEQCAEQQNyIQQMAgsgAi0ABCABLQAERwRAIARBBHIhBAwCCyACLQAFIAEtAAVHBEAgBEEFciEEDAILIAItAAYgAS0ABkcEQCAEQQZyIQQMAgsgAi0AByABLQAHRwRAIARBB3IhBAwCCyABQQhqIQEgAkEIaiECIARB+AFJIRggBEEIaiEEIBgNAAtBgAIhBAsCQAJAIAUgBEECaiICSQRAIAAgCyAHQf//A3FrIgY2AmwgAiAUSwRAIBQPCyACIBZPBEAgAg8LIAkgBEEBaiIFaiIBLQABIRIgAS0AACETAkAgAkEESQ0AIAIgBmogDE8NACAGQf//A3EhCCAEQQFrIQtBACEDQQAhBwNAIBAgAyAIaiARcUEBdGovAQAiASAGQf//A3FJBEAgAyAVaiABTw0IIAMhByABIQYLIANBAWoiAyALTQ0ACyAAIAAgAEEAIAIgF2oiAS0AACAAKAJ8EQAAIAEtAAEgACgCfBEAACABLQACIAAoAnwRAAAhASAAKAJQIAFBAXRqLwEAIgEgBkH//wNxTwRAIAdB//8DcSEDIAYhAQwDCyAEQQJrIgdB//8DcSIDIBVqIAFPDQYMAgsgAyAFaiEGIAIhBQsgCkEBayIKRQ0DIBAgCyARcUEBdGovAQAiASAIQf//A3FNDQMMAQsgByANaiEIIA4gA2siAyAFaiEGIAIhBQsgDCABQf//A3FLDQALCyAFDwsgAiEFCyAFIAAoAjwiACAAIAVLGwuGBQETfyAAKAJ0IgMgA0ECdiAAKAJwIgNBAiADGyIDIAAoApABSRshByAAKAJoIgogACgCMEGGAmsiBWtB//8DcUEAIAUgCkkbIQwgACgCSCIIIApqIgkgA0EBayICaiIFLQABIQ0gBS0AACEOIAlBAmohBSACIAhqIQsgACgClAEhEiAAKAI8IQ8gACgCTCEQIAAoAjghESAAKAKIAUEFSCETA0ACQCAKIAFB//8DcU0NAANAAkACQCALIAFB//8DcSIGai0AACAORw0AIAsgBkEBaiIBai0AACANRw0AIAYgCGoiAi0AACAJLQAARw0AIAEgCGotAAAgCS0AAUYNAQsgB0EBayIHRQ0CIAwgECAGIBFxQQF0ai8BACIBSQ0BDAILCyACQQJqIQRBACECIAUhAQJAA0AgAS0AACAELQAARw0BIAEtAAEgBC0AAUcEQCACQQFyIQIMAgsgAS0AAiAELQACRwRAIAJBAnIhAgwCCyABLQADIAQtAANHBEAgAkEDciECDAILIAEtAAQgBC0ABEcEQCACQQRyIQIMAgsgAS0ABSAELQAFRwRAIAJBBXIhAgwCCyABLQAGIAQtAAZHBEAgAkEGciECDAILIAEtAAcgBC0AB0cEQCACQQdyIQIMAgsgBEEIaiEEIAFBCGohASACQfgBSSEUIAJBCGohAiAUDQALQYACIQILAkAgAyACQQJqIgFJBEAgACAGNgJsIAEgD0sEQCAPDwsgASASTwRAIAEPCyAIIAJBAWoiA2ohCyADIAlqIgMtAAEhDSADLQAAIQ4gASEDDAELIBMNAQsgB0EBayIHRQ0AIAwgECAGIBFxQQF0ai8BACIBSQ0BCwsgAwvLAQECfwJAA0AgAC0AACABLQAARw0BIAAtAAEgAS0AAUcEQCACQQFyDwsgAC0AAiABLQACRwRAIAJBAnIPCyAALQADIAEtAANHBEAgAkEDcg8LIAAtAAQgAS0ABEcEQCACQQRyDwsgAC0ABSABLQAFRwRAIAJBBXIPCyAALQAGIAEtAAZHBEAgAkEGcg8LIAAtAAcgAS0AB0cEQCACQQdyDwsgAUEIaiEBIABBCGohACACQfgBSSEDIAJBCGohAiADDQALQYACIQILIAIL5wwBB38gAEF/cyEAIAJBF08EQAJAIAFBA3FFDQAgAS0AACAAQf8BcXNBAnRB0BhqKAIAIABBCHZzIQAgAkEBayIEQQAgAUEBaiIDQQNxG0UEQCAEIQIgAyEBDAELIAEtAAEgAEH/AXFzQQJ0QdAYaigCACAAQQh2cyEAIAFBAmohAwJAIAJBAmsiBEUNACADQQNxRQ0AIAEtAAIgAEH/AXFzQQJ0QdAYaigCACAAQQh2cyEAIAFBA2ohAwJAIAJBA2siBEUNACADQQNxRQ0AIAEtAAMgAEH/AXFzQQJ0QdAYaigCACAAQQh2cyEAIAFBBGohASACQQRrIQIMAgsgBCECIAMhAQwBCyAEIQIgAyEBCyACQRRuIgNBbGwhCQJAIANBAWsiCEUEQEEAIQQMAQsgA0EUbCABakEUayEDQQAhBANAIAEoAhAgB3MiB0EWdkH8B3FB0DhqKAIAIAdBDnZB/AdxQdAwaigCACAHQQZ2QfwHcUHQKGooAgAgB0H/AXFBAnRB0CBqKAIAc3NzIQcgASgCDCAGcyIGQRZ2QfwHcUHQOGooAgAgBkEOdkH8B3FB0DBqKAIAIAZBBnZB/AdxQdAoaigCACAGQf8BcUECdEHQIGooAgBzc3MhBiABKAIIIAVzIgVBFnZB/AdxQdA4aigCACAFQQ52QfwHcUHQMGooAgAgBUEGdkH8B3FB0ChqKAIAIAVB/wFxQQJ0QdAgaigCAHNzcyEFIAEoAgQgBHMiBEEWdkH8B3FB0DhqKAIAIARBDnZB/AdxQdAwaigCACAEQQZ2QfwHcUHQKGooAgAgBEH/AXFBAnRB0CBqKAIAc3NzIQQgASgCACAAcyIAQRZ2QfwHcUHQOGooAgAgAEEOdkH8B3FB0DBqKAIAIABBBnZB/AdxQdAoaigCACAAQf8BcUECdEHQIGooAgBzc3MhACABQRRqIQEgCEEBayIIDQALIAMhAQsgAiAJaiECIAEoAhAgASgCDCABKAIIIAEoAgQgASgCACAAcyIAQQh2IABB/wFxQQJ0QdAYaigCAHMiAEEIdiAAQf8BcUECdEHQGGooAgBzIgBBCHYgAEH/AXFBAnRB0BhqKAIAcyIAQf8BcUECdEHQGGooAgAgBHNzIABBCHZzIgBBCHYgAEH/AXFBAnRB0BhqKAIAcyIAQQh2IABB/wFxQQJ0QdAYaigCAHMiAEEIdiAAQf8BcUECdEHQGGooAgBzIgBB/wFxQQJ0QdAYaigCACAFc3MgAEEIdnMiAEEIdiAAQf8BcUECdEHQGGooAgBzIgBBCHYgAEH/AXFBAnRB0BhqKAIAcyIAQQh2IABB/wFxQQJ0QdAYaigCAHMiAEH/AXFBAnRB0BhqKAIAIAZzcyAAQQh2cyIAQQh2IABB/wFxQQJ0QdAYaigCAHMiAEEIdiAAQf8BcUECdEHQGGooAgBzIgBBCHYgAEH/AXFBAnRB0BhqKAIAcyIAQf8BcUECdEHQGGooAgAgB3NzIABBCHZzIgBBCHYgAEH/AXFBAnRB0BhqKAIAcyIAQQh2IABB/wFxQQJ0QdAYaigCAHMiAEEIdiAAQf8BcUECdEHQGGooAgBzIgBBCHYgAEH/AXFBAnRB0BhqKAIAcyEAIAFBFGohAQsgAkEHSwRAA0AgAS0AByABLQAGIAEtAAUgAS0ABCABLQADIAEtAAIgAS0AASABLQAAIABB/wFxc0ECdEHQGGooAgAgAEEIdnMiAEH/AXFzQQJ0QdAYaigCACAAQQh2cyIAQf8BcXNBAnRB0BhqKAIAIABBCHZzIgBB/wFxc0ECdEHQGGooAgAgAEEIdnMiAEH/AXFzQQJ0QdAYaigCACAAQQh2cyIAQf8BcXNBAnRB0BhqKAIAIABBCHZzIgBB/wFxc0ECdEHQGGooAgAgAEEIdnMiAEH/AXFzQQJ0QdAYaigCACAAQQh2cyEAIAFBCGohASACQQhrIgJBB0sNAAsLAkAgAkUNACACQQFxBH8gAS0AACAAQf8BcXNBAnRB0BhqKAIAIABBCHZzIQAgAUEBaiEBIAJBAWsFIAILIQMgAkEBRg0AA0AgAS0AASABLQAAIABB/wFxc0ECdEHQGGooAgAgAEEIdnMiAEH/AXFzQQJ0QdAYaigCACAAQQh2cyEAIAFBAmohASADQQJrIgMNAAsLIABBf3MLwgIBA38jAEEQayIIJAACfwJAIAAEQCAEDQEgBVANAQsgBgRAIAZBADYCBCAGQRI2AgALQQAMAQtBgAEQCSIHRQRAIAYEQCAGQQA2AgQgBkEONgIAC0EADAELIAcgATcDCCAHQgA3AwAgB0EoaiIJECogByAFNwMYIAcgBDYCECAHIAM6AGAgB0EANgJsIAdCADcCZCAAKQMYIQEgCEF/NgIIIAhCjoCAgPAANwMAIAdBECAIECQgAUL/gQGDhCIBNwNwIAcgAadBBnZBAXE6AHgCQCACRQ0AIAkgAhBgQX9KDQAgBxAGQQAMAQsgBhBfIgIEQCAAIAAoAjBBAWo2AjAgAiAHNgIIIAJBATYCBCACIAA2AgAgAkI/IAAgB0EAQgBBDkEBEQoAIgEgAUIAUxs3AxgLIAILIQAgCEEQaiQAIAALYgEBf0E4EAkiAUUEQCAABEAgAEEANgIEIABBDjYCAAtBAA8LIAFBADYCCCABQgA3AwAgAUIANwMgIAFCgICAgBA3AiwgAUEAOgAoIAFBADYCFCABQgA3AgwgAUEAOwE0IAELuwEBAX4gASkDACICQgKDUEUEQCAAIAEpAxA3AxALIAJCBINQRQRAIAAgASkDGDcDGAsgAkIIg1BFBEAgACABKQMgNwMgCyACQhCDUEUEQCAAIAEoAig2AigLIAJCIINQRQRAIAAgASgCLDYCLAsgAkLAAINQRQRAIAAgAS8BMDsBMAsgAkKAAYNQRQRAIAAgAS8BMjsBMgsgAkKAAoNQRQRAIAAgASgCNDYCNAsgACAAKQMAIAKENwMAQQALGQAgAUUEQEEADwsgACABKAIAIAEzAQQQGws3AQJ/IABBACABG0UEQCAAIAFGDwsgAC8BBCIDIAEvAQRGBH8gACgCACABKAIAIAMQPQVBAQtFCyIBAX8gAUUEQEEADwsgARAJIgJFBEBBAA8LIAIgACABEAcLKQAgACABIAIgAyAEEEUiAEUEQEEADwsgACACQQAgBBA1IQEgABAGIAELcQEBfgJ/AkAgAkJ/VwRAIAMEQCADQQA2AgQgA0EUNgIACwwBCyAAIAEgAhARIgRCf1cEQCADBEAgAyAAKAIMNgIAIAMgACgCEDYCBAsMAQtBACACIARXDQEaIAMEQCADQQA2AgQgA0ERNgIACwtBfwsLNQAgACABIAJBABAmIgBFBEBBfw8LIAMEQCADIAAtAAk6AAALIAQEQCAEIAAoAkQ2AgALQQAL/AECAn8BfiMAQRBrIgMkAAJAIAAgA0EOaiABQYAGQQAQRiIARQRAIAIhAAwBCyADLwEOIgFBBUkEQCACIQAMAQsgAC0AAEEBRwRAIAIhAAwBCyAAIAGtQv//A4MQFyIBRQRAIAIhAAwBCyABEH0aAkAgARAVIAIEfwJ/IAIvAQQhAEEAIAIoAgAiBEUNABpBACAEIABB1IABKAIAEQAACwVBAAtHBEAgAiEADAELIAEgAS0AAAR+IAEpAwggASkDEH0FQgALIgVC//8DgxATIAWnQf//A3FBgBBBABA1IgBFBEAgAiEADAELIAIQEAsgARAICyADQRBqJAAgAAvmDwIIfwJ+IwBB4ABrIgckAEEeQS4gAxshCwJAAkAgAgRAIAIiBSIGLQAABH4gBikDCCAGKQMQfQVCAAsgC61aDQEgBARAIARBADYCBCAEQRM2AgALQn8hDQwCCyABIAutIAcgBBAtIgUNAEJ/IQ0MAQsgBUIEEBMoAABBoxJBqBIgAxsoAABHBEAgBARAIARBADYCBCAEQRM2AgALQn8hDSACDQEgBRAIDAELIABCADcDICAAQQA2AhggAEL/////DzcDECAAQQA7AQwgAEG/hig2AgggAEEBOgAGIABBADsBBCAAQQA2AgAgAEIANwNIIABBgIDYjXg2AkQgAEIANwMoIABCADcDMCAAQgA3AzggAEFAa0EAOwEAIABCADcDUCAAIAMEf0EABSAFEAwLOwEIIAAgBRAMOwEKIAAgBRAMOwEMIAAgBRAMNgIQIAUQDCEGIAUQDCEJIAdBADYCWCAHQgA3A1AgB0IANwNIIAcgCUEfcTYCPCAHIAZBC3Y2AjggByAGQQV2QT9xNgI0IAcgBkEBdEE+cTYCMCAHIAlBCXZB0ABqNgJEIAcgCUEFdkEPcUEBazYCQCAAIAdBMGoQBTYCFCAAIAUQFTYCGCAAIAUQFa03AyAgACAFEBWtNwMoIAUQDCEIIAUQDCEGIAACfiADBEBBACEJIABBADYCRCAAQQA7AUAgAEEANgI8QgAMAQsgBRAMIQkgACAFEAw2AjwgACAFEAw7AUAgACAFEBU2AkQgBRAVrQs3A0ggBS0AAEUEQCAEBEAgBEEANgIEIARBFDYCAAtCfyENIAINASAFEAgMAQsCQCAALwEMIgpBAXEEQCAKQcAAcQRAIABB//8DOwFSDAILIABBATsBUgwBCyAAQQA7AVILIABBADYCOCAAQgA3AzAgBiAIaiAJaiEKAkAgAgRAIAUtAAAEfiAFKQMIIAUpAxB9BUIACyAKrVoNASAEBEAgBEEANgIEIARBFTYCAAtCfyENDAILIAUQCCABIAqtQQAgBBAtIgUNAEJ/IQ0MAQsCQCAIRQ0AIAAgBSABIAhBASAEEGQiCDYCMCAIRQRAIAQoAgBBEUYEQCAEBEAgBEEANgIEIARBFTYCAAsLQn8hDSACDQIgBRAIDAILIAAtAA1BCHFFDQAgCEECECNBBUcNACAEBEAgBEEANgIEIARBFTYCAAtCfyENIAINASAFEAgMAQsgAEE0aiEIAkAgBkUNACAFIAEgBkEAIAQQRSIMRQRAQn8hDSACDQIgBRAIDAILIAwgBkGAAkGABCADGyAIIAQQbiEGIAwQBiAGRQRAQn8hDSACDQIgBRAIDAILIANFDQAgAEEBOgAECwJAIAlFDQAgACAFIAEgCUEAIAQQZCIBNgI4IAFFBEBCfyENIAINAiAFEAgMAgsgAC0ADUEIcUUNACABQQIQI0EFRw0AIAQEQCAEQQA2AgQgBEEVNgIAC0J/IQ0gAg0BIAUQCAwBCyAAIAAoAjRB9eABIAAoAjAQZzYCMCAAIAAoAjRB9cYBIAAoAjgQZzYCOAJAAkAgACkDKEL/////D1ENACAAKQMgQv////8PUQ0AIAApA0hC/////w9SDQELAkACQAJAIAgoAgAgB0EwakEBQYACQYAEIAMbIAQQRiIBRQRAIAJFDQEMAgsgASAHMwEwEBciAUUEQCAEBEAgBEEANgIEIARBDjYCAAsgAkUNAQwCCwJAIAApAyhC/////w9RBEAgACABEB03AygMAQsgA0UNAEEAIQYCQCABKQMQIg5CCHwiDSAOVA0AIAEpAwggDVQNACABIA03AxBBASEGCyABIAY6AAALIAApAyBC/////w9RBEAgACABEB03AyALAkAgAw0AIAApA0hC/////w9RBEAgACABEB03A0gLIAAoAjxB//8DRw0AIAAgARAVNgI8CyABLQAABH8gASkDECABKQMIUQVBAAsNAiAEBEAgBEEANgIEIARBFTYCAAsgARAIIAINAQsgBRAIC0J/IQ0MAgsgARAICyAFLQAARQRAIAQEQCAEQQA2AgQgBEEUNgIAC0J/IQ0gAg0BIAUQCAwBCyACRQRAIAUQCAtCfyENIAApA0hCf1cEQCAEBEAgBEEWNgIEIARBBDYCAAsMAQsjAEEQayIDJABBASEBAkAgACgCEEHjAEcNAEEAIQECQCAAKAI0IANBDmpBgbICQYAGQQAQRiICBEAgAy8BDiIFQQZLDQELIAQEQCAEQQA2AgQgBEEVNgIACwwBCyACIAWtQv//A4MQFyICRQRAIAQEQCAEQQA2AgQgBEEUNgIACwwBC0EBIQECQAJAAkAgAhAMQQFrDgICAQALQQAhASAEBEAgBEEANgIEIARBGDYCAAsgAhAIDAILIAApAyhCE1YhAQsgAkICEBMvAABBwYoBRwRAQQAhASAEBEAgBEEANgIEIARBGDYCAAsgAhAIDAELIAIQfUEBayIFQf8BcUEDTwRAQQAhASAEBEAgBEEANgIEIARBGDYCAAsgAhAIDAELIAMvAQ5BB0cEQEEAIQEgBARAIARBADYCBCAEQRU2AgALIAIQCAwBCyAAIAE6AAYgACAFQf8BcUGBAmo7AVIgACACEAw2AhAgAhAIQQEhAQsgA0EQaiQAIAFFDQAgCCAIKAIAEG02AgAgCiALaq0hDQsgB0HgAGokACANC4ECAQR/IwBBEGsiBCQAAkAgASAEQQxqQcAAQQAQJSIGRQ0AIAQoAgxBBWoiA0GAgARPBEAgAgRAIAJBADYCBCACQRI2AgALDAELQQAgA60QFyIDRQRAIAIEQCACQQA2AgQgAkEONgIACwwBCyADQQEQcCADIAEEfwJ/IAEvAQQhBUEAIAEoAgAiAUUNABpBACABIAVB1IABKAIAEQAACwVBAAsQEiADIAYgBCgCDBAsAn8gAy0AAEUEQCACBEAgAkEANgIEIAJBFDYCAAtBAAwBCyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";io(Pi)||(Pi=x(Pi));function Ls(We){try{if(We==Pi&&ce)return new Uint8Array(ce);var tt=ii(We);if(tt)return tt;if(R)return R(We);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(It){Ti(It)}}function so(We,tt){var It,nr,$;try{$=Ls(We),nr=new WebAssembly.Module($),It=new WebAssembly.Instance(nr,tt)}catch(Le){var ye=Le.toString();throw te("failed to compile wasm module: "+ye),(ye.includes("imported Memory")||ye.includes("memory import"))&&te("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),Le}return[It,nr]}function cc(){var We={a:Ma};function tt($,ye){var Le=$.exports;r.asm=Le,Be=r.asm.g,z(Be.buffer),Z=r.asm.W,an(r.asm.h),Ns("wasm-instantiate")}if(Kn("wasm-instantiate"),r.instantiateWasm)try{var It=r.instantiateWasm(We,tt);return It}catch($){return te("Module.instantiateWasm callback failed with error: "+$),!1}var nr=so(Pi,We);return tt(nr[0]),r.asm}function cu(We){return F.getFloat32(We,!0)}function lp(We){return F.getFloat64(We,!0)}function cp(We){return F.getInt16(We,!0)}function Os(We){return F.getInt32(We,!0)}function Dn(We,tt){F.setInt32(We,tt,!0)}function oo(We){for(;We.length>0;){var tt=We.shift();if(typeof tt=="function"){tt(r);continue}var It=tt.func;typeof It=="number"?tt.arg===void 0?Z.get(It)():Z.get(It)(tt.arg):It(tt.arg===void 0?null:tt.arg)}}function Ms(We,tt){var It=new Date(Os((We>>2)*4)*1e3);Dn((tt>>2)*4,It.getUTCSeconds()),Dn((tt+4>>2)*4,It.getUTCMinutes()),Dn((tt+8>>2)*4,It.getUTCHours()),Dn((tt+12>>2)*4,It.getUTCDate()),Dn((tt+16>>2)*4,It.getUTCMonth()),Dn((tt+20>>2)*4,It.getUTCFullYear()-1900),Dn((tt+24>>2)*4,It.getUTCDay()),Dn((tt+36>>2)*4,0),Dn((tt+32>>2)*4,0);var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((tt+28>>2)*4,$),Ms.GMTString||(Ms.GMTString=at("GMT")),Dn((tt+40>>2)*4,Ms.GMTString),tt}function ml(We,tt){return Ms(We,tt)}function yl(We,tt,It){Te.copyWithin(We,tt,tt+It)}function ao(We){try{return Be.grow(We-xe.byteLength+65535>>>16),z(Be.buffer),1}catch{}}function Vn(We){var tt=Te.length;We=We>>>0;var It=2147483648;if(We>It)return!1;for(var nr=1;nr<=4;nr*=2){var $=tt*(1+.2/nr);$=Math.min($,We+100663296);var ye=Math.min(It,ke(Math.max(We,$),65536)),Le=ao(ye);if(Le)return!0}return!1}function On(We){fe(We)}function Ni(We){var tt=Date.now()/1e3|0;return We&&Dn((We>>2)*4,tt),tt}function Mn(){if(Mn.called)return;Mn.called=!0;var We=new Date().getFullYear(),tt=new Date(We,0,1),It=new Date(We,6,1),nr=tt.getTimezoneOffset(),$=It.getTimezoneOffset(),ye=Math.max(nr,$);Dn((ds()>>2)*4,ye*60),Dn((gs()>>2)*4,Number(nr!=$));function Le($r){var ji=$r.toTimeString().match(/\(([A-Za-z ]+)\)$/);return ji?ji[1]:"GMT"}var pt=Le(tt),ht=Le(It),Tt=at(pt),er=at(ht);$>2)*4,Tt),Dn((wi()+4>>2)*4,er)):(Dn((wi()>>2)*4,er),Dn((wi()+4>>2)*4,Tt))}function _i(We){Mn();var tt=Date.UTC(Os((We+20>>2)*4)+1900,Os((We+16>>2)*4),Os((We+12>>2)*4),Os((We+8>>2)*4),Os((We+4>>2)*4),Os((We>>2)*4),0),It=new Date(tt);Dn((We+24>>2)*4,It.getUTCDay());var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((We+28>>2)*4,$),It.getTime()/1e3|0}var tr=typeof atob=="function"?atob:function(We){var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",It="",nr,$,ye,Le,pt,ht,Tt,er=0;We=We.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Le=tt.indexOf(We.charAt(er++)),pt=tt.indexOf(We.charAt(er++)),ht=tt.indexOf(We.charAt(er++)),Tt=tt.indexOf(We.charAt(er++)),nr=Le<<2|pt>>4,$=(pt&15)<<4|ht>>2,ye=(ht&3)<<6|Tt,It=It+String.fromCharCode(nr),ht!==64&&(It=It+String.fromCharCode($)),Tt!==64&&(It=It+String.fromCharCode(ye));while(er0||(dt(),mr>0))return;function tt(){Sn||(Sn=!0,r.calledRun=!0,!we&&(jt(),o(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),$t()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),tt()},1)):tt()}if(r.run=ys,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return ys(),e}}();typeof Qb=="object"&&typeof tU=="object"?tU.exports=eU:typeof define=="function"&&define.amd?define([],function(){return eU}):typeof Qb=="object"&&(Qb.createModule=eU)});var Of,Rle,Tle,Nle=Et(()=>{Of=["number","number"],Rle=(ee=>(ee[ee.ZIP_ER_OK=0]="ZIP_ER_OK",ee[ee.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",ee[ee.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",ee[ee.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",ee[ee.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",ee[ee.ZIP_ER_READ=5]="ZIP_ER_READ",ee[ee.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",ee[ee.ZIP_ER_CRC=7]="ZIP_ER_CRC",ee[ee.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",ee[ee.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",ee[ee.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",ee[ee.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",ee[ee.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",ee[ee.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",ee[ee.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",ee[ee.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",ee[ee.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",ee[ee.ZIP_ER_EOF=17]="ZIP_ER_EOF",ee[ee.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",ee[ee.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",ee[ee.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",ee[ee.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",ee[ee.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",ee[ee.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",ee[ee.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",ee[ee.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",ee[ee.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",ee[ee.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",ee[ee.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",ee[ee.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",ee[ee.ZIP_ER_TELL=30]="ZIP_ER_TELL",ee[ee.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",ee))(Rle||{}),Tle=t=>({get HEAPU8(){return t.HEAPU8},errors:Rle,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_EXCL:2,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:t._malloc(1),uint32S:t._malloc(4),malloc:t._malloc,free:t._free,getValue:t.getValue,openFromSource:t.cwrap("zip_open_from_source","number",["number","number","number"]),close:t.cwrap("zip_close","number",["number"]),discard:t.cwrap("zip_discard",null,["number"]),getError:t.cwrap("zip_get_error","number",["number"]),getName:t.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:t.cwrap("zip_get_num_entries","number",["number","number"]),delete:t.cwrap("zip_delete","number",["number","number"]),statIndex:t.cwrap("zip_stat_index","number",["number",...Of,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Of,"number"]),fread:t.cwrap("zip_fread","number",["number","number","number","number"]),fclose:t.cwrap("zip_fclose","number",["number"]),dir:{add:t.cwrap("zip_dir_add","number",["number","string"])},file:{add:t.cwrap("zip_file_add","number",["number","string","number","number"]),getError:t.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:t.cwrap("zip_file_get_external_attributes","number",["number",...Of,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Of,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Of,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Of,"number","number"])},ext:{countSymlinks:t.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:t.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:t.cwrap("zip_error_strerror","string",["number"])},name:{locate:t.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:t.cwrap("zip_source_buffer_create","number",["number",...Of,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Of,"number"]),free:t.cwrap("zip_source_free",null,["number"]),keep:t.cwrap("zip_source_keep",null,["number"]),open:t.cwrap("zip_source_open","number",["number"]),close:t.cwrap("zip_source_close","number",["number"]),seek:t.cwrap("zip_source_seek","number",["number",...Of,"number"]),tell:t.cwrap("zip_source_tell","number",["number"]),read:t.cwrap("zip_source_read","number",["number","number","number"]),error:t.cwrap("zip_source_error","number",["number"])},struct:{statS:t.cwrap("zipstruct_statS","number",[]),statSize:t.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:t.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:t.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:t.cwrap("zipstruct_stat_mtime","number",["number"]),statCrc:t.cwrap("zipstruct_stat_crc","number",["number"]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}})});function rU(t,e){let r=t.indexOf(e);if(r<=0)return null;let o=r;for(;r>=0&&(o=r+e.length,t[o]!==V.sep);){if(t[r-1]===V.sep)return null;r=t.indexOf(e,o)}return t.length>o&&t[o]!==V.sep?null:t.slice(0,o)}var Jl,Lle=Et(()=>{St();St();nA();Jl=class extends Hp{static async openPromise(e,r){let o=new Jl(r);try{return await e(o)}finally{o.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,o=e.readOnlyArchives,a=typeof r>"u"?A=>rU(A,".zip"):A=>{for(let p of r){let h=rU(A,p);if(h)return h}return null},n=(A,p)=>new zi(p,{baseFs:A,readOnly:o,stats:A.statSync(p)}),u=async(A,p)=>{let h={baseFs:A,readOnly:o,stats:await A.statPromise(p)};return()=>new zi(p,h)};super({...e,factorySync:n,factoryPromise:u,getMountPoint:a})}}});function lot(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof t=="number"&&Number.isFinite(t))return t<0?Date.now()/1e3:t;if(Ole.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function Fb(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var ta,nU,Ole,iU,Mle,Rb,zi,sU=Et(()=>{St();St();St();St();St();St();ta=ve("fs"),nU=ve("stream"),Ole=ve("util"),iU=$e(ve("zlib"));$4();Mle="mixed";Rb=class extends Error{constructor(r,o){super(r);this.name="Libzip Error",this.code=o}},zi=class extends Mu{constructor(r,o={}){super();this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;let a=o;if(this.level=typeof a.level<"u"?a.level:Mle,r??=Fb(),typeof r=="string"){let{baseFs:A=new Tn}=a;this.baseFs=A,this.path=r}else this.path=null,this.baseFs=null;if(o.stats)this.stats=o.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(A){if(A.code==="ENOENT"&&a.create)this.stats=Ea.makeDefaultStats();else throw A}else this.stats=Ea.makeDefaultStats();this.libzip=b1();let n=this.libzip.malloc(4);try{let A=0;o.readOnly&&(A|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof r=="string"&&(r=a.create?Fb():this.baseFs.readFileSync(r));let p=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(p,A,n),this.lzSource=p}catch(h){throw this.libzip.source.free(p),h}if(this.zip===0){let h=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(h,this.libzip.getValue(n,"i32")),this.makeLibzipError(h)}}finally{this.libzip.free(n)}this.listings.set(Bt.root,new Set);let u=this.libzip.getNumEntries(this.zip,0);for(let A=0;Ar)throw new Error("Overread");let n=Buffer.from(this.libzip.HEAPU8.subarray(o,o+r));return process.env.YARN_IS_TEST_ENV&&process.env.YARN_ZIP_DATA_EPILOGUE&&(n=Buffer.concat([n,Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)])),n}finally{this.libzip.free(o)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.readOnly){this.discardAndClose();return}let r=this.baseFs.existsSync(this.path)||this.stats.mode===Ea.DEFAULT_MODE?void 0:this.stats.mode;this.baseFs.writeFileSync(this.path,this.getBufferAndClose(),{mode:r}),this.ready=!1}resolve(r){return V.resolve(Bt.root,r)}async openPromise(r,o,a){return this.openSync(r,o,a)}openSync(r,o,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(r,o){return this.opendirSync(r,o)}opendirSync(r,o={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`opendir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`opendir '${r}'`);let u=[...n],A=this.openSync(a,"r");return PD(this,a,u,{onClose:()=>{this.closeSync(A)}})}async readPromise(r,o,a,n,u){return this.readSync(r,o,a,n,u)}readSync(r,o,a=0,n=o.byteLength,u=-1){let A=this.fds.get(r);if(typeof A>"u")throw ar.EBADF("read");let p=u===-1||u===null?A.cursor:u,h=this.readFileSync(A.p);h.copy(o,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(u===-1||u===null)&&(A.cursor+=E),E}async writePromise(r,o,a,n,u){return typeof o=="string"?this.writeSync(r,o,u):this.writeSync(r,o,a,n,u)}writeSync(r,o,a,n,u){throw typeof this.fds.get(r)>"u"?ar.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw ar.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:o}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new nU.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(A,p)=>{clearImmediate(u),this.closeSync(a),p(A)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),u=setImmediate(async()=>{try{let A=await this.readFilePromise(r,o);n.bytesRead=A.length,n.end(A)}catch(A){n.destroy(A)}});return n}createWriteStream(r,{encoding:o}={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),u=Object.assign(new nU.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(A,p)=>{try{A?p(A):(this.writeFileSync(r,Buffer.concat(a),o),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){u.destroy()},bytesWritten:0,path:r,pending:!1});return u.on("data",A=>{let p=Buffer.from(A);u.bytesWritten+=p.length,a.push(p)}),u}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let o=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`lstat '${r}'`);return o}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw ar.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=V.resolve(Bt.root,r);return this.entries.has(a)||this.listings.has(a)}let o;try{o=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return o===void 0?!1:this.entries.has(o)||this.listings.has(o)}async accessPromise(r,o){return this.accessSync(r,o)}accessSync(r,o=ta.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`access '${r}'`);if(this.readOnly&&o&ta.constants.W_OK)throw ar.EROFS(`access '${r}'`)}async statPromise(r,o={bigint:!1}){return o.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,o)}}async fstatPromise(r,o){return this.fstatSync(r,o)}fstatSync(r,o){let a=this.fds.get(r);if(typeof a>"u")throw ar.EBADF("fstatSync");let{p:n}=a,u=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(u)&&!this.listings.has(u))throw ar.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(u))throw ar.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,u,o)}async lstatPromise(r,o={bigint:!1}){return o.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,o)}}statImpl(r,o,a={}){let n=this.entries.get(o);if(typeof n<"u"){let u=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,u)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let p=this.stats.uid,h=this.stats.gid,E=this.libzip.struct.statSize(u)>>>0,I=512,v=Math.ceil(E/I),x=(this.libzip.struct.statMtime(u)>>>0)*1e3,C=x,R=x,L=x,U=new Date(C),J=new Date(R),te=new Date(L),ae=new Date(x),fe=this.listings.has(o)?ta.constants.S_IFDIR:this.isSymbolicLink(n)?ta.constants.S_IFLNK:ta.constants.S_IFREG,ce=fe===ta.constants.S_IFDIR?493:420,me=fe|this.getUnixMode(n,ce)&511,he=this.libzip.struct.statCrc(u),Be=Object.assign(new Ea.StatEntry,{uid:p,gid:h,size:E,blksize:I,blocks:v,atime:U,birthtime:J,ctime:te,mtime:ae,atimeMs:C,birthtimeMs:R,ctimeMs:L,mtimeMs:x,mode:me,crc:he});return a.bigint===!0?Ea.convertToBigIntStats(Be):Be}if(this.listings.has(o)){let u=this.stats.uid,A=this.stats.gid,p=0,h=512,E=0,I=this.stats.mtimeMs,v=this.stats.mtimeMs,x=this.stats.mtimeMs,C=this.stats.mtimeMs,R=new Date(I),L=new Date(v),U=new Date(x),J=new Date(C),te=ta.constants.S_IFDIR|493,ae=0,fe=Object.assign(new Ea.StatEntry,{uid:u,gid:A,size:p,blksize:h,blocks:E,atime:R,birthtime:L,ctime:U,mtime:J,atimeMs:I,birthtimeMs:v,ctimeMs:x,mtimeMs:C,mode:te,crc:ae});return a.bigint===!0?Ea.convertToBigIntStats(fe):fe}throw new Error("Unreachable")}getUnixMode(r,o){if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?o:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(r){let o=this.listings.get(r);if(o)return o;this.registerListing(V.dirname(r)).add(V.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,o){this.registerListing(V.dirname(r)).add(V.basename(r)),this.entries.set(r,o)}unregisterListing(r){this.listings.delete(r),this.listings.get(V.dirname(r))?.delete(V.basename(r))}unregisterEntry(r){this.unregisterListing(r);let o=this.entries.get(r);this.entries.delete(r),!(typeof o>"u")&&(this.fileSources.delete(o),this.isSymbolicLink(o)&&this.symlinkCount--)}deleteEntry(r,o){if(this.unregisterEntry(r),this.libzip.delete(this.zip,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(r,o,a=!0,n=!0){if(!this.ready)throw ar.EBUSY(`archive closed, ${r}`);let u=V.resolve(Bt.root,o);if(u==="/")return Bt.root;let A=this.entries.get(u);if(a&&A!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(A)){let p=this.getFileSource(A).toString();return this.resolveFilename(r,V.resolve(V.dirname(u),p),!0,n)}else return u;for(;;){let p=this.resolveFilename(r,V.dirname(u),!0,n);if(p===void 0)return p;let h=this.listings.has(p),E=this.entries.has(p);if(!h&&!E){if(n===!1)return;throw ar.ENOENT(r)}if(!h)throw ar.ENOTDIR(r);if(u=V.resolve(p,V.basename(u)),!a||this.symlinkCount===0)break;let I=this.libzip.name.locate(this.zip,u.slice(1),0);if(I===-1)break;if(this.isSymbolicLink(I)){let v=this.getFileSource(I).toString();u=V.resolve(V.dirname(u),v)}else break}return u}allocateBuffer(r){Buffer.isBuffer(r)||(r=Buffer.from(r));let o=this.libzip.malloc(r.byteLength);if(!o)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,o,r.byteLength).set(r),{buffer:o,byteLength:r.byteLength}}allocateUnattachedSource(r){let o=this.libzip.struct.errorS(),{buffer:a,byteLength:n}=this.allocateBuffer(r),u=this.libzip.source.fromUnattachedBuffer(a,n,0,1,o);if(u===0)throw this.libzip.free(o),this.makeLibzipError(o);return u}allocateSource(r){let{buffer:o,byteLength:a}=this.allocateBuffer(r),n=this.libzip.source.fromBuffer(this.zip,o,a,0,1);if(n===0)throw this.libzip.free(o),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(r,o){let a=Buffer.isBuffer(o)?o:Buffer.from(o),n=V.relative(Bt.root,r),u=this.allocateSource(o);try{let A=this.libzip.file.add(this.zip,n,u,this.libzip.ZIP_FL_OVERWRITE);if(A===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let p=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,A,0,p,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(A,a),A}catch(A){throw this.libzip.source.free(u),A}}isSymbolicLink(r){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&ta.constants.S_IFMT)===ta.constants.S_IFLNK}getFileSource(r,o={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,r,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let A=this.libzip.struct.statCompSize(n),p=this.libzip.struct.statCompMethod(n),h=this.libzip.malloc(A);try{let E=this.libzip.fopenIndex(this.zip,r,0,this.libzip.ZIP_FL_COMPRESSED);if(E===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let I=this.libzip.fread(E,h,A,0);if(I===-1)throw this.makeLibzipError(this.libzip.file.getError(E));if(IA)throw new Error("Overread");let v=this.libzip.HEAPU8.subarray(h,h+A),x=Buffer.from(v);if(p===0)return this.fileSources.set(r,x),x;if(o.asyncDecompress)return new Promise((C,R)=>{iU.default.inflateRaw(x,(L,U)=>{L?R(L):(this.fileSources.set(r,U),C(U))})});{let C=iU.default.inflateRawSync(x);return this.fileSources.set(r,C),C}}finally{this.libzip.fclose(E)}}finally{this.libzip.free(h)}}async fchmodPromise(r,o){return this.chmodPromise(this.fdToPath(r,"fchmod"),o)}fchmodSync(r,o){return this.chmodSync(this.fdToPath(r,"fchmodSync"),o)}async chmodPromise(r,o){return this.chmodSync(r,o)}chmodSync(r,o){if(this.readOnly)throw ar.EROFS(`chmod '${r}'`);o&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let A=this.getUnixMode(n,ta.constants.S_IFREG|0)&-512|o;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,A<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(r,o,a){return this.chownPromise(this.fdToPath(r,"fchown"),o,a)}fchownSync(r,o,a){return this.chownSync(this.fdToPath(r,"fchownSync"),o,a)}async chownPromise(r,o,a){return this.chownSync(r,o,a)}chownSync(r,o,a){throw new Error("Unimplemented")}async renamePromise(r,o){return this.renameSync(r,o)}renameSync(r,o){throw new Error("Unimplemented")}async copyFilePromise(r,o,a){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}copyFileSync(r,o,a=0){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=this.getFileSource(n),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}prepareCopyFile(r,o,a=0){if(this.readOnly)throw ar.EROFS(`copyfile '${r} -> '${o}'`);if((a&ta.constants.COPYFILE_FICLONE_FORCE)!==0)throw ar.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${o}'`);let n=this.resolveFilename(`copyfile '${r} -> ${o}'`,r),u=this.entries.get(n);if(typeof u>"u")throw ar.EINVAL(`copyfile '${r}' -> '${o}'`);let A=this.resolveFilename(`copyfile '${r}' -> ${o}'`,o),p=this.entries.get(A);if((a&(ta.constants.COPYFILE_EXCL|ta.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof p<"u")throw ar.EEXIST(`copyfile '${r}' -> '${o}'`);return{indexSource:u,resolvedDestP:A,indexDest:p}}async appendFilePromise(r,o,a){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,o,a)}appendFileSync(r,o,a={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,o,a)}fdToPath(r,o){let a=this.fds.get(r)?.p;if(typeof a>"u")throw ar.EBADF(o);return a}async writeFilePromise(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([await this.getFileSource(A,{asyncDecompress:!0}),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&await this.chmodPromise(p,u)}writeFileSync(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([this.getFileSource(A),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&this.chmodSync(p,u)}prepareWriteFile(r,o){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw ar.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw ar.EISDIR(`open '${r}'`);let n=null,u=null;typeof o=="string"?n=o:typeof o=="object"&&({encoding:n=null,mode:u=null}=o);let A=this.entries.get(a);return{encoding:n,mode:u,resolvedP:a,index:A}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw ar.EROFS(`unlink '${r}'`);let o=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(o))throw ar.EISDIR(`unlink '${r}'`);let a=this.entries.get(o);if(typeof a>"u")throw ar.EINVAL(`unlink '${r}'`);this.deleteEntry(o,a)}async utimesPromise(r,o,a){return this.utimesSync(r,o,a)}utimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,o,a){return this.lutimesSync(r,o,a)}lutimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,o){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,a,0,lot(o),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(r,o){return this.mkdirSync(r,o)}mkdirSync(r,{mode:o=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:o});if(this.readOnly)throw ar.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw ar.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,o)}async rmdirPromise(r,o){return this.rmdirSync(r,o)}rmdirSync(r,{recursive:o=!1}={}){if(this.readOnly)throw ar.EROFS(`rmdir '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw ar.ENOTEMPTY(`rmdir '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw ar.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,u)}hydrateDirectory(r){let o=this.libzip.dir.add(this.zip,V.relative(Bt.root,r));if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(r),this.registerEntry(r,o),o}async linkPromise(r,o){return this.linkSync(r,o)}linkSync(r,o){throw ar.EOPNOTSUPP(`link '${r}' -> '${o}'`)}async symlinkPromise(r,o){return this.symlinkSync(r,o)}symlinkSync(r,o){if(this.readOnly)throw ar.EROFS(`symlink '${r}' -> '${o}'`);let a=this.resolveFilename(`symlink '${r}' -> '${o}'`,o);if(this.listings.has(a))throw ar.EISDIR(`symlink '${r}' -> '${o}'`);if(this.entries.has(a))throw ar.EEXIST(`symlink '${r}' -> '${o}'`);let n=this.setFileSource(a,r);if(this.registerEntry(a,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(ta.constants.S_IFLNK|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return o?a.toString(o):a}readFileSync(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=this.readFileBuffer(r);return o?a.toString(o):a}readFileBuffer(r,o={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw ar.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,o)}async readdirPromise(r,o){return this.readdirSync(r,o)}readdirSync(r,o){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`scandir '${r}'`);if(o?.recursive)if(o?.withFileTypes){let u=Array.from(n,A=>Object.assign(this.statImpl("lstat",V.join(r,A)),{name:A,path:Bt.dot}));for(let A of u){if(!A.isDirectory())continue;let p=V.join(A.path,A.name),h=this.listings.get(V.join(a,p));for(let E of h)u.push(Object.assign(this.statImpl("lstat",V.join(r,p,E)),{name:E,path:p}))}return u}else{let u=[...n];for(let A of u){let p=this.listings.get(V.join(a,A));if(!(typeof p>"u"))for(let h of p)u.push(V.join(A,h))}return u}else return o?.withFileTypes?Array.from(n,u=>Object.assign(this.statImpl("lstat",V.join(r,u)),{name:u,path:void 0})):[...n]}async readlinkPromise(r){let o=this.prepareReadlink(r);return(await this.getFileSource(o,{asyncDecompress:!0})).toString()}readlinkSync(r){let o=this.prepareReadlink(r);return this.getFileSource(o).toString()}prepareReadlink(r){let o=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(o))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(o))throw ar.EINVAL(`readlink '${r}'`);let a=this.entries.get(o);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw ar.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=await this.getFileSource(n,{asyncDecompress:!0}),A=Buffer.alloc(o,0);return u.copy(A),await this.writeFilePromise(r,A)}truncateSync(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=this.getFileSource(n),A=Buffer.alloc(o,0);return u.copy(A),this.writeFileSync(r,A)}async ftruncatePromise(r,o){return this.truncatePromise(this.fdToPath(r,"ftruncate"),o)}ftruncateSync(r,o){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),o)}watch(r,o,a){let n;switch(typeof o){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=o);break}if(!n)return{on:()=>{},close:()=>{}};let u=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(u)}}}watchFile(r,o,a){let n=V.resolve(Bt.root,r);return ny(this,n,o,a)}unwatchFile(r,o){let a=V.resolve(Bt.root,r);return Mg(this,a,o)}}});function _le(t,e,r=Buffer.alloc(0),o){let a=new zi(r),n=I=>I===e||I.startsWith(`${e}/`)?I.slice(0,e.length):null,u=async(I,v)=>()=>a,A=(I,v)=>a,p={...t},h=new Tn(p),E=new Hp({baseFs:h,getMountPoint:n,factoryPromise:u,factorySync:A,magicByte:21,maxAge:1/0,typeCheck:o?.typeCheck});return Kw(Ule.default,new qp(E)),a}var Ule,Hle=Et(()=>{St();Ule=$e(ve("fs"));sU()});var qle=Et(()=>{Lle();sU();Hle()});var x1={};Vt(x1,{DEFAULT_COMPRESSION_LEVEL:()=>Mle,LibzipError:()=>Rb,ZipFS:()=>zi,ZipOpenFS:()=>Jl,getArchivePart:()=>rU,getLibzipPromise:()=>uot,getLibzipSync:()=>cot,makeEmptyArchive:()=>Fb,mountMemoryDrive:()=>_le});function cot(){return b1()}async function uot(){return b1()}var jle,nA=Et(()=>{$4();jle=$e(Fle());Nle();qle();Qle(()=>{let t=(0,jle.default)();return Tle(t)})});var RE,Gle=Et(()=>{St();qt();k1();RE=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd(),{description:"The directory to run the command in"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await TE(r,[],{cwd:ue.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}};RE.usage={description:"run a command using yarn's portable shell",details:` This command will run a command using Yarn's portable shell. Make sure to escape glob patterns, redirections, and other features that might be expanded by your own shell. @@ -156,124 +156,124 @@ Please report this to https://github.com/szmarczak/http2-wrapper/`);C(T)}return} Note: Don't use this command in Yarn scripts, as Yarn's shell is automatically used. For a list of features, visit: https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-shell/README.md. - `,examples:[["Run a simple command","$0 echo Hello"],["Run a command with a glob pattern","$0 echo '*.js'"],["Run a command with a redirection","$0 echo Hello World '>' hello.txt"],["Run a command with an escaped glob pattern (The double escape is needed in Unix shells)",`$0 echo '"*.js"'`],["Run a command with a variable (Double quotes are needed in Unix shells, to prevent them from expanding the variable)",'$0 "GREETING=Hello echo $GREETING World"']]}});var al,Vle=Et(()=>{al=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var Mx={};Kt(Mx,{fastGlobOptions:()=>zle,isBraceExpansion:()=>lU,isGlobPattern:()=>dot,match:()=>mot,micromatchOptions:()=>Lx});function dot(t){if(!Nx.default.scan(t,Lx).isGlob)return!1;try{Nx.default.parse(t,Lx)}catch{return!1}return!0}function mot(t,{cwd:e,baseFs:r}){return(0,Kle.default)(t,{...zle,cwd:ue.fromPortablePath(e),fs:TD(Jle.default,new Hp(r))})}function lU(t){return Nx.default.scan(t,Lx).isBrace}var Kle,Jle,Nx,Lx,zle,Xle=Et(()=>{Pt();Kle=$e(RS()),Jle=$e(Be("fs")),Nx=$e(Zo()),Lx={strictBrackets:!0},zle={onlyDirectories:!1,onlyFiles:!1}});function cU(){}function uU(){for(let t of bd)t.kill()}function tce(t,e,r,o){return a=>{let n=a[0]instanceof iA.Transform?"pipe":a[0],u=a[1]instanceof iA.Transform?"pipe":a[1],A=a[2]instanceof iA.Transform?"pipe":a[2],p=(0,$le.default)(t,e,{...o,stdio:[n,u,A]});return bd.add(p),bd.size===1&&(process.on("SIGINT",cU),process.on("SIGTERM",uU)),a[0]instanceof iA.Transform&&a[0].pipe(p.stdin),a[1]instanceof iA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof iA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(bd.delete(p),bd.size===0&&(process.off("SIGINT",cU),process.off("SIGTERM",uU)),E.code){case"ENOENT":a[2].write(`command not found: ${t} + `,examples:[["Run a simple command","$0 echo Hello"],["Run a command with a glob pattern","$0 echo '*.js'"],["Run a command with a redirection","$0 echo Hello World '>' hello.txt"],["Run a command with an escaped glob pattern (The double escape is needed in Unix shells)",`$0 echo '"*.js"'`],["Run a command with a variable (Double quotes are needed in Unix shells, to prevent them from expanding the variable)",'$0 "GREETING=Hello echo $GREETING World"']]}});var al,Yle=Et(()=>{al=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var Lb={};Vt(Lb,{fastGlobOptions:()=>Vle,isBraceExpansion:()=>oU,isGlobPattern:()=>Aot,match:()=>fot,micromatchOptions:()=>Nb});function Aot(t){if(!Tb.default.scan(t,Nb).isGlob)return!1;try{Tb.default.parse(t,Nb)}catch{return!1}return!0}function fot(t,{cwd:e,baseFs:r}){return(0,Wle.default)(t,{...Vle,cwd:ue.fromPortablePath(e),fs:FD(Kle.default,new qp(r))})}function oU(t){return Tb.default.scan(t,Nb).isBrace}var Wle,Kle,Tb,Nb,Vle,Jle=Et(()=>{St();Wle=$e(RP()),Kle=$e(ve("fs")),Tb=$e(Zo()),Nb={strictBrackets:!0},Vle={onlyDirectories:!1,onlyFiles:!1}});function aU(){}function lU(){for(let t of kd)t.kill()}function $le(t,e,r,o){return a=>{let n=a[0]instanceof iA.Transform?"pipe":a[0],u=a[1]instanceof iA.Transform?"pipe":a[1],A=a[2]instanceof iA.Transform?"pipe":a[2],p=(0,Xle.default)(t,e,{...o,stdio:[n,u,A]});return kd.add(p),kd.size===1&&(process.on("SIGINT",aU),process.on("SIGTERM",lU)),a[0]instanceof iA.Transform&&a[0].pipe(p.stdin),a[1]instanceof iA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof iA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(kd.delete(p),kd.size===0&&(process.off("SIGINT",aU),process.off("SIGTERM",lU)),E.code){case"ENOENT":a[2].write(`command not found: ${t} `),h(127);break;case"EACCES":a[2].write(`permission denied: ${t} `),h(128);break;default:a[2].write(`uncaught error: ${E.message} -`),h(1);break}}),p.on("close",E=>{bd.delete(p),bd.size===0&&(process.off("SIGINT",cU),process.off("SIGTERM",uU)),h(E!==null?E:129)})})}}}function rce(t){return e=>{let r=e[0]==="pipe"?new iA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function Ox(t,e){return RE.start(t,e)}function Zle(t,e=null){let r=new iA.PassThrough,o=new ece.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` -`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",t(e!==null?`${e} ${p}`:p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function nce(t,{prefix:e}){return{stdout:Zle(r=>t.stdout.write(`${r} -`),t.stdout.isTTY?e:null),stderr:Zle(r=>t.stderr.write(`${r} -`),t.stderr.isTTY?e:null)}}var $le,iA,ece,bd,zl,AU,RE,fU=Et(()=>{$le=$e(aR()),iA=Be("stream"),ece=Be("string_decoder"),bd=new Set;zl=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},AU=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");return this.stream}},RE=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:o,stderr:a}){let n=new RE(null,e);return n.stdin=r,n.stdout=o,n.stderr=a,n}pipeTo(e,r=1){let o=new RE(this,e),a=new AU;return o.pipe=a,o.stdout=this.stdout,o.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),o}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let o;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");o=this.stderr,e[2]=o.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),o.close(),n))}async run(){let e=[];for(let o=this;o;o=o.ancestor)e.push(o.exec());return(await Promise.all(e))[0]}}});var T1={};Kt(T1,{EntryCommand:()=>FE,ShellError:()=>al,execute:()=>TE,globUtils:()=>Mx});function ice(t,e,r){let o=new ll.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(o,{end:!1}),(e&2)===2&&r.stdin instanceof ll.Writable&&o.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stderr,{end:!1});break;default:throw new al(`Bad file descriptor: "${t}"`)}return o}function _x(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function Eot(t,e,r){let o=[],a=new ll.PassThrough;return a.on("data",n=>o.push(n)),await Hx(t,e,_x(r,{stdout:a})),Buffer.concat(o).toString().replace(/[\r\n]+$/,"")}async function sce(t,e,r){let o=t.map(async n=>{let u=await kd(n.args,e,r);return{name:n.name,value:u.join(" ")}});return(await Promise.all(o)).reduce((n,u)=>(n[u.name]=u.value,n),{})}function Ux(t){return t.match(/[^ \r\n\t]+/g)||[]}async function Ace(t,e,r,o,a=o){switch(t.name){case"$":o(String(process.pid));break;case"#":o(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let u=Ux(n);for(let A=0;A=0&&n"u"&&(t.defaultValue?u=(await kd(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(u="")),typeof u>"u")throw A?new al(`Unbound argument #${n}`):new al(`Unbound variable "${t.name}"`);if(t.quoted)o(u);else{let p=Ux(u);for(let E=0;Eo.push(n));let a=Number(o.join(" "));return Number.isNaN(a)?k1({type:"variable",name:o.join(" ")},e,r):k1({type:"number",value:a},e,r)}else return Cot[t.type](await k1(t.left,e,r),await k1(t.right,e,r))}async function kd(t,e,r){let o=new Map,a=[],n=[],u=E=>{n.push(E)},A=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{u(E),A()},h=(E,I,v)=>{let b=JSON.stringify({type:E,fd:I}),C=o.get(b);typeof C>"u"&&o.set(b,C=[]),C.push(v)};for(let E of t){let I=!1;switch(E.type){case"redirection":{let v=await kd(E.args,e,r);for(let b of v)h(E.subtype,E.fd,b)}break;case"argument":for(let v of E.segments)switch(v.type){case"text":u(v.text);break;case"glob":u(v.pattern),I=!0;break;case"shell":{let b=await Eot(v.shell,e,r);if(v.quoted)u(b);else{let C=Ux(b);for(let T=0;T"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let b=await e.glob.match(v,{cwd:r.cwd,baseFs:e.baseFs});if(b.length===0){let C=lU(v)?". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22":"";throw new al(`No matches found: "${v}"${C}`)}for(let C of b.sort())p(C)}}if(o.size>0){let E=[];for(let[I,v]of o.entries())E.splice(E.length,0,I,String(v.length),...v);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function Q1(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let o=ue.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:o});let[n,...u]=t;if(n==="command")return tce(u[0],u.slice(1),e,{cwd:o,env:a});let A=e.builtins.get(n);if(typeof A>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return rce(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:I,stdout:v,stderr:b}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await A(u,e,r)}finally{r.stdin=I,r.stdout=v,r.stderr=b}})}function wot(t,e,r){return o=>{let a=new ll.PassThrough,n=Hx(t,e,_x(r,{stdin:a}));return{stdin:a,promise:n}}}function Iot(t,e,r){return o=>{let a=new ll.PassThrough,n=Hx(t,e,r);return{stdin:a,promise:n}}}function oce(t,e,r,o){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(o.procedures,a));return o.procedures={...o.procedures},o.procedures[a]=t,Q1([...e,"__ysh_run_procedure",a],r,o)}}async function ace(t,e,r){let o=t,a=null,n=null;for(;o;){let u=o.then?{...r}:r,A;switch(o.type){case"command":{let p=await kd(o.args,e,r),h=await sce(o.envs,e,r);A=o.envs.length?Q1(p,e,_x(u,{environment:h})):Q1(p,e,u)}break;case"subshell":{let p=await kd(o.args,e,r),h=wot(o.subshell,e,u);A=oce(h,p,e,u)}break;case"group":{let p=await kd(o.args,e,r),h=Iot(o.group,e,u);A=oce(h,p,e,u)}break;case"envs":{let p=await sce(o.envs,e,r);u.environment={...u.environment,...p},A=Q1(["true"],e,u)}break}if(typeof A>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=Ox(A,{stdin:new zl(u.stdin),stdout:new zl(u.stdout),stderr:new zl(u.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(A,1);break;case"|&":n=n.pipeTo(A,3);break}}o.then?(a=o.then.type,o=o.then.chain):o=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function Bot(t,e,r,{background:o=!1}={}){function a(n){let u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[n%u.length];return lce.default.hex(A)}if(o){let n=r.nextBackgroundJobIndex++,u=a(n),A=`[${n}]`,p=u(A),{stdout:h,stderr:E}=nce(r,{prefix:p});return r.backgroundJobs.push(ace(t,e,_x(r,{stdout:h,stderr:E})).catch(I=>E.write(`${I.message} -`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${u(cy(t))}' has ended -`)})),0}return await ace(t,e,r)}async function vot(t,e,r,{background:o=!1}={}){let a,n=A=>{a=A,r.variables["?"]=String(A)},u=async A=>{try{return await Bot(A.chain,e,r,{background:o&&typeof A.then>"u"})}catch(p){if(!(p instanceof al))throw p;return r.stderr.write(`${p.message} -`),1}};for(n(await u(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await u(t.then.line));break;case"||":a!==0&&n(await u(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function Hx(t,e,r){let o=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:u}of t){if(a=await vot(n,e,r,{background:u==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=o,a}function fce(t){switch(t.type){case"variable":return t.name==="@"||t.name==="#"||t.name==="*"||Number.isFinite(parseInt(t.name,10))||"defaultValue"in t&&!!t.defaultValue&&t.defaultValue.some(e=>F1(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>F1(e));case"arithmetic":return pU(t.arithmetic);case"shell":return hU(t.shell);default:return!1}}function F1(t){switch(t.type){case"redirection":return t.args.some(e=>F1(e));case"argument":return t.segments.some(e=>fce(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function pU(t){switch(t.type){case"variable":return fce(t);case"number":return!1;default:return pU(t.left)||pU(t.right)}}function hU(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let o;switch(r.type){case"subshell":o=hU(r.subshell);break;case"command":o=r.envs.some(a=>a.args.some(n=>F1(n)))||r.args.some(a=>F1(a));break}if(o)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function TE(t,e=[],{baseFs:r=new Rn,builtins:o={},cwd:a=ue.toPortablePath(process.cwd()),env:n=process.env,stdin:u=process.stdin,stdout:A=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=Mx}={}){let I={};for(let[C,T]of Object.entries(n))typeof T<"u"&&(I[C]=T);let v=new Map(yot);for(let[C,T]of Object.entries(o))v.set(C,T);u===null&&(u=new ll.PassThrough,u.end());let b=LD(t,E);if(!hU(b)&&b.length>0&&e.length>0){let{command:C}=b[b.length-1];for(;C.then;)C=C.then.line;let T=C.chain;for(;T.then;)T=T.then.chain;T.type==="command"&&(T.args=T.args.concat(e.map(L=>({type:"argument",segments:[{type:"text",text:L}]}))))}return await Hx(b,{args:e,baseFs:r,builtins:v,initialStdin:u,initialStdout:A,initialStderr:p,glob:E},{cwd:a,environment:I,exitCode:null,procedures:{},stdin:u,stdout:A,stderr:p,variables:Object.assign({},h,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var lce,cce,ll,uce,yot,Cot,b1=Et(()=>{Pt();Nl();lce=$e(vN()),cce=Be("os"),ll=Be("stream"),uce=Be("timers/promises");Wle();Vle();Xle();fU();fU();yot=new Map([["cd",async([t=(0,cce.homedir)(),...e],r,o)=>{let a=K.resolve(o.cwd,ue.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(u=>{throw u.code==="ENOENT"?new al(`cd: no such file or directory: ${t}`):u})).isDirectory())throw new al(`cd: not a directory: ${t}`);return o.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${ue.fromPortablePath(r.cwd)} +`),h(1);break}}),p.on("close",E=>{kd.delete(p),kd.size===0&&(process.off("SIGINT",aU),process.off("SIGTERM",lU)),h(E!==null?E:129)})})}}}function ece(t){return e=>{let r=e[0]==="pipe"?new iA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function Ob(t,e){return NE.start(t,e)}function zle(t,e=null){let r=new iA.PassThrough,o=new Zle.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",t(e!==null?`${e} ${p}`:p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function tce(t,{prefix:e}){return{stdout:zle(r=>t.stdout.write(`${r} +`),t.stdout.isTTY?e:null),stderr:zle(r=>t.stderr.write(`${r} +`),t.stderr.isTTY?e:null)}}var Xle,iA,Zle,kd,zl,cU,NE,uU=Et(()=>{Xle=$e(sT()),iA=ve("stream"),Zle=ve("string_decoder"),kd=new Set;zl=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},cU=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");return this.stream}},NE=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:o,stderr:a}){let n=new NE(null,e);return n.stdin=r,n.stdout=o,n.stderr=a,n}pipeTo(e,r=1){let o=new NE(this,e),a=new cU;return o.pipe=a,o.stdout=this.stdout,o.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),o}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let o;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");o=this.stderr,e[2]=o.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),o.close(),n))}async run(){let e=[];for(let o=this;o;o=o.ancestor)e.push(o.exec());return(await Promise.all(e))[0]}}});var T1={};Vt(T1,{EntryCommand:()=>RE,ShellError:()=>al,execute:()=>TE,globUtils:()=>Lb});function rce(t,e,r){let o=new ll.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(o,{end:!1}),(e&2)===2&&r.stdin instanceof ll.Writable&&o.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stderr,{end:!1});break;default:throw new al(`Bad file descriptor: "${t}"`)}return o}function Ub(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function hot(t,e,r){let o=[],a=new ll.PassThrough;return a.on("data",n=>o.push(n)),await _b(t,e,Ub(r,{stdout:a})),Buffer.concat(o).toString().replace(/[\r\n]+$/,"")}async function nce(t,e,r){let o=t.map(async n=>{let u=await Qd(n.args,e,r);return{name:n.name,value:u.join(" ")}});return(await Promise.all(o)).reduce((n,u)=>(n[u.name]=u.value,n),{})}function Mb(t){return t.match(/[^ \r\n\t]+/g)||[]}async function cce(t,e,r,o,a=o){switch(t.name){case"$":o(String(process.pid));break;case"#":o(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let u=Mb(n);for(let A=0;A=0&&n"u"&&(t.defaultValue?u=(await Qd(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(u="")),typeof u>"u")throw A?new al(`Unbound argument #${n}`):new al(`Unbound variable "${t.name}"`);if(t.quoted)o(u);else{let p=Mb(u);for(let E=0;Eo.push(n));let a=Number(o.join(" "));return Number.isNaN(a)?Q1({type:"variable",name:o.join(" ")},e,r):Q1({type:"number",value:a},e,r)}else return got[t.type](await Q1(t.left,e,r),await Q1(t.right,e,r))}async function Qd(t,e,r){let o=new Map,a=[],n=[],u=E=>{n.push(E)},A=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{u(E),A()},h=(E,I,v)=>{let x=JSON.stringify({type:E,fd:I}),C=o.get(x);typeof C>"u"&&o.set(x,C=[]),C.push(v)};for(let E of t){let I=!1;switch(E.type){case"redirection":{let v=await Qd(E.args,e,r);for(let x of v)h(E.subtype,E.fd,x)}break;case"argument":for(let v of E.segments)switch(v.type){case"text":u(v.text);break;case"glob":u(v.pattern),I=!0;break;case"shell":{let x=await hot(v.shell,e,r);if(v.quoted)u(x);else{let C=Mb(x);for(let R=0;R"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let x=await e.glob.match(v,{cwd:r.cwd,baseFs:e.baseFs});if(x.length===0){let C=oU(v)?". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22":"";throw new al(`No matches found: "${v}"${C}`)}for(let C of x.sort())p(C)}}if(o.size>0){let E=[];for(let[I,v]of o.entries())E.splice(E.length,0,I,String(v.length),...v);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function F1(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let o=ue.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:o});let[n,...u]=t;if(n==="command")return $le(u[0],u.slice(1),e,{cwd:o,env:a});let A=e.builtins.get(n);if(typeof A>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return ece(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:I,stdout:v,stderr:x}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await A(u,e,r)}finally{r.stdin=I,r.stdout=v,r.stderr=x}})}function dot(t,e,r){return o=>{let a=new ll.PassThrough,n=_b(t,e,Ub(r,{stdin:a}));return{stdin:a,promise:n}}}function mot(t,e,r){return o=>{let a=new ll.PassThrough,n=_b(t,e,r);return{stdin:a,promise:n}}}function ice(t,e,r,o){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(o.procedures,a));return o.procedures={...o.procedures},o.procedures[a]=t,F1([...e,"__ysh_run_procedure",a],r,o)}}async function sce(t,e,r){let o=t,a=null,n=null;for(;o;){let u=o.then?{...r}:r,A;switch(o.type){case"command":{let p=await Qd(o.args,e,r),h=await nce(o.envs,e,r);A=o.envs.length?F1(p,e,Ub(u,{environment:h})):F1(p,e,u)}break;case"subshell":{let p=await Qd(o.args,e,r),h=dot(o.subshell,e,u);A=ice(h,p,e,u)}break;case"group":{let p=await Qd(o.args,e,r),h=mot(o.group,e,u);A=ice(h,p,e,u)}break;case"envs":{let p=await nce(o.envs,e,r);u.environment={...u.environment,...p},A=F1(["true"],e,u)}break}if(typeof A>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=Ob(A,{stdin:new zl(u.stdin),stdout:new zl(u.stdout),stderr:new zl(u.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(A,1);break;case"|&":n=n.pipeTo(A,3);break}}o.then?(a=o.then.type,o=o.then.chain):o=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function yot(t,e,r,{background:o=!1}={}){function a(n){let u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[n%u.length];return oce.default.hex(A)}if(o){let n=r.nextBackgroundJobIndex++,u=a(n),A=`[${n}]`,p=u(A),{stdout:h,stderr:E}=tce(r,{prefix:p});return r.backgroundJobs.push(sce(t,e,Ub(r,{stdout:h,stderr:E})).catch(I=>E.write(`${I.message} +`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${u(uy(t))}' has ended +`)})),0}return await sce(t,e,r)}async function Eot(t,e,r,{background:o=!1}={}){let a,n=A=>{a=A,r.variables["?"]=String(A)},u=async A=>{try{return await yot(A.chain,e,r,{background:o&&typeof A.then>"u"})}catch(p){if(!(p instanceof al))throw p;return r.stderr.write(`${p.message} +`),1}};for(n(await u(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await u(t.then.line));break;case"||":a!==0&&n(await u(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function _b(t,e,r){let o=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:u}of t){if(a=await Eot(n,e,r,{background:u==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=o,a}function uce(t){switch(t.type){case"variable":return t.name==="@"||t.name==="#"||t.name==="*"||Number.isFinite(parseInt(t.name,10))||"defaultValue"in t&&!!t.defaultValue&&t.defaultValue.some(e=>R1(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>R1(e));case"arithmetic":return AU(t.arithmetic);case"shell":return fU(t.shell);default:return!1}}function R1(t){switch(t.type){case"redirection":return t.args.some(e=>R1(e));case"argument":return t.segments.some(e=>uce(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function AU(t){switch(t.type){case"variable":return uce(t);case"number":return!1;default:return AU(t.left)||AU(t.right)}}function fU(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let o;switch(r.type){case"subshell":o=fU(r.subshell);break;case"command":o=r.envs.some(a=>a.args.some(n=>R1(n)))||r.args.some(a=>R1(a));break}if(o)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function TE(t,e=[],{baseFs:r=new Tn,builtins:o={},cwd:a=ue.toPortablePath(process.cwd()),env:n=process.env,stdin:u=process.stdin,stdout:A=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=Lb}={}){let I={};for(let[C,R]of Object.entries(n))typeof R<"u"&&(I[C]=R);let v=new Map(pot);for(let[C,R]of Object.entries(o))v.set(C,R);u===null&&(u=new ll.PassThrough,u.end());let x=ND(t,E);if(!fU(x)&&x.length>0&&e.length>0){let{command:C}=x[x.length-1];for(;C.then;)C=C.then.line;let R=C.chain;for(;R.then;)R=R.then.chain;R.type==="command"&&(R.args=R.args.concat(e.map(L=>({type:"argument",segments:[{type:"text",text:L}]}))))}return await _b(x,{args:e,baseFs:r,builtins:v,initialStdin:u,initialStdout:A,initialStderr:p,glob:E},{cwd:a,environment:I,exitCode:null,procedures:{},stdin:u,stdout:A,stderr:p,variables:Object.assign({},h,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var oce,ace,ll,lce,pot,got,k1=Et(()=>{St();Nl();oce=$e(IN()),ace=ve("os"),ll=ve("stream"),lce=ve("timers/promises");Gle();Yle();Jle();uU();uU();pot=new Map([["cd",async([t=(0,ace.homedir)(),...e],r,o)=>{let a=V.resolve(o.cwd,ue.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(u=>{throw u.code==="ENOENT"?new al(`cd: no such file or directory: ${t}`):u})).isDirectory())throw new al(`cd: not a directory: ${t}`);return o.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${ue.fromPortablePath(r.cwd)} `),0)],[":",async(t,e,r)=>0],["true",async(t,e,r)=>0],["false",async(t,e,r)=>1],["exit",async([t,...e],r,o)=>o.exitCode=parseInt(t??o.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} -`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new al("sleep: missing operand");let o=Number(t);if(Number.isNaN(o))throw new al(`sleep: invalid time interval '${t}'`);return await(0,uce.setTimeout)(1e3*o,0)}],["__ysh_run_procedure",async(t,e,r)=>{let o=r.procedures[t[0]];return await Ox(o,{stdin:new zl(r.stdin),stdout:new zl(r.stdout),stderr:new zl(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let o=r.stdin,a=r.stdout,n=r.stderr,u=[],A=[],p=[],h=0;for(;t[h]!=="--";){let I=t[h++],{type:v,fd:b}=JSON.parse(I),C=J=>{switch(b){case null:case 0:u.push(J);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},T=J=>{switch(b){case null:case 1:A.push(J);break;case 2:p.push(J);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},L=Number(t[h++]),U=h+L;for(let J=h;Je.baseFs.createReadStream(K.resolve(r.cwd,ue.toPortablePath(t[J]))));break;case"<<<":C(()=>{let te=new ll.PassThrough;return process.nextTick(()=>{te.write(`${t[J]} -`),te.end()}),te});break;case"<&":C(()=>ice(Number(t[J]),1,r));break;case">":case">>":{let te=K.resolve(r.cwd,ue.toPortablePath(t[J]));T(te==="/dev/null"?new ll.Writable({autoDestroy:!0,emitClose:!0,write(le,pe,Ae){setImmediate(Ae)}}):e.baseFs.createWriteStream(te,v===">>"?{flags:"a"}:void 0))}break;case">&":T(ice(Number(t[J]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${v}"`)}}if(u.length>0){let I=new ll.PassThrough;o=I;let v=b=>{if(b===u.length)I.end();else{let C=u[b]();C.pipe(I,{end:!1}),C.on("end",()=>{v(b+1)})}};v(0)}if(A.length>0){let I=new ll.PassThrough;a=I;for(let v of A)I.pipe(v)}if(p.length>0){let I=new ll.PassThrough;n=I;for(let v of p)I.pipe(v)}let E=await Ox(Q1(t.slice(h+1),e,r),{stdin:new zl(o),stdout:new zl(a),stderr:new zl(n)}).run();return await Promise.all(A.map(I=>new Promise((v,b)=>{I.on("error",C=>{b(C)}),I.on("close",()=>{v()}),I.end()}))),await Promise.all(p.map(I=>new Promise((v,b)=>{I.on("error",C=>{b(C)}),I.on("close",()=>{v()}),I.end()}))),E}]]);Cot={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var jx=_((n4t,pce)=>{function Dot(t,e){for(var r=-1,o=t==null?0:t.length,a=Array(o);++r{var hce=fd(),Pot=jx(),Sot=Hl(),xot=fE(),bot=1/0,gce=hce?hce.prototype:void 0,dce=gce?gce.toString:void 0;function mce(t){if(typeof t=="string")return t;if(Sot(t))return Pot(t,mce)+"";if(xot(t))return dce?dce.call(t):"";var e=t+"";return e=="0"&&1/t==-bot?"-0":e}yce.exports=mce});var R1=_((s4t,Cce)=>{var kot=Ece();function Qot(t){return t==null?"":kot(t)}Cce.exports=Qot});var gU=_((o4t,wce)=>{function Fot(t,e,r){var o=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++o{var Tot=gU();function Rot(t,e,r){var o=t.length;return r=r===void 0?o:r,!e&&r>=o?t:Tot(t,e,r)}Ice.exports=Rot});var dU=_((l4t,vce)=>{var Not="\\ud800-\\udfff",Lot="\\u0300-\\u036f",Mot="\\ufe20-\\ufe2f",Oot="\\u20d0-\\u20ff",Uot=Lot+Mot+Oot,_ot="\\ufe0e\\ufe0f",Hot="\\u200d",jot=RegExp("["+Hot+Not+Uot+_ot+"]");function qot(t){return jot.test(t)}vce.exports=qot});var Pce=_((c4t,Dce)=>{function Got(t){return t.split("")}Dce.exports=Got});var Rce=_((u4t,Tce)=>{var Sce="\\ud800-\\udfff",Yot="\\u0300-\\u036f",Wot="\\ufe20-\\ufe2f",Vot="\\u20d0-\\u20ff",Kot=Yot+Wot+Vot,Jot="\\ufe0e\\ufe0f",zot="["+Sce+"]",mU="["+Kot+"]",yU="\\ud83c[\\udffb-\\udfff]",Xot="(?:"+mU+"|"+yU+")",xce="[^"+Sce+"]",bce="(?:\\ud83c[\\udde6-\\uddff]){2}",kce="[\\ud800-\\udbff][\\udc00-\\udfff]",Zot="\\u200d",Qce=Xot+"?",Fce="["+Jot+"]?",$ot="(?:"+Zot+"(?:"+[xce,bce,kce].join("|")+")"+Fce+Qce+")*",eat=Fce+Qce+$ot,tat="(?:"+[xce+mU+"?",mU,bce,kce,zot].join("|")+")",rat=RegExp(yU+"(?="+yU+")|"+tat+eat,"g");function nat(t){return t.match(rat)||[]}Tce.exports=nat});var Lce=_((A4t,Nce)=>{var iat=Pce(),sat=dU(),oat=Rce();function aat(t){return sat(t)?oat(t):iat(t)}Nce.exports=aat});var Oce=_((f4t,Mce)=>{var lat=Bce(),cat=dU(),uat=Lce(),Aat=R1();function fat(t){return function(e){e=Aat(e);var r=cat(e)?uat(e):void 0,o=r?r[0]:e.charAt(0),a=r?lat(r,1).join(""):e.slice(1);return o[t]()+a}}Mce.exports=fat});var _ce=_((p4t,Uce)=>{var pat=Oce(),hat=pat("toUpperCase");Uce.exports=hat});var EU=_((h4t,Hce)=>{var gat=R1(),dat=_ce();function mat(t){return dat(gat(t).toLowerCase())}Hce.exports=mat});var jce=_((g4t,qx)=>{function yat(){var t=0,e=1,r=2,o=3,a=4,n=5,u=6,A=7,p=8,h=9,E=10,I=11,v=12,b=13,C=14,T=15,L=16,U=17,J=0,te=1,le=2,pe=3,Ae=4;function ye(g,Ee){return 55296<=g.charCodeAt(Ee)&&g.charCodeAt(Ee)<=56319&&56320<=g.charCodeAt(Ee+1)&&g.charCodeAt(Ee+1)<=57343}function ae(g,Ee){Ee===void 0&&(Ee=0);var De=g.charCodeAt(Ee);if(55296<=De&&De<=56319&&Ee=1){var ce=g.charCodeAt(Ee-1),ne=De;return 55296<=ce&&ce<=56319?(ce-55296)*1024+(ne-56320)+65536:ne}return De}function we(g,Ee,De){var ce=[g].concat(Ee).concat([De]),ne=ce[ce.length-2],ee=De,Ie=ce.lastIndexOf(C);if(Ie>1&&ce.slice(1,Ie).every(function(H){return H==o})&&[o,b,U].indexOf(g)==-1)return le;var ke=ce.lastIndexOf(a);if(ke>0&&ce.slice(1,ke).every(function(H){return H==a})&&[v,a].indexOf(ne)==-1)return ce.filter(function(H){return H==a}).length%2==1?pe:Ae;if(ne==t&&ee==e)return J;if(ne==r||ne==t||ne==e)return ee==C&&Ee.every(function(H){return H==o})?le:te;if(ee==r||ee==t||ee==e)return te;if(ne==u&&(ee==u||ee==A||ee==h||ee==E))return J;if((ne==h||ne==A)&&(ee==A||ee==p))return J;if((ne==E||ne==p)&&ee==p)return J;if(ee==o||ee==T)return J;if(ee==n)return J;if(ne==v)return J;var ht=ce.indexOf(o)!=-1?ce.lastIndexOf(o)-1:ce.length-2;return[b,U].indexOf(ce[ht])!=-1&&ce.slice(ht+1,-1).every(function(H){return H==o})&&ee==C||ne==T&&[L,U].indexOf(ee)!=-1?J:Ee.indexOf(a)!=-1?le:ne==a&&ee==a?J:te}this.nextBreak=function(g,Ee){if(Ee===void 0&&(Ee=0),Ee<0)return 0;if(Ee>=g.length-1)return g.length;for(var De=Pe(ae(g,Ee)),ce=[],ne=Ee+1;ne{var Eat=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,Gx;function Cat(){if(Gx)return Gx;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return Gx=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=jce(),e=new t;return Gx=r=>e.splitGraphemes(r)}}qce.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let o=r-e,a="",n=0,u=0;for(;t.length>0;){let A=t.match(Eat)||[t,t,void 0],p=Cat()(A[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(o-u,p.length);a+=p.slice(0,E).join(""),n+=h,u+=E,typeof A[2]<"u"&&(a+=A[2]),t=t.slice(A[0].length)}return a}});var tn,N1=Et(()=>{tn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.0.2"});function zce(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Wu(t===null?0:t);return!r&&t===null?Ot(e,a,"grey"):a}function CU(t,{configuration:e,json:r}){let o=zce(t,{configuration:e,json:r});if(!o||t===null||t===0)return o;let a=wr[t],n=`https://yarnpkg.com/advanced/error-codes#${o}---${a}`.toLowerCase();return Xy(e,o,n)}async function NE({configuration:t,stdout:e,forceError:r},o){let a=await Nt.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let u=!1,A=!1;for(let p of o)typeof p.option<"u"&&(p.error||r?(A=!0,n.reportError(50,p.message)):(u=!0,n.reportWarning(50,p.message)),p.callback?.());u&&!A&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Kce,Yx,wat,Yce,Wce,uh,Jce,Vce,Iat,Bat,Wx,vat,Nt,L1=Et(()=>{Kce=$e(Gce()),Yx=$e(ed());pP();Yl();N1();ql();wat="\xB7",Yce=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Wce=80,uh=Yx.default.GITHUB_ACTIONS?{start:t=>`::group::${t} +`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new al("sleep: missing operand");let o=Number(t);if(Number.isNaN(o))throw new al(`sleep: invalid time interval '${t}'`);return await(0,lce.setTimeout)(1e3*o,0)}],["__ysh_run_procedure",async(t,e,r)=>{let o=r.procedures[t[0]];return await Ob(o,{stdin:new zl(r.stdin),stdout:new zl(r.stdout),stderr:new zl(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let o=r.stdin,a=r.stdout,n=r.stderr,u=[],A=[],p=[],h=0;for(;t[h]!=="--";){let I=t[h++],{type:v,fd:x}=JSON.parse(I),C=J=>{switch(x){case null:case 0:u.push(J);break;default:throw new Error(`Unsupported file descriptor: "${x}"`)}},R=J=>{switch(x){case null:case 1:A.push(J);break;case 2:p.push(J);break;default:throw new Error(`Unsupported file descriptor: "${x}"`)}},L=Number(t[h++]),U=h+L;for(let J=h;Je.baseFs.createReadStream(V.resolve(r.cwd,ue.toPortablePath(t[J]))));break;case"<<<":C(()=>{let te=new ll.PassThrough;return process.nextTick(()=>{te.write(`${t[J]} +`),te.end()}),te});break;case"<&":C(()=>rce(Number(t[J]),1,r));break;case">":case">>":{let te=V.resolve(r.cwd,ue.toPortablePath(t[J]));R(te==="/dev/null"?new ll.Writable({autoDestroy:!0,emitClose:!0,write(ae,fe,ce){setImmediate(ce)}}):e.baseFs.createWriteStream(te,v===">>"?{flags:"a"}:void 0))}break;case">&":R(rce(Number(t[J]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${v}"`)}}if(u.length>0){let I=new ll.PassThrough;o=I;let v=x=>{if(x===u.length)I.end();else{let C=u[x]();C.pipe(I,{end:!1}),C.on("end",()=>{v(x+1)})}};v(0)}if(A.length>0){let I=new ll.PassThrough;a=I;for(let v of A)I.pipe(v)}if(p.length>0){let I=new ll.PassThrough;n=I;for(let v of p)I.pipe(v)}let E=await Ob(F1(t.slice(h+1),e,r),{stdin:new zl(o),stdout:new zl(a),stderr:new zl(n)}).run();return await Promise.all(A.map(I=>new Promise((v,x)=>{I.on("error",C=>{x(C)}),I.on("close",()=>{v()}),I.end()}))),await Promise.all(p.map(I=>new Promise((v,x)=>{I.on("error",C=>{x(C)}),I.on("close",()=>{v()}),I.end()}))),E}]]);got={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var Hb=_((r4t,Ace)=>{function Cot(t,e){for(var r=-1,o=t==null?0:t.length,a=Array(o);++r{var fce=pd(),wot=Hb(),Iot=Hl(),Bot=pE(),vot=1/0,pce=fce?fce.prototype:void 0,hce=pce?pce.toString:void 0;function gce(t){if(typeof t=="string")return t;if(Iot(t))return wot(t,gce)+"";if(Bot(t))return hce?hce.call(t):"";var e=t+"";return e=="0"&&1/t==-vot?"-0":e}dce.exports=gce});var N1=_((i4t,yce)=>{var Dot=mce();function Sot(t){return t==null?"":Dot(t)}yce.exports=Sot});var pU=_((s4t,Ece)=>{function Pot(t,e,r){var o=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++o{var bot=pU();function xot(t,e,r){var o=t.length;return r=r===void 0?o:r,!e&&r>=o?t:bot(t,e,r)}Cce.exports=xot});var hU=_((a4t,Ice)=>{var kot="\\ud800-\\udfff",Qot="\\u0300-\\u036f",Fot="\\ufe20-\\ufe2f",Rot="\\u20d0-\\u20ff",Tot=Qot+Fot+Rot,Not="\\ufe0e\\ufe0f",Lot="\\u200d",Oot=RegExp("["+Lot+kot+Tot+Not+"]");function Mot(t){return Oot.test(t)}Ice.exports=Mot});var vce=_((l4t,Bce)=>{function Uot(t){return t.split("")}Bce.exports=Uot});var Fce=_((c4t,Qce)=>{var Dce="\\ud800-\\udfff",_ot="\\u0300-\\u036f",Hot="\\ufe20-\\ufe2f",qot="\\u20d0-\\u20ff",jot=_ot+Hot+qot,Got="\\ufe0e\\ufe0f",Yot="["+Dce+"]",gU="["+jot+"]",dU="\\ud83c[\\udffb-\\udfff]",Wot="(?:"+gU+"|"+dU+")",Sce="[^"+Dce+"]",Pce="(?:\\ud83c[\\udde6-\\uddff]){2}",bce="[\\ud800-\\udbff][\\udc00-\\udfff]",Kot="\\u200d",xce=Wot+"?",kce="["+Got+"]?",Vot="(?:"+Kot+"(?:"+[Sce,Pce,bce].join("|")+")"+kce+xce+")*",Jot=kce+xce+Vot,zot="(?:"+[Sce+gU+"?",gU,Pce,bce,Yot].join("|")+")",Xot=RegExp(dU+"(?="+dU+")|"+zot+Jot,"g");function Zot(t){return t.match(Xot)||[]}Qce.exports=Zot});var Tce=_((u4t,Rce)=>{var $ot=vce(),eat=hU(),tat=Fce();function rat(t){return eat(t)?tat(t):$ot(t)}Rce.exports=rat});var Lce=_((A4t,Nce)=>{var nat=wce(),iat=hU(),sat=Tce(),oat=N1();function aat(t){return function(e){e=oat(e);var r=iat(e)?sat(e):void 0,o=r?r[0]:e.charAt(0),a=r?nat(r,1).join(""):e.slice(1);return o[t]()+a}}Nce.exports=aat});var Mce=_((f4t,Oce)=>{var lat=Lce(),cat=lat("toUpperCase");Oce.exports=cat});var mU=_((p4t,Uce)=>{var uat=N1(),Aat=Mce();function fat(t){return Aat(uat(t).toLowerCase())}Uce.exports=fat});var _ce=_((h4t,qb)=>{function pat(){var t=0,e=1,r=2,o=3,a=4,n=5,u=6,A=7,p=8,h=9,E=10,I=11,v=12,x=13,C=14,R=15,L=16,U=17,J=0,te=1,ae=2,fe=3,ce=4;function me(g,Ee){return 55296<=g.charCodeAt(Ee)&&g.charCodeAt(Ee)<=56319&&56320<=g.charCodeAt(Ee+1)&&g.charCodeAt(Ee+1)<=57343}function he(g,Ee){Ee===void 0&&(Ee=0);var Se=g.charCodeAt(Ee);if(55296<=Se&&Se<=56319&&Ee=1){var le=g.charCodeAt(Ee-1),ne=Se;return 55296<=le&&le<=56319?(le-55296)*1024+(ne-56320)+65536:ne}return Se}function Be(g,Ee,Se){var le=[g].concat(Ee).concat([Se]),ne=le[le.length-2],ee=Se,Ie=le.lastIndexOf(C);if(Ie>1&&le.slice(1,Ie).every(function(H){return H==o})&&[o,x,U].indexOf(g)==-1)return ae;var Fe=le.lastIndexOf(a);if(Fe>0&&le.slice(1,Fe).every(function(H){return H==a})&&[v,a].indexOf(ne)==-1)return le.filter(function(H){return H==a}).length%2==1?fe:ce;if(ne==t&&ee==e)return J;if(ne==r||ne==t||ne==e)return ee==C&&Ee.every(function(H){return H==o})?ae:te;if(ee==r||ee==t||ee==e)return te;if(ne==u&&(ee==u||ee==A||ee==h||ee==E))return J;if((ne==h||ne==A)&&(ee==A||ee==p))return J;if((ne==E||ne==p)&&ee==p)return J;if(ee==o||ee==R)return J;if(ee==n)return J;if(ne==v)return J;var At=le.indexOf(o)!=-1?le.lastIndexOf(o)-1:le.length-2;return[x,U].indexOf(le[At])!=-1&&le.slice(At+1,-1).every(function(H){return H==o})&&ee==C||ne==R&&[L,U].indexOf(ee)!=-1?J:Ee.indexOf(a)!=-1?ae:ne==a&&ee==a?J:te}this.nextBreak=function(g,Ee){if(Ee===void 0&&(Ee=0),Ee<0)return 0;if(Ee>=g.length-1)return g.length;for(var Se=we(he(g,Ee)),le=[],ne=Ee+1;ne{var hat=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,jb;function gat(){if(jb)return jb;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return jb=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=_ce(),e=new t;return jb=r=>e.splitGraphemes(r)}}Hce.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let o=r-e,a="",n=0,u=0;for(;t.length>0;){let A=t.match(hat)||[t,t,void 0],p=gat()(A[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(o-u,p.length);a+=p.slice(0,E).join(""),n+=h,u+=E,typeof A[2]<"u"&&(a+=A[2]),t=t.slice(A[0].length)}return a}});var rn,L1=Et(()=>{rn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.1.1"});function Vce(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Wu(t===null?0:t);return!r&&t===null?Mt(e,a,"grey"):a}function yU(t,{configuration:e,json:r}){let o=Vce(t,{configuration:e,json:r});if(!o||t===null||t===0)return o;let a=wr[t],n=`https://yarnpkg.com/advanced/error-codes#${o}---${a}`.toLowerCase();return Zy(e,o,n)}async function LE({configuration:t,stdout:e,forceError:r},o){let a=await Nt.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let u=!1,A=!1;for(let p of o)typeof p.option<"u"&&(p.error||r?(A=!0,n.reportError(50,p.message)):(u=!0,n.reportWarning(50,p.message)),p.callback?.());u&&!A&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Wce,Gb,dat,jce,Gce,Ah,Kce,Yce,mat,yat,Yb,Eat,Nt,O1=Et(()=>{Wce=$e(qce()),Gb=$e(td());fS();Yl();L1();jl();dat="\xB7",jce=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Gce=80,Ah=Gb.default.GITHUB_ACTIONS?{start:t=>`::group::${t} `,end:t=>`::endgroup:: -`}:Yx.default.TRAVIS?{start:t=>`travis_fold:start:${t} +`}:Gb.default.TRAVIS?{start:t=>`travis_fold:start:${t} `,end:t=>`travis_fold:end:${t} -`}:Yx.default.GITLAB?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}[collapsed=true]\r\x1B[0K${t} -`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r\x1B[0K`}:null,Jce=uh!==null,Vce=new Date,Iat=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,Bat=t=>t,Wx=Bat({patrick:{date:[17,3],chars:["\u{1F340}","\u{1F331}"],size:40},simba:{date:[19,7],chars:["\u{1F981}","\u{1F334}"],size:40},jack:{date:[31,10],chars:["\u{1F383}","\u{1F987}"],size:40},hogsfather:{date:[31,12],chars:["\u{1F389}","\u{1F384}"],size:40},default:{chars:["=","-"],size:80}}),vat=Iat&&Object.keys(Wx).find(t=>{let e=Wx[t];return!(e.date&&(e.date[0]!==Vce.getDate()||e.date[1]!==Vce.getMonth()+1))})||"default";Nt=class extends Xs{constructor({configuration:r,stdout:o,json:a=!1,forceSectionAlignment:n=!1,includeNames:u=!0,includePrefix:A=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:I=h}){super();this.uncommitted=new Set;this.warningCount=0;this.errorCount=0;this.timerFooter=[];this.startTime=Date.now();this.indent=0;this.level=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;if(zI(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=u,this.includePrefix=A,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=I,this.json=a,this.stdout=o,r.get("enableProgressBars")&&!a&&o.isTTY&&o.columns>22){let v=r.get("progressBarStyle")||vat;if(!Object.hasOwn(Wx,v))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=Wx[v];let b=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*b/80)}}static async start(r,o){let a=new this(r),n=process.emitWarning;process.emitWarning=(u,A)=>{if(typeof u!="string"){let h=u;u=h.message,A=A??h.name}let p=typeof A<"u"?`${A}: ${u}`:u;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,md(r.configuration,`Yarn ${tn}`,2));try{await o(a)}catch(u){a.reportExceptionOnce(u)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let o=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,o-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}async startSectionPromise({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}startTimerImpl(r,o,a){return{cb:typeof o=="function"?o:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,uh!==null&&!this.json&&this.includeInfos&&this.stdout.write(uh.start(r))},reportFooter:A=>{if(this.indent-=1,uh!==null&&!this.json&&this.includeInfos){this.stdout.write(uh.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&A>200?this.reportInfo(null,`\u2514 Completed in ${Ot(this.configuration,A,yt.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof o=="function"?{}:o).skipIfEmpty}}startTimerSync(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionSync(u,n)}async startTimerPromise(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionPromise(u,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,o){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",u=`${this.formatPrefix(n,"blueBright")}${o}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(u)}reportWarning(r,o){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${o}`)}reportError(r,o){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,o)),this.reportErrorImpl(r,o)}reportErrorImpl(r,o){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"redBright")}${o}`,{truncate:!1})}reportFold(r,o){if(!uh)return;let a=`${uh.start(r)}${o}${uh.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let o=!1,a=Promise.resolve().then(async()=>{let u={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:u,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:A,title:p}of r)o||u.progress===A&&u.title===p||(u.progress=A,u.title=p,this.refreshProgress());n()}),n=()=>{o||(o=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let o=Ot(this.configuration,Date.now()-this.startTime,yt.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${o}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:o}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:o})} +`}:Gb.default.GITLAB?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}[collapsed=true]\r\x1B[0K${t} +`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r\x1B[0K`}:null,Kce=Ah!==null,Yce=new Date,mat=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,yat=t=>t,Yb=yat({patrick:{date:[17,3],chars:["\u{1F340}","\u{1F331}"],size:40},simba:{date:[19,7],chars:["\u{1F981}","\u{1F334}"],size:40},jack:{date:[31,10],chars:["\u{1F383}","\u{1F987}"],size:40},hogsfather:{date:[31,12],chars:["\u{1F389}","\u{1F384}"],size:40},default:{chars:["=","-"],size:80}}),Eat=mat&&Object.keys(Yb).find(t=>{let e=Yb[t];return!(e.date&&(e.date[0]!==Yce.getDate()||e.date[1]!==Yce.getMonth()+1))})||"default";Nt=class extends Xs{constructor({configuration:r,stdout:o,json:a=!1,forceSectionAlignment:n=!1,includeNames:u=!0,includePrefix:A=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:I=h}){super();this.uncommitted=new Set;this.warningCount=0;this.errorCount=0;this.timerFooter=[];this.startTime=Date.now();this.indent=0;this.level=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;if(XI(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=u,this.includePrefix=A,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=I,this.json=a,this.stdout=o,r.get("enableProgressBars")&&!a&&o.isTTY&&o.columns>22){let v=r.get("progressBarStyle")||Eat;if(!Object.hasOwn(Yb,v))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=Yb[v];let x=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*x/80)}}static async start(r,o){let a=new this(r),n=process.emitWarning;process.emitWarning=(u,A)=>{if(typeof u!="string"){let h=u;u=h.message,A=A??h.name}let p=typeof A<"u"?`${A}: ${u}`:u;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,yd(r.configuration,`Yarn ${rn}`,2));try{await o(a)}catch(u){a.reportExceptionOnce(u)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let o=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,o-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}async startSectionPromise({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}startTimerImpl(r,o,a){return{cb:typeof o=="function"?o:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,Ah!==null&&!this.json&&this.includeInfos&&this.stdout.write(Ah.start(r))},reportFooter:A=>{if(this.indent-=1,Ah!==null&&!this.json&&this.includeInfos){this.stdout.write(Ah.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&A>200?this.reportInfo(null,`\u2514 Completed in ${Mt(this.configuration,A,yt.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof o=="function"?{}:o).skipIfEmpty}}startTimerSync(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionSync(u,n)}async startTimerPromise(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionPromise(u,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,o){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",u=`${this.formatPrefix(n,"blueBright")}${o}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(u)}reportWarning(r,o){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${o}`)}reportError(r,o){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,o)),this.reportErrorImpl(r,o)}reportErrorImpl(r,o){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"redBright")}${o}`,{truncate:!1})}reportFold(r,o){if(!Ah)return;let a=`${Ah.start(r)}${o}${Ah.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let o=!1,a=Promise.resolve().then(async()=>{let u={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:u,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:A,title:p}of r)o||u.progress===A&&u.title===p||(u.progress=A,u.title=p,this.refreshProgress());n()}),n=()=>{o||(o=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let o=Mt(this.configuration,Date.now()-this.startTime,yt.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${o}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:o}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:o})} `),this.writeProgress()}writeLines(r,{truncate:o}={}){this.clearProgress({delta:r.length});for(let a of r)this.stdout.write(`${this.truncate(a,{truncate:o})} -`);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let o of r)o.committed=!0,o.action()}clearProgress({delta:r=0,clear:o=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||o)&&this.stdout.write("\x1B[0J"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let r=Date.now();r-this.progressTime>Wce&&(this.progressFrame=(this.progressFrame+1)%Yce.length,this.progressTime=r);let o=Yce[this.progressFrame];for(let a of this.progress.values()){let n="";if(typeof a.lastScaledSize<"u"){let h=this.progressStyle.chars[0].repeat(a.lastScaledSize),E=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-a.lastScaledSize);n=` ${h}${E}`}let u=this.formatName(null),A=u?`${u}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${Ot(this.configuration,"\u27A4","blueBright")} ${A}${o}${n}${p} -`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},Wce)}refreshProgress({delta:r=0,force:o=!1}={}){let a=!1,n=!1;if(o||this.progress.size===0)a=!0;else for(let u of this.progress.values()){let A=typeof u.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*u.definition.progress):void 0,p=u.lastScaledSize;u.lastScaledSize=A;let h=u.lastTitle;if(u.lastTitle=u.definition.title,A!==p||(n=h!==u.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:o}={}){return this.progressStyle===null&&(o=!1),typeof o>"u"&&(o=this.configuration.get("preferTruncatedLines")),o&&(r=(0,Kce.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?zce(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,o){return this.includePrefix?`${Ot(this.configuration,"\u27A4",o)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?CU(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${wat} `}}});var un={};Kt(un,{PackageManager:()=>$ce,detectPackageManager:()=>eue,executePackageAccessibleBinary:()=>sue,executePackageScript:()=>Vx,executePackageShellcode:()=>wU,executeWorkspaceAccessibleBinary:()=>Qat,executeWorkspaceLifecycleScript:()=>nue,executeWorkspaceScript:()=>rue,getPackageAccessibleBinaries:()=>Kx,getWorkspaceAccessibleBinaries:()=>iue,hasPackageScript:()=>xat,hasWorkspaceScript:()=>IU,isNodeScript:()=>BU,makeScriptEnv:()=>M1,maybeExecuteWorkspaceLifecycleScript:()=>kat,prepareExternalProject:()=>Sat});async function Ah(t,e,r,o=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${o.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await oe.writeFilePromise(K.format({dir:t,name:e,ext:".cmd"}),a)}await oe.writeFilePromise(K.join(t,e),`#!/bin/sh +`);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let o of r)o.committed=!0,o.action()}clearProgress({delta:r=0,clear:o=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||o)&&this.stdout.write("\x1B[0J"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let r=Date.now();r-this.progressTime>Gce&&(this.progressFrame=(this.progressFrame+1)%jce.length,this.progressTime=r);let o=jce[this.progressFrame];for(let a of this.progress.values()){let n="";if(typeof a.lastScaledSize<"u"){let h=this.progressStyle.chars[0].repeat(a.lastScaledSize),E=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-a.lastScaledSize);n=` ${h}${E}`}let u=this.formatName(null),A=u?`${u}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${Mt(this.configuration,"\u27A4","blueBright")} ${A}${o}${n}${p} +`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},Gce)}refreshProgress({delta:r=0,force:o=!1}={}){let a=!1,n=!1;if(o||this.progress.size===0)a=!0;else for(let u of this.progress.values()){let A=typeof u.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*u.definition.progress):void 0,p=u.lastScaledSize;u.lastScaledSize=A;let h=u.lastTitle;if(u.lastTitle=u.definition.title,A!==p||(n=h!==u.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:o}={}){return this.progressStyle===null&&(o=!1),typeof o>"u"&&(o=this.configuration.get("preferTruncatedLines")),o&&(r=(0,Wce.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?Vce(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,o){return this.includePrefix?`${Mt(this.configuration,"\u27A4",o)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?yU(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${dat} `}}});var un={};Vt(un,{PackageManager:()=>Xce,detectPackageManager:()=>Zce,executePackageAccessibleBinary:()=>nue,executePackageScript:()=>Wb,executePackageShellcode:()=>EU,executeWorkspaceAccessibleBinary:()=>Sat,executeWorkspaceLifecycleScript:()=>tue,executeWorkspaceScript:()=>eue,getPackageAccessibleBinaries:()=>Kb,getWorkspaceAccessibleBinaries:()=>rue,hasPackageScript:()=>Bat,hasWorkspaceScript:()=>CU,isNodeScript:()=>wU,makeScriptEnv:()=>M1,maybeExecuteWorkspaceLifecycleScript:()=>Dat,prepareExternalProject:()=>Iat});async function fh(t,e,r,o=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${o.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await oe.writeFilePromise(V.format({dir:t,name:e,ext:".cmd"}),a)}await oe.writeFilePromise(V.join(t,e),`#!/bin/sh exec "${r}" ${o.map(a=>`'${a.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" -`,{mode:493})}async function eue(t){let e=await Mt.tryFind(t);if(e?.packageManager){let o=_S(e.packageManager);if(o?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=o.reference.split(".");switch(o.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await oe.readFilePromise(K.join(t,dr.lockfile),"utf8")}catch{}return r!==void 0?r.match(/^__metadata:$/m)?{packageManager:"Yarn",reason:'"__metadata" key found in yarn.lock'}:{packageManager:"Yarn Classic",reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:oe.existsSync(K.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:oe.existsSync(K.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function M1({project:t,locator:e,binFolder:r,ignoreCorepack:o,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let u={};for(let[E,I]of Object.entries(n))typeof I<"u"&&(u[E.toLowerCase()!=="path"?E:"PATH"]=I);let A=ue.fromPortablePath(r);u.BERRY_BIN_FOLDER=ue.fromPortablePath(A);let p=process.env.COREPACK_ROOT&&!o?ue.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([Ah(r,"node",process.execPath),...tn!==null?[Ah(r,"run",process.execPath,[p,"run"]),Ah(r,"yarn",process.execPath,[p]),Ah(r,"yarnpkg",process.execPath,[p]),Ah(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(u.INIT_CWD=ue.fromPortablePath(t.configuration.startingCwd),u.PROJECT_CWD=ue.fromPortablePath(t.cwd)),u.PATH=u.PATH?`${A}${ue.delimiter}${u.PATH}`:`${A}`,u.npm_execpath=`${A}${ue.sep}yarn`,u.npm_node_execpath=`${A}${ue.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),I=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";u.npm_package_name=fn(e),u.npm_package_version=I;let v;if(E)v=E.cwd;else{let b=t.storedPackages.get(e.locatorHash);if(!b)throw new Error(`Package for ${jr(t.configuration,e)} not found in the project`);let C=t.configuration.getLinkers(),T={project:t,report:new Nt({stdout:new fh.PassThrough,configuration:t.configuration})},L=C.find(U=>U.supportsPackage(b,T));if(!L)throw new Error(`The package ${jr(t.configuration,b)} isn't supported by any of the available linkers`);v=await L.findPackageLocation(b,T)}u.npm_package_json=ue.fromPortablePath(K.join(v,dr.manifest))}let h=tn!==null?`yarn/${tn}`:`yarn/${vf("@yarnpkg/core").version}-core`;return u.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(u.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,u,async(E,I,v)=>await Ah(r,E,I,v)),u}async function Sat(t,e,{configuration:r,report:o,workspace:a=null,locator:n=null}){await Pat(async()=>{await oe.mktempPromise(async u=>{let A=K.join(u,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(A,{prefix:ue.fromPortablePath(t),report:o}),I=n&&Hc(n)?t1(n):n,v=I?xa(I):"an external project";h.write(`Packing ${v} from sources -`);let b=await eue(t),C;b!==null?(h.write(`Using ${b.packageManager} for bootstrap. Reason: ${b.reason} +`,{mode:493})}async function Zce(t){let e=await Ot.tryFind(t);if(e?.packageManager){let o=UP(e.packageManager);if(o?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=o.reference.split(".");switch(o.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await oe.readFilePromise(V.join(t,dr.lockfile),"utf8")}catch{}return r!==void 0?r.match(/^__metadata:$/m)?{packageManager:"Yarn",reason:'"__metadata" key found in yarn.lock'}:{packageManager:"Yarn Classic",reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:oe.existsSync(V.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:oe.existsSync(V.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function M1({project:t,locator:e,binFolder:r,ignoreCorepack:o,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let u={};for(let[E,I]of Object.entries(n))typeof I<"u"&&(u[E.toLowerCase()!=="path"?E:"PATH"]=I);let A=ue.fromPortablePath(r);u.BERRY_BIN_FOLDER=ue.fromPortablePath(A);let p=process.env.COREPACK_ROOT&&!o?ue.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([fh(r,"node",process.execPath),...rn!==null?[fh(r,"run",process.execPath,[p,"run"]),fh(r,"yarn",process.execPath,[p]),fh(r,"yarnpkg",process.execPath,[p]),fh(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(u.INIT_CWD=ue.fromPortablePath(t.configuration.startingCwd),u.PROJECT_CWD=ue.fromPortablePath(t.cwd)),u.PATH=u.PATH?`${A}${ue.delimiter}${u.PATH}`:`${A}`,u.npm_execpath=`${A}${ue.sep}yarn`,u.npm_node_execpath=`${A}${ue.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),I=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";u.npm_package_name=fn(e),u.npm_package_version=I;let v;if(E)v=E.cwd;else{let x=t.storedPackages.get(e.locatorHash);if(!x)throw new Error(`Package for ${qr(t.configuration,e)} not found in the project`);let C=t.configuration.getLinkers(),R={project:t,report:new Nt({stdout:new ph.PassThrough,configuration:t.configuration})},L=C.find(U=>U.supportsPackage(x,R));if(!L)throw new Error(`The package ${qr(t.configuration,x)} isn't supported by any of the available linkers`);v=await L.findPackageLocation(x,R)}u.npm_package_json=ue.fromPortablePath(V.join(v,dr.manifest))}let h=rn!==null?`yarn/${rn}`:`yarn/${Df("@yarnpkg/core").version}-core`;return u.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(u.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,u,async(E,I,v)=>await fh(r,E,I,v)),u}async function Iat(t,e,{configuration:r,report:o,workspace:a=null,locator:n=null}){await wat(async()=>{await oe.mktempPromise(async u=>{let A=V.join(u,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(A,{prefix:ue.fromPortablePath(t),report:o}),I=n&&Hc(n)?r1(n):n,v=I?ba(I):"an external project";h.write(`Packing ${v} from sources +`);let x=await Zce(t),C;x!==null?(h.write(`Using ${x.packageManager} for bootstrap. Reason: ${x.reason} -`),C=b.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn +`),C=x.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn -`),C="Yarn");let T=C==="Yarn"&&!b?.packageManagerField;await oe.mktempPromise(async L=>{let U=await M1({binFolder:L,ignoreCorepack:T}),te=new Map([["Yarn Classic",async()=>{let pe=a!==null?["workspace",a]:[],Ae=K.join(t,dr.manifest),ye=await oe.readFilePromise(Ae),ae=await Gc(process.execPath,[process.argv[1],"set","version","classic","--only-if-needed","--yarn-path"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(ae.code!==0)return ae.code;await oe.writeFilePromise(Ae,ye),await oe.appendFilePromise(K.join(t,".npmignore"),`/.yarn +`),C="Yarn");let R=C==="Yarn"&&!x?.packageManagerField;await oe.mktempPromise(async L=>{let U=await M1({binFolder:L,ignoreCorepack:R}),te=new Map([["Yarn Classic",async()=>{let fe=a!==null?["workspace",a]:[],ce=V.join(t,dr.manifest),me=await oe.readFilePromise(ce),he=await Gc(process.execPath,[process.argv[1],"set","version","classic","--only-if-needed","--yarn-path"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(he.code!==0)return he.code;await oe.writeFilePromise(ce,me),await oe.appendFilePromise(V.join(t,".npmignore"),`/.yarn `),h.write(` -`),delete U.NODE_ENV;let we=await Gc("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(we.code!==0)return we.code;h.write(` -`);let Pe=await Gc("yarn",[...pe,"pack","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return Pe.code!==0?Pe.code:0}],["Yarn",async()=>{let pe=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let Ae=K.join(t,dr.lockfile);await oe.existsPromise(Ae)||await oe.writeFilePromise(Ae,"");let ye=await Gc("yarn",[...pe,"pack","--install-if-needed","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return ye.code!==0?ye.code:0}],["npm",async()=>{if(a!==null){let Ee=new fh.PassThrough,De=Vy(Ee);Ee.pipe(h,{end:!1});let ce=await Gc("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:Ee,stderr:E,end:0});if(Ee.end(),ce.code!==0)return h.end(),E.end(),ce.code;let ne=(await De).toString().trim();if(!bf(ne,">=7.x")){let ee=eA(null,"npm"),Ie=In(ee,ne),ke=In(ee,">=7.x");throw new Error(`Workspaces aren't supported by ${qn(r,Ie)}; please upgrade to ${qn(r,ke)} (npm has been detected as the primary package manager for ${Ot(r,t,yt.PATH)})`)}}let pe=a!==null?["--workspace",a]:[];delete U.npm_config_user_agent,delete U.npm_config_production,delete U.NPM_CONFIG_PRODUCTION,delete U.NODE_ENV;let Ae=await Gc("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(Ae.code!==0)return Ae.code;let ye=new fh.PassThrough,ae=Vy(ye);ye.pipe(h);let we=await Gc("npm",["pack","--silent",...pe],{cwd:t,env:U,stdin:p,stdout:ye,stderr:E});if(we.code!==0)return we.code;let Pe=(await ae).toString().trim().replace(/^.*\n/s,""),g=K.resolve(t,ue.toPortablePath(Pe));return await oe.renamePromise(g,e),0}]]).get(C);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let le=await te();if(!(le===0||typeof le>"u"))throw oe.detachTemp(u),new zt(58,`Packing the package failed (exit code ${le}, logs can be found here: ${Ot(r,A,yt.PATH)})`)})})})}async function xat(t,e,{project:r}){let o=r.tryWorkspaceByLocator(t);if(o!==null)return IU(o,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r.configuration,t)} not found in the project`);return await Jl.openPromise(async n=>{let u=r.configuration,A=r.configuration.getLinkers(),p={project:r,report:new Nt({stdout:new fh.PassThrough,configuration:u})},h=A.find(b=>b.supportsPackage(a,p));if(!h)throw new Error(`The package ${jr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),I=new gn(E,{baseFs:n});return(await Mt.find(Bt.dot,{baseFs:I})).scripts.has(e)})}async function Vx(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{manifest:h,env:E,cwd:I}=await tue(t,{project:a,binFolder:p,cwd:o,lifecycleScript:e}),v=h.scripts.get(e);if(typeof v>"u")return 1;let b=async()=>await TE(v,r,{cwd:I,env:E,stdin:n,stdout:u,stderr:A});return await(await a.configuration.reduceHook(T=>T.wrapScriptExecution,b,a,t,e,{script:v,args:r,cwd:I,env:E,stdin:n,stdout:u,stderr:A}))()})}async function wU(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{env:h,cwd:E}=await tue(t,{project:a,binFolder:p,cwd:o});return await TE(e,r,{cwd:E,env:h,stdin:n,stdout:u,stderr:A})})}async function bat(t,{binFolder:e,cwd:r,lifecycleScript:o}){let a=await M1({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:o});return await vU(e,await iue(t)),typeof r>"u"&&(r=K.dirname(await oe.realpathPromise(K.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function tue(t,{project:e,binFolder:r,cwd:o,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return bat(n,{binFolder:r,cwd:o,lifecycleScript:a});let u=e.storedPackages.get(t.locatorHash);if(!u)throw new Error(`Package for ${jr(e.configuration,t)} not found in the project`);return await Jl.openPromise(async A=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Nt({stdout:new fh.PassThrough,configuration:p})},I=h.find(L=>L.supportsPackage(u,E));if(!I)throw new Error(`The package ${jr(e.configuration,u)} isn't supported by any of the available linkers`);let v=await M1({project:e,locator:t,binFolder:r,lifecycleScript:a});await vU(r,await Kx(t,{project:e}));let b=await I.findPackageLocation(u,E),C=new gn(b,{baseFs:A}),T=await Mt.find(Bt.dot,{baseFs:C});return typeof o>"u"&&(o=b),{manifest:T,binFolder:r,env:v,cwd:o}})}async function rue(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u}){return await Vx(t.anchoredLocator,e,r,{cwd:o,project:t.project,stdin:a,stdout:n,stderr:u})}function IU(t,e){return t.manifest.scripts.has(e)}async function nue(t,e,{cwd:r,report:o}){let{configuration:a}=t.project,n=null;await oe.mktempPromise(async u=>{let A=K.join(u,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${ue.fromPortablePath(t.cwd)}") -`,{stdout:h,stderr:E}=a.getSubprocessStreams(A,{report:o,prefix:jr(a,t.anchoredLocator),header:p});o.reportInfo(36,`Calling the "${e}" lifecycle script`);let I=await rue(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),I!==0)throw oe.detachTemp(u),new zt(36,`${(0,Xce.default)(e)} script failed (exit code ${Ot(a,I,yt.NUMBER)}, logs can be found here: ${Ot(a,A,yt.PATH)}); run ${Ot(a,`yarn ${e}`,yt.CODE)} to investigate`)})}async function kat(t,e,r){IU(t,e)&&await nue(t,e,r)}function BU(t){let e=K.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),o;try{o=oe.openSync(t,"r")}catch{return!0}try{oe.readSync(o,r,0,r.length,0)}finally{oe.closeSync(o)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function Kx(t,{project:e}){let r=e.configuration,o=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r,t)} not found in the project`);let n=new fh.Writable,u=r.getLinkers(),A={project:e,report:new Nt({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let I=e.storedResolutions.get(E.descriptorHash);if(!I)throw new Error(`Assertion failed: The resolution (${qn(r,E)}) should have been registered`);p.add(I)}let h=await Promise.all(Array.from(p,async E=>{let I=e.storedPackages.get(E);if(!I)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(I.bin.size===0)return sl.skip;let v=u.find(C=>C.supportsPackage(I,A));if(!v)return sl.skip;let b=null;try{b=await v.findPackageLocation(I,A)}catch(C){if(C.code==="LOCATOR_NOT_INSTALLED")return sl.skip;throw C}return{dependency:I,packageLocation:b}}));for(let E of h){if(E===sl.skip)continue;let{dependency:I,packageLocation:v}=E;for(let[b,C]of I.bin){let T=K.resolve(v,C);o.set(b,[I,ue.fromPortablePath(T),BU(T)])}}return o}async function iue(t){return await Kx(t.anchoredLocator,{project:t.project})}async function vU(t,e){await Promise.all(Array.from(e,([r,[,o,a]])=>a?Ah(t,r,process.execPath,[o]):Ah(t,r,o,[])))}async function sue(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await Kx(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${jr(a.configuration,t)}`);return await oe.mktempPromise(async I=>{let[,v]=E,b=await M1({project:a,locator:t,binFolder:I});await vU(b.BERRY_BIN_FOLDER,h);let C=BU(ue.toPortablePath(v))?Gc(process.execPath,[...p,v,...r],{cwd:o,env:b,stdin:n,stdout:u,stderr:A}):Gc(v,r,{cwd:o,env:b,stdin:n,stdout:u,stderr:A}),T;try{T=await C}finally{await oe.removePromise(b.BERRY_BIN_FOLDER)}return T.code})}async function Qat(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A}){return await sue(t.anchoredLocator,e,r,{project:t.project,cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A})}var Xce,Zce,fh,$ce,Dat,Pat,DU=Et(()=>{Pt();Pt();nA();b1();Xce=$e(EU()),Zce=$e(nd()),fh=Be("stream");AE();Yl();L1();N1();Px();ql();jl();kf();xo();$ce=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))($ce||{});Dat=2,Pat=(0,Zce.default)(Dat)});var LE=_((M4t,aue)=>{"use strict";var oue=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]);aue.exports=t=>t?Object.keys(t).map(e=>[oue.has(e)?oue.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var OE=_((O4t,due)=>{"use strict";var lue=typeof process=="object"&&process?process:{stdout:null,stderr:null},Fat=Be("events"),cue=Be("stream"),uue=Be("string_decoder").StringDecoder,Mf=Symbol("EOF"),Of=Symbol("maybeEmitEnd"),ph=Symbol("emittedEnd"),Jx=Symbol("emittingEnd"),O1=Symbol("emittedError"),zx=Symbol("closed"),Aue=Symbol("read"),Xx=Symbol("flush"),fue=Symbol("flushChunk"),ka=Symbol("encoding"),Uf=Symbol("decoder"),Zx=Symbol("flowing"),U1=Symbol("paused"),ME=Symbol("resume"),Fs=Symbol("bufferLength"),PU=Symbol("bufferPush"),SU=Symbol("bufferShift"),Fo=Symbol("objectMode"),To=Symbol("destroyed"),xU=Symbol("emitData"),pue=Symbol("emitEnd"),bU=Symbol("emitEnd2"),_f=Symbol("async"),_1=t=>Promise.resolve().then(t),hue=global._MP_NO_ITERATOR_SYMBOLS_!=="1",Tat=hue&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),Rat=hue&&Symbol.iterator||Symbol("iterator not implemented"),Nat=t=>t==="end"||t==="finish"||t==="prefinish",Lat=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Mat=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),$x=class{constructor(e,r,o){this.src=e,this.dest=r,this.opts=o,this.ondrain=()=>e[ME](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},kU=class extends $x{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,o){super(e,r,o),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};due.exports=class gue extends cue{constructor(e){super(),this[Zx]=!1,this[U1]=!1,this.pipes=[],this.buffer=[],this[Fo]=e&&e.objectMode||!1,this[Fo]?this[ka]=null:this[ka]=e&&e.encoding||null,this[ka]==="buffer"&&(this[ka]=null),this[_f]=e&&!!e.async||!1,this[Uf]=this[ka]?new uue(this[ka]):null,this[Mf]=!1,this[ph]=!1,this[Jx]=!1,this[zx]=!1,this[O1]=null,this.writable=!0,this.readable=!0,this[Fs]=0,this[To]=!1}get bufferLength(){return this[Fs]}get encoding(){return this[ka]}set encoding(e){if(this[Fo])throw new Error("cannot set encoding in objectMode");if(this[ka]&&e!==this[ka]&&(this[Uf]&&this[Uf].lastNeed||this[Fs]))throw new Error("cannot change encoding");this[ka]!==e&&(this[Uf]=e?new uue(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[Uf].write(r)))),this[ka]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Fo]}set objectMode(e){this[Fo]=this[Fo]||!!e}get async(){return this[_f]}set async(e){this[_f]=this[_f]||!!e}write(e,r,o){if(this[Mf])throw new Error("write after end");if(this[To])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(o=r,r="utf8"),r||(r="utf8");let a=this[_f]?_1:n=>n();return!this[Fo]&&!Buffer.isBuffer(e)&&(Mat(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):Lat(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Fo]?(this.flowing&&this[Fs]!==0&&this[Xx](!0),this.flowing?this.emit("data",e):this[PU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):e.length?(typeof e=="string"&&!(r===this[ka]&&!this[Uf].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ka]&&(e=this[Uf].write(e)),this.flowing&&this[Fs]!==0&&this[Xx](!0),this.flowing?this.emit("data",e):this[PU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):(this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing)}read(e){if(this[To])return null;if(this[Fs]===0||e===0||e>this[Fs])return this[Of](),null;this[Fo]&&(e=null),this.buffer.length>1&&!this[Fo]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Fs])]);let r=this[Aue](e||null,this.buffer[0]);return this[Of](),r}[Aue](e,r){return e===r.length||e===null?this[SU]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Fs]-=e),this.emit("data",r),!this.buffer.length&&!this[Mf]&&this.emit("drain"),r}end(e,r,o){return typeof e=="function"&&(o=e,e=null),typeof r=="function"&&(o=r,r="utf8"),e&&this.write(e,r),o&&this.once("end",o),this[Mf]=!0,this.writable=!1,(this.flowing||!this[U1])&&this[Of](),this}[ME](){this[To]||(this[U1]=!1,this[Zx]=!0,this.emit("resume"),this.buffer.length?this[Xx]():this[Mf]?this[Of]():this.emit("drain"))}resume(){return this[ME]()}pause(){this[Zx]=!1,this[U1]=!0}get destroyed(){return this[To]}get flowing(){return this[Zx]}get paused(){return this[U1]}[PU](e){this[Fo]?this[Fs]+=1:this[Fs]+=e.length,this.buffer.push(e)}[SU](){return this.buffer.length&&(this[Fo]?this[Fs]-=1:this[Fs]-=this.buffer[0].length),this.buffer.shift()}[Xx](e){do;while(this[fue](this[SU]()));!e&&!this.buffer.length&&!this[Mf]&&this.emit("drain")}[fue](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[To])return;let o=this[ph];return r=r||{},e===lue.stdout||e===lue.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,o?r.end&&e.end():(this.pipes.push(r.proxyErrors?new kU(this,e,r):new $x(this,e,r)),this[_f]?_1(()=>this[ME]()):this[ME]()),e}unpipe(e){let r=this.pipes.find(o=>o.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let o=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[ME]():e==="readable"&&this[Fs]!==0?super.emit("readable"):Nat(e)&&this[ph]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[O1]&&(this[_f]?_1(()=>r.call(this,this[O1])):r.call(this,this[O1])),o}get emittedEnd(){return this[ph]}[Of](){!this[Jx]&&!this[ph]&&!this[To]&&this.buffer.length===0&&this[Mf]&&(this[Jx]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[zx]&&this.emit("close"),this[Jx]=!1)}emit(e,r,...o){if(e!=="error"&&e!=="close"&&e!==To&&this[To])return;if(e==="data")return r?this[_f]?_1(()=>this[xU](r)):this[xU](r):!1;if(e==="end")return this[pue]();if(e==="close"){if(this[zx]=!0,!this[ph]&&!this[To])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[O1]=r;let n=super.emit("error",r);return this[Of](),n}else if(e==="resume"){let n=super.emit("resume");return this[Of](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...o);return this[Of](),a}[xU](e){for(let o of this.pipes)o.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Of](),r}[pue](){this[ph]||(this[ph]=!0,this.readable=!1,this[_f]?_1(()=>this[bU]()):this[bU]())}[bU](){if(this[Uf]){let r=this[Uf].end();if(r){for(let o of this.pipes)o.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[Fo]||(e.dataLength=0);let r=this.promise();return this.on("data",o=>{e.push(o),this[Fo]||(e.dataLength+=o.length)}),r.then(()=>e)}concat(){return this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this[ka]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(To,()=>r(new Error("stream destroyed"))),this.on("error",o=>r(o)),this.on("end",()=>e())})}[Tat](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[Mf])return Promise.resolve({done:!0});let o=null,a=null,n=h=>{this.removeListener("data",u),this.removeListener("end",A),a(h)},u=h=>{this.removeListener("error",n),this.removeListener("end",A),this.pause(),o({value:h,done:!!this[Mf]})},A=()=>{this.removeListener("error",n),this.removeListener("data",u),o({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,o=h,this.once(To,p),this.once("error",n),this.once("end",A),this.once("data",u)})}}}[Rat](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[To]?(e?this.emit("error",e):this.emit(To),this):(this[To]=!0,this.buffer.length=0,this[Fs]=0,typeof this.close=="function"&&!this[zx]&&this.close(),e?this.emit("error",e):this.emit(To),this)}static isStream(e){return!!e&&(e instanceof gue||e instanceof cue||e instanceof Fat&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var yue=_((U4t,mue)=>{var Oat=Be("zlib").constants||{ZLIB_VERNUM:4736};mue.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},Oat))});var WU=_(cl=>{"use strict";var NU=Be("assert"),hh=Be("buffer").Buffer,wue=Be("zlib"),Qd=cl.constants=yue(),Uat=OE(),Eue=hh.concat,Fd=Symbol("_superWrite"),_E=class extends Error{constructor(e){super("zlib: "+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},_at=Symbol("opts"),H1=Symbol("flushFlag"),Cue=Symbol("finishFlushFlag"),YU=Symbol("fullFlushFlag"),ti=Symbol("handle"),eb=Symbol("onError"),UE=Symbol("sawError"),QU=Symbol("level"),FU=Symbol("strategy"),TU=Symbol("ended"),_4t=Symbol("_defaultFullFlush"),tb=class extends Uat{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[UE]=!1,this[TU]=!1,this[_at]=e,this[H1]=e.flush,this[Cue]=e.finishFlush;try{this[ti]=new wue[r](e)}catch(o){throw new _E(o)}this[eb]=o=>{this[UE]||(this[UE]=!0,this.close(),this.emit("error",o))},this[ti].on("error",o=>this[eb](new _E(o))),this.once("end",()=>this.close)}close(){this[ti]&&(this[ti].close(),this[ti]=null,this.emit("close"))}reset(){if(!this[UE])return NU(this[ti],"zlib binding closed"),this[ti].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[YU]),this.write(Object.assign(hh.alloc(0),{[H1]:e})))}end(e,r,o){return e&&this.write(e,r),this.flush(this[Cue]),this[TU]=!0,super.end(null,null,o)}get ended(){return this[TU]}write(e,r,o){if(typeof r=="function"&&(o=r,r="utf8"),typeof e=="string"&&(e=hh.from(e,r)),this[UE])return;NU(this[ti],"zlib binding closed");let a=this[ti]._handle,n=a.close;a.close=()=>{};let u=this[ti].close;this[ti].close=()=>{},hh.concat=h=>h;let A;try{let h=typeof e[H1]=="number"?e[H1]:this[H1];A=this[ti]._processChunk(e,h),hh.concat=Eue}catch(h){hh.concat=Eue,this[eb](new _E(h))}finally{this[ti]&&(this[ti]._handle=a,a.close=n,this[ti].close=u,this[ti].removeAllListeners("error"))}this[ti]&&this[ti].on("error",h=>this[eb](new _E(h)));let p;if(A)if(Array.isArray(A)&&A.length>0){p=this[Fd](hh.from(A[0]));for(let h=1;h{this.flush(a),n()};try{this[ti].params(e,r)}finally{this[ti].flush=o}this[ti]&&(this[QU]=e,this[FU]=r)}}}},LU=class extends Hf{constructor(e){super(e,"Deflate")}},MU=class extends Hf{constructor(e){super(e,"Inflate")}},RU=Symbol("_portable"),OU=class extends Hf{constructor(e){super(e,"Gzip"),this[RU]=e&&!!e.portable}[Fd](e){return this[RU]?(this[RU]=!1,e[9]=255,super[Fd](e)):super[Fd](e)}},UU=class extends Hf{constructor(e){super(e,"Gunzip")}},_U=class extends Hf{constructor(e){super(e,"DeflateRaw")}},HU=class extends Hf{constructor(e){super(e,"InflateRaw")}},jU=class extends Hf{constructor(e){super(e,"Unzip")}},rb=class extends tb{constructor(e,r){e=e||{},e.flush=e.flush||Qd.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Qd.BROTLI_OPERATION_FINISH,super(e,r),this[YU]=Qd.BROTLI_OPERATION_FLUSH}},qU=class extends rb{constructor(e){super(e,"BrotliCompress")}},GU=class extends rb{constructor(e){super(e,"BrotliDecompress")}};cl.Deflate=LU;cl.Inflate=MU;cl.Gzip=OU;cl.Gunzip=UU;cl.DeflateRaw=_U;cl.InflateRaw=HU;cl.Unzip=jU;typeof wue.BrotliCompress=="function"?(cl.BrotliCompress=qU,cl.BrotliDecompress=GU):cl.BrotliCompress=cl.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var HE=_((q4t,Iue)=>{var Hat=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;Iue.exports=Hat!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var nb=_((Y4t,Bue)=>{"use strict";var jat=OE(),VU=HE(),KU=Symbol("slurp");Bue.exports=class extends jat{constructor(e,r,o){switch(super(),this.pause(),this.extended=r,this.globalExtended=o,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=VU(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=VU(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[KU](r),o&&this[KU](o,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let o=this.remain,a=this.blockRemain;return this.remain=Math.max(0,o-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:o>=r?super.write(e):super.write(e.slice(0,o))}[KU](e,r){for(let o in e)e[o]!==null&&e[o]!==void 0&&!(r&&o==="path")&&(this[o]=o==="path"||o==="linkpath"?VU(e[o]):e[o])}}});var JU=_(ib=>{"use strict";ib.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);ib.code=new Map(Array.from(ib.name).map(t=>[t[1],t[0]]))});var Sue=_((V4t,Pue)=>{"use strict";var qat=(t,e)=>{if(Number.isSafeInteger(t))t<0?Yat(t,e):Gat(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Gat=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},Yat=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var o=e.length;o>1;o--){var a=t&255;t=Math.floor(t/256),r?e[o-1]=vue(a):a===0?e[o-1]=0:(r=!0,e[o-1]=Due(a))}},Wat=t=>{let e=t[0],r=e===128?Kat(t.slice(1,t.length)):e===255?Vat(t):null;if(r===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(r))throw Error("parsed number outside of javascript safe integer range");return r},Vat=t=>{for(var e=t.length,r=0,o=!1,a=e-1;a>-1;a--){var n=t[a],u;o?u=vue(n):n===0?u=n:(o=!0,u=Due(n)),u!==0&&(r-=u*Math.pow(256,e-a-1))}return r},Kat=t=>{for(var e=t.length,r=0,o=e-1;o>-1;o--){var a=t[o];a!==0&&(r+=a*Math.pow(256,e-o-1))}return r},vue=t=>(255^t)&255,Due=t=>(255^t)+1&255;Pue.exports={encode:qat,parse:Wat}});var qE=_((K4t,bue)=>{"use strict";var zU=JU(),jE=Be("path").posix,xue=Sue(),XU=Symbol("slurp"),ul=Symbol("type"),e3=class{constructor(e,r,o,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[ul]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,o,a):e&&this.set(e)}decode(e,r,o,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=Td(e,r,100),this.mode=gh(e,r+100,8),this.uid=gh(e,r+108,8),this.gid=gh(e,r+116,8),this.size=gh(e,r+124,12),this.mtime=ZU(e,r+136,12),this.cksum=gh(e,r+148,12),this[XU](o),this[XU](a,!0),this[ul]=Td(e,r+156,1),this[ul]===""&&(this[ul]="0"),this[ul]==="0"&&this.path.substr(-1)==="/"&&(this[ul]="5"),this[ul]==="5"&&(this.size=0),this.linkpath=Td(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=Td(e,r+265,32),this.gname=Td(e,r+297,32),this.devmaj=gh(e,r+329,8),this.devmin=gh(e,r+337,8),e[r+475]!==0){let u=Td(e,r+345,155);this.path=u+"/"+this.path}else{let u=Td(e,r+345,130);u&&(this.path=u+"/"+this.path),this.atime=ZU(e,r+476,12),this.ctime=ZU(e,r+488,12)}let n=8*32;for(let u=r;u=r+512))throw new Error("need 512 bytes for header");let o=this.ctime||this.atime?130:155,a=Jat(this.path||"",o),n=a[0],u=a[1];this.needPax=a[2],this.needPax=Rd(e,r,100,n)||this.needPax,this.needPax=dh(e,r+100,8,this.mode)||this.needPax,this.needPax=dh(e,r+108,8,this.uid)||this.needPax,this.needPax=dh(e,r+116,8,this.gid)||this.needPax,this.needPax=dh(e,r+124,12,this.size)||this.needPax,this.needPax=$U(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[ul].charCodeAt(0),this.needPax=Rd(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Rd(e,r+265,32,this.uname)||this.needPax,this.needPax=Rd(e,r+297,32,this.gname)||this.needPax,this.needPax=dh(e,r+329,8,this.devmaj)||this.needPax,this.needPax=dh(e,r+337,8,this.devmin)||this.needPax,this.needPax=Rd(e,r+345,o,u)||this.needPax,e[r+475]!==0?this.needPax=Rd(e,r+345,155,u)||this.needPax:(this.needPax=Rd(e,r+345,130,u)||this.needPax,this.needPax=$U(e,r+476,12,this.atime)||this.needPax,this.needPax=$U(e,r+488,12,this.ctime)||this.needPax);let A=8*32;for(let p=r;p{let o=t,a="",n,u=jE.parse(t).root||".";if(Buffer.byteLength(o)<100)n=[o,a,!1];else{a=jE.dirname(o),o=jE.basename(o);do Buffer.byteLength(o)<=100&&Buffer.byteLength(a)<=e?n=[o,a,!1]:Buffer.byteLength(o)>100&&Buffer.byteLength(a)<=e?n=[o.substr(0,100-1),a,!0]:(o=jE.join(jE.basename(a),o),a=jE.dirname(a));while(a!==u&&!n);n||(n=[t.substr(0,100-1),"",!0])}return n},Td=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),ZU=(t,e,r)=>zat(gh(t,e,r)),zat=t=>t===null?null:new Date(t*1e3),gh=(t,e,r)=>t[e]&128?xue.parse(t.slice(e,e+r)):Zat(t,e,r),Xat=t=>isNaN(t)?null:t,Zat=(t,e,r)=>Xat(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),$at={12:8589934591,8:2097151},dh=(t,e,r,o)=>o===null?!1:o>$at[r]||o<0?(xue.encode(o,t.slice(e,e+r)),!0):(elt(t,e,r,o),!1),elt=(t,e,r,o)=>t.write(tlt(o,r),e,r,"ascii"),tlt=(t,e)=>rlt(Math.floor(t).toString(8),e),rlt=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",$U=(t,e,r,o)=>o===null?!1:dh(t,e,r,o.getTime()/1e3),nlt=new Array(156).join("\0"),Rd=(t,e,r,o)=>o===null?!1:(t.write(o+nlt,e,r,"utf8"),o.length!==Buffer.byteLength(o)||o.length>r);bue.exports=e3});var sb=_((J4t,kue)=>{"use strict";var ilt=qE(),slt=Be("path"),j1=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),o=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(o);for(let n=0;n<512;n++)a[n]=0;new ilt({path:("PaxHeader/"+slt.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+o}};j1.parse=(t,e,r)=>new j1(olt(alt(t),e),r);var olt=(t,e)=>e?Object.keys(t).reduce((r,o)=>(r[o]=t[o],r),e):t,alt=t=>t.replace(/\n$/,"").split(` -`).reduce(llt,Object.create(null)),llt=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let o=e.split("="),a=o.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=o.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};kue.exports=j1});var GE=_((z4t,Que)=>{Que.exports=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)}});var ob=_((X4t,Fue)=>{"use strict";Fue.exports=t=>class extends t{warn(e,r,o={}){this.file&&(o.file=this.file),this.cwd&&(o.cwd=this.cwd),o.code=r instanceof Error&&r.code||e,o.tarCode=e,!this.strict&&o.recoverable!==!1?(r instanceof Error&&(o=Object.assign(r,o),r=r.message),this.emit("warn",o.tarCode,r,o)):r instanceof Error?this.emit("error",Object.assign(r,o)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),o))}}});var r3=_(($4t,Tue)=>{"use strict";var ab=["|","<",">","?",":"],t3=ab.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),clt=new Map(ab.map((t,e)=>[t,t3[e]])),ult=new Map(t3.map((t,e)=>[t,ab[e]]));Tue.exports={encode:t=>ab.reduce((e,r)=>e.split(r).join(clt.get(r)),t),decode:t=>t3.reduce((e,r)=>e.split(r).join(ult.get(r)),t)}});var n3=_((eUt,Nue)=>{var{isAbsolute:Alt,parse:Rue}=Be("path").win32;Nue.exports=t=>{let e="",r=Rue(t);for(;Alt(t)||r.root;){let o=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(o.length),e+=o,r=Rue(t)}return[e,t]}});var Mue=_((tUt,Lue)=>{"use strict";Lue.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var p3=_((iUt,Xue)=>{"use strict";var Gue=OE(),Yue=sb(),Wue=qE(),oA=Be("fs"),Oue=Be("path"),sA=HE(),flt=GE(),Vue=(t,e)=>e?(t=sA(t).replace(/^\.(\/|$)/,""),flt(e)+"/"+t):sA(t),plt=16*1024*1024,Uue=Symbol("process"),_ue=Symbol("file"),Hue=Symbol("directory"),s3=Symbol("symlink"),jue=Symbol("hardlink"),q1=Symbol("header"),lb=Symbol("read"),o3=Symbol("lstat"),ub=Symbol("onlstat"),a3=Symbol("onread"),l3=Symbol("onreadlink"),c3=Symbol("openfile"),u3=Symbol("onopenfile"),mh=Symbol("close"),Ab=Symbol("mode"),A3=Symbol("awaitDrain"),i3=Symbol("ondrain"),aA=Symbol("prefix"),que=Symbol("hadError"),Kue=ob(),hlt=r3(),Jue=n3(),zue=Mue(),fb=Kue(class extends Gue{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=sA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||plt,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=sA(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,this.prefix=r.prefix?sA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Jue(this.path);a&&(this.path=n,o=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=hlt.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=sA(r.absolute||Oue.resolve(this.cwd,e)),this.path===""&&(this.path="./"),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.statCache.has(this.absolute)?this[ub](this.statCache.get(this.absolute)):this[o3]()}emit(e,...r){return e==="error"&&(this[que]=!0),super.emit(e,...r)}[o3](){oA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[ub](r)})}[ub](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=dlt(e),this.emit("stat",e),this[Uue]()}[Uue](){switch(this.type){case"File":return this[_ue]();case"Directory":return this[Hue]();case"SymbolicLink":return this[s3]();default:return this.end()}}[Ab](e){return zue(e,this.type==="Directory",this.portable)}[aA](e){return Vue(e,this.prefix)}[q1](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new Wue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this[Ab](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new Yue({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[Hue](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[q1](),this.end()}[s3](){oA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[l3](r)})}[l3](e){this.linkpath=sA(e),this[q1](),this.end()}[jue](e){this.type="Link",this.linkpath=sA(Oue.relative(this.cwd,e)),this.stat.size=0,this[q1](),this.end()}[_ue](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let r=this.linkCache.get(e);if(r.indexOf(this.cwd)===0)return this[jue](r)}this.linkCache.set(e,this.absolute)}if(this[q1](),this.stat.size===0)return this.end();this[c3]()}[c3](){oA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[u3](r)})}[u3](e){if(this.fd=e,this[que])return this[mh]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let r=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(r),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[lb]()}[lb](){let{fd:e,buf:r,offset:o,length:a,pos:n}=this;oA.read(e,r,o,a,n,(u,A)=>{if(u)return this[mh](()=>this.emit("error",u));this[a3](A)})}[mh](e){oA.close(this.fd,e)}[a3](e){if(e<=0&&this.remain>0){let a=new Error("encountered unexpected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[mh](()=>this.emit("error",a))}if(e>this.remain){let a=new Error("did not encounter expected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[mh](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[i3]())}[A3](e){this.once("drain",e)}write(e){if(this.blockRemaine?this.emit("error",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[lb]()}}),f3=class extends fb{[o3](){this[ub](oA.lstatSync(this.absolute))}[s3](){this[l3](oA.readlinkSync(this.absolute))}[c3](){this[u3](oA.openSync(this.absolute,"r"))}[lb](){let e=!0;try{let{fd:r,buf:o,offset:a,length:n,pos:u}=this,A=oA.readSync(r,o,a,n,u);this[a3](A),e=!1}finally{if(e)try{this[mh](()=>{})}catch{}}}[A3](e){e()}[mh](e){oA.closeSync(this.fd),e()}},glt=Kue(class extends Gue{constructor(e,r){r=r||{},super(r),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=r.prefix||null,this.path=sA(e.path),this.mode=this[Ab](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:r.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=sA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Jue(this.path);a&&(this.path=n,o=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new Wue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.header.encode()&&!this.noPax&&super.write(new Yue({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[aA](e){return Vue(e,this.prefix)}[Ab](e){return zue(e,this.type==="Directory",this.portable)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});fb.Sync=f3;fb.Tar=glt;var dlt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Xue.exports=fb});var wb=_((oUt,iAe)=>{"use strict";var Eb=class{constructor(e,r){this.path=e||"./",this.absolute=r,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},mlt=OE(),ylt=WU(),Elt=nb(),I3=p3(),Clt=I3.Sync,wlt=I3.Tar,Ilt=BP(),Zue=Buffer.alloc(1024),gb=Symbol("onStat"),pb=Symbol("ended"),lA=Symbol("queue"),YE=Symbol("current"),Nd=Symbol("process"),hb=Symbol("processing"),$ue=Symbol("processJob"),cA=Symbol("jobs"),h3=Symbol("jobDone"),db=Symbol("addFSEntry"),eAe=Symbol("addTarEntry"),y3=Symbol("stat"),E3=Symbol("readdir"),mb=Symbol("onreaddir"),yb=Symbol("pipe"),tAe=Symbol("entry"),g3=Symbol("entryOpt"),C3=Symbol("writeEntryClass"),nAe=Symbol("write"),d3=Symbol("ondrain"),Cb=Be("fs"),rAe=Be("path"),Blt=ob(),m3=HE(),B3=Blt(class extends mlt{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=m3(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[C3]=I3,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new ylt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[d3]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[d3]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:r=>!0,this[lA]=new Ilt,this[cA]=0,this.jobs=+e.jobs||4,this[hb]=!1,this[pb]=!1}[nAe](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[pb]=!0,this[Nd](),this}write(e){if(this[pb])throw new Error("write after end");return e instanceof Elt?this[eAe](e):this[db](e),this.flowing}[eAe](e){let r=m3(rAe.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let o=new Eb(e.path,r,!1);o.entry=new wlt(e,this[g3](o)),o.entry.on("end",a=>this[h3](o)),this[cA]+=1,this[lA].push(o)}this[Nd]()}[db](e){let r=m3(rAe.resolve(this.cwd,e));this[lA].push(new Eb(e,r)),this[Nd]()}[y3](e){e.pending=!0,this[cA]+=1;let r=this.follow?"stat":"lstat";Cb[r](e.absolute,(o,a)=>{e.pending=!1,this[cA]-=1,o?this.emit("error",o):this[gb](e,a)})}[gb](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[Nd]()}[E3](e){e.pending=!0,this[cA]+=1,Cb.readdir(e.absolute,(r,o)=>{if(e.pending=!1,this[cA]-=1,r)return this.emit("error",r);this[mb](e,o)})}[mb](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[Nd]()}[Nd](){if(!this[hb]){this[hb]=!0;for(let e=this[lA].head;e!==null&&this[cA]this.warn(r,o,a),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[tAe](e){this[cA]+=1;try{return new this[C3](e.path,this[g3](e)).on("end",()=>this[h3](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[d3](){this[YE]&&this[YE].entry&&this[YE].entry.resume()}[yb](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[db](u+a)});let r=e.entry,o=this.zip;o?r.on("data",a=>{o.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),w3=class extends B3{constructor(e){super(e),this[C3]=Clt}pause(){}resume(){}[y3](e){let r=this.follow?"statSync":"lstatSync";this[gb](e,Cb[r](e.absolute))}[E3](e,r){this[mb](e,Cb.readdirSync(e.absolute))}[yb](e){let r=e.entry,o=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[db](u+a)}),o?r.on("data",a=>{o.write(a)}):r.on("data",a=>{super[nAe](a)})}};B3.Sync=w3;iAe.exports=B3});var $E=_(Y1=>{"use strict";var vlt=OE(),Dlt=Be("events").EventEmitter,Qa=Be("fs"),P3=Qa.writev;if(!P3){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;P3=(r,o,a,n)=>{let u=(p,h)=>n(p,h,o),A=new e;A.oncomplete=u,t.writeBuffers(r,o,a,A)}}var XE=Symbol("_autoClose"),Yc=Symbol("_close"),G1=Symbol("_ended"),Gn=Symbol("_fd"),sAe=Symbol("_finished"),Eh=Symbol("_flags"),v3=Symbol("_flush"),S3=Symbol("_handleChunk"),x3=Symbol("_makeBuf"),Pb=Symbol("_mode"),Ib=Symbol("_needDrain"),JE=Symbol("_onerror"),ZE=Symbol("_onopen"),D3=Symbol("_onread"),VE=Symbol("_onwrite"),Ch=Symbol("_open"),jf=Symbol("_path"),Ld=Symbol("_pos"),uA=Symbol("_queue"),KE=Symbol("_read"),oAe=Symbol("_readSize"),yh=Symbol("_reading"),Bb=Symbol("_remain"),aAe=Symbol("_size"),vb=Symbol("_write"),WE=Symbol("_writing"),Db=Symbol("_defaultFlag"),zE=Symbol("_errored"),Sb=class extends vlt{constructor(e,r){if(r=r||{},super(r),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[zE]=!1,this[Gn]=typeof r.fd=="number"?r.fd:null,this[jf]=e,this[oAe]=r.readSize||16*1024*1024,this[yh]=!1,this[aAe]=typeof r.size=="number"?r.size:1/0,this[Bb]=this[aAe],this[XE]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[Gn]=="number"?this[KE]():this[Ch]()}get fd(){return this[Gn]}get path(){return this[jf]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[Ch](){Qa.open(this[jf],"r",(e,r)=>this[ZE](e,r))}[ZE](e,r){e?this[JE](e):(this[Gn]=r,this.emit("open",r),this[KE]())}[x3](){return Buffer.allocUnsafe(Math.min(this[oAe],this[Bb]))}[KE](){if(!this[yh]){this[yh]=!0;let e=this[x3]();if(e.length===0)return process.nextTick(()=>this[D3](null,0,e));Qa.read(this[Gn],e,0,e.length,null,(r,o,a)=>this[D3](r,o,a))}}[D3](e,r,o){this[yh]=!1,e?this[JE](e):this[S3](r,o)&&this[KE]()}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[JE](e){this[yh]=!0,this[Yc](),this.emit("error",e)}[S3](e,r){let o=!1;return this[Bb]-=e,e>0&&(o=super.write(ethis[ZE](e,r))}[ZE](e,r){this[Db]&&this[Eh]==="r+"&&e&&e.code==="ENOENT"?(this[Eh]="w",this[Ch]()):e?this[JE](e):(this[Gn]=r,this.emit("open",r),this[v3]())}end(e,r){return e&&this.write(e,r),this[G1]=!0,!this[WE]&&!this[uA].length&&typeof this[Gn]=="number"&&this[VE](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[G1]?(this.emit("error",new Error("write() after end()")),!1):this[Gn]===null||this[WE]||this[uA].length?(this[uA].push(e),this[Ib]=!0,!1):(this[WE]=!0,this[vb](e),!0)}[vb](e){Qa.write(this[Gn],e,0,e.length,this[Ld],(r,o)=>this[VE](r,o))}[VE](e,r){e?this[JE](e):(this[Ld]!==null&&(this[Ld]+=r),this[uA].length?this[v3]():(this[WE]=!1,this[G1]&&!this[sAe]?(this[sAe]=!0,this[Yc](),this.emit("finish")):this[Ib]&&(this[Ib]=!1,this.emit("drain"))))}[v3](){if(this[uA].length===0)this[G1]&&this[VE](null,0);else if(this[uA].length===1)this[vb](this[uA].pop());else{let e=this[uA];this[uA]=[],P3(this[Gn],e,this[Ld],(r,o)=>this[VE](r,o))}}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},k3=class extends xb{[Ch](){let e;if(this[Db]&&this[Eh]==="r+")try{e=Qa.openSync(this[jf],this[Eh],this[Pb])}catch(r){if(r.code==="ENOENT")return this[Eh]="w",this[Ch]();throw r}else e=Qa.openSync(this[jf],this[Eh],this[Pb]);this[ZE](null,e)}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.closeSync(e),this.emit("close")}}[vb](e){let r=!0;try{this[VE](null,Qa.writeSync(this[Gn],e,0,e.length,this[Ld])),r=!1}finally{if(r)try{this[Yc]()}catch{}}}};Y1.ReadStream=Sb;Y1.ReadStreamSync=b3;Y1.WriteStream=xb;Y1.WriteStreamSync=k3});var Nb=_((cUt,hAe)=>{"use strict";var Plt=ob(),Slt=qE(),xlt=Be("events"),blt=BP(),klt=1024*1024,Qlt=nb(),lAe=sb(),Flt=WU(),Q3=Buffer.from([31,139]),Xl=Symbol("state"),Md=Symbol("writeEntry"),qf=Symbol("readEntry"),F3=Symbol("nextEntry"),cAe=Symbol("processEntry"),Zl=Symbol("extendedHeader"),W1=Symbol("globalExtendedHeader"),wh=Symbol("meta"),uAe=Symbol("emitMeta"),fi=Symbol("buffer"),Gf=Symbol("queue"),Od=Symbol("ended"),AAe=Symbol("emittedEnd"),Ud=Symbol("emit"),Fa=Symbol("unzip"),bb=Symbol("consumeChunk"),kb=Symbol("consumeChunkSub"),T3=Symbol("consumeBody"),fAe=Symbol("consumeMeta"),pAe=Symbol("consumeHeader"),Qb=Symbol("consuming"),R3=Symbol("bufferConcat"),N3=Symbol("maybeEnd"),V1=Symbol("writing"),Ih=Symbol("aborted"),Fb=Symbol("onDone"),_d=Symbol("sawValidEntry"),Tb=Symbol("sawNullBlock"),Rb=Symbol("sawEOF"),Tlt=t=>!0;hAe.exports=Plt(class extends xlt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[_d]=null,this.on(Fb,r=>{(this[Xl]==="begin"||this[_d]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(Fb,e.ondone):this.on(Fb,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||klt,this.filter=typeof e.filter=="function"?e.filter:Tlt,this.writable=!0,this.readable=!1,this[Gf]=new blt,this[fi]=null,this[qf]=null,this[Md]=null,this[Xl]="begin",this[wh]="",this[Zl]=null,this[W1]=null,this[Od]=!1,this[Fa]=null,this[Ih]=!1,this[Tb]=!1,this[Rb]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[pAe](e,r){this[_d]===null&&(this[_d]=!1);let o;try{o=new Slt(e,r,this[Zl],this[W1])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(o.nullBlock)this[Tb]?(this[Rb]=!0,this[Xl]==="begin"&&(this[Xl]="header"),this[Ud]("eof")):(this[Tb]=!0,this[Ud]("nullBlock"));else if(this[Tb]=!1,!o.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:o});else if(!o.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:o});else{let a=o.type;if(/^(Symbolic)?Link$/.test(a)&&!o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:o});else if(!/^(Symbolic)?Link$/.test(a)&&o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:o});else{let n=this[Md]=new Qlt(o,this[Zl],this[W1]);if(!this[_d])if(n.remain){let u=()=>{n.invalid||(this[_d]=!0)};n.on("end",u)}else this[_d]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[Ud]("ignoredEntry",n),this[Xl]="ignore",n.resume()):n.size>0&&(this[wh]="",n.on("data",u=>this[wh]+=u),this[Xl]="meta"):(this[Zl]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[Ud]("ignoredEntry",n),this[Xl]=n.remain?"ignore":"header",n.resume()):(n.remain?this[Xl]="body":(this[Xl]="header",n.end()),this[qf]?this[Gf].push(n):(this[Gf].push(n),this[F3]())))}}}[cAe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[qf]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",o=>this[F3]()),r=!1)):(this[qf]=null,r=!1),r}[F3](){do;while(this[cAe](this[Gf].shift()));if(!this[Gf].length){let e=this[qf];!e||e.flowing||e.size===e.remain?this[V1]||this.emit("drain"):e.once("drain",o=>this.emit("drain"))}}[T3](e,r){let o=this[Md],a=o.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return o.write(n),o.blockRemain||(this[Xl]="header",this[Md]=null,o.end()),n.length}[fAe](e,r){let o=this[Md],a=this[T3](e,r);return this[Md]||this[uAe](o),a}[Ud](e,r,o){!this[Gf].length&&!this[qf]?this.emit(e,r,o):this[Gf].push([e,r,o])}[uAe](e){switch(this[Ud]("meta",this[wh]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[Zl]=lAe.parse(this[wh],this[Zl],!1);break;case"GlobalExtendedHeader":this[W1]=lAe.parse(this[wh],this[W1],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[Zl]=this[Zl]||Object.create(null),this[Zl].path=this[wh].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[Zl]=this[Zl]||Object.create(null),this[Zl].linkpath=this[wh].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[Ih]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[Ih])return;if(this[Fa]===null&&e){if(this[fi]&&(e=Buffer.concat([this[fi],e]),this[fi]=null),e.lengththis[bb](n)),this[Fa].on("error",n=>this.abort(n)),this[Fa].on("end",n=>{this[Od]=!0,this[bb]()}),this[V1]=!0;let a=this[Fa][o?"end":"write"](e);return this[V1]=!1,a}}this[V1]=!0,this[Fa]?this[Fa].write(e):this[bb](e),this[V1]=!1;let r=this[Gf].length?!1:this[qf]?this[qf].flowing:!0;return!r&&!this[Gf].length&&this[qf].once("drain",o=>this.emit("drain")),r}[R3](e){e&&!this[Ih]&&(this[fi]=this[fi]?Buffer.concat([this[fi],e]):e)}[N3](){if(this[Od]&&!this[AAe]&&!this[Ih]&&!this[Qb]){this[AAe]=!0;let e=this[Md];if(e&&e.blockRemain){let r=this[fi]?this[fi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[fi]&&e.write(this[fi]),e.end()}this[Ud](Fb)}}[bb](e){if(this[Qb])this[R3](e);else if(!e&&!this[fi])this[N3]();else{if(this[Qb]=!0,this[fi]){this[R3](e);let r=this[fi];this[fi]=null,this[kb](r)}else this[kb](e);for(;this[fi]&&this[fi].length>=512&&!this[Ih]&&!this[Rb];){let r=this[fi];this[fi]=null,this[kb](r)}this[Qb]=!1}(!this[fi]||this[Od])&&this[N3]()}[kb](e){let r=0,o=e.length;for(;r+512<=o&&!this[Ih]&&!this[Rb];)switch(this[Xl]){case"begin":case"header":this[pAe](e,r),r+=512;break;case"ignore":case"body":r+=this[T3](e,r);break;case"meta":r+=this[fAe](e,r);break;default:throw new Error("invalid state: "+this[Xl])}r{"use strict";var Rlt=LE(),dAe=Nb(),eC=Be("fs"),Nlt=$E(),gAe=Be("path"),L3=GE();yAe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Rlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Mlt(o,e),o.noResume||Llt(o),o.file&&o.sync?Olt(o):o.file?Ult(o,r):mAe(o)};var Llt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Mlt=(t,e)=>{let r=new Map(e.map(n=>[L3(n),!0])),o=t.filter,a=(n,u)=>{let A=u||gAe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(gAe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(L3(n)):n=>a(L3(n))},Olt=t=>{let e=mAe(t),r=t.file,o=!0,a;try{let n=eC.statSync(r),u=t.maxReadSize||16*1024*1024;if(n.size{let r=new dAe(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("end",u),eC.stat(a,(p,h)=>{if(p)A(p);else{let E=new Nlt.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},mAe=t=>new dAe(t)});var vAe=_((AUt,BAe)=>{"use strict";var _lt=LE(),Mb=wb(),EAe=$E(),CAe=Lb(),wAe=Be("path");BAe.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let o=_lt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return o.file&&o.sync?Hlt(o,e):o.file?jlt(o,e,r):o.sync?qlt(o,e):Glt(o,e)};var Hlt=(t,e)=>{let r=new Mb.Sync(t),o=new EAe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(o),IAe(r,e)},jlt=(t,e,r)=>{let o=new Mb(t),a=new EAe.WriteStream(t.file,{mode:t.mode||438});o.pipe(a);let n=new Promise((u,A)=>{a.on("error",A),a.on("close",u),o.on("error",A)});return M3(o,e),r?n.then(r,r):n},IAe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?CAe({file:wAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},M3=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return CAe({file:wAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>M3(t,e));t.add(r)}t.end()},qlt=(t,e)=>{let r=new Mb.Sync(t);return IAe(r,e),r},Glt=(t,e)=>{let r=new Mb(t);return M3(r,e),r}});var O3=_((fUt,QAe)=>{"use strict";var Ylt=LE(),DAe=wb(),Al=Be("fs"),PAe=$E(),SAe=Lb(),xAe=Be("path"),bAe=qE();QAe.exports=(t,e,r)=>{let o=Ylt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),o.sync?Wlt(o,e):Klt(o,e,r)};var Wlt=(t,e)=>{let r=new DAe.Sync(t),o=!0,a,n;try{try{a=Al.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=Al.openSync(t.file,"w+");else throw p}let u=Al.fstatSync(a),A=Buffer.alloc(512);e:for(n=0;nu.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}o=!1,Vlt(t,r,n,a,e)}finally{if(o)try{Al.closeSync(a)}catch{}}},Vlt=(t,e,r,o,a)=>{let n=new PAe.WriteStreamSync(t.file,{fd:o,start:r});e.pipe(n),Jlt(e,a)},Klt=(t,e,r)=>{e=Array.from(e);let o=new DAe(t),a=(u,A,p)=>{let h=(C,T)=>{C?Al.close(u,L=>p(C)):p(null,T)},E=0;if(A===0)return h(null,0);let I=0,v=Buffer.alloc(512),b=(C,T)=>{if(C)return h(C);if(I+=T,I<512&&T)return Al.read(u,v,I,v.length-I,E+I,b);if(E===0&&v[0]===31&&v[1]===139)return h(new Error("cannot append to compressed archives"));if(I<512)return h(null,E);let L=new bAe(v);if(!L.cksumValid)return h(null,E);let U=512*Math.ceil(L.size/512);if(E+U+512>A||(E+=U+512,E>=A))return h(null,E);t.mtimeCache&&t.mtimeCache.set(L.path,L.mtime),I=0,Al.read(u,v,0,512,E,b)};Al.read(u,v,0,512,E,b)},n=new Promise((u,A)=>{o.on("error",A);let p="r+",h=(E,I)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",Al.open(t.file,p,h);if(E)return A(E);Al.fstat(I,(v,b)=>{if(v)return Al.close(I,()=>A(v));a(I,b.size,(C,T)=>{if(C)return A(C);let L=new PAe.WriteStream(t.file,{fd:I,start:T});o.pipe(L),L.on("error",A),L.on("close",u),kAe(o,e)})})};Al.open(t.file,p,h)});return r?n.then(r,r):n},Jlt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?SAe({file:xAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},kAe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return SAe({file:xAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>kAe(t,e));t.add(r)}t.end()}});var TAe=_((pUt,FAe)=>{"use strict";var zlt=LE(),Xlt=O3();FAe.exports=(t,e,r)=>{let o=zlt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),Zlt(o),Xlt(o,e,r)};var Zlt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,o)=>e(r,o)&&!(t.mtimeCache.get(r)>o.mtime):(r,o)=>!(t.mtimeCache.get(r)>o.mtime)}});var LAe=_((hUt,NAe)=>{var{promisify:RAe}=Be("util"),Bh=Be("fs"),$lt=t=>{if(!t)t={mode:511,fs:Bh};else if(typeof t=="object")t={mode:511,fs:Bh,...t};else if(typeof t=="number")t={mode:t,fs:Bh};else if(typeof t=="string")t={mode:parseInt(t,8),fs:Bh};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||Bh.mkdir,t.mkdirAsync=RAe(t.mkdir),t.stat=t.stat||t.fs.stat||Bh.stat,t.statAsync=RAe(t.stat),t.statSync=t.statSync||t.fs.statSync||Bh.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||Bh.mkdirSync,t};NAe.exports=$lt});var OAe=_((gUt,MAe)=>{var ect=process.platform,{resolve:tct,parse:rct}=Be("path"),nct=t=>{if(/\0/.test(t))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:t,code:"ERR_INVALID_ARG_VALUE"});if(t=tct(t),ect==="win32"){let e=/[*|"<>?:]/,{root:r}=rct(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};MAe.exports=nct});var qAe=_((dUt,jAe)=>{var{dirname:UAe}=Be("path"),_Ae=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(o=>o.isDirectory()?r:void 0,o=>o.code==="ENOENT"?_Ae(t,UAe(e),e):void 0),HAe=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(o){return o.code==="ENOENT"?HAe(t,UAe(e),e):void 0}};jAe.exports={findMade:_Ae,findMadeSync:HAe}});var H3=_((mUt,YAe)=>{var{dirname:GAe}=Be("path"),U3=(t,e,r)=>{e.recursive=!1;let o=GAe(t);return o===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return U3(o,e).then(n=>U3(t,e,n));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;return e.statAsync(t).then(n=>{if(n.isDirectory())return r;throw a},()=>{throw a})})},_3=(t,e,r)=>{let o=GAe(t);if(e.recursive=!1,o===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return _3(t,e,_3(o,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};YAe.exports={mkdirpManual:U3,mkdirpManualSync:_3}});var KAe=_((yUt,VAe)=>{var{dirname:WAe}=Be("path"),{findMade:ict,findMadeSync:sct}=qAe(),{mkdirpManual:oct,mkdirpManualSync:act}=H3(),lct=(t,e)=>(e.recursive=!0,WAe(t)===t?e.mkdirAsync(t,e):ict(e,t).then(o=>e.mkdirAsync(t,e).then(()=>o).catch(a=>{if(a.code==="ENOENT")return oct(t,e);throw a}))),cct=(t,e)=>{if(e.recursive=!0,WAe(t)===t)return e.mkdirSync(t,e);let o=sct(e,t);try{return e.mkdirSync(t,e),o}catch(a){if(a.code==="ENOENT")return act(t,e);throw a}};VAe.exports={mkdirpNative:lct,mkdirpNativeSync:cct}});var ZAe=_((EUt,XAe)=>{var JAe=Be("fs"),uct=process.version,j3=uct.replace(/^v/,"").split("."),zAe=+j3[0]>10||+j3[0]==10&&+j3[1]>=12,Act=zAe?t=>t.mkdir===JAe.mkdir:()=>!1,fct=zAe?t=>t.mkdirSync===JAe.mkdirSync:()=>!1;XAe.exports={useNative:Act,useNativeSync:fct}});var ife=_((CUt,nfe)=>{var tC=LAe(),rC=OAe(),{mkdirpNative:$Ae,mkdirpNativeSync:efe}=KAe(),{mkdirpManual:tfe,mkdirpManualSync:rfe}=H3(),{useNative:pct,useNativeSync:hct}=ZAe(),nC=(t,e)=>(t=rC(t),e=tC(e),pct(e)?$Ae(t,e):tfe(t,e)),gct=(t,e)=>(t=rC(t),e=tC(e),hct(e)?efe(t,e):rfe(t,e));nC.sync=gct;nC.native=(t,e)=>$Ae(rC(t),tC(e));nC.manual=(t,e)=>tfe(rC(t),tC(e));nC.nativeSync=(t,e)=>efe(rC(t),tC(e));nC.manualSync=(t,e)=>rfe(rC(t),tC(e));nfe.exports=nC});var Afe=_((wUt,ufe)=>{"use strict";var $l=Be("fs"),Hd=Be("path"),dct=$l.lchown?"lchown":"chown",mct=$l.lchownSync?"lchownSync":"chownSync",ofe=$l.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),sfe=(t,e,r)=>{try{return $l[mct](t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},yct=(t,e,r)=>{try{return $l.chownSync(t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},Ect=ofe?(t,e,r,o)=>a=>{!a||a.code!=="EISDIR"?o(a):$l.chown(t,e,r,o)}:(t,e,r,o)=>o,q3=ofe?(t,e,r)=>{try{return sfe(t,e,r)}catch(o){if(o.code!=="EISDIR")throw o;yct(t,e,r)}}:(t,e,r)=>sfe(t,e,r),Cct=process.version,afe=(t,e,r)=>$l.readdir(t,e,r),wct=(t,e)=>$l.readdirSync(t,e);/^v4\./.test(Cct)&&(afe=(t,e,r)=>$l.readdir(t,r));var Ob=(t,e,r,o)=>{$l[dct](t,e,r,Ect(t,e,r,a=>{o(a&&a.code!=="ENOENT"?a:null)}))},lfe=(t,e,r,o,a)=>{if(typeof e=="string")return $l.lstat(Hd.resolve(t,e),(n,u)=>{if(n)return a(n.code!=="ENOENT"?n:null);u.name=e,lfe(t,u,r,o,a)});if(e.isDirectory())G3(Hd.resolve(t,e.name),r,o,n=>{if(n)return a(n);let u=Hd.resolve(t,e.name);Ob(u,r,o,a)});else{let n=Hd.resolve(t,e.name);Ob(n,r,o,a)}},G3=(t,e,r,o)=>{afe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return o();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return o(a)}if(a||!n.length)return Ob(t,e,r,o);let u=n.length,A=null,p=h=>{if(!A){if(h)return o(A=h);if(--u===0)return Ob(t,e,r,o)}};n.forEach(h=>lfe(t,h,e,r,p))})},Ict=(t,e,r,o)=>{if(typeof e=="string")try{let a=$l.lstatSync(Hd.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&cfe(Hd.resolve(t,e.name),r,o),q3(Hd.resolve(t,e.name),r,o)},cfe=(t,e,r)=>{let o;try{o=wct(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return q3(t,e,r);throw a}return o&&o.length&&o.forEach(a=>Ict(t,a,e,r)),q3(t,e,r)};ufe.exports=G3;G3.sync=cfe});var gfe=_((IUt,Y3)=>{"use strict";var ffe=ife(),ec=Be("fs"),Ub=Be("path"),pfe=Afe(),Wc=HE(),_b=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},Hb=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},jb=(t,e)=>t.get(Wc(e)),K1=(t,e,r)=>t.set(Wc(e),r),Bct=(t,e)=>{ec.stat(t,(r,o)=>{(r||!o.isDirectory())&&(r=new Hb(t,r&&r.code||"ENOTDIR")),e(r)})};Y3.exports=(t,e,r)=>{t=Wc(t);let o=e.umask,a=e.mode|448,n=(a&o)!==0,u=e.uid,A=e.gid,p=typeof u=="number"&&typeof A=="number"&&(u!==e.processUid||A!==e.processGid),h=e.preserve,E=e.unlink,I=e.cache,v=Wc(e.cwd),b=(L,U)=>{L?r(L):(K1(I,t,!0),U&&p?pfe(U,u,A,J=>b(J)):n?ec.chmod(t,a,r):r())};if(I&&jb(I,t)===!0)return b();if(t===v)return Bct(t,b);if(h)return ffe(t,{mode:a}).then(L=>b(null,L),b);let T=Wc(Ub.relative(v,t)).split("/");qb(v,T,a,I,E,v,null,b)};var qb=(t,e,r,o,a,n,u,A)=>{if(!e.length)return A(null,u);let p=e.shift(),h=Wc(Ub.resolve(t+"/"+p));if(jb(o,h))return qb(h,e,r,o,a,n,u,A);ec.mkdir(h,r,hfe(h,e,r,o,a,n,u,A))},hfe=(t,e,r,o,a,n,u,A)=>p=>{p?ec.lstat(t,(h,E)=>{if(h)h.path=h.path&&Wc(h.path),A(h);else if(E.isDirectory())qb(t,e,r,o,a,n,u,A);else if(a)ec.unlink(t,I=>{if(I)return A(I);ec.mkdir(t,r,hfe(t,e,r,o,a,n,u,A))});else{if(E.isSymbolicLink())return A(new _b(t,t+"/"+e.join("/")));A(p)}}):(u=u||t,qb(t,e,r,o,a,n,u,A))},vct=t=>{let e=!1,r="ENOTDIR";try{e=ec.statSync(t).isDirectory()}catch(o){r=o.code}finally{if(!e)throw new Hb(t,r)}};Y3.exports.sync=(t,e)=>{t=Wc(t);let r=e.umask,o=e.mode|448,a=(o&r)!==0,n=e.uid,u=e.gid,A=typeof n=="number"&&typeof u=="number"&&(n!==e.processUid||u!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,I=Wc(e.cwd),v=L=>{K1(E,t,!0),L&&A&&pfe.sync(L,n,u),a&&ec.chmodSync(t,o)};if(E&&jb(E,t)===!0)return v();if(t===I)return vct(I),v();if(p)return v(ffe.sync(t,o));let C=Wc(Ub.relative(I,t)).split("/"),T=null;for(let L=C.shift(),U=I;L&&(U+="/"+L);L=C.shift())if(U=Wc(Ub.resolve(U)),!jb(E,U))try{ec.mkdirSync(U,o),T=T||U,K1(E,U,!0)}catch{let te=ec.lstatSync(U);if(te.isDirectory()){K1(E,U,!0);continue}else if(h){ec.unlinkSync(U),ec.mkdirSync(U,o),T=T||U,K1(E,U,!0);continue}else if(te.isSymbolicLink())return new _b(U,U+"/"+C.join("/"))}return v(T)}});var V3=_((BUt,dfe)=>{var W3=Object.create(null),{hasOwnProperty:Dct}=Object.prototype;dfe.exports=t=>(Dct.call(W3,t)||(W3[t]=t.normalize("NFKD")),W3[t])});var Cfe=_((vUt,Efe)=>{var mfe=Be("assert"),Pct=V3(),Sct=GE(),{join:yfe}=Be("path"),xct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,bct=xct==="win32";Efe.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((I,v)=>(I.length&&(v=yfe(I[I.length-1],v)),I.push(v||"/"),I),[]),o=new Set,a=h=>{let E=e.get(h);if(!E)throw new Error("function does not have any path reservations");return{paths:E.paths.map(I=>t.get(I)),dirs:[...E.dirs].map(I=>t.get(I))}},n=h=>{let{paths:E,dirs:I}=a(h);return E.every(v=>v[0]===h)&&I.every(v=>v[0]instanceof Set&&v[0].has(h))},u=h=>o.has(h)||!n(h)?!1:(o.add(h),h(()=>A(h)),!0),A=h=>{if(!o.has(h))return!1;let{paths:E,dirs:I}=e.get(h),v=new Set;return E.forEach(b=>{let C=t.get(b);mfe.equal(C[0],h),C.length===1?t.delete(b):(C.shift(),typeof C[0]=="function"?v.add(C[0]):C[0].forEach(T=>v.add(T)))}),I.forEach(b=>{let C=t.get(b);mfe(C[0]instanceof Set),C[0].size===1&&C.length===1?t.delete(b):C[0].size===1?(C.shift(),v.add(C[0])):C[0].delete(h)}),o.delete(h),v.forEach(b=>u(b)),!0};return{check:n,reserve:(h,E)=>{h=bct?["win32 parallelization disabled"]:h.map(v=>Pct(Sct(yfe(v))).toLowerCase());let I=new Set(h.map(v=>r(v)).reduce((v,b)=>v.concat(b)));return e.set(E,{dirs:I,paths:h}),h.forEach(v=>{let b=t.get(v);b?b.push(E):t.set(v,[E])}),I.forEach(v=>{let b=t.get(v);b?b[b.length-1]instanceof Set?b[b.length-1].add(E):b.push(new Set([E])):t.set(v,[new Set([E])])}),u(E)}}}});var Bfe=_((DUt,Ife)=>{var kct=process.platform,Qct=kct==="win32",Fct=global.__FAKE_TESTING_FS__||Be("fs"),{O_CREAT:Tct,O_TRUNC:Rct,O_WRONLY:Nct,UV_FS_O_FILEMAP:wfe=0}=Fct.constants,Lct=Qct&&!!wfe,Mct=512*1024,Oct=wfe|Rct|Tct|Nct;Ife.exports=Lct?t=>t"w"});var r_=_((PUt,Mfe)=>{"use strict";var Uct=Be("assert"),_ct=Nb(),vn=Be("fs"),Hct=$E(),Yf=Be("path"),Rfe=gfe(),vfe=r3(),jct=Cfe(),qct=n3(),fl=HE(),Gct=GE(),Yct=V3(),Dfe=Symbol("onEntry"),z3=Symbol("checkFs"),Pfe=Symbol("checkFs2"),Wb=Symbol("pruneCache"),X3=Symbol("isReusable"),tc=Symbol("makeFs"),Z3=Symbol("file"),$3=Symbol("directory"),Vb=Symbol("link"),Sfe=Symbol("symlink"),xfe=Symbol("hardlink"),bfe=Symbol("unsupported"),kfe=Symbol("checkPath"),vh=Symbol("mkdir"),Ro=Symbol("onError"),Gb=Symbol("pending"),Qfe=Symbol("pend"),iC=Symbol("unpend"),K3=Symbol("ended"),J3=Symbol("maybeClose"),e_=Symbol("skip"),J1=Symbol("doChown"),z1=Symbol("uid"),X1=Symbol("gid"),Z1=Symbol("checkedCwd"),Nfe=Be("crypto"),Lfe=Bfe(),Wct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,$1=Wct==="win32",Vct=(t,e)=>{if(!$1)return vn.unlink(t,e);let r=t+".DELETE."+Nfe.randomBytes(16).toString("hex");vn.rename(t,r,o=>{if(o)return e(o);vn.unlink(r,e)})},Kct=t=>{if(!$1)return vn.unlinkSync(t);let e=t+".DELETE."+Nfe.randomBytes(16).toString("hex");vn.renameSync(t,e),vn.unlinkSync(e)},Ffe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Tfe=t=>Yct(Gct(fl(t))).toLowerCase(),Jct=(t,e)=>{e=Tfe(e);for(let r of t.keys()){let o=Tfe(r);(o===e||o.indexOf(e+"/")===0)&&t.delete(r)}},zct=t=>{for(let e of t.keys())t.delete(e)},e2=class extends _ct{constructor(e){if(e||(e={}),e.ondone=r=>{this[K3]=!0,this[J3]()},super(e),this[Z1]=!1,this.reservations=jct(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[Gb]=0,this[K3]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||$1,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=fl(Yf.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",r=>this[Dfe](r))}warn(e,r,o={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(o.recoverable=!1),super.warn(e,r,o)}[J3](){this[K3]&&this[Gb]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[kfe](e){if(this.strip){let r=fl(e.path).split("/");if(r.length=this.strip)e.linkpath=o.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=fl(e.path),o=r.split("/");if(o.includes("..")||$1&&/^[a-z]:\.\.$/i.test(o[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=qct(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Yf.isAbsolute(e.path)?e.absolute=fl(Yf.resolve(e.path)):e.absolute=fl(Yf.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:fl(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:r}=Yf.win32.parse(e.absolute);e.absolute=r+vfe.encode(e.absolute.substr(r.length));let{root:o}=Yf.win32.parse(e.path);e.path=o+vfe.encode(e.path.substr(o.length))}return!0}[Dfe](e){if(!this[kfe](e))return e.resume();switch(Uct.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[z3](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[bfe](e)}}[Ro](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[iC](),r.resume())}[vh](e,r,o){Rfe(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r,noChmod:this.noChmod},o)}[J1](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[z1](e){return Ffe(this.uid,e.uid,this.processUid)}[X1](e){return Ffe(this.gid,e.gid,this.processGid)}[Z3](e,r){let o=e.mode&4095||this.fmode,a=new Hct.WriteStream(e.absolute,{flags:Lfe(e.size),mode:o,autoClose:!1});a.on("error",p=>{a.fd&&vn.close(a.fd,()=>{}),a.write=()=>!0,this[Ro](p,e),r()});let n=1,u=p=>{if(p){a.fd&&vn.close(a.fd,()=>{}),this[Ro](p,e),r();return}--n===0&&vn.close(a.fd,h=>{h?this[Ro](h,e):this[iC](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let I=e.atime||new Date,v=e.mtime;vn.futimes(E,I,v,b=>b?vn.utimes(h,I,v,C=>u(C&&b)):u())}if(this[J1](e)){n++;let I=this[z1](e),v=this[X1](e);vn.fchown(E,I,v,b=>b?vn.chown(h,I,v,C=>u(C&&b)):u())}u()});let A=this.transform&&this.transform(e)||e;A!==e&&(A.on("error",p=>{this[Ro](p,e),r()}),e.pipe(A)),A.pipe(a)}[$3](e,r){let o=e.mode&4095||this.dmode;this[vh](e.absolute,o,a=>{if(a){this[Ro](a,e),r();return}let n=1,u=A=>{--n===0&&(r(),this[iC](),e.resume())};e.mtime&&!this.noMtime&&(n++,vn.utimes(e.absolute,e.atime||new Date,e.mtime,u)),this[J1](e)&&(n++,vn.chown(e.absolute,this[z1](e),this[X1](e),u)),u()})}[bfe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[Sfe](e,r){this[Vb](e,e.linkpath,"symlink",r)}[xfe](e,r){let o=fl(Yf.resolve(this.cwd,e.linkpath));this[Vb](e,o,"link",r)}[Qfe](){this[Gb]++}[iC](){this[Gb]--,this[J3]()}[e_](e){this[iC](),e.resume()}[X3](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!$1}[z3](e){this[Qfe]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,o=>this[Pfe](e,o))}[Wb](e){e.type==="SymbolicLink"?zct(this.dirCache):e.type!=="Directory"&&Jct(this.dirCache,e.absolute)}[Pfe](e,r){this[Wb](e);let o=A=>{this[Wb](e),r(A)},a=()=>{this[vh](this.cwd,this.dmode,A=>{if(A){this[Ro](A,e),o();return}this[Z1]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let A=fl(Yf.dirname(e.absolute));if(A!==this.cwd)return this[vh](A,this.dmode,p=>{if(p){this[Ro](p,e),o();return}u()})}u()},u=()=>{vn.lstat(e.absolute,(A,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[e_](e),o();return}if(A||this[X3](e,p))return this[tc](null,e,o);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=I=>this[tc](I,e,o);return h?vn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return vn.rmdir(e.absolute,h=>this[tc](h,e,o))}if(e.absolute===this.cwd)return this[tc](null,e,o);Vct(e.absolute,h=>this[tc](h,e,o))})};this[Z1]?n():a()}[tc](e,r,o){if(e){this[Ro](e,r),o();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[Z3](r,o);case"Link":return this[xfe](r,o);case"SymbolicLink":return this[Sfe](r,o);case"Directory":case"GNUDumpDir":return this[$3](r,o)}}[Vb](e,r,o,a){vn[o](r,e.absolute,n=>{n?this[Ro](n,e):(this[iC](),e.resume()),a()})}},Yb=t=>{try{return[null,t()]}catch(e){return[e,null]}},t_=class extends e2{[tc](e,r){return super[tc](e,r,()=>{})}[z3](e){if(this[Wb](e),!this[Z1]){let n=this[vh](this.cwd,this.dmode);if(n)return this[Ro](n,e);this[Z1]=!0}if(e.absolute!==this.cwd){let n=fl(Yf.dirname(e.absolute));if(n!==this.cwd){let u=this[vh](n,this.dmode);if(u)return this[Ro](u,e)}}let[r,o]=Yb(()=>vn.lstatSync(e.absolute));if(o&&(this.keep||this.newer&&o.mtime>e.mtime))return this[e_](e);if(r||this[X3](e,o))return this[tc](null,e);if(o.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(o.mode&4095)!==e.mode,[A]=u?Yb(()=>{vn.chmodSync(e.absolute,e.mode)}):[];return this[tc](A,e)}let[n]=Yb(()=>vn.rmdirSync(e.absolute));this[tc](n,e)}let[a]=e.absolute===this.cwd?[]:Yb(()=>Kct(e.absolute));this[tc](a,e)}[Z3](e,r){let o=e.mode&4095||this.fmode,a=A=>{let p;try{vn.closeSync(n)}catch(h){p=h}(A||p)&&this[Ro](A||p,e),r()},n;try{n=vn.openSync(e.absolute,Lfe(e.size),o)}catch(A){return a(A)}let u=this.transform&&this.transform(e)||e;u!==e&&(u.on("error",A=>this[Ro](A,e)),e.pipe(u)),u.on("data",A=>{try{vn.writeSync(n,A,0,A.length)}catch(p){a(p)}}),u.on("end",A=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{vn.futimesSync(n,h,E)}catch(I){try{vn.utimesSync(e.absolute,h,E)}catch{p=I}}}if(this[J1](e)){let h=this[z1](e),E=this[X1](e);try{vn.fchownSync(n,h,E)}catch(I){try{vn.chownSync(e.absolute,h,E)}catch{p=p||I}}}a(p)})}[$3](e,r){let o=e.mode&4095||this.dmode,a=this[vh](e.absolute,o);if(a){this[Ro](a,e),r();return}if(e.mtime&&!this.noMtime)try{vn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[J1](e))try{vn.chownSync(e.absolute,this[z1](e),this[X1](e))}catch{}r(),e.resume()}[vh](e,r){try{return Rfe.sync(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(o){return o}}[Vb](e,r,o,a){try{vn[o+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[Ro](n,e)}}};e2.Sync=t_;Mfe.exports=e2});var jfe=_((SUt,Hfe)=>{"use strict";var Xct=LE(),Kb=r_(),Ufe=Be("fs"),_fe=$E(),Ofe=Be("path"),n_=GE();Hfe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Xct(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Zct(o,e),o.file&&o.sync?$ct(o):o.file?eut(o,r):o.sync?tut(o):rut(o)};var Zct=(t,e)=>{let r=new Map(e.map(n=>[n_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||Ofe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(Ofe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(n_(n)):n=>a(n_(n))},$ct=t=>{let e=new Kb.Sync(t),r=t.file,o=Ufe.statSync(r),a=t.maxReadSize||16*1024*1024;new _fe.ReadStreamSync(r,{readSize:a,size:o.size}).pipe(e)},eut=(t,e)=>{let r=new Kb(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("close",u),Ufe.stat(a,(p,h)=>{if(p)A(p);else{let E=new _fe.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},tut=t=>new Kb.Sync(t),rut=t=>new Kb(t)});var qfe=_(us=>{"use strict";us.c=us.create=vAe();us.r=us.replace=O3();us.t=us.list=Lb();us.u=us.update=TAe();us.x=us.extract=jfe();us.Pack=wb();us.Unpack=r_();us.Parse=Nb();us.ReadEntry=nb();us.WriteEntry=p3();us.Header=qE();us.Pax=sb();us.types=JU()});var i_,Gfe,Dh,t2,r2,Yfe=Et(()=>{i_=$e(nd()),Gfe=Be("worker_threads"),Dh=Symbol("kTaskInfo"),t2=class{constructor(e,r){this.fn=e;this.limit=(0,i_.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},r2=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,i_.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let o=this.workers.pop();o?o.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new Gfe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[Dh])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[Dh].resolve(r),e[Dh]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[Dh]?.reject(r),e[Dh]=null}),e.on("exit",r=>{r!==0&&e[Dh]?.reject(new Error(`Worker exited with code ${r}`)),e[Dh]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((o,a)=>{r[Dh]={resolve:o,reject:a},r.postMessage(e)})})}}});var Vfe=_((QUt,Wfe)=>{var s_;Wfe.exports.getContent=()=>(typeof s_>"u"&&(s_=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),s_)});var Xi={};Kt(Xi,{convertToZip:()=>out,convertToZipWorker:()=>l_,extractArchiveTo:()=>Zfe,getDefaultTaskPool:()=>zfe,getTaskPoolForConfiguration:()=>Xfe,makeArchiveFromDirectory:()=>sut});function nut(t,e){switch(t){case"async":return new t2(l_,{poolSize:e});case"workers":return new r2((0,a_.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function zfe(){return typeof o_>"u"&&(o_=nut("workers",Ji.availableParallelism())),o_}function Xfe(t){return typeof t>"u"?zfe():ol(iut,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new t2(l_,{poolSize:r});case"workers":return new r2((0,a_.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function l_(t){let{tmpFile:e,tgz:r,compressionLevel:o,extractBufferOpts:a}=t,n=new zi(e,{create:!0,level:o,stats:Ea.makeDefaultStats()}),u=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await Zfe(u,n,a),n.saveAndClose(),e}async function sut(t,{baseFs:e=new Rn,prefixPath:r=Bt.root,compressionLevel:o,inMemory:a=!1}={}){let n;if(a)n=new zi(null,{level:o});else{let A=await oe.mktempPromise(),p=K.join(A,"archive.zip");n=new zi(p,{create:!0,level:o})}let u=K.resolve(Bt.root,r);return await n.copyPromise(u,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function out(t,e={}){let r=await oe.mktempPromise(),o=K.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Xfe(e.configuration)).run({tmpFile:o,tgz:t,compressionLevel:a,extractBufferOpts:n}),new zi(o,{level:e.compressionLevel})}async function*aut(t){let e=new Jfe.default.Parse,r=new Kfe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",o=>{r.write(o)}),e.on("error",o=>{r.destroy(o)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let o of r){let a=o;yield a,a.resume()}}async function Zfe(t,e,{stripComponents:r=0,prefixPath:o=Bt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let u=n.path.split(/\//g);return!!(u.some(A=>A==="..")||u.length<=r)}for await(let n of aut(t)){if(a(n))continue;let u=K.normalize(ue.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(u.length<=r)continue;let A=u.slice(r).join("/"),p=K.join(o,A),h=420;switch((n.type==="Directory"||((n.mode??0)&73)!==0)&&(h|=73),n.type){case"Directory":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.writeFileSync(p,await Vy(n),{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break}}return e}var Kfe,Jfe,a_,o_,iut,$fe=Et(()=>{Ye();Pt();nA();Kfe=Be("stream"),Jfe=$e(qfe());Yfe();jl();a_=$e(Vfe());iut=new WeakMap});var tpe=_((c_,epe)=>{(function(t,e){typeof c_=="object"?epe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(c_,function(){function t(a,n){var u=n?"\u2514":"\u251C";return a?u+="\u2500 ":u+="\u2500\u2500\u2510",u}function e(a,n){var u=[];for(var A in a)!a.hasOwnProperty(A)||n&&typeof a[A]=="function"||u.push(A);return u}function r(a,n,u,A,p,h,E){var I="",v=0,b,C,T=A.slice(0);if(T.push([n,u])&&A.length>0&&(A.forEach(function(U,J){J>0&&(I+=(U[1]?" ":"\u2502")+" "),!C&&U[0]===n&&(C=!0)}),I+=t(a,u)+a,p&&(typeof n!="object"||n instanceof Date)&&(I+=": "+n),C&&(I+=" (circular ref.)"),E(I)),!C&&typeof n=="object"){var L=e(n,h);L.forEach(function(U){b=++v===L.length,r(U,n[U],b,T,p,h,E)})}}var o={};return o.asLines=function(a,n,u,A){var p=typeof u!="function"?u:!1;r(".",a,!1,[],n,p,A||u)},o.asTree=function(a,n,u){var A="";return r(".",a,!1,[],n,u,function(p){A+=p+` -`}),A},o})});var $s={};Kt($s,{emitList:()=>lut,emitTree:()=>spe,treeNodeToJson:()=>ipe,treeNodeToTreeify:()=>npe});function npe(t,{configuration:e}){let r={},o=0,a=(n,u)=>{let A=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of A){if(!h)continue;let{label:E,value:I,children:v}=h,b=[];typeof E<"u"&&b.push(md(e,E,2)),typeof I<"u"&&b.push(Ot(e,I[0],I[1])),b.length===0&&b.push(md(e,`${p}`,2));let C=b.join(": ").trim(),T=`\0${o++}\0`,L=u[`${T}${C}`]={};typeof v<"u"&&a(v,L)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function ipe(t){let e=r=>{if(typeof r.children>"u"){if(typeof r.value>"u")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return yd(r.value[0],r.value[1])}let o=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,u]of o)u&&(a[cut(n)]=e(u));return typeof r.value>"u"?a:{value:yd(r.value[0],r.value[1]),children:a}};return e(t)}function lut(t,{configuration:e,stdout:r,json:o}){let a=t.map(n=>({value:n}));spe({children:a},{configuration:e,stdout:r,json:o})}function spe(t,{configuration:e,stdout:r,json:o,separators:a=0}){if(o){let u=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let A of u)A&&r.write(`${JSON.stringify(ipe(A))} -`);return}let n=(0,rpe.asTree)(npe(t,{configuration:e}),!1,!1);if(n=n.replace(/\0[0-9]+\0/g,""),a>=1&&(n=n.replace(/^([├└]─)/gm,`\u2502 +`),delete U.NODE_ENV;let Be=await Gc("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(Be.code!==0)return Be.code;h.write(` +`);let we=await Gc("yarn",[...fe,"pack","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return we.code!==0?we.code:0}],["Yarn",async()=>{let fe=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let ce=V.join(t,dr.lockfile);await oe.existsPromise(ce)||await oe.writeFilePromise(ce,"");let me=await Gc("yarn",[...fe,"pack","--install-if-needed","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return me.code!==0?me.code:0}],["npm",async()=>{if(a!==null){let Ee=new ph.PassThrough,Se=Vy(Ee);Ee.pipe(h,{end:!1});let le=await Gc("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:Ee,stderr:E,end:0});if(Ee.end(),le.code!==0)return h.end(),E.end(),le.code;let ne=(await Se).toString().trim();if(!kf(ne,">=7.x")){let ee=eA(null,"npm"),Ie=In(ee,ne),Fe=In(ee,">=7.x");throw new Error(`Workspaces aren't supported by ${jn(r,Ie)}; please upgrade to ${jn(r,Fe)} (npm has been detected as the primary package manager for ${Mt(r,t,yt.PATH)})`)}}let fe=a!==null?["--workspace",a]:[];delete U.npm_config_user_agent,delete U.npm_config_production,delete U.NPM_CONFIG_PRODUCTION,delete U.NODE_ENV;let ce=await Gc("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(ce.code!==0)return ce.code;let me=new ph.PassThrough,he=Vy(me);me.pipe(h);let Be=await Gc("npm",["pack","--silent",...fe],{cwd:t,env:U,stdin:p,stdout:me,stderr:E});if(Be.code!==0)return Be.code;let we=(await he).toString().trim().replace(/^.*\n/s,""),g=V.resolve(t,ue.toPortablePath(we));return await oe.renamePromise(g,e),0}]]).get(C);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let ae=await te();if(!(ae===0||typeof ae>"u"))throw oe.detachTemp(u),new zt(58,`Packing the package failed (exit code ${ae}, logs can be found here: ${Mt(r,A,yt.PATH)})`)})})})}async function Bat(t,e,{project:r}){let o=r.tryWorkspaceByLocator(t);if(o!==null)return CU(o,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${qr(r.configuration,t)} not found in the project`);return await Jl.openPromise(async n=>{let u=r.configuration,A=r.configuration.getLinkers(),p={project:r,report:new Nt({stdout:new ph.PassThrough,configuration:u})},h=A.find(x=>x.supportsPackage(a,p));if(!h)throw new Error(`The package ${qr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),I=new gn(E,{baseFs:n});return(await Ot.find(Bt.dot,{baseFs:I})).scripts.has(e)})}async function Wb(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{manifest:h,env:E,cwd:I}=await $ce(t,{project:a,binFolder:p,cwd:o,lifecycleScript:e}),v=h.scripts.get(e);if(typeof v>"u")return 1;let x=async()=>await TE(v,r,{cwd:I,env:E,stdin:n,stdout:u,stderr:A});return await(await a.configuration.reduceHook(R=>R.wrapScriptExecution,x,a,t,e,{script:v,args:r,cwd:I,env:E,stdin:n,stdout:u,stderr:A}))()})}async function EU(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{env:h,cwd:E}=await $ce(t,{project:a,binFolder:p,cwd:o});return await TE(e,r,{cwd:E,env:h,stdin:n,stdout:u,stderr:A})})}async function vat(t,{binFolder:e,cwd:r,lifecycleScript:o}){let a=await M1({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:o});return await IU(e,await rue(t)),typeof r>"u"&&(r=V.dirname(await oe.realpathPromise(V.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function $ce(t,{project:e,binFolder:r,cwd:o,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return vat(n,{binFolder:r,cwd:o,lifecycleScript:a});let u=e.storedPackages.get(t.locatorHash);if(!u)throw new Error(`Package for ${qr(e.configuration,t)} not found in the project`);return await Jl.openPromise(async A=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Nt({stdout:new ph.PassThrough,configuration:p})},I=h.find(L=>L.supportsPackage(u,E));if(!I)throw new Error(`The package ${qr(e.configuration,u)} isn't supported by any of the available linkers`);let v=await M1({project:e,locator:t,binFolder:r,lifecycleScript:a});await IU(r,await Kb(t,{project:e}));let x=await I.findPackageLocation(u,E),C=new gn(x,{baseFs:A}),R=await Ot.find(Bt.dot,{baseFs:C});return typeof o>"u"&&(o=x),{manifest:R,binFolder:r,env:v,cwd:o}})}async function eue(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u}){return await Wb(t.anchoredLocator,e,r,{cwd:o,project:t.project,stdin:a,stdout:n,stderr:u})}function CU(t,e){return t.manifest.scripts.has(e)}async function tue(t,e,{cwd:r,report:o}){let{configuration:a}=t.project,n=null;await oe.mktempPromise(async u=>{let A=V.join(u,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${ue.fromPortablePath(t.cwd)}") +`,{stdout:h,stderr:E}=a.getSubprocessStreams(A,{report:o,prefix:qr(a,t.anchoredLocator),header:p});o.reportInfo(36,`Calling the "${e}" lifecycle script`);let I=await eue(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),I!==0)throw oe.detachTemp(u),new zt(36,`${(0,Jce.default)(e)} script failed (exit code ${Mt(a,I,yt.NUMBER)}, logs can be found here: ${Mt(a,A,yt.PATH)}); run ${Mt(a,`yarn ${e}`,yt.CODE)} to investigate`)})}async function Dat(t,e,r){CU(t,e)&&await tue(t,e,r)}function wU(t){let e=V.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),o;try{o=oe.openSync(t,"r")}catch{return!0}try{oe.readSync(o,r,0,r.length,0)}finally{oe.closeSync(o)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function Kb(t,{project:e}){let r=e.configuration,o=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${qr(r,t)} not found in the project`);let n=new ph.Writable,u=r.getLinkers(),A={project:e,report:new Nt({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let I=e.storedResolutions.get(E.descriptorHash);if(!I)throw new Error(`Assertion failed: The resolution (${jn(r,E)}) should have been registered`);p.add(I)}let h=await Promise.all(Array.from(p,async E=>{let I=e.storedPackages.get(E);if(!I)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(I.bin.size===0)return sl.skip;let v=u.find(C=>C.supportsPackage(I,A));if(!v)return sl.skip;let x=null;try{x=await v.findPackageLocation(I,A)}catch(C){if(C.code==="LOCATOR_NOT_INSTALLED")return sl.skip;throw C}return{dependency:I,packageLocation:x}}));for(let E of h){if(E===sl.skip)continue;let{dependency:I,packageLocation:v}=E;for(let[x,C]of I.bin){let R=V.resolve(v,C);o.set(x,[I,ue.fromPortablePath(R),wU(R)])}}return o}async function rue(t){return await Kb(t.anchoredLocator,{project:t.project})}async function IU(t,e){await Promise.all(Array.from(e,([r,[,o,a]])=>a?fh(t,r,process.execPath,[o]):fh(t,r,o,[])))}async function nue(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await Kb(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${qr(a.configuration,t)}`);return await oe.mktempPromise(async I=>{let[,v]=E,x=await M1({project:a,locator:t,binFolder:I});await IU(x.BERRY_BIN_FOLDER,h);let C=wU(ue.toPortablePath(v))?Gc(process.execPath,[...p,v,...r],{cwd:o,env:x,stdin:n,stdout:u,stderr:A}):Gc(v,r,{cwd:o,env:x,stdin:n,stdout:u,stderr:A}),R;try{R=await C}finally{await oe.removePromise(x.BERRY_BIN_FOLDER)}return R.code})}async function Sat(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A}){return await nue(t.anchoredLocator,e,r,{project:t.project,cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A})}var Jce,zce,ph,Xce,Cat,wat,BU=Et(()=>{St();St();nA();k1();Jce=$e(mU()),zce=$e(id()),ph=ve("stream");fE();Yl();O1();L1();Db();jl();ql();Qf();bo();Xce=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))(Xce||{});Cat=2,wat=(0,zce.default)(Cat)});var OE=_((L4t,sue)=>{"use strict";var iue=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]);sue.exports=t=>t?Object.keys(t).map(e=>[iue.has(e)?iue.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var UE=_((O4t,hue)=>{"use strict";var oue=typeof process=="object"&&process?process:{stdout:null,stderr:null},Pat=ve("events"),aue=ve("stream"),lue=ve("string_decoder").StringDecoder,Mf=Symbol("EOF"),Uf=Symbol("maybeEmitEnd"),hh=Symbol("emittedEnd"),Vb=Symbol("emittingEnd"),U1=Symbol("emittedError"),Jb=Symbol("closed"),cue=Symbol("read"),zb=Symbol("flush"),uue=Symbol("flushChunk"),ka=Symbol("encoding"),_f=Symbol("decoder"),Xb=Symbol("flowing"),_1=Symbol("paused"),ME=Symbol("resume"),Fs=Symbol("bufferLength"),vU=Symbol("bufferPush"),DU=Symbol("bufferShift"),Fo=Symbol("objectMode"),Ro=Symbol("destroyed"),SU=Symbol("emitData"),Aue=Symbol("emitEnd"),PU=Symbol("emitEnd2"),Hf=Symbol("async"),H1=t=>Promise.resolve().then(t),fue=global._MP_NO_ITERATOR_SYMBOLS_!=="1",bat=fue&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),xat=fue&&Symbol.iterator||Symbol("iterator not implemented"),kat=t=>t==="end"||t==="finish"||t==="prefinish",Qat=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Fat=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),Zb=class{constructor(e,r,o){this.src=e,this.dest=r,this.opts=o,this.ondrain=()=>e[ME](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},bU=class extends Zb{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,o){super(e,r,o),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};hue.exports=class pue extends aue{constructor(e){super(),this[Xb]=!1,this[_1]=!1,this.pipes=[],this.buffer=[],this[Fo]=e&&e.objectMode||!1,this[Fo]?this[ka]=null:this[ka]=e&&e.encoding||null,this[ka]==="buffer"&&(this[ka]=null),this[Hf]=e&&!!e.async||!1,this[_f]=this[ka]?new lue(this[ka]):null,this[Mf]=!1,this[hh]=!1,this[Vb]=!1,this[Jb]=!1,this[U1]=null,this.writable=!0,this.readable=!0,this[Fs]=0,this[Ro]=!1}get bufferLength(){return this[Fs]}get encoding(){return this[ka]}set encoding(e){if(this[Fo])throw new Error("cannot set encoding in objectMode");if(this[ka]&&e!==this[ka]&&(this[_f]&&this[_f].lastNeed||this[Fs]))throw new Error("cannot change encoding");this[ka]!==e&&(this[_f]=e?new lue(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[_f].write(r)))),this[ka]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Fo]}set objectMode(e){this[Fo]=this[Fo]||!!e}get async(){return this[Hf]}set async(e){this[Hf]=this[Hf]||!!e}write(e,r,o){if(this[Mf])throw new Error("write after end");if(this[Ro])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(o=r,r="utf8"),r||(r="utf8");let a=this[Hf]?H1:n=>n();return!this[Fo]&&!Buffer.isBuffer(e)&&(Fat(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):Qat(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Fo]?(this.flowing&&this[Fs]!==0&&this[zb](!0),this.flowing?this.emit("data",e):this[vU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):e.length?(typeof e=="string"&&!(r===this[ka]&&!this[_f].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ka]&&(e=this[_f].write(e)),this.flowing&&this[Fs]!==0&&this[zb](!0),this.flowing?this.emit("data",e):this[vU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):(this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing)}read(e){if(this[Ro])return null;if(this[Fs]===0||e===0||e>this[Fs])return this[Uf](),null;this[Fo]&&(e=null),this.buffer.length>1&&!this[Fo]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Fs])]);let r=this[cue](e||null,this.buffer[0]);return this[Uf](),r}[cue](e,r){return e===r.length||e===null?this[DU]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Fs]-=e),this.emit("data",r),!this.buffer.length&&!this[Mf]&&this.emit("drain"),r}end(e,r,o){return typeof e=="function"&&(o=e,e=null),typeof r=="function"&&(o=r,r="utf8"),e&&this.write(e,r),o&&this.once("end",o),this[Mf]=!0,this.writable=!1,(this.flowing||!this[_1])&&this[Uf](),this}[ME](){this[Ro]||(this[_1]=!1,this[Xb]=!0,this.emit("resume"),this.buffer.length?this[zb]():this[Mf]?this[Uf]():this.emit("drain"))}resume(){return this[ME]()}pause(){this[Xb]=!1,this[_1]=!0}get destroyed(){return this[Ro]}get flowing(){return this[Xb]}get paused(){return this[_1]}[vU](e){this[Fo]?this[Fs]+=1:this[Fs]+=e.length,this.buffer.push(e)}[DU](){return this.buffer.length&&(this[Fo]?this[Fs]-=1:this[Fs]-=this.buffer[0].length),this.buffer.shift()}[zb](e){do;while(this[uue](this[DU]()));!e&&!this.buffer.length&&!this[Mf]&&this.emit("drain")}[uue](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[Ro])return;let o=this[hh];return r=r||{},e===oue.stdout||e===oue.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,o?r.end&&e.end():(this.pipes.push(r.proxyErrors?new bU(this,e,r):new Zb(this,e,r)),this[Hf]?H1(()=>this[ME]()):this[ME]()),e}unpipe(e){let r=this.pipes.find(o=>o.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let o=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[ME]():e==="readable"&&this[Fs]!==0?super.emit("readable"):kat(e)&&this[hh]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[U1]&&(this[Hf]?H1(()=>r.call(this,this[U1])):r.call(this,this[U1])),o}get emittedEnd(){return this[hh]}[Uf](){!this[Vb]&&!this[hh]&&!this[Ro]&&this.buffer.length===0&&this[Mf]&&(this[Vb]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[Jb]&&this.emit("close"),this[Vb]=!1)}emit(e,r,...o){if(e!=="error"&&e!=="close"&&e!==Ro&&this[Ro])return;if(e==="data")return r?this[Hf]?H1(()=>this[SU](r)):this[SU](r):!1;if(e==="end")return this[Aue]();if(e==="close"){if(this[Jb]=!0,!this[hh]&&!this[Ro])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[U1]=r;let n=super.emit("error",r);return this[Uf](),n}else if(e==="resume"){let n=super.emit("resume");return this[Uf](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...o);return this[Uf](),a}[SU](e){for(let o of this.pipes)o.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Uf](),r}[Aue](){this[hh]||(this[hh]=!0,this.readable=!1,this[Hf]?H1(()=>this[PU]()):this[PU]())}[PU](){if(this[_f]){let r=this[_f].end();if(r){for(let o of this.pipes)o.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[Fo]||(e.dataLength=0);let r=this.promise();return this.on("data",o=>{e.push(o),this[Fo]||(e.dataLength+=o.length)}),r.then(()=>e)}concat(){return this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this[ka]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(Ro,()=>r(new Error("stream destroyed"))),this.on("error",o=>r(o)),this.on("end",()=>e())})}[bat](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[Mf])return Promise.resolve({done:!0});let o=null,a=null,n=h=>{this.removeListener("data",u),this.removeListener("end",A),a(h)},u=h=>{this.removeListener("error",n),this.removeListener("end",A),this.pause(),o({value:h,done:!!this[Mf]})},A=()=>{this.removeListener("error",n),this.removeListener("data",u),o({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,o=h,this.once(Ro,p),this.once("error",n),this.once("end",A),this.once("data",u)})}}}[xat](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[Ro]?(e?this.emit("error",e):this.emit(Ro),this):(this[Ro]=!0,this.buffer.length=0,this[Fs]=0,typeof this.close=="function"&&!this[Jb]&&this.close(),e?this.emit("error",e):this.emit(Ro),this)}static isStream(e){return!!e&&(e instanceof pue||e instanceof aue||e instanceof Pat&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var due=_((M4t,gue)=>{var Rat=ve("zlib").constants||{ZLIB_VERNUM:4736};gue.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},Rat))});var GU=_(cl=>{"use strict";var RU=ve("assert"),gh=ve("buffer").Buffer,Eue=ve("zlib"),Fd=cl.constants=due(),Tat=UE(),mue=gh.concat,Rd=Symbol("_superWrite"),HE=class extends Error{constructor(e){super("zlib: "+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},Nat=Symbol("opts"),q1=Symbol("flushFlag"),yue=Symbol("finishFlushFlag"),jU=Symbol("fullFlushFlag"),ti=Symbol("handle"),$b=Symbol("onError"),_E=Symbol("sawError"),xU=Symbol("level"),kU=Symbol("strategy"),QU=Symbol("ended"),U4t=Symbol("_defaultFullFlush"),ex=class extends Tat{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[_E]=!1,this[QU]=!1,this[Nat]=e,this[q1]=e.flush,this[yue]=e.finishFlush;try{this[ti]=new Eue[r](e)}catch(o){throw new HE(o)}this[$b]=o=>{this[_E]||(this[_E]=!0,this.close(),this.emit("error",o))},this[ti].on("error",o=>this[$b](new HE(o))),this.once("end",()=>this.close)}close(){this[ti]&&(this[ti].close(),this[ti]=null,this.emit("close"))}reset(){if(!this[_E])return RU(this[ti],"zlib binding closed"),this[ti].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[jU]),this.write(Object.assign(gh.alloc(0),{[q1]:e})))}end(e,r,o){return e&&this.write(e,r),this.flush(this[yue]),this[QU]=!0,super.end(null,null,o)}get ended(){return this[QU]}write(e,r,o){if(typeof r=="function"&&(o=r,r="utf8"),typeof e=="string"&&(e=gh.from(e,r)),this[_E])return;RU(this[ti],"zlib binding closed");let a=this[ti]._handle,n=a.close;a.close=()=>{};let u=this[ti].close;this[ti].close=()=>{},gh.concat=h=>h;let A;try{let h=typeof e[q1]=="number"?e[q1]:this[q1];A=this[ti]._processChunk(e,h),gh.concat=mue}catch(h){gh.concat=mue,this[$b](new HE(h))}finally{this[ti]&&(this[ti]._handle=a,a.close=n,this[ti].close=u,this[ti].removeAllListeners("error"))}this[ti]&&this[ti].on("error",h=>this[$b](new HE(h)));let p;if(A)if(Array.isArray(A)&&A.length>0){p=this[Rd](gh.from(A[0]));for(let h=1;h{this.flush(a),n()};try{this[ti].params(e,r)}finally{this[ti].flush=o}this[ti]&&(this[xU]=e,this[kU]=r)}}}},TU=class extends qf{constructor(e){super(e,"Deflate")}},NU=class extends qf{constructor(e){super(e,"Inflate")}},FU=Symbol("_portable"),LU=class extends qf{constructor(e){super(e,"Gzip"),this[FU]=e&&!!e.portable}[Rd](e){return this[FU]?(this[FU]=!1,e[9]=255,super[Rd](e)):super[Rd](e)}},OU=class extends qf{constructor(e){super(e,"Gunzip")}},MU=class extends qf{constructor(e){super(e,"DeflateRaw")}},UU=class extends qf{constructor(e){super(e,"InflateRaw")}},_U=class extends qf{constructor(e){super(e,"Unzip")}},tx=class extends ex{constructor(e,r){e=e||{},e.flush=e.flush||Fd.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Fd.BROTLI_OPERATION_FINISH,super(e,r),this[jU]=Fd.BROTLI_OPERATION_FLUSH}},HU=class extends tx{constructor(e){super(e,"BrotliCompress")}},qU=class extends tx{constructor(e){super(e,"BrotliDecompress")}};cl.Deflate=TU;cl.Inflate=NU;cl.Gzip=LU;cl.Gunzip=OU;cl.DeflateRaw=MU;cl.InflateRaw=UU;cl.Unzip=_U;typeof Eue.BrotliCompress=="function"?(cl.BrotliCompress=HU,cl.BrotliDecompress=qU):cl.BrotliCompress=cl.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var qE=_((q4t,Cue)=>{var Lat=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;Cue.exports=Lat!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var rx=_((G4t,wue)=>{"use strict";var Oat=UE(),YU=qE(),WU=Symbol("slurp");wue.exports=class extends Oat{constructor(e,r,o){switch(super(),this.pause(),this.extended=r,this.globalExtended=o,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=YU(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=YU(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[WU](r),o&&this[WU](o,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let o=this.remain,a=this.blockRemain;return this.remain=Math.max(0,o-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:o>=r?super.write(e):super.write(e.slice(0,o))}[WU](e,r){for(let o in e)e[o]!==null&&e[o]!==void 0&&!(r&&o==="path")&&(this[o]=o==="path"||o==="linkpath"?YU(e[o]):e[o])}}});var KU=_(nx=>{"use strict";nx.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);nx.code=new Map(Array.from(nx.name).map(t=>[t[1],t[0]]))});var Due=_((W4t,vue)=>{"use strict";var Mat=(t,e)=>{if(Number.isSafeInteger(t))t<0?_at(t,e):Uat(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Uat=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},_at=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var o=e.length;o>1;o--){var a=t&255;t=Math.floor(t/256),r?e[o-1]=Iue(a):a===0?e[o-1]=0:(r=!0,e[o-1]=Bue(a))}},Hat=t=>{let e=t[0],r=e===128?jat(t.slice(1,t.length)):e===255?qat(t):null;if(r===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(r))throw Error("parsed number outside of javascript safe integer range");return r},qat=t=>{for(var e=t.length,r=0,o=!1,a=e-1;a>-1;a--){var n=t[a],u;o?u=Iue(n):n===0?u=n:(o=!0,u=Bue(n)),u!==0&&(r-=u*Math.pow(256,e-a-1))}return r},jat=t=>{for(var e=t.length,r=0,o=e-1;o>-1;o--){var a=t[o];a!==0&&(r+=a*Math.pow(256,e-o-1))}return r},Iue=t=>(255^t)&255,Bue=t=>(255^t)+1&255;vue.exports={encode:Mat,parse:Hat}});var GE=_((K4t,Pue)=>{"use strict";var VU=KU(),jE=ve("path").posix,Sue=Due(),JU=Symbol("slurp"),ul=Symbol("type"),ZU=class{constructor(e,r,o,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[ul]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,o,a):e&&this.set(e)}decode(e,r,o,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=Td(e,r,100),this.mode=dh(e,r+100,8),this.uid=dh(e,r+108,8),this.gid=dh(e,r+116,8),this.size=dh(e,r+124,12),this.mtime=zU(e,r+136,12),this.cksum=dh(e,r+148,12),this[JU](o),this[JU](a,!0),this[ul]=Td(e,r+156,1),this[ul]===""&&(this[ul]="0"),this[ul]==="0"&&this.path.substr(-1)==="/"&&(this[ul]="5"),this[ul]==="5"&&(this.size=0),this.linkpath=Td(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=Td(e,r+265,32),this.gname=Td(e,r+297,32),this.devmaj=dh(e,r+329,8),this.devmin=dh(e,r+337,8),e[r+475]!==0){let u=Td(e,r+345,155);this.path=u+"/"+this.path}else{let u=Td(e,r+345,130);u&&(this.path=u+"/"+this.path),this.atime=zU(e,r+476,12),this.ctime=zU(e,r+488,12)}let n=8*32;for(let u=r;u=r+512))throw new Error("need 512 bytes for header");let o=this.ctime||this.atime?130:155,a=Gat(this.path||"",o),n=a[0],u=a[1];this.needPax=a[2],this.needPax=Nd(e,r,100,n)||this.needPax,this.needPax=mh(e,r+100,8,this.mode)||this.needPax,this.needPax=mh(e,r+108,8,this.uid)||this.needPax,this.needPax=mh(e,r+116,8,this.gid)||this.needPax,this.needPax=mh(e,r+124,12,this.size)||this.needPax,this.needPax=XU(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[ul].charCodeAt(0),this.needPax=Nd(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Nd(e,r+265,32,this.uname)||this.needPax,this.needPax=Nd(e,r+297,32,this.gname)||this.needPax,this.needPax=mh(e,r+329,8,this.devmaj)||this.needPax,this.needPax=mh(e,r+337,8,this.devmin)||this.needPax,this.needPax=Nd(e,r+345,o,u)||this.needPax,e[r+475]!==0?this.needPax=Nd(e,r+345,155,u)||this.needPax:(this.needPax=Nd(e,r+345,130,u)||this.needPax,this.needPax=XU(e,r+476,12,this.atime)||this.needPax,this.needPax=XU(e,r+488,12,this.ctime)||this.needPax);let A=8*32;for(let p=r;p{let o=t,a="",n,u=jE.parse(t).root||".";if(Buffer.byteLength(o)<100)n=[o,a,!1];else{a=jE.dirname(o),o=jE.basename(o);do Buffer.byteLength(o)<=100&&Buffer.byteLength(a)<=e?n=[o,a,!1]:Buffer.byteLength(o)>100&&Buffer.byteLength(a)<=e?n=[o.substr(0,100-1),a,!0]:(o=jE.join(jE.basename(a),o),a=jE.dirname(a));while(a!==u&&!n);n||(n=[t.substr(0,100-1),"",!0])}return n},Td=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),zU=(t,e,r)=>Yat(dh(t,e,r)),Yat=t=>t===null?null:new Date(t*1e3),dh=(t,e,r)=>t[e]&128?Sue.parse(t.slice(e,e+r)):Kat(t,e,r),Wat=t=>isNaN(t)?null:t,Kat=(t,e,r)=>Wat(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),Vat={12:8589934591,8:2097151},mh=(t,e,r,o)=>o===null?!1:o>Vat[r]||o<0?(Sue.encode(o,t.slice(e,e+r)),!0):(Jat(t,e,r,o),!1),Jat=(t,e,r,o)=>t.write(zat(o,r),e,r,"ascii"),zat=(t,e)=>Xat(Math.floor(t).toString(8),e),Xat=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",XU=(t,e,r,o)=>o===null?!1:mh(t,e,r,o.getTime()/1e3),Zat=new Array(156).join("\0"),Nd=(t,e,r,o)=>o===null?!1:(t.write(o+Zat,e,r,"utf8"),o.length!==Buffer.byteLength(o)||o.length>r);Pue.exports=ZU});var ix=_((V4t,bue)=>{"use strict";var $at=GE(),elt=ve("path"),j1=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),o=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(o);for(let n=0;n<512;n++)a[n]=0;new $at({path:("PaxHeader/"+elt.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+o}};j1.parse=(t,e,r)=>new j1(tlt(rlt(t),e),r);var tlt=(t,e)=>e?Object.keys(t).reduce((r,o)=>(r[o]=t[o],r),e):t,rlt=t=>t.replace(/\n$/,"").split(` +`).reduce(nlt,Object.create(null)),nlt=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let o=e.split("="),a=o.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=o.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};bue.exports=j1});var YE=_((J4t,xue)=>{xue.exports=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)}});var sx=_((z4t,kue)=>{"use strict";kue.exports=t=>class extends t{warn(e,r,o={}){this.file&&(o.file=this.file),this.cwd&&(o.cwd=this.cwd),o.code=r instanceof Error&&r.code||e,o.tarCode=e,!this.strict&&o.recoverable!==!1?(r instanceof Error&&(o=Object.assign(r,o),r=r.message),this.emit("warn",o.tarCode,r,o)):r instanceof Error?this.emit("error",Object.assign(r,o)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),o))}}});var e3=_((Z4t,Que)=>{"use strict";var ox=["|","<",">","?",":"],$U=ox.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),ilt=new Map(ox.map((t,e)=>[t,$U[e]])),slt=new Map($U.map((t,e)=>[t,ox[e]]));Que.exports={encode:t=>ox.reduce((e,r)=>e.split(r).join(ilt.get(r)),t),decode:t=>$U.reduce((e,r)=>e.split(r).join(slt.get(r)),t)}});var t3=_(($4t,Rue)=>{var{isAbsolute:olt,parse:Fue}=ve("path").win32;Rue.exports=t=>{let e="",r=Fue(t);for(;olt(t)||r.root;){let o=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(o.length),e+=o,r=Fue(t)}return[e,t]}});var Nue=_((eUt,Tue)=>{"use strict";Tue.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var A3=_((nUt,Jue)=>{"use strict";var que=UE(),jue=ix(),Gue=GE(),oA=ve("fs"),Lue=ve("path"),sA=qE(),alt=YE(),Yue=(t,e)=>e?(t=sA(t).replace(/^\.(\/|$)/,""),alt(e)+"/"+t):sA(t),llt=16*1024*1024,Oue=Symbol("process"),Mue=Symbol("file"),Uue=Symbol("directory"),n3=Symbol("symlink"),_ue=Symbol("hardlink"),G1=Symbol("header"),ax=Symbol("read"),i3=Symbol("lstat"),lx=Symbol("onlstat"),s3=Symbol("onread"),o3=Symbol("onreadlink"),a3=Symbol("openfile"),l3=Symbol("onopenfile"),yh=Symbol("close"),cx=Symbol("mode"),c3=Symbol("awaitDrain"),r3=Symbol("ondrain"),aA=Symbol("prefix"),Hue=Symbol("hadError"),Wue=sx(),clt=e3(),Kue=t3(),Vue=Nue(),ux=Wue(class extends que{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=sA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||llt,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=sA(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,this.prefix=r.prefix?sA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Kue(this.path);a&&(this.path=n,o=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=clt.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=sA(r.absolute||Lue.resolve(this.cwd,e)),this.path===""&&(this.path="./"),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.statCache.has(this.absolute)?this[lx](this.statCache.get(this.absolute)):this[i3]()}emit(e,...r){return e==="error"&&(this[Hue]=!0),super.emit(e,...r)}[i3](){oA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[lx](r)})}[lx](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=Alt(e),this.emit("stat",e),this[Oue]()}[Oue](){switch(this.type){case"File":return this[Mue]();case"Directory":return this[Uue]();case"SymbolicLink":return this[n3]();default:return this.end()}}[cx](e){return Vue(e,this.type==="Directory",this.portable)}[aA](e){return Yue(e,this.prefix)}[G1](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new Gue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this[cx](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new jue({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[Uue](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[G1](),this.end()}[n3](){oA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[o3](r)})}[o3](e){this.linkpath=sA(e),this[G1](),this.end()}[_ue](e){this.type="Link",this.linkpath=sA(Lue.relative(this.cwd,e)),this.stat.size=0,this[G1](),this.end()}[Mue](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let r=this.linkCache.get(e);if(r.indexOf(this.cwd)===0)return this[_ue](r)}this.linkCache.set(e,this.absolute)}if(this[G1](),this.stat.size===0)return this.end();this[a3]()}[a3](){oA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[l3](r)})}[l3](e){if(this.fd=e,this[Hue])return this[yh]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let r=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(r),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[ax]()}[ax](){let{fd:e,buf:r,offset:o,length:a,pos:n}=this;oA.read(e,r,o,a,n,(u,A)=>{if(u)return this[yh](()=>this.emit("error",u));this[s3](A)})}[yh](e){oA.close(this.fd,e)}[s3](e){if(e<=0&&this.remain>0){let a=new Error("encountered unexpected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[yh](()=>this.emit("error",a))}if(e>this.remain){let a=new Error("did not encounter expected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[yh](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[r3]())}[c3](e){this.once("drain",e)}write(e){if(this.blockRemaine?this.emit("error",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[ax]()}}),u3=class extends ux{[i3](){this[lx](oA.lstatSync(this.absolute))}[n3](){this[o3](oA.readlinkSync(this.absolute))}[a3](){this[l3](oA.openSync(this.absolute,"r"))}[ax](){let e=!0;try{let{fd:r,buf:o,offset:a,length:n,pos:u}=this,A=oA.readSync(r,o,a,n,u);this[s3](A),e=!1}finally{if(e)try{this[yh](()=>{})}catch{}}}[c3](e){e()}[yh](e){oA.closeSync(this.fd),e()}},ult=Wue(class extends que{constructor(e,r){r=r||{},super(r),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=r.prefix||null,this.path=sA(e.path),this.mode=this[cx](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:r.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=sA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Kue(this.path);a&&(this.path=n,o=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new Gue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.header.encode()&&!this.noPax&&super.write(new jue({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[aA](e){return Yue(e,this.prefix)}[cx](e){return Vue(e,this.type==="Directory",this.portable)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});ux.Sync=u3;ux.Tar=ult;var Alt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Jue.exports=ux});var Ex=_((sUt,rAe)=>{"use strict";var mx=class{constructor(e,r){this.path=e||"./",this.absolute=r,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},flt=UE(),plt=GU(),hlt=rx(),C3=A3(),glt=C3.Sync,dlt=C3.Tar,mlt=IS(),zue=Buffer.alloc(1024),px=Symbol("onStat"),Ax=Symbol("ended"),lA=Symbol("queue"),WE=Symbol("current"),Ld=Symbol("process"),fx=Symbol("processing"),Xue=Symbol("processJob"),cA=Symbol("jobs"),f3=Symbol("jobDone"),hx=Symbol("addFSEntry"),Zue=Symbol("addTarEntry"),d3=Symbol("stat"),m3=Symbol("readdir"),gx=Symbol("onreaddir"),dx=Symbol("pipe"),$ue=Symbol("entry"),p3=Symbol("entryOpt"),y3=Symbol("writeEntryClass"),tAe=Symbol("write"),h3=Symbol("ondrain"),yx=ve("fs"),eAe=ve("path"),ylt=sx(),g3=qE(),w3=ylt(class extends flt{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=g3(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[y3]=C3,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new plt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[h3]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[h3]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:r=>!0,this[lA]=new mlt,this[cA]=0,this.jobs=+e.jobs||4,this[fx]=!1,this[Ax]=!1}[tAe](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[Ax]=!0,this[Ld](),this}write(e){if(this[Ax])throw new Error("write after end");return e instanceof hlt?this[Zue](e):this[hx](e),this.flowing}[Zue](e){let r=g3(eAe.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let o=new mx(e.path,r,!1);o.entry=new dlt(e,this[p3](o)),o.entry.on("end",a=>this[f3](o)),this[cA]+=1,this[lA].push(o)}this[Ld]()}[hx](e){let r=g3(eAe.resolve(this.cwd,e));this[lA].push(new mx(e,r)),this[Ld]()}[d3](e){e.pending=!0,this[cA]+=1;let r=this.follow?"stat":"lstat";yx[r](e.absolute,(o,a)=>{e.pending=!1,this[cA]-=1,o?this.emit("error",o):this[px](e,a)})}[px](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[Ld]()}[m3](e){e.pending=!0,this[cA]+=1,yx.readdir(e.absolute,(r,o)=>{if(e.pending=!1,this[cA]-=1,r)return this.emit("error",r);this[gx](e,o)})}[gx](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[Ld]()}[Ld](){if(!this[fx]){this[fx]=!0;for(let e=this[lA].head;e!==null&&this[cA]this.warn(r,o,a),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[$ue](e){this[cA]+=1;try{return new this[y3](e.path,this[p3](e)).on("end",()=>this[f3](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[h3](){this[WE]&&this[WE].entry&&this[WE].entry.resume()}[dx](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[hx](u+a)});let r=e.entry,o=this.zip;o?r.on("data",a=>{o.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),E3=class extends w3{constructor(e){super(e),this[y3]=glt}pause(){}resume(){}[d3](e){let r=this.follow?"statSync":"lstatSync";this[px](e,yx[r](e.absolute))}[m3](e,r){this[gx](e,yx.readdirSync(e.absolute))}[dx](e){let r=e.entry,o=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[hx](u+a)}),o?r.on("data",a=>{o.write(a)}):r.on("data",a=>{super[tAe](a)})}};w3.Sync=E3;rAe.exports=w3});var eC=_(W1=>{"use strict";var Elt=UE(),Clt=ve("events").EventEmitter,Qa=ve("fs"),v3=Qa.writev;if(!v3){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;v3=(r,o,a,n)=>{let u=(p,h)=>n(p,h,o),A=new e;A.oncomplete=u,t.writeBuffers(r,o,a,A)}}var ZE=Symbol("_autoClose"),Yc=Symbol("_close"),Y1=Symbol("_ended"),Gn=Symbol("_fd"),nAe=Symbol("_finished"),Ch=Symbol("_flags"),I3=Symbol("_flush"),D3=Symbol("_handleChunk"),S3=Symbol("_makeBuf"),vx=Symbol("_mode"),Cx=Symbol("_needDrain"),zE=Symbol("_onerror"),$E=Symbol("_onopen"),B3=Symbol("_onread"),VE=Symbol("_onwrite"),wh=Symbol("_open"),jf=Symbol("_path"),Od=Symbol("_pos"),uA=Symbol("_queue"),JE=Symbol("_read"),iAe=Symbol("_readSize"),Eh=Symbol("_reading"),wx=Symbol("_remain"),sAe=Symbol("_size"),Ix=Symbol("_write"),KE=Symbol("_writing"),Bx=Symbol("_defaultFlag"),XE=Symbol("_errored"),Dx=class extends Elt{constructor(e,r){if(r=r||{},super(r),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[XE]=!1,this[Gn]=typeof r.fd=="number"?r.fd:null,this[jf]=e,this[iAe]=r.readSize||16*1024*1024,this[Eh]=!1,this[sAe]=typeof r.size=="number"?r.size:1/0,this[wx]=this[sAe],this[ZE]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[Gn]=="number"?this[JE]():this[wh]()}get fd(){return this[Gn]}get path(){return this[jf]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[wh](){Qa.open(this[jf],"r",(e,r)=>this[$E](e,r))}[$E](e,r){e?this[zE](e):(this[Gn]=r,this.emit("open",r),this[JE]())}[S3](){return Buffer.allocUnsafe(Math.min(this[iAe],this[wx]))}[JE](){if(!this[Eh]){this[Eh]=!0;let e=this[S3]();if(e.length===0)return process.nextTick(()=>this[B3](null,0,e));Qa.read(this[Gn],e,0,e.length,null,(r,o,a)=>this[B3](r,o,a))}}[B3](e,r,o){this[Eh]=!1,e?this[zE](e):this[D3](r,o)&&this[JE]()}[Yc](){if(this[ZE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[zE](e){this[Eh]=!0,this[Yc](),this.emit("error",e)}[D3](e,r){let o=!1;return this[wx]-=e,e>0&&(o=super.write(ethis[$E](e,r))}[$E](e,r){this[Bx]&&this[Ch]==="r+"&&e&&e.code==="ENOENT"?(this[Ch]="w",this[wh]()):e?this[zE](e):(this[Gn]=r,this.emit("open",r),this[I3]())}end(e,r){return e&&this.write(e,r),this[Y1]=!0,!this[KE]&&!this[uA].length&&typeof this[Gn]=="number"&&this[VE](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[Y1]?(this.emit("error",new Error("write() after end()")),!1):this[Gn]===null||this[KE]||this[uA].length?(this[uA].push(e),this[Cx]=!0,!1):(this[KE]=!0,this[Ix](e),!0)}[Ix](e){Qa.write(this[Gn],e,0,e.length,this[Od],(r,o)=>this[VE](r,o))}[VE](e,r){e?this[zE](e):(this[Od]!==null&&(this[Od]+=r),this[uA].length?this[I3]():(this[KE]=!1,this[Y1]&&!this[nAe]?(this[nAe]=!0,this[Yc](),this.emit("finish")):this[Cx]&&(this[Cx]=!1,this.emit("drain"))))}[I3](){if(this[uA].length===0)this[Y1]&&this[VE](null,0);else if(this[uA].length===1)this[Ix](this[uA].pop());else{let e=this[uA];this[uA]=[],v3(this[Gn],e,this[Od],(r,o)=>this[VE](r,o))}}[Yc](){if(this[ZE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},b3=class extends Sx{[wh](){let e;if(this[Bx]&&this[Ch]==="r+")try{e=Qa.openSync(this[jf],this[Ch],this[vx])}catch(r){if(r.code==="ENOENT")return this[Ch]="w",this[wh]();throw r}else e=Qa.openSync(this[jf],this[Ch],this[vx]);this[$E](null,e)}[Yc](){if(this[ZE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.closeSync(e),this.emit("close")}}[Ix](e){let r=!0;try{this[VE](null,Qa.writeSync(this[Gn],e,0,e.length,this[Od])),r=!1}finally{if(r)try{this[Yc]()}catch{}}}};W1.ReadStream=Dx;W1.ReadStreamSync=P3;W1.WriteStream=Sx;W1.WriteStreamSync=b3});var Rx=_((lUt,fAe)=>{"use strict";var wlt=sx(),Ilt=GE(),Blt=ve("events"),vlt=IS(),Dlt=1024*1024,Slt=rx(),oAe=ix(),Plt=GU(),x3=Buffer.from([31,139]),Xl=Symbol("state"),Md=Symbol("writeEntry"),Gf=Symbol("readEntry"),k3=Symbol("nextEntry"),aAe=Symbol("processEntry"),Zl=Symbol("extendedHeader"),K1=Symbol("globalExtendedHeader"),Ih=Symbol("meta"),lAe=Symbol("emitMeta"),fi=Symbol("buffer"),Yf=Symbol("queue"),Ud=Symbol("ended"),cAe=Symbol("emittedEnd"),_d=Symbol("emit"),Fa=Symbol("unzip"),Px=Symbol("consumeChunk"),bx=Symbol("consumeChunkSub"),Q3=Symbol("consumeBody"),uAe=Symbol("consumeMeta"),AAe=Symbol("consumeHeader"),xx=Symbol("consuming"),F3=Symbol("bufferConcat"),R3=Symbol("maybeEnd"),V1=Symbol("writing"),Bh=Symbol("aborted"),kx=Symbol("onDone"),Hd=Symbol("sawValidEntry"),Qx=Symbol("sawNullBlock"),Fx=Symbol("sawEOF"),blt=t=>!0;fAe.exports=wlt(class extends Blt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[Hd]=null,this.on(kx,r=>{(this[Xl]==="begin"||this[Hd]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(kx,e.ondone):this.on(kx,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||Dlt,this.filter=typeof e.filter=="function"?e.filter:blt,this.writable=!0,this.readable=!1,this[Yf]=new vlt,this[fi]=null,this[Gf]=null,this[Md]=null,this[Xl]="begin",this[Ih]="",this[Zl]=null,this[K1]=null,this[Ud]=!1,this[Fa]=null,this[Bh]=!1,this[Qx]=!1,this[Fx]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[AAe](e,r){this[Hd]===null&&(this[Hd]=!1);let o;try{o=new Ilt(e,r,this[Zl],this[K1])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(o.nullBlock)this[Qx]?(this[Fx]=!0,this[Xl]==="begin"&&(this[Xl]="header"),this[_d]("eof")):(this[Qx]=!0,this[_d]("nullBlock"));else if(this[Qx]=!1,!o.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:o});else if(!o.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:o});else{let a=o.type;if(/^(Symbolic)?Link$/.test(a)&&!o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:o});else if(!/^(Symbolic)?Link$/.test(a)&&o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:o});else{let n=this[Md]=new Slt(o,this[Zl],this[K1]);if(!this[Hd])if(n.remain){let u=()=>{n.invalid||(this[Hd]=!0)};n.on("end",u)}else this[Hd]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[_d]("ignoredEntry",n),this[Xl]="ignore",n.resume()):n.size>0&&(this[Ih]="",n.on("data",u=>this[Ih]+=u),this[Xl]="meta"):(this[Zl]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[_d]("ignoredEntry",n),this[Xl]=n.remain?"ignore":"header",n.resume()):(n.remain?this[Xl]="body":(this[Xl]="header",n.end()),this[Gf]?this[Yf].push(n):(this[Yf].push(n),this[k3]())))}}}[aAe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[Gf]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",o=>this[k3]()),r=!1)):(this[Gf]=null,r=!1),r}[k3](){do;while(this[aAe](this[Yf].shift()));if(!this[Yf].length){let e=this[Gf];!e||e.flowing||e.size===e.remain?this[V1]||this.emit("drain"):e.once("drain",o=>this.emit("drain"))}}[Q3](e,r){let o=this[Md],a=o.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return o.write(n),o.blockRemain||(this[Xl]="header",this[Md]=null,o.end()),n.length}[uAe](e,r){let o=this[Md],a=this[Q3](e,r);return this[Md]||this[lAe](o),a}[_d](e,r,o){!this[Yf].length&&!this[Gf]?this.emit(e,r,o):this[Yf].push([e,r,o])}[lAe](e){switch(this[_d]("meta",this[Ih]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[Zl]=oAe.parse(this[Ih],this[Zl],!1);break;case"GlobalExtendedHeader":this[K1]=oAe.parse(this[Ih],this[K1],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[Zl]=this[Zl]||Object.create(null),this[Zl].path=this[Ih].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[Zl]=this[Zl]||Object.create(null),this[Zl].linkpath=this[Ih].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[Bh]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[Bh])return;if(this[Fa]===null&&e){if(this[fi]&&(e=Buffer.concat([this[fi],e]),this[fi]=null),e.lengththis[Px](n)),this[Fa].on("error",n=>this.abort(n)),this[Fa].on("end",n=>{this[Ud]=!0,this[Px]()}),this[V1]=!0;let a=this[Fa][o?"end":"write"](e);return this[V1]=!1,a}}this[V1]=!0,this[Fa]?this[Fa].write(e):this[Px](e),this[V1]=!1;let r=this[Yf].length?!1:this[Gf]?this[Gf].flowing:!0;return!r&&!this[Yf].length&&this[Gf].once("drain",o=>this.emit("drain")),r}[F3](e){e&&!this[Bh]&&(this[fi]=this[fi]?Buffer.concat([this[fi],e]):e)}[R3](){if(this[Ud]&&!this[cAe]&&!this[Bh]&&!this[xx]){this[cAe]=!0;let e=this[Md];if(e&&e.blockRemain){let r=this[fi]?this[fi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[fi]&&e.write(this[fi]),e.end()}this[_d](kx)}}[Px](e){if(this[xx])this[F3](e);else if(!e&&!this[fi])this[R3]();else{if(this[xx]=!0,this[fi]){this[F3](e);let r=this[fi];this[fi]=null,this[bx](r)}else this[bx](e);for(;this[fi]&&this[fi].length>=512&&!this[Bh]&&!this[Fx];){let r=this[fi];this[fi]=null,this[bx](r)}this[xx]=!1}(!this[fi]||this[Ud])&&this[R3]()}[bx](e){let r=0,o=e.length;for(;r+512<=o&&!this[Bh]&&!this[Fx];)switch(this[Xl]){case"begin":case"header":this[AAe](e,r),r+=512;break;case"ignore":case"body":r+=this[Q3](e,r);break;case"meta":r+=this[uAe](e,r);break;default:throw new Error("invalid state: "+this[Xl])}r{"use strict";var xlt=OE(),hAe=Rx(),tC=ve("fs"),klt=eC(),pAe=ve("path"),T3=YE();dAe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=xlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Flt(o,e),o.noResume||Qlt(o),o.file&&o.sync?Rlt(o):o.file?Tlt(o,r):gAe(o)};var Qlt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Flt=(t,e)=>{let r=new Map(e.map(n=>[T3(n),!0])),o=t.filter,a=(n,u)=>{let A=u||pAe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(pAe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(T3(n)):n=>a(T3(n))},Rlt=t=>{let e=gAe(t),r=t.file,o=!0,a;try{let n=tC.statSync(r),u=t.maxReadSize||16*1024*1024;if(n.size{let r=new hAe(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("end",u),tC.stat(a,(p,h)=>{if(p)A(p);else{let E=new klt.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},gAe=t=>new hAe(t)});var IAe=_((uUt,wAe)=>{"use strict";var Nlt=OE(),Nx=Ex(),mAe=eC(),yAe=Tx(),EAe=ve("path");wAe.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let o=Nlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return o.file&&o.sync?Llt(o,e):o.file?Olt(o,e,r):o.sync?Mlt(o,e):Ult(o,e)};var Llt=(t,e)=>{let r=new Nx.Sync(t),o=new mAe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(o),CAe(r,e)},Olt=(t,e,r)=>{let o=new Nx(t),a=new mAe.WriteStream(t.file,{mode:t.mode||438});o.pipe(a);let n=new Promise((u,A)=>{a.on("error",A),a.on("close",u),o.on("error",A)});return N3(o,e),r?n.then(r,r):n},CAe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?yAe({file:EAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},N3=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return yAe({file:EAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>N3(t,e));t.add(r)}t.end()},Mlt=(t,e)=>{let r=new Nx.Sync(t);return CAe(r,e),r},Ult=(t,e)=>{let r=new Nx(t);return N3(r,e),r}});var L3=_((AUt,xAe)=>{"use strict";var _lt=OE(),BAe=Ex(),Al=ve("fs"),vAe=eC(),DAe=Tx(),SAe=ve("path"),PAe=GE();xAe.exports=(t,e,r)=>{let o=_lt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),o.sync?Hlt(o,e):jlt(o,e,r)};var Hlt=(t,e)=>{let r=new BAe.Sync(t),o=!0,a,n;try{try{a=Al.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=Al.openSync(t.file,"w+");else throw p}let u=Al.fstatSync(a),A=Buffer.alloc(512);e:for(n=0;nu.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}o=!1,qlt(t,r,n,a,e)}finally{if(o)try{Al.closeSync(a)}catch{}}},qlt=(t,e,r,o,a)=>{let n=new vAe.WriteStreamSync(t.file,{fd:o,start:r});e.pipe(n),Glt(e,a)},jlt=(t,e,r)=>{e=Array.from(e);let o=new BAe(t),a=(u,A,p)=>{let h=(C,R)=>{C?Al.close(u,L=>p(C)):p(null,R)},E=0;if(A===0)return h(null,0);let I=0,v=Buffer.alloc(512),x=(C,R)=>{if(C)return h(C);if(I+=R,I<512&&R)return Al.read(u,v,I,v.length-I,E+I,x);if(E===0&&v[0]===31&&v[1]===139)return h(new Error("cannot append to compressed archives"));if(I<512)return h(null,E);let L=new PAe(v);if(!L.cksumValid)return h(null,E);let U=512*Math.ceil(L.size/512);if(E+U+512>A||(E+=U+512,E>=A))return h(null,E);t.mtimeCache&&t.mtimeCache.set(L.path,L.mtime),I=0,Al.read(u,v,0,512,E,x)};Al.read(u,v,0,512,E,x)},n=new Promise((u,A)=>{o.on("error",A);let p="r+",h=(E,I)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",Al.open(t.file,p,h);if(E)return A(E);Al.fstat(I,(v,x)=>{if(v)return Al.close(I,()=>A(v));a(I,x.size,(C,R)=>{if(C)return A(C);let L=new vAe.WriteStream(t.file,{fd:I,start:R});o.pipe(L),L.on("error",A),L.on("close",u),bAe(o,e)})})};Al.open(t.file,p,h)});return r?n.then(r,r):n},Glt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?DAe({file:SAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},bAe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return DAe({file:SAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>bAe(t,e));t.add(r)}t.end()}});var QAe=_((fUt,kAe)=>{"use strict";var Ylt=OE(),Wlt=L3();kAe.exports=(t,e,r)=>{let o=Ylt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),Klt(o),Wlt(o,e,r)};var Klt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,o)=>e(r,o)&&!(t.mtimeCache.get(r)>o.mtime):(r,o)=>!(t.mtimeCache.get(r)>o.mtime)}});var TAe=_((pUt,RAe)=>{var{promisify:FAe}=ve("util"),vh=ve("fs"),Vlt=t=>{if(!t)t={mode:511,fs:vh};else if(typeof t=="object")t={mode:511,fs:vh,...t};else if(typeof t=="number")t={mode:t,fs:vh};else if(typeof t=="string")t={mode:parseInt(t,8),fs:vh};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||vh.mkdir,t.mkdirAsync=FAe(t.mkdir),t.stat=t.stat||t.fs.stat||vh.stat,t.statAsync=FAe(t.stat),t.statSync=t.statSync||t.fs.statSync||vh.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||vh.mkdirSync,t};RAe.exports=Vlt});var LAe=_((hUt,NAe)=>{var Jlt=process.platform,{resolve:zlt,parse:Xlt}=ve("path"),Zlt=t=>{if(/\0/.test(t))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:t,code:"ERR_INVALID_ARG_VALUE"});if(t=zlt(t),Jlt==="win32"){let e=/[*|"<>?:]/,{root:r}=Xlt(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};NAe.exports=Zlt});var HAe=_((gUt,_Ae)=>{var{dirname:OAe}=ve("path"),MAe=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(o=>o.isDirectory()?r:void 0,o=>o.code==="ENOENT"?MAe(t,OAe(e),e):void 0),UAe=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(o){return o.code==="ENOENT"?UAe(t,OAe(e),e):void 0}};_Ae.exports={findMade:MAe,findMadeSync:UAe}});var U3=_((dUt,jAe)=>{var{dirname:qAe}=ve("path"),O3=(t,e,r)=>{e.recursive=!1;let o=qAe(t);return o===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return O3(o,e).then(n=>O3(t,e,n));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;return e.statAsync(t).then(n=>{if(n.isDirectory())return r;throw a},()=>{throw a})})},M3=(t,e,r)=>{let o=qAe(t);if(e.recursive=!1,o===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return M3(t,e,M3(o,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};jAe.exports={mkdirpManual:O3,mkdirpManualSync:M3}});var WAe=_((mUt,YAe)=>{var{dirname:GAe}=ve("path"),{findMade:$lt,findMadeSync:ect}=HAe(),{mkdirpManual:tct,mkdirpManualSync:rct}=U3(),nct=(t,e)=>(e.recursive=!0,GAe(t)===t?e.mkdirAsync(t,e):$lt(e,t).then(o=>e.mkdirAsync(t,e).then(()=>o).catch(a=>{if(a.code==="ENOENT")return tct(t,e);throw a}))),ict=(t,e)=>{if(e.recursive=!0,GAe(t)===t)return e.mkdirSync(t,e);let o=ect(e,t);try{return e.mkdirSync(t,e),o}catch(a){if(a.code==="ENOENT")return rct(t,e);throw a}};YAe.exports={mkdirpNative:nct,mkdirpNativeSync:ict}});var zAe=_((yUt,JAe)=>{var KAe=ve("fs"),sct=process.version,_3=sct.replace(/^v/,"").split("."),VAe=+_3[0]>10||+_3[0]==10&&+_3[1]>=12,oct=VAe?t=>t.mkdir===KAe.mkdir:()=>!1,act=VAe?t=>t.mkdirSync===KAe.mkdirSync:()=>!1;JAe.exports={useNative:oct,useNativeSync:act}});var rfe=_((EUt,tfe)=>{var rC=TAe(),nC=LAe(),{mkdirpNative:XAe,mkdirpNativeSync:ZAe}=WAe(),{mkdirpManual:$Ae,mkdirpManualSync:efe}=U3(),{useNative:lct,useNativeSync:cct}=zAe(),iC=(t,e)=>(t=nC(t),e=rC(e),lct(e)?XAe(t,e):$Ae(t,e)),uct=(t,e)=>(t=nC(t),e=rC(e),cct(e)?ZAe(t,e):efe(t,e));iC.sync=uct;iC.native=(t,e)=>XAe(nC(t),rC(e));iC.manual=(t,e)=>$Ae(nC(t),rC(e));iC.nativeSync=(t,e)=>ZAe(nC(t),rC(e));iC.manualSync=(t,e)=>efe(nC(t),rC(e));tfe.exports=iC});var cfe=_((CUt,lfe)=>{"use strict";var $l=ve("fs"),qd=ve("path"),Act=$l.lchown?"lchown":"chown",fct=$l.lchownSync?"lchownSync":"chownSync",ife=$l.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),nfe=(t,e,r)=>{try{return $l[fct](t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},pct=(t,e,r)=>{try{return $l.chownSync(t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},hct=ife?(t,e,r,o)=>a=>{!a||a.code!=="EISDIR"?o(a):$l.chown(t,e,r,o)}:(t,e,r,o)=>o,H3=ife?(t,e,r)=>{try{return nfe(t,e,r)}catch(o){if(o.code!=="EISDIR")throw o;pct(t,e,r)}}:(t,e,r)=>nfe(t,e,r),gct=process.version,sfe=(t,e,r)=>$l.readdir(t,e,r),dct=(t,e)=>$l.readdirSync(t,e);/^v4\./.test(gct)&&(sfe=(t,e,r)=>$l.readdir(t,r));var Lx=(t,e,r,o)=>{$l[Act](t,e,r,hct(t,e,r,a=>{o(a&&a.code!=="ENOENT"?a:null)}))},ofe=(t,e,r,o,a)=>{if(typeof e=="string")return $l.lstat(qd.resolve(t,e),(n,u)=>{if(n)return a(n.code!=="ENOENT"?n:null);u.name=e,ofe(t,u,r,o,a)});if(e.isDirectory())q3(qd.resolve(t,e.name),r,o,n=>{if(n)return a(n);let u=qd.resolve(t,e.name);Lx(u,r,o,a)});else{let n=qd.resolve(t,e.name);Lx(n,r,o,a)}},q3=(t,e,r,o)=>{sfe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return o();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return o(a)}if(a||!n.length)return Lx(t,e,r,o);let u=n.length,A=null,p=h=>{if(!A){if(h)return o(A=h);if(--u===0)return Lx(t,e,r,o)}};n.forEach(h=>ofe(t,h,e,r,p))})},mct=(t,e,r,o)=>{if(typeof e=="string")try{let a=$l.lstatSync(qd.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&afe(qd.resolve(t,e.name),r,o),H3(qd.resolve(t,e.name),r,o)},afe=(t,e,r)=>{let o;try{o=dct(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return H3(t,e,r);throw a}return o&&o.length&&o.forEach(a=>mct(t,a,e,r)),H3(t,e,r)};lfe.exports=q3;q3.sync=afe});var pfe=_((wUt,j3)=>{"use strict";var ufe=rfe(),ec=ve("fs"),Ox=ve("path"),Afe=cfe(),Wc=qE(),Mx=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},Ux=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},_x=(t,e)=>t.get(Wc(e)),J1=(t,e,r)=>t.set(Wc(e),r),yct=(t,e)=>{ec.stat(t,(r,o)=>{(r||!o.isDirectory())&&(r=new Ux(t,r&&r.code||"ENOTDIR")),e(r)})};j3.exports=(t,e,r)=>{t=Wc(t);let o=e.umask,a=e.mode|448,n=(a&o)!==0,u=e.uid,A=e.gid,p=typeof u=="number"&&typeof A=="number"&&(u!==e.processUid||A!==e.processGid),h=e.preserve,E=e.unlink,I=e.cache,v=Wc(e.cwd),x=(L,U)=>{L?r(L):(J1(I,t,!0),U&&p?Afe(U,u,A,J=>x(J)):n?ec.chmod(t,a,r):r())};if(I&&_x(I,t)===!0)return x();if(t===v)return yct(t,x);if(h)return ufe(t,{mode:a}).then(L=>x(null,L),x);let R=Wc(Ox.relative(v,t)).split("/");Hx(v,R,a,I,E,v,null,x)};var Hx=(t,e,r,o,a,n,u,A)=>{if(!e.length)return A(null,u);let p=e.shift(),h=Wc(Ox.resolve(t+"/"+p));if(_x(o,h))return Hx(h,e,r,o,a,n,u,A);ec.mkdir(h,r,ffe(h,e,r,o,a,n,u,A))},ffe=(t,e,r,o,a,n,u,A)=>p=>{p?ec.lstat(t,(h,E)=>{if(h)h.path=h.path&&Wc(h.path),A(h);else if(E.isDirectory())Hx(t,e,r,o,a,n,u,A);else if(a)ec.unlink(t,I=>{if(I)return A(I);ec.mkdir(t,r,ffe(t,e,r,o,a,n,u,A))});else{if(E.isSymbolicLink())return A(new Mx(t,t+"/"+e.join("/")));A(p)}}):(u=u||t,Hx(t,e,r,o,a,n,u,A))},Ect=t=>{let e=!1,r="ENOTDIR";try{e=ec.statSync(t).isDirectory()}catch(o){r=o.code}finally{if(!e)throw new Ux(t,r)}};j3.exports.sync=(t,e)=>{t=Wc(t);let r=e.umask,o=e.mode|448,a=(o&r)!==0,n=e.uid,u=e.gid,A=typeof n=="number"&&typeof u=="number"&&(n!==e.processUid||u!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,I=Wc(e.cwd),v=L=>{J1(E,t,!0),L&&A&&Afe.sync(L,n,u),a&&ec.chmodSync(t,o)};if(E&&_x(E,t)===!0)return v();if(t===I)return Ect(I),v();if(p)return v(ufe.sync(t,o));let C=Wc(Ox.relative(I,t)).split("/"),R=null;for(let L=C.shift(),U=I;L&&(U+="/"+L);L=C.shift())if(U=Wc(Ox.resolve(U)),!_x(E,U))try{ec.mkdirSync(U,o),R=R||U,J1(E,U,!0)}catch{let te=ec.lstatSync(U);if(te.isDirectory()){J1(E,U,!0);continue}else if(h){ec.unlinkSync(U),ec.mkdirSync(U,o),R=R||U,J1(E,U,!0);continue}else if(te.isSymbolicLink())return new Mx(U,U+"/"+C.join("/"))}return v(R)}});var Y3=_((IUt,hfe)=>{var G3=Object.create(null),{hasOwnProperty:Cct}=Object.prototype;hfe.exports=t=>(Cct.call(G3,t)||(G3[t]=t.normalize("NFKD")),G3[t])});var yfe=_((BUt,mfe)=>{var gfe=ve("assert"),wct=Y3(),Ict=YE(),{join:dfe}=ve("path"),Bct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,vct=Bct==="win32";mfe.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((I,v)=>(I.length&&(v=dfe(I[I.length-1],v)),I.push(v||"/"),I),[]),o=new Set,a=h=>{let E=e.get(h);if(!E)throw new Error("function does not have any path reservations");return{paths:E.paths.map(I=>t.get(I)),dirs:[...E.dirs].map(I=>t.get(I))}},n=h=>{let{paths:E,dirs:I}=a(h);return E.every(v=>v[0]===h)&&I.every(v=>v[0]instanceof Set&&v[0].has(h))},u=h=>o.has(h)||!n(h)?!1:(o.add(h),h(()=>A(h)),!0),A=h=>{if(!o.has(h))return!1;let{paths:E,dirs:I}=e.get(h),v=new Set;return E.forEach(x=>{let C=t.get(x);gfe.equal(C[0],h),C.length===1?t.delete(x):(C.shift(),typeof C[0]=="function"?v.add(C[0]):C[0].forEach(R=>v.add(R)))}),I.forEach(x=>{let C=t.get(x);gfe(C[0]instanceof Set),C[0].size===1&&C.length===1?t.delete(x):C[0].size===1?(C.shift(),v.add(C[0])):C[0].delete(h)}),o.delete(h),v.forEach(x=>u(x)),!0};return{check:n,reserve:(h,E)=>{h=vct?["win32 parallelization disabled"]:h.map(v=>wct(Ict(dfe(v))).toLowerCase());let I=new Set(h.map(v=>r(v)).reduce((v,x)=>v.concat(x)));return e.set(E,{dirs:I,paths:h}),h.forEach(v=>{let x=t.get(v);x?x.push(E):t.set(v,[E])}),I.forEach(v=>{let x=t.get(v);x?x[x.length-1]instanceof Set?x[x.length-1].add(E):x.push(new Set([E])):t.set(v,[new Set([E])])}),u(E)}}}});var wfe=_((vUt,Cfe)=>{var Dct=process.platform,Sct=Dct==="win32",Pct=global.__FAKE_TESTING_FS__||ve("fs"),{O_CREAT:bct,O_TRUNC:xct,O_WRONLY:kct,UV_FS_O_FILEMAP:Efe=0}=Pct.constants,Qct=Sct&&!!Efe,Fct=512*1024,Rct=Efe|xct|bct|kct;Cfe.exports=Qct?t=>t"w"});var e_=_((DUt,Nfe)=>{"use strict";var Tct=ve("assert"),Nct=Rx(),vn=ve("fs"),Lct=eC(),Wf=ve("path"),Ffe=pfe(),Ife=e3(),Oct=yfe(),Mct=t3(),fl=qE(),Uct=YE(),_ct=Y3(),Bfe=Symbol("onEntry"),V3=Symbol("checkFs"),vfe=Symbol("checkFs2"),Gx=Symbol("pruneCache"),J3=Symbol("isReusable"),tc=Symbol("makeFs"),z3=Symbol("file"),X3=Symbol("directory"),Yx=Symbol("link"),Dfe=Symbol("symlink"),Sfe=Symbol("hardlink"),Pfe=Symbol("unsupported"),bfe=Symbol("checkPath"),Dh=Symbol("mkdir"),To=Symbol("onError"),qx=Symbol("pending"),xfe=Symbol("pend"),sC=Symbol("unpend"),W3=Symbol("ended"),K3=Symbol("maybeClose"),Z3=Symbol("skip"),z1=Symbol("doChown"),X1=Symbol("uid"),Z1=Symbol("gid"),$1=Symbol("checkedCwd"),Rfe=ve("crypto"),Tfe=wfe(),Hct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,e2=Hct==="win32",qct=(t,e)=>{if(!e2)return vn.unlink(t,e);let r=t+".DELETE."+Rfe.randomBytes(16).toString("hex");vn.rename(t,r,o=>{if(o)return e(o);vn.unlink(r,e)})},jct=t=>{if(!e2)return vn.unlinkSync(t);let e=t+".DELETE."+Rfe.randomBytes(16).toString("hex");vn.renameSync(t,e),vn.unlinkSync(e)},kfe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Qfe=t=>_ct(Uct(fl(t))).toLowerCase(),Gct=(t,e)=>{e=Qfe(e);for(let r of t.keys()){let o=Qfe(r);(o===e||o.indexOf(e+"/")===0)&&t.delete(r)}},Yct=t=>{for(let e of t.keys())t.delete(e)},t2=class extends Nct{constructor(e){if(e||(e={}),e.ondone=r=>{this[W3]=!0,this[K3]()},super(e),this[$1]=!1,this.reservations=Oct(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[qx]=0,this[W3]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||e2,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=fl(Wf.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",r=>this[Bfe](r))}warn(e,r,o={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(o.recoverable=!1),super.warn(e,r,o)}[K3](){this[W3]&&this[qx]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[bfe](e){if(this.strip){let r=fl(e.path).split("/");if(r.length=this.strip)e.linkpath=o.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=fl(e.path),o=r.split("/");if(o.includes("..")||e2&&/^[a-z]:\.\.$/i.test(o[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=Mct(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Wf.isAbsolute(e.path)?e.absolute=fl(Wf.resolve(e.path)):e.absolute=fl(Wf.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:fl(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:r}=Wf.win32.parse(e.absolute);e.absolute=r+Ife.encode(e.absolute.substr(r.length));let{root:o}=Wf.win32.parse(e.path);e.path=o+Ife.encode(e.path.substr(o.length))}return!0}[Bfe](e){if(!this[bfe](e))return e.resume();switch(Tct.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[V3](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[Pfe](e)}}[To](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[sC](),r.resume())}[Dh](e,r,o){Ffe(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r,noChmod:this.noChmod},o)}[z1](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[X1](e){return kfe(this.uid,e.uid,this.processUid)}[Z1](e){return kfe(this.gid,e.gid,this.processGid)}[z3](e,r){let o=e.mode&4095||this.fmode,a=new Lct.WriteStream(e.absolute,{flags:Tfe(e.size),mode:o,autoClose:!1});a.on("error",p=>{a.fd&&vn.close(a.fd,()=>{}),a.write=()=>!0,this[To](p,e),r()});let n=1,u=p=>{if(p){a.fd&&vn.close(a.fd,()=>{}),this[To](p,e),r();return}--n===0&&vn.close(a.fd,h=>{h?this[To](h,e):this[sC](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let I=e.atime||new Date,v=e.mtime;vn.futimes(E,I,v,x=>x?vn.utimes(h,I,v,C=>u(C&&x)):u())}if(this[z1](e)){n++;let I=this[X1](e),v=this[Z1](e);vn.fchown(E,I,v,x=>x?vn.chown(h,I,v,C=>u(C&&x)):u())}u()});let A=this.transform&&this.transform(e)||e;A!==e&&(A.on("error",p=>{this[To](p,e),r()}),e.pipe(A)),A.pipe(a)}[X3](e,r){let o=e.mode&4095||this.dmode;this[Dh](e.absolute,o,a=>{if(a){this[To](a,e),r();return}let n=1,u=A=>{--n===0&&(r(),this[sC](),e.resume())};e.mtime&&!this.noMtime&&(n++,vn.utimes(e.absolute,e.atime||new Date,e.mtime,u)),this[z1](e)&&(n++,vn.chown(e.absolute,this[X1](e),this[Z1](e),u)),u()})}[Pfe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[Dfe](e,r){this[Yx](e,e.linkpath,"symlink",r)}[Sfe](e,r){let o=fl(Wf.resolve(this.cwd,e.linkpath));this[Yx](e,o,"link",r)}[xfe](){this[qx]++}[sC](){this[qx]--,this[K3]()}[Z3](e){this[sC](),e.resume()}[J3](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!e2}[V3](e){this[xfe]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,o=>this[vfe](e,o))}[Gx](e){e.type==="SymbolicLink"?Yct(this.dirCache):e.type!=="Directory"&&Gct(this.dirCache,e.absolute)}[vfe](e,r){this[Gx](e);let o=A=>{this[Gx](e),r(A)},a=()=>{this[Dh](this.cwd,this.dmode,A=>{if(A){this[To](A,e),o();return}this[$1]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let A=fl(Wf.dirname(e.absolute));if(A!==this.cwd)return this[Dh](A,this.dmode,p=>{if(p){this[To](p,e),o();return}u()})}u()},u=()=>{vn.lstat(e.absolute,(A,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[Z3](e),o();return}if(A||this[J3](e,p))return this[tc](null,e,o);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=I=>this[tc](I,e,o);return h?vn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return vn.rmdir(e.absolute,h=>this[tc](h,e,o))}if(e.absolute===this.cwd)return this[tc](null,e,o);qct(e.absolute,h=>this[tc](h,e,o))})};this[$1]?n():a()}[tc](e,r,o){if(e){this[To](e,r),o();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[z3](r,o);case"Link":return this[Sfe](r,o);case"SymbolicLink":return this[Dfe](r,o);case"Directory":case"GNUDumpDir":return this[X3](r,o)}}[Yx](e,r,o,a){vn[o](r,e.absolute,n=>{n?this[To](n,e):(this[sC](),e.resume()),a()})}},jx=t=>{try{return[null,t()]}catch(e){return[e,null]}},$3=class extends t2{[tc](e,r){return super[tc](e,r,()=>{})}[V3](e){if(this[Gx](e),!this[$1]){let n=this[Dh](this.cwd,this.dmode);if(n)return this[To](n,e);this[$1]=!0}if(e.absolute!==this.cwd){let n=fl(Wf.dirname(e.absolute));if(n!==this.cwd){let u=this[Dh](n,this.dmode);if(u)return this[To](u,e)}}let[r,o]=jx(()=>vn.lstatSync(e.absolute));if(o&&(this.keep||this.newer&&o.mtime>e.mtime))return this[Z3](e);if(r||this[J3](e,o))return this[tc](null,e);if(o.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(o.mode&4095)!==e.mode,[A]=u?jx(()=>{vn.chmodSync(e.absolute,e.mode)}):[];return this[tc](A,e)}let[n]=jx(()=>vn.rmdirSync(e.absolute));this[tc](n,e)}let[a]=e.absolute===this.cwd?[]:jx(()=>jct(e.absolute));this[tc](a,e)}[z3](e,r){let o=e.mode&4095||this.fmode,a=A=>{let p;try{vn.closeSync(n)}catch(h){p=h}(A||p)&&this[To](A||p,e),r()},n;try{n=vn.openSync(e.absolute,Tfe(e.size),o)}catch(A){return a(A)}let u=this.transform&&this.transform(e)||e;u!==e&&(u.on("error",A=>this[To](A,e)),e.pipe(u)),u.on("data",A=>{try{vn.writeSync(n,A,0,A.length)}catch(p){a(p)}}),u.on("end",A=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{vn.futimesSync(n,h,E)}catch(I){try{vn.utimesSync(e.absolute,h,E)}catch{p=I}}}if(this[z1](e)){let h=this[X1](e),E=this[Z1](e);try{vn.fchownSync(n,h,E)}catch(I){try{vn.chownSync(e.absolute,h,E)}catch{p=p||I}}}a(p)})}[X3](e,r){let o=e.mode&4095||this.dmode,a=this[Dh](e.absolute,o);if(a){this[To](a,e),r();return}if(e.mtime&&!this.noMtime)try{vn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[z1](e))try{vn.chownSync(e.absolute,this[X1](e),this[Z1](e))}catch{}r(),e.resume()}[Dh](e,r){try{return Ffe.sync(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(o){return o}}[Yx](e,r,o,a){try{vn[o+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[To](n,e)}}};t2.Sync=$3;Nfe.exports=t2});var _fe=_((SUt,Ufe)=>{"use strict";var Wct=OE(),Wx=e_(),Ofe=ve("fs"),Mfe=eC(),Lfe=ve("path"),t_=YE();Ufe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Wct(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Kct(o,e),o.file&&o.sync?Vct(o):o.file?Jct(o,r):o.sync?zct(o):Xct(o)};var Kct=(t,e)=>{let r=new Map(e.map(n=>[t_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||Lfe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(Lfe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(t_(n)):n=>a(t_(n))},Vct=t=>{let e=new Wx.Sync(t),r=t.file,o=Ofe.statSync(r),a=t.maxReadSize||16*1024*1024;new Mfe.ReadStreamSync(r,{readSize:a,size:o.size}).pipe(e)},Jct=(t,e)=>{let r=new Wx(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("close",u),Ofe.stat(a,(p,h)=>{if(p)A(p);else{let E=new Mfe.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},zct=t=>new Wx.Sync(t),Xct=t=>new Wx(t)});var Hfe=_(us=>{"use strict";us.c=us.create=IAe();us.r=us.replace=L3();us.t=us.list=Tx();us.u=us.update=QAe();us.x=us.extract=_fe();us.Pack=Ex();us.Unpack=e_();us.Parse=Rx();us.ReadEntry=rx();us.WriteEntry=A3();us.Header=GE();us.Pax=ix();us.types=KU()});var r_,qfe,Sh,r2,n2,jfe=Et(()=>{r_=$e(id()),qfe=ve("worker_threads"),Sh=Symbol("kTaskInfo"),r2=class{constructor(e,r){this.fn=e;this.limit=(0,r_.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},n2=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,r_.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let o=this.workers.pop();o?o.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new qfe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[Sh])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[Sh].resolve(r),e[Sh]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[Sh]?.reject(r),e[Sh]=null}),e.on("exit",r=>{r!==0&&e[Sh]?.reject(new Error(`Worker exited with code ${r}`)),e[Sh]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((o,a)=>{r[Sh]={resolve:o,reject:a},r.postMessage(e)})})}}});var Yfe=_((kUt,Gfe)=>{var n_;Gfe.exports.getContent=()=>(typeof n_>"u"&&(n_=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),n_)});var Xi={};Vt(Xi,{convertToZip:()=>tut,convertToZipWorker:()=>o_,extractArchiveTo:()=>zfe,getDefaultTaskPool:()=>Vfe,getTaskPoolForConfiguration:()=>Jfe,makeArchiveFromDirectory:()=>eut});function Zct(t,e){switch(t){case"async":return new r2(o_,{poolSize:e});case"workers":return new n2((0,s_.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function Vfe(){return typeof i_>"u"&&(i_=Zct("workers",Ji.availableParallelism())),i_}function Jfe(t){return typeof t>"u"?Vfe():ol($ct,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new r2(o_,{poolSize:r});case"workers":return new n2((0,s_.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function o_(t){let{tmpFile:e,tgz:r,compressionLevel:o,extractBufferOpts:a}=t,n=new zi(e,{create:!0,level:o,stats:Ea.makeDefaultStats()}),u=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await zfe(u,n,a),n.saveAndClose(),e}async function eut(t,{baseFs:e=new Tn,prefixPath:r=Bt.root,compressionLevel:o,inMemory:a=!1}={}){let n;if(a)n=new zi(null,{level:o});else{let A=await oe.mktempPromise(),p=V.join(A,"archive.zip");n=new zi(p,{create:!0,level:o})}let u=V.resolve(Bt.root,r);return await n.copyPromise(u,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function tut(t,e={}){let r=await oe.mktempPromise(),o=V.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Jfe(e.configuration)).run({tmpFile:o,tgz:t,compressionLevel:a,extractBufferOpts:n}),new zi(o,{level:e.compressionLevel})}async function*rut(t){let e=new Kfe.default.Parse,r=new Wfe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",o=>{r.write(o)}),e.on("error",o=>{r.destroy(o)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let o of r){let a=o;yield a,a.resume()}}async function zfe(t,e,{stripComponents:r=0,prefixPath:o=Bt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let u=n.path.split(/\//g);return!!(u.some(A=>A==="..")||u.length<=r)}for await(let n of rut(t)){if(a(n))continue;let u=V.normalize(ue.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(u.length<=r)continue;let A=u.slice(r).join("/"),p=V.join(o,A),h=420;switch((n.type==="Directory"||((n.mode??0)&73)!==0)&&(h|=73),n.type){case"Directory":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.writeFileSync(p,await Vy(n),{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break}}return e}var Wfe,Kfe,s_,i_,$ct,Xfe=Et(()=>{Ye();St();nA();Wfe=ve("stream"),Kfe=$e(Hfe());jfe();ql();s_=$e(Yfe());$ct=new WeakMap});var $fe=_((a_,Zfe)=>{(function(t,e){typeof a_=="object"?Zfe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(a_,function(){function t(a,n){var u=n?"\u2514":"\u251C";return a?u+="\u2500 ":u+="\u2500\u2500\u2510",u}function e(a,n){var u=[];for(var A in a)!a.hasOwnProperty(A)||n&&typeof a[A]=="function"||u.push(A);return u}function r(a,n,u,A,p,h,E){var I="",v=0,x,C,R=A.slice(0);if(R.push([n,u])&&A.length>0&&(A.forEach(function(U,J){J>0&&(I+=(U[1]?" ":"\u2502")+" "),!C&&U[0]===n&&(C=!0)}),I+=t(a,u)+a,p&&(typeof n!="object"||n instanceof Date)&&(I+=": "+n),C&&(I+=" (circular ref.)"),E(I)),!C&&typeof n=="object"){var L=e(n,h);L.forEach(function(U){x=++v===L.length,r(U,n[U],x,R,p,h,E)})}}var o={};return o.asLines=function(a,n,u,A){var p=typeof u!="function"?u:!1;r(".",a,!1,[],n,p,A||u)},o.asTree=function(a,n,u){var A="";return r(".",a,!1,[],n,u,function(p){A+=p+` +`}),A},o})});var $s={};Vt($s,{emitList:()=>nut,emitTree:()=>npe,treeNodeToJson:()=>rpe,treeNodeToTreeify:()=>tpe});function tpe(t,{configuration:e}){let r={},o=0,a=(n,u)=>{let A=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of A){if(!h)continue;let{label:E,value:I,children:v}=h,x=[];typeof E<"u"&&x.push(yd(e,E,2)),typeof I<"u"&&x.push(Mt(e,I[0],I[1])),x.length===0&&x.push(yd(e,`${p}`,2));let C=x.join(": ").trim(),R=`\0${o++}\0`,L=u[`${R}${C}`]={};typeof v<"u"&&a(v,L)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function rpe(t){let e=r=>{if(typeof r.children>"u"){if(typeof r.value>"u")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return Ed(r.value[0],r.value[1])}let o=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,u]of o)u&&(a[iut(n)]=e(u));return typeof r.value>"u"?a:{value:Ed(r.value[0],r.value[1]),children:a}};return e(t)}function nut(t,{configuration:e,stdout:r,json:o}){let a=t.map(n=>({value:n}));npe({children:a},{configuration:e,stdout:r,json:o})}function npe(t,{configuration:e,stdout:r,json:o,separators:a=0}){if(o){let u=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let A of u)A&&r.write(`${JSON.stringify(rpe(A))} +`);return}let n=(0,epe.asTree)(tpe(t,{configuration:e}),!1,!1);if(n=n.replace(/\0[0-9]+\0/g,""),a>=1&&(n=n.replace(/^([├└]─)/gm,`\u2502 $1`).replace(/^│\n/,"")),a>=2)for(let u=0;u<2;++u)n=n.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 -$2`).replace(/^│\n/,"");if(a>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function cut(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var rpe,ope=Et(()=>{rpe=$e(tpe());ql()});function n2(t){let e=t.match(uut);if(!e?.groups)throw new Error("Assertion failed: Expected the checksum to match the requested pattern");let r=e.groups.cacheVersion?parseInt(e.groups.cacheVersion):null;return{cacheKey:e.groups.cacheKey??null,cacheVersion:r,cacheSpec:e.groups.cacheSpec??null,hash:e.groups.hash}}var ape,u_,A_,Jb,Lr,uut,f_=Et(()=>{Ye();Pt();Pt();nA();ape=Be("crypto"),u_=$e(Be("fs"));Yl();rh();jl();xo();A_=Ky(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),Jb=Ky(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Lr=class{constructor(e,{configuration:r,immutable:o=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,ape.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=o,this.check=a;let{cacheSpec:n,cacheKey:u}=Lr.getCacheKey(r);this.cacheSpec=n,this.cacheKey=u}static async find(e,{immutable:r,check:o}={}){let a=new Lr(e.get("cacheFolder"),{configuration:e,immutable:r,check:o});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),o=r!=="mixed"?`c${r}`:"";return{cacheKey:[Jb,o].join(""),cacheSpec:o}}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${aE(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=n2(r).hash.slice(0,10);return`${aE(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:o}=n2(e);if(r===null||r=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function iut(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var epe,ipe=Et(()=>{epe=$e($fe());jl()});function i2(t){let e=t.match(sut);if(!e?.groups)throw new Error("Assertion failed: Expected the checksum to match the requested pattern");let r=e.groups.cacheVersion?parseInt(e.groups.cacheVersion):null;return{cacheKey:e.groups.cacheKey??null,cacheVersion:r,cacheSpec:e.groups.cacheSpec??null,hash:e.groups.hash}}var spe,l_,c_,Kx,Lr,sut,u_=Et(()=>{Ye();St();St();nA();spe=ve("crypto"),l_=$e(ve("fs"));Yl();nh();ql();bo();c_=Jy(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),Kx=Jy(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Lr=class{constructor(e,{configuration:r,immutable:o=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,spe.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=o,this.check=a;let{cacheSpec:n,cacheKey:u}=Lr.getCacheKey(r);this.cacheSpec=n,this.cacheKey=u}static async find(e,{immutable:r,check:o}={}){let a=new Lr(e.get("cacheFolder"),{configuration:e,immutable:r,check:o});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),o=r!=="mixed"?`c${r}`:"";return{cacheKey:[Kx,o].join(""),cacheSpec:o}}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${lE(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=i2(r).hash.slice(0,10);return`${lE(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:o}=i2(e);if(r===null||r{let ae=new zi,we=K.join(Bt.root,sO(e));return ae.mkdirSync(we,{recursive:!0}),ae.writeJsonSync(K.join(we,dr.manifest),{name:fn(e),mocked:!0}),ae},E=async(ae,{isColdHit:we,controlPath:Pe=null})=>{if(Pe===null&&u.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!we?n2(r).cacheKey:this.cacheKey,Ee=!u.skipIntegrityCheck||!r?`${g}/${await LS(ae)}`:r;if(Pe!==null){let ce=!u.skipIntegrityCheck||!r?`${this.cacheKey}/${await LS(Pe)}`:r;if(Ee!==ce)throw new zt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let De=null;switch(r!==null&&Ee!==r&&(this.check?De="throw":n2(r).cacheKey!==n2(Ee).cacheKey?De="update":De=this.configuration.get("checksumBehavior")),De){case null:case"update":return{isValid:!0,hash:Ee};case"ignore":return{isValid:!0,hash:r};case"reset":return{isValid:!1,hash:r};default:case"throw":throw new zt(18,"The remote archive doesn't match the expected checksum")}},I=async ae=>{if(!n)throw new Error(`Cache check required but no loader configured for ${jr(this.configuration,e)}`);let we=await n(),Pe=we.getRealPath();we.saveAndClose(),await oe.chmodPromise(Pe,420);let g=await E(ae,{controlPath:Pe,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},v=async()=>{if(A===null||!await oe.existsPromise(A)){let ae=await n(),we=ae.getRealPath();return ae.saveAndClose(),{source:"loader",path:we}}return{source:"mirror",path:A}},b=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${jr(this.configuration,e)}`);if(this.immutable)throw new zt(56,`Cache entry required but missing for ${jr(this.configuration,e)}`);let{path:ae,source:we}=await v(),{hash:Pe}=await E(ae,{isColdHit:!0}),g=this.getLocatorPath(e,Pe),Ee=[];we!=="mirror"&&A!==null&&Ee.push(async()=>{let ce=`${A}${this.cacheId}`;await oe.copyFilePromise(ae,ce,u_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,A)}),(!u.mirrorWriteOnly||A===null)&&Ee.push(async()=>{let ce=`${g}${this.cacheId}`;await oe.copyFilePromise(ae,ce,u_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,g)});let De=u.mirrorWriteOnly?A??g:g;return await Promise.all(Ee.map(ce=>ce())),[!1,De,Pe]},C=async()=>{let we=(async()=>{let Pe=u.unstablePackages?.has(e.locatorHash),g=Pe||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,Ee=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,De=!!u.mockedPackages?.has(e.locatorHash)&&(!this.check||!Ee),ce=De||Ee,ne=ce?o:a;if(ne&&ne(),ce){let ee=null,Ie=g;if(!De)if(this.check)ee=await I(Ie);else{let ke=await E(Ie,{isColdHit:!1});if(ke.isValid)ee=ke.hash;else return b()}return[De,Ie,ee]}else{if(this.immutable&&Pe)throw new zt(56,`Cache entry required but missing for ${jr(this.configuration,e)}; consider defining ${de.pretty(this.configuration,"supportedArchitectures",de.Type.CODE)} to cache packages for multiple systems`);return b()}})();this.mutexes.set(e.locatorHash,we);try{return await we}finally{this.mutexes.delete(e.locatorHash)}};for(let ae;ae=this.mutexes.get(e.locatorHash);)await ae;let[T,L,U]=await C();T||this.markedFiles.add(L);let J,te=T?()=>h():()=>new zi(L,{baseFs:p,readOnly:!0}),le=new ny(()=>wL(()=>J=te(),ae=>`Failed to open the cache entry for ${jr(this.configuration,e)}: ${ae}`),K),pe=new Uu(L,{baseFs:le,pathUtils:K}),Ae=()=>{J?.discardAndClose()},ye=u.unstablePackages?.has(e.locatorHash)?null:U;return[pe,Ae,ye]}},uut=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var zb,lpe=Et(()=>{zb=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(zb||{})});var Aut,sC,p_=Et(()=>{Pt();Nl();kf();xo();Aut=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,o)=>`${r}#commit=${o}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>HS({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],sC=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let o=K.join(e.cwd,dr.lockfile);if(!oe.existsSync(o))return;let a=await oe.readFilePromise(o,"utf8"),n=Vi(a);if(Object.hasOwn(n,"__metadata"))return;let u=this.resolutions=new Map;for(let A of Object.keys(n)){let p=i1(A);if(!p){r.reportWarning(14,`Failed to parse the string "${A}" into a proper descriptor`);continue}let h=ba(p.range)?In(p,`npm:${p.range}`):p,{version:E,resolved:I}=n[A];if(!I)continue;let v;for(let[C,T]of Aut){let L=I.match(C);if(L){v=T(E,...L);break}}if(!v){r.reportWarning(14,`${qn(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${I}")`);continue}let b=h;try{let C=Id(h.range),T=i1(C.selector,!0);T&&(b=T)}catch{}u.set(h.descriptorHash,Qs(b,v))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=tO(a),u=o.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(u,r,o)}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var AA,cpe=Et(()=>{Yl();L1();ql();AA=class extends Xs{constructor({configuration:r,stdout:o,suggestInstall:a=!0}){super();this.errorCount=0;zI(this,{configuration:r}),this.configuration=r,this.stdout=o,this.suggestInstall=a}static async start(r,o){let a=new this(r);try{await o(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,o){return o()}async startSectionPromise(r,o){return await o()}startTimerSync(r,o,a){return(typeof o=="function"?o:a)()}async startTimerPromise(r,o,a){return await(typeof o=="function"?o:a)()}reportSeparator(){}reportInfo(r,o){}reportWarning(r,o){}reportError(r,o){this.errorCount+=1,this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${o} +`)}(this.mirrorCwd||!this.immutable)&&await oe.mkdirPromise(this.mirrorCwd||this.cwd,{recursive:!0})}async fetchPackageFromCache(e,r,{onHit:o,onMiss:a,loader:n,...u}){let A=this.getLocatorMirrorPath(e),p=new Tn,h=()=>{let he=new zi,Be=V.join(Bt.root,nM(e));return he.mkdirSync(Be,{recursive:!0}),he.writeJsonSync(V.join(Be,dr.manifest),{name:fn(e),mocked:!0}),he},E=async(he,{isColdHit:Be,controlPath:we=null})=>{if(we===null&&u.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!Be?i2(r).cacheKey:this.cacheKey,Ee=!u.skipIntegrityCheck||!r?`${g}/${await NP(he)}`:r;if(we!==null){let le=!u.skipIntegrityCheck||!r?`${this.cacheKey}/${await NP(we)}`:r;if(Ee!==le)throw new zt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let Se=null;switch(r!==null&&Ee!==r&&(this.check?Se="throw":i2(r).cacheKey!==i2(Ee).cacheKey?Se="update":Se=this.configuration.get("checksumBehavior")),Se){case null:case"update":return{isValid:!0,hash:Ee};case"ignore":return{isValid:!0,hash:r};case"reset":return{isValid:!1,hash:r};default:case"throw":throw new zt(18,"The remote archive doesn't match the expected checksum")}},I=async he=>{if(!n)throw new Error(`Cache check required but no loader configured for ${qr(this.configuration,e)}`);let Be=await n(),we=Be.getRealPath();Be.saveAndClose(),await oe.chmodPromise(we,420);let g=await E(he,{controlPath:we,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},v=async()=>{if(A===null||!await oe.existsPromise(A)){let he=await n(),Be=he.getRealPath();return he.saveAndClose(),{source:"loader",path:Be}}return{source:"mirror",path:A}},x=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${qr(this.configuration,e)}`);if(this.immutable)throw new zt(56,`Cache entry required but missing for ${qr(this.configuration,e)}`);let{path:he,source:Be}=await v(),{hash:we}=await E(he,{isColdHit:!0}),g=this.getLocatorPath(e,we),Ee=[];Be!=="mirror"&&A!==null&&Ee.push(async()=>{let le=`${A}${this.cacheId}`;await oe.copyFilePromise(he,le,l_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(le,420),await oe.renamePromise(le,A)}),(!u.mirrorWriteOnly||A===null)&&Ee.push(async()=>{let le=`${g}${this.cacheId}`;await oe.copyFilePromise(he,le,l_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(le,420),await oe.renamePromise(le,g)});let Se=u.mirrorWriteOnly?A??g:g;return await Promise.all(Ee.map(le=>le())),[!1,Se,we]},C=async()=>{let Be=(async()=>{let we=u.unstablePackages?.has(e.locatorHash),g=we||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,Ee=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,Se=!!u.mockedPackages?.has(e.locatorHash)&&(!this.check||!Ee),le=Se||Ee,ne=le?o:a;if(ne&&ne(),le){let ee=null,Ie=g;if(!Se)if(this.check)ee=await I(Ie);else{let Fe=await E(Ie,{isColdHit:!1});if(Fe.isValid)ee=Fe.hash;else return x()}return[Se,Ie,ee]}else{if(this.immutable&&we)throw new zt(56,`Cache entry required but missing for ${qr(this.configuration,e)}; consider defining ${de.pretty(this.configuration,"supportedArchitectures",de.Type.CODE)} to cache packages for multiple systems`);return x()}})();this.mutexes.set(e.locatorHash,Be);try{return await Be}finally{this.mutexes.delete(e.locatorHash)}};for(let he;he=this.mutexes.get(e.locatorHash);)await he;let[R,L,U]=await C();R||this.markedFiles.add(L);let J,te=R?()=>h():()=>new zi(L,{baseFs:p,readOnly:!0}),ae=new iy(()=>EL(()=>J=te(),he=>`Failed to open the cache entry for ${qr(this.configuration,e)}: ${he}`),V),fe=new Uu(L,{baseFs:ae,pathUtils:V}),ce=()=>{J?.discardAndClose()},me=u.unstablePackages?.has(e.locatorHash)?null:U;return[fe,ce,me]}},sut=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var Vx,ope=Et(()=>{Vx=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(Vx||{})});var out,oC,A_=Et(()=>{St();Nl();Qf();bo();out=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,o)=>`${r}#commit=${o}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>_P({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],oC=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let o=V.join(e.cwd,dr.lockfile);if(!oe.existsSync(o))return;let a=await oe.readFilePromise(o,"utf8"),n=Ki(a);if(Object.hasOwn(n,"__metadata"))return;let u=this.resolutions=new Map;for(let A of Object.keys(n)){let p=s1(A);if(!p){r.reportWarning(14,`Failed to parse the string "${A}" into a proper descriptor`);continue}let h=xa(p.range)?In(p,`npm:${p.range}`):p,{version:E,resolved:I}=n[A];if(!I)continue;let v;for(let[C,R]of out){let L=I.match(C);if(L){v=R(E,...L);break}}if(!v){r.reportWarning(14,`${jn(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${I}")`);continue}let x=h;try{let C=Bd(h.range),R=s1(C.selector,!0);R&&(x=R)}catch{}u.set(h.descriptorHash,Qs(x,v))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=$O(a),u=o.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(u,r,o)}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var AA,ape=Et(()=>{Yl();O1();jl();AA=class extends Xs{constructor({configuration:r,stdout:o,suggestInstall:a=!0}){super();this.errorCount=0;XI(this,{configuration:r}),this.configuration=r,this.stdout=o,this.suggestInstall=a}static async start(r,o){let a=new this(r);try{await o(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,o){return o()}async startSectionPromise(r,o){return await o()}startTimerSync(r,o,a){return(typeof o=="function"?o:a)()}async startTimerPromise(r,o,a){return await(typeof o=="function"?o:a)()}reportSeparator(){}reportInfo(r,o){}reportWarning(r,o){}reportError(r,o){this.errorCount+=1,this.stdout.write(`${Mt(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${o} `)}reportProgress(r){return{...Promise.resolve().then(async()=>{for await(let{}of r);}),stop:()=>{}}}reportJson(r){}reportFold(r,o){}async finalize(){this.errorCount>0&&(this.stdout.write(` -`),this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. -`),this.suggestInstall&&this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. -`))}formatNameWithHyperlink(r){return CU(r,{configuration:this.configuration,json:!1})}}});var oC,h_=Et(()=>{xo();oC=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(OS(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){let a=o.project.storedResolutions.get(e.descriptorHash);if(a){let u=o.project.originalPackages.get(a);if(u)return[u]}let n=o.project.originalPackages.get(OS(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.originalPackages.get(e.locatorHash);if(!o)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return o}}});function Wf(){}function fut(t,e,r,o,a){for(var n=0,u=e.length,A=0,p=0;nb.length?T:b}),h.value=t.join(E)}else h.value=t.join(r.slice(A,A+h.count));A+=h.count,h.added||(p+=h.count)}}var v=e[u-1];return u>1&&typeof v.value=="string"&&(v.added||v.removed)&&t.equals("",v.value)&&(e[u-2].value+=v.value,e.pop()),e}function put(t){return{newPos:t.newPos,components:t.components.slice(0)}}function hut(t,e){if(typeof t=="function")e.callback=t;else if(t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}function fpe(t,e,r){return r=hut(r,{ignoreWhitespace:!0}),E_.diff(t,e,r)}function gut(t,e,r){return C_.diff(t,e,r)}function Xb(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Xb=function(e){return typeof e}:Xb=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xb(t)}function g_(t){return yut(t)||Eut(t)||Cut(t)||wut()}function yut(t){if(Array.isArray(t))return d_(t)}function Eut(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function Cut(t,e){if(!!t){if(typeof t=="string")return d_(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return d_(t,e)}}function d_(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r"u"&&(u.context=4);var A=gut(r,o,u);if(!A)return;A.push({value:"",lines:[]});function p(U){return U.map(function(J){return" "+J})}for(var h=[],E=0,I=0,v=[],b=1,C=1,T=function(J){var te=A[J],le=te.lines||te.value.replace(/\n$/,"").split(` -`);if(te.lines=le,te.added||te.removed){var pe;if(!E){var Ae=A[J-1];E=b,I=C,Ae&&(v=u.context>0?p(Ae.lines.slice(-u.context)):[],E-=v.length,I-=v.length)}(pe=v).push.apply(pe,g_(le.map(function(ce){return(te.added?"+":"-")+ce}))),te.added?C+=le.length:b+=le.length}else{if(E)if(le.length<=u.context*2&&J=A.length-2&&le.length<=u.context){var g=/\n$/.test(r),Ee=/\n$/.test(o),De=le.length==0&&v.length>Pe.oldLines;!g&&De&&r.length>0&&v.splice(Pe.oldLines,0,"\\ No newline at end of file"),(!g&&!De||!Ee)&&v.push("\\ No newline at end of file")}h.push(Pe),E=0,I=0,v=[]}b+=le.length,C+=le.length}},L=0;L{Wf.prototype={diff:function(e,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=o.callback;typeof o=="function"&&(a=o,o={}),this.options=o;var n=this;function u(T){return a?(setTimeout(function(){a(void 0,T)},0),!0):T}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var A=r.length,p=e.length,h=1,E=A+p;o.maxEditLength&&(E=Math.min(E,o.maxEditLength));var I=[{newPos:-1,components:[]}],v=this.extractCommon(I[0],r,e,0);if(I[0].newPos+1>=A&&v+1>=p)return u([{value:this.join(r),count:r.length}]);function b(){for(var T=-1*h;T<=h;T+=2){var L=void 0,U=I[T-1],J=I[T+1],te=(J?J.newPos:0)-T;U&&(I[T-1]=void 0);var le=U&&U.newPos+1=A&&te+1>=p)return u(fut(n,L.components,r,e,n.useLongestToken));I[T]=L}h++}if(a)(function T(){setTimeout(function(){if(h>E)return a();b()||T()},0)})();else for(;h<=E;){var C=b();if(C)return C}},pushComponent:function(e,r,o){var a=e[e.length-1];a&&a.added===r&&a.removed===o?e[e.length-1]={count:a.count+1,added:r,removed:o}:e.push({count:1,added:r,removed:o})},extractCommon:function(e,r,o,a){for(var n=r.length,u=o.length,A=e.newPos,p=A-a,h=0;A+1"u"?r:u}:o;return typeof t=="string"?t:JSON.stringify(m_(t,null,null,a),a," ")};i2.equals=function(t,e){return Wf.prototype.equals.call(i2,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};y_=new Wf;y_.tokenize=function(t){return t.slice()};y_.join=y_.removeEmpty=function(t){return t}});var gpe=_((o3t,hpe)=>{var But=Hl(),vut=fE(),Dut=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Put=/^\w*$/;function Sut(t,e){if(But(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||vut(t)?!0:Put.test(t)||!Dut.test(t)||e!=null&&t in Object(e)}hpe.exports=Sut});var ype=_((a3t,mpe)=>{var dpe=_P(),xut="Expected a function";function I_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(xut);var r=function(){var o=arguments,a=e?e.apply(this,o):o[0],n=r.cache;if(n.has(a))return n.get(a);var u=t.apply(this,o);return r.cache=n.set(a,u)||n,u};return r.cache=new(I_.Cache||dpe),r}I_.Cache=dpe;mpe.exports=I_});var Cpe=_((l3t,Epe)=>{var but=ype(),kut=500;function Qut(t){var e=but(t,function(o){return r.size===kut&&r.clear(),o}),r=e.cache;return e}Epe.exports=Qut});var B_=_((c3t,wpe)=>{var Fut=Cpe(),Tut=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Rut=/\\(\\)?/g,Nut=Fut(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(Tut,function(r,o,a,n){e.push(a?n.replace(Rut,"$1"):o||r)}),e});wpe.exports=Nut});var jd=_((u3t,Ipe)=>{var Lut=Hl(),Mut=gpe(),Out=B_(),Uut=R1();function _ut(t,e){return Lut(t)?t:Mut(t,e)?[t]:Out(Uut(t))}Ipe.exports=_ut});var aC=_((A3t,Bpe)=>{var Hut=fE(),jut=1/0;function qut(t){if(typeof t=="string"||Hut(t))return t;var e=t+"";return e=="0"&&1/t==-jut?"-0":e}Bpe.exports=qut});var Zb=_((f3t,vpe)=>{var Gut=jd(),Yut=aC();function Wut(t,e){e=Gut(e,t);for(var r=0,o=e.length;t!=null&&r{var Vut=rS(),Kut=jd(),Jut=UI(),Dpe=il(),zut=aC();function Xut(t,e,r,o){if(!Dpe(t))return t;e=Kut(e,t);for(var a=-1,n=e.length,u=n-1,A=t;A!=null&&++a{var Zut=Zb(),$ut=v_(),eAt=jd();function tAt(t,e,r){for(var o=-1,a=e.length,n={};++o{function rAt(t,e){return t!=null&&e in Object(t)}bpe.exports=rAt});var D_=_((d3t,Qpe)=>{var nAt=jd(),iAt=LI(),sAt=Hl(),oAt=UI(),aAt=YP(),lAt=aC();function cAt(t,e,r){e=nAt(e,t);for(var o=-1,a=e.length,n=!1;++o{var uAt=kpe(),AAt=D_();function fAt(t,e){return t!=null&&AAt(t,e,uAt)}Fpe.exports=fAt});var Npe=_((y3t,Rpe)=>{var pAt=xpe(),hAt=Tpe();function gAt(t,e){return pAt(t,e,function(r,o){return hAt(t,o)})}Rpe.exports=gAt});var Upe=_((E3t,Ope)=>{var Lpe=fd(),dAt=LI(),mAt=Hl(),Mpe=Lpe?Lpe.isConcatSpreadable:void 0;function yAt(t){return mAt(t)||dAt(t)||!!(Mpe&&t&&t[Mpe])}Ope.exports=yAt});var jpe=_((C3t,Hpe)=>{var EAt=qP(),CAt=Upe();function _pe(t,e,r,o,a){var n=-1,u=t.length;for(r||(r=CAt),a||(a=[]);++n0&&r(A)?e>1?_pe(A,e-1,r,o,a):EAt(a,A):o||(a[a.length]=A)}return a}Hpe.exports=_pe});var Gpe=_((w3t,qpe)=>{var wAt=jpe();function IAt(t){var e=t==null?0:t.length;return e?wAt(t,1):[]}qpe.exports=IAt});var P_=_((I3t,Ype)=>{var BAt=Gpe(),vAt=pL(),DAt=hL();function PAt(t){return DAt(vAt(t,void 0,BAt),t+"")}Ype.exports=PAt});var S_=_((B3t,Wpe)=>{var SAt=Npe(),xAt=P_(),bAt=xAt(function(t,e){return t==null?{}:SAt(t,e)});Wpe.exports=bAt});var $b,Vpe=Et(()=>{Yl();$b=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.resolver.bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,o,a){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Qi,x_=Et(()=>{Yl();Qi=class extends Xs{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,o){return(typeof r=="function"?r:o)()}async startTimerPromise(e,r,o){return await(typeof r=="function"?r:o)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var Kpe,lC,b_=Et(()=>{Pt();Kpe=$e(RS());AE();Bd();ql();rh();kf();xo();lC=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Mt.tryFind(this.cwd)??new Mt,this.relativeCwd=K.relative(this.project.cwd,this.cwd)||Bt.dot;let e=this.manifest.name?this.manifest.name:eA(null,`${this.computeCandidateName()}-${zs(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=In(e,`${Xn.protocol}${this.relativeCwd}`),this.anchoredLocator=Qs(e,`${Xn.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let o=await(0,Kpe.default)(r,{cwd:ue.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort(),await o.reduce(async(a,n)=>{let u=K.resolve(this.cwd,ue.toPortablePath(n)),A=await oe.existsPromise(K.join(u,"package.json"));await a,A&&this.workspacesCwds.add(u)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${o1(this.project.configuration,this)} (${Ot(this.project.configuration,K.join(this.cwd,dr.manifest),yt.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),o=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(o===Xn.protocol&&K.normalize(a)===this.relativeCwd||o===Xn.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=ba(a);return n?o===Xn.protocol?n.test(this.manifest.version??"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?n.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${K.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Mt.hardDependencies}={}){let r=new Set,o=a=>{for(let n of e)for(let u of a.manifest[n].values()){let A=this.project.tryWorkspaceByDescriptor(u);A===null||r.has(A)||(r.add(A),o(A))}};return o(this),r}getRecursiveWorkspaceDependents({dependencies:e=Mt.hardDependencies}={}){let r=new Set,o=a=>{for(let n of this.project.workspaces)e.some(A=>[...n.manifest[A].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&n1(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),o(n))};return o(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let o of r.workspacesCwds){let a=this.project.workspacesByCwd.get(o);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=K.join(this.cwd,Mt.fileName),o=`${JSON.stringify(e,null,this.manifest.indent)} -`;await oe.changeFilePromise(r,o,{automaticNewlines:!0}),this.manifest.raw=e}}});function NAt({project:t,allDescriptors:e,allResolutions:r,allPackages:o,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:u=new Map,peerWarnings:A=[],volatileDescriptors:p=new Set}){let h=new Map,E=[],I=new Map,v=new Map,b=new Map,C=new Map,T=new Map,L=new Map(t.workspaces.map(Ae=>{let ye=Ae.anchoredLocator.locatorHash,ae=o.get(ye);if(typeof ae>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[ye,$I(ae)]})),U=()=>{let Ae=oe.mktempSync(),ye=K.join(Ae,"stacktrace.log"),ae=String(E.length+1).length,we=E.map((Pe,g)=>`${`${g+1}.`.padStart(ae," ")} ${xa(Pe)} -`).join("");throw oe.writeFileSync(ye,we),oe.detachTemp(Ae),new zt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${ue.fromPortablePath(ye)}`)},J=Ae=>{let ye=r.get(Ae.descriptorHash);if(typeof ye>"u")throw new Error("Assertion failed: The resolution should have been registered");let ae=o.get(ye);if(!ae)throw new Error("Assertion failed: The package could not be found");return ae},te=(Ae,ye,ae,{top:we,optional:Pe})=>{E.length>1e3&&U(),E.push(ye);let g=le(Ae,ye,ae,{top:we,optional:Pe});return E.pop(),g},le=(Ae,ye,ae,{top:we,optional:Pe})=>{if(a.has(ye.locatorHash))return;a.add(ye.locatorHash),Pe||n.delete(ye.locatorHash);let g=o.get(ye.locatorHash);if(!g)throw new Error(`Assertion failed: The package (${jr(t.configuration,ye)}) should have been registered`);let Ee=[],De=[],ce=[],ne=[],ee=[];for(let ke of Array.from(g.dependencies.values())){if(g.peerDependencies.has(ke.identHash)&&g.locatorHash!==we)continue;if(Sf(ke))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");p.delete(ke.descriptorHash);let ht=Pe;if(!ht){let Te=g.dependenciesMeta.get(fn(ke));if(typeof Te<"u"){let Je=Te.get(null);typeof Je<"u"&&Je.optional&&(ht=!0)}}let H=r.get(ke.descriptorHash);if(!H)throw new Error(`Assertion failed: The resolution (${qn(t.configuration,ke)}) should have been registered`);let lt=L.get(H)||o.get(H);if(!lt)throw new Error(`Assertion failed: The package (${H}, resolved from ${qn(t.configuration,ke)}) should have been registered`);if(lt.peerDependencies.size===0){te(ke,lt,new Map,{top:we,optional:ht});continue}let Re,Qe,be=new Set,_e;De.push(()=>{Re=nO(ke,ye.locatorHash),Qe=iO(lt,ye.locatorHash),g.dependencies.delete(ke.identHash),g.dependencies.set(Re.identHash,Re),r.set(Re.descriptorHash,Qe.locatorHash),e.set(Re.descriptorHash,Re),o.set(Qe.locatorHash,Qe),Ee.push([lt,Re,Qe])}),ce.push(()=>{_e=new Map;for(let Te of Qe.peerDependencies.values()){let Je=g.dependencies.get(Te.identHash);if(!Je&&r1(ye,Te)&&(Ae.identHash===ye.identHash?Je=Ae:(Je=In(ye,Ae.range),e.set(Je.descriptorHash,Je),r.set(Je.descriptorHash,ye.locatorHash),p.delete(Je.descriptorHash))),(!Je||Je.range==="missing:")&&Qe.dependencies.has(Te.identHash)){Qe.peerDependencies.delete(Te.identHash);continue}Je||(Je=In(Te,"missing:")),Qe.dependencies.set(Je.identHash,Je),Sf(Je)&&dd(b,Je.descriptorHash).add(Qe.locatorHash),I.set(Je.identHash,Je),Je.range==="missing:"&&be.add(Je.identHash),_e.set(Te.identHash,ae.get(Te.identHash)??Qe.locatorHash)}Qe.dependencies=new Map(ks(Qe.dependencies,([Te,Je])=>fn(Je)))}),ne.push(()=>{if(!o.has(Qe.locatorHash))return;let Te=h.get(lt.locatorHash);typeof Te=="number"&&Te>=2&&U();let Je=h.get(lt.locatorHash),He=typeof Je<"u"?Je+1:1;h.set(lt.locatorHash,He),te(Re,Qe,_e,{top:we,optional:ht}),h.set(lt.locatorHash,He-1)}),ee.push(()=>{let Te=g.dependencies.get(ke.identHash);if(typeof Te>"u")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let Je=r.get(Te.descriptorHash);if(typeof Je>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");if(dd(T,Je).add(ye.locatorHash),!!o.has(Qe.locatorHash)){for(let He of Qe.peerDependencies.values()){let x=_e.get(He.identHash);if(typeof x>"u")throw new Error("Assertion failed: Expected the peer dependency ident to be registered");Gy(Yy(C,x),fn(He)).push(Qe.locatorHash)}for(let He of be)Qe.dependencies.delete(He)}})}for(let ke of[...De,...ce])ke();let Ie;do{Ie=!0;for(let[ke,ht,H]of Ee){let lt=Yy(v,ke.locatorHash),Re=zs(...[...H.dependencies.values()].map(Te=>{let Je=Te.range!=="missing:"?r.get(Te.descriptorHash):"missing:";if(typeof Je>"u")throw new Error(`Assertion failed: Expected the resolution for ${qn(t.configuration,Te)} to have been registered`);return Je===we?`${Je} (top)`:Je}),ht.identHash),Qe=lt.get(Re);if(typeof Qe>"u"){lt.set(Re,ht);continue}if(Qe===ht)continue;o.delete(H.locatorHash),e.delete(ht.descriptorHash),r.delete(ht.descriptorHash),a.delete(H.locatorHash);let be=b.get(ht.descriptorHash)||[],_e=[g.locatorHash,...be];b.delete(ht.descriptorHash);for(let Te of _e){let Je=o.get(Te);typeof Je>"u"||(Je.dependencies.get(ht.identHash).descriptorHash!==Qe.descriptorHash&&(Ie=!1),Je.dependencies.set(ht.identHash,Qe))}}}while(!Ie);for(let ke of[...ne,...ee])ke()};for(let Ae of t.workspaces){let ye=Ae.anchoredLocator;p.delete(Ae.anchoredDescriptor.descriptorHash),te(Ae.anchoredDescriptor,ye,new Map,{top:ye.locatorHash,optional:!1})}let pe=new Map;for(let[Ae,ye]of T){let ae=o.get(Ae);if(typeof ae>"u")throw new Error("Assertion failed: Expected the root to be registered");let we=C.get(Ae);if(!(typeof we>"u"))for(let Pe of ye){let g=o.get(Pe);if(!(typeof g>"u")&&!!t.tryWorkspaceByLocator(g))for(let[Ee,De]of we){let ce=Js(Ee);if(g.peerDependencies.has(ce.identHash))continue;let ne=`p${zs(Pe,Ee,Ae).slice(0,5)}`;u.set(ne,{subject:Pe,requested:ce,rootRequester:Ae,allRequesters:De});let ee=ae.dependencies.get(ce.identHash);if(typeof ee<"u"){let Ie=J(ee),ke=Ie.version??"0.0.0",ht=new Set;for(let lt of De){let Re=o.get(lt);if(typeof Re>"u")throw new Error("Assertion failed: Expected the link to be registered");let Qe=Re.peerDependencies.get(ce.identHash);if(typeof Qe>"u")throw new Error("Assertion failed: Expected the ident to be registered");ht.add(Qe.range)}if(![...ht].every(lt=>{if(lt.startsWith(Xn.protocol)){if(!t.tryWorkspaceByLocator(Ie))return!1;lt=lt.slice(Xn.protocol.length),(lt==="^"||lt==="~")&&(lt="*")}return bf(ke,lt)})){let lt=ol(pe,Ie.locatorHash,()=>({type:2,requested:ce,subject:Ie,dependents:new Map,requesters:new Map,links:new Map,version:ke,hash:`p${Ie.locatorHash.slice(0,5)}`}));lt.dependents.set(g.locatorHash,g),lt.requesters.set(ae.locatorHash,ae);for(let Re of De)lt.links.set(Re,o.get(Re));A.push({type:1,subject:g,requested:ce,requester:ae,version:ke,hash:ne,requirementCount:De.length})}}else ae.peerDependenciesMeta.get(Ee)?.optional||A.push({type:0,subject:g,requested:ce,requester:ae,hash:ne})}}}A.push(...pe.values())}function LAt(t,e){let r=BL(t.peerWarnings,"type"),o=r[2]?.map(n=>{let u=Array.from(n.links.values(),E=>{let I=t.storedPackages.get(E.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the package to be registered");let v=I.peerDependencies.get(n.requested.identHash);if(typeof v>"u")throw new Error("Assertion failed: Expected the ident to be registered");return v.range}),A=n.links.size>1?"and other dependencies request":"requests",p=aO(u),h=p?lE(t.configuration,p):Ot(t.configuration,"but they have non-overlapping ranges!","redBright");return`${cs(t.configuration,n.requested)} is listed by your project with version ${s1(t.configuration,n.version)}, which doesn't satisfy what ${cs(t.configuration,n.requesters.values().next().value)} (${Ot(t.configuration,n.hash,yt.CODE)}) ${A} (${h}).`})??[],a=r[0]?.map(n=>`${jr(t.configuration,n.subject)} doesn't provide ${cs(t.configuration,n.requested)} (${Ot(t.configuration,n.hash,yt.CODE)}), requested by ${cs(t.configuration,n.requester)}.`)??[];e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met; run ${Ot(t.configuration,"yarn explain peer-requirements ",yt.CODE)} for details, where ${Ot(t.configuration,"",yt.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of ks(o,u=>zy.default(u)))e.reportWarning(60,n);for(let n of ks(a,u=>zy.default(u)))e.reportWarning(2,n)})}var ek,tk,rk,Xpe,F_,Q_,T_,nk,kAt,QAt,Jpe,FAt,TAt,RAt,pl,k_,ik,zpe,St,Zpe=Et(()=>{Pt();Pt();Nl();qt();ek=Be("crypto");w_();tk=$e(S_()),rk=$e(nd()),Xpe=$e(zn()),F_=Be("util"),Q_=$e(Be("v8")),T_=$e(Be("zlib"));f_();D1();p_();h_();AE();fO();Yl();Vpe();L1();x_();Bd();b_();VS();ql();rh();jl();Dx();DU();kf();xo();nk=Ky(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),kAt=3,QAt=/ *, */g,Jpe=/\/$/,FAt=32,TAt=(0,F_.promisify)(T_.default.gzip),RAt=(0,F_.promisify)(T_.default.gunzip),pl=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(pl||{}),k_={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},ik=(o=>(o[o.NotProvided=0]="NotProvided",o[o.NotCompatible=1]="NotCompatible",o[o.NotCompatibleAggregate=2]="NotCompatibleAggregate",o))(ik||{}),zpe=t=>zs(`${kAt}`,t),St=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new it(`No project found in ${r}`);let o=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,oe.existsSync(K.join(n,dr.manifest))){o=n;break}a=K.dirname(n)}let u=new St(e.projectCwd,{configuration:e});Ve.telemetry?.reportProject(u.cwd),await u.setupResolutions(),await u.setupWorkspaces(),Ve.telemetry?.reportWorkspaceCount(u.workspaces.length),Ve.telemetry?.reportDependencyCount(u.workspaces.reduce((C,T)=>C+T.manifest.dependencies.size+T.manifest.devDependencies.size,0));let A=u.tryWorkspaceByCwd(o);if(A)return{project:u,workspace:A,locator:A.anchoredLocator};let p=await u.findLocatorForLocation(`${o}/`,{strict:!0});if(p)return{project:u,locator:p,workspace:null};let h=Ot(e,u.cwd,yt.PATH),E=Ot(e,K.relative(u.cwd,o),yt.PATH),I=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,v=`- If ${h} is intended to be a project, it might be that you forgot to list ${E} in its workspace configuration.`,b=`- Finally, if ${h} is fine and you intend ${E} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new it(`The nearest package directory (${Ot(e,o,yt.PATH)}) doesn't seem to be part of the project declared in ${Ot(e,u.cwd,yt.PATH)}. - -${[I,v,b].join(` -`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=K.join(this.cwd,dr.lockfile),r=this.configuration.get("defaultLanguageName");if(oe.existsSync(e)){let o=await oe.readFilePromise(e,"utf8");this.lockFileChecksum=zpe(o);let a=Vi(o);if(a.__metadata){let n=a.__metadata.version,u=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);let h=xf(p.resolution,!0),E=new Mt;E.load(p,{yamlCompatibilityMode:!0});let I=E.version,v=E.languageName||r,b=p.linkType.toUpperCase(),C=p.conditions??null,T=E.dependencies,L=E.peerDependencies,U=E.dependenciesMeta,J=E.peerDependenciesMeta,te=E.bin;if(p.checksum!=null){let pe=typeof u<"u"&&!p.checksum.includes("/")?`${u}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,pe)}let le={...h,version:I,languageName:v,linkType:b,conditions:C,dependencies:T,peerDependencies:L,dependenciesMeta:U,peerDependenciesMeta:J,bin:te};this.originalPackages.set(le.locatorHash,le);for(let pe of A.split(QAt)){let Ae=nh(pe);n<=6&&(Ae=this.configuration.normalizeDependency(Ae),Ae=In(Ae,Ae.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(Ae.descriptorHash,Ae),this.storedResolutions.set(Ae.descriptorHash,h.locatorHash)}}}else o.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,rk.default)(4),o=async(a,n)=>{if(e.has(n))return a;e.add(n);let u=new lC(n,{project:this});await r(()=>u.setup());let A=a.then(()=>{this.addWorkspace(u)});return Array.from(u.workspacesCwds).reduce(o,A)};await o(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${cs(this.configuration,e.anchoredLocator)}: ${ue.fromPortablePath(e.cwd)} conflicts with ${ue.fromPortablePath(r.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.anchoredLocator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){K.isAbsolute(e)||(e=K.resolve(this.cwd,e)),e=K.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let o of this.workspaces)K.relative(o.cwd,e).startsWith("../")||r&&r.cwd.length>=o.cwd.length||(r=o);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${cs(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Xn.protocol)){let o=e.range.slice(Xn.protocol.length);if(o!=="^"&&o!=="~"&&o!=="*"&&!ba(o))return this.tryWorkspaceByCwd(o)}let r=this.tryWorkspaceByIdent(e);return r===null||(Sf(e)&&(e=e1(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${qn(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Hc(e)&&(e=t1(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${jr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let o=new Set(this.storedResolutions.values());typeof r<"u"&&!o.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,o]of this.storedResolutions)o===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[o,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(o)}for(let o of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(o,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(o.locatorHash);let n=r.get(o.locatorHash);if(n){r.delete(o.locatorHash);for(let u of n)this.deleteDescriptor(u)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,o]of e.dependencies)Sf(o)&&e.dependencies.set(r,e1(o))}getDependencyMeta(e,r){let o={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(fn(e));if(!n)return o;let u=n.get(null);if(u&&Object.assign(o,u),r===null||!Xpe.default.valid(r))return o;for(let[A,p]of n)A!==null&&A===r&&Object.assign(o,p);return o}async findLocatorForLocation(e,{strict:r=!1}={}){let o=new Qi,a=this.configuration.getLinkers(),n={project:this,report:o};for(let u of a){let A=await u.findPackageLocator(e,n);if(A){if(r&&(await u.findPackageLocation(A,n)).replace(Jpe,"")!==e.replace(Jpe,""))continue;return A}}return null}async loadUserConfig(){let e=K.join(this.cwd,".pnp.cjs");await oe.existsPromise(e)&&vf(e).setup();let r=K.join(this.cwd,"yarn.config.cjs");return await oe.existsPromise(r)?vf(r):null}async preparePackage(e,{resolver:r,resolveOptions:o}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[u,A]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,A,this,n,A,{resolver:r,resolveOptions:o});if(!r1(A,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,o);n.dependencies.set(u,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),o=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new sC(a);await n.setup(this,{report:e.report});let u=e.lockfileOnly?[new $b(a)]:[n,a],A=new vd([new oC(a),...u]),p=new vd([...u]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:A}:{project:this,report:e.report,resolver:A,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},I=new Map,v=new Map,b=new Map,C=new Map,T=new Map,L=new Map,U=this.topLevelWorkspace.anchoredLocator,J=new Set,te=[],le=_4(),pe=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Xs.progressViaTitle(),async ce=>{let ne=async H=>{let lt=await Wy(async()=>await A.resolve(H,E),_e=>`${jr(this.configuration,H)}: ${_e}`);if(!n1(H,lt))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${jr(this.configuration,H)} to ${jr(this.configuration,lt)})`);C.set(lt.locatorHash,lt),!r.delete(lt.locatorHash)&&!this.tryWorkspaceByLocator(lt)&&o.push(lt);let Qe=await this.preparePackage(lt,{resolver:A,resolveOptions:E}),be=Uc([...Qe.dependencies.values()].map(_e=>ht(_e)));return te.push(be),be.catch(()=>{}),v.set(Qe.locatorHash,Qe),Qe},ee=async H=>{let lt=T.get(H.locatorHash);if(typeof lt<"u")return lt;let Re=Promise.resolve().then(()=>ne(H));return T.set(H.locatorHash,Re),Re},Ie=async(H,lt)=>{let Re=await ht(lt);return I.set(H.descriptorHash,H),b.set(H.descriptorHash,Re.locatorHash),Re},ke=async H=>{ce.setTitle(qn(this.configuration,H));let lt=this.resolutionAliases.get(H.descriptorHash);if(typeof lt<"u")return Ie(H,this.storedDescriptors.get(lt));let Re=A.getResolutionDependencies(H,E),Qe=Object.fromEntries(await Uc(Object.entries(Re).map(async([Te,Je])=>{let He=A.bindDescriptor(Je,U,E),x=await ht(He);return J.add(x.locatorHash),[Te,x]}))),_e=(await Wy(async()=>await A.getCandidates(H,Qe,E),Te=>`${qn(this.configuration,H)}: ${Te}`))[0];if(typeof _e>"u")throw new zt(82,`${qn(this.configuration,H)}: No candidates found`);if(e.checkResolutions){let{locators:Te}=await p.getSatisfying(H,Qe,[_e],{...E,resolver:p});if(!Te.find(Je=>Je.locatorHash===_e.locatorHash))throw new zt(78,`Invalid resolution ${XI(this.configuration,H,_e)}`)}return I.set(H.descriptorHash,H),b.set(H.descriptorHash,_e.locatorHash),ee(_e)},ht=H=>{let lt=L.get(H.descriptorHash);if(typeof lt<"u")return lt;I.set(H.descriptorHash,H);let Re=Promise.resolve().then(()=>ke(H));return L.set(H.descriptorHash,Re),Re};for(let H of this.workspaces){let lt=H.anchoredDescriptor;te.push(ht(lt))}for(;te.length>0;){let H=[...te];te.length=0,await Uc(H)}});let Ae=sl(r.values(),ce=>this.tryWorkspaceByLocator(ce)?sl.skip:ce);if(o.length>0||Ae.length>0){let ce=new Set(this.workspaces.flatMap(H=>{let lt=v.get(H.anchoredLocator.locatorHash);if(!lt)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(lt.dependencies.values(),Re=>{let Qe=b.get(Re.descriptorHash);if(!Qe)throw new Error("Assertion failed: The resolution should have been registered");return Qe})})),ne=H=>ce.has(H.locatorHash)?"0":"1",ee=H=>xa(H),Ie=ks(o,[ne,ee]),ke=ks(Ae,[ne,ee]),ht=e.report.getRecommendedLength();Ie.length>0&&e.report.reportInfo(85,`${Ot(this.configuration,"+",yt.ADDED)} ${cS(this.configuration,Ie,ht)}`),ke.length>0&&e.report.reportInfo(85,`${Ot(this.configuration,"-",yt.REMOVED)} ${cS(this.configuration,ke,ht)}`)}let ye=new Set(this.resolutionAliases.values()),ae=new Set(v.keys()),we=new Set,Pe=new Map,g=[];NAt({project:this,accessibleLocators:we,volatileDescriptors:ye,optionalBuilds:ae,peerRequirements:Pe,peerWarnings:g,allDescriptors:I,allResolutions:b,allPackages:v});for(let ce of J)ae.delete(ce);for(let ce of ye)I.delete(ce),b.delete(ce);let Ee=new Set,De=new Set;for(let ce of v.values())ce.conditions!=null&&(!ae.has(ce.locatorHash)||(qS(ce,pe)||(qS(ce,le)&&e.report.reportWarningOnce(77,`${jr(this.configuration,ce)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Ot(this.configuration,"supportedArchitectures",yt.SETTING)} setting`),De.add(ce.locatorHash)),Ee.add(ce.locatorHash)));this.storedResolutions=b,this.storedDescriptors=I,this.storedPackages=v,this.accessibleLocators=we,this.conditionalLocators=Ee,this.disabledLocators=De,this.originalPackages=C,this.optionalBuilds=ae,this.peerRequirements=Pe,this.peerWarnings=g}async fetchEverything({cache:e,report:r,fetcher:o,mode:a,persistProject:n=!0}){let u={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},A=o||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:r,cacheOptions:u},h=Array.from(new Set(ks(this.storedResolutions.values(),[C=>{let T=this.storedPackages.get(C);if(!T)throw new Error("Assertion failed: The locator should have been registered");return xa(T)}])));a==="update-lockfile"&&(h=h.filter(C=>!this.storedChecksums.has(C)));let E=!1,I=Xs.progressViaCounter(h.length);await r.reportProgress(I);let v=(0,rk.default)(FAt);if(await Uc(h.map(C=>v(async()=>{let T=this.storedPackages.get(C);if(!T)throw new Error("Assertion failed: The locator should have been registered");if(Hc(T))return;let L;try{L=await A.fetch(T,p)}catch(U){U.message=`${jr(this.configuration,T)}: ${U.message}`,r.reportExceptionOnce(U),E=U;return}L.checksum!=null?this.storedChecksums.set(T.locatorHash,L.checksum):this.storedChecksums.delete(T.locatorHash),L.releaseFs&&L.releaseFs()}).finally(()=>{I.tick()}))),E)throw E;let b=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||b){let T=(await Promise.all([...r.cacheMisses].map(async Ae=>{let ye=this.storedPackages.get(Ae),ae=this.storedChecksums.get(Ae)??null,we=e.getLocatorPath(ye,ae);return(await oe.statPromise(we)).size}))).reduce((Ae,ye)=>Ae+ye,0)-(b?.size??0),L=r.cacheMisses.size,U=b?.count??0,J=`${nS(L,{zero:"No new packages",one:"A package was",more:`${Ot(this.configuration,L,yt.NUMBER)} packages were`})} added to the project`,te=`${nS(U,{zero:"none were",one:"one was",more:`${Ot(this.configuration,U,yt.NUMBER)} were`})} removed`,le=T!==0?` (${Ot(this.configuration,T,yt.SIZE_DIFF)})`:"",pe=U>0?L>0?`${J}, and ${te}${le}.`:`${J}, but ${te}${le}.`:`${J}${le}.`;r.reportInfo(13,pe)}}async linkEverything({cache:e,report:r,fetcher:o,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},u=o||this.configuration.makeFetcher(),A={checksums:this.storedChecksums,project:this,cache:e,fetcher:u,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(ce=>{let ne=ce.makeInstaller(h),ee=ce.getCustomDataKey(),Ie=this.linkersCustomData.get(ee);return typeof Ie<"u"&&ne.attachCustomData(Ie),[ce,ne]})),I=new Map,v=new Map,b=new Map,C=new Map(await Uc([...this.accessibleLocators].map(async ce=>{let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");return[ce,await u.fetch(ne,A)]}))),T=[],L=new Set,U=[];for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(typeof ne>"u")throw new Error("Assertion failed: The locator should have been registered");let ee=C.get(ne.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The fetch result should have been registered");let Ie=[],ke=H=>{Ie.push(H)},ht=this.tryWorkspaceByLocator(ne);if(ht!==null){let H=[],{scripts:lt}=ht.manifest;for(let Qe of["preinstall","install","postinstall"])lt.has(Qe)&&H.push({type:0,script:Qe});try{for(let[Qe,be]of E)if(Qe.supportsPackage(ne,h)&&(await be.installPackage(ne,ee,{holdFetchResult:ke})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{Ie.length===0?ee.releaseFs?.():T.push(Uc(Ie).catch(()=>{}).then(()=>{ee.releaseFs?.()}))}let Re=K.join(ee.packageFs.getRealPath(),ee.prefixPath);v.set(ne.locatorHash,Re),!Hc(ne)&&H.length>0&&b.set(ne.locatorHash,{buildDirectives:H,buildLocations:[Re]})}else{let H=p.find(Qe=>Qe.supportsPackage(ne,h));if(!H)throw new zt(12,`${jr(this.configuration,ne)} isn't supported by any available linker`);let lt=E.get(H);if(!lt)throw new Error("Assertion failed: The installer should have been registered");let Re;try{Re=await lt.installPackage(ne,ee,{holdFetchResult:ke})}finally{Ie.length===0?ee.releaseFs?.():T.push(Uc(Ie).then(()=>{}).then(()=>{ee.releaseFs?.()}))}I.set(ne.locatorHash,H),v.set(ne.locatorHash,Re.packageLocation),Re.buildRequest&&Re.packageLocation&&(Re.buildRequest.skipped?(L.add(ne.locatorHash),this.skippedBuilds.has(ne.locatorHash)||U.push([ne,Re.buildRequest.explain])):b.set(ne.locatorHash,{buildDirectives:Re.buildRequest.directives,buildLocations:[Re.packageLocation]}))}}let J=new Map;for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");let ee=this.tryWorkspaceByLocator(ne)!==null,Ie=async(ke,ht)=>{let H=v.get(ne.locatorHash);if(typeof H>"u")throw new Error(`Assertion failed: The package (${jr(this.configuration,ne)}) should have been registered`);let lt=[];for(let Re of ne.dependencies.values()){let Qe=this.storedResolutions.get(Re.descriptorHash);if(typeof Qe>"u")throw new Error(`Assertion failed: The resolution (${qn(this.configuration,Re)}, from ${jr(this.configuration,ne)})should have been registered`);let be=this.storedPackages.get(Qe);if(typeof be>"u")throw new Error(`Assertion failed: The package (${Qe}, resolved from ${qn(this.configuration,Re)}) should have been registered`);let _e=this.tryWorkspaceByLocator(be)===null?I.get(Qe):null;if(typeof _e>"u")throw new Error(`Assertion failed: The package (${Qe}, resolved from ${qn(this.configuration,Re)}) should have been registered`);_e===ke||_e===null?v.get(be.locatorHash)!==null&<.push([Re,be]):!ee&&H!==null&&Gy(J,Qe).push(H)}H!==null&&await ht.attachInternalDependencies(ne,lt)};if(ee)for(let[ke,ht]of E)ke.supportsPackage(ne,h)&&await Ie(ke,ht);else{let ke=I.get(ne.locatorHash);if(!ke)throw new Error("Assertion failed: The linker should have been found");let ht=E.get(ke);if(!ht)throw new Error("Assertion failed: The installer should have been registered");await Ie(ke,ht)}}for(let[ce,ne]of J){let ee=this.storedPackages.get(ce);if(!ee)throw new Error("Assertion failed: The package should have been registered");let Ie=I.get(ee.locatorHash);if(!Ie)throw new Error("Assertion failed: The linker should have been found");let ke=E.get(Ie);if(!ke)throw new Error("Assertion failed: The installer should have been registered");await ke.attachExternalDependents(ee,ne)}let te=new Map;for(let[ce,ne]of E){let ee=await ne.finalizeInstall();for(let Ie of ee?.records??[])Ie.buildRequest.skipped?(L.add(Ie.locator.locatorHash),this.skippedBuilds.has(Ie.locator.locatorHash)||U.push([Ie.locator,Ie.buildRequest.explain])):b.set(Ie.locator.locatorHash,{buildDirectives:Ie.buildRequest.directives,buildLocations:Ie.buildLocations});typeof ee?.customData<"u"&&te.set(ce.getCustomDataKey(),ee.customData)}if(this.linkersCustomData=te,await Uc(T),a==="skip-build")return;for(let[,ce]of ks(U,([ne])=>xa(ne)))ce(r);let le=new Set(this.storedPackages.keys()),pe=new Set(b.keys());for(let ce of pe)le.delete(ce);let Ae=(0,ek.createHash)("sha512");Ae.update(process.versions.node),await this.configuration.triggerHook(ce=>ce.globalHashGeneration,this,ce=>{Ae.update("\0"),Ae.update(ce)});let ye=Ae.digest("hex"),ae=new Map,we=ce=>{let ne=ae.get(ce.locatorHash);if(typeof ne<"u")return ne;let ee=this.storedPackages.get(ce.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The package should have been registered");let Ie=(0,ek.createHash)("sha512");Ie.update(ce.locatorHash),ae.set(ce.locatorHash,"");for(let ke of ee.dependencies.values()){let ht=this.storedResolutions.get(ke.descriptorHash);if(typeof ht>"u")throw new Error(`Assertion failed: The resolution (${qn(this.configuration,ke)}) should have been registered`);let H=this.storedPackages.get(ht);if(typeof H>"u")throw new Error("Assertion failed: The package should have been registered");Ie.update(we(H))}return ne=Ie.digest("hex"),ae.set(ce.locatorHash,ne),ne},Pe=(ce,ne)=>{let ee=(0,ek.createHash)("sha512");ee.update(ye),ee.update(we(ce));for(let Ie of ne)ee.update(Ie);return ee.digest("hex")},g=new Map,Ee=!1,De=ce=>{let ne=new Set([ce.locatorHash]);for(let ee of ne){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");for(let ke of Ie.dependencies.values()){let ht=this.storedResolutions.get(ke.descriptorHash);if(!ht)throw new Error(`Assertion failed: The resolution (${qn(this.configuration,ke)}) should have been registered`);if(ht!==ce.locatorHash&&pe.has(ht))return!1;let H=this.storedPackages.get(ht);if(!H)throw new Error("Assertion failed: The package should have been registered");let lt=this.tryWorkspaceByLocator(H);if(lt){if(lt.anchoredLocator.locatorHash!==ce.locatorHash&&pe.has(lt.anchoredLocator.locatorHash))return!1;ne.add(lt.anchoredLocator.locatorHash)}ne.add(ht)}}return!0};for(;pe.size>0;){let ce=pe.size,ne=[];for(let ee of pe){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");if(!De(Ie))continue;let ke=b.get(Ie.locatorHash);if(!ke)throw new Error("Assertion failed: The build directive should have been registered");let ht=Pe(Ie,ke.buildLocations);if(this.storedBuildState.get(Ie.locatorHash)===ht){g.set(Ie.locatorHash,ht),pe.delete(ee);continue}Ee||(await this.persistInstallStateFile(),Ee=!0),this.storedBuildState.has(Ie.locatorHash)?r.reportInfo(8,`${jr(this.configuration,Ie)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${jr(this.configuration,Ie)} must be built because it never has been before or the last one failed`);let H=ke.buildLocations.map(async lt=>{if(!K.isAbsolute(lt))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${lt})`);for(let Re of ke.buildDirectives){let Qe=`# This file contains the result of Yarn building a package (${xa(Ie)}) -`;switch(Re.type){case 0:Qe+=`# Script name: ${Re.script} -`;break;case 1:Qe+=`# Script code: ${Re.script} -`;break}let be=null;if(!await oe.mktempPromise(async Te=>{let Je=K.join(Te,"build.log"),{stdout:He,stderr:x}=this.configuration.getSubprocessStreams(Je,{header:Qe,prefix:jr(this.configuration,Ie),report:r}),w;try{switch(Re.type){case 0:w=await Vx(Ie,Re.script,[],{cwd:lt,project:this,stdin:be,stdout:He,stderr:x});break;case 1:w=await wU(Ie,Re.script,[],{cwd:lt,project:this,stdin:be,stdout:He,stderr:x});break}}catch(F){x.write(F.stack),w=1}if(He.end(),x.end(),w===0)return!0;oe.detachTemp(Te);let S=`${jr(this.configuration,Ie)} couldn't be built successfully (exit code ${Ot(this.configuration,w,yt.NUMBER)}, logs can be found here: ${Ot(this.configuration,Je,yt.PATH)})`,y=this.optionalBuilds.has(Ie.locatorHash);return y?r.reportInfo(9,S):r.reportError(9,S),Jce&&r.reportFold(ue.fromPortablePath(Je),oe.readFileSync(Je,"utf8")),y}))return!1}return!0});ne.push(...H,Promise.allSettled(H).then(lt=>{pe.delete(ee),lt.every(Re=>Re.status==="fulfilled"&&Re.value===!0)&&g.set(Ie.locatorHash,ht)}))}if(await Uc(ne),ce===pe.size){let ee=Array.from(pe).map(Ie=>{let ke=this.storedPackages.get(Ie);if(!ke)throw new Error("Assertion failed: The package should have been registered");return jr(this.configuration,ke)}).join(", ");r.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ee})`);break}}this.storedBuildState=g,this.skippedBuilds=L}async installWithNewReport(e,r){return(await Nt.start({configuration:this.configuration,json:e.json,stdout:e.stdout,forceSectionAlignment:!0,includeLogs:!e.json&&!e.quiet,includeVersion:!0},async a=>{await this.install({...r,report:a})})).exitCode()}async install(e){let r=this.configuration.get("nodeLinker");Ve.telemetry?.reportInstall(r);let o=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(E=>E.validateProject,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),o=!0}})}),o)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,I]of E)for(let v of I)v.status="inactive";let n=K.join(this.cwd,dr.lockfile),u=null;if(e.immutable)try{u=await oe.readFilePromise(n,"utf8")}catch(E){throw E.code==="ENOENT"?new zt(28,"The lockfile would have been created by this install, which is explicitly forbidden."):E}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{LAt(this,e.report);for(let[,E]of a)for(let[,I]of E)for(let v of I)if(v.userProvided){let b=Ot(this.configuration,v,yt.PACKAGE_EXTENSION);switch(v.status){case"inactive":e.report.reportWarning(68,`${b}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${b}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(u!==null){let E=Ug(u,this.generateLockfile());if(E!==u){let I=ppe(n,n,u,E,void 0,void 0,{maxEditLength:100});if(I){e.report.reportSeparator();for(let v of I.hunks){e.report.reportInfo(null,`@@ -${v.oldStart},${v.oldLines} +${v.newStart},${v.newLines} @@`);for(let b of v.lines)b.startsWith("+")?e.report.reportError(28,Ot(this.configuration,b,yt.ADDED)):b.startsWith("-")?e.report.reportError(28,Ot(this.configuration,b,yt.REMOVED)):e.report.reportInfo(null,Ot(this.configuration,b,"grey"))}e.report.reportSeparator()}throw new zt(28,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let E of a.values())for(let[,I]of E)for(let v of I)v.userProvided&&v.status==="active"&&Ve.telemetry?.reportPackageExtension(yd(v,yt.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let A=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(A.map(async E=>MS(E,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${Ot(this.configuration,"mode=update-lockfile",yt.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(A.map(async I=>MS(I,{cwd:this.cwd})));for(let I=0;I{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,u]of this.storedResolutions.entries()){let A=e.get(u);A||e.set(u,A=new Set),A.add(n)}let r={},{cacheKey:o}=Lr.getCacheKey(this.configuration);r.__metadata={version:nk,cacheKey:o};for(let[n,u]of e.entries()){let A=this.originalPackages.get(n);if(!A)continue;let p=[];for(let b of u){let C=this.storedDescriptors.get(b);if(!C)throw new Error("Assertion failed: The descriptor should have been registered");p.push(C)}let h=p.map(b=>Sa(b)).sort().join(", "),E=new Mt;E.version=A.linkType==="HARD"?A.version:"0.0.0-use.local",E.languageName=A.languageName,E.dependencies=new Map(A.dependencies),E.peerDependencies=new Map(A.peerDependencies),E.dependenciesMeta=new Map(A.dependenciesMeta),E.peerDependenciesMeta=new Map(A.peerDependenciesMeta),E.bin=new Map(A.bin);let I,v=this.storedChecksums.get(A.locatorHash);if(typeof v<"u"){let b=v.indexOf("/");if(b===-1)throw new Error("Assertion failed: Expected the checksum to reference its cache key");let C=v.slice(0,b),T=v.slice(b+1);C===o?I=T:I=v}r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:A.linkType.toLowerCase(),resolution:xa(A),checksum:I,conditions:A.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. +`),this.stdout.write(`${Mt(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. +`),this.suggestInstall&&this.stdout.write(`${Mt(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. +`))}formatNameWithHyperlink(r){return yU(r,{configuration:this.configuration,json:!1})}}});var aC,f_=Et(()=>{bo();aC=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(OP(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){let a=o.project.storedResolutions.get(e.descriptorHash);if(a){let u=o.project.originalPackages.get(a);if(u)return[u]}let n=o.project.originalPackages.get(OP(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.originalPackages.get(e.locatorHash);if(!o)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return o}}});function Kf(){}function aut(t,e,r,o,a){for(var n=0,u=e.length,A=0,p=0;nx.length?R:x}),h.value=t.join(E)}else h.value=t.join(r.slice(A,A+h.count));A+=h.count,h.added||(p+=h.count)}}var v=e[u-1];return u>1&&typeof v.value=="string"&&(v.added||v.removed)&&t.equals("",v.value)&&(e[u-2].value+=v.value,e.pop()),e}function lut(t){return{newPos:t.newPos,components:t.components.slice(0)}}function cut(t,e){if(typeof t=="function")e.callback=t;else if(t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}function upe(t,e,r){return r=cut(r,{ignoreWhitespace:!0}),m_.diff(t,e,r)}function uut(t,e,r){return y_.diff(t,e,r)}function Jx(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Jx=function(e){return typeof e}:Jx=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jx(t)}function p_(t){return put(t)||hut(t)||gut(t)||dut()}function put(t){if(Array.isArray(t))return h_(t)}function hut(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function gut(t,e){if(!!t){if(typeof t=="string")return h_(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return h_(t,e)}}function h_(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r"u"&&(u.context=4);var A=uut(r,o,u);if(!A)return;A.push({value:"",lines:[]});function p(U){return U.map(function(J){return" "+J})}for(var h=[],E=0,I=0,v=[],x=1,C=1,R=function(J){var te=A[J],ae=te.lines||te.value.replace(/\n$/,"").split(` +`);if(te.lines=ae,te.added||te.removed){var fe;if(!E){var ce=A[J-1];E=x,I=C,ce&&(v=u.context>0?p(ce.lines.slice(-u.context)):[],E-=v.length,I-=v.length)}(fe=v).push.apply(fe,p_(ae.map(function(le){return(te.added?"+":"-")+le}))),te.added?C+=ae.length:x+=ae.length}else{if(E)if(ae.length<=u.context*2&&J=A.length-2&&ae.length<=u.context){var g=/\n$/.test(r),Ee=/\n$/.test(o),Se=ae.length==0&&v.length>we.oldLines;!g&&Se&&r.length>0&&v.splice(we.oldLines,0,"\\ No newline at end of file"),(!g&&!Se||!Ee)&&v.push("\\ No newline at end of file")}h.push(we),E=0,I=0,v=[]}x+=ae.length,C+=ae.length}},L=0;L{Kf.prototype={diff:function(e,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=o.callback;typeof o=="function"&&(a=o,o={}),this.options=o;var n=this;function u(R){return a?(setTimeout(function(){a(void 0,R)},0),!0):R}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var A=r.length,p=e.length,h=1,E=A+p;o.maxEditLength&&(E=Math.min(E,o.maxEditLength));var I=[{newPos:-1,components:[]}],v=this.extractCommon(I[0],r,e,0);if(I[0].newPos+1>=A&&v+1>=p)return u([{value:this.join(r),count:r.length}]);function x(){for(var R=-1*h;R<=h;R+=2){var L=void 0,U=I[R-1],J=I[R+1],te=(J?J.newPos:0)-R;U&&(I[R-1]=void 0);var ae=U&&U.newPos+1=A&&te+1>=p)return u(aut(n,L.components,r,e,n.useLongestToken));I[R]=L}h++}if(a)(function R(){setTimeout(function(){if(h>E)return a();x()||R()},0)})();else for(;h<=E;){var C=x();if(C)return C}},pushComponent:function(e,r,o){var a=e[e.length-1];a&&a.added===r&&a.removed===o?e[e.length-1]={count:a.count+1,added:r,removed:o}:e.push({count:1,added:r,removed:o})},extractCommon:function(e,r,o,a){for(var n=r.length,u=o.length,A=e.newPos,p=A-a,h=0;A+1"u"?r:u}:o;return typeof t=="string"?t:JSON.stringify(g_(t,null,null,a),a," ")};s2.equals=function(t,e){return Kf.prototype.equals.call(s2,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};d_=new Kf;d_.tokenize=function(t){return t.slice()};d_.join=d_.removeEmpty=function(t){return t}});var ppe=_((s3t,fpe)=>{var yut=Hl(),Eut=pE(),Cut=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,wut=/^\w*$/;function Iut(t,e){if(yut(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||Eut(t)?!0:wut.test(t)||!Cut.test(t)||e!=null&&t in Object(e)}fpe.exports=Iut});var dpe=_((o3t,gpe)=>{var hpe=_S(),But="Expected a function";function C_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(But);var r=function(){var o=arguments,a=e?e.apply(this,o):o[0],n=r.cache;if(n.has(a))return n.get(a);var u=t.apply(this,o);return r.cache=n.set(a,u)||n,u};return r.cache=new(C_.Cache||hpe),r}C_.Cache=hpe;gpe.exports=C_});var ype=_((a3t,mpe)=>{var vut=dpe(),Dut=500;function Sut(t){var e=vut(t,function(o){return r.size===Dut&&r.clear(),o}),r=e.cache;return e}mpe.exports=Sut});var w_=_((l3t,Epe)=>{var Put=ype(),but=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,xut=/\\(\\)?/g,kut=Put(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(but,function(r,o,a,n){e.push(a?n.replace(xut,"$1"):o||r)}),e});Epe.exports=kut});var jd=_((c3t,Cpe)=>{var Qut=Hl(),Fut=ppe(),Rut=w_(),Tut=N1();function Nut(t,e){return Qut(t)?t:Fut(t,e)?[t]:Rut(Tut(t))}Cpe.exports=Nut});var lC=_((u3t,wpe)=>{var Lut=pE(),Out=1/0;function Mut(t){if(typeof t=="string"||Lut(t))return t;var e=t+"";return e=="0"&&1/t==-Out?"-0":e}wpe.exports=Mut});var zx=_((A3t,Ipe)=>{var Uut=jd(),_ut=lC();function Hut(t,e){e=Uut(e,t);for(var r=0,o=e.length;t!=null&&r{var qut=rP(),jut=jd(),Gut=_I(),Bpe=il(),Yut=lC();function Wut(t,e,r,o){if(!Bpe(t))return t;e=jut(e,t);for(var a=-1,n=e.length,u=n-1,A=t;A!=null&&++a{var Kut=zx(),Vut=I_(),Jut=jd();function zut(t,e,r){for(var o=-1,a=e.length,n={};++o{function Xut(t,e){return t!=null&&e in Object(t)}Ppe.exports=Xut});var B_=_((g3t,xpe)=>{var Zut=jd(),$ut=OI(),eAt=Hl(),tAt=_I(),rAt=YS(),nAt=lC();function iAt(t,e,r){e=Zut(e,t);for(var o=-1,a=e.length,n=!1;++o{var sAt=bpe(),oAt=B_();function aAt(t,e){return t!=null&&oAt(t,e,sAt)}kpe.exports=aAt});var Rpe=_((m3t,Fpe)=>{var lAt=Spe(),cAt=Qpe();function uAt(t,e){return lAt(t,e,function(r,o){return cAt(t,o)})}Fpe.exports=uAt});var Ope=_((y3t,Lpe)=>{var Tpe=pd(),AAt=OI(),fAt=Hl(),Npe=Tpe?Tpe.isConcatSpreadable:void 0;function pAt(t){return fAt(t)||AAt(t)||!!(Npe&&t&&t[Npe])}Lpe.exports=pAt});var _pe=_((E3t,Upe)=>{var hAt=jS(),gAt=Ope();function Mpe(t,e,r,o,a){var n=-1,u=t.length;for(r||(r=gAt),a||(a=[]);++n0&&r(A)?e>1?Mpe(A,e-1,r,o,a):hAt(a,A):o||(a[a.length]=A)}return a}Upe.exports=Mpe});var qpe=_((C3t,Hpe)=>{var dAt=_pe();function mAt(t){var e=t==null?0:t.length;return e?dAt(t,1):[]}Hpe.exports=mAt});var v_=_((w3t,jpe)=>{var yAt=qpe(),EAt=AL(),CAt=fL();function wAt(t){return CAt(EAt(t,void 0,yAt),t+"")}jpe.exports=wAt});var D_=_((I3t,Gpe)=>{var IAt=Rpe(),BAt=v_(),vAt=BAt(function(t,e){return t==null?{}:IAt(t,e)});Gpe.exports=vAt});var Xx,Ype=Et(()=>{Yl();Xx=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.resolver.bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,o,a){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Qi,S_=Et(()=>{Yl();Qi=class extends Xs{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,o){return(typeof r=="function"?r:o)()}async startTimerPromise(e,r,o){return await(typeof r=="function"?r:o)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var Wpe,cC,P_=Et(()=>{St();Wpe=$e(RP());fE();vd();jl();nh();Qf();bo();cC=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Ot.tryFind(this.cwd)??new Ot,this.relativeCwd=V.relative(this.project.cwd,this.cwd)||Bt.dot;let e=this.manifest.name?this.manifest.name:eA(null,`${this.computeCandidateName()}-${zs(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=In(e,`${Xn.protocol}${this.relativeCwd}`),this.anchoredLocator=Qs(e,`${Xn.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let o=await(0,Wpe.default)(r,{cwd:ue.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort(),await o.reduce(async(a,n)=>{let u=V.resolve(this.cwd,ue.toPortablePath(n)),A=await oe.existsPromise(V.join(u,"package.json"));await a,A&&this.workspacesCwds.add(u)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${a1(this.project.configuration,this)} (${Mt(this.project.configuration,V.join(this.cwd,dr.manifest),yt.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),o=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(o===Xn.protocol&&V.normalize(a)===this.relativeCwd||o===Xn.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=xa(a);return n?o===Xn.protocol?n.test(this.manifest.version??"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?n.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${V.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Ot.hardDependencies}={}){let r=new Set,o=a=>{for(let n of e)for(let u of a.manifest[n].values()){let A=this.project.tryWorkspaceByDescriptor(u);A===null||r.has(A)||(r.add(A),o(A))}};return o(this),r}getRecursiveWorkspaceDependents({dependencies:e=Ot.hardDependencies}={}){let r=new Set,o=a=>{for(let n of this.project.workspaces)e.some(A=>[...n.manifest[A].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&i1(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),o(n))};return o(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let o of r.workspacesCwds){let a=this.project.workspacesByCwd.get(o);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=V.join(this.cwd,Ot.fileName),o=`${JSON.stringify(e,null,this.manifest.indent)} +`;await oe.changeFilePromise(r,o,{automaticNewlines:!0}),this.manifest.raw=e}}});function kAt({project:t,allDescriptors:e,allResolutions:r,allPackages:o,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:u=new Map,peerWarnings:A=[],volatileDescriptors:p=new Set}){let h=new Map,E=[],I=new Map,v=new Map,x=new Map,C=new Map,R=new Map,L=new Map(t.workspaces.map(ce=>{let me=ce.anchoredLocator.locatorHash,he=o.get(me);if(typeof he>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[me,e1(he)]})),U=()=>{let ce=oe.mktempSync(),me=V.join(ce,"stacktrace.log"),he=String(E.length+1).length,Be=E.map((we,g)=>`${`${g+1}.`.padStart(he," ")} ${ba(we)} +`).join("");throw oe.writeFileSync(me,Be),oe.detachTemp(ce),new zt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${ue.fromPortablePath(me)}`)},J=ce=>{let me=r.get(ce.descriptorHash);if(typeof me>"u")throw new Error("Assertion failed: The resolution should have been registered");let he=o.get(me);if(!he)throw new Error("Assertion failed: The package could not be found");return he},te=(ce,me,he,{top:Be,optional:we})=>{E.length>1e3&&U(),E.push(me);let g=ae(ce,me,he,{top:Be,optional:we});return E.pop(),g},ae=(ce,me,he,{top:Be,optional:we})=>{if(we||n.delete(me.locatorHash),a.has(me.locatorHash))return;a.add(me.locatorHash);let g=o.get(me.locatorHash);if(!g)throw new Error(`Assertion failed: The package (${qr(t.configuration,me)}) should have been registered`);let Ee=[],Se=[],le=[],ne=[],ee=[];for(let Fe of Array.from(g.dependencies.values())){if(g.peerDependencies.has(Fe.identHash)&&g.locatorHash!==Be)continue;if(bf(Fe))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");p.delete(Fe.descriptorHash);let At=we;if(!At){let Te=g.dependenciesMeta.get(fn(Fe));if(typeof Te<"u"){let Je=Te.get(null);typeof Je<"u"&&Je.optional&&(At=!0)}}let H=r.get(Fe.descriptorHash);if(!H)throw new Error(`Assertion failed: The resolution (${jn(t.configuration,Fe)}) should have been registered`);let at=L.get(H)||o.get(H);if(!at)throw new Error(`Assertion failed: The package (${H}, resolved from ${jn(t.configuration,Fe)}) should have been registered`);if(at.peerDependencies.size===0){te(Fe,at,new Map,{top:Be,optional:At});continue}let Re,ke,xe=new Set,He;Se.push(()=>{Re=tM(Fe,me.locatorHash),ke=rM(at,me.locatorHash),g.dependencies.delete(Fe.identHash),g.dependencies.set(Re.identHash,Re),r.set(Re.descriptorHash,ke.locatorHash),e.set(Re.descriptorHash,Re),o.set(ke.locatorHash,ke),Ee.push([at,Re,ke])}),le.push(()=>{He=new Map;for(let Te of ke.peerDependencies.values()){let Je=g.dependencies.get(Te.identHash);if(!Je&&n1(me,Te)&&(ce.identHash===me.identHash?Je=ce:(Je=In(me,ce.range),e.set(Je.descriptorHash,Je),r.set(Je.descriptorHash,me.locatorHash),p.delete(Je.descriptorHash))),(!Je||Je.range==="missing:")&&ke.dependencies.has(Te.identHash)){ke.peerDependencies.delete(Te.identHash);continue}Je||(Je=In(Te,"missing:")),ke.dependencies.set(Je.identHash,Je),bf(Je)&&md(x,Je.descriptorHash).add(ke.locatorHash),I.set(Je.identHash,Je),Je.range==="missing:"&&xe.add(Je.identHash),He.set(Te.identHash,he.get(Te.identHash)??ke.locatorHash)}ke.dependencies=new Map(ks(ke.dependencies,([Te,Je])=>fn(Je)))}),ne.push(()=>{if(!o.has(ke.locatorHash))return;let Te=h.get(at.locatorHash);typeof Te=="number"&&Te>=2&&U();let Je=h.get(at.locatorHash),qe=typeof Je<"u"?Je+1:1;h.set(at.locatorHash,qe),te(Re,ke,He,{top:Be,optional:At}),h.set(at.locatorHash,qe-1)}),ee.push(()=>{let Te=g.dependencies.get(Fe.identHash);if(typeof Te>"u")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let Je=r.get(Te.descriptorHash);if(typeof Je>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");if(md(R,Je).add(me.locatorHash),!!o.has(ke.locatorHash)){for(let qe of ke.peerDependencies.values()){let b=He.get(qe.identHash);if(typeof b>"u")throw new Error("Assertion failed: Expected the peer dependency ident to be registered");Yy(Wy(C,b),fn(qe)).push(ke.locatorHash)}for(let qe of xe)ke.dependencies.delete(qe)}})}for(let Fe of[...Se,...le])Fe();let Ie;do{Ie=!0;for(let[Fe,At,H]of Ee){let at=Wy(v,Fe.locatorHash),Re=zs(...[...H.dependencies.values()].map(Te=>{let Je=Te.range!=="missing:"?r.get(Te.descriptorHash):"missing:";if(typeof Je>"u")throw new Error(`Assertion failed: Expected the resolution for ${jn(t.configuration,Te)} to have been registered`);return Je===Be?`${Je} (top)`:Je}),At.identHash),ke=at.get(Re);if(typeof ke>"u"){at.set(Re,At);continue}if(ke===At)continue;o.delete(H.locatorHash),e.delete(At.descriptorHash),r.delete(At.descriptorHash),a.delete(H.locatorHash);let xe=x.get(At.descriptorHash)||[],He=[g.locatorHash,...xe];x.delete(At.descriptorHash);for(let Te of He){let Je=o.get(Te);typeof Je>"u"||(Je.dependencies.get(At.identHash).descriptorHash!==ke.descriptorHash&&(Ie=!1),Je.dependencies.set(At.identHash,ke))}}}while(!Ie);for(let Fe of[...ne,...ee])Fe()};for(let ce of t.workspaces){let me=ce.anchoredLocator;p.delete(ce.anchoredDescriptor.descriptorHash),te(ce.anchoredDescriptor,me,new Map,{top:me.locatorHash,optional:!1})}let fe=new Map;for(let[ce,me]of R){let he=o.get(ce);if(typeof he>"u")throw new Error("Assertion failed: Expected the root to be registered");let Be=C.get(ce);if(!(typeof Be>"u"))for(let we of me){let g=o.get(we);if(!(typeof g>"u")&&!!t.tryWorkspaceByLocator(g))for(let[Ee,Se]of Be){let le=Js(Ee);if(g.peerDependencies.has(le.identHash))continue;let ne=`p${zs(we,Ee,ce).slice(0,5)}`;u.set(ne,{subject:we,requested:le,rootRequester:ce,allRequesters:Se});let ee=he.dependencies.get(le.identHash);if(typeof ee<"u"){let Ie=J(ee),Fe=Ie.version??"0.0.0",At=new Set;for(let at of Se){let Re=o.get(at);if(typeof Re>"u")throw new Error("Assertion failed: Expected the link to be registered");let ke=Re.peerDependencies.get(le.identHash);if(typeof ke>"u")throw new Error("Assertion failed: Expected the ident to be registered");At.add(ke.range)}if(![...At].every(at=>{if(at.startsWith(Xn.protocol)){if(!t.tryWorkspaceByLocator(Ie))return!1;at=at.slice(Xn.protocol.length),(at==="^"||at==="~")&&(at="*")}return kf(Fe,at)})){let at=ol(fe,Ie.locatorHash,()=>({type:2,requested:le,subject:Ie,dependents:new Map,requesters:new Map,links:new Map,version:Fe,hash:`p${Ie.locatorHash.slice(0,5)}`}));at.dependents.set(g.locatorHash,g),at.requesters.set(he.locatorHash,he);for(let Re of Se)at.links.set(Re,o.get(Re));A.push({type:1,subject:g,requested:le,requester:he,version:Fe,hash:ne,requirementCount:Se.length})}}else he.peerDependenciesMeta.get(Ee)?.optional||A.push({type:0,subject:g,requested:le,requester:he,hash:ne})}}}A.push(...fe.values())}function QAt(t,e){let r=wL(t.peerWarnings,"type"),o=r[2]?.map(n=>{let u=Array.from(n.links.values(),E=>{let I=t.storedPackages.get(E.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the package to be registered");let v=I.peerDependencies.get(n.requested.identHash);if(typeof v>"u")throw new Error("Assertion failed: Expected the ident to be registered");return v.range}),A=n.links.size>1?"and other dependencies request":"requests",p=sM(u),h=p?cE(t.configuration,p):Mt(t.configuration,"but they have non-overlapping ranges!","redBright");return`${cs(t.configuration,n.requested)} is listed by your project with version ${o1(t.configuration,n.version)}, which doesn't satisfy what ${cs(t.configuration,n.requesters.values().next().value)} (${Mt(t.configuration,n.hash,yt.CODE)}) ${A} (${h}).`})??[],a=r[0]?.map(n=>`${qr(t.configuration,n.subject)} doesn't provide ${cs(t.configuration,n.requested)} (${Mt(t.configuration,n.hash,yt.CODE)}), requested by ${cs(t.configuration,n.requester)}.`)??[];e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met; run ${Mt(t.configuration,"yarn explain peer-requirements ",yt.CODE)} for details, where ${Mt(t.configuration,"",yt.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of ks(o,u=>Xy.default(u)))e.reportWarning(60,n);for(let n of ks(a,u=>Xy.default(u)))e.reportWarning(2,n)})}var Zx,$x,ek,Jpe,k_,x_,Q_,tk,DAt,SAt,Kpe,PAt,bAt,xAt,pl,b_,rk,Vpe,Pt,zpe=Et(()=>{St();St();Nl();qt();Zx=ve("crypto");E_();$x=$e(D_()),ek=$e(id()),Jpe=$e(zn()),k_=ve("util"),x_=$e(ve("v8")),Q_=$e(ve("zlib"));u_();S1();A_();f_();fE();uM();Yl();Ype();O1();S_();vd();P_();WP();jl();nh();ql();vb();BU();Qf();bo();tk=Jy(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),DAt=3,SAt=/ *, */g,Kpe=/\/$/,PAt=32,bAt=(0,k_.promisify)(Q_.default.gzip),xAt=(0,k_.promisify)(Q_.default.gunzip),pl=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(pl||{}),b_={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},rk=(o=>(o[o.NotProvided=0]="NotProvided",o[o.NotCompatible=1]="NotCompatible",o[o.NotCompatibleAggregate=2]="NotCompatibleAggregate",o))(rk||{}),Vpe=t=>zs(`${DAt}`,t),Pt=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new it(`No project found in ${r}`);let o=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,oe.existsSync(V.join(n,dr.manifest))){o=n;break}a=V.dirname(n)}let u=new Pt(e.projectCwd,{configuration:e});Ke.telemetry?.reportProject(u.cwd),await u.setupResolutions(),await u.setupWorkspaces(),Ke.telemetry?.reportWorkspaceCount(u.workspaces.length),Ke.telemetry?.reportDependencyCount(u.workspaces.reduce((C,R)=>C+R.manifest.dependencies.size+R.manifest.devDependencies.size,0));let A=u.tryWorkspaceByCwd(o);if(A)return{project:u,workspace:A,locator:A.anchoredLocator};let p=await u.findLocatorForLocation(`${o}/`,{strict:!0});if(p)return{project:u,locator:p,workspace:null};let h=Mt(e,u.cwd,yt.PATH),E=Mt(e,V.relative(u.cwd,o),yt.PATH),I=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,v=`- If ${h} is intended to be a project, it might be that you forgot to list ${E} in its workspace configuration.`,x=`- Finally, if ${h} is fine and you intend ${E} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new it(`The nearest package directory (${Mt(e,o,yt.PATH)}) doesn't seem to be part of the project declared in ${Mt(e,u.cwd,yt.PATH)}. + +${[I,v,x].join(` +`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=V.join(this.cwd,dr.lockfile),r=this.configuration.get("defaultLanguageName");if(oe.existsSync(e)){let o=await oe.readFilePromise(e,"utf8");this.lockFileChecksum=Vpe(o);let a=Ki(o);if(a.__metadata){let n=a.__metadata.version,u=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);let h=xf(p.resolution,!0),E=new Ot;E.load(p,{yamlCompatibilityMode:!0});let I=E.version,v=E.languageName||r,x=p.linkType.toUpperCase(),C=p.conditions??null,R=E.dependencies,L=E.peerDependencies,U=E.dependenciesMeta,J=E.peerDependenciesMeta,te=E.bin;if(p.checksum!=null){let fe=typeof u<"u"&&!p.checksum.includes("/")?`${u}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,fe)}let ae={...h,version:I,languageName:v,linkType:x,conditions:C,dependencies:R,peerDependencies:L,dependenciesMeta:U,peerDependenciesMeta:J,bin:te};this.originalPackages.set(ae.locatorHash,ae);for(let fe of A.split(SAt)){let ce=ih(fe);n<=6&&(ce=this.configuration.normalizeDependency(ce),ce=In(ce,ce.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(ce.descriptorHash,ce),this.storedResolutions.set(ce.descriptorHash,h.locatorHash)}}}else o.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,ek.default)(4),o=async(a,n)=>{if(e.has(n))return a;e.add(n);let u=new cC(n,{project:this});await r(()=>u.setup());let A=a.then(()=>{this.addWorkspace(u)});return Array.from(u.workspacesCwds).reduce(o,A)};await o(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${cs(this.configuration,e.anchoredLocator)}: ${ue.fromPortablePath(e.cwd)} conflicts with ${ue.fromPortablePath(r.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.anchoredLocator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){V.isAbsolute(e)||(e=V.resolve(this.cwd,e)),e=V.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let o of this.workspaces)V.relative(o.cwd,e).startsWith("../")||r&&r.cwd.length>=o.cwd.length||(r=o);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${cs(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Xn.protocol)){let o=e.range.slice(Xn.protocol.length);if(o!=="^"&&o!=="~"&&o!=="*"&&!xa(o))return this.tryWorkspaceByCwd(o)}let r=this.tryWorkspaceByIdent(e);return r===null||(bf(e)&&(e=t1(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${jn(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Hc(e)&&(e=r1(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${qr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let o=new Set(this.storedResolutions.values());typeof r<"u"&&!o.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,o]of this.storedResolutions)o===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[o,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(o)}for(let o of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(o,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(o.locatorHash);let n=r.get(o.locatorHash);if(n){r.delete(o.locatorHash);for(let u of n)this.deleteDescriptor(u)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,o]of e.dependencies)bf(o)&&e.dependencies.set(r,t1(o))}getDependencyMeta(e,r){let o={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(fn(e));if(!n)return o;let u=n.get(null);if(u&&Object.assign(o,u),r===null||!Jpe.default.valid(r))return o;for(let[A,p]of n)A!==null&&A===r&&Object.assign(o,p);return o}async findLocatorForLocation(e,{strict:r=!1}={}){let o=new Qi,a=this.configuration.getLinkers(),n={project:this,report:o};for(let u of a){let A=await u.findPackageLocator(e,n);if(A){if(r&&(await u.findPackageLocation(A,n)).replace(Kpe,"")!==e.replace(Kpe,""))continue;return A}}return null}async loadUserConfig(){let e=V.join(this.cwd,".pnp.cjs");await oe.existsPromise(e)&&Df(e).setup();let r=V.join(this.cwd,"yarn.config.cjs");return await oe.existsPromise(r)?Df(r):null}async preparePackage(e,{resolver:r,resolveOptions:o}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[u,A]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,A,this,n,A,{resolver:r,resolveOptions:o});if(!n1(A,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,o);n.dependencies.set(u,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),o=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new oC(a);await n.setup(this,{report:e.report});let u=e.lockfileOnly?[new Xx(a)]:[n,a],A=new Dd([new aC(a),...u]),p=new Dd([...u]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:A}:{project:this,report:e.report,resolver:A,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},I=new Map,v=new Map,x=new Map,C=new Map,R=new Map,L=new Map,U=this.topLevelWorkspace.anchoredLocator,J=new Set,te=[],ae=M4(),fe=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Xs.progressViaTitle(),async le=>{let ne=async H=>{let at=await Ky(async()=>await A.resolve(H,E),He=>`${qr(this.configuration,H)}: ${He}`);if(!i1(H,at))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${qr(this.configuration,H)} to ${qr(this.configuration,at)})`);C.set(at.locatorHash,at),!r.delete(at.locatorHash)&&!this.tryWorkspaceByLocator(at)&&o.push(at);let ke=await this.preparePackage(at,{resolver:A,resolveOptions:E}),xe=Uc([...ke.dependencies.values()].map(He=>At(He)));return te.push(xe),xe.catch(()=>{}),v.set(ke.locatorHash,ke),ke},ee=async H=>{let at=R.get(H.locatorHash);if(typeof at<"u")return at;let Re=Promise.resolve().then(()=>ne(H));return R.set(H.locatorHash,Re),Re},Ie=async(H,at)=>{let Re=await At(at);return I.set(H.descriptorHash,H),x.set(H.descriptorHash,Re.locatorHash),Re},Fe=async H=>{le.setTitle(jn(this.configuration,H));let at=this.resolutionAliases.get(H.descriptorHash);if(typeof at<"u")return Ie(H,this.storedDescriptors.get(at));let Re=A.getResolutionDependencies(H,E),ke=Object.fromEntries(await Uc(Object.entries(Re).map(async([Te,Je])=>{let qe=A.bindDescriptor(Je,U,E),b=await At(qe);return J.add(b.locatorHash),[Te,b]}))),He=(await Ky(async()=>await A.getCandidates(H,ke,E),Te=>`${jn(this.configuration,H)}: ${Te}`))[0];if(typeof He>"u")throw new zt(82,`${jn(this.configuration,H)}: No candidates found`);if(e.checkResolutions){let{locators:Te}=await p.getSatisfying(H,ke,[He],{...E,resolver:p});if(!Te.find(Je=>Je.locatorHash===He.locatorHash))throw new zt(78,`Invalid resolution ${ZI(this.configuration,H,He)}`)}return I.set(H.descriptorHash,H),x.set(H.descriptorHash,He.locatorHash),ee(He)},At=H=>{let at=L.get(H.descriptorHash);if(typeof at<"u")return at;I.set(H.descriptorHash,H);let Re=Promise.resolve().then(()=>Fe(H));return L.set(H.descriptorHash,Re),Re};for(let H of this.workspaces){let at=H.anchoredDescriptor;te.push(At(at))}for(;te.length>0;){let H=[...te];te.length=0,await Uc(H)}});let ce=sl(r.values(),le=>this.tryWorkspaceByLocator(le)?sl.skip:le);if(o.length>0||ce.length>0){let le=new Set(this.workspaces.flatMap(H=>{let at=v.get(H.anchoredLocator.locatorHash);if(!at)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(at.dependencies.values(),Re=>{let ke=x.get(Re.descriptorHash);if(!ke)throw new Error("Assertion failed: The resolution should have been registered");return ke})})),ne=H=>le.has(H.locatorHash)?"0":"1",ee=H=>ba(H),Ie=ks(o,[ne,ee]),Fe=ks(ce,[ne,ee]),At=e.report.getRecommendedLength();Ie.length>0&&e.report.reportInfo(85,`${Mt(this.configuration,"+",yt.ADDED)} ${cP(this.configuration,Ie,At)}`),Fe.length>0&&e.report.reportInfo(85,`${Mt(this.configuration,"-",yt.REMOVED)} ${cP(this.configuration,Fe,At)}`)}let me=new Set(this.resolutionAliases.values()),he=new Set(v.keys()),Be=new Set,we=new Map,g=[];kAt({project:this,accessibleLocators:Be,volatileDescriptors:me,optionalBuilds:he,peerRequirements:we,peerWarnings:g,allDescriptors:I,allResolutions:x,allPackages:v});for(let le of J)he.delete(le);for(let le of me)I.delete(le),x.delete(le);let Ee=new Set,Se=new Set;for(let le of v.values())le.conditions!=null&&(!he.has(le.locatorHash)||(qP(le,fe)||(qP(le,ae)&&e.report.reportWarningOnce(77,`${qr(this.configuration,le)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Mt(this.configuration,"supportedArchitectures",yt.SETTING)} setting`),Se.add(le.locatorHash)),Ee.add(le.locatorHash)));this.storedResolutions=x,this.storedDescriptors=I,this.storedPackages=v,this.accessibleLocators=Be,this.conditionalLocators=Ee,this.disabledLocators=Se,this.originalPackages=C,this.optionalBuilds=he,this.peerRequirements=we,this.peerWarnings=g}async fetchEverything({cache:e,report:r,fetcher:o,mode:a,persistProject:n=!0}){let u={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},A=o||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:r,cacheOptions:u},h=Array.from(new Set(ks(this.storedResolutions.values(),[C=>{let R=this.storedPackages.get(C);if(!R)throw new Error("Assertion failed: The locator should have been registered");return ba(R)}])));a==="update-lockfile"&&(h=h.filter(C=>!this.storedChecksums.has(C)));let E=!1,I=Xs.progressViaCounter(h.length);await r.reportProgress(I);let v=(0,ek.default)(PAt);if(await Uc(h.map(C=>v(async()=>{let R=this.storedPackages.get(C);if(!R)throw new Error("Assertion failed: The locator should have been registered");if(Hc(R))return;let L;try{L=await A.fetch(R,p)}catch(U){U.message=`${qr(this.configuration,R)}: ${U.message}`,r.reportExceptionOnce(U),E=U;return}L.checksum!=null?this.storedChecksums.set(R.locatorHash,L.checksum):this.storedChecksums.delete(R.locatorHash),L.releaseFs&&L.releaseFs()}).finally(()=>{I.tick()}))),E)throw E;let x=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||x){let R=(await Promise.all([...r.cacheMisses].map(async ce=>{let me=this.storedPackages.get(ce),he=this.storedChecksums.get(ce)??null,Be=e.getLocatorPath(me,he);return(await oe.statPromise(Be)).size}))).reduce((ce,me)=>ce+me,0)-(x?.size??0),L=r.cacheMisses.size,U=x?.count??0,J=`${nP(L,{zero:"No new packages",one:"A package was",more:`${Mt(this.configuration,L,yt.NUMBER)} packages were`})} added to the project`,te=`${nP(U,{zero:"none were",one:"one was",more:`${Mt(this.configuration,U,yt.NUMBER)} were`})} removed`,ae=R!==0?` (${Mt(this.configuration,R,yt.SIZE_DIFF)})`:"",fe=U>0?L>0?`${J}, and ${te}${ae}.`:`${J}, but ${te}${ae}.`:`${J}${ae}.`;r.reportInfo(13,fe)}}async linkEverything({cache:e,report:r,fetcher:o,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},u=o||this.configuration.makeFetcher(),A={checksums:this.storedChecksums,project:this,cache:e,fetcher:u,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(le=>{let ne=le.makeInstaller(h),ee=le.getCustomDataKey(),Ie=this.linkersCustomData.get(ee);return typeof Ie<"u"&&ne.attachCustomData(Ie),[le,ne]})),I=new Map,v=new Map,x=new Map,C=new Map(await Uc([...this.accessibleLocators].map(async le=>{let ne=this.storedPackages.get(le);if(!ne)throw new Error("Assertion failed: The locator should have been registered");return[le,await u.fetch(ne,A)]}))),R=[],L=new Set,U=[];for(let le of this.accessibleLocators){let ne=this.storedPackages.get(le);if(typeof ne>"u")throw new Error("Assertion failed: The locator should have been registered");let ee=C.get(ne.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The fetch result should have been registered");let Ie=[],Fe=H=>{Ie.push(H)},At=this.tryWorkspaceByLocator(ne);if(At!==null){let H=[],{scripts:at}=At.manifest;for(let ke of["preinstall","install","postinstall"])at.has(ke)&&H.push({type:0,script:ke});try{for(let[ke,xe]of E)if(ke.supportsPackage(ne,h)&&(await xe.installPackage(ne,ee,{holdFetchResult:Fe})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{Ie.length===0?ee.releaseFs?.():R.push(Uc(Ie).catch(()=>{}).then(()=>{ee.releaseFs?.()}))}let Re=V.join(ee.packageFs.getRealPath(),ee.prefixPath);v.set(ne.locatorHash,Re),!Hc(ne)&&H.length>0&&x.set(ne.locatorHash,{buildDirectives:H,buildLocations:[Re]})}else{let H=p.find(ke=>ke.supportsPackage(ne,h));if(!H)throw new zt(12,`${qr(this.configuration,ne)} isn't supported by any available linker`);let at=E.get(H);if(!at)throw new Error("Assertion failed: The installer should have been registered");let Re;try{Re=await at.installPackage(ne,ee,{holdFetchResult:Fe})}finally{Ie.length===0?ee.releaseFs?.():R.push(Uc(Ie).then(()=>{}).then(()=>{ee.releaseFs?.()}))}I.set(ne.locatorHash,H),v.set(ne.locatorHash,Re.packageLocation),Re.buildRequest&&Re.packageLocation&&(Re.buildRequest.skipped?(L.add(ne.locatorHash),this.skippedBuilds.has(ne.locatorHash)||U.push([ne,Re.buildRequest.explain])):x.set(ne.locatorHash,{buildDirectives:Re.buildRequest.directives,buildLocations:[Re.packageLocation]}))}}let J=new Map;for(let le of this.accessibleLocators){let ne=this.storedPackages.get(le);if(!ne)throw new Error("Assertion failed: The locator should have been registered");let ee=this.tryWorkspaceByLocator(ne)!==null,Ie=async(Fe,At)=>{let H=v.get(ne.locatorHash);if(typeof H>"u")throw new Error(`Assertion failed: The package (${qr(this.configuration,ne)}) should have been registered`);let at=[];for(let Re of ne.dependencies.values()){let ke=this.storedResolutions.get(Re.descriptorHash);if(typeof ke>"u")throw new Error(`Assertion failed: The resolution (${jn(this.configuration,Re)}, from ${qr(this.configuration,ne)})should have been registered`);let xe=this.storedPackages.get(ke);if(typeof xe>"u")throw new Error(`Assertion failed: The package (${ke}, resolved from ${jn(this.configuration,Re)}) should have been registered`);let He=this.tryWorkspaceByLocator(xe)===null?I.get(ke):null;if(typeof He>"u")throw new Error(`Assertion failed: The package (${ke}, resolved from ${jn(this.configuration,Re)}) should have been registered`);He===Fe||He===null?v.get(xe.locatorHash)!==null&&at.push([Re,xe]):!ee&&H!==null&&Yy(J,ke).push(H)}H!==null&&await At.attachInternalDependencies(ne,at)};if(ee)for(let[Fe,At]of E)Fe.supportsPackage(ne,h)&&await Ie(Fe,At);else{let Fe=I.get(ne.locatorHash);if(!Fe)throw new Error("Assertion failed: The linker should have been found");let At=E.get(Fe);if(!At)throw new Error("Assertion failed: The installer should have been registered");await Ie(Fe,At)}}for(let[le,ne]of J){let ee=this.storedPackages.get(le);if(!ee)throw new Error("Assertion failed: The package should have been registered");let Ie=I.get(ee.locatorHash);if(!Ie)throw new Error("Assertion failed: The linker should have been found");let Fe=E.get(Ie);if(!Fe)throw new Error("Assertion failed: The installer should have been registered");await Fe.attachExternalDependents(ee,ne)}let te=new Map;for(let[le,ne]of E){let ee=await ne.finalizeInstall();for(let Ie of ee?.records??[])Ie.buildRequest.skipped?(L.add(Ie.locator.locatorHash),this.skippedBuilds.has(Ie.locator.locatorHash)||U.push([Ie.locator,Ie.buildRequest.explain])):x.set(Ie.locator.locatorHash,{buildDirectives:Ie.buildRequest.directives,buildLocations:Ie.buildLocations});typeof ee?.customData<"u"&&te.set(le.getCustomDataKey(),ee.customData)}if(this.linkersCustomData=te,await Uc(R),a==="skip-build")return;for(let[,le]of ks(U,([ne])=>ba(ne)))le(r);let ae=new Set(this.storedPackages.keys()),fe=new Set(x.keys());for(let le of fe)ae.delete(le);let ce=(0,Zx.createHash)("sha512");ce.update(process.versions.node),await this.configuration.triggerHook(le=>le.globalHashGeneration,this,le=>{ce.update("\0"),ce.update(le)});let me=ce.digest("hex"),he=new Map,Be=le=>{let ne=he.get(le.locatorHash);if(typeof ne<"u")return ne;let ee=this.storedPackages.get(le.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The package should have been registered");let Ie=(0,Zx.createHash)("sha512");Ie.update(le.locatorHash),he.set(le.locatorHash,"");for(let Fe of ee.dependencies.values()){let At=this.storedResolutions.get(Fe.descriptorHash);if(typeof At>"u")throw new Error(`Assertion failed: The resolution (${jn(this.configuration,Fe)}) should have been registered`);let H=this.storedPackages.get(At);if(typeof H>"u")throw new Error("Assertion failed: The package should have been registered");Ie.update(Be(H))}return ne=Ie.digest("hex"),he.set(le.locatorHash,ne),ne},we=(le,ne)=>{let ee=(0,Zx.createHash)("sha512");ee.update(me),ee.update(Be(le));for(let Ie of ne)ee.update(Ie);return ee.digest("hex")},g=new Map,Ee=!1,Se=le=>{let ne=new Set([le.locatorHash]);for(let ee of ne){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");for(let Fe of Ie.dependencies.values()){let At=this.storedResolutions.get(Fe.descriptorHash);if(!At)throw new Error(`Assertion failed: The resolution (${jn(this.configuration,Fe)}) should have been registered`);if(At!==le.locatorHash&&fe.has(At))return!1;let H=this.storedPackages.get(At);if(!H)throw new Error("Assertion failed: The package should have been registered");let at=this.tryWorkspaceByLocator(H);if(at){if(at.anchoredLocator.locatorHash!==le.locatorHash&&fe.has(at.anchoredLocator.locatorHash))return!1;ne.add(at.anchoredLocator.locatorHash)}ne.add(At)}}return!0};for(;fe.size>0;){let le=fe.size,ne=[];for(let ee of fe){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");if(!Se(Ie))continue;let Fe=x.get(Ie.locatorHash);if(!Fe)throw new Error("Assertion failed: The build directive should have been registered");let At=we(Ie,Fe.buildLocations);if(this.storedBuildState.get(Ie.locatorHash)===At){g.set(Ie.locatorHash,At),fe.delete(ee);continue}Ee||(await this.persistInstallStateFile(),Ee=!0),this.storedBuildState.has(Ie.locatorHash)?r.reportInfo(8,`${qr(this.configuration,Ie)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${qr(this.configuration,Ie)} must be built because it never has been before or the last one failed`);let H=Fe.buildLocations.map(async at=>{if(!V.isAbsolute(at))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${at})`);for(let Re of Fe.buildDirectives){let ke=`# This file contains the result of Yarn building a package (${ba(Ie)}) +`;switch(Re.type){case 0:ke+=`# Script name: ${Re.script} +`;break;case 1:ke+=`# Script code: ${Re.script} +`;break}let xe=null;if(!await oe.mktempPromise(async Te=>{let Je=V.join(Te,"build.log"),{stdout:qe,stderr:b}=this.configuration.getSubprocessStreams(Je,{header:ke,prefix:qr(this.configuration,Ie),report:r}),w;try{switch(Re.type){case 0:w=await Wb(Ie,Re.script,[],{cwd:at,project:this,stdin:xe,stdout:qe,stderr:b});break;case 1:w=await EU(Ie,Re.script,[],{cwd:at,project:this,stdin:xe,stdout:qe,stderr:b});break}}catch(F){b.write(F.stack),w=1}if(qe.end(),b.end(),w===0)return!0;oe.detachTemp(Te);let P=`${qr(this.configuration,Ie)} couldn't be built successfully (exit code ${Mt(this.configuration,w,yt.NUMBER)}, logs can be found here: ${Mt(this.configuration,Je,yt.PATH)})`,y=this.optionalBuilds.has(Ie.locatorHash);return y?r.reportInfo(9,P):r.reportError(9,P),Kce&&r.reportFold(ue.fromPortablePath(Je),oe.readFileSync(Je,"utf8")),y}))return!1}return!0});ne.push(...H,Promise.allSettled(H).then(at=>{fe.delete(ee),at.every(Re=>Re.status==="fulfilled"&&Re.value===!0)&&g.set(Ie.locatorHash,At)}))}if(await Uc(ne),le===fe.size){let ee=Array.from(fe).map(Ie=>{let Fe=this.storedPackages.get(Ie);if(!Fe)throw new Error("Assertion failed: The package should have been registered");return qr(this.configuration,Fe)}).join(", ");r.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ee})`);break}}this.storedBuildState=g,this.skippedBuilds=L}async installWithNewReport(e,r){return(await Nt.start({configuration:this.configuration,json:e.json,stdout:e.stdout,forceSectionAlignment:!0,includeLogs:!e.json&&!e.quiet,includeVersion:!0},async a=>{await this.install({...r,report:a})})).exitCode()}async install(e){let r=this.configuration.get("nodeLinker");Ke.telemetry?.reportInstall(r);let o=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(E=>E.validateProject,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),o=!0}})}),o)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,I]of E)for(let v of I)v.status="inactive";let n=V.join(this.cwd,dr.lockfile),u=null;if(e.immutable)try{u=await oe.readFilePromise(n,"utf8")}catch(E){throw E.code==="ENOENT"?new zt(28,"The lockfile would have been created by this install, which is explicitly forbidden."):E}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{QAt(this,e.report);for(let[,E]of a)for(let[,I]of E)for(let v of I)if(v.userProvided){let x=Mt(this.configuration,v,yt.PACKAGE_EXTENSION);switch(v.status){case"inactive":e.report.reportWarning(68,`${x}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${x}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(u!==null){let E=_g(u,this.generateLockfile());if(E!==u){let I=Ape(n,n,u,E,void 0,void 0,{maxEditLength:100});if(I){e.report.reportSeparator();for(let v of I.hunks){e.report.reportInfo(null,`@@ -${v.oldStart},${v.oldLines} +${v.newStart},${v.newLines} @@`);for(let x of v.lines)x.startsWith("+")?e.report.reportError(28,Mt(this.configuration,x,yt.ADDED)):x.startsWith("-")?e.report.reportError(28,Mt(this.configuration,x,yt.REMOVED)):e.report.reportInfo(null,Mt(this.configuration,x,"grey"))}e.report.reportSeparator()}throw new zt(28,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let E of a.values())for(let[,I]of E)for(let v of I)v.userProvided&&v.status==="active"&&Ke.telemetry?.reportPackageExtension(Ed(v,yt.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let A=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(A.map(async E=>LP(E,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${Mt(this.configuration,"mode=update-lockfile",yt.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(A.map(async I=>LP(I,{cwd:this.cwd})));for(let I=0;I{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,u]of this.storedResolutions.entries()){let A=e.get(u);A||e.set(u,A=new Set),A.add(n)}let r={},{cacheKey:o}=Lr.getCacheKey(this.configuration);r.__metadata={version:tk,cacheKey:o};for(let[n,u]of e.entries()){let A=this.originalPackages.get(n);if(!A)continue;let p=[];for(let I of u){let v=this.storedDescriptors.get(I);if(!v)throw new Error("Assertion failed: The descriptor should have been registered");p.push(v)}let h=p.map(I=>Pa(I)).sort().join(", "),E=new Ot;E.version=A.linkType==="HARD"?A.version:"0.0.0-use.local",E.languageName=A.languageName,E.dependencies=new Map(A.dependencies),E.peerDependencies=new Map(A.peerDependencies),E.dependenciesMeta=new Map(A.dependenciesMeta),E.peerDependenciesMeta=new Map(A.peerDependenciesMeta),E.bin=new Map(A.bin),r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:A.linkType.toLowerCase(),resolution:ba(A),checksum:this.storedChecksums.get(A.locatorHash),conditions:A.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. `,`# Manual changes might be lost - proceed with caution! `].join("")} -`+Ba(r)}async persistLockfile(){let e=K.join(this.cwd,dr.lockfile),r="";try{r=await oe.readFilePromise(e,"utf8")}catch{}let o=this.generateLockfile(),a=Ug(r,o);a!==r&&(await oe.writeFilePromise(e,a),this.lockFileChecksum=zpe(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let u of Object.values(k_))e.push(...u);let r=(0,tk.default)(this,e),o=Q_.default.serialize(r),a=zs(o);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await oe.mkdirPromise(K.dirname(n),{recursive:!0}),await oe.writeFilePromise(n,await TAt(o)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:o=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let u=await RAt(await oe.readFilePromise(a));n=Q_.default.deserialize(u),this.installStateChecksum=zs(u)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),o&&Object.assign(this,(0,tk.default)(n,k_.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,(0,tk.default)(n,k_.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Qi}),await this.persistInstallStateFile()}async persist(){let e=(0,rk.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(r=>e(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let o=new Set([".gitignore"]);if(!IO(e.cwd,this.cwd)||!await oe.existsPromise(e.cwd))return null;let a=[];for(let u of await oe.readdirPromise(e.cwd)){if(o.has(u))continue;let A=K.resolve(e.cwd,u);e.markedFiles.has(A)||(e.immutable?r.reportError(56,`${Ot(this.configuration,K.basename(A),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(oe.lstatPromise(A).then(async p=>(await oe.removePromise(A),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((u,A)=>u+A,0)}}}});function MAt(t){let o=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),u=n+a,A=t.state.lastTips??o*864e5,p=A+864e5+8*36e5-t.timeZone,h=u<=t.timeNow,E=p<=t.timeNow,I=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(I={},I.lastUpdate=h?t.timeNow:n,I.lastTips=A,I.blocks=h?{}:t.state.blocks,I.displayedTips=t.state.displayedTips),{nextState:I,triggerUpdate:h,triggerTips:E,nextTips:E?o*864e5:A}}var cC,$pe=Et(()=>{Pt();N1();rh();Bx();jl();kf();cC=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let o=this.getRegistryPath();this.isNew=!oe.existsSync(o),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),o=A=>A&&tn?bf(tn,A):!1,a=e.map((A,p)=>p).filter(A=>e[A]&&o(e[A]?.selector));if(a.length===0)return null;let n=a.filter(A=>!r.has(A));if(n.length===0){let A=Math.floor(a.length*.2);this.displayedTips=A>0?this.displayedTips.slice(-A):[],n=a.filter(p=>!r.has(p))}let u=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(u),this.commitTips(),e[u]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){dd(this.values,e).add(r)}reportEnumerator(e,r){dd(this.enumerators,e).add(zs(r))}reportHit(e,r="*"){let o=Yy(this.hits,e),a=ol(o,r,()=>0);o.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return K.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),o;try{o=oe.readJsonSync(r)}catch{o={}}let{nextState:a,triggerUpdate:n,triggerTips:u,nextTips:A}=MAt({state:o,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=A,this.displayedTips=o.displayedTips??[],a!==null)try{oe.mkdirSync(K.dirname(r),{recursive:!0}),oe.writeJsonSync(r,a)}catch{return!1}if(u&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=o.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=I=>U4(h,I,{configuration:this.configuration}).catch(()=>{});for(let[I,v]of Object.entries(o.blocks??{})){if(Object.keys(v).length===0)continue;let b=v;b.userId=I,b.reportType="primary";for(let L of Object.keys(b.enumerators??{}))b.enumerators[L]=b.enumerators[L].length;E(b);let C=new Map,T=20;for(let[L,U]of Object.entries(b.values))U.length>0&&C.set(L,U.slice(0,T));for(;C.size>0;){let L={};L.userId=I,L.reportType="secondary",L.metrics={};for(let[U,J]of C)L.metrics[U]=J.shift(),J.length===0&&C.delete(U);E(L)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=oe.readJsonSync(e)}catch{r={}}let o=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[o]=a[o]??{};for(let u of this.hits.keys()){let A=n.hits=n.hits??{},p=A[u]=A[u]??{};for(let[h,E]of this.hits.get(u))p[h]=(p[h]??0)+E}for(let u of["values","enumerators"])for(let A of this[u].keys()){let p=n[u]=n[u]??{};p[A]=[...new Set([...p[A]??[],...this[u].get(A)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),oe.mkdirSync(K.dirname(e),{recursive:!0}),oe.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var s2={};Kt(s2,{BuildDirectiveType:()=>zb,CACHE_CHECKPOINT:()=>A_,CACHE_VERSION:()=>Jb,Cache:()=>Lr,Configuration:()=>Ve,DEFAULT_RC_FILENAME:()=>W4,FormatType:()=>Qle,InstallMode:()=>pl,LEGACY_PLUGINS:()=>B1,LOCKFILE_VERSION:()=>nk,LegacyMigrationResolver:()=>sC,LightReport:()=>AA,LinkType:()=>Jy,LockfileResolver:()=>oC,Manifest:()=>Mt,MessageName:()=>wr,MultiFetcher:()=>pE,PackageExtensionStatus:()=>DL,PackageExtensionType:()=>vL,PeerWarningType:()=>ik,Project:()=>St,Report:()=>Xs,ReportError:()=>zt,SettingsType:()=>v1,StreamReport:()=>Nt,TAG_REGEXP:()=>QE,TelemetryManager:()=>cC,ThrowReport:()=>Qi,VirtualFetcher:()=>hE,WindowsLinkType:()=>kx,Workspace:()=>lC,WorkspaceFetcher:()=>dE,WorkspaceResolver:()=>Xn,YarnVersion:()=>tn,execUtils:()=>Ur,folderUtils:()=>WS,formatUtils:()=>de,hashUtils:()=>wn,httpUtils:()=>rn,miscUtils:()=>je,nodeUtils:()=>Ji,parseMessageName:()=>fP,reportOptionDeprecations:()=>NE,scriptUtils:()=>un,semverUtils:()=>kr,stringifyMessageName:()=>Wu,structUtils:()=>W,tgzUtils:()=>Xi,treeUtils:()=>$s});var Ye=Et(()=>{Px();VS();ql();rh();Bx();jl();Dx();DU();kf();xo();$fe();ope();f_();D1();D1();lpe();p_();cpe();h_();AE();pP();AO();Zpe();Yl();L1();$pe();x_();pO();hO();Bd();b_();N1();Ine()});var she=_((K_t,a2)=>{"use strict";var UAt=process.env.TERM_PROGRAM==="Hyper",_At=process.platform==="win32",rhe=process.platform==="linux",R_={ballotDisabled:"\u2612",ballotOff:"\u2610",ballotOn:"\u2611",bullet:"\u2022",bulletWhite:"\u25E6",fullBlock:"\u2588",heart:"\u2764",identicalTo:"\u2261",line:"\u2500",mark:"\u203B",middot:"\xB7",minus:"\uFF0D",multiplication:"\xD7",obelus:"\xF7",pencilDownRight:"\u270E",pencilRight:"\u270F",pencilUpRight:"\u2710",percent:"%",pilcrow2:"\u2761",pilcrow:"\xB6",plusMinus:"\xB1",section:"\xA7",starsOff:"\u2606",starsOn:"\u2605",upDownArrow:"\u2195"},nhe=Object.assign({},R_,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),ihe=Object.assign({},R_,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:rhe?"\u25B8":"\u276F",pointerSmall:rhe?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});a2.exports=_At&&!UAt?nhe:ihe;Reflect.defineProperty(a2.exports,"common",{enumerable:!1,value:R_});Reflect.defineProperty(a2.exports,"windows",{enumerable:!1,value:nhe});Reflect.defineProperty(a2.exports,"other",{enumerable:!1,value:ihe})});var Vc=_((J_t,N_)=>{"use strict";var HAt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),jAt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,ohe=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let u=n.open=`\x1B[${n.codes[0]}m`,A=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,E)=>{h.includes(A)&&(h=h.replace(p,A+u));let I=u+h+A;return E?I.replace(/\r*\n/g,`${A}$&${u}`):I},n},r=(n,u,A)=>typeof n=="function"?n(u):n.wrap(u,A),o=(n,u)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let A=""+n,p=A.includes(` -`),h=u.length;for(h>0&&u.includes("unstyle")&&(u=[...new Set(["unstyle",...u])].reverse());h-- >0;)A=r(t.styles[u[h]],A,p);return A},a=(n,u,A)=>{t.styles[n]=e({name:n,codes:u}),(t.keys[A]||(t.keys[A]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>o(E,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=jAt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,u)=>{let A=typeof u=="string"?t[u]:u;if(typeof A!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");A.stack||(Reflect.defineProperty(A,"name",{value:n}),t.styles[n]=A,A.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>o(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(A.stack):A.stack,p}})},t.theme=n=>{if(!HAt(n))throw new TypeError("Expected theme to be an object");for(let u of Object.keys(n))t.alias(u,n[u]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=she(),t.define=a,t};N_.exports=ohe();N_.exports.create=ohe});var No=_(nn=>{"use strict";var qAt=Object.prototype.toString,rc=Vc(),ahe=!1,L_=[],lhe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};nn.longest=(t,e)=>t.reduce((r,o)=>Math.max(r,e?o[e].length:o.length),0);nn.hasColor=t=>!!t&&rc.hasColor(t);var ok=nn.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);nn.nativeType=t=>qAt.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");nn.isAsyncFn=t=>nn.nativeType(t)==="asyncfunction";nn.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";nn.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;nn.scrollDown=(t=[])=>[...t.slice(1),t[0]];nn.scrollUp=(t=[])=>[t.pop(),...t];nn.reorder=(t=[])=>{let e=t.slice();return e.sort((r,o)=>r.index>o.index?1:r.index{let o=t.length,a=r===o?0:r<0?o-1:r,n=t[e];t[e]=t[a],t[a]=n};nn.width=(t,e=80)=>{let r=t&&t.columns?t.columns:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[0]),process.platform==="win32"?r-1:r};nn.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};nn.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:o=` -`+r,width:a=80}=e,n=(o+r).match(/[^\S\n]/g)||[];a-=n.length;let u=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,A=t.trim(),p=new RegExp(u,"g"),h=A.match(p)||[];return h=h.map(E=>E.replace(/\n$/,"")),e.padEnd&&(h=h.map(E=>E.padEnd(a," "))),e.padStart&&(h=h.map(E=>E.padStart(a," "))),r+h.join(o)};nn.unmute=t=>{let e=t.stack.find(o=>rc.keys.color.includes(o));return e?rc[e]:t.stack.find(o=>o.slice(2)==="bg")?rc[e.slice(2)]:o=>o};nn.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";nn.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o));if(e){let o=rc["bg"+nn.pascal(e)];return o?o.black:t}let r=t.stack.find(o=>o.slice(0,2)==="bg");return r?rc[r.slice(2).toLowerCase()]||t:rc.none};nn.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o)),r=t.stack.find(o=>o.slice(0,2)==="bg");if(e&&!r)return rc[lhe[e]||e];if(r){let o=r.slice(2).toLowerCase(),a=lhe[o];return a&&rc["bg"+nn.pascal(a)]||t}return rc.none};nn.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),o=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+o};nn.set=(t={},e="",r)=>e.split(".").reduce((o,a,n,u)=>{let A=u.length-1>n?o[a]||{}:r;return!nn.isObject(A)&&n{let o=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return o??r};nn.mixin=(t,e)=>{if(!ok(t))return e;if(!ok(e))return t;for(let r of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(o.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&ok(o.value)){let a=Object.getOwnPropertyDescriptor(t,r);ok(a.value)?t[r]=nn.merge({},t[r],e[r]):Reflect.defineProperty(t,r,o)}else Reflect.defineProperty(t,r,o);else Reflect.defineProperty(t,r,o)}return t};nn.merge=(...t)=>{let e={};for(let r of t)nn.mixin(e,r);return e};nn.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let o of Object.keys(r)){let a=r[o];typeof a=="function"?nn.define(t,o,a.bind(e)):nn.define(t,o,a)}};nn.onExit=t=>{let e=(r,o)=>{ahe||(ahe=!0,L_.forEach(a=>a()),r===!0&&process.exit(128+o))};L_.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),L_.push(t)};nn.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};nn.defineExport=(t,e,r)=>{let o;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){o=a},get(){return o?o():r()}})}});var che=_(pC=>{"use strict";pC.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"};pC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};pC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};pC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};pC.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}});var fhe=_((Z_t,Ahe)=>{"use strict";var uhe=Be("readline"),GAt=che(),YAt=/^(?:\x1b)([a-zA-Z0-9])$/,WAt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,VAt={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};function KAt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function JAt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var ak=(t="",e={})=>{let r,o={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t,...e};if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=o.sequence||""),o.sequence=o.sequence||t||o.name,t==="\r")o.raw=void 0,o.name="return";else if(t===` -`)o.name="enter";else if(t===" ")o.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")o.name="backspace",o.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")o.name="escape",o.meta=t.length===2;else if(t===" "||t==="\x1B ")o.name="space",o.meta=t.length===2;else if(t<="")o.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),o.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")o.name="number";else if(t.length===1&&t>="a"&&t<="z")o.name=t;else if(t.length===1&&t>="A"&&t<="Z")o.name=t.toLowerCase(),o.shift=!0;else if(r=YAt.exec(t))o.meta=!0,o.shift=/^[A-Z]$/.test(r[1]);else if(r=WAt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(o.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),u=(r[3]||r[5]||1)-1;o.ctrl=!!(u&4),o.meta=!!(u&10),o.shift=!!(u&1),o.code=n,o.name=VAt[n],o.shift=KAt(n)||o.shift,o.ctrl=JAt(n)||o.ctrl}return o};ak.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let o=uhe.createInterface({terminal:!0,input:r});uhe.emitKeypressEvents(r,o);let a=(A,p)=>e(A,ak(A,p),o),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),o.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),o.pause(),o.close()}};ak.action=(t,e,r)=>{let o={...GAt,...r};return e.ctrl?(e.action=o.ctrl[e.name],e):e.option&&o.option?(e.action=o.option[e.name],e):e.shift?(e.action=o.shift[e.name],e):(e.action=o.keys[e.name],e)};Ahe.exports=ak});var hhe=_(($_t,phe)=>{"use strict";phe.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let o=e[r];typeof o=="number"&&(o={interval:o}),zAt(t,r,o)}};function zAt(t,e,r={}){let o=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;o.frames=r.frames||[],o.loading=!0;let n=setInterval(()=>{o.ms=Date.now()-o.start,o.tick++,t.render()},a);return o.stop=()=>{o.loading=!1,clearInterval(n)},Reflect.defineProperty(o,"interval",{value:n}),t.once("close",()=>o.stop()),o.stop}});var dhe=_((e8t,ghe)=>{"use strict";var{define:XAt,width:ZAt}=No(),M_=class{constructor(e){let r=e.options;XAt(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=ZAt(r.stdout||process.stdout),Object.assign(this,r),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let r=this._color||e[this.status];return typeof r=="function"?r:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading=="boolean"?this._loading:this.loadingChoices?"choices":!1}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}};ghe.exports=M_});var yhe=_((t8t,mhe)=>{"use strict";var O_=No(),eo=Vc(),U_={default:eo.noop,noop:eo.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||O_.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||O_.complement(this.primary)},primary:eo.cyan,success:eo.green,danger:eo.magenta,strong:eo.bold,warning:eo.yellow,muted:eo.dim,disabled:eo.gray,dark:eo.dim.gray,underline:eo.underline,set info(t){this._info=t},get info(){return this._info||this.primary},set em(t){this._em=t},get em(){return this._em||this.primary.underline},set heading(t){this._heading=t},get heading(){return this._heading||this.muted.underline},set pending(t){this._pending=t},get pending(){return this._pending||this.primary},set submitted(t){this._submitted=t},get submitted(){return this._submitted||this.success},set cancelled(t){this._cancelled=t},get cancelled(){return this._cancelled||this.danger},set typing(t){this._typing=t},get typing(){return this._typing||this.dim},set placeholder(t){this._placeholder=t},get placeholder(){return this._placeholder||this.primary.dim},set highlight(t){this._highlight=t},get highlight(){return this._highlight||this.inverse}};U_.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(eo.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(eo.visible=t.styles.visible);let e=O_.merge({},U_,t.styles);delete e.merge;for(let r of Object.keys(eo))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});for(let r of Object.keys(eo.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});return e};mhe.exports=U_});var Che=_((r8t,Ehe)=>{"use strict";var __=process.platform==="win32",Vf=Vc(),$At=No(),H_={...Vf.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:Vf.symbols.check,leftAngle:"\u2039",mark:"\u203B",minus:"\u2212",multiplication:"\xD7",obelus:"\xF7",percent:"%",pilcrow:"\xB6",pilcrow2:"\u2761",pencilUpRight:"\u2710",pencilDownRight:"\u270E",pencilRight:"\u270F",plus:"+",plusMinus:"\xB1",pointRight:"\u261E",rightAngle:"\u203A",section:"\xA7",hexagon:{off:"\u2B21",on:"\u2B22",disabled:"\u2B22"},ballot:{on:"\u2611",off:"\u2610",disabled:"\u2612"},stars:{on:"\u2605",off:"\u2606",disabled:"\u2606"},folder:{on:"\u25BC",off:"\u25B6",disabled:"\u25B6"},prefix:{pending:Vf.symbols.question,submitted:Vf.symbols.check,cancelled:Vf.symbols.cross},separator:{pending:Vf.symbols.pointerSmall,submitted:Vf.symbols.middot,cancelled:Vf.symbols.middot},radio:{off:__?"( )":"\u25EF",on:__?"(*)":"\u25C9",disabled:__?"(|)":"\u24BE"},numbers:["\u24EA","\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246A","\u246B","\u246C","\u246D","\u246E","\u246F","\u2470","\u2471","\u2472","\u2473","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325A","\u325B","\u325C","\u325D","\u325E","\u325F","\u32B1","\u32B2","\u32B3","\u32B4","\u32B5","\u32B6","\u32B7","\u32B8","\u32B9","\u32BA","\u32BB","\u32BC","\u32BD","\u32BE","\u32BF"]};H_.merge=t=>{let e=$At.merge({},Vf.symbols,H_,t.symbols);return delete e.merge,e};Ehe.exports=H_});var Ihe=_((n8t,whe)=>{"use strict";var eft=yhe(),tft=Che(),rft=No();whe.exports=t=>{t.options=rft.merge({},t.options.theme,t.options),t.symbols=tft.merge(t.options),t.styles=eft.merge(t.options)}});var She=_((Dhe,Phe)=>{"use strict";var Bhe=process.env.TERM_PROGRAM==="Apple_Terminal",nft=Vc(),j_=No(),Kc=Phe.exports=Dhe,Di="\x1B[",vhe="\x07",q_=!1,Ph=Kc.code={bell:vhe,beep:vhe,beginning:`${Di}G`,down:`${Di}J`,esc:Di,getPosition:`${Di}6n`,hide:`${Di}?25l`,line:`${Di}2K`,lineEnd:`${Di}K`,lineStart:`${Di}1K`,restorePosition:Di+(Bhe?"8":"u"),savePosition:Di+(Bhe?"7":"s"),screen:`${Di}2J`,show:`${Di}?25h`,up:`${Di}1J`},qd=Kc.cursor={get hidden(){return q_},hide(){return q_=!0,Ph.hide},show(){return q_=!1,Ph.show},forward:(t=1)=>`${Di}${t}C`,backward:(t=1)=>`${Di}${t}D`,nextLine:(t=1)=>`${Di}E`.repeat(t),prevLine:(t=1)=>`${Di}F`.repeat(t),up:(t=1)=>t?`${Di}${t}A`:"",down:(t=1)=>t?`${Di}${t}B`:"",right:(t=1)=>t?`${Di}${t}C`:"",left:(t=1)=>t?`${Di}${t}D`:"",to(t,e){return e?`${Di}${e+1};${t+1}H`:`${Di}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?qd.left(-t):t>0?qd.right(t):"",r+=e<0?qd.up(-e):e>0?qd.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:o,input:a,prompt:n,size:u,value:A}=t;if(o=j_.isPrimitive(o)?String(o):"",a=j_.isPrimitive(a)?String(a):"",A=j_.isPrimitive(A)?String(A):"",u){let p=Kc.cursor.up(u)+Kc.cursor.to(n.length),h=a.length-r;return h>0&&(p+=Kc.cursor.left(h)),p}if(A||e){let p=!a&&!!o?-o.length:-a.length+r;return e&&(p-=e.length),a===""&&o&&!n.includes(o)&&(p+=o.length),Kc.cursor.move(p)}}},G_=Kc.erase={screen:Ph.screen,up:Ph.up,down:Ph.down,line:Ph.line,lineEnd:Ph.lineEnd,lineStart:Ph.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return G_.line+qd.to(0);let r=n=>[...nft.unstyle(n)].length,o=t.split(/\r?\n/),a=0;for(let n of o)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(G_.line+qd.prevLine()).repeat(a-1)+G_.line+qd.to(0)}});var hC=_((i8t,bhe)=>{"use strict";var ift=Be("events"),xhe=Vc(),Y_=fhe(),sft=hhe(),oft=dhe(),aft=Ihe(),Ta=No(),Gd=She(),l2=class extends ift{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,aft(this),sft(this),this.state=new oft(this),this.initial=[e.initial,e.default].find(r=>r!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=cft(this.options.margin),this.setMaxListeners(0),lft(this)}async keypress(e,r={}){this.keypressed=!0;let o=Y_.action(e,Y_(e,r),this.options.actions);this.state.keypress=o,this.emit("keypress",e,o),this.emit("state",this.state.clone());let a=this.options[o.action]||this[o.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,o);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Gd.code.beep)}cursorHide(){this.stdout.write(Gd.cursor.hide()),Ta.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Gd.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let r=this.state.buffer;this.state.buffer="",!(!r&&!e||this.options.show===!1)&&this.stdout.write(Gd.cursor.down(e)+Gd.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:o}=this.sections(),{cursor:a,initial:n="",input:u="",value:A=""}=this,p=this.state.size=o.length,h={after:r,cursor:a,initial:n,input:u,prompt:e,size:p,value:A},E=Gd.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:o}=this.state;o=xhe.unstyle(o);let a=xhe.unstyle(e),n=a.indexOf(o),u=a.slice(0,n),p=a.slice(n).split(` -`),h=p[0],E=p[p.length-1],v=(o+(r?" "+r:"")).length,b=ve(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let o=new Set([".gitignore"]);if(!CM(e.cwd,this.cwd)||!await oe.existsPromise(e.cwd))return null;let a=[];for(let u of await oe.readdirPromise(e.cwd)){if(o.has(u))continue;let A=V.resolve(e.cwd,u);e.markedFiles.has(A)||(e.immutable?r.reportError(56,`${Mt(this.configuration,V.basename(A),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(oe.lstatPromise(A).then(async p=>(await oe.removePromise(A),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((u,A)=>u+A,0)}}}});function FAt(t){let o=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),u=n+a,A=t.state.lastTips??o*864e5,p=A+864e5+8*36e5-t.timeZone,h=u<=t.timeNow,E=p<=t.timeNow,I=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(I={},I.lastUpdate=h?t.timeNow:n,I.lastTips=A,I.blocks=h?{}:t.state.blocks,I.displayedTips=t.state.displayedTips),{nextState:I,triggerUpdate:h,triggerTips:E,nextTips:E?o*864e5:A}}var uC,Xpe=Et(()=>{St();L1();nh();Ib();ql();Qf();uC=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let o=this.getRegistryPath();this.isNew=!oe.existsSync(o),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),o=A=>A&&rn?kf(rn,A):!1,a=e.map((A,p)=>p).filter(A=>e[A]&&o(e[A]?.selector));if(a.length===0)return null;let n=a.filter(A=>!r.has(A));if(n.length===0){let A=Math.floor(a.length*.2);this.displayedTips=A>0?this.displayedTips.slice(-A):[],n=a.filter(p=>!r.has(p))}let u=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(u),this.commitTips(),e[u]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){md(this.values,e).add(r)}reportEnumerator(e,r){md(this.enumerators,e).add(zs(r))}reportHit(e,r="*"){let o=Wy(this.hits,e),a=ol(o,r,()=>0);o.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return V.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),o;try{o=oe.readJsonSync(r)}catch{o={}}let{nextState:a,triggerUpdate:n,triggerTips:u,nextTips:A}=FAt({state:o,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=A,this.displayedTips=o.displayedTips??[],a!==null)try{oe.mkdirSync(V.dirname(r),{recursive:!0}),oe.writeJsonSync(r,a)}catch{return!1}if(u&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=o.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=I=>O4(h,I,{configuration:this.configuration}).catch(()=>{});for(let[I,v]of Object.entries(o.blocks??{})){if(Object.keys(v).length===0)continue;let x=v;x.userId=I,x.reportType="primary";for(let L of Object.keys(x.enumerators??{}))x.enumerators[L]=x.enumerators[L].length;E(x);let C=new Map,R=20;for(let[L,U]of Object.entries(x.values))U.length>0&&C.set(L,U.slice(0,R));for(;C.size>0;){let L={};L.userId=I,L.reportType="secondary",L.metrics={};for(let[U,J]of C)L.metrics[U]=J.shift(),J.length===0&&C.delete(U);E(L)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=oe.readJsonSync(e)}catch{r={}}let o=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[o]=a[o]??{};for(let u of this.hits.keys()){let A=n.hits=n.hits??{},p=A[u]=A[u]??{};for(let[h,E]of this.hits.get(u))p[h]=(p[h]??0)+E}for(let u of["values","enumerators"])for(let A of this[u].keys()){let p=n[u]=n[u]??{};p[A]=[...new Set([...p[A]??[],...this[u].get(A)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),oe.mkdirSync(V.dirname(e),{recursive:!0}),oe.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var o2={};Vt(o2,{BuildDirectiveType:()=>Vx,CACHE_CHECKPOINT:()=>c_,CACHE_VERSION:()=>Kx,Cache:()=>Lr,Configuration:()=>Ke,DEFAULT_RC_FILENAME:()=>G4,FormatType:()=>xle,InstallMode:()=>pl,LEGACY_PLUGINS:()=>v1,LOCKFILE_VERSION:()=>tk,LegacyMigrationResolver:()=>oC,LightReport:()=>AA,LinkType:()=>zy,LockfileResolver:()=>aC,Manifest:()=>Ot,MessageName:()=>wr,MultiFetcher:()=>hE,PackageExtensionStatus:()=>BL,PackageExtensionType:()=>IL,PeerWarningType:()=>rk,Project:()=>Pt,Report:()=>Xs,ReportError:()=>zt,SettingsType:()=>D1,StreamReport:()=>Nt,TAG_REGEXP:()=>FE,TelemetryManager:()=>uC,ThrowReport:()=>Qi,VirtualFetcher:()=>gE,WindowsLinkType:()=>xb,Workspace:()=>cC,WorkspaceFetcher:()=>mE,WorkspaceResolver:()=>Xn,YarnVersion:()=>rn,execUtils:()=>Ur,folderUtils:()=>YP,formatUtils:()=>de,hashUtils:()=>wn,httpUtils:()=>nn,miscUtils:()=>_e,nodeUtils:()=>Ji,parseMessageName:()=>AS,reportOptionDeprecations:()=>LE,scriptUtils:()=>un,semverUtils:()=>kr,stringifyMessageName:()=>Wu,structUtils:()=>W,tgzUtils:()=>Xi,treeUtils:()=>$s});var Ye=Et(()=>{Db();WP();jl();nh();Ib();ql();vb();BU();Qf();bo();Xfe();ipe();u_();S1();S1();ope();A_();ape();f_();fE();fS();cM();zpe();Yl();O1();Xpe();S_();AM();fM();vd();P_();L1();Cne()});var nhe=_((K_t,l2)=>{"use strict";var TAt=process.env.TERM_PROGRAM==="Hyper",NAt=process.platform==="win32",ehe=process.platform==="linux",F_={ballotDisabled:"\u2612",ballotOff:"\u2610",ballotOn:"\u2611",bullet:"\u2022",bulletWhite:"\u25E6",fullBlock:"\u2588",heart:"\u2764",identicalTo:"\u2261",line:"\u2500",mark:"\u203B",middot:"\xB7",minus:"\uFF0D",multiplication:"\xD7",obelus:"\xF7",pencilDownRight:"\u270E",pencilRight:"\u270F",pencilUpRight:"\u2710",percent:"%",pilcrow2:"\u2761",pilcrow:"\xB6",plusMinus:"\xB1",section:"\xA7",starsOff:"\u2606",starsOn:"\u2605",upDownArrow:"\u2195"},the=Object.assign({},F_,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),rhe=Object.assign({},F_,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:ehe?"\u25B8":"\u276F",pointerSmall:ehe?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});l2.exports=NAt&&!TAt?the:rhe;Reflect.defineProperty(l2.exports,"common",{enumerable:!1,value:F_});Reflect.defineProperty(l2.exports,"windows",{enumerable:!1,value:the});Reflect.defineProperty(l2.exports,"other",{enumerable:!1,value:rhe})});var Kc=_((V_t,R_)=>{"use strict";var LAt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),OAt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,ihe=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let u=n.open=`\x1B[${n.codes[0]}m`,A=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,E)=>{h.includes(A)&&(h=h.replace(p,A+u));let I=u+h+A;return E?I.replace(/\r*\n/g,`${A}$&${u}`):I},n},r=(n,u,A)=>typeof n=="function"?n(u):n.wrap(u,A),o=(n,u)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let A=""+n,p=A.includes(` +`),h=u.length;for(h>0&&u.includes("unstyle")&&(u=[...new Set(["unstyle",...u])].reverse());h-- >0;)A=r(t.styles[u[h]],A,p);return A},a=(n,u,A)=>{t.styles[n]=e({name:n,codes:u}),(t.keys[A]||(t.keys[A]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>o(E,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=OAt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,u)=>{let A=typeof u=="string"?t[u]:u;if(typeof A!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");A.stack||(Reflect.defineProperty(A,"name",{value:n}),t.styles[n]=A,A.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>o(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(A.stack):A.stack,p}})},t.theme=n=>{if(!LAt(n))throw new TypeError("Expected theme to be an object");for(let u of Object.keys(n))t.alias(u,n[u]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=nhe(),t.define=a,t};R_.exports=ihe();R_.exports.create=ihe});var No=_(sn=>{"use strict";var MAt=Object.prototype.toString,rc=Kc(),she=!1,T_=[],ohe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};sn.longest=(t,e)=>t.reduce((r,o)=>Math.max(r,e?o[e].length:o.length),0);sn.hasColor=t=>!!t&&rc.hasColor(t);var ik=sn.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);sn.nativeType=t=>MAt.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");sn.isAsyncFn=t=>sn.nativeType(t)==="asyncfunction";sn.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";sn.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;sn.scrollDown=(t=[])=>[...t.slice(1),t[0]];sn.scrollUp=(t=[])=>[t.pop(),...t];sn.reorder=(t=[])=>{let e=t.slice();return e.sort((r,o)=>r.index>o.index?1:r.index{let o=t.length,a=r===o?0:r<0?o-1:r,n=t[e];t[e]=t[a],t[a]=n};sn.width=(t,e=80)=>{let r=t&&t.columns?t.columns:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[0]),process.platform==="win32"?r-1:r};sn.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};sn.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:o=` +`+r,width:a=80}=e,n=(o+r).match(/[^\S\n]/g)||[];a-=n.length;let u=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,A=t.trim(),p=new RegExp(u,"g"),h=A.match(p)||[];return h=h.map(E=>E.replace(/\n$/,"")),e.padEnd&&(h=h.map(E=>E.padEnd(a," "))),e.padStart&&(h=h.map(E=>E.padStart(a," "))),r+h.join(o)};sn.unmute=t=>{let e=t.stack.find(o=>rc.keys.color.includes(o));return e?rc[e]:t.stack.find(o=>o.slice(2)==="bg")?rc[e.slice(2)]:o=>o};sn.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";sn.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o));if(e){let o=rc["bg"+sn.pascal(e)];return o?o.black:t}let r=t.stack.find(o=>o.slice(0,2)==="bg");return r?rc[r.slice(2).toLowerCase()]||t:rc.none};sn.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o)),r=t.stack.find(o=>o.slice(0,2)==="bg");if(e&&!r)return rc[ohe[e]||e];if(r){let o=r.slice(2).toLowerCase(),a=ohe[o];return a&&rc["bg"+sn.pascal(a)]||t}return rc.none};sn.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),o=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+o};sn.set=(t={},e="",r)=>e.split(".").reduce((o,a,n,u)=>{let A=u.length-1>n?o[a]||{}:r;return!sn.isObject(A)&&n{let o=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return o??r};sn.mixin=(t,e)=>{if(!ik(t))return e;if(!ik(e))return t;for(let r of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(o.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&ik(o.value)){let a=Object.getOwnPropertyDescriptor(t,r);ik(a.value)?t[r]=sn.merge({},t[r],e[r]):Reflect.defineProperty(t,r,o)}else Reflect.defineProperty(t,r,o);else Reflect.defineProperty(t,r,o)}return t};sn.merge=(...t)=>{let e={};for(let r of t)sn.mixin(e,r);return e};sn.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let o of Object.keys(r)){let a=r[o];typeof a=="function"?sn.define(t,o,a.bind(e)):sn.define(t,o,a)}};sn.onExit=t=>{let e=(r,o)=>{she||(she=!0,T_.forEach(a=>a()),r===!0&&process.exit(128+o))};T_.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),T_.push(t)};sn.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};sn.defineExport=(t,e,r)=>{let o;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){o=a},get(){return o?o():r()}})}});var ahe=_(hC=>{"use strict";hC.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"};hC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};hC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};hC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};hC.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}});var uhe=_((X_t,che)=>{"use strict";var lhe=ve("readline"),UAt=ahe(),_At=/^(?:\x1b)([a-zA-Z0-9])$/,HAt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,qAt={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};function jAt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function GAt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var sk=(t="",e={})=>{let r,o={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t,...e};if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=o.sequence||""),o.sequence=o.sequence||t||o.name,t==="\r")o.raw=void 0,o.name="return";else if(t===` +`)o.name="enter";else if(t===" ")o.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")o.name="backspace",o.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")o.name="escape",o.meta=t.length===2;else if(t===" "||t==="\x1B ")o.name="space",o.meta=t.length===2;else if(t<="")o.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),o.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")o.name="number";else if(t.length===1&&t>="a"&&t<="z")o.name=t;else if(t.length===1&&t>="A"&&t<="Z")o.name=t.toLowerCase(),o.shift=!0;else if(r=_At.exec(t))o.meta=!0,o.shift=/^[A-Z]$/.test(r[1]);else if(r=HAt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(o.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),u=(r[3]||r[5]||1)-1;o.ctrl=!!(u&4),o.meta=!!(u&10),o.shift=!!(u&1),o.code=n,o.name=qAt[n],o.shift=jAt(n)||o.shift,o.ctrl=GAt(n)||o.ctrl}return o};sk.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let o=lhe.createInterface({terminal:!0,input:r});lhe.emitKeypressEvents(r,o);let a=(A,p)=>e(A,sk(A,p),o),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),o.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),o.pause(),o.close()}};sk.action=(t,e,r)=>{let o={...UAt,...r};return e.ctrl?(e.action=o.ctrl[e.name],e):e.option&&o.option?(e.action=o.option[e.name],e):e.shift?(e.action=o.shift[e.name],e):(e.action=o.keys[e.name],e)};che.exports=sk});var fhe=_((Z_t,Ahe)=>{"use strict";Ahe.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let o=e[r];typeof o=="number"&&(o={interval:o}),YAt(t,r,o)}};function YAt(t,e,r={}){let o=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;o.frames=r.frames||[],o.loading=!0;let n=setInterval(()=>{o.ms=Date.now()-o.start,o.tick++,t.render()},a);return o.stop=()=>{o.loading=!1,clearInterval(n)},Reflect.defineProperty(o,"interval",{value:n}),t.once("close",()=>o.stop()),o.stop}});var hhe=_(($_t,phe)=>{"use strict";var{define:WAt,width:KAt}=No(),N_=class{constructor(e){let r=e.options;WAt(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=KAt(r.stdout||process.stdout),Object.assign(this,r),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let r=this._color||e[this.status];return typeof r=="function"?r:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading=="boolean"?this._loading:this.loadingChoices?"choices":!1}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}};phe.exports=N_});var dhe=_((e8t,ghe)=>{"use strict";var L_=No(),eo=Kc(),O_={default:eo.noop,noop:eo.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||L_.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||L_.complement(this.primary)},primary:eo.cyan,success:eo.green,danger:eo.magenta,strong:eo.bold,warning:eo.yellow,muted:eo.dim,disabled:eo.gray,dark:eo.dim.gray,underline:eo.underline,set info(t){this._info=t},get info(){return this._info||this.primary},set em(t){this._em=t},get em(){return this._em||this.primary.underline},set heading(t){this._heading=t},get heading(){return this._heading||this.muted.underline},set pending(t){this._pending=t},get pending(){return this._pending||this.primary},set submitted(t){this._submitted=t},get submitted(){return this._submitted||this.success},set cancelled(t){this._cancelled=t},get cancelled(){return this._cancelled||this.danger},set typing(t){this._typing=t},get typing(){return this._typing||this.dim},set placeholder(t){this._placeholder=t},get placeholder(){return this._placeholder||this.primary.dim},set highlight(t){this._highlight=t},get highlight(){return this._highlight||this.inverse}};O_.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(eo.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(eo.visible=t.styles.visible);let e=L_.merge({},O_,t.styles);delete e.merge;for(let r of Object.keys(eo))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});for(let r of Object.keys(eo.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});return e};ghe.exports=O_});var yhe=_((t8t,mhe)=>{"use strict";var M_=process.platform==="win32",Vf=Kc(),VAt=No(),U_={...Vf.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:Vf.symbols.check,leftAngle:"\u2039",mark:"\u203B",minus:"\u2212",multiplication:"\xD7",obelus:"\xF7",percent:"%",pilcrow:"\xB6",pilcrow2:"\u2761",pencilUpRight:"\u2710",pencilDownRight:"\u270E",pencilRight:"\u270F",plus:"+",plusMinus:"\xB1",pointRight:"\u261E",rightAngle:"\u203A",section:"\xA7",hexagon:{off:"\u2B21",on:"\u2B22",disabled:"\u2B22"},ballot:{on:"\u2611",off:"\u2610",disabled:"\u2612"},stars:{on:"\u2605",off:"\u2606",disabled:"\u2606"},folder:{on:"\u25BC",off:"\u25B6",disabled:"\u25B6"},prefix:{pending:Vf.symbols.question,submitted:Vf.symbols.check,cancelled:Vf.symbols.cross},separator:{pending:Vf.symbols.pointerSmall,submitted:Vf.symbols.middot,cancelled:Vf.symbols.middot},radio:{off:M_?"( )":"\u25EF",on:M_?"(*)":"\u25C9",disabled:M_?"(|)":"\u24BE"},numbers:["\u24EA","\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246A","\u246B","\u246C","\u246D","\u246E","\u246F","\u2470","\u2471","\u2472","\u2473","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325A","\u325B","\u325C","\u325D","\u325E","\u325F","\u32B1","\u32B2","\u32B3","\u32B4","\u32B5","\u32B6","\u32B7","\u32B8","\u32B9","\u32BA","\u32BB","\u32BC","\u32BD","\u32BE","\u32BF"]};U_.merge=t=>{let e=VAt.merge({},Vf.symbols,U_,t.symbols);return delete e.merge,e};mhe.exports=U_});var Che=_((r8t,Ehe)=>{"use strict";var JAt=dhe(),zAt=yhe(),XAt=No();Ehe.exports=t=>{t.options=XAt.merge({},t.options.theme,t.options),t.symbols=zAt.merge(t.options),t.styles=JAt.merge(t.options)}});var Dhe=_((Bhe,vhe)=>{"use strict";var whe=process.env.TERM_PROGRAM==="Apple_Terminal",ZAt=Kc(),__=No(),Vc=vhe.exports=Bhe,Di="\x1B[",Ihe="\x07",H_=!1,Ph=Vc.code={bell:Ihe,beep:Ihe,beginning:`${Di}G`,down:`${Di}J`,esc:Di,getPosition:`${Di}6n`,hide:`${Di}?25l`,line:`${Di}2K`,lineEnd:`${Di}K`,lineStart:`${Di}1K`,restorePosition:Di+(whe?"8":"u"),savePosition:Di+(whe?"7":"s"),screen:`${Di}2J`,show:`${Di}?25h`,up:`${Di}1J`},Gd=Vc.cursor={get hidden(){return H_},hide(){return H_=!0,Ph.hide},show(){return H_=!1,Ph.show},forward:(t=1)=>`${Di}${t}C`,backward:(t=1)=>`${Di}${t}D`,nextLine:(t=1)=>`${Di}E`.repeat(t),prevLine:(t=1)=>`${Di}F`.repeat(t),up:(t=1)=>t?`${Di}${t}A`:"",down:(t=1)=>t?`${Di}${t}B`:"",right:(t=1)=>t?`${Di}${t}C`:"",left:(t=1)=>t?`${Di}${t}D`:"",to(t,e){return e?`${Di}${e+1};${t+1}H`:`${Di}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?Gd.left(-t):t>0?Gd.right(t):"",r+=e<0?Gd.up(-e):e>0?Gd.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:o,input:a,prompt:n,size:u,value:A}=t;if(o=__.isPrimitive(o)?String(o):"",a=__.isPrimitive(a)?String(a):"",A=__.isPrimitive(A)?String(A):"",u){let p=Vc.cursor.up(u)+Vc.cursor.to(n.length),h=a.length-r;return h>0&&(p+=Vc.cursor.left(h)),p}if(A||e){let p=!a&&!!o?-o.length:-a.length+r;return e&&(p-=e.length),a===""&&o&&!n.includes(o)&&(p+=o.length),Vc.cursor.move(p)}}},q_=Vc.erase={screen:Ph.screen,up:Ph.up,down:Ph.down,line:Ph.line,lineEnd:Ph.lineEnd,lineStart:Ph.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return q_.line+Gd.to(0);let r=n=>[...ZAt.unstyle(n)].length,o=t.split(/\r?\n/),a=0;for(let n of o)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(q_.line+Gd.prevLine()).repeat(a-1)+q_.line+Gd.to(0)}});var gC=_((n8t,Phe)=>{"use strict";var $At=ve("events"),She=Kc(),j_=uhe(),eft=fhe(),tft=hhe(),rft=Che(),Ra=No(),Yd=Dhe(),c2=class extends $At{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,rft(this),eft(this),this.state=new tft(this),this.initial=[e.initial,e.default].find(r=>r!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=ift(this.options.margin),this.setMaxListeners(0),nft(this)}async keypress(e,r={}){this.keypressed=!0;let o=j_.action(e,j_(e,r),this.options.actions);this.state.keypress=o,this.emit("keypress",e,o),this.emit("state",this.state.clone());let a=this.options[o.action]||this[o.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,o);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Yd.code.beep)}cursorHide(){this.stdout.write(Yd.cursor.hide()),Ra.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Yd.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let r=this.state.buffer;this.state.buffer="",!(!r&&!e||this.options.show===!1)&&this.stdout.write(Yd.cursor.down(e)+Yd.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:o}=this.sections(),{cursor:a,initial:n="",input:u="",value:A=""}=this,p=this.state.size=o.length,h={after:r,cursor:a,initial:n,input:u,prompt:e,size:p,value:A},E=Yd.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:o}=this.state;o=She.unstyle(o);let a=She.unstyle(e),n=a.indexOf(o),u=a.slice(0,n),p=a.slice(n).split(` +`),h=p[0],E=p[p.length-1],v=(o+(r?" "+r:"")).length,x=ve.call(this,this.value),this.result=()=>o.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,o){let{options:a,state:n,symbols:u,timers:A}=this,p=A&&A[e];n.timer=p;let h=a[e]||n[e]||u[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let I=await this.resolve(E,n,r,o);return!I&&r&&r[e]?this.resolve(h,n,r,o):I}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,o=this.state;return o.timer=r,Ta.isObject(e)&&(e=e[o.status]||e.pending),Ta.hasColor(e)?e:(this.styles[o.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Ta.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,o=this.state;o.timer=r;let a=e[o.status]||e.pending||o.separator,n=await this.resolve(a,o);return Ta.isObject(n)&&(n=n[o.status]||n.pending),Ta.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let o=await this.element("pointer",e,r);if(typeof o=="string"&&Ta.hasColor(o))return o;if(o){let a=this.styles,n=this.index===r,u=n?a.primary:h=>h,A=await this.resolve(o[n?"on":"off"]||o,this.state),p=Ta.hasColor(A)?A:u(A);return n?p:" ".repeat(A.length)}}async indicator(e,r){let o=await this.element("indicator",e,r);if(typeof o=="string"&&Ta.hasColor(o))return o;if(o){let a=this.styles,n=e.enabled===!0,u=n?a.success:a.dark,A=o[n?"on":"off"]||o;return Ta.hasColor(A)?A:u(A)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return Ta.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==""}resolve(e,...r){return Ta.resolve(this,e,...r)}get base(){return l2.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Ta.height(this.stdout,25)}get width(){return this.options.columns||Ta.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,o=[r,e].find(this.isValue.bind(this));return this.isValue(o)?o:this.initial}static get prompt(){return e=>new this(e).run()}};function lft(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],o=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?o.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function cft(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` -`:" ",o=[];for(let a=0;a<4;a++){let n=r(a);e[a]?o.push(n.repeat(e[a])):o.push("")}return o}bhe.exports=l2});var Fhe=_((s8t,Qhe)=>{"use strict";var uft=No(),khe={default(t,e){return e},checkbox(t,e){throw new Error("checkbox role is not implemented yet")},editable(t,e){throw new Error("editable role is not implemented yet")},expandable(t,e){throw new Error("expandable role is not implemented yet")},heading(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||"",e},input(t,e){throw new Error("input role is not implemented yet")},option(t,e){return khe.default(t,e)},radio(t,e){throw new Error("radio role is not implemented yet")},separator(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||t.symbols.line.repeat(5),e},spacer(t,e){return e}};Qhe.exports=(t,e={})=>{let r=uft.merge({},khe,e.roles);return r[t]||r.default}});var c2=_((o8t,Nhe)=>{"use strict";var Aft=Vc(),fft=hC(),pft=Fhe(),lk=No(),{reorder:W_,scrollUp:hft,scrollDown:gft,isObject:The,swap:dft}=lk,V_=class extends fft{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:o,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");The(r)&&(r=Object.keys(r)),Array.isArray(r)?(o!=null&&(this.index=this.findIndex(o)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(o!=null&&(r=o),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let o=[],a=0,n=async(u,A)=>{typeof u=="function"&&(u=await u.call(this)),u instanceof Promise&&(u=await u);for(let p=0;p(this.state.loadingChoices=!1,u))}async toChoice(e,r,o){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let a=e.value;if(e=pft(e.role,this.options)(this,e),typeof e.disabled=="string"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint="(disabled)"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=r,e.cursor=0,lk.define(e,"parent",o),e.level=o?o.level+1:1,e.indent==null&&(e.indent=o?o.indent+" ":e.indent||""),e.path=o?o.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,Aft.unstyle(e.message).length));let u={...e};return e.reset=(A=u.input,p=u.value)=>{for(let h of Object.keys(u))e[h]=u[h];e.input=A,e.value=p},a==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,o){let a=await this.toChoice(e,r,o);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,o){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,o);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(a=>this.toggle(a,r));let o=e.parent;for(;o;){let a=o.choices.filter(n=>this.isDisabled(n));o.enabled=a.every(n=>n.enabled===!0),o=o.parent}return Rhe(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=o=>{let a=Number(o);if(a>this.choices.length-1)return this.alert();let n=this.focused,u=this.choices.find(A=>a===A.index);if(!u.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(u)===-1){let A=W_(this.choices),p=A.indexOf(u);if(n.index>p){let h=A.slice(p,p+this.limit),E=A.filter(I=>!h.includes(I));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=A.slice(h).concat(A.slice(0,h))}}return this.index=this.choices.indexOf(u),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(o=>{let a=this.choices.length,n=this.num,u=(A=!1,p)=>{clearTimeout(this.numberTimeout),A&&(p=r(n)),this.num="",o(p)};if(n==="0"||n.length===1&&Number(n+"0")>a)return u(!0);if(Number(n)>a)return u(!1,this.alert());this.numberTimeout=setTimeout(()=>u(!0),this.delay)})}home(){return this.choices=W_(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=W_(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===0?this.alert():e>r&&o===0?this.scrollUp():(this.index=(o-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===r-1?this.alert():e>r&&o===r-1?this.scrollDown():(this.index=(o+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=hft(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=gft(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){dft(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(o=>e[o]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(o=>!this.isDisabled(o));return e.enabled&&r.every(o=>this.isEnabled(o))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((o,a)=>(o[a]=this.find(a,r),o),{})}filter(e,r){let a=typeof e=="function"?e:(A,p)=>[A.name,p].includes(e),u=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?u.map(A=>A[r]):u}find(e,r){if(The(e))return r?e[r]:e;let a=typeof e=="function"?e:(u,A)=>[u.name,A].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(u=>u.newChoice))return this.alert();let{reorder:r,sort:o}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&o!==!0&&(n=lk.reorder(n)),this.value=a?n.map(u=>u.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(o=>o.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let o=this.find(r);o&&(this.initial=o.index,this.focus(o,!0))}}}get choices(){return Rhe(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:o}=this,a=e.limit||this._limit||r.limit||o.length;return Math.min(a,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function Rhe(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(lk.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let o=r.choices.filter(a=>!t.isDisabled(a));r.enabled=o.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}Nhe.exports=V_});var Sh=_((a8t,Lhe)=>{"use strict";var mft=c2(),K_=No(),J_=class extends mft{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let o=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!K_.hasColor(o)&&(o=this.styles.strong(o)),this.resolve(o,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),u=await this.resolve(e.hint,this.state,e,r);u&&!K_.hasColor(u)&&(u=this.styles.muted(u));let A=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],A+a+n,p,this.margin[1],u].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(K_.hasColor(p)||(p=this.styles.disabled(p)),h()):(o&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,u)=>await this.renderChoice(n,u)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let o=this.margin[0]+r.join(` +`+this.styles.danger(r),this.state.submitted=!1,await this.render(),await this.alert(),this.state.validating=!1,this.state.error=void 0;return}this.state.validating=!1,await this.render(),await this.close(),this.value=await this.result(this.value),this.emit("submit",this.value)}async cancel(e){this.state.cancelled=this.state.submitted=!0,await this.render(),await this.close(),typeof this.options.onCancel=="function"&&await this.options.onCancel.call(this,this.name,this.value,this),this.emit("cancel",await this.error(e))}async close(){this.state.closed=!0;try{let e=this.sections(),r=Math.ceil(e.prompt.length/this.width);e.rest&&this.write(Yd.cursor.down(e.rest.length)),this.write(` +`.repeat(r))}catch{}this.emit("close")}start(){!this.stop&&this.options.show!==!1&&(this.stop=j_.listen(this,this.keypress.bind(this)),this.once("close",this.stop))}async skip(){return this.skipped=this.options.skip===!0,typeof this.options.skip=="function"&&(this.skipped=await this.options.skip.call(this,this.name,this.value)),this.skipped}async initialize(){let{format:e,options:r,result:o}=this;if(this.format=()=>e.call(this,this.value),this.result=()=>o.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,o){let{options:a,state:n,symbols:u,timers:A}=this,p=A&&A[e];n.timer=p;let h=a[e]||n[e]||u[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let I=await this.resolve(E,n,r,o);return!I&&r&&r[e]?this.resolve(h,n,r,o):I}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,o=this.state;return o.timer=r,Ra.isObject(e)&&(e=e[o.status]||e.pending),Ra.hasColor(e)?e:(this.styles[o.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Ra.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,o=this.state;o.timer=r;let a=e[o.status]||e.pending||o.separator,n=await this.resolve(a,o);return Ra.isObject(n)&&(n=n[o.status]||n.pending),Ra.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let o=await this.element("pointer",e,r);if(typeof o=="string"&&Ra.hasColor(o))return o;if(o){let a=this.styles,n=this.index===r,u=n?a.primary:h=>h,A=await this.resolve(o[n?"on":"off"]||o,this.state),p=Ra.hasColor(A)?A:u(A);return n?p:" ".repeat(A.length)}}async indicator(e,r){let o=await this.element("indicator",e,r);if(typeof o=="string"&&Ra.hasColor(o))return o;if(o){let a=this.styles,n=e.enabled===!0,u=n?a.success:a.dark,A=o[n?"on":"off"]||o;return Ra.hasColor(A)?A:u(A)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return Ra.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==""}resolve(e,...r){return Ra.resolve(this,e,...r)}get base(){return c2.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Ra.height(this.stdout,25)}get width(){return this.options.columns||Ra.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,o=[r,e].find(this.isValue.bind(this));return this.isValue(o)?o:this.initial}static get prompt(){return e=>new this(e).run()}};function nft(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],o=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?o.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function ift(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` +`:" ",o=[];for(let a=0;a<4;a++){let n=r(a);e[a]?o.push(n.repeat(e[a])):o.push("")}return o}Phe.exports=c2});var khe=_((i8t,xhe)=>{"use strict";var sft=No(),bhe={default(t,e){return e},checkbox(t,e){throw new Error("checkbox role is not implemented yet")},editable(t,e){throw new Error("editable role is not implemented yet")},expandable(t,e){throw new Error("expandable role is not implemented yet")},heading(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||"",e},input(t,e){throw new Error("input role is not implemented yet")},option(t,e){return bhe.default(t,e)},radio(t,e){throw new Error("radio role is not implemented yet")},separator(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||t.symbols.line.repeat(5),e},spacer(t,e){return e}};xhe.exports=(t,e={})=>{let r=sft.merge({},bhe,e.roles);return r[t]||r.default}});var u2=_((s8t,Rhe)=>{"use strict";var oft=Kc(),aft=gC(),lft=khe(),ok=No(),{reorder:G_,scrollUp:cft,scrollDown:uft,isObject:Qhe,swap:Aft}=ok,Y_=class extends aft{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:o,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");Qhe(r)&&(r=Object.keys(r)),Array.isArray(r)?(o!=null&&(this.index=this.findIndex(o)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(o!=null&&(r=o),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let o=[],a=0,n=async(u,A)=>{typeof u=="function"&&(u=await u.call(this)),u instanceof Promise&&(u=await u);for(let p=0;p(this.state.loadingChoices=!1,u))}async toChoice(e,r,o){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let a=e.value;if(e=lft(e.role,this.options)(this,e),typeof e.disabled=="string"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint="(disabled)"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=r,e.cursor=0,ok.define(e,"parent",o),e.level=o?o.level+1:1,e.indent==null&&(e.indent=o?o.indent+" ":e.indent||""),e.path=o?o.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,oft.unstyle(e.message).length));let u={...e};return e.reset=(A=u.input,p=u.value)=>{for(let h of Object.keys(u))e[h]=u[h];e.input=A,e.value=p},a==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,o){let a=await this.toChoice(e,r,o);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,o){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,o);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(a=>this.toggle(a,r));let o=e.parent;for(;o;){let a=o.choices.filter(n=>this.isDisabled(n));o.enabled=a.every(n=>n.enabled===!0),o=o.parent}return Fhe(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=o=>{let a=Number(o);if(a>this.choices.length-1)return this.alert();let n=this.focused,u=this.choices.find(A=>a===A.index);if(!u.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(u)===-1){let A=G_(this.choices),p=A.indexOf(u);if(n.index>p){let h=A.slice(p,p+this.limit),E=A.filter(I=>!h.includes(I));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=A.slice(h).concat(A.slice(0,h))}}return this.index=this.choices.indexOf(u),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(o=>{let a=this.choices.length,n=this.num,u=(A=!1,p)=>{clearTimeout(this.numberTimeout),A&&(p=r(n)),this.num="",o(p)};if(n==="0"||n.length===1&&Number(n+"0")>a)return u(!0);if(Number(n)>a)return u(!1,this.alert());this.numberTimeout=setTimeout(()=>u(!0),this.delay)})}home(){return this.choices=G_(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=G_(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===0?this.alert():e>r&&o===0?this.scrollUp():(this.index=(o-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===r-1?this.alert():e>r&&o===r-1?this.scrollDown():(this.index=(o+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=cft(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=uft(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Aft(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(o=>e[o]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(o=>!this.isDisabled(o));return e.enabled&&r.every(o=>this.isEnabled(o))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((o,a)=>(o[a]=this.find(a,r),o),{})}filter(e,r){let a=typeof e=="function"?e:(A,p)=>[A.name,p].includes(e),u=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?u.map(A=>A[r]):u}find(e,r){if(Qhe(e))return r?e[r]:e;let a=typeof e=="function"?e:(u,A)=>[u.name,A].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(u=>u.newChoice))return this.alert();let{reorder:r,sort:o}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&o!==!0&&(n=ok.reorder(n)),this.value=a?n.map(u=>u.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(o=>o.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let o=this.find(r);o&&(this.initial=o.index,this.focus(o,!0))}}}get choices(){return Fhe(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:o}=this,a=e.limit||this._limit||r.limit||o.length;return Math.min(a,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function Fhe(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(ok.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let o=r.choices.filter(a=>!t.isDisabled(a));r.enabled=o.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}Rhe.exports=Y_});var bh=_((o8t,The)=>{"use strict";var fft=u2(),W_=No(),K_=class extends fft{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let o=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!W_.hasColor(o)&&(o=this.styles.strong(o)),this.resolve(o,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),u=await this.resolve(e.hint,this.state,e,r);u&&!W_.hasColor(u)&&(u=this.styles.muted(u));let A=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],A+a+n,p,this.margin[1],u].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(W_.hasColor(p)||(p=this.styles.disabled(p)),h()):(o&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,u)=>await this.renderChoice(n,u)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let o=this.margin[0]+r.join(` `),a;return this.options.choicesHeader&&(a=await this.resolve(this.options.choicesHeader,this.state)),[a,o].filter(Boolean).join(` `)}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:r}=this.state,o="",a=await this.header(),n=await this.prefix(),u=await this.separator(),A=await this.message();this.options.promptLine!==!1&&(o=[n,A,u,""].join(" "),this.state.prompt=o);let p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();p&&(o+=p),h&&!o.includes(h)&&(o+=" "+h),e&&!p&&!E.trim()&&this.multiple&&this.emptyError!=null&&(o+=this.styles.danger(this.emptyError)),this.clear(r),this.write([a,o,E,I].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};Lhe.exports=J_});var Ohe=_((l8t,Mhe)=>{"use strict";var yft=Sh(),Eft=(t,e)=>{let r=t.toLowerCase();return o=>{let n=o.toLowerCase().indexOf(r),u=e(o.slice(n,n+r.length));return n>=0?o.slice(0,n)+u+o.slice(n+r.length):o}},z_=class extends yft{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:o}=this.state;return this.input=o.slice(0,r)+e+o.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let o=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(o))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=Eft(this.input,e),o=this.choices;this.choices=o.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=o}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Mhe.exports=z_});var Z_=_((c8t,Uhe)=>{"use strict";var X_=No();Uhe.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:o="",pos:a,showCursor:n=!0,color:u}=e,A=u||t.styles.placeholder,p=X_.inverse(t.styles.primary),h=T=>p(t.styles.black(T)),E=r,I=" ",v=h(I);if(t.blink&&t.blink.off===!0&&(h=T=>T,v=""),n&&a===0&&o===""&&r==="")return h(I);if(n&&a===0&&(r===o||r===""))return h(o[0])+A(o.slice(1));o=X_.isPrimitive(o)?`${o}`:"",r=X_.isPrimitive(r)?`${r}`:"";let b=o&&o.startsWith(r)&&o!==r,C=b?h(o[r.length]):v;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),C=""),n===!1&&(C=""),b){let T=t.styles.unstyle(E+C);return E+C+A(o.slice(T.length))}return E+C}});var ck=_((u8t,_he)=>{"use strict";var Cft=Vc(),wft=Sh(),Ift=Z_(),$_=class extends wft{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:o,input:a}=r;return r.value=r.input=a.slice(0,o)+e+a.slice(o),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:o}=e;return e.value=e.input=o.slice(0,r-1)+o.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:o}=e;if(o[r]===void 0)return this.alert();let a=`${o}`.slice(0,r)+`${o}`.slice(r+1);return e.value=e.input=a,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:o}=e;return r&&r.startsWith(o)&&o!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let o=await this.resolve(e.separator,this.state,e,r)||":";return o?" "+this.styles.disabled(o):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:o,styles:a}=this,{cursor:n,initial:u="",name:A,hint:p,input:h=""}=e,{muted:E,submitted:I,primary:v,danger:b}=a,C=p,T=this.index===r,L=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),J=e.message;this.align==="right"&&(J=J.padStart(this.longest+1," ")),this.align==="left"&&(J=J.padEnd(this.longest+1," "));let te=this.values[A]=h||u,le=h?"success":"dark";await L.call(e,te,this.state)!==!0&&(le="danger");let pe=a[le],Ae=pe(await this.indicator(e,r))+(e.pad||""),ye=this.indent(e),ae=()=>[ye,Ae,J+U,h,C].filter(Boolean).join(" ");if(o.submitted)return J=Cft.unstyle(J),h=I(h),C="",ae();if(e.format)h=await e.format.call(this,h,e,r);else{let we=this.styles.muted;h=Ift(this,{input:h,initial:u,pos:n,showCursor:T,color:we})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[A]=await e.result.call(this,te,e,r)),T&&(J=v(J)),e.error?h+=(h?" ":"")+b(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),ae()}async submit(){return this.value=this.values,super.base.submit.call(this)}};_he.exports=$_});var e8=_((A8t,jhe)=>{"use strict";var Bft=ck(),vft=()=>{throw new Error("expected prompt to have a custom authenticate method")},Hhe=(t=vft)=>{class e extends Bft{constructor(o){super(o)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(o){return Hhe(o)}}return e};jhe.exports=Hhe()});var Yhe=_((f8t,Ghe)=>{"use strict";var Dft=e8();function Pft(t,e){return t.username===this.options.username&&t.password===this.options.password}var qhe=(t=Pft)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(o){return this.options.showPassword?o:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(o.length))}}];class r extends Dft.create(t){constructor(a){super({...a,choices:e})}static create(a){return qhe(a)}}return r};Ghe.exports=qhe()});var uk=_((p8t,Whe)=>{"use strict";var Sft=hC(),{isPrimitive:xft,hasColor:bft}=No(),t8=class extends Sft{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:o}=this;return o.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return xft(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return bft(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=this.styles.muted(this.default),A=[o,n,u,a].filter(Boolean).join(" ");this.state.prompt=A;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),I=await this.error()||await this.hint(),v=await this.footer();I&&!A.includes(I)&&(E+=" "+I),A+=" "+E,this.clear(r),this.write([p,A,v].filter(Boolean).join(` -`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Whe.exports=t8});var Khe=_((h8t,Vhe)=>{"use strict";var kft=uk(),r8=class extends kft{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};Vhe.exports=r8});var zhe=_((g8t,Jhe)=>{"use strict";var Qft=Sh(),Fft=ck(),gC=Fft.prototype,n8=class extends Qft{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let o=this.focused,a=o.parent||{};return!o.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():gC.dispatch.call(this,e,r)}append(e,r){return gC.append.call(this,e,r)}delete(e,r){return gC.delete.call(this,e,r)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?gC.next.call(this):super.next()}prev(){return this.focused.editable?gC.prev.call(this):super.prev()}async indicator(e,r){let o=e.indicator||"",a=e.editable?o:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?gC.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let o=r.parent?this.value[r.parent.name]:this.value;if(r.editable?o=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(o=r.enabled===!0),e=await r.validate(o,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Jhe.exports=n8});var Yd=_((d8t,Xhe)=>{"use strict";var Tft=hC(),Rft=Z_(),{isPrimitive:Nft}=No(),i8=class extends Tft{constructor(e){super(e),this.initial=Nft(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let o=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!o||o.name!=="return")?this.append(` -`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:o}=this.state;this.input=`${o}`.slice(0,r)+e+`${o}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),o=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=o,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):Rft(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),o=await this.separator(),a=await this.message(),n=[r,a,o].filter(Boolean).join(" ");this.state.prompt=n;let u=await this.header(),A=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!A.includes(p)&&(A+=" "+p),n+=" "+A,this.clear(e),this.write([u,n,h].filter(Boolean).join(` -`)),this.restore()}};Xhe.exports=i8});var $he=_((m8t,Zhe)=>{"use strict";var Lft=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),Ak=t=>Lft(t).filter(Boolean);Zhe.exports=(t,e={},r="")=>{let{past:o=[],present:a=""}=e,n,u;switch(t){case"prev":case"undo":return n=o.slice(0,o.length-1),u=o[o.length-1]||"",{past:Ak([r,...n]),present:u};case"next":case"redo":return n=o.slice(1),u=o[0]||"",{past:Ak([...n,r]),present:u};case"save":return{past:Ak([...o,r]),present:""};case"remove":return u=Ak(o.filter(A=>A!==r)),a="",u.length&&(a=u.pop()),{past:u,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var o8=_((y8t,t0e)=>{"use strict";var Mft=Yd(),e0e=$he(),s8=class extends Mft{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let o=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:o},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=e0e(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=e0e("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};t0e.exports=s8});var n0e=_((E8t,r0e)=>{"use strict";var Oft=Yd(),a8=class extends Oft{format(){return""}};r0e.exports=a8});var s0e=_((C8t,i0e)=>{"use strict";var Uft=Yd(),l8=class extends Uft{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:r=>r;return this.list.map(e).join(", ")}async submit(e){let r=this.state.error||await this.validate(this.list,this.state);return r!==!0?(this.state.error=r,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};i0e.exports=l8});var a0e=_((w8t,o0e)=>{"use strict";var _ft=Sh(),c8=class extends _ft{constructor(e){super({...e,multiple:!0})}};o0e.exports=c8});var A8=_((I8t,l0e)=>{"use strict";var Hft=Yd(),u8=class extends Hft{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,o=this.toNumber(this.input);return o>this.max+r?this.alert():(this.input=`${o+r}`,this.render())}down(e){let r=e||this.minor,o=this.toNumber(this.input);return othis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};l0e.exports=u8});var u0e=_((B8t,c0e)=>{c0e.exports=A8()});var f0e=_((v8t,A0e)=>{"use strict";var jft=Yd(),f8=class extends jft{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):""}};A0e.exports=f8});var g0e=_((D8t,h0e)=>{"use strict";var qft=Vc(),Gft=c2(),p0e=No(),p8=class extends Gft{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` +`)),this.write(this.margin[2]),this.restore()}};The.exports=K_});var Lhe=_((a8t,Nhe)=>{"use strict";var pft=bh(),hft=(t,e)=>{let r=t.toLowerCase();return o=>{let n=o.toLowerCase().indexOf(r),u=e(o.slice(n,n+r.length));return n>=0?o.slice(0,n)+u+o.slice(n+r.length):o}},V_=class extends pft{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:o}=this.state;return this.input=o.slice(0,r)+e+o.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let o=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(o))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=hft(this.input,e),o=this.choices;this.choices=o.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=o}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Nhe.exports=V_});var z_=_((l8t,Ohe)=>{"use strict";var J_=No();Ohe.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:o="",pos:a,showCursor:n=!0,color:u}=e,A=u||t.styles.placeholder,p=J_.inverse(t.styles.primary),h=R=>p(t.styles.black(R)),E=r,I=" ",v=h(I);if(t.blink&&t.blink.off===!0&&(h=R=>R,v=""),n&&a===0&&o===""&&r==="")return h(I);if(n&&a===0&&(r===o||r===""))return h(o[0])+A(o.slice(1));o=J_.isPrimitive(o)?`${o}`:"",r=J_.isPrimitive(r)?`${r}`:"";let x=o&&o.startsWith(r)&&o!==r,C=x?h(o[r.length]):v;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),C=""),n===!1&&(C=""),x){let R=t.styles.unstyle(E+C);return E+C+A(o.slice(R.length))}return E+C}});var ak=_((c8t,Mhe)=>{"use strict";var gft=Kc(),dft=bh(),mft=z_(),X_=class extends dft{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:o,input:a}=r;return r.value=r.input=a.slice(0,o)+e+a.slice(o),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:o}=e;return e.value=e.input=o.slice(0,r-1)+o.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:o}=e;if(o[r]===void 0)return this.alert();let a=`${o}`.slice(0,r)+`${o}`.slice(r+1);return e.value=e.input=a,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:o}=e;return r&&r.startsWith(o)&&o!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let o=await this.resolve(e.separator,this.state,e,r)||":";return o?" "+this.styles.disabled(o):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:o,styles:a}=this,{cursor:n,initial:u="",name:A,hint:p,input:h=""}=e,{muted:E,submitted:I,primary:v,danger:x}=a,C=p,R=this.index===r,L=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),J=e.message;this.align==="right"&&(J=J.padStart(this.longest+1," ")),this.align==="left"&&(J=J.padEnd(this.longest+1," "));let te=this.values[A]=h||u,ae=h?"success":"dark";await L.call(e,te,this.state)!==!0&&(ae="danger");let fe=a[ae],ce=fe(await this.indicator(e,r))+(e.pad||""),me=this.indent(e),he=()=>[me,ce,J+U,h,C].filter(Boolean).join(" ");if(o.submitted)return J=gft.unstyle(J),h=I(h),C="",he();if(e.format)h=await e.format.call(this,h,e,r);else{let Be=this.styles.muted;h=mft(this,{input:h,initial:u,pos:n,showCursor:R,color:Be})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[A]=await e.result.call(this,te,e,r)),R&&(J=v(J)),e.error?h+=(h?" ":"")+x(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),he()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Mhe.exports=X_});var Z_=_((u8t,_he)=>{"use strict";var yft=ak(),Eft=()=>{throw new Error("expected prompt to have a custom authenticate method")},Uhe=(t=Eft)=>{class e extends yft{constructor(o){super(o)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(o){return Uhe(o)}}return e};_he.exports=Uhe()});var jhe=_((A8t,qhe)=>{"use strict";var Cft=Z_();function wft(t,e){return t.username===this.options.username&&t.password===this.options.password}var Hhe=(t=wft)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(o){return this.options.showPassword?o:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(o.length))}}];class r extends Cft.create(t){constructor(a){super({...a,choices:e})}static create(a){return Hhe(a)}}return r};qhe.exports=Hhe()});var lk=_((f8t,Ghe)=>{"use strict";var Ift=gC(),{isPrimitive:Bft,hasColor:vft}=No(),$_=class extends Ift{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:o}=this;return o.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return Bft(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return vft(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=this.styles.muted(this.default),A=[o,n,u,a].filter(Boolean).join(" ");this.state.prompt=A;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),I=await this.error()||await this.hint(),v=await this.footer();I&&!A.includes(I)&&(E+=" "+I),A+=" "+E,this.clear(r),this.write([p,A,v].filter(Boolean).join(` +`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Ghe.exports=$_});var Whe=_((p8t,Yhe)=>{"use strict";var Dft=lk(),e8=class extends Dft{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};Yhe.exports=e8});var Vhe=_((h8t,Khe)=>{"use strict";var Sft=bh(),Pft=ak(),dC=Pft.prototype,t8=class extends Sft{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let o=this.focused,a=o.parent||{};return!o.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():dC.dispatch.call(this,e,r)}append(e,r){return dC.append.call(this,e,r)}delete(e,r){return dC.delete.call(this,e,r)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?dC.next.call(this):super.next()}prev(){return this.focused.editable?dC.prev.call(this):super.prev()}async indicator(e,r){let o=e.indicator||"",a=e.editable?o:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?dC.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let o=r.parent?this.value[r.parent.name]:this.value;if(r.editable?o=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(o=r.enabled===!0),e=await r.validate(o,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Khe.exports=t8});var Wd=_((g8t,Jhe)=>{"use strict";var bft=gC(),xft=z_(),{isPrimitive:kft}=No(),r8=class extends bft{constructor(e){super(e),this.initial=kft(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let o=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!o||o.name!=="return")?this.append(` +`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:o}=this.state;this.input=`${o}`.slice(0,r)+e+`${o}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),o=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=o,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):xft(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),o=await this.separator(),a=await this.message(),n=[r,a,o].filter(Boolean).join(" ");this.state.prompt=n;let u=await this.header(),A=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!A.includes(p)&&(A+=" "+p),n+=" "+A,this.clear(e),this.write([u,n,h].filter(Boolean).join(` +`)),this.restore()}};Jhe.exports=r8});var Xhe=_((d8t,zhe)=>{"use strict";var Qft=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),ck=t=>Qft(t).filter(Boolean);zhe.exports=(t,e={},r="")=>{let{past:o=[],present:a=""}=e,n,u;switch(t){case"prev":case"undo":return n=o.slice(0,o.length-1),u=o[o.length-1]||"",{past:ck([r,...n]),present:u};case"next":case"redo":return n=o.slice(1),u=o[0]||"",{past:ck([...n,r]),present:u};case"save":return{past:ck([...o,r]),present:""};case"remove":return u=ck(o.filter(A=>A!==r)),a="",u.length&&(a=u.pop()),{past:u,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var i8=_((m8t,$he)=>{"use strict";var Fft=Wd(),Zhe=Xhe(),n8=class extends Fft{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let o=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:o},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Zhe(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Zhe("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};$he.exports=n8});var t0e=_((y8t,e0e)=>{"use strict";var Rft=Wd(),s8=class extends Rft{format(){return""}};e0e.exports=s8});var n0e=_((E8t,r0e)=>{"use strict";var Tft=Wd(),o8=class extends Tft{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:r=>r;return this.list.map(e).join(", ")}async submit(e){let r=this.state.error||await this.validate(this.list,this.state);return r!==!0?(this.state.error=r,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};r0e.exports=o8});var s0e=_((C8t,i0e)=>{"use strict";var Nft=bh(),a8=class extends Nft{constructor(e){super({...e,multiple:!0})}};i0e.exports=a8});var c8=_((w8t,o0e)=>{"use strict";var Lft=Wd(),l8=class extends Lft{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,o=this.toNumber(this.input);return o>this.max+r?this.alert():(this.input=`${o+r}`,this.render())}down(e){let r=e||this.minor,o=this.toNumber(this.input);return othis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};o0e.exports=l8});var l0e=_((I8t,a0e)=>{a0e.exports=c8()});var u0e=_((B8t,c0e)=>{"use strict";var Oft=Wd(),u8=class extends Oft{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):""}};c0e.exports=u8});var p0e=_((v8t,f0e)=>{"use strict";var Mft=Kc(),Uft=u2(),A0e=No(),A8=class extends Uft{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` `;let r=e.startNumber||1;typeof this.scale=="number"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((o,a)=>({name:a+r})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let r of this.choices){e=Math.max(e,r.message.length),r.scaleIndex=r.initial||2,r.scale=[];for(let o=0;o=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.index)).join(", "):""}pointer(){return""}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?"":["",...this.scale.map(o=>` ${o.name} - ${o.message}`)].map(o=>this.styles.muted(o)).join(` -`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let o=this.scaleLength-r.join("").length,a=Math.round(o/(r.length-1)),u=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),A=" ".repeat(this.widths[0]);return this.margin[3]+A+this.margin[1]+u}scaleIndicator(e,r,o){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,o);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let o=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return o.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!p0e.hasColor(n)&&(n=this.styles.muted(n));let u=C=>this.margin[3]+C.replace(/\s+$/,"").padEnd(this.widths[0]," "),A=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),I=this.margin[1]+this.margin[3];this.scaleLength=qft.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-I.length);let b=p0e.wordWrap(h,{width:this.widths[0],newline:A}).split(` -`).map(C=>u(C)+this.margin[1]);return o&&(E=this.styles.info(E),b=b.map(C=>this.styles.info(C))),b[0]+=E,this.linebreak&&b.push(""),[p+a,b.join(` +`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let o=this.scaleLength-r.join("").length,a=Math.round(o/(r.length-1)),u=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),A=" ".repeat(this.widths[0]);return this.margin[3]+A+this.margin[1]+u}scaleIndicator(e,r,o){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,o);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let o=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return o.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!A0e.hasColor(n)&&(n=this.styles.muted(n));let u=C=>this.margin[3]+C.replace(/\s+$/,"").padEnd(this.widths[0]," "),A=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),I=this.margin[1]+this.margin[3];this.scaleLength=Mft.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-I.length);let x=A0e.wordWrap(h,{width:this.widths[0],newline:A}).split(` +`).map(C=>u(C)+this.margin[1]);return o&&(E=this.styles.info(E),x=x.map(C=>this.styles.info(C))),x[0]+=E,this.linebreak&&x.push(""),[p+a,x.join(` `)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(a,n)=>await this.renderChoice(a,n)),r=await Promise.all(e),o=await this.renderScaleHeading();return this.margin[0]+[o,...r.map(a=>a.join(" "))].join(` -`)}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u="";this.options.promptLine!==!1&&(u=[o,n,a,""].join(" "),this.state.prompt=u);let A=await this.header(),p=await this.format(),h=await this.renderScaleKey(),E=await this.error()||await this.hint(),I=await this.renderChoices(),v=await this.footer(),b=this.emptyError;p&&(u+=p),E&&!u.includes(E)&&(u+=" "+E),e&&!p&&!I.trim()&&this.multiple&&b!=null&&(u+=this.styles.danger(b)),this.clear(r),this.write([A,u,h,I,v].filter(Boolean).join(` -`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};h0e.exports=p8});var y0e=_((P8t,m0e)=>{"use strict";var d0e=Vc(),Yft=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",g8=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=Yft(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},Wft=async(t={},e={},r=o=>o)=>{let o=new Set,a=t.fields||[],n=t.template,u=[],A=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,I=()=>n[++E],v=()=>n[E+1],b=C=>{C.line=h,u.push(C)};for(b({type:"bos",value:""});Ele.name===U.key);U.field=a.find(le=>le.name===U.key),te||(te=new g8(U),A.push(te)),te.lines.push(U.line-1);continue}let T=u[u.length-1];T.type==="text"&&T.line===h?T.value+=C:b({type:"text",value:C})}return b({type:"eos",value:""}),{input:n,tabstops:u,unique:o,keys:p,items:A}};m0e.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),o={...e.values,...e.initial},{tabstops:a,items:n,keys:u}=await Wft(e,o),A=h8("result",t,e),p=h8("format",t,e),h=h8("validate",t,e,!0),E=t.isValue.bind(t);return async(I={},v=!1)=>{let b=0;I.required=r,I.items=n,I.keys=u,I.output="";let C=async(J,te,le,pe)=>{let Ae=await h(J,te,le,pe);return Ae===!1?"Invalid field "+le.name:Ae};for(let J of a){let te=J.value,le=J.key;if(J.type!=="template"){te&&(I.output+=te);continue}if(J.type==="template"){let pe=n.find(Pe=>Pe.name===le);e.required===!0&&I.required.add(pe.name);let Ae=[pe.input,I.values[pe.value],pe.value,te].find(E),ae=(pe.field||{}).message||J.inner;if(v){let Pe=await C(I.values[le],I,pe,b);if(Pe&&typeof Pe=="string"||Pe===!1){I.invalid.set(le,Pe);continue}I.invalid.delete(le);let g=await A(I.values[le],I,pe,b);I.output+=d0e.unstyle(g);continue}pe.placeholder=!1;let we=te;te=await p(te,I,pe,b),Ae!==te?(I.values[le]=Ae,te=t.styles.typing(Ae),I.missing.delete(ae)):(I.values[le]=void 0,Ae=`<${ae}>`,te=t.styles.primary(Ae),pe.placeholder=!0,I.required.has(le)&&I.missing.add(ae)),I.missing.has(ae)&&I.validating&&(te=t.styles.warning(Ae)),I.invalid.has(le)&&I.validating&&(te=t.styles.danger(Ae)),b===I.index&&(we!==te?te=t.styles.underline(te):te=t.styles.heading(d0e.unstyle(te))),b++}te&&(I.output+=te)}let T=I.output.split(` -`).map(J=>" "+J),L=n.length,U=0;for(let J of n)I.invalid.has(J.name)&&J.lines.forEach(te=>{T[te][0]===" "&&(T[te]=I.styles.danger(I.symbols.bullet)+T[te].slice(1))}),t.isValue(I.values[J.name])&&U++;return I.completed=(U/L*100).toFixed(0),I.output=T.join(` -`),I.output}};function h8(t,e,r,o){return(a,n,u,A)=>typeof u.field[t]=="function"?u.field[t].call(e,a,n,u,A):[o,a].find(p=>e.isValue(p))}});var C0e=_((S8t,E0e)=>{"use strict";var Vft=Vc(),Kft=y0e(),Jft=hC(),d8=class extends Jft{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await Kft(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let o=this.getItem(),a=o.input.slice(0,this.cursor),n=o.input.slice(this.cursor);this.input=o.input=`${a}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),o=e.input.slice(0,this.cursor-1);this.input=e.input=`${o}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:o,size:a}=this.state,n=[this.options.newline,` -`].find(J=>J!=null),u=await this.prefix(),A=await this.separator(),p=await this.message(),h=[u,p,A].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),I=await this.error()||"",v=await this.hint()||"",b=o?"":await this.interpolate(this.state),C=this.state.key=r[e]||"",T=await this.format(C),L=await this.footer();T&&(h+=" "+T),v&&!T&&this.state.completed===0&&(h+=" "+v),this.clear(a);let U=[E,h,b,L,I.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:o,index:a}=this.state,n=r.find(u=>u.name===o[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:o,values:a}=this.state;if(e.size){let A="";for(let[p,h]of e)A+=`Invalid ${p}: ${h} -`;return this.state.error=A,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let u=Vft.unstyle(o).split(` +`)}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u="";this.options.promptLine!==!1&&(u=[o,n,a,""].join(" "),this.state.prompt=u);let A=await this.header(),p=await this.format(),h=await this.renderScaleKey(),E=await this.error()||await this.hint(),I=await this.renderChoices(),v=await this.footer(),x=this.emptyError;p&&(u+=p),E&&!u.includes(E)&&(u+=" "+E),e&&!p&&!I.trim()&&this.multiple&&x!=null&&(u+=this.styles.danger(x)),this.clear(r),this.write([A,u,h,I,v].filter(Boolean).join(` +`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};f0e.exports=A8});var d0e=_((D8t,g0e)=>{"use strict";var h0e=Kc(),_ft=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",p8=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=_ft(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},Hft=async(t={},e={},r=o=>o)=>{let o=new Set,a=t.fields||[],n=t.template,u=[],A=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,I=()=>n[++E],v=()=>n[E+1],x=C=>{C.line=h,u.push(C)};for(x({type:"bos",value:""});Eae.name===U.key);U.field=a.find(ae=>ae.name===U.key),te||(te=new p8(U),A.push(te)),te.lines.push(U.line-1);continue}let R=u[u.length-1];R.type==="text"&&R.line===h?R.value+=C:x({type:"text",value:C})}return x({type:"eos",value:""}),{input:n,tabstops:u,unique:o,keys:p,items:A}};g0e.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),o={...e.values,...e.initial},{tabstops:a,items:n,keys:u}=await Hft(e,o),A=f8("result",t,e),p=f8("format",t,e),h=f8("validate",t,e,!0),E=t.isValue.bind(t);return async(I={},v=!1)=>{let x=0;I.required=r,I.items=n,I.keys=u,I.output="";let C=async(J,te,ae,fe)=>{let ce=await h(J,te,ae,fe);return ce===!1?"Invalid field "+ae.name:ce};for(let J of a){let te=J.value,ae=J.key;if(J.type!=="template"){te&&(I.output+=te);continue}if(J.type==="template"){let fe=n.find(we=>we.name===ae);e.required===!0&&I.required.add(fe.name);let ce=[fe.input,I.values[fe.value],fe.value,te].find(E),he=(fe.field||{}).message||J.inner;if(v){let we=await C(I.values[ae],I,fe,x);if(we&&typeof we=="string"||we===!1){I.invalid.set(ae,we);continue}I.invalid.delete(ae);let g=await A(I.values[ae],I,fe,x);I.output+=h0e.unstyle(g);continue}fe.placeholder=!1;let Be=te;te=await p(te,I,fe,x),ce!==te?(I.values[ae]=ce,te=t.styles.typing(ce),I.missing.delete(he)):(I.values[ae]=void 0,ce=`<${he}>`,te=t.styles.primary(ce),fe.placeholder=!0,I.required.has(ae)&&I.missing.add(he)),I.missing.has(he)&&I.validating&&(te=t.styles.warning(ce)),I.invalid.has(ae)&&I.validating&&(te=t.styles.danger(ce)),x===I.index&&(Be!==te?te=t.styles.underline(te):te=t.styles.heading(h0e.unstyle(te))),x++}te&&(I.output+=te)}let R=I.output.split(` +`).map(J=>" "+J),L=n.length,U=0;for(let J of n)I.invalid.has(J.name)&&J.lines.forEach(te=>{R[te][0]===" "&&(R[te]=I.styles.danger(I.symbols.bullet)+R[te].slice(1))}),t.isValue(I.values[J.name])&&U++;return I.completed=(U/L*100).toFixed(0),I.output=R.join(` +`),I.output}};function f8(t,e,r,o){return(a,n,u,A)=>typeof u.field[t]=="function"?u.field[t].call(e,a,n,u,A):[o,a].find(p=>e.isValue(p))}});var y0e=_((S8t,m0e)=>{"use strict";var qft=Kc(),jft=d0e(),Gft=gC(),h8=class extends Gft{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await jft(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let o=this.getItem(),a=o.input.slice(0,this.cursor),n=o.input.slice(this.cursor);this.input=o.input=`${a}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),o=e.input.slice(0,this.cursor-1);this.input=e.input=`${o}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:o,size:a}=this.state,n=[this.options.newline,` +`].find(J=>J!=null),u=await this.prefix(),A=await this.separator(),p=await this.message(),h=[u,p,A].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),I=await this.error()||"",v=await this.hint()||"",x=o?"":await this.interpolate(this.state),C=this.state.key=r[e]||"",R=await this.format(C),L=await this.footer();R&&(h+=" "+R),v&&!R&&this.state.completed===0&&(h+=" "+v),this.clear(a);let U=[E,h,x,L,I.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:o,index:a}=this.state,n=r.find(u=>u.name===o[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:o,values:a}=this.state;if(e.size){let A="";for(let[p,h]of e)A+=`Invalid ${p}: ${h} +`;return this.state.error=A,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let u=qft.unstyle(o).split(` `).map(A=>A.slice(1)).join(` -`);return this.value={values:a,result:u},super.submit()}};E0e.exports=d8});var I0e=_((x8t,w0e)=>{"use strict";var zft="(Use + to sort)",Xft=Sh(),m8=class extends Xft{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,zft].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let o=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+o:n+o}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};w0e.exports=m8});var v0e=_((b8t,B0e)=>{"use strict";var Zft=c2(),y8=class extends Zft{constructor(e={}){if(super(e),this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(o=>this.styles.muted(o)),this.state.header=r.join(` - `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let o of r)o.scale=$ft(5,this.options),o.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],o=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!o,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=this.term==="Hyper",n=a?9:8,u=a?"":" ",A=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+u,E=r+1+".",I=o?this.styles.heading:this.styles.noop,v=await this.resolve(e.message,this.state,e,r),b=this.indent(e),C=b+e.scale.map((te,le)=>h(le===e.scaleIdx)).join(A),T=te=>te===e.scaleIdx?I(te):te,L=b+e.scale.map((te,le)=>T(le)).join(p),U=()=>[E,v].filter(Boolean).join(" "),J=()=>[U(),C,L," "].filter(Boolean).join(` +`);return this.value={values:a,result:u},super.submit()}};m0e.exports=h8});var C0e=_((P8t,E0e)=>{"use strict";var Yft="(Use + to sort)",Wft=bh(),g8=class extends Wft{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,Yft].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let o=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+o:n+o}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};E0e.exports=g8});var I0e=_((b8t,w0e)=>{"use strict";var Kft=u2(),d8=class extends Kft{constructor(e={}){if(super(e),this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(o=>this.styles.muted(o)),this.state.header=r.join(` + `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let o of r)o.scale=Vft(5,this.options),o.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],o=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!o,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=this.term==="Hyper",n=a?9:8,u=a?"":" ",A=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+u,E=r+1+".",I=o?this.styles.heading:this.styles.noop,v=await this.resolve(e.message,this.state,e,r),x=this.indent(e),C=x+e.scale.map((te,ae)=>h(ae===e.scaleIdx)).join(A),R=te=>te===e.scaleIdx?I(te):te,L=x+e.scale.map((te,ae)=>R(ae)).join(p),U=()=>[E,v].filter(Boolean).join(" "),J=()=>[U(),C,L," "].filter(Boolean).join(` `);return o&&(C=this.styles.cyan(C),L=this.styles.cyan(L)),J()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(o,a)=>await this.renderChoice(o,a)),r=await Promise.all(e);return r.length||r.push(this.styles.danger("No matching choices")),r.join(` `)}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.scaleIdx)).join(", "):""}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=[o,n,a].filter(Boolean).join(" ");this.state.prompt=u;let A=await this.header(),p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();(p||!h)&&(u+=" "+p),h&&!u.includes(h)&&(u+=" "+h),e&&!p&&!E&&this.multiple&&this.type!=="form"&&(u+=this.styles.danger(this.emptyError)),this.clear(r),this.write([u,A,E,I].filter(Boolean).join(` -`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function $ft(t,e={}){if(Array.isArray(e.scale))return e.scale.map(o=>({...o}));let r=[];for(let o=1;o{D0e.exports=o8()});var x0e=_((Q8t,S0e)=>{"use strict";var ept=uk(),E8=class extends ept{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=o=>this.styles.primary.underline(o);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),o=await this.prefix(),a=await this.separator(),n=await this.message(),u=await this.format(),A=await this.error()||await this.hint(),p=await this.footer(),h=[o,n,a,u].join(" ");this.state.prompt=h,A&&!h.includes(A)&&(h+=" "+A),this.clear(e),this.write([r,h,p].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};S0e.exports=E8});var k0e=_((F8t,b0e)=>{"use strict";var tpt=Sh(),C8=class extends tpt{constructor(e){if(super(e),typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let o=await super.toChoices(e,r);if(o.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>o.length)throw new Error("Please specify the index of the correct answer from the list of choices");return o}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};b0e.exports=C8});var F0e=_(w8=>{"use strict";var Q0e=No(),As=(t,e)=>{Q0e.defineExport(w8,t,e),Q0e.defineExport(w8,t.toLowerCase(),e)};As("AutoComplete",()=>Ohe());As("BasicAuth",()=>Yhe());As("Confirm",()=>Khe());As("Editable",()=>zhe());As("Form",()=>ck());As("Input",()=>o8());As("Invisible",()=>n0e());As("List",()=>s0e());As("MultiSelect",()=>a0e());As("Numeral",()=>u0e());As("Password",()=>f0e());As("Scale",()=>g0e());As("Select",()=>Sh());As("Snippet",()=>C0e());As("Sort",()=>I0e());As("Survey",()=>v0e());As("Text",()=>P0e());As("Toggle",()=>x0e());As("Quiz",()=>k0e())});var R0e=_((R8t,T0e)=>{T0e.exports={ArrayPrompt:c2(),AuthPrompt:e8(),BooleanPrompt:uk(),NumberPrompt:A8(),StringPrompt:Yd()}});var A2=_((N8t,L0e)=>{"use strict";var N0e=Be("assert"),B8=Be("events"),xh=No(),Jc=class extends B8{constructor(e,r){super(),this.options=xh.merge({},e),this.answers={...r}}register(e,r){if(xh.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}N0e.equal(typeof r,"function","expected a function");let o=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[o]=r:this.prompts[o]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(xh.merge({},this.options,r))}catch(o){return Promise.reject(o)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=xh.merge({},this.options,e),{type:o,name:a}=e,{set:n,get:u}=xh;if(typeof o=="function"&&(o=await o.call(this,e,this.answers)),!o)return this.answers[a];N0e(this.prompts[o],`Prompt "${o}" is not registered`);let A=new this.prompts[o](r),p=u(this.answers,a);A.state.answers=this.answers,A.enquirer=this,a&&A.on("submit",E=>{this.emit("answer",a,E,A),n(this.answers,a,E)});let h=A.emit.bind(A);return A.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",A,this),r.autofill&&p!=null?(A.value=A.input=p,r.autofill==="show"&&await A.submit()):p=A.value=await A.run(),p}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||hC()}static get prompts(){return F0e()}static get types(){return R0e()}static get prompt(){let e=(r,...o)=>{let a=new this(...o),n=a.emit.bind(a);return a.emit=(...u)=>(e.emit(...u),n(...u)),a.prompt(r)};return xh.mixinEmitter(e,new B8),e}};xh.mixinEmitter(Jc,new B8);var I8=Jc.prompts;for(let t of Object.keys(I8)){let e=t.toLowerCase(),r=o=>new I8[t](o).run();Jc.prompt[e]=r,Jc[e]=r,Jc[t]||Reflect.defineProperty(Jc,t,{get:()=>I8[t]})}var u2=t=>{xh.defineExport(Jc,t,()=>Jc.types[t])};u2("ArrayPrompt");u2("AuthPrompt");u2("BooleanPrompt");u2("NumberPrompt");u2("StringPrompt");L0e.exports=Jc});var g2=_((mHt,q0e)=>{var apt=Zb();function lpt(t,e,r){var o=t==null?void 0:apt(t,e);return o===void 0?r:o}q0e.exports=lpt});var W0e=_((BHt,Y0e)=>{function cpt(t,e){for(var r=-1,o=t==null?0:t.length;++r{var upt=gd(),Apt=zP();function fpt(t,e){return t&&upt(e,Apt(e),t)}V0e.exports=fpt});var z0e=_((DHt,J0e)=>{var ppt=gd(),hpt=qy();function gpt(t,e){return t&&ppt(e,hpt(e),t)}J0e.exports=gpt});var Z0e=_((PHt,X0e)=>{var dpt=gd(),mpt=GP();function ypt(t,e){return dpt(t,mpt(t),e)}X0e.exports=ypt});var b8=_((SHt,$0e)=>{var Ept=qP(),Cpt=tS(),wpt=GP(),Ipt=KN(),Bpt=Object.getOwnPropertySymbols,vpt=Bpt?function(t){for(var e=[];t;)Ept(e,wpt(t)),t=Cpt(t);return e}:Ipt;$0e.exports=vpt});var tge=_((xHt,ege)=>{var Dpt=gd(),Ppt=b8();function Spt(t,e){return Dpt(t,Ppt(t),e)}ege.exports=Spt});var k8=_((bHt,rge)=>{var xpt=VN(),bpt=b8(),kpt=qy();function Qpt(t){return xpt(t,kpt,bpt)}rge.exports=Qpt});var ige=_((kHt,nge)=>{var Fpt=Object.prototype,Tpt=Fpt.hasOwnProperty;function Rpt(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&Tpt.call(t,"index")&&(r.index=t.index,r.input=t.input),r}nge.exports=Rpt});var oge=_((QHt,sge)=>{var Npt=$P();function Lpt(t,e){var r=e?Npt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}sge.exports=Lpt});var lge=_((FHt,age)=>{var Mpt=/\w*$/;function Opt(t){var e=new t.constructor(t.source,Mpt.exec(t));return e.lastIndex=t.lastIndex,e}age.exports=Opt});var pge=_((THt,fge)=>{var cge=fd(),uge=cge?cge.prototype:void 0,Age=uge?uge.valueOf:void 0;function Upt(t){return Age?Object(Age.call(t)):{}}fge.exports=Upt});var gge=_((RHt,hge)=>{var _pt=$P(),Hpt=oge(),jpt=lge(),qpt=pge(),Gpt=lL(),Ypt="[object Boolean]",Wpt="[object Date]",Vpt="[object Map]",Kpt="[object Number]",Jpt="[object RegExp]",zpt="[object Set]",Xpt="[object String]",Zpt="[object Symbol]",$pt="[object ArrayBuffer]",eht="[object DataView]",tht="[object Float32Array]",rht="[object Float64Array]",nht="[object Int8Array]",iht="[object Int16Array]",sht="[object Int32Array]",oht="[object Uint8Array]",aht="[object Uint8ClampedArray]",lht="[object Uint16Array]",cht="[object Uint32Array]";function uht(t,e,r){var o=t.constructor;switch(e){case $pt:return _pt(t);case Ypt:case Wpt:return new o(+t);case eht:return Hpt(t,r);case tht:case rht:case nht:case iht:case sht:case oht:case aht:case lht:case cht:return Gpt(t,r);case Vpt:return new o;case Kpt:case Xpt:return new o(t);case Jpt:return jpt(t);case zpt:return new o;case Zpt:return qpt(t)}}hge.exports=uht});var mge=_((NHt,dge)=>{var Aht=qI(),fht=Ju(),pht="[object Map]";function hht(t){return fht(t)&&Aht(t)==pht}dge.exports=hht});var wge=_((LHt,Cge)=>{var ght=mge(),dht=WP(),yge=VP(),Ege=yge&&yge.isMap,mht=Ege?dht(Ege):ght;Cge.exports=mht});var Bge=_((MHt,Ige)=>{var yht=qI(),Eht=Ju(),Cht="[object Set]";function wht(t){return Eht(t)&&yht(t)==Cht}Ige.exports=wht});var Sge=_((OHt,Pge)=>{var Iht=Bge(),Bht=WP(),vge=VP(),Dge=vge&&vge.isSet,vht=Dge?Bht(Dge):Iht;Pge.exports=vht});var Q8=_((UHt,Qge)=>{var Dht=HP(),Pht=W0e(),Sht=rS(),xht=K0e(),bht=z0e(),kht=aL(),Qht=eS(),Fht=Z0e(),Tht=tge(),Rht=ZN(),Nht=k8(),Lht=qI(),Mht=ige(),Oht=gge(),Uht=cL(),_ht=Hl(),Hht=OI(),jht=wge(),qht=il(),Ght=Sge(),Yht=zP(),Wht=qy(),Vht=1,Kht=2,Jht=4,xge="[object Arguments]",zht="[object Array]",Xht="[object Boolean]",Zht="[object Date]",$ht="[object Error]",bge="[object Function]",e0t="[object GeneratorFunction]",t0t="[object Map]",r0t="[object Number]",kge="[object Object]",n0t="[object RegExp]",i0t="[object Set]",s0t="[object String]",o0t="[object Symbol]",a0t="[object WeakMap]",l0t="[object ArrayBuffer]",c0t="[object DataView]",u0t="[object Float32Array]",A0t="[object Float64Array]",f0t="[object Int8Array]",p0t="[object Int16Array]",h0t="[object Int32Array]",g0t="[object Uint8Array]",d0t="[object Uint8ClampedArray]",m0t="[object Uint16Array]",y0t="[object Uint32Array]",ri={};ri[xge]=ri[zht]=ri[l0t]=ri[c0t]=ri[Xht]=ri[Zht]=ri[u0t]=ri[A0t]=ri[f0t]=ri[p0t]=ri[h0t]=ri[t0t]=ri[r0t]=ri[kge]=ri[n0t]=ri[i0t]=ri[s0t]=ri[o0t]=ri[g0t]=ri[d0t]=ri[m0t]=ri[y0t]=!0;ri[$ht]=ri[bge]=ri[a0t]=!1;function pk(t,e,r,o,a,n){var u,A=e&Vht,p=e&Kht,h=e&Jht;if(r&&(u=a?r(t,o,a,n):r(t)),u!==void 0)return u;if(!qht(t))return t;var E=_ht(t);if(E){if(u=Mht(t),!A)return Qht(t,u)}else{var I=Lht(t),v=I==bge||I==e0t;if(Hht(t))return kht(t,A);if(I==kge||I==xge||v&&!a){if(u=p||v?{}:Uht(t),!A)return p?Tht(t,bht(u,t)):Fht(t,xht(u,t))}else{if(!ri[I])return a?t:{};u=Oht(t,I,A)}}n||(n=new Dht);var b=n.get(t);if(b)return b;n.set(t,u),Ght(t)?t.forEach(function(L){u.add(pk(L,e,r,L,t,n))}):jht(t)&&t.forEach(function(L,U){u.set(U,pk(L,e,r,U,t,n))});var C=h?p?Nht:Rht:p?Wht:Yht,T=E?void 0:C(t);return Pht(T||t,function(L,U){T&&(U=L,L=t[U]),Sht(u,U,pk(L,e,r,U,t,n))}),u}Qge.exports=pk});var F8=_((_Ht,Fge)=>{var E0t=Q8(),C0t=1,w0t=4;function I0t(t){return E0t(t,C0t|w0t)}Fge.exports=I0t});var T8=_((HHt,Tge)=>{var B0t=v_();function v0t(t,e,r){return t==null?t:B0t(t,e,r)}Tge.exports=v0t});var Oge=_((VHt,Mge)=>{var D0t=Object.prototype,P0t=D0t.hasOwnProperty;function S0t(t,e){return t!=null&&P0t.call(t,e)}Mge.exports=S0t});var _ge=_((KHt,Uge)=>{var x0t=Oge(),b0t=D_();function k0t(t,e){return t!=null&&b0t(t,e,x0t)}Uge.exports=k0t});var jge=_((JHt,Hge)=>{function Q0t(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}Hge.exports=Q0t});var Gge=_((zHt,qge)=>{var F0t=Zb(),T0t=gU();function R0t(t,e){return e.length<2?t:F0t(t,T0t(e,0,-1))}qge.exports=R0t});var N8=_((XHt,Yge)=>{var N0t=jd(),L0t=jge(),M0t=Gge(),O0t=aC();function U0t(t,e){return e=N0t(e,t),t=M0t(t,e),t==null||delete t[O0t(L0t(e))]}Yge.exports=U0t});var L8=_((ZHt,Wge)=>{var _0t=N8();function H0t(t,e){return t==null?!0:_0t(t,e)}Wge.exports=H0t});var Xge=_((S6t,G0t)=>{G0t.exports={name:"@yarnpkg/cli",version:"4.0.2",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^3.2.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var Y8=_((n5t,ude)=>{"use strict";ude.exports=function(e,r){r===!0&&(r=0);var o="";if(typeof e=="string")try{o=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(o=e.protocol);var a=o.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var fde=_((i5t,Ade)=>{"use strict";var cgt=Y8();function ugt(t){var e={protocols:[],protocol:null,port:null,resource:"",host:"",user:"",password:"",pathname:"",hash:"",search:"",href:t,query:{},parse_failed:!1};try{var r=new URL(t);e.protocols=cgt(r),e.protocol=e.protocols[0],e.port=r.port,e.resource=r.hostname,e.host=r.host,e.user=r.username||"",e.password=r.password||"",e.pathname=r.pathname,e.hash=r.hash.slice(1),e.search=r.search.slice(1),e.href=r.href,e.query=Object.fromEntries(r.searchParams)}catch{e.protocols=["file"],e.protocol=e.protocols[0],e.port="",e.resource="",e.user="",e.pathname="",e.hash="",e.search="",e.href=t,e.query={},e.parse_failed=!0}return e}Ade.exports=ugt});var gde=_((s5t,hde)=>{"use strict";var Agt=fde();function fgt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var pgt=fgt(Agt),hgt="text/plain",ggt="us-ascii",pde=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),dgt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:o,data:a,hash:n}=r.groups,u=o.split(";");n=e?"":n;let A=!1;u[u.length-1]==="base64"&&(u.pop(),A=!0);let p=(u.shift()||"").toLowerCase(),E=[...u.map(I=>{let[v,b=""]=I.split("=").map(C=>C.trim());return v==="charset"&&(b=b.toLowerCase(),b===ggt)?"":`${v}${b?`=${b}`:""}`}).filter(Boolean)];return A&&E.push("base64"),(E.length>0||p&&p!==hgt)&&E.unshift(p),`data:${E.join(";")},${A?a.trim():a}${n?`#${n}`:""}`};function mgt(t,e){if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},t=t.trim(),/^data:/i.test(t))return dgt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let u=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,A=0,p="";for(;;){let E=u.exec(a.pathname);if(!E)break;let I=E[0],v=E.index,b=a.pathname.slice(A,v);p+=b.replace(/\/{2,}/g,"/"),p+=I,A=v+I.length}let h=a.pathname.slice(A,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let u=a.pathname.split("/"),A=u[u.length-1];pde(A,e.removeDirectoryIndex)&&(u=u.slice(0,-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let u of[...a.searchParams.keys()])pde(u,e.removeQueryParameters)&&a.searchParams.delete(u);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var W8=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,o=n=>{let u=new Error(n);throw u.subject_url=t,u};(typeof t!="string"||!t.trim())&&o("Invalid url."),t.length>W8.MAX_INPUT_LENGTH&&o("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=mgt(t,e));let a=pgt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):o("URL parsing failed.")}return a};W8.MAX_INPUT_LENGTH=2048;hde.exports=W8});var yde=_((o5t,mde)=>{"use strict";var ygt=Y8();function dde(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=ygt(t);if(t=t.substring(t.indexOf("://")+3),dde(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var Egt=gde(),Ede=yde();function Cgt(t){var e=Egt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),Ede(e.protocols)||e.protocols.length===0&&Ede(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}Cde.exports=Cgt});var Bde=_((l5t,Ide)=>{"use strict";var wgt=wde();function V8(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=/^([a-z\d-]{1,39})\/([-\.\w]{1,100})$/i;e.test(t)&&(t="https://github.com/"+t);var r=wgt(t),o=r.resource.split("."),a=null;switch(r.toString=function(L){return V8.stringify(this,L)},r.source=o.length>2?o.slice(1-o.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=o[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var u=a.indexOf("-",2),A=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),I=a.indexOf("raw",2),v=a.indexOf("edit",2);n=u>0?u-1:A>0?A-1:p>0?p-1:h>0?h-1:E>0?E-1:I>0?I-1:v>0?v-1:n,r.owner=a.slice(0,n).join("/"),r.name=a[n],h&&(r.commit=a[n+2])}r.ref="",r.filepathtype="",r.filepath="";var b=a.length>n&&a[n+1]==="-"?n+1:n;a.length>b+2&&["raw","src","blob","tree","edit"].indexOf(a[b+1])>=0&&(r.filepathtype=a[b+1],r.ref=a[b+2],a.length>b+3&&(r.filepath=a.slice(b+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var C=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,T=C.exec(r.pathname);return T!=null&&(r.source="bitbucket-server",T[1]==="users"?r.owner="~"+T[2]:r.owner=T[2],r.organization=r.owner,r.name=T[3],a=T[4].split("/"),a.length>1&&(["raw","browse"].indexOf(a[1])>=0?(r.filepathtype=a[1],a.length>2&&(r.filepath=a.slice(2).join("/"))):a[1]==="commits"&&a.length>2&&(r.commit=a[2])),r.full_name=r.owner+"/"+r.name,r.query.at?r.ref=r.query.at:r.ref=""),r}V8.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",o=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+o+"@"+t.resource+r+"/"+t.full_name+a:o+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+o+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?Igt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+Bgt(t)+a;default:return t.href}};function Igt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function Bgt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}Ide.exports=V8});var Ude=_((H9t,Ode)=>{var Rgt=jx(),Ngt=eS(),Lgt=Hl(),Mgt=fE(),Ogt=B_(),Ugt=aC(),_gt=R1();function Hgt(t){return Lgt(t)?Rgt(t,Ugt):Mgt(t)?[t]:Ngt(Ogt(_gt(t)))}Ode.exports=Hgt});function Ygt(t,e){return e===1&&Ggt.has(t[0])}function I2(t){let e=Array.isArray(t)?t:(0,jde.default)(t);return e.map((o,a)=>jgt.test(o)?`[${o}]`:qgt.test(o)&&!Ygt(e,a)?`.${o}`:`[${JSON.stringify(o)}]`).join("").replace(/^\./,"")}function Wgt(t,e){let r=[];if(e.methodName!==null&&r.push(de.pretty(t,e.methodName,de.Type.CODE)),e.file!==null){let o=[];o.push(de.pretty(t,e.file,de.Type.PATH)),e.line!==null&&(o.push(de.pretty(t,e.line,de.Type.NUMBER)),e.column!==null&&o.push(de.pretty(t,e.column,de.Type.NUMBER))),r.push(`(${o.join(de.pretty(t,":","grey"))})`)}return r.join(" ")}function mk(t,{manifestUpdates:e,reportedErrors:r},{fix:o}={}){let a=new Map,n=new Map,u=[...r.keys()].map(A=>[A,new Map]);for(let[A,p]of[...u,...e]){let h=r.get(A)?.map(b=>({text:b,fixable:!1}))??[],E=!1,I=t.getWorkspaceByCwd(A),v=I.manifest.exportTo({});for(let[b,C]of p){if(C.size>1){let T=[...C].map(([L,U])=>{let J=de.pretty(t.configuration,L,de.Type.INSPECT),te=U.size>0?Wgt(t.configuration,U.values().next().value):null;return te!==null?` +`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function Vft(t,e={}){if(Array.isArray(e.scale))return e.scale.map(o=>({...o}));let r=[];for(let o=1;o{B0e.exports=i8()});var S0e=_((k8t,D0e)=>{"use strict";var Jft=lk(),m8=class extends Jft{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=o=>this.styles.primary.underline(o);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),o=await this.prefix(),a=await this.separator(),n=await this.message(),u=await this.format(),A=await this.error()||await this.hint(),p=await this.footer(),h=[o,n,a,u].join(" ");this.state.prompt=h,A&&!h.includes(A)&&(h+=" "+A),this.clear(e),this.write([r,h,p].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};D0e.exports=m8});var b0e=_((Q8t,P0e)=>{"use strict";var zft=bh(),y8=class extends zft{constructor(e){if(super(e),typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let o=await super.toChoices(e,r);if(o.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>o.length)throw new Error("Please specify the index of the correct answer from the list of choices");return o}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};P0e.exports=y8});var k0e=_(E8=>{"use strict";var x0e=No(),As=(t,e)=>{x0e.defineExport(E8,t,e),x0e.defineExport(E8,t.toLowerCase(),e)};As("AutoComplete",()=>Lhe());As("BasicAuth",()=>jhe());As("Confirm",()=>Whe());As("Editable",()=>Vhe());As("Form",()=>ak());As("Input",()=>i8());As("Invisible",()=>t0e());As("List",()=>n0e());As("MultiSelect",()=>s0e());As("Numeral",()=>l0e());As("Password",()=>u0e());As("Scale",()=>p0e());As("Select",()=>bh());As("Snippet",()=>y0e());As("Sort",()=>C0e());As("Survey",()=>I0e());As("Text",()=>v0e());As("Toggle",()=>S0e());As("Quiz",()=>b0e())});var F0e=_((R8t,Q0e)=>{Q0e.exports={ArrayPrompt:u2(),AuthPrompt:Z_(),BooleanPrompt:lk(),NumberPrompt:c8(),StringPrompt:Wd()}});var f2=_((T8t,T0e)=>{"use strict";var R0e=ve("assert"),w8=ve("events"),xh=No(),Jc=class extends w8{constructor(e,r){super(),this.options=xh.merge({},e),this.answers={...r}}register(e,r){if(xh.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}R0e.equal(typeof r,"function","expected a function");let o=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[o]=r:this.prompts[o]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(xh.merge({},this.options,r))}catch(o){return Promise.reject(o)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=xh.merge({},this.options,e),{type:o,name:a}=e,{set:n,get:u}=xh;if(typeof o=="function"&&(o=await o.call(this,e,this.answers)),!o)return this.answers[a];R0e(this.prompts[o],`Prompt "${o}" is not registered`);let A=new this.prompts[o](r),p=u(this.answers,a);A.state.answers=this.answers,A.enquirer=this,a&&A.on("submit",E=>{this.emit("answer",a,E,A),n(this.answers,a,E)});let h=A.emit.bind(A);return A.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",A,this),r.autofill&&p!=null?(A.value=A.input=p,r.autofill==="show"&&await A.submit()):p=A.value=await A.run(),p}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||gC()}static get prompts(){return k0e()}static get types(){return F0e()}static get prompt(){let e=(r,...o)=>{let a=new this(...o),n=a.emit.bind(a);return a.emit=(...u)=>(e.emit(...u),n(...u)),a.prompt(r)};return xh.mixinEmitter(e,new w8),e}};xh.mixinEmitter(Jc,new w8);var C8=Jc.prompts;for(let t of Object.keys(C8)){let e=t.toLowerCase(),r=o=>new C8[t](o).run();Jc.prompt[e]=r,Jc[e]=r,Jc[t]||Reflect.defineProperty(Jc,t,{get:()=>C8[t]})}var A2=t=>{xh.defineExport(Jc,t,()=>Jc.types[t])};A2("ArrayPrompt");A2("AuthPrompt");A2("BooleanPrompt");A2("NumberPrompt");A2("StringPrompt");T0e.exports=Jc});var d2=_((dHt,H0e)=>{var rpt=zx();function npt(t,e,r){var o=t==null?void 0:rpt(t,e);return o===void 0?r:o}H0e.exports=npt});var G0e=_((IHt,j0e)=>{function ipt(t,e){for(var r=-1,o=t==null?0:t.length;++r{var spt=dd(),opt=zS();function apt(t,e){return t&&spt(e,opt(e),t)}Y0e.exports=apt});var V0e=_((vHt,K0e)=>{var lpt=dd(),cpt=Gy();function upt(t,e){return t&&lpt(e,cpt(e),t)}K0e.exports=upt});var z0e=_((DHt,J0e)=>{var Apt=dd(),fpt=GS();function ppt(t,e){return Apt(t,fpt(t),e)}J0e.exports=ppt});var P8=_((SHt,X0e)=>{var hpt=jS(),gpt=tP(),dpt=GS(),mpt=WN(),ypt=Object.getOwnPropertySymbols,Ept=ypt?function(t){for(var e=[];t;)hpt(e,dpt(t)),t=gpt(t);return e}:mpt;X0e.exports=Ept});var $0e=_((PHt,Z0e)=>{var Cpt=dd(),wpt=P8();function Ipt(t,e){return Cpt(t,wpt(t),e)}Z0e.exports=Ipt});var b8=_((bHt,ege)=>{var Bpt=YN(),vpt=P8(),Dpt=Gy();function Spt(t){return Bpt(t,Dpt,vpt)}ege.exports=Spt});var rge=_((xHt,tge)=>{var Ppt=Object.prototype,bpt=Ppt.hasOwnProperty;function xpt(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&bpt.call(t,"index")&&(r.index=t.index,r.input=t.input),r}tge.exports=xpt});var ige=_((kHt,nge)=>{var kpt=$S();function Qpt(t,e){var r=e?kpt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}nge.exports=Qpt});var oge=_((QHt,sge)=>{var Fpt=/\w*$/;function Rpt(t){var e=new t.constructor(t.source,Fpt.exec(t));return e.lastIndex=t.lastIndex,e}sge.exports=Rpt});var Age=_((FHt,uge)=>{var age=pd(),lge=age?age.prototype:void 0,cge=lge?lge.valueOf:void 0;function Tpt(t){return cge?Object(cge.call(t)):{}}uge.exports=Tpt});var pge=_((RHt,fge)=>{var Npt=$S(),Lpt=ige(),Opt=oge(),Mpt=Age(),Upt=oL(),_pt="[object Boolean]",Hpt="[object Date]",qpt="[object Map]",jpt="[object Number]",Gpt="[object RegExp]",Ypt="[object Set]",Wpt="[object String]",Kpt="[object Symbol]",Vpt="[object ArrayBuffer]",Jpt="[object DataView]",zpt="[object Float32Array]",Xpt="[object Float64Array]",Zpt="[object Int8Array]",$pt="[object Int16Array]",eht="[object Int32Array]",tht="[object Uint8Array]",rht="[object Uint8ClampedArray]",nht="[object Uint16Array]",iht="[object Uint32Array]";function sht(t,e,r){var o=t.constructor;switch(e){case Vpt:return Npt(t);case _pt:case Hpt:return new o(+t);case Jpt:return Lpt(t,r);case zpt:case Xpt:case Zpt:case $pt:case eht:case tht:case rht:case nht:case iht:return Upt(t,r);case qpt:return new o;case jpt:case Wpt:return new o(t);case Gpt:return Opt(t);case Ypt:return new o;case Kpt:return Mpt(t)}}fge.exports=sht});var gge=_((THt,hge)=>{var oht=GI(),aht=Ju(),lht="[object Map]";function cht(t){return aht(t)&&oht(t)==lht}hge.exports=cht});var Ege=_((NHt,yge)=>{var uht=gge(),Aht=WS(),dge=KS(),mge=dge&&dge.isMap,fht=mge?Aht(mge):uht;yge.exports=fht});var wge=_((LHt,Cge)=>{var pht=GI(),hht=Ju(),ght="[object Set]";function dht(t){return hht(t)&&pht(t)==ght}Cge.exports=dht});var Dge=_((OHt,vge)=>{var mht=wge(),yht=WS(),Ige=KS(),Bge=Ige&&Ige.isSet,Eht=Bge?yht(Bge):mht;vge.exports=Eht});var x8=_((MHt,xge)=>{var Cht=HS(),wht=G0e(),Iht=rP(),Bht=W0e(),vht=V0e(),Dht=sL(),Sht=eP(),Pht=z0e(),bht=$0e(),xht=zN(),kht=b8(),Qht=GI(),Fht=rge(),Rht=pge(),Tht=aL(),Nht=Hl(),Lht=UI(),Oht=Ege(),Mht=il(),Uht=Dge(),_ht=zS(),Hht=Gy(),qht=1,jht=2,Ght=4,Sge="[object Arguments]",Yht="[object Array]",Wht="[object Boolean]",Kht="[object Date]",Vht="[object Error]",Pge="[object Function]",Jht="[object GeneratorFunction]",zht="[object Map]",Xht="[object Number]",bge="[object Object]",Zht="[object RegExp]",$ht="[object Set]",e0t="[object String]",t0t="[object Symbol]",r0t="[object WeakMap]",n0t="[object ArrayBuffer]",i0t="[object DataView]",s0t="[object Float32Array]",o0t="[object Float64Array]",a0t="[object Int8Array]",l0t="[object Int16Array]",c0t="[object Int32Array]",u0t="[object Uint8Array]",A0t="[object Uint8ClampedArray]",f0t="[object Uint16Array]",p0t="[object Uint32Array]",ri={};ri[Sge]=ri[Yht]=ri[n0t]=ri[i0t]=ri[Wht]=ri[Kht]=ri[s0t]=ri[o0t]=ri[a0t]=ri[l0t]=ri[c0t]=ri[zht]=ri[Xht]=ri[bge]=ri[Zht]=ri[$ht]=ri[e0t]=ri[t0t]=ri[u0t]=ri[A0t]=ri[f0t]=ri[p0t]=!0;ri[Vht]=ri[Pge]=ri[r0t]=!1;function Ak(t,e,r,o,a,n){var u,A=e&qht,p=e&jht,h=e&Ght;if(r&&(u=a?r(t,o,a,n):r(t)),u!==void 0)return u;if(!Mht(t))return t;var E=Nht(t);if(E){if(u=Fht(t),!A)return Sht(t,u)}else{var I=Qht(t),v=I==Pge||I==Jht;if(Lht(t))return Dht(t,A);if(I==bge||I==Sge||v&&!a){if(u=p||v?{}:Tht(t),!A)return p?bht(t,vht(u,t)):Pht(t,Bht(u,t))}else{if(!ri[I])return a?t:{};u=Rht(t,I,A)}}n||(n=new Cht);var x=n.get(t);if(x)return x;n.set(t,u),Uht(t)?t.forEach(function(L){u.add(Ak(L,e,r,L,t,n))}):Oht(t)&&t.forEach(function(L,U){u.set(U,Ak(L,e,r,U,t,n))});var C=h?p?kht:xht:p?Hht:_ht,R=E?void 0:C(t);return wht(R||t,function(L,U){R&&(U=L,L=t[U]),Iht(u,U,Ak(L,e,r,U,t,n))}),u}xge.exports=Ak});var k8=_((UHt,kge)=>{var h0t=x8(),g0t=1,d0t=4;function m0t(t){return h0t(t,g0t|d0t)}kge.exports=m0t});var Q8=_((_Ht,Qge)=>{var y0t=I_();function E0t(t,e,r){return t==null?t:y0t(t,e,r)}Qge.exports=E0t});var Lge=_((WHt,Nge)=>{var C0t=Object.prototype,w0t=C0t.hasOwnProperty;function I0t(t,e){return t!=null&&w0t.call(t,e)}Nge.exports=I0t});var Mge=_((KHt,Oge)=>{var B0t=Lge(),v0t=B_();function D0t(t,e){return t!=null&&v0t(t,e,B0t)}Oge.exports=D0t});var _ge=_((VHt,Uge)=>{function S0t(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}Uge.exports=S0t});var qge=_((JHt,Hge)=>{var P0t=zx(),b0t=pU();function x0t(t,e){return e.length<2?t:P0t(t,b0t(e,0,-1))}Hge.exports=x0t});var R8=_((zHt,jge)=>{var k0t=jd(),Q0t=_ge(),F0t=qge(),R0t=lC();function T0t(t,e){return e=k0t(e,t),t=F0t(t,e),t==null||delete t[R0t(Q0t(e))]}jge.exports=T0t});var T8=_((XHt,Gge)=>{var N0t=R8();function L0t(t,e){return t==null?!0:N0t(t,e)}Gge.exports=L0t});var Jge=_((S6t,U0t)=>{U0t.exports={name:"@yarnpkg/cli",version:"4.1.1",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^3.2.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var j8=_((n5t,ade)=>{"use strict";ade.exports=function(e,r){r===!0&&(r=0);var o="";if(typeof e=="string")try{o=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(o=e.protocol);var a=o.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var cde=_((i5t,lde)=>{"use strict";var igt=j8();function sgt(t){var e={protocols:[],protocol:null,port:null,resource:"",host:"",user:"",password:"",pathname:"",hash:"",search:"",href:t,query:{},parse_failed:!1};try{var r=new URL(t);e.protocols=igt(r),e.protocol=e.protocols[0],e.port=r.port,e.resource=r.hostname,e.host=r.host,e.user=r.username||"",e.password=r.password||"",e.pathname=r.pathname,e.hash=r.hash.slice(1),e.search=r.search.slice(1),e.href=r.href,e.query=Object.fromEntries(r.searchParams)}catch{e.protocols=["file"],e.protocol=e.protocols[0],e.port="",e.resource="",e.user="",e.pathname="",e.hash="",e.search="",e.href=t,e.query={},e.parse_failed=!0}return e}lde.exports=sgt});var fde=_((s5t,Ade)=>{"use strict";var ogt=cde();function agt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var lgt=agt(ogt),cgt="text/plain",ugt="us-ascii",ude=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),Agt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:o,data:a,hash:n}=r.groups,u=o.split(";");n=e?"":n;let A=!1;u[u.length-1]==="base64"&&(u.pop(),A=!0);let p=(u.shift()||"").toLowerCase(),E=[...u.map(I=>{let[v,x=""]=I.split("=").map(C=>C.trim());return v==="charset"&&(x=x.toLowerCase(),x===ugt)?"":`${v}${x?`=${x}`:""}`}).filter(Boolean)];return A&&E.push("base64"),(E.length>0||p&&p!==cgt)&&E.unshift(p),`data:${E.join(";")},${A?a.trim():a}${n?`#${n}`:""}`};function fgt(t,e){if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},t=t.trim(),/^data:/i.test(t))return Agt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let u=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,A=0,p="";for(;;){let E=u.exec(a.pathname);if(!E)break;let I=E[0],v=E.index,x=a.pathname.slice(A,v);p+=x.replace(/\/{2,}/g,"/"),p+=I,A=v+I.length}let h=a.pathname.slice(A,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let u=a.pathname.split("/"),A=u[u.length-1];ude(A,e.removeDirectoryIndex)&&(u=u.slice(0,-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let u of[...a.searchParams.keys()])ude(u,e.removeQueryParameters)&&a.searchParams.delete(u);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var G8=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,o=n=>{let u=new Error(n);throw u.subject_url=t,u};(typeof t!="string"||!t.trim())&&o("Invalid url."),t.length>G8.MAX_INPUT_LENGTH&&o("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=fgt(t,e));let a=lgt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):o("URL parsing failed.")}return a};G8.MAX_INPUT_LENGTH=2048;Ade.exports=G8});var gde=_((o5t,hde)=>{"use strict";var pgt=j8();function pde(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=pgt(t);if(t=t.substring(t.indexOf("://")+3),pde(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var hgt=fde(),dde=gde();function ggt(t){var e=hgt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),dde(e.protocols)||e.protocols.length===0&&dde(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}mde.exports=ggt});var Cde=_((l5t,Ede)=>{"use strict";var dgt=yde();function Y8(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=/^([a-z\d-]{1,39})\/([-\.\w]{1,100})$/i;e.test(t)&&(t="https://github.com/"+t);var r=dgt(t),o=r.resource.split("."),a=null;switch(r.toString=function(L){return Y8.stringify(this,L)},r.source=o.length>2?o.slice(1-o.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=o[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var u=a.indexOf("-",2),A=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),I=a.indexOf("raw",2),v=a.indexOf("edit",2);n=u>0?u-1:A>0?A-1:p>0?p-1:h>0?h-1:E>0?E-1:I>0?I-1:v>0?v-1:n,r.owner=a.slice(0,n).join("/"),r.name=a[n],h&&(r.commit=a[n+2])}r.ref="",r.filepathtype="",r.filepath="";var x=a.length>n&&a[n+1]==="-"?n+1:n;a.length>x+2&&["raw","src","blob","tree","edit"].indexOf(a[x+1])>=0&&(r.filepathtype=a[x+1],r.ref=a[x+2],a.length>x+3&&(r.filepath=a.slice(x+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var C=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,R=C.exec(r.pathname);return R!=null&&(r.source="bitbucket-server",R[1]==="users"?r.owner="~"+R[2]:r.owner=R[2],r.organization=r.owner,r.name=R[3],a=R[4].split("/"),a.length>1&&(["raw","browse"].indexOf(a[1])>=0?(r.filepathtype=a[1],a.length>2&&(r.filepath=a.slice(2).join("/"))):a[1]==="commits"&&a.length>2&&(r.commit=a[2])),r.full_name=r.owner+"/"+r.name,r.query.at?r.ref=r.query.at:r.ref=""),r}Y8.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",o=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+o+"@"+t.resource+r+"/"+t.full_name+a:o+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+o+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?mgt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+ygt(t)+a;default:return t.href}};function mgt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function ygt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}Ede.exports=Y8});var Lde=_((H9t,Nde)=>{var xgt=Hb(),kgt=eP(),Qgt=Hl(),Fgt=pE(),Rgt=w_(),Tgt=lC(),Ngt=N1();function Lgt(t){return Qgt(t)?xgt(t,Tgt):Fgt(t)?[t]:kgt(Rgt(Ngt(t)))}Nde.exports=Lgt});function _gt(t,e){return e===1&&Ugt.has(t[0])}function B2(t){let e=Array.isArray(t)?t:(0,Ude.default)(t);return e.map((o,a)=>Ogt.test(o)?`[${o}]`:Mgt.test(o)&&!_gt(e,a)?`.${o}`:`[${JSON.stringify(o)}]`).join("").replace(/^\./,"")}function Hgt(t,e){let r=[];if(e.methodName!==null&&r.push(de.pretty(t,e.methodName,de.Type.CODE)),e.file!==null){let o=[];o.push(de.pretty(t,e.file,de.Type.PATH)),e.line!==null&&(o.push(de.pretty(t,e.line,de.Type.NUMBER)),e.column!==null&&o.push(de.pretty(t,e.column,de.Type.NUMBER))),r.push(`(${o.join(de.pretty(t,":","grey"))})`)}return r.join(" ")}function gk(t,{manifestUpdates:e,reportedErrors:r},{fix:o}={}){let a=new Map,n=new Map,u=[...r.keys()].map(A=>[A,new Map]);for(let[A,p]of[...u,...e]){let h=r.get(A)?.map(x=>({text:x,fixable:!1}))??[],E=!1,I=t.getWorkspaceByCwd(A),v=I.manifest.exportTo({});for(let[x,C]of p){if(C.size>1){let R=[...C].map(([L,U])=>{let J=de.pretty(t.configuration,L,de.Type.INSPECT),te=U.size>0?Hgt(t.configuration,U.values().next().value):null;return te!==null?` ${J} at ${te}`:` -${J}`}).join("");h.push({text:`Conflict detected in constraint targeting ${de.pretty(t.configuration,b,de.Type.CODE)}; conflicting values are:${T}`,fixable:!1})}else{let[[T]]=C,L=(0,_de.default)(v,b);if(JSON.stringify(L)===JSON.stringify(T))continue;if(!o){let U=typeof L>"u"?`Missing field ${de.pretty(t.configuration,b,de.Type.CODE)}; expected ${de.pretty(t.configuration,T,de.Type.INSPECT)}`:typeof T>"u"?`Extraneous field ${de.pretty(t.configuration,b,de.Type.CODE)} currently set to ${de.pretty(t.configuration,L,de.Type.INSPECT)}`:`Invalid field ${de.pretty(t.configuration,b,de.Type.CODE)}; expected ${de.pretty(t.configuration,T,de.Type.INSPECT)}, found ${de.pretty(t.configuration,L,de.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof T>"u"?(0,qde.default)(v,b):(0,Hde.default)(v,b,T),E=!0}E&&a.set(I,v)}h.length>0&&n.set(I,h)}return{changedWorkspaces:a,remainingErrors:n}}function Gde(t,{configuration:e}){let r={children:[]};for(let[o,a]of t){let n=[];for(let A of a){let p=A.text.split(/\n/);A.fixable&&(p[0]=`${de.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:de.tuple(de.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:de.tuple(de.Type.NO_HINT,h)}))})}let u={value:de.tuple(de.Type.LOCATOR,o.anchoredLocator),children:je.sortMap(n,A=>A.value[1])};r.children.push(u)}return r.children=je.sortMap(r.children,o=>o.value[1]),r}var _de,Hde,jde,qde,CC,jgt,qgt,Ggt,B2=Et(()=>{Ye();_de=$e(g2()),Hde=$e(T8()),jde=$e(Ude()),qde=$e(L8()),CC=class{constructor(e){this.indexedFields=e;this.items=[];this.indexes={};this.clear()}clear(){this.items=[];for(let e of this.indexedFields)this.indexes[e]=new Map}insert(e){this.items.push(e);for(let r of this.indexedFields){let o=Object.hasOwn(e,r)?e[r]:void 0;if(typeof o>"u")continue;je.getArrayWithDefault(this.indexes[r],o).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let o=[],a;for(let[u,A]of r){let p=u,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){o.push([p,A]);continue}let E=new Set(h.get(A)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let I of a)E.has(I)||a.delete(I);if(a.size===0)break}let n=[...a??[]];return o.length>0&&(n=n.filter(u=>{for(let[A,p]of o)if(!(typeof p<"u"?Object.hasOwn(u,A)&&u[A]===p:Object.hasOwn(u,A)===!1))return!1;return!0})),n}},jgt=/^[0-9]+$/,qgt=/^[a-zA-Z0-9_]+$/,Ggt=new Set(["scripts",...Mt.allDependencies])});var Yde=_(($9t,aH)=>{var Vgt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(!t.type.is_variable(A)&&!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(t.type.is_integer(A)&&A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else{var p=new t.type.Term("length",[u,new t.type.Num(0,!1),A]);t.type.is_integer(A)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),o.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;I--)E[I].equals(E[I-1])&&E.splice(I,1);for(var v=new t.type.Term("[]"),I=E.length-1;I>=0;I--)v=new t.type.Term(".",[E[I],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"msort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h=u;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=p.sort(t.compare),I=new t.type.Term("[]"),v=E.length-1;v>=0;v--)I=new t.type.Term(".",[E[v],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,A])),a.substitution,a)])}}},"keysort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h,E=u;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){o.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){o.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),E=E.args[1]}if(t.type.is_variable(E))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))o.throw_error(t.error.type("list",u,n.indicator));else{for(var I=p.sort(t.compare),v=new t.type.Term("[]"),b=I.length-1;b>=0;b--)v=new t.type.Term(".",[new t.type.Term("-",[I[b],I[b].pair]),v]),delete I[b].pair;o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"take/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;if(h===0){for(var v=new t.type.Term("[]"),h=E.length-1;h>=0;h--)v=new t.type.Term(".",[E[h],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,p])),a.substitution,a)])}}},"drop/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;h===0&&o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p])),a.substitution,a)])}},"reverse/2":function(o,a,n){var u=n.args[0],A=n.args[1],p=t.type.is_instantiated_list(u),h=t.type.is_instantiated_list(A);if(t.type.is_variable(u)&&t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(u)&&!t.type.is_fully_list(u))o.throw_error(t.error.type("list",u,n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!p&&!h)o.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?u:A,I=new t.type.Term("[]",[]);E.indicator==="./2";)I=new t.type.Term(".",[E.args[0],I]),E=E.args[1];o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p?A:u])),a.substitution,a)])}},"list_to_set/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else{for(var p=u,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=[],I=new t.type.Term("[]",[]),v,b=0;b=0;b--)I=new t.type.Term(".",[E[b],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[A,I])),a.substitution,a)])}}}}},r=["append/2","append/3","member/2","permutation/2","maplist/2","maplist/3","maplist/4","maplist/5","maplist/6","maplist/7","maplist/8","include/3","exclude/3","foldl/4","sum_list/2","max_list/2","min_list/2","prod_list/2","last/2","prefix/2","nth0/3","nth1/3","nth0/4","nth1/4","length/2","replicate/3","select/3","sort/2","msort/2","keysort/2","take/3","drop/3","reverse/2","list_to_set/2"];typeof aH<"u"?aH.exports=function(o){t=o,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(Vgt)});var ome=_(Yr=>{"use strict";var Zd=process.platform==="win32",lH="aes-256-cbc",Kgt="sha256",Kde="The current environment doesn't support interactive reading from TTY.",Yn=Be("fs"),Wde=process.binding("tty_wrap").TTY,uH=Be("child_process"),l0=Be("path"),AH={prompt:"> ",hideEchoBack:!1,mask:"*",limit:[],limitMessage:"Input another, please.$<( [)limit(])>",defaultInput:"",trueValue:[],falseValue:[],caseSensitive:!1,keepWhitespace:!1,encoding:"utf8",bufferSize:1024,print:void 0,history:!0,cd:!1,phContent:void 0,preCheck:void 0},Jf="none",Xc,IC,Vde=!1,a0,Ek,cH,Jgt=0,dH="",Xd=[],Ck,Jde=!1,fH=!1,v2=!1;function zde(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(o){return"#"+o.charCodeAt(0)+";"})}return Ek.concat(function(r){var o=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&o.push("--"+a):r[a]==="string"&&t[a]&&o.push("--"+a,e(t[a]))}),o}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function zgt(t,e){function r(U){var J,te="",le;for(cH=cH||Be("os").tmpdir();;){J=l0.join(cH,U+te);try{le=Yn.openSync(J,"wx")}catch(pe){if(pe.code==="EEXIST"){te++;continue}else throw pe}Yn.closeSync(le);break}return J}var o,a,n,u={},A,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),I=r("readline-sync.exit"),v=r("readline-sync.done"),b=Be("crypto"),C,T,L;C=b.createHash(Kgt),C.update(""+process.pid+Jgt+++Math.random()),L=C.digest("hex"),T=b.createDecipher(lH,L),o=zde(t),Zd?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+a0+"%Q%"+o.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+I+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+lH+"%Q% %Q%"+L+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+v+"%Q%"]):(a="/bin/sh",n=["-c",'("'+a0+'"'+o.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+I+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+lH+'" "'+L+'" >"'+h+'"; echo 1 >"'+v+'"']),v2&&v2("_execFileSync",o);try{uH.spawn(a,n,e)}catch(U){u.error=new Error(U.message),u.error.method="_execFileSync - spawn",u.error.program=a,u.error.args=n}for(;Yn.readFileSync(v,{encoding:t.encoding}).trim()!=="1";);return(A=Yn.readFileSync(I,{encoding:t.encoding}).trim())==="0"?u.input=T.update(Yn.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+T.final(t.encoding):(p=Yn.readFileSync(E,{encoding:t.encoding}).trim(),u.error=new Error(Kde+(p?` -`+p:"")),u.error.method="_execFileSync",u.error.program=a,u.error.args=n,u.error.extMessage=p,u.error.exitCode=+A),Yn.unlinkSync(h),Yn.unlinkSync(E),Yn.unlinkSync(I),Yn.unlinkSync(v),u}function Xgt(t){var e,r={},o,a={env:process.env,encoding:t.encoding};if(a0||(Zd?process.env.PSModulePath?(a0="powershell.exe",Ek=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(a0="cscript.exe",Ek=["//nologo",__dirname+"\\read.cs.js"]):(a0="/bin/sh",Ek=[__dirname+"/read.sh"])),Zd&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),uH.execFileSync){e=zde(t),v2&&v2("execFileSync",e);try{r.input=uH.execFileSync(a0,e,a)}catch(n){o=n.stderr?(n.stderr+"").trim():"",r.error=new Error(Kde+(o?` -`+o:"")),r.error.method="execFileSync",r.error.program=a0,r.error.args=e,r.error.extMessage=o,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=zgt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function pH(t){var e="",r=t.display,o=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=Xgt(t);if(n.error)throw n.error;return n.input}return fH&&fH(t),function(){var n,u,A;function p(){return n||(n=process.binding("fs"),u=process.binding("constants")),n}if(typeof Jf=="string")if(Jf=null,Zd){if(A=function(h){var E=h.replace(/^\D+/,"").split("."),I=0;return(E[0]=+E[0])&&(I+=E[0]*1e4),(E[1]=+E[1])&&(I+=E[1]*100),(E[2]=+E[2])&&(I+=E[2]),I}(process.version),!(A>=20302&&A<40204||A>=5e4&&A<50100||A>=50600&&A<60200)&&process.stdin.isTTY)process.stdin.pause(),Jf=process.stdin.fd,IC=process.stdin._handle;else try{Jf=p().open("CONIN$",u.O_RDWR,parseInt("0666",8)),IC=new Wde(Jf,!0)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else{try{Xc=Yn.openSync("\\\\.\\CON","w")}catch{}if(typeof Xc!="number")try{Xc=p().open("CONOUT$",u.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{Jf=Yn.openSync("/dev/tty","r"),IC=process.stdin._handle}catch{}}else try{Jf=Yn.openSync("/dev/tty","r"),IC=new Wde(Jf,!1)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else try{Xc=Yn.openSync("/dev/tty","w")}catch{}}}(),function(){var n,u,A=!t.hideEchoBack&&!t.keyIn,p,h,E,I,v;Ck="";function b(C){return C===Vde?!0:IC.setRawMode(C)!==0?!1:(Vde=C,!0)}if(Jde||!IC||typeof Xc!="number"&&(t.display||!A)){e=a();return}if(t.display&&(Yn.writeSync(Xc,t.display),t.display=""),!t.displayOnly){if(!b(!A)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(u=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=Yn.readSync(Jf,p,0,h)}catch(C){if(C.code!=="EOF"){b(!1),e+=a();return}}if(E>0?(I=p.toString(t.encoding,0,E),Ck+=I):(I=` -`,Ck+=String.fromCharCode(0)),I&&typeof(v=(I.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(I=v,n=!0),I&&(I=I.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),I&&u&&(I=I.replace(u,"")),I&&(A||(t.hideEchoBack?t.mask&&Yn.writeSync(Xc,new Array(I.length+1).join(t.mask)):Yn.writeSync(Xc,I)),e+=I),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!A&&!o&&Yn.writeSync(Xc,` -`),b(!1)}}(),t.print&&!o&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` -`),t.encoding),t.displayOnly?"":dH=t.keepWhitespace||t.keyIn?e:e.trim()}function Zgt(t,e){var r=[];function o(a){a!=null&&(Array.isArray(a)?a.forEach(o):(!e||e(a))&&r.push(a))}return o(t),r}function mH(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Ts(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(AH),t.unshift(AH))),t.reduce(function(o,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var u;if(!!a.hasOwnProperty(n))switch(u=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":u=u!=null?u+"":"",u&&n!=="limitMessage"&&(u=u.replace(/[\r\n]/g,"")),o[n]=u;break;case"bufferSize":!isNaN(u=parseInt(u,10))&&typeof u=="number"&&(o[n]=u);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":o[n]=!!u;break;case"limit":case"trueValue":case"falseValue":o[n]=Zgt(u,function(A){var p=typeof A;return p==="string"||p==="number"||p==="function"||A instanceof RegExp}).map(function(A){return typeof A=="string"?A.replace(/[\r\n]/g,""):A});break;case"print":case"phContent":case"preCheck":o[n]=typeof u=="function"?u:void 0;break;case"prompt":case"display":o[n]=u??"";break}})),o},{})}function hH(t,e,r){return e.some(function(o){var a=typeof o;return a==="string"?r?t===o:t.toLowerCase()===o.toLowerCase():a==="number"?parseFloat(t)===o:a==="function"?o(t):o instanceof RegExp?o.test(t):!1})}function yH(t,e){var r=l0.normalize(Zd?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=l0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+mH(r)+"(?=\\/|\\\\|$)",Zd?"i":""),"~")}function BC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",o=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(u,A,p,h,E,I){var v;return A||typeof(v=e(E))!="string"?p:v?(h||"")+v+(I||""):""}return t.replace(o,n).replace(a,n)}function Xde(t,e,r){var o,a=[],n=-1,u=0,A="",p;function h(E,I){return I.length>3?(E.push(I[0]+"..."+I[I.length-1]),p=!0):I.length&&(E=E.concat(I)),E}return o=t.reduce(function(E,I){return E.concat((I+"").split(""))},[]).reduce(function(E,I){var v,b;return e||(I=I.toLowerCase()),v=/^\d$/.test(I)?1:/^[A-Z]$/.test(I)?2:/^[a-z]$/.test(I)?3:0,r&&v===0?A+=I:(b=I.charCodeAt(0),v&&v===n&&b===u+1?a.push(I):(E=h(E,a),a=[I],n=v),u=b),E},[]),o=h(o,a),A&&(o.push(A),p=!0),{values:o,suppressed:p}}function Zde(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function $de(t,e){var r,o,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":o=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=Xde(o,e.caseSensitive),o=a.values):o=o.filter(function(u){var A=typeof u;return A==="string"||A==="number"}),r=Zde(o,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=dH;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=l0.basename(r):t==="cwdHome"&&(r=yH(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(u){return u.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=Xd[Xd.length-n]||"")}return r}function eme(t){var e=/^(.)-(.)$/.exec(t),r="",o,a,n,u;if(!e)return null;for(o=e[1].charCodeAt(0),a=e[2].charCodeAt(0),u=o -And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(b){return b==="charlist"?r.text:b==="length"?o+"..."+a:null}}),u,A,p,h,E,I,v;for(e=e||{},u=BC(e.charlist?e.charlist+"":"$",eme),(isNaN(o=parseInt(e.min,10))||typeof o!="number")&&(o=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+mH(u)+"]{"+o+","+a+"}$"),r=Xde([u],n.caseSensitive,!0),r.text=Zde(r.values,r.suppressed),A=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),E=n.limitMessage;!v;)n.limit=h,n.limitMessage=E,I=Yr.question(t,n),n.limit=[I,""],n.limitMessage=p,v=Yr.question(A,n);return I};function nme(t,e,r){var o;function a(n){return o=r(n),!isNaN(o)&&typeof o=="number"}return Yr.question(t,Ts({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),o}Yr.questionInt=function(t,e){return nme(t,e,function(r){return parseInt(r,10)})};Yr.questionFloat=function(t,e){return nme(t,e,parseFloat)};Yr.questionPath=function(t,e){var r,o="",a=Ts({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var u,A,p;n=yH(n,!0),o="";function h(E){E.split(/\/|\\/).reduce(function(I,v){var b=l0.resolve(I+=v+l0.sep);if(!Yn.existsSync(b))Yn.mkdirSync(b);else if(!Yn.statSync(b).isDirectory())throw new Error("Non directory already exists: "+b);return I},"")}try{if(u=Yn.existsSync(n),r=u?Yn.realpathSync(n):l0.resolve(n),!e.hasOwnProperty("exists")&&!u||typeof e.exists=="boolean"&&e.exists!==u)return o=(u?"Already exists":"No such file or directory")+": "+r,!1;if(!u&&e.create&&(e.isDirectory?h(r):(h(l0.dirname(r)),Yn.closeSync(Yn.openSync(r,"w"))),r=Yn.realpathSync(r)),u&&(e.min||e.max||e.isFile||e.isDirectory)){if(A=Yn.statSync(r),e.isFile&&!A.isFile())return o="Not file: "+r,!1;if(e.isDirectory&&!A.isDirectory())return o="Not directory: "+r,!1;if(e.min&&A.size<+e.min||e.max&&A.size>+e.max)return o="Size "+A.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(o=p),!1}catch(E){return o=E+"",!1}return!0},phContent:function(n){return n==="error"?o:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),Yr.question(t,a),r};function ime(t,e){var r={},o={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(o[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=gH(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&o.hasOwnProperty(n)?o[n].apply(a,r.args.slice(1)):o.hasOwnProperty("_")?o._.apply(a,r.args):null,{res:a,forceNext:!1}},o.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),o.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=gH(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}Yr.promptCL=function(t,e){var r=Ts({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=ime(t,r);return r.limit=o.limit,r.preCheck=o.preCheck,Yr.prompt(r),o.args};Yr.promptLoop=function(t,e){for(var r=Ts({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t(Yr.prompt(r)););};Yr.promptCLLoop=function(t,e){var r=Ts({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=ime(t,r);for(r.limit=o.limit,r.preCheck=o.preCheck;Yr.prompt(r),!o.hRes;);};Yr.promptSimShell=function(t){return Yr.prompt(Ts({hideEchoBack:!1,history:!0},t,{prompt:function(){return Zd?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function sme(t,e,r){var o;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),o=Yr.keyIn(t,Ts(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof o=="boolean"?o:""}Yr.keyInYN=function(t,e){return sme(t,e)};Yr.keyInYNStrict=function(t,e){return sme(t,e,"yn")};Yr.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),Yr.keyIn(t,Ts({limit:null},e,{hideEchoBack:!0,mask:""}))};Yr.keyInSelect=function(t,e,r){var o=Ts({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},u=49,A=` +${J}`}).join("");h.push({text:`Conflict detected in constraint targeting ${de.pretty(t.configuration,x,de.Type.CODE)}; conflicting values are:${R}`,fixable:!1})}else{let[[R]]=C,L=(0,Ode.default)(v,x);if(JSON.stringify(L)===JSON.stringify(R))continue;if(!o){let U=typeof L>"u"?`Missing field ${de.pretty(t.configuration,x,de.Type.CODE)}; expected ${de.pretty(t.configuration,R,de.Type.INSPECT)}`:typeof R>"u"?`Extraneous field ${de.pretty(t.configuration,x,de.Type.CODE)} currently set to ${de.pretty(t.configuration,L,de.Type.INSPECT)}`:`Invalid field ${de.pretty(t.configuration,x,de.Type.CODE)}; expected ${de.pretty(t.configuration,R,de.Type.INSPECT)}, found ${de.pretty(t.configuration,L,de.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof R>"u"?(0,_de.default)(v,x):(0,Mde.default)(v,x,R),E=!0}E&&a.set(I,v)}h.length>0&&n.set(I,h)}return{changedWorkspaces:a,remainingErrors:n}}function Hde(t,{configuration:e}){let r={children:[]};for(let[o,a]of t){let n=[];for(let A of a){let p=A.text.split(/\n/);A.fixable&&(p[0]=`${de.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:de.tuple(de.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:de.tuple(de.Type.NO_HINT,h)}))})}let u={value:de.tuple(de.Type.LOCATOR,o.anchoredLocator),children:_e.sortMap(n,A=>A.value[1])};r.children.push(u)}return r.children=_e.sortMap(r.children,o=>o.value[1]),r}var Ode,Mde,Ude,_de,wC,Ogt,Mgt,Ugt,v2=Et(()=>{Ye();Ode=$e(d2()),Mde=$e(Q8()),Ude=$e(Lde()),_de=$e(T8()),wC=class{constructor(e){this.indexedFields=e;this.items=[];this.indexes={};this.clear()}clear(){this.items=[];for(let e of this.indexedFields)this.indexes[e]=new Map}insert(e){this.items.push(e);for(let r of this.indexedFields){let o=Object.hasOwn(e,r)?e[r]:void 0;if(typeof o>"u")continue;_e.getArrayWithDefault(this.indexes[r],o).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let o=[],a;for(let[u,A]of r){let p=u,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){o.push([p,A]);continue}let E=new Set(h.get(A)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let I of a)E.has(I)||a.delete(I);if(a.size===0)break}let n=[...a??[]];return o.length>0&&(n=n.filter(u=>{for(let[A,p]of o)if(!(typeof p<"u"?Object.hasOwn(u,A)&&u[A]===p:Object.hasOwn(u,A)===!1))return!1;return!0})),n}},Ogt=/^[0-9]+$/,Mgt=/^[a-zA-Z0-9_]+$/,Ugt=new Set(["scripts",...Ot.allDependencies])});var qde=_(($9t,sH)=>{var qgt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(!t.type.is_variable(A)&&!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(t.type.is_integer(A)&&A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else{var p=new t.type.Term("length",[u,new t.type.Num(0,!1),A]);t.type.is_integer(A)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),o.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;I--)E[I].equals(E[I-1])&&E.splice(I,1);for(var v=new t.type.Term("[]"),I=E.length-1;I>=0;I--)v=new t.type.Term(".",[E[I],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"msort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h=u;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=p.sort(t.compare),I=new t.type.Term("[]"),v=E.length-1;v>=0;v--)I=new t.type.Term(".",[E[v],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,A])),a.substitution,a)])}}},"keysort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h,E=u;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){o.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){o.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),E=E.args[1]}if(t.type.is_variable(E))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))o.throw_error(t.error.type("list",u,n.indicator));else{for(var I=p.sort(t.compare),v=new t.type.Term("[]"),x=I.length-1;x>=0;x--)v=new t.type.Term(".",[new t.type.Term("-",[I[x],I[x].pair]),v]),delete I[x].pair;o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"take/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;if(h===0){for(var v=new t.type.Term("[]"),h=E.length-1;h>=0;h--)v=new t.type.Term(".",[E[h],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,p])),a.substitution,a)])}}},"drop/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;h===0&&o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p])),a.substitution,a)])}},"reverse/2":function(o,a,n){var u=n.args[0],A=n.args[1],p=t.type.is_instantiated_list(u),h=t.type.is_instantiated_list(A);if(t.type.is_variable(u)&&t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(u)&&!t.type.is_fully_list(u))o.throw_error(t.error.type("list",u,n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!p&&!h)o.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?u:A,I=new t.type.Term("[]",[]);E.indicator==="./2";)I=new t.type.Term(".",[E.args[0],I]),E=E.args[1];o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p?A:u])),a.substitution,a)])}},"list_to_set/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else{for(var p=u,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=[],I=new t.type.Term("[]",[]),v,x=0;x=0;x--)I=new t.type.Term(".",[E[x],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[A,I])),a.substitution,a)])}}}}},r=["append/2","append/3","member/2","permutation/2","maplist/2","maplist/3","maplist/4","maplist/5","maplist/6","maplist/7","maplist/8","include/3","exclude/3","foldl/4","sum_list/2","max_list/2","min_list/2","prod_list/2","last/2","prefix/2","nth0/3","nth1/3","nth0/4","nth1/4","length/2","replicate/3","select/3","sort/2","msort/2","keysort/2","take/3","drop/3","reverse/2","list_to_set/2"];typeof sH<"u"?sH.exports=function(o){t=o,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(qgt)});var nme=_(Yr=>{"use strict";var $d=process.platform==="win32",oH="aes-256-cbc",jgt="sha256",Yde="The current environment doesn't support interactive reading from TTY.",Yn=ve("fs"),jde=process.binding("tty_wrap").TTY,lH=ve("child_process"),c0=ve("path"),cH={prompt:"> ",hideEchoBack:!1,mask:"*",limit:[],limitMessage:"Input another, please.$<( [)limit(])>",defaultInput:"",trueValue:[],falseValue:[],caseSensitive:!1,keepWhitespace:!1,encoding:"utf8",bufferSize:1024,print:void 0,history:!0,cd:!1,phContent:void 0,preCheck:void 0},zf="none",Xc,BC,Gde=!1,l0,mk,aH,Ggt=0,hH="",Zd=[],yk,Wde=!1,uH=!1,D2=!1;function Kde(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(o){return"#"+o.charCodeAt(0)+";"})}return mk.concat(function(r){var o=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&o.push("--"+a):r[a]==="string"&&t[a]&&o.push("--"+a,e(t[a]))}),o}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function Ygt(t,e){function r(U){var J,te="",ae;for(aH=aH||ve("os").tmpdir();;){J=c0.join(aH,U+te);try{ae=Yn.openSync(J,"wx")}catch(fe){if(fe.code==="EEXIST"){te++;continue}else throw fe}Yn.closeSync(ae);break}return J}var o,a,n,u={},A,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),I=r("readline-sync.exit"),v=r("readline-sync.done"),x=ve("crypto"),C,R,L;C=x.createHash(jgt),C.update(""+process.pid+Ggt+++Math.random()),L=C.digest("hex"),R=x.createDecipher(oH,L),o=Kde(t),$d?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+l0+"%Q%"+o.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+I+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+oH+"%Q% %Q%"+L+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+v+"%Q%"]):(a="/bin/sh",n=["-c",'("'+l0+'"'+o.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+I+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+oH+'" "'+L+'" >"'+h+'"; echo 1 >"'+v+'"']),D2&&D2("_execFileSync",o);try{lH.spawn(a,n,e)}catch(U){u.error=new Error(U.message),u.error.method="_execFileSync - spawn",u.error.program=a,u.error.args=n}for(;Yn.readFileSync(v,{encoding:t.encoding}).trim()!=="1";);return(A=Yn.readFileSync(I,{encoding:t.encoding}).trim())==="0"?u.input=R.update(Yn.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+R.final(t.encoding):(p=Yn.readFileSync(E,{encoding:t.encoding}).trim(),u.error=new Error(Yde+(p?` +`+p:"")),u.error.method="_execFileSync",u.error.program=a,u.error.args=n,u.error.extMessage=p,u.error.exitCode=+A),Yn.unlinkSync(h),Yn.unlinkSync(E),Yn.unlinkSync(I),Yn.unlinkSync(v),u}function Wgt(t){var e,r={},o,a={env:process.env,encoding:t.encoding};if(l0||($d?process.env.PSModulePath?(l0="powershell.exe",mk=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(l0="cscript.exe",mk=["//nologo",__dirname+"\\read.cs.js"]):(l0="/bin/sh",mk=[__dirname+"/read.sh"])),$d&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),lH.execFileSync){e=Kde(t),D2&&D2("execFileSync",e);try{r.input=lH.execFileSync(l0,e,a)}catch(n){o=n.stderr?(n.stderr+"").trim():"",r.error=new Error(Yde+(o?` +`+o:"")),r.error.method="execFileSync",r.error.program=l0,r.error.args=e,r.error.extMessage=o,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=Ygt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function AH(t){var e="",r=t.display,o=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=Wgt(t);if(n.error)throw n.error;return n.input}return uH&&uH(t),function(){var n,u,A;function p(){return n||(n=process.binding("fs"),u=process.binding("constants")),n}if(typeof zf=="string")if(zf=null,$d){if(A=function(h){var E=h.replace(/^\D+/,"").split("."),I=0;return(E[0]=+E[0])&&(I+=E[0]*1e4),(E[1]=+E[1])&&(I+=E[1]*100),(E[2]=+E[2])&&(I+=E[2]),I}(process.version),!(A>=20302&&A<40204||A>=5e4&&A<50100||A>=50600&&A<60200)&&process.stdin.isTTY)process.stdin.pause(),zf=process.stdin.fd,BC=process.stdin._handle;else try{zf=p().open("CONIN$",u.O_RDWR,parseInt("0666",8)),BC=new jde(zf,!0)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else{try{Xc=Yn.openSync("\\\\.\\CON","w")}catch{}if(typeof Xc!="number")try{Xc=p().open("CONOUT$",u.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{zf=Yn.openSync("/dev/tty","r"),BC=process.stdin._handle}catch{}}else try{zf=Yn.openSync("/dev/tty","r"),BC=new jde(zf,!1)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else try{Xc=Yn.openSync("/dev/tty","w")}catch{}}}(),function(){var n,u,A=!t.hideEchoBack&&!t.keyIn,p,h,E,I,v;yk="";function x(C){return C===Gde?!0:BC.setRawMode(C)!==0?!1:(Gde=C,!0)}if(Wde||!BC||typeof Xc!="number"&&(t.display||!A)){e=a();return}if(t.display&&(Yn.writeSync(Xc,t.display),t.display=""),!t.displayOnly){if(!x(!A)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(u=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=Yn.readSync(zf,p,0,h)}catch(C){if(C.code!=="EOF"){x(!1),e+=a();return}}if(E>0?(I=p.toString(t.encoding,0,E),yk+=I):(I=` +`,yk+=String.fromCharCode(0)),I&&typeof(v=(I.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(I=v,n=!0),I&&(I=I.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),I&&u&&(I=I.replace(u,"")),I&&(A||(t.hideEchoBack?t.mask&&Yn.writeSync(Xc,new Array(I.length+1).join(t.mask)):Yn.writeSync(Xc,I)),e+=I),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!A&&!o&&Yn.writeSync(Xc,` +`),x(!1)}}(),t.print&&!o&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` +`),t.encoding),t.displayOnly?"":hH=t.keepWhitespace||t.keyIn?e:e.trim()}function Kgt(t,e){var r=[];function o(a){a!=null&&(Array.isArray(a)?a.forEach(o):(!e||e(a))&&r.push(a))}return o(t),r}function gH(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Rs(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(cH),t.unshift(cH))),t.reduce(function(o,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var u;if(!!a.hasOwnProperty(n))switch(u=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":u=u!=null?u+"":"",u&&n!=="limitMessage"&&(u=u.replace(/[\r\n]/g,"")),o[n]=u;break;case"bufferSize":!isNaN(u=parseInt(u,10))&&typeof u=="number"&&(o[n]=u);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":o[n]=!!u;break;case"limit":case"trueValue":case"falseValue":o[n]=Kgt(u,function(A){var p=typeof A;return p==="string"||p==="number"||p==="function"||A instanceof RegExp}).map(function(A){return typeof A=="string"?A.replace(/[\r\n]/g,""):A});break;case"print":case"phContent":case"preCheck":o[n]=typeof u=="function"?u:void 0;break;case"prompt":case"display":o[n]=u??"";break}})),o},{})}function fH(t,e,r){return e.some(function(o){var a=typeof o;return a==="string"?r?t===o:t.toLowerCase()===o.toLowerCase():a==="number"?parseFloat(t)===o:a==="function"?o(t):o instanceof RegExp?o.test(t):!1})}function dH(t,e){var r=c0.normalize($d?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=c0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+gH(r)+"(?=\\/|\\\\|$)",$d?"i":""),"~")}function vC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",o=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(u,A,p,h,E,I){var v;return A||typeof(v=e(E))!="string"?p:v?(h||"")+v+(I||""):""}return t.replace(o,n).replace(a,n)}function Vde(t,e,r){var o,a=[],n=-1,u=0,A="",p;function h(E,I){return I.length>3?(E.push(I[0]+"..."+I[I.length-1]),p=!0):I.length&&(E=E.concat(I)),E}return o=t.reduce(function(E,I){return E.concat((I+"").split(""))},[]).reduce(function(E,I){var v,x;return e||(I=I.toLowerCase()),v=/^\d$/.test(I)?1:/^[A-Z]$/.test(I)?2:/^[a-z]$/.test(I)?3:0,r&&v===0?A+=I:(x=I.charCodeAt(0),v&&v===n&&x===u+1?a.push(I):(E=h(E,a),a=[I],n=v),u=x),E},[]),o=h(o,a),A&&(o.push(A),p=!0),{values:o,suppressed:p}}function Jde(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function zde(t,e){var r,o,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":o=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=Vde(o,e.caseSensitive),o=a.values):o=o.filter(function(u){var A=typeof u;return A==="string"||A==="number"}),r=Jde(o,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=hH;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=c0.basename(r):t==="cwdHome"&&(r=dH(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(u){return u.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=Zd[Zd.length-n]||"")}return r}function Xde(t){var e=/^(.)-(.)$/.exec(t),r="",o,a,n,u;if(!e)return null;for(o=e[1].charCodeAt(0),a=e[2].charCodeAt(0),u=o +And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(x){return x==="charlist"?r.text:x==="length"?o+"..."+a:null}}),u,A,p,h,E,I,v;for(e=e||{},u=vC(e.charlist?e.charlist+"":"$",Xde),(isNaN(o=parseInt(e.min,10))||typeof o!="number")&&(o=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+gH(u)+"]{"+o+","+a+"}$"),r=Vde([u],n.caseSensitive,!0),r.text=Jde(r.values,r.suppressed),A=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),E=n.limitMessage;!v;)n.limit=h,n.limitMessage=E,I=Yr.question(t,n),n.limit=[I,""],n.limitMessage=p,v=Yr.question(A,n);return I};function eme(t,e,r){var o;function a(n){return o=r(n),!isNaN(o)&&typeof o=="number"}return Yr.question(t,Rs({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),o}Yr.questionInt=function(t,e){return eme(t,e,function(r){return parseInt(r,10)})};Yr.questionFloat=function(t,e){return eme(t,e,parseFloat)};Yr.questionPath=function(t,e){var r,o="",a=Rs({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var u,A,p;n=dH(n,!0),o="";function h(E){E.split(/\/|\\/).reduce(function(I,v){var x=c0.resolve(I+=v+c0.sep);if(!Yn.existsSync(x))Yn.mkdirSync(x);else if(!Yn.statSync(x).isDirectory())throw new Error("Non directory already exists: "+x);return I},"")}try{if(u=Yn.existsSync(n),r=u?Yn.realpathSync(n):c0.resolve(n),!e.hasOwnProperty("exists")&&!u||typeof e.exists=="boolean"&&e.exists!==u)return o=(u?"Already exists":"No such file or directory")+": "+r,!1;if(!u&&e.create&&(e.isDirectory?h(r):(h(c0.dirname(r)),Yn.closeSync(Yn.openSync(r,"w"))),r=Yn.realpathSync(r)),u&&(e.min||e.max||e.isFile||e.isDirectory)){if(A=Yn.statSync(r),e.isFile&&!A.isFile())return o="Not file: "+r,!1;if(e.isDirectory&&!A.isDirectory())return o="Not directory: "+r,!1;if(e.min&&A.size<+e.min||e.max&&A.size>+e.max)return o="Size "+A.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(o=p),!1}catch(E){return o=E+"",!1}return!0},phContent:function(n){return n==="error"?o:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),Yr.question(t,a),r};function tme(t,e){var r={},o={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(o[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=pH(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&o.hasOwnProperty(n)?o[n].apply(a,r.args.slice(1)):o.hasOwnProperty("_")?o._.apply(a,r.args):null,{res:a,forceNext:!1}},o.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),o.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=pH(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}Yr.promptCL=function(t,e){var r=Rs({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=tme(t,r);return r.limit=o.limit,r.preCheck=o.preCheck,Yr.prompt(r),o.args};Yr.promptLoop=function(t,e){for(var r=Rs({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t(Yr.prompt(r)););};Yr.promptCLLoop=function(t,e){var r=Rs({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=tme(t,r);for(r.limit=o.limit,r.preCheck=o.preCheck;Yr.prompt(r),!o.hRes;);};Yr.promptSimShell=function(t){return Yr.prompt(Rs({hideEchoBack:!1,history:!0},t,{prompt:function(){return $d?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function rme(t,e,r){var o;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),o=Yr.keyIn(t,Rs(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof o=="boolean"?o:""}Yr.keyInYN=function(t,e){return rme(t,e)};Yr.keyInYNStrict=function(t,e){return rme(t,e,"yn")};Yr.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),Yr.keyIn(t,Rs({limit:null},e,{hideEchoBack:!0,mask:""}))};Yr.keyInSelect=function(t,e,r){var o=Rs({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},u=49,A=` `;if(!Array.isArray(t)||!t.length||t.length>35)throw"`items` must be Array (max length: 35).";return t.forEach(function(p,h){var E=String.fromCharCode(u);a+=E,n[E]=h,A+="["+E+"] "+(p+"").trim()+` `,u=u===57?97:u+1}),(!r||r.cancel!==!1)&&(a+="0",n[0]=-1,A+="[0] "+(r&&r.cancel!=null&&typeof r.cancel!="boolean"?(r.cancel+"").trim():"CANCEL")+` `),o.limit=a,A+=` -`,e==null&&(e="Choose one from list: "),(e+="")&&((!r||r.guide!==!1)&&(e=e.replace(/\s*:?\s*$/,"")+" [$]: "),A+=e),n[Yr.keyIn(A,o).toLowerCase()]};Yr.getRawInput=function(){return Ck};function D2(t,e){var r;return e.length&&(r={},r[t]=e[0]),Yr.setDefaultOptions(r)[t]}Yr.setPrint=function(){return D2("print",arguments)};Yr.setPrompt=function(){return D2("prompt",arguments)};Yr.setEncoding=function(){return D2("encoding",arguments)};Yr.setMask=function(){return D2("mask",arguments)};Yr.setBufferSize=function(){return D2("bufferSize",arguments)}});var EH=_((t7t,hl)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,S,y){var F=tau_file_system.files[w];if(!F){if(y==="read")return null;F={path:w,text:"",type:S,get:function(z,X){return X===this.text.length||X>this.text.length?"end_of_file":this.text.substring(X,X+z)},put:function(z,X){return X==="end_of_file"?(this.text+=z,!0):X==="past_end_of_file"?null:(this.text=this.text.substring(0,X)+z+this.text.substring(X+z.length),!0)},get_byte:function(z){if(z==="end_of_stream")return-1;var X=Math.floor(z/2);if(this.text.length<=X)return-1;var Z=n(this.text[Math.floor(z/2)],0);return z%2===0?Z&255:Z/256>>>0},put_byte:function(z,X){var Z=X==="end_of_stream"?this.text.length:Math.floor(X/2);if(this.text.length>>0,ie=(ie&255)<<8|z&255):(ie=ie&255,ie=(z&255)<<8|ie&255),this.text.length===Z?this.text+=u(ie):this.text=this.text.substring(0,Z)+u(ie)+this.text.substring(Z+1),!0},flush:function(){return!0},close:function(){var z=tau_file_system.files[this.path];return z?!0:null}},tau_file_system.files[w]=F}return y==="write"&&(F.text=""),F}},tau_user_input={buffer:"",get:function(w,S){for(var y;tau_user_input.buffer.length]: "),A+=e),n[Yr.keyIn(A,o).toLowerCase()]};Yr.getRawInput=function(){return yk};function S2(t,e){var r;return e.length&&(r={},r[t]=e[0]),Yr.setDefaultOptions(r)[t]}Yr.setPrint=function(){return S2("print",arguments)};Yr.setPrompt=function(){return S2("prompt",arguments)};Yr.setEncoding=function(){return S2("encoding",arguments)};Yr.setMask=function(){return S2("mask",arguments)};Yr.setBufferSize=function(){return S2("bufferSize",arguments)}});var mH=_((t7t,hl)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,P,y){var F=tau_file_system.files[w];if(!F){if(y==="read")return null;F={path:w,text:"",type:P,get:function(z,X){return X===this.text.length||X>this.text.length?"end_of_file":this.text.substring(X,X+z)},put:function(z,X){return X==="end_of_file"?(this.text+=z,!0):X==="past_end_of_file"?null:(this.text=this.text.substring(0,X)+z+this.text.substring(X+z.length),!0)},get_byte:function(z){if(z==="end_of_stream")return-1;var X=Math.floor(z/2);if(this.text.length<=X)return-1;var Z=n(this.text[Math.floor(z/2)],0);return z%2===0?Z&255:Z/256>>>0},put_byte:function(z,X){var Z=X==="end_of_stream"?this.text.length:Math.floor(X/2);if(this.text.length>>0,ie=(ie&255)<<8|z&255):(ie=ie&255,ie=(z&255)<<8|ie&255),this.text.length===Z?this.text+=u(ie):this.text=this.text.substring(0,Z)+u(ie)+this.text.substring(Z+1),!0},flush:function(){return!0},close:function(){var z=tau_file_system.files[this.path];return z?!0:null}},tau_file_system.files[w]=F}return y==="write"&&(F.text=""),F}},tau_user_input={buffer:"",get:function(w,P){for(var y;tau_user_input.buffer.length\?\@\^\~\\]+|'(?:[^']*?(?:\\(?:x?\d+)?\\)*(?:'')*(?:\\')*)*')/,number:/^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abfnrtv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/,string:/^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/,l_brace:/^(?:\[)/,r_brace:/^(?:\])/,l_bracket:/^(?:\{)/,r_bracket:/^(?:\})/,bar:/^(?:\|)/,l_paren:/^(?:\()/,r_paren:/^(?:\))/};function L(w,S){return w.get_flag("char_conversion").id==="on"?S.replace(/./g,function(y){return w.get_char_conversion(y)}):S}function U(w){this.thread=w,this.text="",this.tokens=[]}U.prototype.set_last_tokens=function(w){return this.tokens=w},U.prototype.new_text=function(w){this.text=w,this.tokens=[]},U.prototype.get_tokens=function(w){var S,y=0,F=0,z=0,X=[],Z=!1;if(w){var ie=this.tokens[w-1];y=ie.len,S=L(this.thread,this.text.substr(ie.len)),F=ie.line,z=ie.start}else S=this.text;if(/^\s*$/.test(S))return null;for(;S!=="";){var Se=[],Ne=!1;if(/^\n/.exec(S)!==null){F++,z=0,y++,S=S.replace(/\n/,""),Z=!0;continue}for(var ot in T)if(T.hasOwnProperty(ot)){var dt=T[ot].exec(S);dt&&Se.push({value:dt[0],name:ot,matches:dt})}if(!Se.length)return this.set_last_tokens([{value:S,matches:[],name:"lexical",line:F,start:z}]);var ie=r(Se,function(Qr,mr){return Qr.value.length>=mr.value.length?Qr:mr});switch(ie.start=z,ie.line=F,S=S.replace(ie.value,""),z+=ie.value.length,y+=ie.value.length,ie.name){case"atom":ie.raw=ie.value,ie.value.charAt(0)==="'"&&(ie.value=v(ie.value.substr(1,ie.value.length-2),"'"),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence"));break;case"number":ie.float=ie.value.substring(0,2)!=="0x"&&ie.value.match(/[.eE]/)!==null&&ie.value!=="0'.",ie.value=C(ie.value),ie.blank=Ne;break;case"string":var jt=ie.value.charAt(0);ie.value=v(ie.value.substr(1,ie.value.length-2),jt),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence");break;case"whitespace":var $t=X[X.length-1];$t&&($t.space=!0),Ne=!0;continue;case"r_bracket":X.length>0&&X[X.length-1].name==="l_bracket"&&(ie=X.pop(),ie.name="atom",ie.value="{}",ie.raw="{}",ie.space=!1);break;case"r_brace":X.length>0&&X[X.length-1].name==="l_brace"&&(ie=X.pop(),ie.name="atom",ie.value="[]",ie.raw="[]",ie.space=!1);break}ie.len=y,X.push(ie),Ne=!1}var xt=this.set_last_tokens(X);return xt.length===0?null:xt};function J(w,S,y,F,z){if(!S[y])return{type:A,value:x.error.syntax(S[y-1],"expression expected",!0)};var X;if(F==="0"){var Z=S[y];switch(Z.name){case"number":return{type:p,len:y+1,value:new x.type.Num(Z.value,Z.float)};case"variable":return{type:p,len:y+1,value:new x.type.Var(Z.value)};case"string":var ie;switch(w.get_flag("double_quotes").id){case"atom":ie=new H(Z.value,[]);break;case"codes":ie=new H("[]",[]);for(var Se=Z.value.length-1;Se>=0;Se--)ie=new H(".",[new x.type.Num(n(Z.value,Se),!1),ie]);break;case"chars":ie=new H("[]",[]);for(var Se=Z.value.length-1;Se>=0;Se--)ie=new H(".",[new x.type.Term(Z.value.charAt(Se),[]),ie]);break}return{type:p,len:y+1,value:ie};case"l_paren":var xt=J(w,S,y+1,w.__get_max_priority(),!0);return xt.type!==p?xt:S[xt.len]&&S[xt.len].name==="r_paren"?(xt.len++,xt):{type:A,derived:!0,value:x.error.syntax(S[xt.len]?S[xt.len]:S[xt.len-1],") or operator expected",!S[xt.len])};case"l_bracket":var xt=J(w,S,y+1,w.__get_max_priority(),!0);return xt.type!==p?xt:S[xt.len]&&S[xt.len].name==="r_bracket"?(xt.len++,xt.value=new H("{}",[xt.value]),xt):{type:A,derived:!0,value:x.error.syntax(S[xt.len]?S[xt.len]:S[xt.len-1],"} or operator expected",!S[xt.len])}}var Ne=te(w,S,y,z);return Ne.type===p||Ne.derived||(Ne=le(w,S,y),Ne.type===p||Ne.derived)?Ne:{type:A,derived:!1,value:x.error.syntax(S[y],"unexpected token")}}var ot=w.__get_max_priority(),dt=w.__get_next_priority(F),jt=y;if(S[y].name==="atom"&&S[y+1]&&(S[y].space||S[y+1].name!=="l_paren")){var Z=S[y++],$t=w.__lookup_operator_classes(F,Z.value);if($t&&$t.indexOf("fy")>-1){var xt=J(w,S,y,F,z);if(xt.type!==A)return Z.value==="-"&&!Z.space&&x.type.is_number(xt.value)?{value:new x.type.Num(-xt.value.value,xt.value.is_float),len:xt.len,type:p}:{value:new x.type.Term(Z.value,[xt.value]),len:xt.len,type:p};X=xt}else if($t&&$t.indexOf("fx")>-1){var xt=J(w,S,y,dt,z);if(xt.type!==A)return{value:new x.type.Term(Z.value,[xt.value]),len:xt.len,type:p};X=xt}}y=jt;var xt=J(w,S,y,dt,z);if(xt.type===p){y=xt.len;var Z=S[y];if(S[y]&&(S[y].name==="atom"&&w.__lookup_operator_classes(F,Z.value)||S[y].name==="bar"&&w.__lookup_operator_classes(F,"|"))){var an=dt,Qr=F,$t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("xf")>-1)return{value:new x.type.Term(Z.value,[xt.value]),len:++xt.len,type:p};if($t.indexOf("xfx")>-1){var mr=J(w,S,y+1,an,z);return mr.type===p?{value:new x.type.Term(Z.value,[xt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if($t.indexOf("xfy")>-1){var mr=J(w,S,y+1,Qr,z);return mr.type===p?{value:new x.type.Term(Z.value,[xt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if(xt.type!==A)for(;;){y=xt.len;var Z=S[y];if(Z&&Z.name==="atom"&&w.__lookup_operator_classes(F,Z.value)){var $t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("yf")>-1)xt={value:new x.type.Term(Z.value,[xt.value]),len:++y,type:p};else if($t.indexOf("yfx")>-1){var mr=J(w,S,++y,an,z);if(mr.type===A)return mr.derived=!0,mr;y=mr.len,xt={value:new x.type.Term(Z.value,[xt.value,mr.value]),len:y,type:p}}else break}else break}}else X={type:A,value:x.error.syntax(S[xt.len-1],"operator expected")};return xt}return xt}function te(w,S,y,F){if(!S[y]||S[y].name==="atom"&&S[y].raw==="."&&!F&&(S[y].space||!S[y+1]||S[y+1].name!=="l_paren"))return{type:A,derived:!1,value:x.error.syntax(S[y-1],"unfounded token")};var z=S[y],X=[];if(S[y].name==="atom"&&S[y].raw!==","){if(y++,S[y-1].space)return{type:p,len:y,value:new x.type.Term(z.value,X)};if(S[y]&&S[y].name==="l_paren"){if(S[y+1]&&S[y+1].name==="r_paren")return{type:A,derived:!0,value:x.error.syntax(S[y+1],"argument expected")};var Z=J(w,S,++y,"999",!0);if(Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],"argument expected",!S[y])};for(X.push(Z.value),y=Z.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(Z=J(w,S,y+1,"999",!0),Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X.push(Z.value),y=Z.len}if(S[y]&&S[y].name==="r_paren")y++;else return{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],", or ) expected",!S[y])}}return{type:p,len:y,value:new x.type.Term(z.value,X)}}return{type:A,derived:!1,value:x.error.syntax(S[y],"term expected")}}function le(w,S,y){if(!S[y])return{type:A,derived:!1,value:x.error.syntax(S[y-1],"[ expected")};if(S[y]&&S[y].name==="l_brace"){var F=J(w,S,++y,"999",!0),z=[F.value],X=void 0;if(F.type===A)return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:new x.type.Term("[]",[])}:{type:A,derived:!0,value:x.error.syntax(S[y],"] expected")};for(y=F.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(F=J(w,S,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};z.push(F.value),y=F.len}var Z=!1;if(S[y]&&S[y].name==="bar"){if(Z=!0,F=J(w,S,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X=F.value,y=F.len}return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:g(z,X)}:{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],Z?"] expected":", or | or ] expected",!S[y])}}return{type:A,derived:!1,value:x.error.syntax(S[y],"list expected")}}function pe(w,S,y){var F=S[y].line,z=J(w,S,y,w.__get_max_priority(),!1),X=null,Z;if(z.type!==A)if(y=z.len,S[y]&&S[y].name==="atom"&&S[y].raw===".")if(y++,x.type.is_term(z.value)){if(z.value.indicator===":-/2"?(X=new x.type.Rule(z.value.args[0],Pe(z.value.args[1])),Z={value:X,len:y,type:p}):z.value.indicator==="-->/2"?(X=ae(new x.type.Rule(z.value.args[0],z.value.args[1]),w),X.body=Pe(X.body),Z={value:X,len:y,type:x.type.is_rule(X)?p:A}):(X=new x.type.Rule(z.value,null),Z={value:X,len:y,type:p}),X){var ie=X.singleton_variables();ie.length>0&&w.throw_warning(x.warning.singleton(ie,X.head.indicator,F))}return Z}else return{type:A,value:x.error.syntax(S[y],"callable expected")};else return{type:A,value:x.error.syntax(S[y]?S[y]:S[y-1],". or operator expected")};return z}function Ae(w,S,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var F=new U(w),z={},X;F.new_text(S);var Z=0,ie=F.get_tokens(Z);do{if(ie===null||!ie[Z])break;var Se=pe(w,ie,Z);if(Se.type===A)return new H("throw",[Se.value]);if(Se.value.body===null&&Se.value.head.indicator==="?-/1"){var Ne=new Je(w.session);Ne.add_goal(Se.value.head.args[0]),Ne.answer(function(dt){x.type.is_error(dt)?w.throw_warning(dt.args[0]):(dt===!1||dt===null)&&w.throw_warning(x.warning.failed_goal(Se.value.head.args[0],Se.len))}),Z=Se.len;var ot=!0}else if(Se.value.body===null&&Se.value.head.indicator===":-/1"){var ot=w.run_directive(Se.value.head.args[0]);Z=Se.len,Se.value.head.args[0].indicator==="char_conversion/2"&&(ie=F.get_tokens(Z),Z=0)}else{X=Se.value.head.indicator,y.reconsult!==!1&&z[X]!==!0&&!w.is_multifile_predicate(X)&&(w.session.rules[X]=a(w.session.rules[X]||[],function(jt){return jt.dynamic}),z[X]=!0);var ot=w.add_rule(Se.value,y);Z=Se.len}if(!ot)return ot}while(!0);return!0}function ye(w,S){var y=new U(w);y.new_text(S);var F=0;do{var z=y.get_tokens(F);if(z===null)break;var X=J(w,z,0,w.__get_max_priority(),!1);if(X.type!==A){var Z=X.len,ie=Z;if(z[Z]&&z[Z].name==="atom"&&z[Z].raw===".")w.add_goal(Pe(X.value));else{var Se=z[Z];return new H("throw",[x.error.syntax(Se||z[Z-1],". or operator expected",!Se)])}F=X.len+1}else return new H("throw",[X.value])}while(!0);return!0}function ae(w,S){w=w.rename(S);var y=S.next_free_variable(),F=we(w.body,y,S);return F.error?F.value:(w.body=F.value,w.head.args=w.head.args.concat([y,F.variable]),w.head=new H(w.head.id,w.head.args),w)}function we(w,S,y){var F;if(x.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:S,error:!1};if(x.type.is_term(w)&&w.indicator===",/2"){var z=we(w.args[0],S,y);if(z.error)return z;var X=we(w.args[1],z.variable,y);return X.error?X:{value:new H(",",[z.value,X.value]),variable:X.variable,error:!1}}else{if(x.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:S,error:!1};if(x.type.is_empty_list(w))return{value:new H("true",[]),variable:S,error:!1};if(x.type.is_list(w)){F=y.next_free_variable();for(var Z=w,ie;Z.indicator==="./2";)ie=Z,Z=Z.args[1];return x.type.is_variable(Z)?{value:x.error.instantiation("DCG"),variable:S,error:!0}:x.type.is_empty_list(Z)?(ie.args[1]=F,{value:new H("=",[S,w]),variable:F,error:!1}):{value:x.error.type("list",w,"DCG"),variable:S,error:!0}}else return x.type.is_callable(w)?(F=y.next_free_variable(),w.args=w.args.concat([S,F]),w=new H(w.id,w.args),{value:w,variable:F,error:!1}):{value:x.error.type("callable",w,"DCG"),variable:S,error:!0}}}function Pe(w){return x.type.is_variable(w)?new H("call",[w]):x.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new H(w.id,[Pe(w.args[0]),Pe(w.args[1])]):w}function g(w,S){for(var y=S||new x.type.Term("[]",[]),F=w.length-1;F>=0;F--)y=new x.type.Term(".",[w[F],y]);return y}function Ee(w,S){for(var y=w.length-1;y>=0;y--)w[y]===S&&w.splice(y,1)}function De(w){for(var S={},y=[],F=0;F=0;S--)if(w.charAt(S)==="/")return new H("/",[new H(w.substring(0,S)),new ke(parseInt(w.substring(S+1)),!1)])}function Ie(w){this.id=w}function ke(w,S){this.is_float=S!==void 0?S:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var ht=0;function H(w,S,y){this.ref=y||++ht,this.id=w,this.args=S||[],this.indicator=w+"/"+this.args.length}var lt=0;function Re(w,S,y,F,z,X){this.id=lt++,this.stream=w,this.mode=S,this.alias=y,this.type=F!==void 0?F:"text",this.reposition=z!==void 0?z:!0,this.eof_action=X!==void 0?X:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function Qe(w){w=w||{},this.links=w}function be(w,S,y){S=S||new Qe,y=y||null,this.goal=w,this.substitution=S,this.parent=y}function _e(w,S,y){this.head=w,this.body=S,this.dynamic=y||!1}function Te(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new Je(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Re(typeof hl<"u"&&hl.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Re(typeof hl<"u"&&hl.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof hl<"u"&&hl.exports?nodejs_file_system:tau_file_system,this.standard_input=this.streams.user_input,this.standard_output=this.streams.user_output,this.current_input=this.streams.user_input,this.current_output=this.streams.user_output,this.format_success=function(S){return S.substitution},this.format_error=function(S){return S.goal},this.flag={bounded:x.flag.bounded.value,max_integer:x.flag.max_integer.value,min_integer:x.flag.min_integer.value,integer_rounding_function:x.flag.integer_rounding_function.value,char_conversion:x.flag.char_conversion.value,debug:x.flag.debug.value,max_arity:x.flag.max_arity.value,unknown:x.flag.unknown.value,double_quotes:x.flag.double_quotes.value,occurs_check:x.flag.occurs_check.value,dialect:x.flag.dialect.value,version_data:x.flag.version_data.value,nodejs:x.flag.nodejs.value},this.__loaded_modules=[],this.__char_conversion={},this.__operators={1200:{":-":["fx","xfx"],"-->":["xfx"],"?-":["fx"]},1100:{";":["xfy"]},1050:{"->":["xfy"]},1e3:{",":["xfy"]},900:{"\\+":["fy"]},700:{"=":["xfx"],"\\=":["xfx"],"==":["xfx"],"\\==":["xfx"],"@<":["xfx"],"@=<":["xfx"],"@>":["xfx"],"@>=":["xfx"],"=..":["xfx"],is:["xfx"],"=:=":["xfx"],"=\\=":["xfx"],"<":["xfx"],"=<":["xfx"],">":["xfx"],">=":["xfx"]},600:{":":["xfy"]},500:{"+":["yfx"],"-":["yfx"],"/\\":["yfx"],"\\/":["yfx"]},400:{"*":["yfx"],"/":["yfx"],"//":["yfx"],rem:["yfx"],mod:["yfx"],"<<":["yfx"],">>":["yfx"]},200:{"**":["xfx"],"^":["xfy"],"-":["fy"],"+":["fy"],"\\":["fy"]}}}function Je(w){this.epoch=Date.now(),this.session=w,this.session.total_threads++,this.total_steps=0,this.cpu_time=0,this.cpu_time_last=0,this.points=[],this.debugger=!1,this.debugger_states=[],this.level="top_level/0",this.__calls=[],this.current_limit=this.session.limit,this.warnings=[]}function He(w,S,y){this.id=w,this.rules=S,this.exports=y,x.module[w]=this}He.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},Ie.prototype.unify=function(w,S){if(S&&e(w.variables(),this.id)!==-1&&!x.type.is_variable(w))return null;var y={};return y[this.id]=w,new Qe(y)},ke.prototype.unify=function(w,S){return x.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new Qe:null},H.prototype.unify=function(w,S){if(x.type.is_term(w)&&this.indicator===w.indicator){for(var y=new Qe,F=0;F=0){var F=this.args[0].value,z=Math.floor(F/26),X=F%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[X]+(z!==0?z:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var Z="["+this.args[0].toString(w),ie=this.args[1];ie.indicator==="./2";)Z+=", "+ie.args[0].toString(w),ie=ie.args[1];return ie.indicator!=="[]/0"&&(Z+="|"+ie.toString(w)),Z+="]",Z;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var Se=this.id,Ne=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Ne===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(Se)&&Se!=="{}"&&Se!=="[]"&&(Se="'"+b(Se)+"'"),Se+(this.args.length?"("+o(this.args,function($t){return $t.toString(w)}).join(", ")+")":"");var ot=Ne.priority>S.priority||Ne.priority===S.priority&&(Ne.class==="xfy"&&this.indicator!==S.indicator||Ne.class==="yfx"&&this.indicator!==S.indicator||this.indicator===S.indicator&&Ne.class==="yfx"&&y==="right"||this.indicator===S.indicator&&Ne.class==="xfy"&&y==="left");Ne.indicator=this.indicator;var dt=ot?"(":"",jt=ot?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Ne.class)!==-1?dt+Se+" "+this.args[0].toString(w,Ne)+jt:["yf","xf"].indexOf(Ne.class)!==-1?dt+this.args[0].toString(w,Ne)+" "+Se+jt:dt+this.args[0].toString(w,Ne,"left")+" "+this.id+" "+this.args[1].toString(w,Ne,"right")+jt}},Re.prototype.toString=function(w){return"("+this.id+")"},Qe.prototype.toString=function(w){var S="{";for(var y in this.links)!this.links.hasOwnProperty(y)||(S!=="{"&&(S+=", "),S+=y+"/"+this.links[y].toString(w));return S+="}",S},be.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},_e.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},Te.prototype.toString=function(w){for(var S="",y=0;y=0;z--)F=new H(".",[S[z],F]);return F}return new H(this.id,o(this.args,function(X){return X.apply(w)}),this.ref)},Re.prototype.apply=function(w){return this},_e.prototype.apply=function(w){return new _e(this.head.apply(w),this.body!==null?this.body.apply(w):null)},Qe.prototype.apply=function(w){var S,y={};for(S in this.links)!this.links.hasOwnProperty(S)||(y[S]=this.links[S].apply(w));return new Qe(y)},H.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},H.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new H(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new H(",",[w,this.args[1]]):w},H.prototype.search=function(w){if(x.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var S=0;SS&&F0&&(S=this.head_point().substitution.domain());e(S,x.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new Ie(x.format_variable(this.session.rename));this.session.renamed_variables[w.id]=x.format_variable(this.session.rename)}return new Ie(this.session.renamed_variables[w.id])},Te.prototype.next_free_variable=function(){return this.thread.next_free_variable()},Je.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,x.format_variable(this.session.rename))!==-1;)this.session.rename++;return new Ie(x.format_variable(this.session.rename))},Te.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},Je.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},Te.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},Je.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},Te.prototype.prepend=function(w){return this.thread.prepend(w)},Je.prototype.prepend=function(w){for(var S=w.length-1;S>=0;S--)this.points.push(w[S])},Te.prototype.success=function(w,S){return this.thread.success(w,S)},Je.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new be(w.goal.replace(null),w.substitution,y)])},Te.prototype.throw_error=function(w){return this.thread.throw_error(w)},Je.prototype.throw_error=function(w){this.prepend([new be(new H("throw",[w]),new Qe,null,null)])},Te.prototype.step_rule=function(w,S){return this.thread.step_rule(w,S)},Je.prototype.step_rule=function(w,S){var y=S.indicator;if(w==="user"&&(w=null),w===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var F=w===null?this.session.modules:e(this.session.modules,w)===-1?[]:[w],z=0;z1)&&this.again()},Te.prototype.answers=function(w,S,y){return this.thread.answers(w,S,y)},Je.prototype.answers=function(w,S,y){var F=S||1e3,z=this;if(S<=0){y&&y();return}this.answer(function(X){w(X),X!==!1?setTimeout(function(){z.answers(w,S-1,y)},1):y&&y()})},Te.prototype.again=function(w){return this.thread.again(w)},Je.prototype.again=function(w){for(var S,y=Date.now();this.__calls.length>0;){for(this.warnings=[],w!==!1&&(this.current_limit=this.session.limit);this.current_limit>0&&this.points.length>0&&this.head_point().goal!==null&&!x.type.is_error(this.head_point().goal);)if(this.current_limit--,this.step()===!0)return;var F=Date.now();this.cpu_time_last=F-y,this.cpu_time+=this.cpu_time_last;var z=this.__calls.shift();this.current_limit<=0?z(null):this.points.length===0?z(!1):x.type.is_error(this.head_point().goal)?(S=this.session.format_error(this.points.pop()),this.points=[],z(S)):(this.debugger&&this.debugger_states.push(this.head_point()),S=this.session.format_success(this.points.pop()),z(S))}},Te.prototype.unfold=function(w){if(w.body===null)return!1;var S=w.head,y=w.body,F=y.select(),z=new Je(this),X=[];z.add_goal(F),z.step();for(var Z=z.points.length-1;Z>=0;Z--){var ie=z.points[Z],Se=S.apply(ie.substitution),Ne=y.replace(ie.goal);Ne!==null&&(Ne=Ne.apply(ie.substitution)),X.push(new _e(Se,Ne))}var ot=this.rules[S.indicator],dt=e(ot,w);return X.length>0&&dt!==-1?(ot.splice.apply(ot,[dt,1].concat(X)),!0):!1},Je.prototype.unfold=function(w){return this.session.unfold(w)},Ie.prototype.interpret=function(w){return x.error.instantiation(w.level)},ke.prototype.interpret=function(w){return this},H.prototype.interpret=function(w){return x.type.is_unitary_list(this)?this.args[0].interpret(w):x.operate(w,this)},Ie.prototype.compare=function(w){return this.idw.id?1:0},ke.prototype.compare=function(w){if(this.value===w.value&&this.is_float===w.is_float)return 0;if(this.valuew.value)return 1},H.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var S=0;SF)return 1;if(w.constructor===ke){if(w.is_float&&S.is_float)return 0;if(w.is_float)return-1;if(S.is_float)return 1}return 0},is_substitution:function(w){return w instanceof Qe},is_state:function(w){return w instanceof be},is_rule:function(w){return w instanceof _e},is_variable:function(w){return w instanceof Ie},is_stream:function(w){return w instanceof Re},is_anonymous_var:function(w){return w instanceof Ie&&w.id==="_"},is_callable:function(w){return w instanceof H},is_number:function(w){return w instanceof ke},is_integer:function(w){return w instanceof ke&&!w.is_float},is_float:function(w){return w instanceof ke&&w.is_float},is_term:function(w){return w instanceof H},is_atom:function(w){return w instanceof H&&w.args.length===0},is_ground:function(w){if(w instanceof Ie)return!1;if(w instanceof H){for(var S=0;S0},is_list:function(w){return w instanceof H&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof H&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof H&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof Ie||w instanceof H&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof H&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof H&&w.indicator==="./2"&&w.args[1]instanceof H&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof H&&(w.id.length===1||w.id.length>0&&w.id.length<=2&&n(w.id,0)>=65536)},is_character_code:function(w){return w instanceof ke&&!w.is_float&&w.value>=0&&w.value<=1114111},is_byte:function(w){return w instanceof ke&&!w.is_float&&w.value>=0&&w.value<=255},is_operator:function(w){return w instanceof H&&x.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof H&&x.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof H&&x.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof H&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof H&&w.indicator==="//2"&&w.args[0]instanceof H&&w.args[0].args.length===0&&w.args[1]instanceof ke&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof H&&w.args.length===0&&x.flag[w.id]!==void 0},is_value_flag:function(w,S){if(!x.type.is_flag(w))return!1;for(var y in x.flag[w.id].allowed)if(!!x.flag[w.id].allowed.hasOwnProperty(y)&&x.flag[w.id].allowed[y].equals(S))return!0;return!1},is_io_mode:function(w){return x.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return x.type.is_term(w)&&(w.indicator==="alias/1"&&x.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))},is_stream_position:function(w){return x.type.is_integer(w)&&w.value>=0||x.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return x.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(x.type.is_variable(w.args[0])||x.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="read"||w.args[0].id==="write"||w.args[0].id==="append"))||w.indicator==="eof_action/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))||w.indicator==="end_of_stream/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="at"||w.args[0].id==="past"||w.args[0].id==="not")))},is_streamable:function(w){return w.__proto__.stream!==void 0},is_read_option:function(w){return x.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return x.type.is_term(w)&&(w.indicator==="quoted/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return x.type.is_term(w)&&w.indicator==="force/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return x.type.is_flag(w)&&x.flag[w.id].changeable},is_module:function(w){return w instanceof H&&w.indicator==="library/1"&&w.args[0]instanceof H&&w.args[0].args.length===0&&x.module[w.args[0].id]!==void 0}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(w){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(w){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(w){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(w){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(w,S){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,S){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,S){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,S){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,S){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,S){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,S){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.atan2(w,S)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,S){return w>0?Math.log(w):x.error.evaluation("undefined",S.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,S,y){return w+S}},"-/2":{type_args:null,type_result:null,fn:function(w,S,y){return w-S}},"*/2":{type_args:null,type_result:null,fn:function(w,S,y){return w*S}},"//2":{type_args:null,type_result:!0,fn:function(w,S,y){return S?w/S:x.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?parseInt(w/S):x.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.pow(w,S)}},"^/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.pow(w,S)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w>>S}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w&S}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w|S}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w^S}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w%S:x.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w-parseInt(w/S)*S:x.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.max(w,S)}},"min/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.min(w,S)}}}},directive:{"dynamic/1":function(w,S){var y=S.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_compound(y)||y.indicator!=="//2")w.throw_error(x.error.type("predicate_indicator",y,S.indicator));else if(x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1]))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],S.indicator));else if(!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],S.indicator));else{var F=S.args[0].args[0].id+"/"+S.args[0].args[1].value;w.session.public_predicates[F]=!0,w.session.rules[F]||(w.session.rules[F]=[])}},"multifile/1":function(w,S){var y=S.args[0];x.type.is_variable(y)?w.throw_error(x.error.instantiation(S.indicator)):!x.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(x.error.type("predicate_indicator",y,S.indicator)):x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1])?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_atom(y.args[0])?x.type.is_integer(y.args[1])?w.session.multifile_predicates[S.args[0].args[0].id+"/"+S.args[0].args[1].value]=!0:w.throw_error(x.error.type("integer",y.args[1],S.indicator)):w.throw_error(x.error.type("atom",y.args[0],S.indicator))},"set_prolog_flag/2":function(w,S){var y=S.args[0],F=S.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_atom(y)?x.type.is_flag(y)?x.type.is_value_flag(y,F)?x.type.is_modifiable_flag(y)?w.session.flag[y.id]=F:w.throw_error(x.error.permission("modify","flag",y)):w.throw_error(x.error.domain("flag_value",new H("+",[y,F]),S.indicator)):w.throw_error(x.error.domain("prolog_flag",y,S.indicator)):w.throw_error(x.error.type("atom",y,S.indicator))},"use_module/1":function(w,S){var y=S.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_term(y))w.throw_error(x.error.type("term",y,S.indicator));else if(x.type.is_module(y)){var F=y.args[0].id;e(w.session.modules,F)===-1&&w.session.modules.push(F)}},"char_conversion/2":function(w,S){var y=S.args[0],F=S.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_character(y)?x.type.is_character(F)?y.id===F.id?delete w.session.__char_conversion[y.id]:w.session.__char_conversion[y.id]=F.id:w.throw_error(x.error.type("character",F,S.indicator)):w.throw_error(x.error.type("character",y,S.indicator))},"op/3":function(w,S){var y=S.args[0],F=S.args[1],z=S.args[2];if(x.type.is_variable(y)||x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_integer(y))w.throw_error(x.error.type("integer",y,S.indicator));else if(!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,S.indicator));else if(!x.type.is_atom(z))w.throw_error(x.error.type("atom",z,S.indicator));else if(y.value<0||y.value>1200)w.throw_error(x.error.domain("operator_priority",y,S.indicator));else if(z.id===",")w.throw_error(x.error.permission("modify","operator",z,S.indicator));else if(z.id==="|"&&(y.value<1001||F.id.length!==3))w.throw_error(x.error.permission("modify","operator",z,S.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(F.id)===-1)w.throw_error(x.error.domain("operator_specifier",F,S.indicator));else{var X={prefix:null,infix:null,postfix:null};for(var Z in w.session.__operators)if(!!w.session.__operators.hasOwnProperty(Z)){var ie=w.session.__operators[Z][z.id];ie&&(e(ie,"fx")!==-1&&(X.prefix={priority:Z,type:"fx"}),e(ie,"fy")!==-1&&(X.prefix={priority:Z,type:"fy"}),e(ie,"xf")!==-1&&(X.postfix={priority:Z,type:"xf"}),e(ie,"yf")!==-1&&(X.postfix={priority:Z,type:"yf"}),e(ie,"xfx")!==-1&&(X.infix={priority:Z,type:"xfx"}),e(ie,"xfy")!==-1&&(X.infix={priority:Z,type:"xfy"}),e(ie,"yfx")!==-1&&(X.infix={priority:Z,type:"yfx"}))}var Se;switch(F.id){case"fy":case"fx":Se="prefix";break;case"yf":case"xf":Se="postfix";break;default:Se="infix";break}if(((X.prefix&&Se==="prefix"||X.postfix&&Se==="postfix"||X.infix&&Se==="infix")&&X[Se].type!==F.id||X.infix&&Se==="postfix"||X.postfix&&Se==="infix")&&y.value!==0)w.throw_error(x.error.permission("create","operator",z,S.indicator));else return X[Se]&&(Ee(w.session.__operators[X[Se].priority][z.id],F.id),w.session.__operators[X[Se].priority][z.id].length===0&&delete w.session.__operators[X[Se].priority][z.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][z.id]||(w.session.__operators[y.value][z.id]=[]),w.session.__operators[y.value][z.id].push(F.id)),!0}}},predicate:{"op/3":function(w,S,y){x.directive["op/3"](w,y)&&w.success(S)},"current_op/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=[];for(var ie in w.session.__operators)for(var Se in w.session.__operators[ie])for(var Ne=0;Ne/2"){var F=w.points,z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(Ne){return Ne.substitution},w.session.format_error=function(Ne){return Ne.goal},w.points=[new be(y.args[0].args[0],S.substitution,S)];var Z=function(Ne){w.points=F,w.session.format_success=z,w.session.format_error=X,Ne===!1?w.prepend([new be(S.goal.replace(y.args[1]),S.substitution,S)]):x.type.is_error(Ne)?w.throw_error(Ne.args[0]):Ne===null?(w.prepend([S]),w.__calls.shift()(null)):w.prepend([new be(S.goal.replace(y.args[0].args[1]).apply(Ne),S.substitution.apply(Ne),S)])};w.__calls.unshift(Z)}else{var ie=new be(S.goal.replace(y.args[0]),S.substitution,S),Se=new be(S.goal.replace(y.args[1]),S.substitution,S);w.prepend([ie,Se])}},"!/0":function(w,S,y){var F,z,X=[];for(F=S,z=null;F.parent!==null&&F.parent.goal.search(y);)if(z=F,F=F.parent,F.goal!==null){var Z=F.goal.select();if(Z&&Z.id==="call"&&Z.search(y)){F=z;break}}for(var ie=w.points.length-1;ie>=0;ie--){for(var Se=w.points[ie],Ne=Se.parent;Ne!==null&&Ne!==F.parent;)Ne=Ne.parent;Ne===null&&Ne!==F.parent&&X.push(Se)}w.points=X.reverse(),w.success(S)},"\\+/1":function(w,S,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(w.level)):x.type.is_callable(F)?w.prepend([new be(S.goal.replace(new H(",",[new H(",",[new H("call",[F]),new H("!",[])]),new H("fail",[])])),S.substitution,S),new be(S.goal.replace(null),S.substitution,S)]):w.throw_error(x.error.type("callable",F,w.level))},"->/2":function(w,S,y){var F=S.goal.replace(new H(",",[y.args[0],new H(",",[new H("!"),y.args[1]])]));w.prepend([new be(F,S.substitution,S)])},"fail/0":function(w,S,y){},"false/0":function(w,S,y){},"true/0":function(w,S,y){w.success(S)},"call/1":ne(1),"call/2":ne(2),"call/3":ne(3),"call/4":ne(4),"call/5":ne(5),"call/6":ne(6),"call/7":ne(7),"call/8":ne(8),"once/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("call",[F]),new H("!",[])])),S.substitution,S)])},"forall/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("\\+",[new H(",",[new H("call",[F]),new H("\\+",[new H("call",[z])])])])),S.substitution,S)])},"repeat/0":function(w,S,y){w.prepend([new be(S.goal.replace(null),S.substitution,S),S])},"throw/1":function(w,S,y){x.type.is_variable(y.args[0])?w.throw_error(x.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,S,y){var F=w.points;w.points=[],w.prepend([new be(y.args[0],S.substitution,S)]);var z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(ie){return ie.substitution},w.session.format_error=function(ie){return ie.goal};var Z=function(ie){var Se=w.points;if(w.points=F,w.session.format_success=z,w.session.format_error=X,x.type.is_error(ie)){for(var Ne=[],ot=w.points.length-1;ot>=0;ot--){for(var $t=w.points[ot],dt=$t.parent;dt!==null&&dt!==S.parent;)dt=dt.parent;dt===null&&dt!==S.parent&&Ne.push($t)}w.points=Ne;var jt=w.get_flag("occurs_check").indicator==="true/0",$t=new be,xt=x.unify(ie.args[0],y.args[1],jt);xt!==null?($t.substitution=S.substitution.apply(xt),$t.goal=S.goal.replace(y.args[2]).apply(xt),$t.parent=S,w.prepend([$t])):w.throw_error(ie.args[0])}else if(ie!==!1){for(var an=ie===null?[]:[new be(S.goal.apply(ie).replace(null),S.substitution.apply(ie),S)],Qr=[],ot=Se.length-1;ot>=0;ot--){Qr.push(Se[ot]);var mr=Se[ot].goal!==null?Se[ot].goal.select():null;if(x.type.is_term(mr)&&mr.indicator==="!/0")break}var xr=o(Qr,function(Wr){return Wr.goal===null&&(Wr.goal=new H("true",[])),Wr=new be(S.goal.replace(new H("catch",[Wr.goal,y.args[1],y.args[2]])),S.substitution.apply(Wr.substitution),Wr.parent),Wr.exclude=y.args[0].variables(),Wr}).reverse();w.prepend(xr),w.prepend(an),ie===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift(Z)},"=/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=new be,X=x.unify(y.args[0],y.args[1],F);X!==null&&(z.goal=S.goal.apply(X).replace(null),z.substitution=S.substitution.apply(X),z.parent=S,w.prepend([z]))},"unify_with_occurs_check/2":function(w,S,y){var F=new be,z=x.unify(y.args[0],y.args[1],!0);z!==null&&(F.goal=S.goal.apply(z).replace(null),F.substitution=S.substitution.apply(z),F.parent=S,w.prepend([F]))},"\\=/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[0],y.args[1],F);z===null&&w.success(S)},"subsumes_term/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[1],y.args[0],F);z!==null&&y.args[1].apply(z).equals(y.args[1])&&w.success(S)},"findall/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(z))w.throw_error(x.error.type("callable",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=w.next_free_variable(),ie=new H(",",[z,new H("=",[Z,F])]),Se=w.points,Ne=w.session.limit,ot=w.session.format_success;w.session.format_success=function($t){return $t.substitution},w.add_goal(ie,!0,S);var dt=[],jt=function($t){if($t!==!1&&$t!==null&&!x.type.is_error($t))w.__calls.unshift(jt),dt.push($t.links[Z.id]),w.session.limit=w.current_limit;else if(w.points=Se,w.session.limit=Ne,w.session.format_success=ot,x.type.is_error($t))w.throw_error($t.args[0]);else if(w.current_limit>0){for(var xt=new H("[]"),an=dt.length-1;an>=0;an--)xt=new H(".",[dt[an],xt]);w.prepend([new be(S.goal.replace(new H("=",[X,xt])),S.substitution,S)])}};w.__calls.unshift(jt)}},"bagof/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))w.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Se;X.indicator==="^/2"?(Se=X.args[0].variables(),X=X.args[1]):Se=[],Se=Se.concat(z.variables());for(var Ne=X.variables().filter(function(xr){return e(Se,xr)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,xt=w.session.limit,an=w.session.format_success;w.session.format_success=function(xr){return xr.substitution},w.add_goal(jt,!0,S);var Qr=[],mr=function(xr){if(xr!==!1&&xr!==null&&!x.type.is_error(xr)){w.__calls.unshift(mr);var Wr=!1,Vn=xr.links[ie.id].args[0],Ns=xr.links[ie.id].args[1];for(var Ri in Qr)if(!!Qr.hasOwnProperty(Ri)){var ps=Qr[Ri];if(ps.variables.equals(Vn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Vn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=xt,w.session.format_success=an,x.type.is_error(xr))w.throw_error(xr.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Ls=new H(".",[xr[so],Ls]);io.push(new be(S.goal.replace(new H(",",[new H("=",[ot,Qr[Si].variables]),new H("=",[Z,Ls])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"setof/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))w.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Se;X.indicator==="^/2"?(Se=X.args[0].variables(),X=X.args[1]):Se=[],Se=Se.concat(z.variables());for(var Ne=X.variables().filter(function(xr){return e(Se,xr)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,xt=w.session.limit,an=w.session.format_success;w.session.format_success=function(xr){return xr.substitution},w.add_goal(jt,!0,S);var Qr=[],mr=function(xr){if(xr!==!1&&xr!==null&&!x.type.is_error(xr)){w.__calls.unshift(mr);var Wr=!1,Vn=xr.links[ie.id].args[0],Ns=xr.links[ie.id].args[1];for(var Ri in Qr)if(!!Qr.hasOwnProperty(Ri)){var ps=Qr[Ri];if(ps.variables.equals(Vn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Vn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=xt,w.session.format_success=an,x.type.is_error(xr))w.throw_error(xr.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Ls=new H(".",[xr[so],Ls]);io.push(new be(S.goal.replace(new H(",",[new H("=",[ot,Qr[Si].variables]),new H("=",[Z,Ls])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"functor/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(z)&&(x.type.is_variable(X)||x.type.is_variable(Z)))w.throw_error(x.error.instantiation("functor/3"));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",y.args[2],"functor/3"));else if(!x.type.is_variable(X)&&!x.type.is_atomic(X))w.throw_error(x.error.type("atomic",y.args[1],"functor/3"));else if(x.type.is_integer(X)&&x.type.is_integer(Z)&&Z.value!==0)w.throw_error(x.error.type("atom",y.args[1],"functor/3"));else if(x.type.is_variable(z)){if(y.args[2].value>=0){for(var ie=[],Se=0;Se0&&F<=y.args[1].args.length){var z=new H("=",[y.args[1].args[F-1],y.args[2]]);w.prepend([new be(S.goal.replace(z),S.substitution,S)])}}},"=../2":function(w,S,y){var F;if(x.type.is_variable(y.args[0])&&(x.type.is_variable(y.args[1])||x.type.is_non_empty_list(y.args[1])&&x.type.is_variable(y.args[1].args[0])))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_fully_list(y.args[1]))w.throw_error(x.error.type("list",y.args[1],y.indicator));else if(x.type.is_variable(y.args[0])){if(!x.type.is_variable(y.args[1])){var X=[];for(F=y.args[1].args[1];F.indicator==="./2";)X.push(F.args[0]),F=F.args[1];x.type.is_variable(y.args[0])&&x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):X.length===0&&x.type.is_compound(y.args[1].args[0])?w.throw_error(x.error.type("atomic",y.args[1].args[0],y.indicator)):X.length>0&&(x.type.is_compound(y.args[1].args[0])||x.type.is_number(y.args[1].args[0]))?w.throw_error(x.error.type("atom",y.args[1].args[0],y.indicator)):X.length===0?w.prepend([new be(S.goal.replace(new H("=",[y.args[1].args[0],y.args[0]],S)),S.substitution,S)]):w.prepend([new be(S.goal.replace(new H("=",[new H(y.args[1].args[0].id,X),y.args[0]])),S.substitution,S)])}}else{if(x.type.is_atomic(y.args[0]))F=new H(".",[y.args[0],new H("[]")]);else{F=new H("[]");for(var z=y.args[0].args.length-1;z>=0;z--)F=new H(".",[y.args[0].args[z],F]);F=new H(".",[new H(y.args[0].id),F])}w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S)])}},"copy_term/2":function(w,S,y){var F=y.args[0].rename(w);w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S.parent)])},"term_variables/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(!x.type.is_fully_list(z))w.throw_error(x.error.type("list",z,y.indicator));else{var X=g(o(De(F.variables()),function(Z){return new Ie(Z)}));w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"clause/2":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_callable(y.args[1]))w.throw_error(x.error.type("callable",y.args[1],y.indicator));else if(w.session.rules[y.args[0].indicator]!==void 0)if(w.is_public_predicate(y.args[0].indicator)){var F=[];for(var z in w.session.rules[y.args[0].indicator])if(!!w.session.rules[y.args[0].indicator].hasOwnProperty(z)){var X=w.session.rules[y.args[0].indicator][z];w.session.renamed_variables={},X=X.rename(w),X.body===null&&(X.body=new H("true"));var Z=new H(",",[new H("=",[X.head,y.args[0]]),new H("=",[X.body,y.args[1]])]);F.push(new be(S.goal.replace(Z),S.substitution,S))}w.prepend(F)}else w.throw_error(x.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,S,y){var F=y.args[0];if(!x.type.is_variable(F)&&(!x.type.is_compound(F)||F.indicator!=="//2"))w.throw_error(x.error.type("predicate_indicator",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[0])&&!x.type.is_atom(F.args[0]))w.throw_error(x.error.type("atom",F.args[0],y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[1])&&!x.type.is_integer(F.args[1]))w.throw_error(x.error.type("integer",F.args[1],y.indicator));else{var z=[];for(var X in w.session.rules)if(!!w.session.rules.hasOwnProperty(X)){var Z=X.lastIndexOf("/"),ie=X.substr(0,Z),Se=parseInt(X.substr(Z+1,X.length-(Z+1))),Ne=new H("/",[new H(ie),new ke(Se,!1)]),ot=new H("=",[Ne,F]);z.push(new be(S.goal.replace(ot),S.substitution,S))}w.prepend(z)}},"asserta/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Pe(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator]=[new _e(F,z,!0)].concat(w.session.rules[F.indicator]),w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"assertz/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Pe(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator].push(new _e(F,z,!0)),w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"retract/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;if(y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=y.args[0].args[1]):(F=y.args[0],z=new H("true")),typeof S.retract>"u")if(w.is_public_predicate(F.indicator)){if(w.session.rules[F.indicator]!==void 0){for(var X=[],Z=0;Zw.get_flag("max_arity").value)w.throw_error(x.error.representation("max_arity",y.indicator));else{var F=y.args[0].args[0].id+"/"+y.args[0].args[1].value;w.is_public_predicate(F)?(delete w.session.rules[F],w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F,y.indicator))}},"atom_length/2":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],y.indicator));else if(x.type.is_integer(y.args[1])&&y.args[1].value<0)w.throw_error(x.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var F=new ke(y.args[0].id.length,!1);w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S)])}},"atom_concat/3":function(w,S,y){var F,z,X=y.args[0],Z=y.args[1],ie=y.args[2];if(x.type.is_variable(ie)&&(x.type.is_variable(X)||x.type.is_variable(Z)))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))w.throw_error(x.error.type("atom",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_atom(Z))w.throw_error(x.error.type("atom",Z,y.indicator));else if(!x.type.is_variable(ie)&&!x.type.is_atom(ie))w.throw_error(x.error.type("atom",ie,y.indicator));else{var Se=x.type.is_variable(X),Ne=x.type.is_variable(Z);if(!Se&&!Ne)z=new H("=",[ie,new H(X.id+Z.id)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]);else if(Se&&!Ne)F=ie.id.substr(0,ie.id.length-Z.id.length),F+Z.id===ie.id&&(z=new H("=",[X,new H(F)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]));else if(Ne&&!Se)F=ie.id.substr(X.id.length),X.id+F===ie.id&&(z=new H("=",[Z,new H(F)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]));else{for(var ot=[],dt=0;dt<=ie.id.length;dt++){var jt=new H(ie.id.substr(0,dt)),$t=new H(ie.id.substr(dt));z=new H(",",[new H("=",[jt,X]),new H("=",[$t,Z])]),ot.push(new be(S.goal.replace(z),S.substitution,S))}w.prepend(ot)}}},"sub_atom/5":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2],ie=y.args[3],Se=y.args[4];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))w.throw_error(x.error.type("integer",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",Z,y.indicator));else if(!x.type.is_variable(ie)&&!x.type.is_integer(ie))w.throw_error(x.error.type("integer",ie,y.indicator));else if(x.type.is_integer(X)&&X.value<0)w.throw_error(x.error.domain("not_less_than_zero",X,y.indicator));else if(x.type.is_integer(Z)&&Z.value<0)w.throw_error(x.error.domain("not_less_than_zero",Z,y.indicator));else if(x.type.is_integer(ie)&&ie.value<0)w.throw_error(x.error.domain("not_less_than_zero",ie,y.indicator));else{var Ne=[],ot=[],dt=[];if(x.type.is_variable(X))for(F=0;F<=z.id.length;F++)Ne.push(F);else Ne.push(X.value);if(x.type.is_variable(Z))for(F=0;F<=z.id.length;F++)ot.push(F);else ot.push(Z.value);if(x.type.is_variable(ie))for(F=0;F<=z.id.length;F++)dt.push(F);else dt.push(ie.value);var jt=[];for(var $t in Ne)if(!!Ne.hasOwnProperty($t)){F=Ne[$t];for(var xt in ot)if(!!ot.hasOwnProperty(xt)){var an=ot[xt],Qr=z.id.length-F-an;if(e(dt,Qr)!==-1&&F+an+Qr===z.id.length){var mr=z.id.substr(F,an);if(z.id===z.id.substr(0,F)+mr+z.id.substr(F+an,Qr)){var xr=new H("=",[new H(mr),Se]),Wr=new H("=",[X,new ke(F)]),Vn=new H("=",[Z,new ke(an)]),Ns=new H("=",[ie,new ke(Qr)]),Ri=new H(",",[new H(",",[new H(",",[Wr,Vn]),Ns]),xr]);jt.push(new be(S.goal.replace(Ri),S.substitution,S))}}}}w.prepend(jt)}},"atom_chars/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var ie=z,Se=x.type.is_variable(F),Ne="";ie.indicator==="./2";){if(x.type.is_character(ie.args[0]))Ne+=ie.args[0].id;else if(x.type.is_variable(ie.args[0])&&Se){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}x.type.is_variable(ie)&&Se?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[new H(Ne),F])),S.substitution,S)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new H(F.id.charAt(Z)),X]);w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"atom_codes/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var ie=z,Se=x.type.is_variable(F),Ne="";ie.indicator==="./2";){if(x.type.is_character_code(ie.args[0]))Ne+=u(ie.args[0].value);else if(x.type.is_variable(ie.args[0])&&Se){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.representation("character_code",y.indicator));return}ie=ie.args[1]}x.type.is_variable(ie)&&Se?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[new H(Ne),F])),S.substitution,S)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new ke(n(F.id,Z),!1),X]);w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"char_code/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_character(F))w.throw_error(x.error.type("character",F,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_character_code(z))w.throw_error(x.error.representation("character_code",y.indicator));else if(x.type.is_variable(z)){var X=new ke(n(F.id,0),!1);w.prepend([new be(S.goal.replace(new H("=",[X,z])),S.substitution,S)])}else{var Z=new H(u(z.value));w.prepend([new be(S.goal.replace(new H("=",[Z,F])),S.substitution,S)])}},"number_chars/2":function(w,S,y){var F,z=y.args[0],X=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=x.type.is_variable(z);if(!x.type.is_variable(X)){var ie=X,Se=!0;for(F="";ie.indicator==="./2";){if(x.type.is_character(ie.args[0]))F+=ie.args[0].id;else if(x.type.is_variable(ie.args[0]))Se=!1;else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Se=Se&&x.type.is_empty_list(ie),!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)){w.throw_error(x.error.type("list",X,y.indicator));return}if(!Se&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else if(Se)if(x.type.is_variable(ie)&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!x.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,ot])),S.substitution,S)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new H(F.charAt(jt)),dt]);w.prepend([new be(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"number_codes/2":function(w,S,y){var F,z=y.args[0],X=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=x.type.is_variable(z);if(!x.type.is_variable(X)){var ie=X,Se=!0;for(F="";ie.indicator==="./2";){if(x.type.is_character_code(ie.args[0]))F+=u(ie.args[0].value);else if(x.type.is_variable(ie.args[0]))Se=!1;else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character_code",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Se=Se&&x.type.is_empty_list(ie),!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)){w.throw_error(x.error.type("list",X,y.indicator));return}if(!Se&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else if(Se)if(x.type.is_variable(ie)&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!x.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,ot])),S.substitution,S)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new ke(n(F,jt),!1),dt]);w.prepend([new be(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"upcase_atom/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,new H(F.id.toUpperCase(),[])])),S.substitution,S)]):w.throw_error(x.error.type("atom",F,y.indicator))},"downcase_atom/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,new H(F.id.toLowerCase(),[])])),S.substitution,S)]):w.throw_error(x.error.type("atom",F,y.indicator))},"atomic_list_concat/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("atomic_list_concat",[F,new H("",[]),z])),S.substitution,S)])},"atomic_list_concat/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(z)||x.type.is_variable(F)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_list(F))w.throw_error(x.error.type("list",F,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))w.throw_error(x.error.type("atom",X,y.indicator));else if(x.type.is_variable(X)){for(var ie="",Se=F;x.type.is_term(Se)&&Se.indicator==="./2";){if(!x.type.is_atom(Se.args[0])&&!x.type.is_number(Se.args[0])){w.throw_error(x.error.type("atomic",Se.args[0],y.indicator));return}ie!==""&&(ie+=z.id),x.type.is_atom(Se.args[0])?ie+=Se.args[0].id:ie+=""+Se.args[0].value,Se=Se.args[1]}ie=new H(ie,[]),x.type.is_variable(Se)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_term(Se)||Se.indicator!=="[]/0"?w.throw_error(x.error.type("list",F,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[ie,X])),S.substitution,S)])}else{var Z=g(o(X.id.split(z.id),function(Ne){return new H(Ne,[])}));w.prepend([new be(S.goal.replace(new H("=",[Z,F])),S.substitution,S)])}},"@=/2":function(w,S,y){x.compare(y.args[0],y.args[1])>0&&w.success(S)},"@>=/2":function(w,S,y){x.compare(y.args[0],y.args[1])>=0&&w.success(S)},"compare/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_atom(F)&&["<",">","="].indexOf(F.id)===-1)w.throw_error(x.type.domain("order",F,y.indicator));else{var Z=x.compare(z,X);Z=Z===0?"=":Z===-1?"<":">",w.prepend([new be(S.goal.replace(new H("=",[F,new H(Z,[])])),S.substitution,S)])}},"is/2":function(w,S,y){var F=y.args[1].interpret(w);x.type.is_number(F)?w.prepend([new be(S.goal.replace(new H("=",[y.args[0],F],w.level)),S.substitution,S)]):w.throw_error(F)},"between/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_integer(F))w.throw_error(x.error.type("integer",F,y.indicator));else if(!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))w.throw_error(x.error.type("integer",X,y.indicator));else if(x.type.is_variable(X)){var Z=[new be(S.goal.replace(new H("=",[X,F])),S.substitution,S)];F.value=X.value&&w.success(S)},"succ/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)&&x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_variable(F)&&!x.type.is_integer(F)?w.throw_error(x.error.type("integer",F,y.indicator)):!x.type.is_variable(z)&&!x.type.is_integer(z)?w.throw_error(x.error.type("integer",z,y.indicator)):!x.type.is_variable(F)&&F.value<0?w.throw_error(x.error.domain("not_less_than_zero",F,y.indicator)):!x.type.is_variable(z)&&z.value<0?w.throw_error(x.error.domain("not_less_than_zero",z,y.indicator)):(x.type.is_variable(z)||z.value>0)&&(x.type.is_variable(F)?w.prepend([new be(S.goal.replace(new H("=",[F,new ke(z.value-1,!1)])),S.substitution,S)]):w.prepend([new be(S.goal.replace(new H("=",[z,new ke(F.value+1,!1)])),S.substitution,S)]))},"=:=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F===0&&w.success(S)},"=\\=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F!==0&&w.success(S)},"/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>0&&w.success(S)},">=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>=0&&w.success(S)},"var/1":function(w,S,y){x.type.is_variable(y.args[0])&&w.success(S)},"atom/1":function(w,S,y){x.type.is_atom(y.args[0])&&w.success(S)},"atomic/1":function(w,S,y){x.type.is_atomic(y.args[0])&&w.success(S)},"compound/1":function(w,S,y){x.type.is_compound(y.args[0])&&w.success(S)},"integer/1":function(w,S,y){x.type.is_integer(y.args[0])&&w.success(S)},"float/1":function(w,S,y){x.type.is_float(y.args[0])&&w.success(S)},"number/1":function(w,S,y){x.type.is_number(y.args[0])&&w.success(S)},"nonvar/1":function(w,S,y){x.type.is_variable(y.args[0])||w.success(S)},"ground/1":function(w,S,y){y.variables().length===0&&w.success(S)},"acyclic_term/1":function(w,S,y){for(var F=S.substitution.apply(S.substitution),z=y.args[0].variables(),X=0;X0?xt[xt.length-1]:null,xt!==null&&(jt=J(w,xt,0,w.__get_max_priority(),!1))}if(jt.type===p&&jt.len===xt.length-1&&an.value==="."){jt=jt.value.rename(w);var Qr=new H("=",[z,jt]);if(ie.variables){var mr=g(o(De(jt.variables()),function(xr){return new Ie(xr)}));Qr=new H(",",[Qr,new H("=",[ie.variables,mr])])}if(ie.variable_names){var mr=g(o(De(jt.variables()),function(Wr){var Vn;for(Vn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Vn)&&w.session.renamed_variables[Vn]===Wr)break;return new H("=",[new H(Vn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.variable_names,mr])])}if(ie.singletons){var mr=g(o(new _e(jt,null).singleton_variables(),function(Wr){var Vn;for(Vn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Vn)&&w.session.renamed_variables[Vn]===Wr)break;return new H("=",[new H(Vn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.singletons,mr])])}w.prepend([new be(S.goal.replace(Qr),S.substitution,S)])}else jt.type===p?w.throw_error(x.error.syntax(xt[jt.len],"unexpected token",!1)):w.throw_error(jt.value)}}},"write/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write",[new Ie("S"),F])])),S.substitution,S)])},"write/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("false",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"writeq/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("writeq",[new Ie("S"),F])])),S.substitution,S)])},"writeq/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"write_canonical/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_canonical",[new Ie("S"),F])])),S.substitution,S)])},"write_canonical/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("true")]),new H(".",[new H("numbervars",[new H("false")]),new H("[]",[])])])])])),S.substitution,S)])},"write_term/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_term",[new Ie("S"),F,z])])),S.substitution,S)])},"write_term/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=x.type.is_stream(F)?F:w.get_stream_by_alias(F.id);if(x.type.is_variable(F)||x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else if(!x.type.is_stream(F)&&!x.type.is_atom(F))w.throw_error(x.error.domain("stream_or_alias",F,y.indicator));else if(!x.type.is_stream(Z)||Z.stream===null)w.throw_error(x.error.existence("stream",F,y.indicator));else if(Z.input)w.throw_error(x.error.permission("output","stream",F,y.indicator));else if(Z.type==="binary")w.throw_error(x.error.permission("output","binary_stream",F,y.indicator));else if(Z.position==="past_end_of_stream"&&Z.eof_action==="error")w.throw_error(x.error.permission("output","past_end_of_stream",F,y.indicator));else{for(var ie={},Se=X,Ne;x.type.is_term(Se)&&Se.indicator==="./2";){if(Ne=Se.args[0],x.type.is_variable(Ne)){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_write_option(Ne)){w.throw_error(x.error.domain("write_option",Ne,y.indicator));return}ie[Ne.id]=Ne.args[0].id==="true",Se=Se.args[1]}if(Se.indicator!=="[]/0"){x.type.is_variable(Se)?w.throw_error(x.error.instantiation(y.indicator)):w.throw_error(x.error.type("list",X,y.indicator));return}else{ie.session=w.session;var ot=z.toString(ie);Z.stream.put(ot,Z.position),typeof Z.position=="number"&&(Z.position+=ot.length),w.success(S)}}},"halt/0":function(w,S,y){w.points=[]},"halt/1":function(w,S,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_integer(F)?w.points=[]:w.throw_error(x.error.type("integer",F,y.indicator))},"current_prolog_flag/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_flag(F))w.throw_error(x.error.domain("prolog_flag",F,y.indicator));else{var X=[];for(var Z in x.flag)if(!!x.flag.hasOwnProperty(Z)){var ie=new H(",",[new H("=",[new H(Z),F]),new H("=",[w.get_flag(Z),z])]);X.push(new be(S.goal.replace(ie),S.substitution,S))}w.prepend(X)}},"set_prolog_flag/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)||x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?x.type.is_flag(F)?x.type.is_value_flag(F,z)?x.type.is_modifiable_flag(F)?(w.session.flag[F.id]=z,w.success(S)):w.throw_error(x.error.permission("modify","flag",F)):w.throw_error(x.error.domain("flag_value",new H("+",[F,z]),y.indicator)):w.throw_error(x.error.domain("prolog_flag",F,y.indicator)):w.throw_error(x.error.type("atom",F,y.indicator))}},flag:{bounded:{allowed:[new H("true"),new H("false")],value:new H("true"),changeable:!1},max_integer:{allowed:[new ke(Number.MAX_SAFE_INTEGER)],value:new ke(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new ke(Number.MIN_SAFE_INTEGER)],value:new ke(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new H("down"),new H("toward_zero")],value:new H("toward_zero"),changeable:!1},char_conversion:{allowed:[new H("on"),new H("off")],value:new H("on"),changeable:!0},debug:{allowed:[new H("on"),new H("off")],value:new H("off"),changeable:!0},max_arity:{allowed:[new H("unbounded")],value:new H("unbounded"),changeable:!1},unknown:{allowed:[new H("error"),new H("fail"),new H("warning")],value:new H("error"),changeable:!0},double_quotes:{allowed:[new H("chars"),new H("codes"),new H("atom")],value:new H("codes"),changeable:!0},occurs_check:{allowed:[new H("false"),new H("true")],value:new H("false"),changeable:!0},dialect:{allowed:[new H("tau")],value:new H("tau"),changeable:!1},version_data:{allowed:[new H("tau",[new ke(t.major,!1),new ke(t.minor,!1),new ke(t.patch,!1),new H(t.status)])],value:new H("tau",[new ke(t.major,!1),new ke(t.minor,!1),new ke(t.patch,!1),new H(t.status)]),changeable:!1},nodejs:{allowed:[new H("yes"),new H("no")],value:new H(typeof hl<"u"&&hl.exports?"yes":"no"),changeable:!1}},unify:function(w,S,y){y=y===void 0?!1:y;for(var F=[{left:w,right:S}],z={};F.length!==0;){var X=F.pop();if(w=X.left,S=X.right,x.type.is_term(w)&&x.type.is_term(S)){if(w.indicator!==S.indicator)return null;for(var Z=0;Zz.value?1:0:z}else return F},operate:function(w,S){if(x.type.is_operator(S)){for(var y=x.type.is_operator(S),F=[],z,X=!1,Z=0;Zw.get_flag("max_integer").value||z0?w.start+w.matches[0].length:w.start,z=y?new H("token_not_found"):new H("found",[new H(w.value.toString())]),X=new H(".",[new H("line",[new ke(w.line+1)]),new H(".",[new H("column",[new ke(F+1)]),new H(".",[z,new H("[]",[])])])]);return new H("error",[new H("syntax_error",[new H(S)]),X])},syntax_by_predicate:function(w,S){return new H("error",[new H("syntax_error",[new H(w)]),ee(S)])}},warning:{singleton:function(w,S,y){for(var F=new H("[]"),z=w.length-1;z>=0;z--)F=new H(".",[new Ie(w[z]),F]);return new H("warning",[new H("singleton_variables",[F,ee(S)]),new H(".",[new H("line",[new ke(y,!1)]),new H("[]")])])},failed_goal:function(w,S){return new H("warning",[new H("failed_goal",[w]),new H(".",[new H("line",[new ke(S,!1)]),new H("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,S,F){S instanceof Te&&(S=S.thread);var F=F||{};if(F.session=S?S.session:void 0,x.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var z=0,X="";if(x.type.is_substitution(w)){var Z=w.domain(!0);w=w.filter(function(Ne,ot){return!x.type.is_variable(ot)||Z.indexOf(ot.id)!==-1&&Ne!==ot.id})}for(var ie in w.links)!w.links.hasOwnProperty(ie)||(z++,X!==""&&(X+=", "),X+=ie.toString(F)+" = "+w.links[ie].toString(F));var Se=typeof S>"u"||S.points.length>0?" ;":".";return z===0?"true"+Se:X+Se},flatten_error:function(w){if(!x.type.is_error(w))return null;w=w.args[0];var S={};return S.type=w.args[0].id,S.thrown=S.type==="syntax_error"?null:w.args[1].id,S.expected=null,S.found=null,S.representation=null,S.existence=null,S.existence_type=null,S.line=null,S.column=null,S.permission_operation=null,S.permission_type=null,S.evaluation_type=null,S.type==="type_error"||S.type==="domain_error"?(S.expected=w.args[0].args[0].id,S.found=w.args[0].args[1].toString()):S.type==="syntax_error"?w.args[1].indicator==="./2"?(S.expected=w.args[0].args[0].id,S.found=w.args[1].args[1].args[1].args[0],S.found=S.found.id==="token_not_found"?S.found.id:S.found.args[0].id,S.line=w.args[1].args[0].args[0].value,S.column=w.args[1].args[1].args[0].args[0].value):S.thrown=w.args[1].id:S.type==="permission_error"?(S.found=w.args[0].args[2].toString(),S.permission_operation=w.args[0].args[0].id,S.permission_type=w.args[0].args[1].id):S.type==="evaluation_error"?S.evaluation_type=w.args[0].args[0].id:S.type==="representation_error"?S.representation=w.args[0].args[0].id:S.type==="existence_error"&&(S.existence=w.args[0].args[1].toString(),S.existence_type=w.args[0].args[0].id),S},create:function(w){return new x.type.Session(w)}};typeof hl<"u"?hl.exports=x:window.pl=x})()});function ame(t,e,r){t.prepend(r.map(o=>new Ra.default.type.State(e.goal.replace(o),e.substitution,e)))}function CH(t){let e=cme.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function ume(t,e){cme.set(t,e),t.consult(`:- use_module(library(${tdt.id})).`)}var wH,Ra,lme,c0,$gt,edt,cme,tdt,Ame=Et(()=>{Ye();wH=$e(g2()),Ra=$e(EH()),lme=$e(Be("vm")),{is_atom:c0,is_variable:$gt,is_instantiated_list:edt}=Ra.default.type;cme=new WeakMap;tdt=new Ra.default.type.Module("constraints",{["project_workspaces_by_descriptor/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!c0(o)||!c0(a)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let u=W.parseIdent(o.id),A=W.makeDescriptor(u,a.id),h=CH(t).tryWorkspaceByDescriptor(A);$gt(n)&&h!==null&&ame(t,e,[new Ra.default.type.Term("=",[n,new Ra.default.type.Term(String(h.relativeCwd))])]),c0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},["workspace_field/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!c0(o)||!c0(a)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let A=CH(t).tryWorkspaceByCwd(o.id);if(A==null)return;let p=(0,wH.default)(A.manifest.raw,a.id);typeof p>"u"||ame(t,e,[new Ra.default.type.Term("=",[n,new Ra.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},["workspace_field_test/3"]:(t,e,r)=>{let[o,a,n]=r.args;t.prepend([new Ra.default.type.State(e.goal.replace(new Ra.default.type.Term("workspace_field_test",[o,a,n,new Ra.default.type.Term("[]",[])])),e.substitution,e)])},["workspace_field_test/4"]:(t,e,r)=>{let[o,a,n,u]=r.args;if(!c0(o)||!c0(a)||!c0(n)||!edt(u)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let p=CH(t).tryWorkspaceByCwd(o.id);if(p==null)return;let h=(0,wH.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[v,b]of u.toJavaScript().entries())E[`$${v}`]=b;lme.default.runInNewContext(n.id,E)&&t.success(e)}},["project_workspaces_by_descriptor/3","workspace_field/3","workspace_field_test/3","workspace_field_test/4"])});var S2={};Kt(S2,{Constraints:()=>P2,DependencyType:()=>gme});function to(t){if(t instanceof vC.default.type.Num)return t.value;if(t instanceof vC.default.type.Term)switch(t.indicator){case"throw/1":return to(t.args[0]);case"error/1":return to(t.args[0]);case"error/2":if(t.args[0]instanceof vC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(to(t.args[0]),...to(t.args[1]));{let e=to(t.args[0]);return e.message+=` (in ${to(t.args[1])})`,e}case"syntax_error/1":return new zt(43,`Syntax error: ${to(t.args[0])}`);case"existence_error/2":return new zt(44,`Existence error: ${to(t.args[0])} ${to(t.args[1])} not found`);case"instantiation_error/0":return new zt(75,"Instantiation error: an argument is variable when an instantiated argument was expected");case"line/1":return{line:to(t.args[0])};case"column/1":return{column:to(t.args[0])};case"found/1":return{found:to(t.args[0])};case"./2":return[to(t.args[0])].concat(to(t.args[1]));case"//2":return`${to(t.args[0])}/${to(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function pme(t){let e;try{e=to(t)}catch(r){throw typeof r=="string"?new zt(42,`Unknown error: ${t} (note: ${r})`):r}return typeof e.line<"u"&&typeof e.column<"u"&&(e.message+=` at line ${e.line}, column ${e.column}`),e}function $d(t){return t.id==="null"?null:`${t.toJavaScript()}`}function rdt(t){if(t.id==="null")return null;{let e=t.toJavaScript();if(typeof e!="string")return JSON.stringify(e);try{return JSON.stringify(JSON.parse(e))}catch{return JSON.stringify(e)}}}function u0(t){return typeof t=="string"?`'${t}'`:"[]"}var hme,vC,gme,fme,IH,P2,x2=Et(()=>{Ye();Ye();Pt();hme=$e(Yde()),vC=$e(EH());B2();Ame();(0,hme.default)(vC.default);gme=(o=>(o.Dependencies="dependencies",o.DevDependencies="devDependencies",o.PeerDependencies="peerDependencies",o))(gme||{}),fme=["dependencies","devDependencies","peerDependencies"];IH=class{constructor(e,r){let o=1e3*e.workspaces.length;this.session=vC.default.create(o),ume(this.session,e),this.session.consult(":- use_module(library(lists))."),this.session.consult(r)}fetchNextAnswer(){return new Promise(e=>{this.session.answer(r=>{e(r)})})}async*makeQuery(e){let r=this.session.query(e);if(r!==!0)throw pme(r);for(;;){let o=await this.fetchNextAnswer();if(o===null)throw new zt(79,"Resolution limit exceeded");if(!o)break;if(o.id==="throw")throw pme(o);yield o}}};P2=class{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");oe.existsSync(r)&&(this.source=oe.readFileSync(r,"utf8"))}static async find(e){return new P2(e)}getProjectDatabase(){let e="";for(let r of fme)e+=`dependency_type(${r}). -`;for(let r of this.project.workspacesByCwd.values()){let o=r.relativeCwd;e+=`workspace(${u0(o)}). -`,e+=`workspace_ident(${u0(o)}, ${u0(W.stringifyIdent(r.anchoredLocator))}). -`,e+=`workspace_version(${u0(o)}, ${u0(r.manifest.version)}). -`;for(let a of fme)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${u0(o)}, ${u0(W.stringifyIdent(n))}, ${u0(n.range)}, ${a}). +`;break;case"r":y+="\r";break;case"t":y+=" ";break;case"v":y+="\v";break;case"'":y+="'";break;case'"':y+='"';break;case"\\":y+="\\";break}else return null;else y+=z}return y}function x(w){for(var P="",y=0;y\?\@\^\~\\]+|'(?:[^']*?(?:\\(?:x?\d+)?\\)*(?:'')*(?:\\')*)*')/,number:/^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abfnrtv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/,string:/^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/,l_brace:/^(?:\[)/,r_brace:/^(?:\])/,l_bracket:/^(?:\{)/,r_bracket:/^(?:\})/,bar:/^(?:\|)/,l_paren:/^(?:\()/,r_paren:/^(?:\))/};function L(w,P){return w.get_flag("char_conversion").id==="on"?P.replace(/./g,function(y){return w.get_char_conversion(y)}):P}function U(w){this.thread=w,this.text="",this.tokens=[]}U.prototype.set_last_tokens=function(w){return this.tokens=w},U.prototype.new_text=function(w){this.text=w,this.tokens=[]},U.prototype.get_tokens=function(w){var P,y=0,F=0,z=0,X=[],Z=!1;if(w){var ie=this.tokens[w-1];y=ie.len,P=L(this.thread,this.text.substr(ie.len)),F=ie.line,z=ie.start}else P=this.text;if(/^\s*$/.test(P))return null;for(;P!=="";){var Pe=[],Ne=!1;if(/^\n/.exec(P)!==null){F++,z=0,y++,P=P.replace(/\n/,""),Z=!0;continue}for(var ot in R)if(R.hasOwnProperty(ot)){var dt=R[ot].exec(P);dt&&Pe.push({value:dt[0],name:ot,matches:dt})}if(!Pe.length)return this.set_last_tokens([{value:P,matches:[],name:"lexical",line:F,start:z}]);var ie=r(Pe,function(Qr,mr){return Qr.value.length>=mr.value.length?Qr:mr});switch(ie.start=z,ie.line=F,P=P.replace(ie.value,""),z+=ie.value.length,y+=ie.value.length,ie.name){case"atom":ie.raw=ie.value,ie.value.charAt(0)==="'"&&(ie.value=v(ie.value.substr(1,ie.value.length-2),"'"),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence"));break;case"number":ie.float=ie.value.substring(0,2)!=="0x"&&ie.value.match(/[.eE]/)!==null&&ie.value!=="0'.",ie.value=C(ie.value),ie.blank=Ne;break;case"string":var jt=ie.value.charAt(0);ie.value=v(ie.value.substr(1,ie.value.length-2),jt),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence");break;case"whitespace":var $t=X[X.length-1];$t&&($t.space=!0),Ne=!0;continue;case"r_bracket":X.length>0&&X[X.length-1].name==="l_bracket"&&(ie=X.pop(),ie.name="atom",ie.value="{}",ie.raw="{}",ie.space=!1);break;case"r_brace":X.length>0&&X[X.length-1].name==="l_brace"&&(ie=X.pop(),ie.name="atom",ie.value="[]",ie.raw="[]",ie.space=!1);break}ie.len=y,X.push(ie),Ne=!1}var bt=this.set_last_tokens(X);return bt.length===0?null:bt};function J(w,P,y,F,z){if(!P[y])return{type:A,value:b.error.syntax(P[y-1],"expression expected",!0)};var X;if(F==="0"){var Z=P[y];switch(Z.name){case"number":return{type:p,len:y+1,value:new b.type.Num(Z.value,Z.float)};case"variable":return{type:p,len:y+1,value:new b.type.Var(Z.value)};case"string":var ie;switch(w.get_flag("double_quotes").id){case"atom":ie=new H(Z.value,[]);break;case"codes":ie=new H("[]",[]);for(var Pe=Z.value.length-1;Pe>=0;Pe--)ie=new H(".",[new b.type.Num(n(Z.value,Pe),!1),ie]);break;case"chars":ie=new H("[]",[]);for(var Pe=Z.value.length-1;Pe>=0;Pe--)ie=new H(".",[new b.type.Term(Z.value.charAt(Pe),[]),ie]);break}return{type:p,len:y+1,value:ie};case"l_paren":var bt=J(w,P,y+1,w.__get_max_priority(),!0);return bt.type!==p?bt:P[bt.len]&&P[bt.len].name==="r_paren"?(bt.len++,bt):{type:A,derived:!0,value:b.error.syntax(P[bt.len]?P[bt.len]:P[bt.len-1],") or operator expected",!P[bt.len])};case"l_bracket":var bt=J(w,P,y+1,w.__get_max_priority(),!0);return bt.type!==p?bt:P[bt.len]&&P[bt.len].name==="r_bracket"?(bt.len++,bt.value=new H("{}",[bt.value]),bt):{type:A,derived:!0,value:b.error.syntax(P[bt.len]?P[bt.len]:P[bt.len-1],"} or operator expected",!P[bt.len])}}var Ne=te(w,P,y,z);return Ne.type===p||Ne.derived||(Ne=ae(w,P,y),Ne.type===p||Ne.derived)?Ne:{type:A,derived:!1,value:b.error.syntax(P[y],"unexpected token")}}var ot=w.__get_max_priority(),dt=w.__get_next_priority(F),jt=y;if(P[y].name==="atom"&&P[y+1]&&(P[y].space||P[y+1].name!=="l_paren")){var Z=P[y++],$t=w.__lookup_operator_classes(F,Z.value);if($t&&$t.indexOf("fy")>-1){var bt=J(w,P,y,F,z);if(bt.type!==A)return Z.value==="-"&&!Z.space&&b.type.is_number(bt.value)?{value:new b.type.Num(-bt.value.value,bt.value.is_float),len:bt.len,type:p}:{value:new b.type.Term(Z.value,[bt.value]),len:bt.len,type:p};X=bt}else if($t&&$t.indexOf("fx")>-1){var bt=J(w,P,y,dt,z);if(bt.type!==A)return{value:new b.type.Term(Z.value,[bt.value]),len:bt.len,type:p};X=bt}}y=jt;var bt=J(w,P,y,dt,z);if(bt.type===p){y=bt.len;var Z=P[y];if(P[y]&&(P[y].name==="atom"&&w.__lookup_operator_classes(F,Z.value)||P[y].name==="bar"&&w.__lookup_operator_classes(F,"|"))){var an=dt,Qr=F,$t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("xf")>-1)return{value:new b.type.Term(Z.value,[bt.value]),len:++bt.len,type:p};if($t.indexOf("xfx")>-1){var mr=J(w,P,y+1,an,z);return mr.type===p?{value:new b.type.Term(Z.value,[bt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if($t.indexOf("xfy")>-1){var mr=J(w,P,y+1,Qr,z);return mr.type===p?{value:new b.type.Term(Z.value,[bt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if(bt.type!==A)for(;;){y=bt.len;var Z=P[y];if(Z&&Z.name==="atom"&&w.__lookup_operator_classes(F,Z.value)){var $t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("yf")>-1)bt={value:new b.type.Term(Z.value,[bt.value]),len:++y,type:p};else if($t.indexOf("yfx")>-1){var mr=J(w,P,++y,an,z);if(mr.type===A)return mr.derived=!0,mr;y=mr.len,bt={value:new b.type.Term(Z.value,[bt.value,mr.value]),len:y,type:p}}else break}else break}}else X={type:A,value:b.error.syntax(P[bt.len-1],"operator expected")};return bt}return bt}function te(w,P,y,F){if(!P[y]||P[y].name==="atom"&&P[y].raw==="."&&!F&&(P[y].space||!P[y+1]||P[y+1].name!=="l_paren"))return{type:A,derived:!1,value:b.error.syntax(P[y-1],"unfounded token")};var z=P[y],X=[];if(P[y].name==="atom"&&P[y].raw!==","){if(y++,P[y-1].space)return{type:p,len:y,value:new b.type.Term(z.value,X)};if(P[y]&&P[y].name==="l_paren"){if(P[y+1]&&P[y+1].name==="r_paren")return{type:A,derived:!0,value:b.error.syntax(P[y+1],"argument expected")};var Z=J(w,P,++y,"999",!0);if(Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:b.error.syntax(P[y]?P[y]:P[y-1],"argument expected",!P[y])};for(X.push(Z.value),y=Z.len;P[y]&&P[y].name==="atom"&&P[y].value===",";){if(Z=J(w,P,y+1,"999",!0),Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:b.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};X.push(Z.value),y=Z.len}if(P[y]&&P[y].name==="r_paren")y++;else return{type:A,derived:!0,value:b.error.syntax(P[y]?P[y]:P[y-1],", or ) expected",!P[y])}}return{type:p,len:y,value:new b.type.Term(z.value,X)}}return{type:A,derived:!1,value:b.error.syntax(P[y],"term expected")}}function ae(w,P,y){if(!P[y])return{type:A,derived:!1,value:b.error.syntax(P[y-1],"[ expected")};if(P[y]&&P[y].name==="l_brace"){var F=J(w,P,++y,"999",!0),z=[F.value],X=void 0;if(F.type===A)return P[y]&&P[y].name==="r_brace"?{type:p,len:y+1,value:new b.type.Term("[]",[])}:{type:A,derived:!0,value:b.error.syntax(P[y],"] expected")};for(y=F.len;P[y]&&P[y].name==="atom"&&P[y].value===",";){if(F=J(w,P,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:b.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};z.push(F.value),y=F.len}var Z=!1;if(P[y]&&P[y].name==="bar"){if(Z=!0,F=J(w,P,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:b.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};X=F.value,y=F.len}return P[y]&&P[y].name==="r_brace"?{type:p,len:y+1,value:g(z,X)}:{type:A,derived:!0,value:b.error.syntax(P[y]?P[y]:P[y-1],Z?"] expected":", or | or ] expected",!P[y])}}return{type:A,derived:!1,value:b.error.syntax(P[y],"list expected")}}function fe(w,P,y){var F=P[y].line,z=J(w,P,y,w.__get_max_priority(),!1),X=null,Z;if(z.type!==A)if(y=z.len,P[y]&&P[y].name==="atom"&&P[y].raw===".")if(y++,b.type.is_term(z.value)){if(z.value.indicator===":-/2"?(X=new b.type.Rule(z.value.args[0],we(z.value.args[1])),Z={value:X,len:y,type:p}):z.value.indicator==="-->/2"?(X=he(new b.type.Rule(z.value.args[0],z.value.args[1]),w),X.body=we(X.body),Z={value:X,len:y,type:b.type.is_rule(X)?p:A}):(X=new b.type.Rule(z.value,null),Z={value:X,len:y,type:p}),X){var ie=X.singleton_variables();ie.length>0&&w.throw_warning(b.warning.singleton(ie,X.head.indicator,F))}return Z}else return{type:A,value:b.error.syntax(P[y],"callable expected")};else return{type:A,value:b.error.syntax(P[y]?P[y]:P[y-1],". or operator expected")};return z}function ce(w,P,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var F=new U(w),z={},X;F.new_text(P);var Z=0,ie=F.get_tokens(Z);do{if(ie===null||!ie[Z])break;var Pe=fe(w,ie,Z);if(Pe.type===A)return new H("throw",[Pe.value]);if(Pe.value.body===null&&Pe.value.head.indicator==="?-/1"){var Ne=new Je(w.session);Ne.add_goal(Pe.value.head.args[0]),Ne.answer(function(dt){b.type.is_error(dt)?w.throw_warning(dt.args[0]):(dt===!1||dt===null)&&w.throw_warning(b.warning.failed_goal(Pe.value.head.args[0],Pe.len))}),Z=Pe.len;var ot=!0}else if(Pe.value.body===null&&Pe.value.head.indicator===":-/1"){var ot=w.run_directive(Pe.value.head.args[0]);Z=Pe.len,Pe.value.head.args[0].indicator==="char_conversion/2"&&(ie=F.get_tokens(Z),Z=0)}else{X=Pe.value.head.indicator,y.reconsult!==!1&&z[X]!==!0&&!w.is_multifile_predicate(X)&&(w.session.rules[X]=a(w.session.rules[X]||[],function(jt){return jt.dynamic}),z[X]=!0);var ot=w.add_rule(Pe.value,y);Z=Pe.len}if(!ot)return ot}while(!0);return!0}function me(w,P){var y=new U(w);y.new_text(P);var F=0;do{var z=y.get_tokens(F);if(z===null)break;var X=J(w,z,0,w.__get_max_priority(),!1);if(X.type!==A){var Z=X.len,ie=Z;if(z[Z]&&z[Z].name==="atom"&&z[Z].raw===".")w.add_goal(we(X.value));else{var Pe=z[Z];return new H("throw",[b.error.syntax(Pe||z[Z-1],". or operator expected",!Pe)])}F=X.len+1}else return new H("throw",[X.value])}while(!0);return!0}function he(w,P){w=w.rename(P);var y=P.next_free_variable(),F=Be(w.body,y,P);return F.error?F.value:(w.body=F.value,w.head.args=w.head.args.concat([y,F.variable]),w.head=new H(w.head.id,w.head.args),w)}function Be(w,P,y){var F;if(b.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:P,error:!1};if(b.type.is_term(w)&&w.indicator===",/2"){var z=Be(w.args[0],P,y);if(z.error)return z;var X=Be(w.args[1],z.variable,y);return X.error?X:{value:new H(",",[z.value,X.value]),variable:X.variable,error:!1}}else{if(b.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:P,error:!1};if(b.type.is_empty_list(w))return{value:new H("true",[]),variable:P,error:!1};if(b.type.is_list(w)){F=y.next_free_variable();for(var Z=w,ie;Z.indicator==="./2";)ie=Z,Z=Z.args[1];return b.type.is_variable(Z)?{value:b.error.instantiation("DCG"),variable:P,error:!0}:b.type.is_empty_list(Z)?(ie.args[1]=F,{value:new H("=",[P,w]),variable:F,error:!1}):{value:b.error.type("list",w,"DCG"),variable:P,error:!0}}else return b.type.is_callable(w)?(F=y.next_free_variable(),w.args=w.args.concat([P,F]),w=new H(w.id,w.args),{value:w,variable:F,error:!1}):{value:b.error.type("callable",w,"DCG"),variable:P,error:!0}}}function we(w){return b.type.is_variable(w)?new H("call",[w]):b.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new H(w.id,[we(w.args[0]),we(w.args[1])]):w}function g(w,P){for(var y=P||new b.type.Term("[]",[]),F=w.length-1;F>=0;F--)y=new b.type.Term(".",[w[F],y]);return y}function Ee(w,P){for(var y=w.length-1;y>=0;y--)w[y]===P&&w.splice(y,1)}function Se(w){for(var P={},y=[],F=0;F=0;P--)if(w.charAt(P)==="/")return new H("/",[new H(w.substring(0,P)),new Fe(parseInt(w.substring(P+1)),!1)])}function Ie(w){this.id=w}function Fe(w,P){this.is_float=P!==void 0?P:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var At=0;function H(w,P,y){this.ref=y||++At,this.id=w,this.args=P||[],this.indicator=w+"/"+this.args.length}var at=0;function Re(w,P,y,F,z,X){this.id=at++,this.stream=w,this.mode=P,this.alias=y,this.type=F!==void 0?F:"text",this.reposition=z!==void 0?z:!0,this.eof_action=X!==void 0?X:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function ke(w){w=w||{},this.links=w}function xe(w,P,y){P=P||new ke,y=y||null,this.goal=w,this.substitution=P,this.parent=y}function He(w,P,y){this.head=w,this.body=P,this.dynamic=y||!1}function Te(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new Je(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Re(typeof hl<"u"&&hl.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Re(typeof hl<"u"&&hl.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof hl<"u"&&hl.exports?nodejs_file_system:tau_file_system,this.standard_input=this.streams.user_input,this.standard_output=this.streams.user_output,this.current_input=this.streams.user_input,this.current_output=this.streams.user_output,this.format_success=function(P){return P.substitution},this.format_error=function(P){return P.goal},this.flag={bounded:b.flag.bounded.value,max_integer:b.flag.max_integer.value,min_integer:b.flag.min_integer.value,integer_rounding_function:b.flag.integer_rounding_function.value,char_conversion:b.flag.char_conversion.value,debug:b.flag.debug.value,max_arity:b.flag.max_arity.value,unknown:b.flag.unknown.value,double_quotes:b.flag.double_quotes.value,occurs_check:b.flag.occurs_check.value,dialect:b.flag.dialect.value,version_data:b.flag.version_data.value,nodejs:b.flag.nodejs.value},this.__loaded_modules=[],this.__char_conversion={},this.__operators={1200:{":-":["fx","xfx"],"-->":["xfx"],"?-":["fx"]},1100:{";":["xfy"]},1050:{"->":["xfy"]},1e3:{",":["xfy"]},900:{"\\+":["fy"]},700:{"=":["xfx"],"\\=":["xfx"],"==":["xfx"],"\\==":["xfx"],"@<":["xfx"],"@=<":["xfx"],"@>":["xfx"],"@>=":["xfx"],"=..":["xfx"],is:["xfx"],"=:=":["xfx"],"=\\=":["xfx"],"<":["xfx"],"=<":["xfx"],">":["xfx"],">=":["xfx"]},600:{":":["xfy"]},500:{"+":["yfx"],"-":["yfx"],"/\\":["yfx"],"\\/":["yfx"]},400:{"*":["yfx"],"/":["yfx"],"//":["yfx"],rem:["yfx"],mod:["yfx"],"<<":["yfx"],">>":["yfx"]},200:{"**":["xfx"],"^":["xfy"],"-":["fy"],"+":["fy"],"\\":["fy"]}}}function Je(w){this.epoch=Date.now(),this.session=w,this.session.total_threads++,this.total_steps=0,this.cpu_time=0,this.cpu_time_last=0,this.points=[],this.debugger=!1,this.debugger_states=[],this.level="top_level/0",this.__calls=[],this.current_limit=this.session.limit,this.warnings=[]}function qe(w,P,y){this.id=w,this.rules=P,this.exports=y,b.module[w]=this}qe.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},Ie.prototype.unify=function(w,P){if(P&&e(w.variables(),this.id)!==-1&&!b.type.is_variable(w))return null;var y={};return y[this.id]=w,new ke(y)},Fe.prototype.unify=function(w,P){return b.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new ke:null},H.prototype.unify=function(w,P){if(b.type.is_term(w)&&this.indicator===w.indicator){for(var y=new ke,F=0;F=0){var F=this.args[0].value,z=Math.floor(F/26),X=F%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[X]+(z!==0?z:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var Z="["+this.args[0].toString(w),ie=this.args[1];ie.indicator==="./2";)Z+=", "+ie.args[0].toString(w),ie=ie.args[1];return ie.indicator!=="[]/0"&&(Z+="|"+ie.toString(w)),Z+="]",Z;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var Pe=this.id,Ne=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Ne===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(Pe)&&Pe!=="{}"&&Pe!=="[]"&&(Pe="'"+x(Pe)+"'"),Pe+(this.args.length?"("+o(this.args,function($t){return $t.toString(w)}).join(", ")+")":"");var ot=Ne.priority>P.priority||Ne.priority===P.priority&&(Ne.class==="xfy"&&this.indicator!==P.indicator||Ne.class==="yfx"&&this.indicator!==P.indicator||this.indicator===P.indicator&&Ne.class==="yfx"&&y==="right"||this.indicator===P.indicator&&Ne.class==="xfy"&&y==="left");Ne.indicator=this.indicator;var dt=ot?"(":"",jt=ot?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Ne.class)!==-1?dt+Pe+" "+this.args[0].toString(w,Ne)+jt:["yf","xf"].indexOf(Ne.class)!==-1?dt+this.args[0].toString(w,Ne)+" "+Pe+jt:dt+this.args[0].toString(w,Ne,"left")+" "+this.id+" "+this.args[1].toString(w,Ne,"right")+jt}},Re.prototype.toString=function(w){return"("+this.id+")"},ke.prototype.toString=function(w){var P="{";for(var y in this.links)!this.links.hasOwnProperty(y)||(P!=="{"&&(P+=", "),P+=y+"/"+this.links[y].toString(w));return P+="}",P},xe.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},He.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},Te.prototype.toString=function(w){for(var P="",y=0;y=0;z--)F=new H(".",[P[z],F]);return F}return new H(this.id,o(this.args,function(X){return X.apply(w)}),this.ref)},Re.prototype.apply=function(w){return this},He.prototype.apply=function(w){return new He(this.head.apply(w),this.body!==null?this.body.apply(w):null)},ke.prototype.apply=function(w){var P,y={};for(P in this.links)!this.links.hasOwnProperty(P)||(y[P]=this.links[P].apply(w));return new ke(y)},H.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},H.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new H(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new H(",",[w,this.args[1]]):w},H.prototype.search=function(w){if(b.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var P=0;PP&&F0&&(P=this.head_point().substitution.domain());e(P,b.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new Ie(b.format_variable(this.session.rename));this.session.renamed_variables[w.id]=b.format_variable(this.session.rename)}return new Ie(this.session.renamed_variables[w.id])},Te.prototype.next_free_variable=function(){return this.thread.next_free_variable()},Je.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,b.format_variable(this.session.rename))!==-1;)this.session.rename++;return new Ie(b.format_variable(this.session.rename))},Te.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},Je.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},Te.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},Je.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},Te.prototype.prepend=function(w){return this.thread.prepend(w)},Je.prototype.prepend=function(w){for(var P=w.length-1;P>=0;P--)this.points.push(w[P])},Te.prototype.success=function(w,P){return this.thread.success(w,P)},Je.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new xe(w.goal.replace(null),w.substitution,y)])},Te.prototype.throw_error=function(w){return this.thread.throw_error(w)},Je.prototype.throw_error=function(w){this.prepend([new xe(new H("throw",[w]),new ke,null,null)])},Te.prototype.step_rule=function(w,P){return this.thread.step_rule(w,P)},Je.prototype.step_rule=function(w,P){var y=P.indicator;if(w==="user"&&(w=null),w===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var F=w===null?this.session.modules:e(this.session.modules,w)===-1?[]:[w],z=0;z1)&&this.again()},Te.prototype.answers=function(w,P,y){return this.thread.answers(w,P,y)},Je.prototype.answers=function(w,P,y){var F=P||1e3,z=this;if(P<=0){y&&y();return}this.answer(function(X){w(X),X!==!1?setTimeout(function(){z.answers(w,P-1,y)},1):y&&y()})},Te.prototype.again=function(w){return this.thread.again(w)},Je.prototype.again=function(w){for(var P,y=Date.now();this.__calls.length>0;){for(this.warnings=[],w!==!1&&(this.current_limit=this.session.limit);this.current_limit>0&&this.points.length>0&&this.head_point().goal!==null&&!b.type.is_error(this.head_point().goal);)if(this.current_limit--,this.step()===!0)return;var F=Date.now();this.cpu_time_last=F-y,this.cpu_time+=this.cpu_time_last;var z=this.__calls.shift();this.current_limit<=0?z(null):this.points.length===0?z(!1):b.type.is_error(this.head_point().goal)?(P=this.session.format_error(this.points.pop()),this.points=[],z(P)):(this.debugger&&this.debugger_states.push(this.head_point()),P=this.session.format_success(this.points.pop()),z(P))}},Te.prototype.unfold=function(w){if(w.body===null)return!1;var P=w.head,y=w.body,F=y.select(),z=new Je(this),X=[];z.add_goal(F),z.step();for(var Z=z.points.length-1;Z>=0;Z--){var ie=z.points[Z],Pe=P.apply(ie.substitution),Ne=y.replace(ie.goal);Ne!==null&&(Ne=Ne.apply(ie.substitution)),X.push(new He(Pe,Ne))}var ot=this.rules[P.indicator],dt=e(ot,w);return X.length>0&&dt!==-1?(ot.splice.apply(ot,[dt,1].concat(X)),!0):!1},Je.prototype.unfold=function(w){return this.session.unfold(w)},Ie.prototype.interpret=function(w){return b.error.instantiation(w.level)},Fe.prototype.interpret=function(w){return this},H.prototype.interpret=function(w){return b.type.is_unitary_list(this)?this.args[0].interpret(w):b.operate(w,this)},Ie.prototype.compare=function(w){return this.idw.id?1:0},Fe.prototype.compare=function(w){if(this.value===w.value&&this.is_float===w.is_float)return 0;if(this.valuew.value)return 1},H.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var P=0;PF)return 1;if(w.constructor===Fe){if(w.is_float&&P.is_float)return 0;if(w.is_float)return-1;if(P.is_float)return 1}return 0},is_substitution:function(w){return w instanceof ke},is_state:function(w){return w instanceof xe},is_rule:function(w){return w instanceof He},is_variable:function(w){return w instanceof Ie},is_stream:function(w){return w instanceof Re},is_anonymous_var:function(w){return w instanceof Ie&&w.id==="_"},is_callable:function(w){return w instanceof H},is_number:function(w){return w instanceof Fe},is_integer:function(w){return w instanceof Fe&&!w.is_float},is_float:function(w){return w instanceof Fe&&w.is_float},is_term:function(w){return w instanceof H},is_atom:function(w){return w instanceof H&&w.args.length===0},is_ground:function(w){if(w instanceof Ie)return!1;if(w instanceof H){for(var P=0;P0},is_list:function(w){return w instanceof H&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof H&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof H&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof Ie||w instanceof H&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof H&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof H&&w.indicator==="./2"&&w.args[1]instanceof H&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof H&&(w.id.length===1||w.id.length>0&&w.id.length<=2&&n(w.id,0)>=65536)},is_character_code:function(w){return w instanceof Fe&&!w.is_float&&w.value>=0&&w.value<=1114111},is_byte:function(w){return w instanceof Fe&&!w.is_float&&w.value>=0&&w.value<=255},is_operator:function(w){return w instanceof H&&b.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof H&&b.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof H&&b.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof H&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof H&&w.indicator==="//2"&&w.args[0]instanceof H&&w.args[0].args.length===0&&w.args[1]instanceof Fe&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof H&&w.args.length===0&&b.flag[w.id]!==void 0},is_value_flag:function(w,P){if(!b.type.is_flag(w))return!1;for(var y in b.flag[w.id].allowed)if(!!b.flag[w.id].allowed.hasOwnProperty(y)&&b.flag[w.id].allowed[y].equals(P))return!0;return!1},is_io_mode:function(w){return b.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return b.type.is_term(w)&&(w.indicator==="alias/1"&&b.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))},is_stream_position:function(w){return b.type.is_integer(w)&&w.value>=0||b.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return b.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(b.type.is_variable(w.args[0])||b.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="read"||w.args[0].id==="write"||w.args[0].id==="append"))||w.indicator==="eof_action/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))||w.indicator==="end_of_stream/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="at"||w.args[0].id==="past"||w.args[0].id==="not")))},is_streamable:function(w){return w.__proto__.stream!==void 0},is_read_option:function(w){return b.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return b.type.is_term(w)&&(w.indicator==="quoted/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return b.type.is_term(w)&&w.indicator==="force/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return b.type.is_flag(w)&&b.flag[w.id].changeable},is_module:function(w){return w instanceof H&&w.indicator==="library/1"&&w.args[0]instanceof H&&w.args[0].args.length===0&&b.module[w.args[0].id]!==void 0}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(w){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(w){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(w){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(w){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(w,P){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,P){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,P){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,P){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,P){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,P){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,P){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,P){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,P){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,P){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,P){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,P){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,P,y){return Math.atan2(w,P)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,P){return w>0?Math.log(w):b.error.evaluation("undefined",P.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,P,y){return w+P}},"-/2":{type_args:null,type_result:null,fn:function(w,P,y){return w-P}},"*/2":{type_args:null,type_result:null,fn:function(w,P,y){return w*P}},"//2":{type_args:null,type_result:!0,fn:function(w,P,y){return P?w/P:b.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,P,y){return P?parseInt(w/P):b.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,P,y){return Math.pow(w,P)}},"^/2":{type_args:null,type_result:null,fn:function(w,P,y){return Math.pow(w,P)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w>>P}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w&P}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w|P}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w^P}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return P?w%P:b.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return P?w-parseInt(w/P)*P:b.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,P,y){return Math.max(w,P)}},"min/2":{type_args:null,type_result:null,fn:function(w,P,y){return Math.min(w,P)}}}},directive:{"dynamic/1":function(w,P){var y=P.args[0];if(b.type.is_variable(y))w.throw_error(b.error.instantiation(P.indicator));else if(!b.type.is_compound(y)||y.indicator!=="//2")w.throw_error(b.error.type("predicate_indicator",y,P.indicator));else if(b.type.is_variable(y.args[0])||b.type.is_variable(y.args[1]))w.throw_error(b.error.instantiation(P.indicator));else if(!b.type.is_atom(y.args[0]))w.throw_error(b.error.type("atom",y.args[0],P.indicator));else if(!b.type.is_integer(y.args[1]))w.throw_error(b.error.type("integer",y.args[1],P.indicator));else{var F=P.args[0].args[0].id+"/"+P.args[0].args[1].value;w.session.public_predicates[F]=!0,w.session.rules[F]||(w.session.rules[F]=[])}},"multifile/1":function(w,P){var y=P.args[0];b.type.is_variable(y)?w.throw_error(b.error.instantiation(P.indicator)):!b.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(b.error.type("predicate_indicator",y,P.indicator)):b.type.is_variable(y.args[0])||b.type.is_variable(y.args[1])?w.throw_error(b.error.instantiation(P.indicator)):b.type.is_atom(y.args[0])?b.type.is_integer(y.args[1])?w.session.multifile_predicates[P.args[0].args[0].id+"/"+P.args[0].args[1].value]=!0:w.throw_error(b.error.type("integer",y.args[1],P.indicator)):w.throw_error(b.error.type("atom",y.args[0],P.indicator))},"set_prolog_flag/2":function(w,P){var y=P.args[0],F=P.args[1];b.type.is_variable(y)||b.type.is_variable(F)?w.throw_error(b.error.instantiation(P.indicator)):b.type.is_atom(y)?b.type.is_flag(y)?b.type.is_value_flag(y,F)?b.type.is_modifiable_flag(y)?w.session.flag[y.id]=F:w.throw_error(b.error.permission("modify","flag",y)):w.throw_error(b.error.domain("flag_value",new H("+",[y,F]),P.indicator)):w.throw_error(b.error.domain("prolog_flag",y,P.indicator)):w.throw_error(b.error.type("atom",y,P.indicator))},"use_module/1":function(w,P){var y=P.args[0];if(b.type.is_variable(y))w.throw_error(b.error.instantiation(P.indicator));else if(!b.type.is_term(y))w.throw_error(b.error.type("term",y,P.indicator));else if(b.type.is_module(y)){var F=y.args[0].id;e(w.session.modules,F)===-1&&w.session.modules.push(F)}},"char_conversion/2":function(w,P){var y=P.args[0],F=P.args[1];b.type.is_variable(y)||b.type.is_variable(F)?w.throw_error(b.error.instantiation(P.indicator)):b.type.is_character(y)?b.type.is_character(F)?y.id===F.id?delete w.session.__char_conversion[y.id]:w.session.__char_conversion[y.id]=F.id:w.throw_error(b.error.type("character",F,P.indicator)):w.throw_error(b.error.type("character",y,P.indicator))},"op/3":function(w,P){var y=P.args[0],F=P.args[1],z=P.args[2];if(b.type.is_variable(y)||b.type.is_variable(F)||b.type.is_variable(z))w.throw_error(b.error.instantiation(P.indicator));else if(!b.type.is_integer(y))w.throw_error(b.error.type("integer",y,P.indicator));else if(!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,P.indicator));else if(!b.type.is_atom(z))w.throw_error(b.error.type("atom",z,P.indicator));else if(y.value<0||y.value>1200)w.throw_error(b.error.domain("operator_priority",y,P.indicator));else if(z.id===",")w.throw_error(b.error.permission("modify","operator",z,P.indicator));else if(z.id==="|"&&(y.value<1001||F.id.length!==3))w.throw_error(b.error.permission("modify","operator",z,P.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(F.id)===-1)w.throw_error(b.error.domain("operator_specifier",F,P.indicator));else{var X={prefix:null,infix:null,postfix:null};for(var Z in w.session.__operators)if(!!w.session.__operators.hasOwnProperty(Z)){var ie=w.session.__operators[Z][z.id];ie&&(e(ie,"fx")!==-1&&(X.prefix={priority:Z,type:"fx"}),e(ie,"fy")!==-1&&(X.prefix={priority:Z,type:"fy"}),e(ie,"xf")!==-1&&(X.postfix={priority:Z,type:"xf"}),e(ie,"yf")!==-1&&(X.postfix={priority:Z,type:"yf"}),e(ie,"xfx")!==-1&&(X.infix={priority:Z,type:"xfx"}),e(ie,"xfy")!==-1&&(X.infix={priority:Z,type:"xfy"}),e(ie,"yfx")!==-1&&(X.infix={priority:Z,type:"yfx"}))}var Pe;switch(F.id){case"fy":case"fx":Pe="prefix";break;case"yf":case"xf":Pe="postfix";break;default:Pe="infix";break}if(((X.prefix&&Pe==="prefix"||X.postfix&&Pe==="postfix"||X.infix&&Pe==="infix")&&X[Pe].type!==F.id||X.infix&&Pe==="postfix"||X.postfix&&Pe==="infix")&&y.value!==0)w.throw_error(b.error.permission("create","operator",z,P.indicator));else return X[Pe]&&(Ee(w.session.__operators[X[Pe].priority][z.id],F.id),w.session.__operators[X[Pe].priority][z.id].length===0&&delete w.session.__operators[X[Pe].priority][z.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][z.id]||(w.session.__operators[y.value][z.id]=[]),w.session.__operators[y.value][z.id].push(F.id)),!0}}},predicate:{"op/3":function(w,P,y){b.directive["op/3"](w,y)&&w.success(P)},"current_op/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=[];for(var ie in w.session.__operators)for(var Pe in w.session.__operators[ie])for(var Ne=0;Ne/2"){var F=w.points,z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(Ne){return Ne.substitution},w.session.format_error=function(Ne){return Ne.goal},w.points=[new xe(y.args[0].args[0],P.substitution,P)];var Z=function(Ne){w.points=F,w.session.format_success=z,w.session.format_error=X,Ne===!1?w.prepend([new xe(P.goal.replace(y.args[1]),P.substitution,P)]):b.type.is_error(Ne)?w.throw_error(Ne.args[0]):Ne===null?(w.prepend([P]),w.__calls.shift()(null)):w.prepend([new xe(P.goal.replace(y.args[0].args[1]).apply(Ne),P.substitution.apply(Ne),P)])};w.__calls.unshift(Z)}else{var ie=new xe(P.goal.replace(y.args[0]),P.substitution,P),Pe=new xe(P.goal.replace(y.args[1]),P.substitution,P);w.prepend([ie,Pe])}},"!/0":function(w,P,y){var F,z,X=[];for(F=P,z=null;F.parent!==null&&F.parent.goal.search(y);)if(z=F,F=F.parent,F.goal!==null){var Z=F.goal.select();if(Z&&Z.id==="call"&&Z.search(y)){F=z;break}}for(var ie=w.points.length-1;ie>=0;ie--){for(var Pe=w.points[ie],Ne=Pe.parent;Ne!==null&&Ne!==F.parent;)Ne=Ne.parent;Ne===null&&Ne!==F.parent&&X.push(Pe)}w.points=X.reverse(),w.success(P)},"\\+/1":function(w,P,y){var F=y.args[0];b.type.is_variable(F)?w.throw_error(b.error.instantiation(w.level)):b.type.is_callable(F)?w.prepend([new xe(P.goal.replace(new H(",",[new H(",",[new H("call",[F]),new H("!",[])]),new H("fail",[])])),P.substitution,P),new xe(P.goal.replace(null),P.substitution,P)]):w.throw_error(b.error.type("callable",F,w.level))},"->/2":function(w,P,y){var F=P.goal.replace(new H(",",[y.args[0],new H(",",[new H("!"),y.args[1]])]));w.prepend([new xe(F,P.substitution,P)])},"fail/0":function(w,P,y){},"false/0":function(w,P,y){},"true/0":function(w,P,y){w.success(P)},"call/1":ne(1),"call/2":ne(2),"call/3":ne(3),"call/4":ne(4),"call/5":ne(5),"call/6":ne(6),"call/7":ne(7),"call/8":ne(8),"once/1":function(w,P,y){var F=y.args[0];w.prepend([new xe(P.goal.replace(new H(",",[new H("call",[F]),new H("!",[])])),P.substitution,P)])},"forall/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("\\+",[new H(",",[new H("call",[F]),new H("\\+",[new H("call",[z])])])])),P.substitution,P)])},"repeat/0":function(w,P,y){w.prepend([new xe(P.goal.replace(null),P.substitution,P),P])},"throw/1":function(w,P,y){b.type.is_variable(y.args[0])?w.throw_error(b.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,P,y){var F=w.points;w.points=[],w.prepend([new xe(y.args[0],P.substitution,P)]);var z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(ie){return ie.substitution},w.session.format_error=function(ie){return ie.goal};var Z=function(ie){var Pe=w.points;if(w.points=F,w.session.format_success=z,w.session.format_error=X,b.type.is_error(ie)){for(var Ne=[],ot=w.points.length-1;ot>=0;ot--){for(var $t=w.points[ot],dt=$t.parent;dt!==null&&dt!==P.parent;)dt=dt.parent;dt===null&&dt!==P.parent&&Ne.push($t)}w.points=Ne;var jt=w.get_flag("occurs_check").indicator==="true/0",$t=new xe,bt=b.unify(ie.args[0],y.args[1],jt);bt!==null?($t.substitution=P.substitution.apply(bt),$t.goal=P.goal.replace(y.args[2]).apply(bt),$t.parent=P,w.prepend([$t])):w.throw_error(ie.args[0])}else if(ie!==!1){for(var an=ie===null?[]:[new xe(P.goal.apply(ie).replace(null),P.substitution.apply(ie),P)],Qr=[],ot=Pe.length-1;ot>=0;ot--){Qr.push(Pe[ot]);var mr=Pe[ot].goal!==null?Pe[ot].goal.select():null;if(b.type.is_term(mr)&&mr.indicator==="!/0")break}var br=o(Qr,function(Wr){return Wr.goal===null&&(Wr.goal=new H("true",[])),Wr=new xe(P.goal.replace(new H("catch",[Wr.goal,y.args[1],y.args[2]])),P.substitution.apply(Wr.substitution),Wr.parent),Wr.exclude=y.args[0].variables(),Wr}).reverse();w.prepend(br),w.prepend(an),ie===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift(Z)},"=/2":function(w,P,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=new xe,X=b.unify(y.args[0],y.args[1],F);X!==null&&(z.goal=P.goal.apply(X).replace(null),z.substitution=P.substitution.apply(X),z.parent=P,w.prepend([z]))},"unify_with_occurs_check/2":function(w,P,y){var F=new xe,z=b.unify(y.args[0],y.args[1],!0);z!==null&&(F.goal=P.goal.apply(z).replace(null),F.substitution=P.substitution.apply(z),F.parent=P,w.prepend([F]))},"\\=/2":function(w,P,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=b.unify(y.args[0],y.args[1],F);z===null&&w.success(P)},"subsumes_term/2":function(w,P,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=b.unify(y.args[1],y.args[0],F);z!==null&&y.args[1].apply(z).equals(y.args[1])&&w.success(P)},"findall/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(z))w.throw_error(b.error.type("callable",z,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=w.next_free_variable(),ie=new H(",",[z,new H("=",[Z,F])]),Pe=w.points,Ne=w.session.limit,ot=w.session.format_success;w.session.format_success=function($t){return $t.substitution},w.add_goal(ie,!0,P);var dt=[],jt=function($t){if($t!==!1&&$t!==null&&!b.type.is_error($t))w.__calls.unshift(jt),dt.push($t.links[Z.id]),w.session.limit=w.current_limit;else if(w.points=Pe,w.session.limit=Ne,w.session.format_success=ot,b.type.is_error($t))w.throw_error($t.args[0]);else if(w.current_limit>0){for(var bt=new H("[]"),an=dt.length-1;an>=0;an--)bt=new H(".",[dt[an],bt]);w.prepend([new xe(P.goal.replace(new H("=",[X,bt])),P.substitution,P)])}};w.__calls.unshift(jt)}},"bagof/3":function(w,P,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(X))w.throw_error(b.error.type("callable",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_list(Z))w.throw_error(b.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Pe;X.indicator==="^/2"?(Pe=X.args[0].variables(),X=X.args[1]):Pe=[],Pe=Pe.concat(z.variables());for(var Ne=X.variables().filter(function(br){return e(Pe,br)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,bt=w.session.limit,an=w.session.format_success;w.session.format_success=function(br){return br.substitution},w.add_goal(jt,!0,P);var Qr=[],mr=function(br){if(br!==!1&&br!==null&&!b.type.is_error(br)){w.__calls.unshift(mr);var Wr=!1,Kn=br.links[ie.id].args[0],Ns=br.links[ie.id].args[1];for(var Ti in Qr)if(!!Qr.hasOwnProperty(Ti)){var ps=Qr[Ti];if(ps.variables.equals(Kn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Kn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=bt,w.session.format_success=an,b.type.is_error(br))w.throw_error(br.args[0]);else if(w.current_limit>0){for(var io=[],Pi=0;Pi=0;so--)Ls=new H(".",[br[so],Ls]);io.push(new xe(P.goal.replace(new H(",",[new H("=",[ot,Qr[Pi].variables]),new H("=",[Z,Ls])])),P.substitution,P))}w.prepend(io)}};w.__calls.unshift(mr)}},"setof/3":function(w,P,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(X))w.throw_error(b.error.type("callable",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_list(Z))w.throw_error(b.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Pe;X.indicator==="^/2"?(Pe=X.args[0].variables(),X=X.args[1]):Pe=[],Pe=Pe.concat(z.variables());for(var Ne=X.variables().filter(function(br){return e(Pe,br)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,bt=w.session.limit,an=w.session.format_success;w.session.format_success=function(br){return br.substitution},w.add_goal(jt,!0,P);var Qr=[],mr=function(br){if(br!==!1&&br!==null&&!b.type.is_error(br)){w.__calls.unshift(mr);var Wr=!1,Kn=br.links[ie.id].args[0],Ns=br.links[ie.id].args[1];for(var Ti in Qr)if(!!Qr.hasOwnProperty(Ti)){var ps=Qr[Ti];if(ps.variables.equals(Kn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Kn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=bt,w.session.format_success=an,b.type.is_error(br))w.throw_error(br.args[0]);else if(w.current_limit>0){for(var io=[],Pi=0;Pi=0;so--)Ls=new H(".",[br[so],Ls]);io.push(new xe(P.goal.replace(new H(",",[new H("=",[ot,Qr[Pi].variables]),new H("=",[Z,Ls])])),P.substitution,P))}w.prepend(io)}};w.__calls.unshift(mr)}},"functor/3":function(w,P,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(z)&&(b.type.is_variable(X)||b.type.is_variable(Z)))w.throw_error(b.error.instantiation("functor/3"));else if(!b.type.is_variable(Z)&&!b.type.is_integer(Z))w.throw_error(b.error.type("integer",y.args[2],"functor/3"));else if(!b.type.is_variable(X)&&!b.type.is_atomic(X))w.throw_error(b.error.type("atomic",y.args[1],"functor/3"));else if(b.type.is_integer(X)&&b.type.is_integer(Z)&&Z.value!==0)w.throw_error(b.error.type("atom",y.args[1],"functor/3"));else if(b.type.is_variable(z)){if(y.args[2].value>=0){for(var ie=[],Pe=0;Pe0&&F<=y.args[1].args.length){var z=new H("=",[y.args[1].args[F-1],y.args[2]]);w.prepend([new xe(P.goal.replace(z),P.substitution,P)])}}},"=../2":function(w,P,y){var F;if(b.type.is_variable(y.args[0])&&(b.type.is_variable(y.args[1])||b.type.is_non_empty_list(y.args[1])&&b.type.is_variable(y.args[1].args[0])))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_fully_list(y.args[1]))w.throw_error(b.error.type("list",y.args[1],y.indicator));else if(b.type.is_variable(y.args[0])){if(!b.type.is_variable(y.args[1])){var X=[];for(F=y.args[1].args[1];F.indicator==="./2";)X.push(F.args[0]),F=F.args[1];b.type.is_variable(y.args[0])&&b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):X.length===0&&b.type.is_compound(y.args[1].args[0])?w.throw_error(b.error.type("atomic",y.args[1].args[0],y.indicator)):X.length>0&&(b.type.is_compound(y.args[1].args[0])||b.type.is_number(y.args[1].args[0]))?w.throw_error(b.error.type("atom",y.args[1].args[0],y.indicator)):X.length===0?w.prepend([new xe(P.goal.replace(new H("=",[y.args[1].args[0],y.args[0]],P)),P.substitution,P)]):w.prepend([new xe(P.goal.replace(new H("=",[new H(y.args[1].args[0].id,X),y.args[0]])),P.substitution,P)])}}else{if(b.type.is_atomic(y.args[0]))F=new H(".",[y.args[0],new H("[]")]);else{F=new H("[]");for(var z=y.args[0].args.length-1;z>=0;z--)F=new H(".",[y.args[0].args[z],F]);F=new H(".",[new H(y.args[0].id),F])}w.prepend([new xe(P.goal.replace(new H("=",[F,y.args[1]])),P.substitution,P)])}},"copy_term/2":function(w,P,y){var F=y.args[0].rename(w);w.prepend([new xe(P.goal.replace(new H("=",[F,y.args[1]])),P.substitution,P.parent)])},"term_variables/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(!b.type.is_fully_list(z))w.throw_error(b.error.type("list",z,y.indicator));else{var X=g(o(Se(F.variables()),function(Z){return new Ie(Z)}));w.prepend([new xe(P.goal.replace(new H("=",[z,X])),P.substitution,P)])}},"clause/2":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else if(!b.type.is_variable(y.args[1])&&!b.type.is_callable(y.args[1]))w.throw_error(b.error.type("callable",y.args[1],y.indicator));else if(w.session.rules[y.args[0].indicator]!==void 0)if(w.is_public_predicate(y.args[0].indicator)){var F=[];for(var z in w.session.rules[y.args[0].indicator])if(!!w.session.rules[y.args[0].indicator].hasOwnProperty(z)){var X=w.session.rules[y.args[0].indicator][z];w.session.renamed_variables={},X=X.rename(w),X.body===null&&(X.body=new H("true"));var Z=new H(",",[new H("=",[X.head,y.args[0]]),new H("=",[X.body,y.args[1]])]);F.push(new xe(P.goal.replace(Z),P.substitution,P))}w.prepend(F)}else w.throw_error(b.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,P,y){var F=y.args[0];if(!b.type.is_variable(F)&&(!b.type.is_compound(F)||F.indicator!=="//2"))w.throw_error(b.error.type("predicate_indicator",F,y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_variable(F.args[0])&&!b.type.is_atom(F.args[0]))w.throw_error(b.error.type("atom",F.args[0],y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_variable(F.args[1])&&!b.type.is_integer(F.args[1]))w.throw_error(b.error.type("integer",F.args[1],y.indicator));else{var z=[];for(var X in w.session.rules)if(!!w.session.rules.hasOwnProperty(X)){var Z=X.lastIndexOf("/"),ie=X.substr(0,Z),Pe=parseInt(X.substr(Z+1,X.length-(Z+1))),Ne=new H("/",[new H(ie),new Fe(Pe,!1)]),ot=new H("=",[Ne,F]);z.push(new xe(P.goal.replace(ot),P.substitution,P))}w.prepend(z)}},"asserta/1":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=we(y.args[0].args[1])):(F=y.args[0],z=null),b.type.is_callable(F)?z!==null&&!b.type.is_callable(z)?w.throw_error(b.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator]=[new He(F,z,!0)].concat(w.session.rules[F.indicator]),w.success(P)):w.throw_error(b.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(b.error.type("callable",F,y.indicator))}},"assertz/1":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=we(y.args[0].args[1])):(F=y.args[0],z=null),b.type.is_callable(F)?z!==null&&!b.type.is_callable(z)?w.throw_error(b.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator].push(new He(F,z,!0)),w.success(P)):w.throw_error(b.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(b.error.type("callable",F,y.indicator))}},"retract/1":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var F,z;if(y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=y.args[0].args[1]):(F=y.args[0],z=new H("true")),typeof P.retract>"u")if(w.is_public_predicate(F.indicator)){if(w.session.rules[F.indicator]!==void 0){for(var X=[],Z=0;Zw.get_flag("max_arity").value)w.throw_error(b.error.representation("max_arity",y.indicator));else{var F=y.args[0].args[0].id+"/"+y.args[0].args[1].value;w.is_public_predicate(F)?(delete w.session.rules[F],w.success(P)):w.throw_error(b.error.permission("modify","static_procedure",F,y.indicator))}},"atom_length/2":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_atom(y.args[0]))w.throw_error(b.error.type("atom",y.args[0],y.indicator));else if(!b.type.is_variable(y.args[1])&&!b.type.is_integer(y.args[1]))w.throw_error(b.error.type("integer",y.args[1],y.indicator));else if(b.type.is_integer(y.args[1])&&y.args[1].value<0)w.throw_error(b.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var F=new Fe(y.args[0].id.length,!1);w.prepend([new xe(P.goal.replace(new H("=",[F,y.args[1]])),P.substitution,P)])}},"atom_concat/3":function(w,P,y){var F,z,X=y.args[0],Z=y.args[1],ie=y.args[2];if(b.type.is_variable(ie)&&(b.type.is_variable(X)||b.type.is_variable(Z)))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_atom(X))w.throw_error(b.error.type("atom",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_atom(Z))w.throw_error(b.error.type("atom",Z,y.indicator));else if(!b.type.is_variable(ie)&&!b.type.is_atom(ie))w.throw_error(b.error.type("atom",ie,y.indicator));else{var Pe=b.type.is_variable(X),Ne=b.type.is_variable(Z);if(!Pe&&!Ne)z=new H("=",[ie,new H(X.id+Z.id)]),w.prepend([new xe(P.goal.replace(z),P.substitution,P)]);else if(Pe&&!Ne)F=ie.id.substr(0,ie.id.length-Z.id.length),F+Z.id===ie.id&&(z=new H("=",[X,new H(F)]),w.prepend([new xe(P.goal.replace(z),P.substitution,P)]));else if(Ne&&!Pe)F=ie.id.substr(X.id.length),X.id+F===ie.id&&(z=new H("=",[Z,new H(F)]),w.prepend([new xe(P.goal.replace(z),P.substitution,P)]));else{for(var ot=[],dt=0;dt<=ie.id.length;dt++){var jt=new H(ie.id.substr(0,dt)),$t=new H(ie.id.substr(dt));z=new H(",",[new H("=",[jt,X]),new H("=",[$t,Z])]),ot.push(new xe(P.goal.replace(z),P.substitution,P))}w.prepend(ot)}}},"sub_atom/5":function(w,P,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2],ie=y.args[3],Pe=y.args[4];if(b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_integer(X))w.throw_error(b.error.type("integer",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_integer(Z))w.throw_error(b.error.type("integer",Z,y.indicator));else if(!b.type.is_variable(ie)&&!b.type.is_integer(ie))w.throw_error(b.error.type("integer",ie,y.indicator));else if(b.type.is_integer(X)&&X.value<0)w.throw_error(b.error.domain("not_less_than_zero",X,y.indicator));else if(b.type.is_integer(Z)&&Z.value<0)w.throw_error(b.error.domain("not_less_than_zero",Z,y.indicator));else if(b.type.is_integer(ie)&&ie.value<0)w.throw_error(b.error.domain("not_less_than_zero",ie,y.indicator));else{var Ne=[],ot=[],dt=[];if(b.type.is_variable(X))for(F=0;F<=z.id.length;F++)Ne.push(F);else Ne.push(X.value);if(b.type.is_variable(Z))for(F=0;F<=z.id.length;F++)ot.push(F);else ot.push(Z.value);if(b.type.is_variable(ie))for(F=0;F<=z.id.length;F++)dt.push(F);else dt.push(ie.value);var jt=[];for(var $t in Ne)if(!!Ne.hasOwnProperty($t)){F=Ne[$t];for(var bt in ot)if(!!ot.hasOwnProperty(bt)){var an=ot[bt],Qr=z.id.length-F-an;if(e(dt,Qr)!==-1&&F+an+Qr===z.id.length){var mr=z.id.substr(F,an);if(z.id===z.id.substr(0,F)+mr+z.id.substr(F+an,Qr)){var br=new H("=",[new H(mr),Pe]),Wr=new H("=",[X,new Fe(F)]),Kn=new H("=",[Z,new Fe(an)]),Ns=new H("=",[ie,new Fe(Qr)]),Ti=new H(",",[new H(",",[new H(",",[Wr,Kn]),Ns]),br]);jt.push(new xe(P.goal.replace(Ti),P.substitution,P))}}}}w.prepend(jt)}},"atom_chars/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(b.type.is_variable(F)&&b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(b.type.is_variable(F)){for(var ie=z,Pe=b.type.is_variable(F),Ne="";ie.indicator==="./2";){if(b.type.is_character(ie.args[0]))Ne+=ie.args[0].id;else if(b.type.is_variable(ie.args[0])&&Pe){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}b.type.is_variable(ie)&&Pe?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)?w.throw_error(b.error.type("list",z,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[new H(Ne),F])),P.substitution,P)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new H(F.id.charAt(Z)),X]);w.prepend([new xe(P.goal.replace(new H("=",[z,X])),P.substitution,P)])}},"atom_codes/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(b.type.is_variable(F)&&b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(b.type.is_variable(F)){for(var ie=z,Pe=b.type.is_variable(F),Ne="";ie.indicator==="./2";){if(b.type.is_character_code(ie.args[0]))Ne+=u(ie.args[0].value);else if(b.type.is_variable(ie.args[0])&&Pe){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.representation("character_code",y.indicator));return}ie=ie.args[1]}b.type.is_variable(ie)&&Pe?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)?w.throw_error(b.error.type("list",z,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[new H(Ne),F])),P.substitution,P)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new Fe(n(F.id,Z),!1),X]);w.prepend([new xe(P.goal.replace(new H("=",[z,X])),P.substitution,P)])}},"char_code/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(b.type.is_variable(F)&&b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_character(F))w.throw_error(b.error.type("character",F,y.indicator));else if(!b.type.is_variable(z)&&!b.type.is_integer(z))w.throw_error(b.error.type("integer",z,y.indicator));else if(!b.type.is_variable(z)&&!b.type.is_character_code(z))w.throw_error(b.error.representation("character_code",y.indicator));else if(b.type.is_variable(z)){var X=new Fe(n(F.id,0),!1);w.prepend([new xe(P.goal.replace(new H("=",[X,z])),P.substitution,P)])}else{var Z=new H(u(z.value));w.prepend([new xe(P.goal.replace(new H("=",[Z,F])),P.substitution,P)])}},"number_chars/2":function(w,P,y){var F,z=y.args[0],X=y.args[1];if(b.type.is_variable(z)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(z)&&!b.type.is_number(z))w.throw_error(b.error.type("number",z,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=b.type.is_variable(z);if(!b.type.is_variable(X)){var ie=X,Pe=!0;for(F="";ie.indicator==="./2";){if(b.type.is_character(ie.args[0]))F+=ie.args[0].id;else if(b.type.is_variable(ie.args[0]))Pe=!1;else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Pe=Pe&&b.type.is_empty_list(ie),!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)){w.throw_error(b.error.type("list",X,y.indicator));return}if(!Pe&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else if(Pe)if(b.type.is_variable(ie)&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!b.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(b.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[z,ot])),P.substitution,P)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new H(F.charAt(jt)),dt]);w.prepend([new xe(P.goal.replace(new H("=",[X,dt])),P.substitution,P)])}}},"number_codes/2":function(w,P,y){var F,z=y.args[0],X=y.args[1];if(b.type.is_variable(z)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(z)&&!b.type.is_number(z))w.throw_error(b.error.type("number",z,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=b.type.is_variable(z);if(!b.type.is_variable(X)){var ie=X,Pe=!0;for(F="";ie.indicator==="./2";){if(b.type.is_character_code(ie.args[0]))F+=u(ie.args[0].value);else if(b.type.is_variable(ie.args[0]))Pe=!1;else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character_code",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Pe=Pe&&b.type.is_empty_list(ie),!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)){w.throw_error(b.error.type("list",X,y.indicator));return}if(!Pe&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else if(Pe)if(b.type.is_variable(ie)&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!b.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(b.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[z,ot])),P.substitution,P)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new Fe(n(F,jt),!1),dt]);w.prepend([new xe(P.goal.replace(new H("=",[X,dt])),P.substitution,P)])}}},"upcase_atom/2":function(w,P,y){var F=y.args[0],z=y.args[1];b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(F)?!b.type.is_variable(z)&&!b.type.is_atom(z)?w.throw_error(b.error.type("atom",z,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[z,new H(F.id.toUpperCase(),[])])),P.substitution,P)]):w.throw_error(b.error.type("atom",F,y.indicator))},"downcase_atom/2":function(w,P,y){var F=y.args[0],z=y.args[1];b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(F)?!b.type.is_variable(z)&&!b.type.is_atom(z)?w.throw_error(b.error.type("atom",z,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[z,new H(F.id.toLowerCase(),[])])),P.substitution,P)]):w.throw_error(b.error.type("atom",F,y.indicator))},"atomic_list_concat/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("atomic_list_concat",[F,new H("",[]),z])),P.substitution,P)])},"atomic_list_concat/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(b.type.is_variable(z)||b.type.is_variable(F)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_list(F))w.throw_error(b.error.type("list",F,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_atom(X))w.throw_error(b.error.type("atom",X,y.indicator));else if(b.type.is_variable(X)){for(var ie="",Pe=F;b.type.is_term(Pe)&&Pe.indicator==="./2";){if(!b.type.is_atom(Pe.args[0])&&!b.type.is_number(Pe.args[0])){w.throw_error(b.error.type("atomic",Pe.args[0],y.indicator));return}ie!==""&&(ie+=z.id),b.type.is_atom(Pe.args[0])?ie+=Pe.args[0].id:ie+=""+Pe.args[0].value,Pe=Pe.args[1]}ie=new H(ie,[]),b.type.is_variable(Pe)?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_term(Pe)||Pe.indicator!=="[]/0"?w.throw_error(b.error.type("list",F,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[ie,X])),P.substitution,P)])}else{var Z=g(o(X.id.split(z.id),function(Ne){return new H(Ne,[])}));w.prepend([new xe(P.goal.replace(new H("=",[Z,F])),P.substitution,P)])}},"@=/2":function(w,P,y){b.compare(y.args[0],y.args[1])>0&&w.success(P)},"@>=/2":function(w,P,y){b.compare(y.args[0],y.args[1])>=0&&w.success(P)},"compare/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(b.type.is_atom(F)&&["<",">","="].indexOf(F.id)===-1)w.throw_error(b.type.domain("order",F,y.indicator));else{var Z=b.compare(z,X);Z=Z===0?"=":Z===-1?"<":">",w.prepend([new xe(P.goal.replace(new H("=",[F,new H(Z,[])])),P.substitution,P)])}},"is/2":function(w,P,y){var F=y.args[1].interpret(w);b.type.is_number(F)?w.prepend([new xe(P.goal.replace(new H("=",[y.args[0],F],w.level)),P.substitution,P)]):w.throw_error(F)},"between/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(b.type.is_variable(F)||b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_integer(F))w.throw_error(b.error.type("integer",F,y.indicator));else if(!b.type.is_integer(z))w.throw_error(b.error.type("integer",z,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_integer(X))w.throw_error(b.error.type("integer",X,y.indicator));else if(b.type.is_variable(X)){var Z=[new xe(P.goal.replace(new H("=",[X,F])),P.substitution,P)];F.value=X.value&&w.success(P)},"succ/2":function(w,P,y){var F=y.args[0],z=y.args[1];b.type.is_variable(F)&&b.type.is_variable(z)?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_variable(F)&&!b.type.is_integer(F)?w.throw_error(b.error.type("integer",F,y.indicator)):!b.type.is_variable(z)&&!b.type.is_integer(z)?w.throw_error(b.error.type("integer",z,y.indicator)):!b.type.is_variable(F)&&F.value<0?w.throw_error(b.error.domain("not_less_than_zero",F,y.indicator)):!b.type.is_variable(z)&&z.value<0?w.throw_error(b.error.domain("not_less_than_zero",z,y.indicator)):(b.type.is_variable(z)||z.value>0)&&(b.type.is_variable(F)?w.prepend([new xe(P.goal.replace(new H("=",[F,new Fe(z.value-1,!1)])),P.substitution,P)]):w.prepend([new xe(P.goal.replace(new H("=",[z,new Fe(F.value+1,!1)])),P.substitution,P)]))},"=:=/2":function(w,P,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F===0&&w.success(P)},"=\\=/2":function(w,P,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F!==0&&w.success(P)},"/2":function(w,P,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F>0&&w.success(P)},">=/2":function(w,P,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F>=0&&w.success(P)},"var/1":function(w,P,y){b.type.is_variable(y.args[0])&&w.success(P)},"atom/1":function(w,P,y){b.type.is_atom(y.args[0])&&w.success(P)},"atomic/1":function(w,P,y){b.type.is_atomic(y.args[0])&&w.success(P)},"compound/1":function(w,P,y){b.type.is_compound(y.args[0])&&w.success(P)},"integer/1":function(w,P,y){b.type.is_integer(y.args[0])&&w.success(P)},"float/1":function(w,P,y){b.type.is_float(y.args[0])&&w.success(P)},"number/1":function(w,P,y){b.type.is_number(y.args[0])&&w.success(P)},"nonvar/1":function(w,P,y){b.type.is_variable(y.args[0])||w.success(P)},"ground/1":function(w,P,y){y.variables().length===0&&w.success(P)},"acyclic_term/1":function(w,P,y){for(var F=P.substitution.apply(P.substitution),z=y.args[0].variables(),X=0;X0?bt[bt.length-1]:null,bt!==null&&(jt=J(w,bt,0,w.__get_max_priority(),!1))}if(jt.type===p&&jt.len===bt.length-1&&an.value==="."){jt=jt.value.rename(w);var Qr=new H("=",[z,jt]);if(ie.variables){var mr=g(o(Se(jt.variables()),function(br){return new Ie(br)}));Qr=new H(",",[Qr,new H("=",[ie.variables,mr])])}if(ie.variable_names){var mr=g(o(Se(jt.variables()),function(Wr){var Kn;for(Kn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Kn)&&w.session.renamed_variables[Kn]===Wr)break;return new H("=",[new H(Kn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.variable_names,mr])])}if(ie.singletons){var mr=g(o(new He(jt,null).singleton_variables(),function(Wr){var Kn;for(Kn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Kn)&&w.session.renamed_variables[Kn]===Wr)break;return new H("=",[new H(Kn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.singletons,mr])])}w.prepend([new xe(P.goal.replace(Qr),P.substitution,P)])}else jt.type===p?w.throw_error(b.error.syntax(bt[jt.len],"unexpected token",!1)):w.throw_error(jt.value)}}},"write/1":function(w,P,y){var F=y.args[0];w.prepend([new xe(P.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write",[new Ie("S"),F])])),P.substitution,P)])},"write/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("false",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),P.substitution,P)])},"writeq/1":function(w,P,y){var F=y.args[0];w.prepend([new xe(P.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("writeq",[new Ie("S"),F])])),P.substitution,P)])},"writeq/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),P.substitution,P)])},"write_canonical/1":function(w,P,y){var F=y.args[0];w.prepend([new xe(P.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_canonical",[new Ie("S"),F])])),P.substitution,P)])},"write_canonical/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("true")]),new H(".",[new H("numbervars",[new H("false")]),new H("[]",[])])])])])),P.substitution,P)])},"write_term/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_term",[new Ie("S"),F,z])])),P.substitution,P)])},"write_term/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=b.type.is_stream(F)?F:w.get_stream_by_alias(F.id);if(b.type.is_variable(F)||b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else if(!b.type.is_stream(F)&&!b.type.is_atom(F))w.throw_error(b.error.domain("stream_or_alias",F,y.indicator));else if(!b.type.is_stream(Z)||Z.stream===null)w.throw_error(b.error.existence("stream",F,y.indicator));else if(Z.input)w.throw_error(b.error.permission("output","stream",F,y.indicator));else if(Z.type==="binary")w.throw_error(b.error.permission("output","binary_stream",F,y.indicator));else if(Z.position==="past_end_of_stream"&&Z.eof_action==="error")w.throw_error(b.error.permission("output","past_end_of_stream",F,y.indicator));else{for(var ie={},Pe=X,Ne;b.type.is_term(Pe)&&Pe.indicator==="./2";){if(Ne=Pe.args[0],b.type.is_variable(Ne)){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_write_option(Ne)){w.throw_error(b.error.domain("write_option",Ne,y.indicator));return}ie[Ne.id]=Ne.args[0].id==="true",Pe=Pe.args[1]}if(Pe.indicator!=="[]/0"){b.type.is_variable(Pe)?w.throw_error(b.error.instantiation(y.indicator)):w.throw_error(b.error.type("list",X,y.indicator));return}else{ie.session=w.session;var ot=z.toString(ie);Z.stream.put(ot,Z.position),typeof Z.position=="number"&&(Z.position+=ot.length),w.success(P)}}},"halt/0":function(w,P,y){w.points=[]},"halt/1":function(w,P,y){var F=y.args[0];b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_integer(F)?w.points=[]:w.throw_error(b.error.type("integer",F,y.indicator))},"current_prolog_flag/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_flag(F))w.throw_error(b.error.domain("prolog_flag",F,y.indicator));else{var X=[];for(var Z in b.flag)if(!!b.flag.hasOwnProperty(Z)){var ie=new H(",",[new H("=",[new H(Z),F]),new H("=",[w.get_flag(Z),z])]);X.push(new xe(P.goal.replace(ie),P.substitution,P))}w.prepend(X)}},"set_prolog_flag/2":function(w,P,y){var F=y.args[0],z=y.args[1];b.type.is_variable(F)||b.type.is_variable(z)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(F)?b.type.is_flag(F)?b.type.is_value_flag(F,z)?b.type.is_modifiable_flag(F)?(w.session.flag[F.id]=z,w.success(P)):w.throw_error(b.error.permission("modify","flag",F)):w.throw_error(b.error.domain("flag_value",new H("+",[F,z]),y.indicator)):w.throw_error(b.error.domain("prolog_flag",F,y.indicator)):w.throw_error(b.error.type("atom",F,y.indicator))}},flag:{bounded:{allowed:[new H("true"),new H("false")],value:new H("true"),changeable:!1},max_integer:{allowed:[new Fe(Number.MAX_SAFE_INTEGER)],value:new Fe(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new Fe(Number.MIN_SAFE_INTEGER)],value:new Fe(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new H("down"),new H("toward_zero")],value:new H("toward_zero"),changeable:!1},char_conversion:{allowed:[new H("on"),new H("off")],value:new H("on"),changeable:!0},debug:{allowed:[new H("on"),new H("off")],value:new H("off"),changeable:!0},max_arity:{allowed:[new H("unbounded")],value:new H("unbounded"),changeable:!1},unknown:{allowed:[new H("error"),new H("fail"),new H("warning")],value:new H("error"),changeable:!0},double_quotes:{allowed:[new H("chars"),new H("codes"),new H("atom")],value:new H("codes"),changeable:!0},occurs_check:{allowed:[new H("false"),new H("true")],value:new H("false"),changeable:!0},dialect:{allowed:[new H("tau")],value:new H("tau"),changeable:!1},version_data:{allowed:[new H("tau",[new Fe(t.major,!1),new Fe(t.minor,!1),new Fe(t.patch,!1),new H(t.status)])],value:new H("tau",[new Fe(t.major,!1),new Fe(t.minor,!1),new Fe(t.patch,!1),new H(t.status)]),changeable:!1},nodejs:{allowed:[new H("yes"),new H("no")],value:new H(typeof hl<"u"&&hl.exports?"yes":"no"),changeable:!1}},unify:function(w,P,y){y=y===void 0?!1:y;for(var F=[{left:w,right:P}],z={};F.length!==0;){var X=F.pop();if(w=X.left,P=X.right,b.type.is_term(w)&&b.type.is_term(P)){if(w.indicator!==P.indicator)return null;for(var Z=0;Zz.value?1:0:z}else return F},operate:function(w,P){if(b.type.is_operator(P)){for(var y=b.type.is_operator(P),F=[],z,X=!1,Z=0;Zw.get_flag("max_integer").value||z0?w.start+w.matches[0].length:w.start,z=y?new H("token_not_found"):new H("found",[new H(w.value.toString())]),X=new H(".",[new H("line",[new Fe(w.line+1)]),new H(".",[new H("column",[new Fe(F+1)]),new H(".",[z,new H("[]",[])])])]);return new H("error",[new H("syntax_error",[new H(P)]),X])},syntax_by_predicate:function(w,P){return new H("error",[new H("syntax_error",[new H(w)]),ee(P)])}},warning:{singleton:function(w,P,y){for(var F=new H("[]"),z=w.length-1;z>=0;z--)F=new H(".",[new Ie(w[z]),F]);return new H("warning",[new H("singleton_variables",[F,ee(P)]),new H(".",[new H("line",[new Fe(y,!1)]),new H("[]")])])},failed_goal:function(w,P){return new H("warning",[new H("failed_goal",[w]),new H(".",[new H("line",[new Fe(P,!1)]),new H("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,P,F){P instanceof Te&&(P=P.thread);var F=F||{};if(F.session=P?P.session:void 0,b.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var z=0,X="";if(b.type.is_substitution(w)){var Z=w.domain(!0);w=w.filter(function(Ne,ot){return!b.type.is_variable(ot)||Z.indexOf(ot.id)!==-1&&Ne!==ot.id})}for(var ie in w.links)!w.links.hasOwnProperty(ie)||(z++,X!==""&&(X+=", "),X+=ie.toString(F)+" = "+w.links[ie].toString(F));var Pe=typeof P>"u"||P.points.length>0?" ;":".";return z===0?"true"+Pe:X+Pe},flatten_error:function(w){if(!b.type.is_error(w))return null;w=w.args[0];var P={};return P.type=w.args[0].id,P.thrown=P.type==="syntax_error"?null:w.args[1].id,P.expected=null,P.found=null,P.representation=null,P.existence=null,P.existence_type=null,P.line=null,P.column=null,P.permission_operation=null,P.permission_type=null,P.evaluation_type=null,P.type==="type_error"||P.type==="domain_error"?(P.expected=w.args[0].args[0].id,P.found=w.args[0].args[1].toString()):P.type==="syntax_error"?w.args[1].indicator==="./2"?(P.expected=w.args[0].args[0].id,P.found=w.args[1].args[1].args[1].args[0],P.found=P.found.id==="token_not_found"?P.found.id:P.found.args[0].id,P.line=w.args[1].args[0].args[0].value,P.column=w.args[1].args[1].args[0].args[0].value):P.thrown=w.args[1].id:P.type==="permission_error"?(P.found=w.args[0].args[2].toString(),P.permission_operation=w.args[0].args[0].id,P.permission_type=w.args[0].args[1].id):P.type==="evaluation_error"?P.evaluation_type=w.args[0].args[0].id:P.type==="representation_error"?P.representation=w.args[0].args[0].id:P.type==="existence_error"&&(P.existence=w.args[0].args[1].toString(),P.existence_type=w.args[0].args[0].id),P},create:function(w){return new b.type.Session(w)}};typeof hl<"u"?hl.exports=b:window.pl=b})()});function ime(t,e,r){t.prepend(r.map(o=>new Ta.default.type.State(e.goal.replace(o),e.substitution,e)))}function yH(t){let e=ome.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function ame(t,e){ome.set(t,e),t.consult(`:- use_module(library(${zgt.id})).`)}var EH,Ta,sme,u0,Vgt,Jgt,ome,zgt,lme=Et(()=>{Ye();EH=$e(d2()),Ta=$e(mH()),sme=$e(ve("vm")),{is_atom:u0,is_variable:Vgt,is_instantiated_list:Jgt}=Ta.default.type;ome=new WeakMap;zgt=new Ta.default.type.Module("constraints",{["project_workspaces_by_descriptor/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!u0(o)||!u0(a)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let u=W.parseIdent(o.id),A=W.makeDescriptor(u,a.id),h=yH(t).tryWorkspaceByDescriptor(A);Vgt(n)&&h!==null&&ime(t,e,[new Ta.default.type.Term("=",[n,new Ta.default.type.Term(String(h.relativeCwd))])]),u0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},["workspace_field/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!u0(o)||!u0(a)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let A=yH(t).tryWorkspaceByCwd(o.id);if(A==null)return;let p=(0,EH.default)(A.manifest.raw,a.id);typeof p>"u"||ime(t,e,[new Ta.default.type.Term("=",[n,new Ta.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},["workspace_field_test/3"]:(t,e,r)=>{let[o,a,n]=r.args;t.prepend([new Ta.default.type.State(e.goal.replace(new Ta.default.type.Term("workspace_field_test",[o,a,n,new Ta.default.type.Term("[]",[])])),e.substitution,e)])},["workspace_field_test/4"]:(t,e,r)=>{let[o,a,n,u]=r.args;if(!u0(o)||!u0(a)||!u0(n)||!Jgt(u)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let p=yH(t).tryWorkspaceByCwd(o.id);if(p==null)return;let h=(0,EH.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[v,x]of u.toJavaScript().entries())E[`$${v}`]=x;sme.default.runInNewContext(n.id,E)&&t.success(e)}},["project_workspaces_by_descriptor/3","workspace_field/3","workspace_field_test/3","workspace_field_test/4"])});var b2={};Vt(b2,{Constraints:()=>P2,DependencyType:()=>fme});function to(t){if(t instanceof DC.default.type.Num)return t.value;if(t instanceof DC.default.type.Term)switch(t.indicator){case"throw/1":return to(t.args[0]);case"error/1":return to(t.args[0]);case"error/2":if(t.args[0]instanceof DC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(to(t.args[0]),...to(t.args[1]));{let e=to(t.args[0]);return e.message+=` (in ${to(t.args[1])})`,e}case"syntax_error/1":return new zt(43,`Syntax error: ${to(t.args[0])}`);case"existence_error/2":return new zt(44,`Existence error: ${to(t.args[0])} ${to(t.args[1])} not found`);case"instantiation_error/0":return new zt(75,"Instantiation error: an argument is variable when an instantiated argument was expected");case"line/1":return{line:to(t.args[0])};case"column/1":return{column:to(t.args[0])};case"found/1":return{found:to(t.args[0])};case"./2":return[to(t.args[0])].concat(to(t.args[1]));case"//2":return`${to(t.args[0])}/${to(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function ume(t){let e;try{e=to(t)}catch(r){throw typeof r=="string"?new zt(42,`Unknown error: ${t} (note: ${r})`):r}return typeof e.line<"u"&&typeof e.column<"u"&&(e.message+=` at line ${e.line}, column ${e.column}`),e}function em(t){return t.id==="null"?null:`${t.toJavaScript()}`}function Xgt(t){if(t.id==="null")return null;{let e=t.toJavaScript();if(typeof e!="string")return JSON.stringify(e);try{return JSON.stringify(JSON.parse(e))}catch{return JSON.stringify(e)}}}function A0(t){return typeof t=="string"?`'${t}'`:"[]"}var Ame,DC,fme,cme,CH,P2,x2=Et(()=>{Ye();Ye();St();Ame=$e(qde()),DC=$e(mH());v2();lme();(0,Ame.default)(DC.default);fme=(o=>(o.Dependencies="dependencies",o.DevDependencies="devDependencies",o.PeerDependencies="peerDependencies",o))(fme||{}),cme=["dependencies","devDependencies","peerDependencies"];CH=class{constructor(e,r){let o=1e3*e.workspaces.length;this.session=DC.default.create(o),ame(this.session,e),this.session.consult(":- use_module(library(lists))."),this.session.consult(r)}fetchNextAnswer(){return new Promise(e=>{this.session.answer(r=>{e(r)})})}async*makeQuery(e){let r=this.session.query(e);if(r!==!0)throw ume(r);for(;;){let o=await this.fetchNextAnswer();if(o===null)throw new zt(79,"Resolution limit exceeded");if(!o)break;if(o.id==="throw")throw ume(o);yield o}}};P2=class{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");oe.existsSync(r)&&(this.source=oe.readFileSync(r,"utf8"))}static async find(e){return new P2(e)}getProjectDatabase(){let e="";for(let r of cme)e+=`dependency_type(${r}). +`;for(let r of this.project.workspacesByCwd.values()){let o=r.relativeCwd;e+=`workspace(${A0(o)}). +`,e+=`workspace_ident(${A0(o)}, ${A0(W.stringifyIdent(r.anchoredLocator))}). +`,e+=`workspace_version(${A0(o)}, ${A0(r.manifest.version)}). +`;for(let a of cme)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${A0(o)}, ${A0(W.stringifyIdent(n))}, ${A0(n.range)}, ${a}). `}return e+=`workspace(_) :- false. `,e+=`workspace_ident(_, _) :- false. `,e+=`workspace_version(_, _) :- false. @@ -282,41 +282,41 @@ And the length must be: $`,trueValue:null,falseValue:null,caseSensitive: `,e+=`gen_enforced_field(_, _, _) :- false. `,e}get fullSource(){return`${this.getProjectDatabase()} ${this.source} -${this.getDeclarations()}`}createSession(){return new IH(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),o=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:u,dependencyType:A}of e){let p=I2([A,W.stringifyIdent(n)]),h=je.getMapWithDefault(o,a.cwd);je.getMapWithDefault(h,p).set(u??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:u}of r){let A=I2(n),p=je.getMapWithDefault(o,a.cwd);je.getMapWithDefault(p,A).set(JSON.parse(u)??void 0,new Set)}return{manifestUpdates:o,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=K.resolve(this.project.cwd,$d(o.links.WorkspaceCwd)),n=$d(o.links.DependencyIdent),u=$d(o.links.DependencyRange),A=$d(o.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=W.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:u,dependencyType:A})}return je.sortMap(r,[({dependencyRange:o})=>o!==null?"0":"1",({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({dependencyIdent:o})=>W.stringifyIdent(o)])}async genEnforcedFields(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=K.resolve(this.project.cwd,$d(o.links.WorkspaceCwd)),n=$d(o.links.FieldPath),u=rdt(o.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let A=this.project.getWorkspaceByCwd(a);r.push({workspace:A,fieldPath:n,fieldValue:u})}return je.sortMap(r,[({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({fieldPath:o})=>o])}async*query(e){let r=this.createSession();for await(let o of r.makeQuery(e)){let a={};for(let[n,u]of Object.entries(o.links))n!=="_"&&(a[n]=$d(u));yield a}}}});var vme=_(vk=>{"use strict";Object.defineProperty(vk,"__esModule",{value:!0});function q2(t){let e=[...t.caches],r=e.shift();return r===void 0?Bme():{get(o,a,n={miss:()=>Promise.resolve()}){return r.get(o,a,n).catch(()=>q2({caches:e}).get(o,a,n))},set(o,a){return r.set(o,a).catch(()=>q2({caches:e}).set(o,a))},delete(o){return r.delete(o).catch(()=>q2({caches:e}).delete(o))},clear(){return r.clear().catch(()=>q2({caches:e}).clear())}}}function Bme(){return{get(t,e,r={miss:()=>Promise.resolve()}){return e().then(a=>Promise.all([a,r.miss(a)])).then(([a])=>a)},set(t,e){return Promise.resolve(e)},delete(t){return Promise.resolve()},clear(){return Promise.resolve()}}}vk.createFallbackableCache=q2;vk.createNullCache=Bme});var Pme=_((QWt,Dme)=>{Dme.exports=vme()});var Sme=_(LH=>{"use strict";Object.defineProperty(LH,"__esModule",{value:!0});function wdt(t={serializable:!0}){let e={};return{get(r,o,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let u=o(),A=a&&a.miss||(()=>Promise.resolve());return u.then(p=>A(p)).then(()=>u)},set(r,o){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}LH.createInMemoryCache=wdt});var bme=_((TWt,xme)=>{xme.exports=Sme()});var Qme=_(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});function Idt(t,e,r){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===MH.WithinHeaders?o:{}},queryParameters(){return t===MH.WithinQueryParameters?o:{}}}}function Bdt(t){let e=0,r=()=>(e++,new Promise(o=>{setTimeout(()=>{o(t(r))},Math.min(100*e,1e3))}));return t(r)}function kme(t,e=(r,o)=>Promise.resolve()){return Object.assign(t,{wait(r){return kme(t.then(o=>Promise.all([e(o,r),o])).then(o=>o[1]))}})}function vdt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o}return t}function Ddt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function Pdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var Sdt="4.14.2",xdt=t=>()=>t.transporter.requester.destroy(),MH={WithinQueryParameters:0,WithinHeaders:1};Zc.AuthMode=MH;Zc.addMethods=Ddt;Zc.createAuth=Idt;Zc.createRetryablePromise=Bdt;Zc.createWaitablePromise=kme;Zc.destroy=xdt;Zc.encode=Pdt;Zc.shuffle=vdt;Zc.version=Sdt});var G2=_((NWt,Fme)=>{Fme.exports=Qme()});var Tme=_(OH=>{"use strict";Object.defineProperty(OH,"__esModule",{value:!0});var bdt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};OH.MethodEnum=bdt});var Y2=_((MWt,Rme)=>{Rme.exports=Tme()});var Jme=_(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});var Lme=Y2();function UH(t,e){let r=t||{},o=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(o[a]=r[a])}),{data:Object.entries(o).length>0?o:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var W2={Read:1,Write:2,Any:3},xC={Up:1,Down:2,Timeouted:3},Mme=2*60*1e3;function HH(t,e=xC.Up){return{...t,status:e,lastUpdate:Date.now()}}function Ome(t){return t.status===xC.Up||Date.now()-t.lastUpdate>Mme}function Ume(t){return t.status===xC.Timeouted&&Date.now()-t.lastUpdate<=Mme}function jH(t){return typeof t=="string"?{protocol:"https",url:t,accept:W2.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||W2.Any}}function kdt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(HH(r))))).then(r=>{let o=r.filter(A=>Ome(A)),a=r.filter(A=>Ume(A)),n=[...o,...a],u=n.length>0?n.map(A=>jH(A)):e;return{getTimeout(A,p){return(a.length===0&&A===0?1:a.length+3+A)*p},statelessHosts:u}})}var Qdt=({isTimedOut:t,status:e})=>!t&&~~e===0,Fdt=t=>{let e=t.status;return t.isTimedOut||Qdt(t)||~~(e/100)!==2&&~~(e/100)!==4},Tdt=({status:t})=>~~(t/100)===2,Rdt=(t,e)=>Fdt(t)?e.onRetry(t):Tdt(t)?e.onSuccess(t):e.onFail(t);function Nme(t,e,r,o){let a=[],n=Gme(r,o),u=Yme(t,o),A=r.method,p=r.method!==Lme.MethodEnum.Get?{}:{...r.data,...o.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...o.queryParameters},E=0,I=(v,b)=>{let C=v.pop();if(C===void 0)throw Kme(_H(a));let T={data:n,headers:u,method:A,url:jme(C,r.path,h),connectTimeout:b(E,t.timeouts.connect),responseTimeout:b(E,o.timeout)},L=J=>{let te={request:T,response:J,host:C,triesLeft:v.length};return a.push(te),te},U={onSuccess:J=>_me(J),onRetry(J){let te=L(J);return J.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",qH(te)),t.hostsCache.set(C,HH(C,J.isTimedOut?xC.Timeouted:xC.Down))]).then(()=>I(v,b))},onFail(J){throw L(J),Hme(J,_H(a))}};return t.requester.send(T).then(J=>Rdt(J,U))};return kdt(t.hostsCache,e).then(v=>I([...v.statelessHosts].reverse(),v.getTimeout))}function Ndt(t){let{hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,hosts:p,queryParameters:h,headers:E}=t,I={hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,headers:E,queryParameters:h,hosts:p.map(v=>jH(v)),read(v,b){let C=UH(b,I.timeouts.read),T=()=>Nme(I,I.hosts.filter(J=>(J.accept&W2.Read)!==0),v,C);if((C.cacheable!==void 0?C.cacheable:v.cacheable)!==!0)return T();let U={request:v,mappedRequestOptions:C,transporter:{queryParameters:I.queryParameters,headers:I.headers}};return I.responsesCache.get(U,()=>I.requestsCache.get(U,()=>I.requestsCache.set(U,T()).then(J=>Promise.all([I.requestsCache.delete(U),J]),J=>Promise.all([I.requestsCache.delete(U),Promise.reject(J)])).then(([J,te])=>te)),{miss:J=>I.responsesCache.set(U,J)})},write(v,b){return Nme(I,I.hosts.filter(C=>(C.accept&W2.Write)!==0),v,UH(b,I.timeouts.write))}};return I}function Ldt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let o=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(o)===-1&&(e.value=`${e.value}${o}`),e}};return e}function _me(t){try{return JSON.parse(t.content)}catch(e){throw Vme(e.message,t)}}function Hme({content:t,status:e},r){let o=t;try{o=JSON.parse(t).message}catch{}return Wme(o,e,r)}function Mdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function jme(t,e,r){let o=qme(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return o.length&&(a+=`?${o}`),a}function qme(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Mdt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function Gme(t,e){if(t.method===Lme.MethodEnum.Get||t.data===void 0&&e.data===void 0)return;let r=Array.isArray(t.data)?t.data:{...t.data,...e.data};return JSON.stringify(r)}function Yme(t,e){let r={...t.headers,...e.headers},o={};return Object.keys(r).forEach(a=>{let n=r[a];o[a.toLowerCase()]=n}),o}function _H(t){return t.map(e=>qH(e))}function qH(t){let e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...t,request:{...t.request,headers:{...t.request.headers,...e}}}}function Wme(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function Vme(t,e){return{name:"DeserializationError",message:t,response:e}}function Kme(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Fi.CallEnum=W2;Fi.HostStatusEnum=xC;Fi.createApiError=Wme;Fi.createDeserializationError=Vme;Fi.createMappedRequestOptions=UH;Fi.createRetryError=Kme;Fi.createStatefulHost=HH;Fi.createStatelessHost=jH;Fi.createTransporter=Ndt;Fi.createUserAgent=Ldt;Fi.deserializeFailure=Hme;Fi.deserializeSuccess=_me;Fi.isStatefulHostTimeouted=Ume;Fi.isStatefulHostUp=Ome;Fi.serializeData=Gme;Fi.serializeHeaders=Yme;Fi.serializeQueryParameters=qme;Fi.serializeUrl=jme;Fi.stackFrameWithoutCredentials=qH;Fi.stackTraceWithoutCredentials=_H});var V2=_((UWt,zme)=>{zme.exports=Jme()});var Xme=_(d0=>{"use strict";Object.defineProperty(d0,"__esModule",{value:!0});var bC=G2(),Odt=V2(),K2=Y2(),Udt=t=>{let e=t.region||"us",r=bC.createAuth(bC.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Odt.createTransporter({hosts:[{url:`analytics.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a=t.appId;return bC.addMethods({appId:a,transporter:o},t.methods)},_dt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Post,path:"2/abtests",data:e},r),Hdt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Delete,path:bC.encode("2/abtests/%s",e)},r),jdt=t=>(e,r)=>t.transporter.read({method:K2.MethodEnum.Get,path:bC.encode("2/abtests/%s",e)},r),qdt=t=>e=>t.transporter.read({method:K2.MethodEnum.Get,path:"2/abtests"},e),Gdt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Post,path:bC.encode("2/abtests/%s/stop",e)},r);d0.addABTest=_dt;d0.createAnalyticsClient=Udt;d0.deleteABTest=Hdt;d0.getABTest=jdt;d0.getABTests=qdt;d0.stopABTest=Gdt});var $me=_((HWt,Zme)=>{Zme.exports=Xme()});var tye=_(J2=>{"use strict";Object.defineProperty(J2,"__esModule",{value:!0});var GH=G2(),Ydt=V2(),eye=Y2(),Wdt=t=>{let e=t.region||"us",r=GH.createAuth(GH.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Ydt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return GH.addMethods({appId:t.appId,transporter:o},t.methods)},Vdt=t=>e=>t.transporter.read({method:eye.MethodEnum.Get,path:"1/strategies/personalization"},e),Kdt=t=>(e,r)=>t.transporter.write({method:eye.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);J2.createPersonalizationClient=Wdt;J2.getPersonalizationStrategy=Vdt;J2.setPersonalizationStrategy=Kdt});var nye=_((qWt,rye)=>{rye.exports=tye()});var mye=_(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var Gt=G2(),Na=V2(),Ir=Y2(),Jdt=Be("crypto");function Dk(t){let e=r=>t.request(r).then(o=>{if(t.batch!==void 0&&t.batch(o.hits),!t.shouldStop(o))return o.cursor?e({cursor:o.cursor}):e({page:(r.page||0)+1})});return e({})}var zdt=t=>{let e=t.appId,r=Gt.createAuth(t.authMode!==void 0?t.authMode:Gt.AuthMode.WithinHeaders,e,t.apiKey),o=Na.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:Na.CallEnum.Read},{url:`${e}.algolia.net`,accept:Na.CallEnum.Write}].concat(Gt.shuffle([{url:`${e}-1.algolianet.com`},{url:`${e}-2.algolianet.com`},{url:`${e}-3.algolianet.com`}])),...t,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a={transporter:o,appId:e,addAlgoliaAgent(n,u){o.userAgent.add({segment:n,version:u})},clearCache(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})}};return Gt.addMethods(a,t.methods)};function iye(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function sye(){return{name:"ObjectNotFoundError",message:"Object not found."}}function oye(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Xdt=t=>(e,r)=>{let{queryParameters:o,...a}=r||{},n={acl:e,...o!==void 0?{queryParameters:o}:{}},u=(A,p)=>Gt.createRetryablePromise(h=>z2(t)(A.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/keys",data:n},a),u)},Zdt=t=>(e,r,o)=>{let a=Na.createMappedRequestOptions(o);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},$dt=t=>(e,r,o)=>t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},o),emt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(o,a)=>kC(t)(o.taskID,a)),Pk=t=>(e,r,o)=>{let a=(n,u)=>X2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},o),a)},tmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Rules]}),rmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Settings]}),nmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Synonyms]}),imt=t=>(e,r)=>e.method===Ir.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),smt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>z2(t)(e,n).then(u).catch(A=>{if(A.status!==404)throw A}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/keys/%s",e)},r),o)},omt=t=>(e,r,o)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},amt=()=>(t,e)=>{let r=Na.serializeQueryParameters(e),o=Jdt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(o+r).toString("base64")},z2=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/keys/%s",e)},r),aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/task/%s",e.toString())},r),lmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),cmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/logs"},e),umt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,o=e.match(r);if(o===null)throw oye();return parseInt(o[1],10)-Math.round(new Date().getTime()/1e3)},Amt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/top"},e),fmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/clusters/mapping/%s",e)},r),pmt=t=>e=>{let{retrieveMappings:r,...o}=e||{};return r===!0&&(o.getClusters=!0),t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/pending"},o)},X2=t=>(e,r={})=>{let o={transporter:t.transporter,appId:t.appId,indexName:e};return Gt.addMethods(o,r.methods)},hmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/keys"},e),gmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters"},e),dmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/indexes"},e),mmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping"},e),ymt=t=>(e,r,o)=>{let a=(n,u)=>X2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},o),a)},Emt=t=>(e,r)=>{let o=(a,n)=>Promise.all(Object.keys(a.taskID).map(u=>X2(t)(u,{methods:{waitTask:Zi}}).waitTask(a.taskID[u],n)));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),o)},Cmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),wmt=t=>(e,r)=>{let o=e.map(a=>({...a,params:Na.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},r)},Imt=t=>(e,r)=>Promise.all(e.map(o=>{let{facetName:a,facetQuery:n,...u}=o.params;return X2(t)(o.indexName,{methods:{searchForFacetValues:hye}}).searchForFacetValues(a,n,{...r,...u})})),Bmt=t=>(e,r)=>{let o=Na.createMappedRequestOptions(r);return o.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Delete,path:"1/clusters/mapping"},o)},vmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},Dmt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>z2(t)(e,n).catch(A=>{if(A.status!==404)throw A;return u()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/keys/%s/restore",e)},r),o)},Pmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},Smt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},o),xmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),bmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(o,a)=>kC(t)(o.taskID,a)),kmt=t=>(e,r)=>{let o=Object.assign({},r),{queryParameters:a,...n}=r||{},u=a?{queryParameters:a}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(o).filter(I=>A.indexOf(I)!==-1).every(I=>E[I]===o[I]),h=(E,I)=>Gt.createRetryablePromise(v=>z2(t)(e,I).then(b=>p(b)?Promise.resolve():v()));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/keys/%s",e),data:u},n),h)},kC=t=>(e,r)=>Gt.createRetryablePromise(o=>aye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),lye=t=>(e,r)=>{let o=(a,n)=>Zi(t)(a.taskID,n);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),o)},Qmt=t=>e=>Dk({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),Fmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Dk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Tmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Dk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Sk=t=>(e,r,o)=>{let{batchSize:a,...n}=o||{},u={taskIDs:[],objectIDs:[]},A=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:I})),n).then(I=>(u.objectIDs=u.objectIDs.concat(I.objectIDs),u.taskIDs.push(I.taskID),E++,A(E)))};return Gt.createWaitablePromise(A(),(p,h)=>Promise.all(p.taskIDs.map(E=>Zi(t)(E,h))))},Rmt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/clear",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Nmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Lmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Mmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(o,a)=>Zi(t)(o.taskID,a)),Omt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Umt=t=>(e,r)=>Gt.createWaitablePromise(cye(t)([e],r).then(o=>({taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),cye=t=>(e,r)=>{let o=e.map(a=>({objectID:a}));return Sk(t)(o,rm.DeleteObject,r)},_mt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Hmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},jmt=t=>e=>uye(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),qmt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},o),Gmt=t=>(e,r)=>{let{query:o,paginate:a,...n}=r||{},u=0,A=()=>pye(t)(o||"",{...n,page:u}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:u};if(u++,a===!1||u>=p.nbPages)throw sye();return A()});return A()},Ymt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/%s",t.indexName,e)},r),Wmt=()=>(t,e)=>{for(let[r,o]of Object.entries(t.hits))if(o.objectID===e)return parseInt(r,10);return-1},Vmt=t=>(e,r)=>{let{attributesToRetrieve:o,...a}=r||{},n=e.map(u=>({indexName:t.indexName,objectID:u,...o?{attributesToRetrieve:o}:{}}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},Kmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),uye=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),Jmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),Aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),zmt=t=>(e,r)=>Gt.createWaitablePromise(fye(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),fye=t=>(e,r)=>{let{createIfNotExists:o,...a}=r||{},n=o?rm.PartialUpdateObject:rm.PartialUpdateObjectNoCreate;return Sk(t)(e,n,a)},Xmt=t=>(e,r)=>{let{safe:o,autoGenerateObjectIDIfNotExist:a,batchSize:n,...u}=r||{},A=(C,T,L,U)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",C),data:{operation:L,destination:T}},U),(J,te)=>Zi(t)(J.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=YH({appId:t.appId,transporter:t.transporter,indexName:h}),I=[],v=A(t.indexName,h,"copy",{...u,scope:["settings","synonyms","rules"]});I.push(v);let b=(o?v.wait(u):v).then(()=>{let C=E(e,{...u,autoGenerateObjectIDIfNotExist:a,batchSize:n});return I.push(C),o?C.wait(u):C}).then(()=>{let C=A(h,t.indexName,"move",u);return I.push(C),o?C.wait(u):C}).then(()=>Promise.all(I)).then(([C,T,L])=>({objectIDs:T.objectIDs,taskIDs:[C.taskID,...T.taskIDs,L.taskID]}));return Gt.createWaitablePromise(b,(C,T)=>Promise.all(I.map(L=>L.wait(T))))},Zmt=t=>(e,r)=>WH(t)(e,{...r,clearExistingRules:!0}),$mt=t=>(e,r)=>VH(t)(e,{...r,clearExistingSynonyms:!0}),eyt=t=>(e,r)=>Gt.createWaitablePromise(YH(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),YH=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:o,...a}=r||{},n=o?rm.AddObject:rm.UpdateObject;if(n===rm.UpdateObject){for(let u of e)if(u.objectID===void 0)return Gt.createWaitablePromise(Promise.reject(iye()))}return Sk(t)(e,n,a)},tyt=t=>(e,r)=>WH(t)([e],r),WH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingRules:a,...n}=r||{},u=Na.createMappedRequestOptions(n);return o&&(u.queryParameters.forwardToReplicas=1),a&&(u.queryParameters.clearExistingRules=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},u),(A,p)=>Zi(t)(A.taskID,p))},ryt=t=>(e,r)=>VH(t)([e],r),VH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingSynonyms:a,replaceExistingSynonyms:n,...u}=r||{},A=Na.createMappedRequestOptions(u);return o&&(A.queryParameters.forwardToReplicas=1),(n||a)&&(A.queryParameters.replaceExistingSynonyms=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},A),(p,h)=>Zi(t)(p.taskID,h))},pye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),hye=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},o),gye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),dye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),nyt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(u,A)=>Zi(t)(u.taskID,A))},Zi=t=>(e,r)=>Gt.createRetryablePromise(o=>Aye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),iyt={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Personalization:"personalization",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},rm={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},xk={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},syt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},oyt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Ft.ApiKeyACLEnum=iyt;Ft.BatchActionEnum=rm;Ft.ScopeEnum=xk;Ft.StrategyEnum=syt;Ft.SynonymEnum=oyt;Ft.addApiKey=Xdt;Ft.assignUserID=Zdt;Ft.assignUserIDs=$dt;Ft.batch=lye;Ft.browseObjects=Qmt;Ft.browseRules=Fmt;Ft.browseSynonyms=Tmt;Ft.chunkedBatch=Sk;Ft.clearDictionaryEntries=emt;Ft.clearObjects=Rmt;Ft.clearRules=Nmt;Ft.clearSynonyms=Lmt;Ft.copyIndex=Pk;Ft.copyRules=tmt;Ft.copySettings=rmt;Ft.copySynonyms=nmt;Ft.createBrowsablePromise=Dk;Ft.createMissingObjectIDError=iye;Ft.createObjectNotFoundError=sye;Ft.createSearchClient=zdt;Ft.createValidUntilNotFoundError=oye;Ft.customRequest=imt;Ft.deleteApiKey=smt;Ft.deleteBy=Mmt;Ft.deleteDictionaryEntries=omt;Ft.deleteIndex=Omt;Ft.deleteObject=Umt;Ft.deleteObjects=cye;Ft.deleteRule=_mt;Ft.deleteSynonym=Hmt;Ft.exists=jmt;Ft.findAnswers=qmt;Ft.findObject=Gmt;Ft.generateSecuredApiKey=amt;Ft.getApiKey=z2;Ft.getAppTask=aye;Ft.getDictionarySettings=lmt;Ft.getLogs=cmt;Ft.getObject=Ymt;Ft.getObjectPosition=Wmt;Ft.getObjects=Vmt;Ft.getRule=Kmt;Ft.getSecuredApiKeyRemainingValidity=umt;Ft.getSettings=uye;Ft.getSynonym=Jmt;Ft.getTask=Aye;Ft.getTopUserIDs=Amt;Ft.getUserID=fmt;Ft.hasPendingMappings=pmt;Ft.initIndex=X2;Ft.listApiKeys=hmt;Ft.listClusters=gmt;Ft.listIndices=dmt;Ft.listUserIDs=mmt;Ft.moveIndex=ymt;Ft.multipleBatch=Emt;Ft.multipleGetObjects=Cmt;Ft.multipleQueries=wmt;Ft.multipleSearchForFacetValues=Imt;Ft.partialUpdateObject=zmt;Ft.partialUpdateObjects=fye;Ft.removeUserID=Bmt;Ft.replaceAllObjects=Xmt;Ft.replaceAllRules=Zmt;Ft.replaceAllSynonyms=$mt;Ft.replaceDictionaryEntries=vmt;Ft.restoreApiKey=Dmt;Ft.saveDictionaryEntries=Pmt;Ft.saveObject=eyt;Ft.saveObjects=YH;Ft.saveRule=tyt;Ft.saveRules=WH;Ft.saveSynonym=ryt;Ft.saveSynonyms=VH;Ft.search=pye;Ft.searchDictionaryEntries=Smt;Ft.searchForFacetValues=hye;Ft.searchRules=gye;Ft.searchSynonyms=dye;Ft.searchUserIDs=xmt;Ft.setDictionarySettings=bmt;Ft.setSettings=nyt;Ft.updateApiKey=kmt;Ft.waitAppTask=kC;Ft.waitTask=Zi});var Eye=_((YWt,yye)=>{yye.exports=mye()});var Cye=_(bk=>{"use strict";Object.defineProperty(bk,"__esModule",{value:!0});function ayt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var lyt={Debug:1,Info:2,Error:3};bk.LogLevelEnum=lyt;bk.createNullLogger=ayt});var Iye=_((VWt,wye)=>{wye.exports=Cye()});var Pye=_(KH=>{"use strict";Object.defineProperty(KH,"__esModule",{value:!0});var Bye=Be("http"),vye=Be("https"),cyt=Be("url"),Dye={keepAlive:!0},uyt=new Bye.Agent(Dye),Ayt=new vye.Agent(Dye);function fyt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:o={}}={}){let a=e||t||uyt,n=r||t||Ayt;return{send(u){return new Promise(A=>{let p=cyt.parse(u.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...o,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:u.method,headers:{...o&&o.headers?o.headers:{},...u.headers},...p.port!==void 0?{port:p.port||""}:{}},I=(p.protocol==="https:"?vye:Bye).request(E,T=>{let L=[];T.on("data",U=>{L=L.concat(U)}),T.on("end",()=>{clearTimeout(b),clearTimeout(C),A({status:T.statusCode||0,content:Buffer.concat(L).toString(),isTimedOut:!1})})}),v=(T,L)=>setTimeout(()=>{I.abort(),A({status:0,content:L,isTimedOut:!0})},T*1e3),b=v(u.connectTimeout,"Connection timeout"),C;I.on("error",T=>{clearTimeout(b),clearTimeout(C),A({status:0,content:T.message,isTimedOut:!1})}),I.once("response",()=>{clearTimeout(b),C=v(u.responseTimeout,"Socket timeout")}),u.data!==void 0&&I.write(u.data),I.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}KH.createNodeHttpRequester=fyt});var xye=_((JWt,Sye)=>{Sye.exports=Pye()});var Fye=_((zWt,Qye)=>{"use strict";var bye=Pme(),pyt=bme(),QC=$me(),zH=G2(),JH=nye(),Ut=Eye(),hyt=Iye(),gyt=xye(),dyt=V2();function kye(t,e,r){let o={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:gyt.createNodeHttpRequester(),logger:hyt.createNullLogger(),responsesCache:bye.createNullCache(),requestsCache:bye.createNullCache(),hostsCache:pyt.createInMemoryCache(),userAgent:dyt.createUserAgent(zH.version).add({segment:"Node.js",version:process.versions.node})},a={...o,...r},n=()=>u=>JH.createPersonalizationClient({...o,...u,methods:{getPersonalizationStrategy:JH.getPersonalizationStrategy,setPersonalizationStrategy:JH.setPersonalizationStrategy}});return Ut.createSearchClient({...a,methods:{search:Ut.multipleQueries,searchForFacetValues:Ut.multipleSearchForFacetValues,multipleBatch:Ut.multipleBatch,multipleGetObjects:Ut.multipleGetObjects,multipleQueries:Ut.multipleQueries,copyIndex:Ut.copyIndex,copySettings:Ut.copySettings,copyRules:Ut.copyRules,copySynonyms:Ut.copySynonyms,moveIndex:Ut.moveIndex,listIndices:Ut.listIndices,getLogs:Ut.getLogs,listClusters:Ut.listClusters,multipleSearchForFacetValues:Ut.multipleSearchForFacetValues,getApiKey:Ut.getApiKey,addApiKey:Ut.addApiKey,listApiKeys:Ut.listApiKeys,updateApiKey:Ut.updateApiKey,deleteApiKey:Ut.deleteApiKey,restoreApiKey:Ut.restoreApiKey,assignUserID:Ut.assignUserID,assignUserIDs:Ut.assignUserIDs,getUserID:Ut.getUserID,searchUserIDs:Ut.searchUserIDs,listUserIDs:Ut.listUserIDs,getTopUserIDs:Ut.getTopUserIDs,removeUserID:Ut.removeUserID,hasPendingMappings:Ut.hasPendingMappings,generateSecuredApiKey:Ut.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Ut.getSecuredApiKeyRemainingValidity,destroy:zH.destroy,clearDictionaryEntries:Ut.clearDictionaryEntries,deleteDictionaryEntries:Ut.deleteDictionaryEntries,getDictionarySettings:Ut.getDictionarySettings,getAppTask:Ut.getAppTask,replaceDictionaryEntries:Ut.replaceDictionaryEntries,saveDictionaryEntries:Ut.saveDictionaryEntries,searchDictionaryEntries:Ut.searchDictionaryEntries,setDictionarySettings:Ut.setDictionarySettings,waitAppTask:Ut.waitAppTask,customRequest:Ut.customRequest,initIndex:u=>A=>Ut.initIndex(u)(A,{methods:{batch:Ut.batch,delete:Ut.deleteIndex,findAnswers:Ut.findAnswers,getObject:Ut.getObject,getObjects:Ut.getObjects,saveObject:Ut.saveObject,saveObjects:Ut.saveObjects,search:Ut.search,searchForFacetValues:Ut.searchForFacetValues,waitTask:Ut.waitTask,setSettings:Ut.setSettings,getSettings:Ut.getSettings,partialUpdateObject:Ut.partialUpdateObject,partialUpdateObjects:Ut.partialUpdateObjects,deleteObject:Ut.deleteObject,deleteObjects:Ut.deleteObjects,deleteBy:Ut.deleteBy,clearObjects:Ut.clearObjects,browseObjects:Ut.browseObjects,getObjectPosition:Ut.getObjectPosition,findObject:Ut.findObject,exists:Ut.exists,saveSynonym:Ut.saveSynonym,saveSynonyms:Ut.saveSynonyms,getSynonym:Ut.getSynonym,searchSynonyms:Ut.searchSynonyms,browseSynonyms:Ut.browseSynonyms,deleteSynonym:Ut.deleteSynonym,clearSynonyms:Ut.clearSynonyms,replaceAllObjects:Ut.replaceAllObjects,replaceAllSynonyms:Ut.replaceAllSynonyms,searchRules:Ut.searchRules,getRule:Ut.getRule,deleteRule:Ut.deleteRule,saveRule:Ut.saveRule,saveRules:Ut.saveRules,replaceAllRules:Ut.replaceAllRules,browseRules:Ut.browseRules,clearRules:Ut.clearRules}}),initAnalytics:()=>u=>QC.createAnalyticsClient({...o,...u,methods:{addABTest:QC.addABTest,getABTest:QC.getABTest,getABTests:QC.getABTests,stopABTest:QC.stopABTest,deleteABTest:QC.deleteABTest}}),initPersonalization:n,initRecommendation:()=>u=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(u))}})}kye.version=zH.version;Qye.exports=kye});var ZH=_((XWt,XH)=>{var Tye=Fye();XH.exports=Tye;XH.exports.default=Tye});var t6=_(($Wt,Lye)=>{"use strict";var Nye=Object.getOwnPropertySymbols,yyt=Object.prototype.hasOwnProperty,Eyt=Object.prototype.propertyIsEnumerable;function Cyt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function wyt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var o=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(o.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Lye.exports=wyt()?Object.assign:function(t,e){for(var r,o=Cyt(t),a,n=1;n{"use strict";var o6=t6(),$c=typeof Symbol=="function"&&Symbol.for,Z2=$c?Symbol.for("react.element"):60103,Iyt=$c?Symbol.for("react.portal"):60106,Byt=$c?Symbol.for("react.fragment"):60107,vyt=$c?Symbol.for("react.strict_mode"):60108,Dyt=$c?Symbol.for("react.profiler"):60114,Pyt=$c?Symbol.for("react.provider"):60109,Syt=$c?Symbol.for("react.context"):60110,xyt=$c?Symbol.for("react.forward_ref"):60112,byt=$c?Symbol.for("react.suspense"):60113,kyt=$c?Symbol.for("react.memo"):60115,Qyt=$c?Symbol.for("react.lazy"):60116,Mye=typeof Symbol=="function"&&Symbol.iterator;function $2(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;rkk.length&&kk.push(t)}function n6(t,e,r,o){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var n=!1;if(t===null)n=!0;else switch(a){case"string":case"number":n=!0;break;case"object":switch(t.$$typeof){case Z2:case Iyt:n=!0}}if(n)return r(o,t,e===""?"."+r6(t,0):e),1;if(n=0,e=e===""?".":e+":",Array.isArray(t))for(var u=0;u{"use strict";Jye.exports=Kye()});var f6=_((rVt,A6)=>{"use strict";var An=A6.exports;A6.exports.default=An;var Ln="\x1B[",eB="\x1B]",TC="\x07",Qk=";",zye=process.env.TERM_PROGRAM==="Apple_Terminal";An.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Ln+(t+1)+"G":Ln+(e+1)+";"+(t+1)+"H"};An.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Ln+-t+"D":t>0&&(r+=Ln+t+"C"),e<0?r+=Ln+-e+"A":e>0&&(r+=Ln+e+"B"),r};An.cursorUp=(t=1)=>Ln+t+"A";An.cursorDown=(t=1)=>Ln+t+"B";An.cursorForward=(t=1)=>Ln+t+"C";An.cursorBackward=(t=1)=>Ln+t+"D";An.cursorLeft=Ln+"G";An.cursorSavePosition=zye?"\x1B7":Ln+"s";An.cursorRestorePosition=zye?"\x1B8":Ln+"u";An.cursorGetPosition=Ln+"6n";An.cursorNextLine=Ln+"E";An.cursorPrevLine=Ln+"F";An.cursorHide=Ln+"?25l";An.cursorShow=Ln+"?25h";An.eraseLines=t=>{let e="";for(let r=0;r[eB,"8",Qk,Qk,e,TC,t,eB,"8",Qk,Qk,TC].join("");An.image=(t,e={})=>{let r=`${eB}1337;File=inline=1`;return e.width&&(r+=`;width=${e.width}`),e.height&&(r+=`;height=${e.height}`),e.preserveAspectRatio===!1&&(r+=";preserveAspectRatio=0"),r+":"+t.toString("base64")+TC};An.iTerm={setCwd:(t=process.cwd())=>`${eB}50;CurrentDir=${t}${TC}`,annotation:(t,e={})=>{let r=`${eB}1337;`,o=typeof e.x<"u",a=typeof e.y<"u";if((o||a)&&!(o&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(o?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+TC}}});var Zye=_((nVt,p6)=>{"use strict";var Xye=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};p6.exports=Xye;p6.exports.default=Xye});var eEe=_((iVt,Tk)=>{"use strict";var Myt=Zye(),Fk=new WeakMap,$ye=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,o=0,a=t.displayName||t.name||"",n=function(...u){if(Fk.set(n,++o),o===1)r=t.apply(this,u),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return Myt(n,t),Fk.set(n,o),n};Tk.exports=$ye;Tk.exports.default=$ye;Tk.exports.callCount=t=>{if(!Fk.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return Fk.get(t)}});var tEe=_((sVt,Rk)=>{Rk.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Rk.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Rk.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var d6=_((oVt,LC)=>{var Ei=global.process,nm=function(t){return t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function"};nm(Ei)?(rEe=Be("assert"),RC=tEe(),nEe=/^win/i.test(Ei.platform),tB=Be("events"),typeof tB!="function"&&(tB=tB.EventEmitter),Ei.__signal_exit_emitter__?Rs=Ei.__signal_exit_emitter__:(Rs=Ei.__signal_exit_emitter__=new tB,Rs.count=0,Rs.emitted={}),Rs.infinite||(Rs.setMaxListeners(1/0),Rs.infinite=!0),LC.exports=function(t,e){if(!nm(global.process))return function(){};rEe.equal(typeof t,"function","a callback must be provided for exit handler"),NC===!1&&h6();var r="exit";e&&e.alwaysLast&&(r="afterexit");var o=function(){Rs.removeListener(r,t),Rs.listeners("exit").length===0&&Rs.listeners("afterexit").length===0&&Nk()};return Rs.on(r,t),o},Nk=function(){!NC||!nm(global.process)||(NC=!1,RC.forEach(function(e){try{Ei.removeListener(e,Lk[e])}catch{}}),Ei.emit=Mk,Ei.reallyExit=g6,Rs.count-=1)},LC.exports.unload=Nk,im=function(e,r,o){Rs.emitted[e]||(Rs.emitted[e]=!0,Rs.emit(e,r,o))},Lk={},RC.forEach(function(t){Lk[t]=function(){if(!!nm(global.process)){var r=Ei.listeners(t);r.length===Rs.count&&(Nk(),im("exit",null,t),im("afterexit",null,t),nEe&&t==="SIGHUP"&&(t="SIGINT"),Ei.kill(Ei.pid,t))}}}),LC.exports.signals=function(){return RC},NC=!1,h6=function(){NC||!nm(global.process)||(NC=!0,Rs.count+=1,RC=RC.filter(function(e){try{return Ei.on(e,Lk[e]),!0}catch{return!1}}),Ei.emit=sEe,Ei.reallyExit=iEe)},LC.exports.load=h6,g6=Ei.reallyExit,iEe=function(e){!nm(global.process)||(Ei.exitCode=e||0,im("exit",Ei.exitCode,null),im("afterexit",Ei.exitCode,null),g6.call(Ei,Ei.exitCode))},Mk=Ei.emit,sEe=function(e,r){if(e==="exit"&&nm(global.process)){r!==void 0&&(Ei.exitCode=r);var o=Mk.apply(this,arguments);return im("exit",Ei.exitCode,null),im("afterexit",Ei.exitCode,null),o}else return Mk.apply(this,arguments)}):LC.exports=function(){return function(){}};var rEe,RC,nEe,tB,Rs,Nk,im,Lk,NC,h6,g6,iEe,Mk,sEe});var aEe=_((aVt,oEe)=>{"use strict";var Oyt=eEe(),Uyt=d6();oEe.exports=Oyt(()=>{Uyt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var m6=_(MC=>{"use strict";var _yt=aEe(),Ok=!1;MC.show=(t=process.stderr)=>{!t.isTTY||(Ok=!1,t.write("\x1B[?25h"))};MC.hide=(t=process.stderr)=>{!t.isTTY||(_yt(),Ok=!0,t.write("\x1B[?25l"))};MC.toggle=(t,e)=>{t!==void 0&&(Ok=t),Ok?MC.show(e):MC.hide(e)}});var AEe=_(rB=>{"use strict";var uEe=rB&&rB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(rB,"__esModule",{value:!0});var lEe=uEe(f6()),cEe=uEe(m6()),Hyt=(t,{showCursor:e=!1}={})=>{let r=0,o="",a=!1,n=u=>{!e&&!a&&(cEe.default.hide(),a=!0);let A=u+` -`;A!==o&&(o=A,t.write(lEe.default.eraseLines(r)+A),r=A.split(` -`).length)};return n.clear=()=>{t.write(lEe.default.eraseLines(r)),o="",r=0},n.done=()=>{o="",r=0,e||(cEe.default.show(),a=!1)},n};rB.default={create:Hyt}});var fEe=_((uVt,jyt)=>{jyt.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var gEe=_(gl=>{"use strict";var hEe=fEe(),pA=process.env;Object.defineProperty(gl,"_vendors",{value:hEe.map(function(t){return t.constant})});gl.name=null;gl.isPR=null;hEe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(o){return pEe(o)});if(gl[t.constant]=r,r)switch(gl.name=t.name,typeof t.pr){case"string":gl.isPR=!!pA[t.pr];break;case"object":"env"in t.pr?gl.isPR=t.pr.env in pA&&pA[t.pr.env]!==t.pr.ne:"any"in t.pr?gl.isPR=t.pr.any.some(function(o){return!!pA[o]}):gl.isPR=pEe(t.pr);break;default:gl.isPR=null}});gl.isCI=!!(pA.CI||pA.CONTINUOUS_INTEGRATION||pA.BUILD_NUMBER||pA.RUN_ID||gl.name);function pEe(t){return typeof t=="string"?!!pA[t]:Object.keys(t).every(function(e){return pA[e]===t[e]})}});var mEe=_((fVt,dEe)=>{"use strict";dEe.exports=gEe().isCI});var EEe=_((pVt,yEe)=>{"use strict";var qyt=t=>{let e=new Set;do for(let r of Reflect.ownKeys(t))e.add([t,r]);while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e};yEe.exports=(t,{include:e,exclude:r}={})=>{let o=a=>{let n=u=>typeof u=="string"?a===u:u.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of qyt(t.constructor.prototype)){if(n==="constructor"||!o(n))continue;let u=Reflect.getOwnPropertyDescriptor(a,n);u&&typeof u.value=="function"&&(t[n]=t[n].bind(t))}return t}});var PEe=_(kn=>{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});var UC,sB,qk,Gk,v6;typeof window>"u"||typeof MessageChannel!="function"?(OC=null,y6=null,E6=function(){if(OC!==null)try{var t=kn.unstable_now();OC(!0,t),OC=null}catch(e){throw setTimeout(E6,0),e}},CEe=Date.now(),kn.unstable_now=function(){return Date.now()-CEe},UC=function(t){OC!==null?setTimeout(UC,0,t):(OC=t,setTimeout(E6,0))},sB=function(t,e){y6=setTimeout(t,e)},qk=function(){clearTimeout(y6)},Gk=function(){return!1},v6=kn.unstable_forceFrameRate=function(){}):(Uk=window.performance,C6=window.Date,wEe=window.setTimeout,IEe=window.clearTimeout,typeof console<"u"&&(BEe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof BEe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Uk=="object"&&typeof Uk.now=="function"?kn.unstable_now=function(){return Uk.now()}:(vEe=C6.now(),kn.unstable_now=function(){return C6.now()-vEe}),nB=!1,iB=null,_k=-1,w6=5,I6=0,Gk=function(){return kn.unstable_now()>=I6},v6=function(){},kn.unstable_forceFrameRate=function(t){0>t||125jk(u,r))p!==void 0&&0>jk(p,u)?(t[o]=p,t[A]=r,o=A):(t[o]=u,t[n]=r,o=n);else if(p!==void 0&&0>jk(p,r))t[o]=p,t[A]=r,o=A;else break e}}return e}return null}function jk(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var eu=[],m0=[],Gyt=1,na=null,Lo=3,Wk=!1,sm=!1,oB=!1;function Vk(t){for(var e=nc(m0);e!==null;){if(e.callback===null)Yk(m0);else if(e.startTime<=t)Yk(m0),e.sortIndex=e.expirationTime,D6(eu,e);else break;e=nc(m0)}}function P6(t){if(oB=!1,Vk(t),!sm)if(nc(eu)!==null)sm=!0,UC(S6);else{var e=nc(m0);e!==null&&sB(P6,e.startTime-t)}}function S6(t,e){sm=!1,oB&&(oB=!1,qk()),Wk=!0;var r=Lo;try{for(Vk(e),na=nc(eu);na!==null&&(!(na.expirationTime>e)||t&&!Gk());){var o=na.callback;if(o!==null){na.callback=null,Lo=na.priorityLevel;var a=o(na.expirationTime<=e);e=kn.unstable_now(),typeof a=="function"?na.callback=a:na===nc(eu)&&Yk(eu),Vk(e)}else Yk(eu);na=nc(eu)}if(na!==null)var n=!0;else{var u=nc(m0);u!==null&&sB(P6,u.startTime-e),n=!1}return n}finally{na=null,Lo=r,Wk=!1}}function DEe(t){switch(t){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var Yyt=v6;kn.unstable_ImmediatePriority=1;kn.unstable_UserBlockingPriority=2;kn.unstable_NormalPriority=3;kn.unstable_IdlePriority=5;kn.unstable_LowPriority=4;kn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=Lo;Lo=t;try{return e()}finally{Lo=r}};kn.unstable_next=function(t){switch(Lo){case 1:case 2:case 3:var e=3;break;default:e=Lo}var r=Lo;Lo=e;try{return t()}finally{Lo=r}};kn.unstable_scheduleCallback=function(t,e,r){var o=kn.unstable_now();if(typeof r=="object"&&r!==null){var a=r.delay;a=typeof a=="number"&&0o?(t.sortIndex=a,D6(m0,t),nc(eu)===null&&t===nc(m0)&&(oB?qk():oB=!0,sB(P6,a-o))):(t.sortIndex=r,D6(eu,t),sm||Wk||(sm=!0,UC(S6))),t};kn.unstable_cancelCallback=function(t){t.callback=null};kn.unstable_wrapCallback=function(t){var e=Lo;return function(){var r=Lo;Lo=e;try{return t.apply(this,arguments)}finally{Lo=r}}};kn.unstable_getCurrentPriorityLevel=function(){return Lo};kn.unstable_shouldYield=function(){var t=kn.unstable_now();Vk(t);var e=nc(eu);return e!==na&&na!==null&&e!==null&&e.callback!==null&&e.startTime<=t&&e.expirationTime{"use strict";SEe.exports=PEe()});var xEe=_((dVt,aB)=>{aB.exports=function t(e){"use strict";var r=t6(),o=sn(),a=x6();function n(P){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+P,R=1;Rao||(P.current=yl[ao],yl[ao]=null,ao--)}function Mn(P,D){ao++,yl[ao]=P.current,P.current=D}var Ni={},On={current:Ni},_i={current:!1},tr=Ni;function Me(P,D){var R=P.type.contextTypes;if(!R)return Ni;var j=P.stateNode;if(j&&j.__reactInternalMemoizedUnmaskedChildContext===D)return j.__reactInternalMemoizedMaskedChildContext;var Y={},fe;for(fe in R)Y[fe]=D[fe];return j&&(P=P.stateNode,P.__reactInternalMemoizedUnmaskedChildContext=D,P.__reactInternalMemoizedMaskedChildContext=Y),Y}function ii(P){return P=P.childContextTypes,P!=null}function Oa(P){Kn(_i,P),Kn(On,P)}function hr(P){Kn(_i,P),Kn(On,P)}function uc(P,D,R){if(On.current!==Ni)throw Error(n(168));Mn(On,D,P),Mn(_i,R,P)}function uu(P,D,R){var j=P.stateNode;if(P=D.childContextTypes,typeof j.getChildContext!="function")return R;j=j.getChildContext();for(var Y in j)if(!(Y in P))throw Error(n(108,ae(D)||"Unknown",Y));return r({},R,{},j)}function Ac(P){var D=P.stateNode;return D=D&&D.__reactInternalMemoizedMergedChildContext||Ni,tr=On.current,Mn(On,D,P),Mn(_i,_i.current,P),!0}function El(P,D,R){var j=P.stateNode;if(!j)throw Error(n(169));R?(D=uu(P,D,tr),j.__reactInternalMemoizedMergedChildContext=D,Kn(_i,P),Kn(On,P),Mn(On,D,P)):Kn(_i,P),Mn(_i,R,P)}var vA=a.unstable_runWithPriority,Au=a.unstable_scheduleCallback,Ce=a.unstable_cancelCallback,Tt=a.unstable_shouldYield,fc=a.unstable_requestPaint,Hi=a.unstable_now,fu=a.unstable_getCurrentPriorityLevel,Yt=a.unstable_ImmediatePriority,Cl=a.unstable_UserBlockingPriority,DA=a.unstable_NormalPriority,cp=a.unstable_LowPriority,pc=a.unstable_IdlePriority,PA={},Qn=fc!==void 0?fc:function(){},hi=null,hc=null,SA=!1,sa=Hi(),Li=1e4>sa?Hi:function(){return Hi()-sa};function _o(){switch(fu()){case Yt:return 99;case Cl:return 98;case DA:return 97;case cp:return 96;case pc:return 95;default:throw Error(n(332))}}function Ze(P){switch(P){case 99:return Yt;case 98:return Cl;case 97:return DA;case 96:return cp;case 95:return pc;default:throw Error(n(332))}}function lo(P,D){return P=Ze(P),vA(P,D)}function gc(P,D,R){return P=Ze(P),Au(P,D,R)}function pu(P){return hi===null?(hi=[P],hc=Au(Yt,hu)):hi.push(P),PA}function ji(){if(hc!==null){var P=hc;hc=null,Ce(P)}hu()}function hu(){if(!SA&&hi!==null){SA=!0;var P=0;try{var D=hi;lo(99,function(){for(;P=D&&(qo=!0),P.firstContext=null)}function ms(P,D){if(aa!==P&&D!==!1&&D!==0)if((typeof D!="number"||D===1073741823)&&(aa=P,D=1073741823),D={context:P,observedBits:D,next:null},Us===null){if(co===null)throw Error(n(308));Us=D,co.dependencies={expirationTime:0,firstContext:D,responders:null}}else Us=Us.next=D;return x?P._currentValue:P._currentValue2}var _s=!1;function Un(P){return{baseState:P,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Pn(P){return{baseState:P.baseState,firstUpdate:P.firstUpdate,lastUpdate:P.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function ys(P,D){return{expirationTime:P,suspenseConfig:D,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function We(P,D){P.lastUpdate===null?P.firstUpdate=P.lastUpdate=D:(P.lastUpdate.next=D,P.lastUpdate=D)}function tt(P,D){var R=P.alternate;if(R===null){var j=P.updateQueue,Y=null;j===null&&(j=P.updateQueue=Un(P.memoizedState))}else j=P.updateQueue,Y=R.updateQueue,j===null?Y===null?(j=P.updateQueue=Un(P.memoizedState),Y=R.updateQueue=Un(R.memoizedState)):j=P.updateQueue=Pn(Y):Y===null&&(Y=R.updateQueue=Pn(j));Y===null||j===Y?We(j,D):j.lastUpdate===null||Y.lastUpdate===null?(We(j,D),We(Y,D)):(We(j,D),Y.lastUpdate=D)}function It(P,D){var R=P.updateQueue;R=R===null?P.updateQueue=Un(P.memoizedState):nr(P,R),R.lastCapturedUpdate===null?R.firstCapturedUpdate=R.lastCapturedUpdate=D:(R.lastCapturedUpdate.next=D,R.lastCapturedUpdate=D)}function nr(P,D){var R=P.alternate;return R!==null&&D===R.updateQueue&&(D=P.updateQueue=Pn(D)),D}function $(P,D,R,j,Y,fe){switch(R.tag){case 1:return P=R.payload,typeof P=="function"?P.call(fe,j,Y):P;case 3:P.effectTag=P.effectTag&-4097|64;case 0:if(P=R.payload,Y=typeof P=="function"?P.call(fe,j,Y):P,Y==null)break;return r({},j,Y);case 2:_s=!0}return j}function me(P,D,R,j,Y){_s=!1,D=nr(P,D);for(var fe=D.baseState,ve=null,vt=0,wt=D.firstUpdate,bt=fe;wt!==null;){var _r=wt.expirationTime;_rxn?(ai=Fr,Fr=null):ai=Fr.sibling;var en=di(rt,Fr,At[xn],Wt);if(en===null){Fr===null&&(Fr=ai);break}P&&Fr&&en.alternate===null&&D(rt,Fr),Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en,Fr=ai}if(xn===At.length)return R(rt,Fr),vr;if(Fr===null){for(;xnxn?(ai=Fr,Fr=null):ai=Fr.sibling;var ho=di(rt,Fr,en.value,Wt);if(ho===null){Fr===null&&(Fr=ai);break}P&&Fr&&ho.alternate===null&&D(rt,Fr),Ke=fe(ho,Ke,xn),Sn===null?vr=ho:Sn.sibling=ho,Sn=ho,Fr=ai}if(en.done)return R(rt,Fr),vr;if(Fr===null){for(;!en.done;xn++,en=At.next())en=is(rt,en.value,Wt),en!==null&&(Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en);return vr}for(Fr=j(rt,Fr);!en.done;xn++,en=At.next())en=po(Fr,rt,xn,en.value,Wt),en!==null&&(P&&en.alternate!==null&&Fr.delete(en.key===null?xn:en.key),Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en);return P&&Fr.forEach(function(PF){return D(rt,PF)}),vr}return function(rt,Ke,At,Wt){var vr=typeof At=="object"&&At!==null&&At.type===E&&At.key===null;vr&&(At=At.props.children);var Sn=typeof At=="object"&&At!==null;if(Sn)switch(At.$$typeof){case p:e:{for(Sn=At.key,vr=Ke;vr!==null;){if(vr.key===Sn)if(vr.tag===7?At.type===E:vr.elementType===At.type){R(rt,vr.sibling),Ke=Y(vr,At.type===E?At.props.children:At.props,Wt),Ke.ref=kA(rt,vr,At),Ke.return=rt,rt=Ke;break e}else{R(rt,vr);break}else D(rt,vr);vr=vr.sibling}At.type===E?(Ke=xu(At.props.children,rt.mode,Wt,At.key),Ke.return=rt,rt=Ke):(Wt=Hm(At.type,At.key,At.props,null,rt.mode,Wt),Wt.ref=kA(rt,Ke,At),Wt.return=rt,rt=Wt)}return ve(rt);case h:e:{for(vr=At.key;Ke!==null;){if(Ke.key===vr)if(Ke.tag===4&&Ke.stateNode.containerInfo===At.containerInfo&&Ke.stateNode.implementation===At.implementation){R(rt,Ke.sibling),Ke=Y(Ke,At.children||[],Wt),Ke.return=rt,rt=Ke;break e}else{R(rt,Ke);break}else D(rt,Ke);Ke=Ke.sibling}Ke=Fw(At,rt.mode,Wt),Ke.return=rt,rt=Ke}return ve(rt)}if(typeof At=="string"||typeof At=="number")return At=""+At,Ke!==null&&Ke.tag===6?(R(rt,Ke.sibling),Ke=Y(Ke,At,Wt),Ke.return=rt,rt=Ke):(R(rt,Ke),Ke=Qw(At,rt.mode,Wt),Ke.return=rt,rt=Ke),ve(rt);if(bA(At))return VA(rt,Ke,At,Wt);if(Ae(At))return Yo(rt,Ke,At,Wt);if(Sn&&up(rt,At),typeof At>"u"&&!vr)switch(rt.tag){case 1:case 0:throw rt=rt.type,Error(n(152,rt.displayName||rt.name||"Component"))}return R(rt,Ke)}}var gu=ng(!0),ig=ng(!1),du={},uo={current:du},QA={current:du},mc={current:du};function ca(P){if(P===du)throw Error(n(174));return P}function sg(P,D){Mn(mc,D,P),Mn(QA,P,P),Mn(uo,du,P),D=ne(D),Kn(uo,P),Mn(uo,D,P)}function yc(P){Kn(uo,P),Kn(QA,P),Kn(mc,P)}function Pm(P){var D=ca(mc.current),R=ca(uo.current);D=ee(R,P.type,D),R!==D&&(Mn(QA,P,P),Mn(uo,D,P))}function og(P){QA.current===P&&(Kn(uo,P),Kn(QA,P))}var $n={current:0};function Ap(P){for(var D=P;D!==null;){if(D.tag===13){var R=D.memoizedState;if(R!==null&&(R=R.dehydrated,R===null||Ls(R)||so(R)))return D}else if(D.tag===19&&D.memoizedProps.revealOrder!==void 0){if((D.effectTag&64)!==0)return D}else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===P)break;for(;D.sibling===null;){if(D.return===null||D.return===P)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}function ag(P,D){return{responder:P,props:D}}var FA=u.ReactCurrentDispatcher,Hs=u.ReactCurrentBatchConfig,mu=0,Ha=null,Gi=null,ua=null,yu=null,Es=null,Ec=null,Cc=0,G=null,Dt=0,wl=!1,bi=null,wc=0;function ct(){throw Error(n(321))}function Eu(P,D){if(D===null)return!1;for(var R=0;RCc&&(Cc=_r,_m(Cc))):(Pw(_r,wt.suspenseConfig),fe=wt.eagerReducer===P?wt.eagerState:P(fe,wt.action)),ve=wt,wt=wt.next}while(wt!==null&&wt!==j);bt||(vt=ve,Y=fe),hs(fe,D.memoizedState)||(qo=!0),D.memoizedState=fe,D.baseUpdate=vt,D.baseState=Y,R.lastRenderedState=fe}return[D.memoizedState,R.dispatch]}function cg(P){var D=TA();return typeof P=="function"&&(P=P()),D.memoizedState=D.baseState=P,P=D.queue={last:null,dispatch:null,lastRenderedReducer:Br,lastRenderedState:P},P=P.dispatch=hg.bind(null,Ha,P),[D.memoizedState,P]}function ug(P){return Cs(Br,P)}function Ag(P,D,R,j){return P={tag:P,create:D,destroy:R,deps:j,next:null},G===null?(G={lastEffect:null},G.lastEffect=P.next=P):(D=G.lastEffect,D===null?G.lastEffect=P.next=P:(R=D.next,D.next=P,P.next=R,G.lastEffect=P)),P}function pp(P,D,R,j){var Y=TA();Dt|=P,Y.memoizedState=Ag(D,R,void 0,j===void 0?null:j)}function Ic(P,D,R,j){var Y=fp();j=j===void 0?null:j;var fe=void 0;if(Gi!==null){var ve=Gi.memoizedState;if(fe=ve.destroy,j!==null&&Eu(j,ve.deps)){Ag(0,R,fe,j);return}}Dt|=P,Y.memoizedState=Ag(D,R,fe,j)}function Ct(P,D){return pp(516,192,P,D)}function Sm(P,D){return Ic(516,192,P,D)}function fg(P,D){if(typeof D=="function")return P=P(),D(P),function(){D(null)};if(D!=null)return P=P(),D.current=P,function(){D.current=null}}function pg(){}function Cu(P,D){return TA().memoizedState=[P,D===void 0?null:D],P}function xm(P,D){var R=fp();D=D===void 0?null:D;var j=R.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(R.memoizedState=[P,D],P)}function hg(P,D,R){if(!(25>wc))throw Error(n(301));var j=P.alternate;if(P===Ha||j!==null&&j===Ha)if(wl=!0,P={expirationTime:mu,suspenseConfig:null,action:R,eagerReducer:null,eagerState:null,next:null},bi===null&&(bi=new Map),R=bi.get(D),R===void 0)bi.set(D,P);else{for(D=R;D.next!==null;)D=D.next;D.next=P}else{var Y=ga(),fe=pt.suspense;Y=HA(Y,P,fe),fe={expirationTime:Y,suspenseConfig:fe,action:R,eagerReducer:null,eagerState:null,next:null};var ve=D.last;if(ve===null)fe.next=fe;else{var vt=ve.next;vt!==null&&(fe.next=vt),ve.next=fe}if(D.last=fe,P.expirationTime===0&&(j===null||j.expirationTime===0)&&(j=D.lastRenderedReducer,j!==null))try{var wt=D.lastRenderedState,bt=j(wt,R);if(fe.eagerReducer=j,fe.eagerState=bt,hs(bt,wt))return}catch{}finally{}Sc(P,Y)}}var wu={readContext:ms,useCallback:ct,useContext:ct,useEffect:ct,useImperativeHandle:ct,useLayoutEffect:ct,useMemo:ct,useReducer:ct,useRef:ct,useState:ct,useDebugValue:ct,useResponder:ct,useDeferredValue:ct,useTransition:ct},yw={readContext:ms,useCallback:Cu,useContext:ms,useEffect:Ct,useImperativeHandle:function(P,D,R){return R=R!=null?R.concat([P]):null,pp(4,36,fg.bind(null,D,P),R)},useLayoutEffect:function(P,D){return pp(4,36,P,D)},useMemo:function(P,D){var R=TA();return D=D===void 0?null:D,P=P(),R.memoizedState=[P,D],P},useReducer:function(P,D,R){var j=TA();return D=R!==void 0?R(D):D,j.memoizedState=j.baseState=D,P=j.queue={last:null,dispatch:null,lastRenderedReducer:P,lastRenderedState:D},P=P.dispatch=hg.bind(null,Ha,P),[j.memoizedState,P]},useRef:function(P){var D=TA();return P={current:P},D.memoizedState=P},useState:cg,useDebugValue:pg,useResponder:ag,useDeferredValue:function(P,D){var R=cg(P),j=R[0],Y=R[1];return Ct(function(){a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(P)}finally{Hs.suspense=fe}})},[P,D]),j},useTransition:function(P){var D=cg(!1),R=D[0],j=D[1];return[Cu(function(Y){j(!0),a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=P===void 0?null:P;try{j(!1),Y()}finally{Hs.suspense=fe}})},[P,R]),R]}},bm={readContext:ms,useCallback:xm,useContext:ms,useEffect:Sm,useImperativeHandle:function(P,D,R){return R=R!=null?R.concat([P]):null,Ic(4,36,fg.bind(null,D,P),R)},useLayoutEffect:function(P,D){return Ic(4,36,P,D)},useMemo:function(P,D){var R=fp();D=D===void 0?null:D;var j=R.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(P=P(),R.memoizedState=[P,D],P)},useReducer:Cs,useRef:function(){return fp().memoizedState},useState:ug,useDebugValue:pg,useResponder:ag,useDeferredValue:function(P,D){var R=ug(P),j=R[0],Y=R[1];return Sm(function(){a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(P)}finally{Hs.suspense=fe}})},[P,D]),j},useTransition:function(P){var D=ug(!1),R=D[0],j=D[1];return[xm(function(Y){j(!0),a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=P===void 0?null:P;try{j(!1),Y()}finally{Hs.suspense=fe}})},[P,R]),R]}},Aa=null,Bc=null,Il=!1;function Iu(P,D){var R=Dl(5,null,null,0);R.elementType="DELETED",R.type="DELETED",R.stateNode=D,R.return=P,R.effectTag=8,P.lastEffect!==null?(P.lastEffect.nextEffect=R,P.lastEffect=R):P.firstEffect=P.lastEffect=R}function gg(P,D){switch(P.tag){case 5:return D=io(D,P.type,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 6:return D=Si(D,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 13:return!1;default:return!1}}function RA(P){if(Il){var D=Bc;if(D){var R=D;if(!gg(P,D)){if(D=cc(R),!D||!gg(P,D)){P.effectTag=P.effectTag&-1025|2,Il=!1,Aa=P;return}Iu(Aa,R)}Aa=P,Bc=cu(D)}else P.effectTag=P.effectTag&-1025|2,Il=!1,Aa=P}}function hp(P){for(P=P.return;P!==null&&P.tag!==5&&P.tag!==3&&P.tag!==13;)P=P.return;Aa=P}function ja(P){if(!y||P!==Aa)return!1;if(!Il)return hp(P),Il=!0,!1;var D=P.type;if(P.tag!==5||D!=="head"&&D!=="body"&&!Qe(D,P.memoizedProps))for(D=Bc;D;)Iu(P,D),D=cc(D);if(hp(P),P.tag===13){if(!y)throw Error(n(316));if(P=P.memoizedState,P=P!==null?P.dehydrated:null,!P)throw Error(n(317));Bc=Ms(P)}else Bc=Aa?cc(P.stateNode):null;return!0}function dg(){y&&(Bc=Aa=null,Il=!1)}var gp=u.ReactCurrentOwner,qo=!1;function ws(P,D,R,j){D.child=P===null?ig(D,null,R,j):gu(D,P.child,R,j)}function Ii(P,D,R,j,Y){R=R.render;var fe=D.ref;return ds(D,Y),j=lg(P,D,R,j,fe,Y),P!==null&&!qo?(D.updateQueue=P.updateQueue,D.effectTag&=-517,P.expirationTime<=Y&&(P.expirationTime=0),si(P,D,Y)):(D.effectTag|=1,ws(P,D,j,Y),D.child)}function km(P,D,R,j,Y,fe){if(P===null){var ve=R.type;return typeof ve=="function"&&!kw(ve)&&ve.defaultProps===void 0&&R.compare===null&&R.defaultProps===void 0?(D.tag=15,D.type=ve,Qm(P,D,ve,j,Y,fe)):(P=Hm(R.type,null,j,null,D.mode,fe),P.ref=D.ref,P.return=D,D.child=P)}return ve=P.child,YD)&&_A.set(P,D)))}}function vg(P,D){P.expirationTimeP?D:P)}function fo(P){if(P.lastExpiredTime!==0)P.callbackExpirationTime=1073741823,P.callbackPriority=99,P.callbackNode=pu(Dw.bind(null,P));else{var D=Um(P),R=P.callbackNode;if(D===0)R!==null&&(P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90);else{var j=ga();if(D===1073741823?j=99:D===1||D===2?j=95:(j=10*(1073741821-D)-10*(1073741821-j),j=0>=j?99:250>=j?98:5250>=j?97:95),R!==null){var Y=P.callbackPriority;if(P.callbackExpirationTime===D&&Y>=j)return;R!==PA&&Ce(R)}P.callbackExpirationTime=D,P.callbackPriority=j,D=D===1073741823?pu(Dw.bind(null,P)):gc(j,Wv.bind(null,P),{timeout:10*(1073741821-D)-Li()}),P.callbackNode=D}}}function Wv(P,D){if(Om=0,D)return D=ga(),jm(P,D),fo(P),null;var R=Um(P);if(R!==0){if(D=P.callbackNode,(yr&(rs|js))!==En)throw Error(n(327));if(Ip(),P===gi&&R===ns||Pu(P,R),Mr!==null){var j=yr;yr|=rs;var Y=qA(P);do try{gF();break}catch(vt){jA(P,vt)}while(1);if(la(),yr=j,Ep.current=Y,Yi===Rm)throw D=Nm,Pu(P,R),WA(P,R),fo(P),D;if(Mr===null)switch(Y=P.finishedWork=P.current.alternate,P.finishedExpirationTime=R,j=Yi,gi=null,j){case Bu:case Rm:throw Error(n(345));case Bi:jm(P,2=R){P.lastPingedTime=R,Pu(P,R);break}}if(fe=Um(P),fe!==0&&fe!==R)break;if(j!==0&&j!==R){P.lastPingedTime=j;break}P.timeoutHandle=Te(Su.bind(null,P),Y);break}Su(P);break;case vl:if(WA(P,R),j=P.lastSuspendedTime,R===j&&(P.nextKnownPendingLevel=Sw(Y)),OA&&(Y=P.lastPingedTime,Y===0||Y>=R)){P.lastPingedTime=R,Pu(P,R);break}if(Y=Um(P),Y!==0&&Y!==R)break;if(j!==0&&j!==R){P.lastPingedTime=j;break}if(MA!==1073741823?j=10*(1073741821-MA)-Li():Ya===1073741823?j=0:(j=10*(1073741821-Ya)-5e3,Y=Li(),R=10*(1073741821-R)-Y,j=Y-j,0>j&&(j=0),j=(120>j?120:480>j?480:1080>j?1080:1920>j?1920:3e3>j?3e3:4320>j?4320:1960*Cw(j/1960))-j,R=j?j=0:(Y=ve.busyDelayMs|0,fe=Li()-(10*(1073741821-fe)-(ve.timeoutMs|0||5e3)),j=fe<=Y?0:Y+j-fe),10 component higher in the tree to provide a loading indicator or placeholder to display.`+ml(Y))}Yi!==Pc&&(Yi=Bi),fe=yg(fe,Y),wt=j;do{switch(wt.tag){case 3:ve=fe,wt.effectTag|=4096,wt.expirationTime=D;var Ke=Gv(wt,ve,D);It(wt,Ke);break e;case 1:ve=fe;var At=wt.type,Wt=wt.stateNode;if((wt.effectTag&64)===0&&(typeof At.getDerivedStateFromError=="function"||Wt!==null&&typeof Wt.componentDidCatch=="function"&&(Du===null||!Du.has(Wt)))){wt.effectTag|=4096,wt.expirationTime=D;var vr=Yv(wt,ve,D);It(wt,vr);break e}}wt=wt.return}while(wt!==null)}Mr=zv(Mr)}catch(Sn){D=Sn;continue}break}while(1)}function qA(){var P=Ep.current;return Ep.current=wu,P===null?wu:P}function Pw(P,D){PCp&&(Cp=P)}function hF(){for(;Mr!==null;)Mr=Jv(Mr)}function gF(){for(;Mr!==null&&!Tt();)Mr=Jv(Mr)}function Jv(P){var D=Zv(P.alternate,P,ns);return P.memoizedProps=P.pendingProps,D===null&&(D=zv(P)),ww.current=null,D}function zv(P){Mr=P;do{var D=Mr.alternate;if(P=Mr.return,(Mr.effectTag&2048)===0){e:{var R=D;D=Mr;var j=ns,Y=D.pendingProps;switch(D.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:ii(D.type)&&Oa(D);break;case 3:yc(D),hr(D),Y=D.stateNode,Y.pendingContext&&(Y.context=Y.pendingContext,Y.pendingContext=null),(R===null||R.child===null)&&ja(D)&&pa(D),Bl(D);break;case 5:og(D);var fe=ca(mc.current);if(j=D.type,R!==null&&D.stateNode!=null)ts(R,D,j,Y,fe),R.ref!==D.ref&&(D.effectTag|=128);else if(Y){if(R=ca(uo.current),ja(D)){if(Y=D,!y)throw Error(n(175));R=ap(Y.stateNode,Y.type,Y.memoizedProps,fe,R,Y),Y.updateQueue=R,R=R!==null,R&&pa(D)}else{var ve=ht(j,Y,fe,R,D);vc(ve,D,!1,!1),D.stateNode=ve,lt(ve,j,Y,fe,R)&&pa(D)}D.ref!==null&&(D.effectTag|=128)}else if(D.stateNode===null)throw Error(n(166));break;case 6:if(R&&D.stateNode!=null)Gr(R,D,R.memoizedProps,Y);else{if(typeof Y!="string"&&D.stateNode===null)throw Error(n(166));if(R=ca(mc.current),fe=ca(uo.current),ja(D)){if(R=D,!y)throw Error(n(176));(R=lp(R.stateNode,R.memoizedProps,R))&&pa(D)}else D.stateNode=_e(Y,R,fe,D)}break;case 11:break;case 13:if(Kn($n,D),Y=D.memoizedState,(D.effectTag&64)!==0){D.expirationTime=j;break e}Y=Y!==null,fe=!1,R===null?D.memoizedProps.fallback!==void 0&&ja(D):(j=R.memoizedState,fe=j!==null,Y||j===null||(j=R.child.sibling,j!==null&&(ve=D.firstEffect,ve!==null?(D.firstEffect=j,j.nextEffect=ve):(D.firstEffect=D.lastEffect=j,j.nextEffect=null),j.effectTag=8))),Y&&!fe&&(D.mode&2)!==0&&(R===null&&D.memoizedProps.unstable_avoidThisFallback!==!0||($n.current&1)!==0?Yi===Bu&&(Yi=ha):((Yi===Bu||Yi===ha)&&(Yi=vl),Cp!==0&&gi!==null&&(WA(gi,ns),eD(gi,Cp)))),S&&Y&&(D.effectTag|=4),w&&(Y||fe)&&(D.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:yc(D),Bl(D);break;case 10:wi(D);break;case 9:break;case 14:break;case 17:ii(D.type)&&Oa(D);break;case 19:if(Kn($n,D),Y=D.memoizedState,Y===null)break;if(fe=(D.effectTag&64)!==0,ve=Y.rendering,ve===null){if(fe)Dc(Y,!1);else if(Yi!==Bu||R!==null&&(R.effectTag&64)!==0)for(R=D.child;R!==null;){if(ve=Ap(R),ve!==null){for(D.effectTag|=64,Dc(Y,!1),R=ve.updateQueue,R!==null&&(D.updateQueue=R,D.effectTag|=4),Y.lastEffect===null&&(D.firstEffect=null),D.lastEffect=Y.lastEffect,R=j,Y=D.child;Y!==null;)fe=Y,j=R,fe.effectTag&=2,fe.nextEffect=null,fe.firstEffect=null,fe.lastEffect=null,ve=fe.alternate,ve===null?(fe.childExpirationTime=0,fe.expirationTime=j,fe.child=null,fe.memoizedProps=null,fe.memoizedState=null,fe.updateQueue=null,fe.dependencies=null):(fe.childExpirationTime=ve.childExpirationTime,fe.expirationTime=ve.expirationTime,fe.child=ve.child,fe.memoizedProps=ve.memoizedProps,fe.memoizedState=ve.memoizedState,fe.updateQueue=ve.updateQueue,j=ve.dependencies,fe.dependencies=j===null?null:{expirationTime:j.expirationTime,firstContext:j.firstContext,responders:j.responders}),Y=Y.sibling;Mn($n,$n.current&1|2,D),D=D.child;break e}R=R.sibling}}else{if(!fe)if(R=Ap(ve),R!==null){if(D.effectTag|=64,fe=!0,R=R.updateQueue,R!==null&&(D.updateQueue=R,D.effectTag|=4),Dc(Y,!0),Y.tail===null&&Y.tailMode==="hidden"&&!ve.alternate){D=D.lastEffect=Y.lastEffect,D!==null&&(D.nextEffect=null);break}}else Li()>Y.tailExpiration&&1Y&&(Y=j),ve>Y&&(Y=ve),fe=fe.sibling;R.childExpirationTime=Y}if(D!==null)return D;P!==null&&(P.effectTag&2048)===0&&(P.firstEffect===null&&(P.firstEffect=Mr.firstEffect),Mr.lastEffect!==null&&(P.lastEffect!==null&&(P.lastEffect.nextEffect=Mr.firstEffect),P.lastEffect=Mr.lastEffect),1P?D:P}function Su(P){var D=_o();return lo(99,dF.bind(null,P,D)),null}function dF(P,D){do Ip();while(Ig!==null);if((yr&(rs|js))!==En)throw Error(n(327));var R=P.finishedWork,j=P.finishedExpirationTime;if(R===null)return null;if(P.finishedWork=null,P.finishedExpirationTime=0,R===P.current)throw Error(n(177));P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90,P.nextKnownPendingLevel=0;var Y=Sw(R);if(P.firstPendingTime=Y,j<=P.lastSuspendedTime?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:j<=P.firstSuspendedTime&&(P.firstSuspendedTime=j-1),j<=P.lastPingedTime&&(P.lastPingedTime=0),j<=P.lastExpiredTime&&(P.lastExpiredTime=0),P===gi&&(Mr=gi=null,ns=0),1=R?ln(P,D,R):(Mn($n,$n.current&1,D),D=si(P,D,R),D!==null?D.sibling:null);Mn($n,$n.current&1,D);break;case 19:if(j=D.childExpirationTime>=R,(P.effectTag&64)!==0){if(j)return qa(P,D,R);D.effectTag|=64}if(Y=D.memoizedState,Y!==null&&(Y.rendering=null,Y.tail=null),Mn($n,$n.current,D),!j)return null}return si(P,D,R)}qo=!1}}else qo=!1;switch(D.expirationTime=0,D.tag){case 2:if(j=D.type,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,Y=Me(D,On.current),ds(D,R),Y=lg(null,D,j,P,Y,R),D.effectTag|=1,typeof Y=="object"&&Y!==null&&typeof Y.render=="function"&&Y.$$typeof===void 0){if(D.tag=1,mw(),ii(j)){var fe=!0;Ac(D)}else fe=!1;D.memoizedState=Y.state!==null&&Y.state!==void 0?Y.state:null;var ve=j.getDerivedStateFromProps;typeof ve=="function"&&er(D,j,ve,P),Y.updater=Zr,D.stateNode=Y,Y._reactInternalFiber=D,jo(D,j,P,R),D=mp(null,D,j,!0,fe,R)}else D.tag=0,ws(null,D,Y,R),D=D.child;return D;case 16:if(Y=D.elementType,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,ye(Y),Y._status!==1)throw Y._result;switch(Y=Y._result,D.type=Y,fe=D.tag=BF(Y),P=Ci(Y,P),fe){case 0:D=NA(null,D,Y,P,R);break;case 1:D=dp(null,D,Y,P,R);break;case 11:D=Ii(null,D,Y,P,R);break;case 14:D=km(null,D,Y,Ci(Y.type,P),j,R);break;default:throw Error(n(306,Y,""))}return D;case 0:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),NA(P,D,j,Y,R);case 1:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),dp(P,D,j,Y,R);case 3:if(mg(D),j=D.updateQueue,j===null)throw Error(n(282));if(Y=D.memoizedState,Y=Y!==null?Y.element:null,me(D,j,D.pendingProps,null,R),j=D.memoizedState.element,j===Y)dg(),D=si(P,D,R);else{if((Y=D.stateNode.hydrate)&&(y?(Bc=cu(D.stateNode.containerInfo),Aa=D,Y=Il=!0):Y=!1),Y)for(R=ig(D,null,j,R),D.child=R;R;)R.effectTag=R.effectTag&-3|1024,R=R.sibling;else ws(P,D,j,R),dg();D=D.child}return D;case 5:return Pm(D),P===null&&RA(D),j=D.type,Y=D.pendingProps,fe=P!==null?P.memoizedProps:null,ve=Y.children,Qe(j,Y)?ve=null:fe!==null&&Qe(j,fe)&&(D.effectTag|=16),Go(P,D),D.mode&4&&R!==1&&be(j,Y)?(D.expirationTime=D.childExpirationTime=1,D=null):(ws(P,D,ve,R),D=D.child),D;case 6:return P===null&&RA(D),null;case 13:return ln(P,D,R);case 4:return sg(D,D.stateNode.containerInfo),j=D.pendingProps,P===null?D.child=gu(D,null,j,R):ws(P,D,j,R),D.child;case 11:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),Ii(P,D,j,Y,R);case 7:return ws(P,D,D.pendingProps,R),D.child;case 8:return ws(P,D,D.pendingProps.children,R),D.child;case 12:return ws(P,D,D.pendingProps.children,R),D.child;case 10:e:{if(j=D.type._context,Y=D.pendingProps,ve=D.memoizedProps,fe=Y.value,Ho(D,fe),ve!==null){var vt=ve.value;if(fe=hs(vt,fe)?0:(typeof j._calculateChangedBits=="function"?j._calculateChangedBits(vt,fe):1073741823)|0,fe===0){if(ve.children===Y.children&&!_i.current){D=si(P,D,R);break e}}else for(vt=D.child,vt!==null&&(vt.return=D);vt!==null;){var wt=vt.dependencies;if(wt!==null){ve=vt.child;for(var bt=wt.firstContext;bt!==null;){if(bt.context===j&&(bt.observedBits&fe)!==0){vt.tag===1&&(bt=ys(R,null),bt.tag=2,tt(vt,bt)),vt.expirationTime"u")return!1;var D=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(D.isDisabled||!D.supportsFiber)return!0;try{var R=D.inject(P);xw=function(j){try{D.onCommitFiberRoot(R,j,void 0,(j.current.effectTag&64)===64)}catch{}},bw=function(j){try{D.onCommitFiberUnmount(R,j)}catch{}}}catch{}return!0}function IF(P,D,R,j){this.tag=P,this.key=R,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=D,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=j,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Dl(P,D,R,j){return new IF(P,D,R,j)}function kw(P){return P=P.prototype,!(!P||!P.isReactComponent)}function BF(P){if(typeof P=="function")return kw(P)?1:0;if(P!=null){if(P=P.$$typeof,P===L)return 11;if(P===te)return 14}return 2}function YA(P,D){var R=P.alternate;return R===null?(R=Dl(P.tag,D,P.key,P.mode),R.elementType=P.elementType,R.type=P.type,R.stateNode=P.stateNode,R.alternate=P,P.alternate=R):(R.pendingProps=D,R.effectTag=0,R.nextEffect=null,R.firstEffect=null,R.lastEffect=null),R.childExpirationTime=P.childExpirationTime,R.expirationTime=P.expirationTime,R.child=P.child,R.memoizedProps=P.memoizedProps,R.memoizedState=P.memoizedState,R.updateQueue=P.updateQueue,D=P.dependencies,R.dependencies=D===null?null:{expirationTime:D.expirationTime,firstContext:D.firstContext,responders:D.responders},R.sibling=P.sibling,R.index=P.index,R.ref=P.ref,R}function Hm(P,D,R,j,Y,fe){var ve=2;if(j=P,typeof P=="function")kw(P)&&(ve=1);else if(typeof P=="string")ve=5;else e:switch(P){case E:return xu(R.children,Y,fe,D);case T:ve=8,Y|=7;break;case I:ve=8,Y|=1;break;case v:return P=Dl(12,R,D,Y|8),P.elementType=v,P.type=v,P.expirationTime=fe,P;case U:return P=Dl(13,R,D,Y),P.type=U,P.elementType=U,P.expirationTime=fe,P;case J:return P=Dl(19,R,D,Y),P.elementType=J,P.expirationTime=fe,P;default:if(typeof P=="object"&&P!==null)switch(P.$$typeof){case b:ve=10;break e;case C:ve=9;break e;case L:ve=11;break e;case te:ve=14;break e;case le:ve=16,j=null;break e}throw Error(n(130,P==null?P:typeof P,""))}return D=Dl(ve,R,D,Y),D.elementType=P,D.type=j,D.expirationTime=fe,D}function xu(P,D,R,j){return P=Dl(7,P,j,D),P.expirationTime=R,P}function Qw(P,D,R){return P=Dl(6,P,null,D),P.expirationTime=R,P}function Fw(P,D,R){return D=Dl(4,P.children!==null?P.children:[],P.key,D),D.expirationTime=R,D.stateNode={containerInfo:P.containerInfo,pendingChildren:null,implementation:P.implementation},D}function vF(P,D,R){this.tag=D,this.current=null,this.containerInfo=P,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=He,this.pendingContext=this.context=null,this.hydrate=R,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function $v(P,D){var R=P.firstSuspendedTime;return P=P.lastSuspendedTime,R!==0&&R>=D&&P<=D}function WA(P,D){var R=P.firstSuspendedTime,j=P.lastSuspendedTime;RD||R===0)&&(P.lastSuspendedTime=D),D<=P.lastPingedTime&&(P.lastPingedTime=0),D<=P.lastExpiredTime&&(P.lastExpiredTime=0)}function eD(P,D){D>P.firstPendingTime&&(P.firstPendingTime=D);var R=P.firstSuspendedTime;R!==0&&(D>=R?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:D>=P.lastSuspendedTime&&(P.lastSuspendedTime=D+1),D>P.nextKnownPendingLevel&&(P.nextKnownPendingLevel=D))}function jm(P,D){var R=P.lastExpiredTime;(R===0||R>D)&&(P.lastExpiredTime=D)}function tD(P){var D=P._reactInternalFiber;if(D===void 0)throw typeof P.render=="function"?Error(n(188)):Error(n(268,Object.keys(P)));return P=Ee(D),P===null?null:P.stateNode}function rD(P,D){P=P.memoizedState,P!==null&&P.dehydrated!==null&&P.retryTime{"use strict";bEe.exports=xEe()});var FEe=_((yVt,QEe)=>{"use strict";var Wyt={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};QEe.exports=Wyt});var LEe=_((EVt,NEe)=>{"use strict";var Vyt=Object.assign||function(t){for(var e=1;e"}}]),t}(),TEe=function(){Kk(t,null,[{key:"fromJS",value:function(r){var o=r.width,a=r.height;return new t(o,a)}}]);function t(e,r){k6(this,t),this.width=e,this.height=r}return Kk(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),REe=function(){function t(e,r){k6(this,t),this.unit=e,this.value=r}return Kk(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case tu.UNIT_POINT:return String(this.value);case tu.UNIT_PERCENT:return this.value+"%";case tu.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();NEe.exports=function(t,e){function r(u,A,p){var h=u[A];u[A]=function(){for(var E=arguments.length,I=Array(E),v=0;v1?I-1:0),b=1;b1&&arguments[1]!==void 0?arguments[1]:NaN,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:tu.DIRECTION_LTR;return u.call(this,A,p,h)}),Vyt({Config:e.Config,Node:e.Node,Layout:t("Layout",Kyt),Size:t("Size",TEe),Value:t("Value",REe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},tu)}});var MEe=_((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof Be=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var o=nodeFS.readFileSync(e);return r?o:o.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,o){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):o()},a.onerror=o,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var o=enlargeMemory();if(!o)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var o=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return o},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,o,a,n){var u=getCFunc(e),A=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,o){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var u=typeof e=="string"?e:null,A;if(r==ALLOC_NONE?A=o:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,u?1:e.length)),a){var o=A,p;for(assert((A&3)==0),p=A+(n&-4);o>2]=0;for(p=A+n;o>0]=0;return A}if(u==="i8")return t.subarray||t.slice?HEAPU8.set(t,A):HEAPU8.set(new Uint8Array(t),A),A;for(var h=0,E,I,v;h>0],r|=o,!(o==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var u=1024,A;e>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,u))),n=n?n+A:A,t+=u,e-=u;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var o,a,n,u,A,p,h="";;){if(o=t[e++],!o)return h;if(!(o&128)){h+=String.fromCharCode(o);continue}if(a=t[e++]&63,(o&224)==192){h+=String.fromCharCode((o&31)<<6|a);continue}if(n=t[e++]&63,(o&240)==224?o=(o&15)<<12|a<<6|n:(u=t[e++]&63,(o&248)==240?o=(o&7)<<18|a<<12|n<<6|u:(A=t[e++]&63,(o&252)==248?o=(o&3)<<24|a<<18|n<<12|u<<6|A:(p=t[e++]&63,o=(o&1)<<30|a<<24|n<<18|u<<12|A<<6|p))),o<65536)h+=String.fromCharCode(o);else{var E=o-65536;h+=String.fromCharCode(55296|E>>10,56320|E&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,o){if(!(o>0))return 0;for(var a=r,n=r+o-1,u=0;u=55296&&A<=57343&&(A=65536+((A&1023)<<10)|t.charCodeAt(++u)&1023),A<=127){if(r>=n)break;e[r++]=A}else if(A<=2047){if(r+1>=n)break;e[r++]=192|A>>6,e[r++]=128|A&63}else if(A<=65535){if(r+2>=n)break;e[r++]=224|A>>12,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=2097151){if(r+3>=n)break;e[r++]=240|A>>18,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=67108863){if(r+4>=n)break;e[r++]=248|A>>24,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else{if(r+5>=n)break;e[r++]=252|A>>30,e[r++]=128|A>>24&63,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&o<=57343&&(o=65536+((o&1023)<<10)|t.charCodeAt(++r)&1023),o<=127?++e:o<=2047?e+=2:o<=65535?e+=3:o<=2097151?e+=4:o<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),o=lengthBytesUTF8(r)+1,a=_malloc(o);stringToUTF8(r,a,o);var n=_malloc(4),u=e(a,0,0,n);if(getValue(n,"i32")===0&&u)return Pointer_stringify(u)}catch{}finally{a&&_free(a),n&&_free(n),u&&_free(u)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var o=demangle(r);return r===o?r:r+" ["+o+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` -`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var o=r>0?r:lengthBytesUTF8(t)+1,a=new Array(o),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(o&=255),e.push(String.fromCharCode(o))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var o,a;r&&(a=e+lengthBytesUTF8(t),o=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=o)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var o=0;o>0]=t.charCodeAt(o);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var o=e>>>16,a=e&65535,n=r>>>16,u=r&65535;return a*u+(o*u+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,o,a,n,u,A){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,o,a,n,u,A){return ASM_CONSTS[t](e,r,o,a,n,u,A)}function _emscripten_asm_const_iiiii(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiidddddd(t,e,r,o,a,n,u,A,p){return ASM_CONSTS[t](e,r,o,a,n,u,A,p)}function _emscripten_asm_const_iiididi(t,e,r,o,a,n,u){return ASM_CONSTS[t](e,r,o,a,n,u)}function _emscripten_asm_const_iiii(t,e,r,o){return ASM_CONSTS[t](e,r,o)}function _emscripten_asm_const_iiiid(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiiiii(t,e,r,o,a,n){return ASM_CONSTS[t](e,r,o,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,o){var a=arguments.length,n=a<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,o);else for(var A=t.length-1;A>=0;A--)(u=t[A])&&(n=(a<3?u(n):a>3?u(e,r,n):u(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,o){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=o/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var u=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,u)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(u){u.source===window&&u.data===o&&(u.stopPropagation(),r.shift()())};var a=n,r=[],o="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(A){r.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:o})):window.postMessage(o,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,o,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=o;var n;typeof o<"u"?n=function(){Module.dynCall_vi(t,o)}:n=function(){Module.dynCall_v(t)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var E=Browser.mainLoop.remainingBlockers,I=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=I:(I=I+.5,Browser.mainLoop.remainingBlockers=(8*E+I)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(u0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,u,A,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(u)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(u)}))}catch(b){Runtime.warnOnce("Blob constructor present but fails: "+b+"; falling back to blob builder")}if(!h){var E=new Browser.BlobBuilder;E.append(new Uint8Array(n).buffer),h=E.getBlob()}var I=Browser.URLObject.createObjectURL(h),v=new Image;v.onload=function(){assert(v.complete,"Image "+u+" could not be decoded");var C=document.createElement("canvas");C.width=v.width,C.height=v.height;var T=C.getContext("2d");T.drawImage(v,0,0),Module.preloadedImages[u]=C,Browser.URLObject.revokeObjectURL(I),A&&A(n)},v.onerror=function(C){console.log("Image "+I+" could not be decoded"),p&&p()},v.src=I},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,u,A,p){var h=!1;function E(T){h||(h=!0,Module.preloadedAudios[u]=T,A&&A(n))}function I(){h||(h=!0,Module.preloadedAudios[u]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var v=new Blob([n],{type:Browser.getMimetype(u)})}catch{return I()}var b=Browser.URLObject.createObjectURL(v),C=new Audio;C.addEventListener("canplaythrough",function(){E(C)},!1),C.onerror=function(L){if(h)return;console.log("warning: browser could not fully decode audio "+u+", trying slower base64 approach");function U(J){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",le="=",pe="",Ae=0,ye=0,ae=0;ae=6;){var we=Ae>>ye-6&63;ye-=6,pe+=te[we]}return ye==2?(pe+=te[(Ae&3)<<4],pe+=le+le):ye==4&&(pe+=te[(Ae&15)<<2],pe+=le),pe}C.src="data:audio/x-"+u.substr(-3)+";base64,"+U(n),E(C)},C.src=b,Browser.safeSetTimeout(function(){E(C)},1e4)}else return I()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var o=Module.canvas;o&&(o.requestPointerLock=o.requestPointerLock||o.mozRequestPointerLock||o.webkitRequestPointerLock||o.msRequestPointerLock||function(){},o.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},o.exitPointerLock=o.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&o.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,o){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var u={antialias:!1,alpha:!1};if(o)for(var A in o)u[A]=o[A];n=GL.createContext(t,u),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var o=Module.canvas;function a(){Browser.isFullscreen=!1;var u=o.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===u?(o.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},o.exitFullscreen=o.exitFullscreen.bind(document),Browser.lockPointer&&o.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(u.parentNode.insertBefore(o,u),u.parentNode.removeChild(u),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(o)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");o.parentNode.insertBefore(n,o),n.appendChild(o),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(o,a,n){return Browser.requestFullscreen(o,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,o=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var u=t.touch;if(u===void 0)return;var A=u.pageX-(a+e.left),p=u.pageY-(n+e.top);A=A*(r/e.width),p=p*(o/e.height);var h={x:A,y:p};if(t.type==="touchstart")Browser.lastTouches[u.identifier]=h,Browser.touches[u.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[u.identifier];E||(E=h),Browser.lastTouches[u.identifier]=E,Browser.touches[u.identifier]=h}return}var I=t.pageX-(a+e.left),v=t.pageY-(n+e.top);I=I*(r/e.width),v=v*(o/e.height),Browser.mouseMovementX=I-Browser.mouseX,Browser.mouseMovementY=v-Browser.mouseY,Browser.mouseX=I,Browser.mouseY=v}},asyncLoad:function(t,e,r,o){var a=o?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var o=Module.canvas;Browser.updateCanvasDimensions(o,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var o=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(o/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(o){return(typeof FS>"u"||!(o instanceof FS.ErrnoError))&&abort(o),-o.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,E,I,v,b){if(h==1){var C=I&896;(C==128||C==256||C==384)&&(p="X const")}var T;return b?T=E.replace("X",p).replace("Y",v):T=p.replace("X",E).replace("Y",v),T.replace(/([*&]) (?=[*&])/g,"$1")}function o(p,h,E,I,v){throw new Error(p+" type "+E.replace("X",h+"?")+(I?" with flag "+I:"")+" in "+v)}function a(p,h,E,I,v,b,C,T){b===void 0&&(b="X"),T===void 0&&(T=1);var L=E(p);if(L)return L;var U=I(p),J=U.placeholderFlag,te=e[J];C&&te&&(b=r(C[2],C[0],b,te[0],"?",!0));var le;J==0&&(le="Unbound"),J>=10&&(le="Corrupt"),T>20&&(le="Deeply nested"),le&&o(le,p,b,J,v||"?");var pe=U.paramList[0],Ae=a(pe,h,E,I,v,b,te,T+1),ye,ae={flags:te[0],id:p,name:"",paramList:[Ae]},we=[],Pe="?";switch(U.placeholderFlag){case 1:ye=Ae.spec;break;case 2:if((Ae.flags&15360)==1024&&Ae.spec.ptrSize==1){ae.flags=7168;break}case 3:case 6:case 5:ye=Ae.spec,Ae.flags&15360;break;case 8:Pe=""+U.paramList[1],ae.paramList.push(U.paramList[1]);break;case 9:for(var g=0,Ee=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),u=SYSCALLS.get(),A=a;return FS.llseek(r,A,u),HEAP32[n>>2]=r.position,r.getdents&&A===0&&u===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,I){var v=___syscall146.buffers[E];assert(v),I===0||I===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(v,0)),v.length=0):v.push(I)});for(var u=0;u>2],p=HEAP32[o+(u*8+4)>>2],h=0;h"u"||!(E instanceof FS.ErrnoError))&&abort(E),-E.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var o=_nbind.typeNameTbl.NBind.proto;return o.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var o=HEAPU32[t.pagePtr];if(o){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],o=new r(e);return typeIdTbl[e.id]=o,_nbind.typeNameTbl[e.name]=o,o}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var o=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(o=[o[0],o.slice(1)]),{paramList:o,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},o=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+o];if(!a)throw new Error("dynCall_"+o+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,o){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,o)):(r.arity=o,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var o=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return o.heap=a[r.ptrSize*8],o.ptrSize=r.ptrSize,o}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,o=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,o,r),o}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,o){return function(a){return pushCString(a,o)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(o){return!!o},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(o){__extends(a,o);function a(n,u,A,p){var h=o.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=u,I=A,v=p;if(n!==_nbind.ptrMarker){var b=h.__nbindConstructor.apply(h,arguments);E=4608,v=HEAPU32[b/4],I=HEAPU32[b/4+1]}var C={configurable:!0,enumerable:!1,value:null,writable:!1},T={__nbindFlags:E,__nbindPtr:I};v&&(T.__nbindShared=v,_nbind.mark(h));for(var L=0,U=Object.keys(T);L>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?u=Buffer.from(n):u=new Buffer(n),u.copy(o)}else getBuffer(o).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,o,a,n){try{Module.dynCall_viiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,o){try{return Module.dynCall_fiff(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,o,a){try{Module.dynCall_viddi(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,o){try{Module.dynCall_vidd(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,o){try{return Module.dynCall_iiii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,o){try{return Module.dynCall_diii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,o,a,n){try{Module.dynCall_viiddi(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,o,a,n,u){try{Module.dynCall_viiiiii(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,o,a,n){try{return Module.dynCall_iiiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,o,a){try{Module.dynCall_viiid(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,o,a,n,u){try{Module.dynCall_viififi(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(t,e,r,o){try{Module.dynCall_viii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,o){try{Module.dynCall_viid(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,o,a){try{Module.dynCall_viiii(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var o=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),u=new t.Uint8Array(r),A=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),I=e.DYNAMICTOP_PTR|0,v=e.tempDoublePtr|0,b=e.ABORT|0,C=e.STACKTOP|0,T=e.STACK_MAX|0,L=e.cttz_i8|0,U=e.___dso_handle|0,J=0,te=0,le=0,pe=0,Ae=t.NaN,ye=t.Infinity,ae=0,we=0,Pe=0,g=0,Ee=0,De=0,ce=t.Math.floor,ne=t.Math.abs,ee=t.Math.sqrt,Ie=t.Math.pow,ke=t.Math.cos,ht=t.Math.sin,H=t.Math.tan,lt=t.Math.acos,Re=t.Math.asin,Qe=t.Math.atan,be=t.Math.atan2,_e=t.Math.exp,Te=t.Math.log,Je=t.Math.ceil,He=t.Math.imul,x=t.Math.min,w=t.Math.max,S=t.Math.clz32,y=t.Math.fround,F=e.abort,z=e.assert,X=e.enlargeMemory,Z=e.getTotalMemory,ie=e.abortOnCannotGrowMemory,Se=e.invoke_viiiii,Ne=e.invoke_vif,ot=e.invoke_vid,dt=e.invoke_fiff,jt=e.invoke_vi,$t=e.invoke_vii,xt=e.invoke_ii,an=e.invoke_viddi,Qr=e.invoke_vidd,mr=e.invoke_iiii,xr=e.invoke_diii,Wr=e.invoke_di,Vn=e.invoke_iid,Ns=e.invoke_iii,Ri=e.invoke_viiddi,ps=e.invoke_viiiiii,io=e.invoke_dii,Si=e.invoke_i,Ls=e.invoke_iiiiii,so=e.invoke_viiid,cc=e.invoke_viififi,cu=e.invoke_viii,ap=e.invoke_v,lp=e.invoke_viid,Ms=e.invoke_idd,Dn=e.invoke_viiii,oo=e._emscripten_asm_const_iiiii,Os=e._emscripten_asm_const_iiidddddd,ml=e._emscripten_asm_const_iiiid,yl=e.__nbind_reference_external,ao=e._emscripten_asm_const_iiiiiiii,Kn=e._removeAccessorPrefix,Mn=e._typeModule,Ni=e.__nbind_register_pool,On=e.__decorate,_i=e._llvm_stackrestore,tr=e.___cxa_atexit,Me=e.__extends,ii=e.__nbind_get_value_object,Oa=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,hr=e._emscripten_set_main_loop_timing,uc=e.__nbind_register_primitive,uu=e.__nbind_register_type,Ac=e._emscripten_memcpy_big,El=e.__nbind_register_function,vA=e.___setErrNo,Au=e.__nbind_register_class,Ce=e.__nbind_finish,Tt=e._abort,fc=e._nbind_value,Hi=e._llvm_stacksave,fu=e.___syscall54,Yt=e._defineHidden,Cl=e._emscripten_set_main_loop,DA=e._emscripten_get_now,cp=e.__nbind_register_callback_signature,pc=e._emscripten_asm_const_iiiiii,PA=e.__nbind_free_external,Qn=e._emscripten_asm_const_iiii,hi=e._emscripten_asm_const_iiididi,hc=e.___syscall6,SA=e._atexit,sa=e.___syscall140,Li=e.___syscall146,_o=y(0);let Ze=y(0);function lo(s){s=s|0;var l=0;return l=C,C=C+s|0,C=C+15&-16,l|0}function gc(){return C|0}function pu(s){s=s|0,C=s}function ji(s,l){s=s|0,l=l|0,C=s,T=l}function hu(s,l){s=s|0,l=l|0,J||(J=s,te=l)}function xA(s){s=s|0,De=s}function Ua(){return De|0}function dc(){var s=0,l=0;Dr(8104,8,400)|0,Dr(8504,408,540)|0,s=9044,l=s+44|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o[9088]=0,o[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,tr(17,8104,U|0)|0}function hs(s){s=s|0,ft(s+948|0)}function _t(s){return s=y(s),((Du(s)|0)&2147483647)>>>0>2139095040|0}function Fn(s,l,c){s=s|0,l=l|0,c=c|0;e:do if(n[s+(l<<3)+4>>2]|0)s=s+(l<<3)|0;else{if((l|2|0)==3&&n[s+60>>2]|0){s=s+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[s+52>>2]|0){s=s+48|0;break e}break}default:}if(n[s+68>>2]|0){s=s+64|0;break}else{s=(l|1|0)==5?948:c;break}}while(0);return s|0}function Ci(s){s=s|0;var l=0;return l=pD(1e3)|0,oa(s,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Dr(l|0,8104,1e3)|0,o[s+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=s,l|0}function oa(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,yg(s,5,3197,f)),C=d}function co(){return Ci(956)|0}function Us(s){s=s|0;var l=0;return l=Vt(1e3)|0,aa(l,s),oa(n[s+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function aa(s,l){s=s|0,l=l|0;var c=0;Dr(s|0,l|0,948)|0,Fm(s+948|0,l+948|0),c=s+960|0,s=l+960|0,l=c+40|0;do n[c>>2]=n[s>>2],c=c+4|0,s=s+4|0;while((c|0)<(l|0))}function la(s){s=s|0;var l=0,c=0,f=0,d=0;if(l=s+944|0,c=n[l>>2]|0,c|0&&(Ho(c+948|0,s)|0,n[l>>2]=0),c=wi(s)|0,c|0){l=0;do n[(gs(s,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(c|0))}c=s+948|0,f=n[c>>2]|0,d=s+952|0,l=n[d>>2]|0,(l|0)!=(f|0)&&(n[d>>2]=l+(~((l+-4-f|0)>>>2)<<2)),ds(c),hD(s),n[2276]=(n[2276]|0)+-1}function Ho(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0;f=n[s>>2]|0,k=s+4|0,c=n[k>>2]|0,m=c;e:do if((f|0)==(c|0))d=f,B=4;else for(s=f;;){if((n[s>>2]|0)==(l|0)){d=s,B=4;break e}if(s=s+4|0,(s|0)==(c|0)){s=0;break}}while(0);return(B|0)==4&&((d|0)!=(c|0)?(f=d+4|0,s=m-f|0,l=s>>2,l&&(Mw(d|0,f|0,s|0)|0,c=n[k>>2]|0),s=d+(l<<2)|0,(c|0)==(s|0)||(n[k>>2]=c+(~((c+-4-s|0)>>>2)<<2)),s=1):s=0),s|0}function wi(s){return s=s|0,(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2|0}function gs(s,l){s=s|0,l=l|0;var c=0;return c=n[s+948>>2]|0,(n[s+952>>2]|0)-c>>2>>>0>l>>>0?s=n[c+(l<<2)>>2]|0:s=0,s|0}function ds(s){s=s|0;var l=0,c=0,f=0,d=0;f=C,C=C+32|0,l=f,d=n[s>>2]|0,c=(n[s+4>>2]|0)-d|0,((n[s+8>>2]|0)-d|0)>>>0>c>>>0&&(d=c>>2,wp(l,d,d,s+8|0),Ig(s,l),UA(l)),C=f}function ms(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;O=wi(s)|0;do if(O|0){if((n[(gs(s,0)|0)+944>>2]|0)==(s|0)){if(!(Ho(s+948|0,l)|0))break;Dr(l+400|0,8504,540)|0,n[l+944>>2]=0,Le(s);break}B=n[(n[s+976>>2]|0)+12>>2]|0,k=s+948|0,Q=(B|0)==0,c=0,m=0;do f=n[(n[k>>2]|0)+(m<<2)>>2]|0,(f|0)==(l|0)?Le(s):(d=Us(f)|0,n[(n[k>>2]|0)+(c<<2)>>2]=d,n[d+944>>2]=s,Q||LT[B&15](f,d,s,c),c=c+1|0),m=m+1|0;while((m|0)!=(O|0));if(c>>>0>>0){Q=s+948|0,k=s+952|0,B=c,c=n[k>>2]|0;do m=(n[Q>>2]|0)+(B<<2)|0,f=m+4|0,d=c-f|0,l=d>>2,l&&(Mw(m|0,f|0,d|0)|0,c=n[k>>2]|0),d=c,f=m+(l<<2)|0,(d|0)!=(f|0)&&(c=d+(~((d+-4-f|0)>>>2)<<2)|0,n[k>>2]=c),B=B+1|0;while((B|0)!=(O|0))}}while(0)}function _s(s){s=s|0;var l=0,c=0,f=0,d=0;Un(s,(wi(s)|0)==0,2491),Un(s,(n[s+944>>2]|0)==0,2545),l=s+948|0,c=n[l>>2]|0,f=s+952|0,d=n[f>>2]|0,(d|0)!=(c|0)&&(n[f>>2]=d+(~((d+-4-c|0)>>>2)<<2)),ds(l),l=s+976|0,c=n[l>>2]|0,Dr(s|0,8104,1e3)|0,o[c+2>>0]|0&&(n[s+4>>2]=2,n[s+12>>2]=4),n[l>>2]=c}function Un(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Ao(s,5,3197,f)),C=d}function Pn(){return n[2276]|0}function ys(){var s=0;return s=pD(20)|0,We((s|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[s>>2]=n[239],n[s+4>>2]=n[240],n[s+8>>2]=n[241],n[s+12>>2]=n[242],n[s+16>>2]=n[243],s|0}function We(s,l){s=s|0,l=l|0;var c=0,f=0;f=C,C=C+16|0,c=f,s||(n[c>>2]=l,Ao(0,5,3197,c)),C=f}function tt(s){s=s|0,hD(s),n[2277]=(n[2277]|0)+-1}function It(s,l){s=s|0,l=l|0;var c=0;l?(Un(s,(wi(s)|0)==0,2629),c=1):(c=0,l=0),n[s+964>>2]=l,n[s+988>>2]=c}function nr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+8|0,d=f+4|0,B=f,n[d>>2]=l,Un(s,(n[l+944>>2]|0)==0,2709),Un(s,(n[s+964>>2]|0)==0,2763),$(s),l=s+948|0,n[B>>2]=(n[l>>2]|0)+(c<<2),n[m>>2]=n[B>>2],me(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=s,Le(s),C=f}function $(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;if(c=wi(s)|0,c|0&&(n[(gs(s,0)|0)+944>>2]|0)!=(s|0)){f=n[(n[s+976>>2]|0)+12>>2]|0,d=s+948|0,m=(f|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=Us(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=s,m||LT[f&15](B,k,s,l),l=l+1|0;while((l|0)!=(c|0))}}function me(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0;et=C,C=C+64|0,q=et+52|0,k=et+48|0,se=et+28|0,Ge=et+24|0,Oe=et+20|0,Fe=et,f=n[s>>2]|0,m=f,l=f+((n[l>>2]|0)-m>>2<<2)|0,f=s+4|0,d=n[f>>2]|0,B=s+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[c>>2],n[f>>2]=(n[f>>2]|0)+4;break}_A(s,l,d,l+4|0),l>>>0<=c>>>0&&(c=(n[f>>2]|0)>>>0>c>>>0?c+4|0:c),n[l>>2]=n[c>>2]}else{f=(d-m>>2)+1|0,d=N(s)|0,d>>>0>>0&&zr(s),M=n[s>>2]|0,O=(n[B>>2]|0)-M|0,m=O>>1,wp(Fe,O>>2>>>0>>1>>>0?m>>>0>>0?f:m:d,l-M>>2,s+8|0),M=Fe+8|0,f=n[M>>2]|0,m=Fe+12|0,O=n[m>>2]|0,B=O,Q=f;do if((f|0)==(O|0)){if(O=Fe+4|0,f=n[O>>2]|0,Xe=n[Fe>>2]|0,d=Xe,f>>>0<=Xe>>>0){f=B-d>>1,f=(f|0)==0?1:f,wp(se,f,f>>>2,n[Fe+16>>2]|0),n[Ge>>2]=n[O>>2],n[Oe>>2]=n[M>>2],n[k>>2]=n[Ge>>2],n[q>>2]=n[Oe>>2],vw(se,k,q),f=n[Fe>>2]|0,n[Fe>>2]=n[se>>2],n[se>>2]=f,f=se+4|0,Xe=n[O>>2]|0,n[O>>2]=n[f>>2],n[f>>2]=Xe,f=se+8|0,Xe=n[M>>2]|0,n[M>>2]=n[f>>2],n[f>>2]=Xe,f=se+12|0,Xe=n[m>>2]|0,n[m>>2]=n[f>>2],n[f>>2]=Xe,UA(se),f=n[M>>2]|0;break}m=f,B=((m-d>>2)+1|0)/-2|0,k=f+(B<<2)|0,d=Q-m|0,m=d>>2,m&&(Mw(k|0,f|0,d|0)|0,f=n[O>>2]|0),Xe=k+(m<<2)|0,n[M>>2]=Xe,n[O>>2]=f+(B<<2),f=Xe}while(0);n[f>>2]=n[c>>2],n[M>>2]=(n[M>>2]|0)+4,l=Bg(s,Fe,l)|0,UA(Fe)}while(0);return C=et,l|0}function Le(s){s=s|0;var l=0;do{if(l=s+984|0,o[l>>0]|0)break;o[l>>0]=1,h[s+504>>2]=y(Ae),s=n[s+944>>2]|0}while((s|0)!=0)}function ft(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function pt(s){return s=s|0,n[s+944>>2]|0}function Rt(s){s=s|0,Un(s,(n[s+964>>2]|0)!=0,2832),Le(s)}function er(s){return s=s|0,(o[s+984>>0]|0)!=0|0}function Zr(s,l){s=s|0,l=l|0,LUe(s,l,400)|0&&(Dr(s|0,l|0,400)|0,Le(s))}function qi(s){s=s|0;var l=Ze;return l=y(h[s+44>>2]),s=_t(l)|0,y(s?y(0):l)}function es(s){s=s|0;var l=Ze;return l=y(h[s+48>>2]),_t(l)|0&&(l=o[(n[s+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function xi(s,l){s=s|0,l=l|0,n[s+980>>2]=l}function jo(s){return s=s|0,n[s+980>>2]|0}function bA(s,l){s=s|0,l=l|0;var c=0;c=s+4|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function kA(s){return s=s|0,n[s+4>>2]|0}function up(s,l){s=s|0,l=l|0;var c=0;c=s+8|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ng(s){return s=s|0,n[s+8>>2]|0}function gu(s,l){s=s|0,l=l|0;var c=0;c=s+12|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ig(s){return s=s|0,n[s+12>>2]|0}function du(s,l){s=s|0,l=l|0;var c=0;c=s+16|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function uo(s){return s=s|0,n[s+16>>2]|0}function QA(s,l){s=s|0,l=l|0;var c=0;c=s+20|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function mc(s){return s=s|0,n[s+20>>2]|0}function ca(s,l){s=s|0,l=l|0;var c=0;c=s+24|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function sg(s){return s=s|0,n[s+24>>2]|0}function yc(s,l){s=s|0,l=l|0;var c=0;c=s+28|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function Pm(s){return s=s|0,n[s+28>>2]|0}function og(s,l){s=s|0,l=l|0;var c=0;c=s+32|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function $n(s){return s=s|0,n[s+32>>2]|0}function Ap(s,l){s=s|0,l=l|0;var c=0;c=s+36|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ag(s){return s=s|0,n[s+36>>2]|0}function FA(s,l){s=s|0,l=y(l);var c=0;c=s+40|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Hs(s,l){s=s|0,l=y(l);var c=0;c=s+44|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function mu(s,l){s=s|0,l=y(l);var c=0;c=s+48|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Ha(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+52|0,d=s+56|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Gi(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+52|0,c=s+56|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ua(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+52|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function yu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Es(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Ec(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+132+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Cc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function G(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Dt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+60+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function wl(s,l){s=s|0,l=l|0;var c=0;c=s+60+(l<<3)+4|0,(n[c>>2]|0)!=3&&(h[s+60+(l<<3)>>2]=y(Ae),n[c>>2]=3,Le(s))}function bi(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function wc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function ct(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+204+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Eu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+276+(l<<3)|0,l=s+276+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function lg(s,l){return s=s|0,l=l|0,y(h[s+276+(l<<3)>>2])}function mw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+348|0,d=s+352|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function TA(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+348|0,c=s+352|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function fp(s){s=s|0;var l=0;l=s+352|0,(n[l>>2]|0)!=3&&(h[s+348>>2]=y(Ae),n[l>>2]=3,Le(s))}function Br(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+348|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cs(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+356|0,d=s+360|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function cg(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+356|0,c=s+360|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ug(s){s=s|0;var l=0;l=s+360|0,(n[l>>2]|0)!=3&&(h[s+356>>2]=y(Ae),n[l>>2]=3,Le(s))}function Ag(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+356|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function pp(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ic(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ct(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+364|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Sm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function fg(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function pg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+372|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function xm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function hg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+380|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function wu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function yw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function bm(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+388|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Aa(s,l){s=s|0,l=y(l);var c=0;c=s+396|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Bc(s){return s=s|0,y(h[s+396>>2])}function Il(s){return s=s|0,y(h[s+400>>2])}function Iu(s){return s=s|0,y(h[s+404>>2])}function gg(s){return s=s|0,y(h[s+408>>2])}function RA(s){return s=s|0,y(h[s+412>>2])}function hp(s){return s=s|0,y(h[s+416>>2])}function ja(s){return s=s|0,y(h[s+420>>2])}function dg(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+424+(l<<2)>>2])}function gp(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+448+(l<<2)>>2])}function qo(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+472+(l<<2)>>2])}function ws(s,l){s=s|0,l=l|0;var c=0,f=Ze;return c=n[s+4>>2]|0,(c|0)==(n[l+4>>2]|0)?c?(f=y(h[s>>2]),s=y(ne(y(f-y(h[l>>2]))))>2]=0,n[f+4>>2]=0,n[f+8>>2]=0,Oa(f|0,s|0,l|0,0),Ao(s,3,(o[f+11>>0]|0)<0?n[f>>2]|0:f,c),s3e(f),C=c}function Go(s,l,c,f){s=y(s),l=y(l),c=c|0,f=f|0;var d=Ze;s=y(s*l),d=y(kT(s,y(1)));do if(Ii(d,y(0))|0)s=y(s-d);else{if(s=y(s-d),Ii(d,y(1))|0){s=y(s+y(1));break}if(c){s=y(s+y(1));break}f||(d>y(.5)?d=y(1):(f=Ii(d,y(.5))|0,d=y(f?1:0)),s=y(s+d))}while(0);return y(s/l)}function NA(s,l,c,f,d,m,B,k,Q,O,M,q,se){s=s|0,l=y(l),c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,k=y(k),Q=y(Q),O=y(O),M=y(M),q=y(q),se=se|0;var Ge=0,Oe=Ze,Fe=Ze,et=Ze,Xe=Ze,at=Ze,Ue=Ze;return Q>2]),Oe!=y(0))?(et=y(Go(l,Oe,0,0)),Xe=y(Go(f,Oe,0,0)),Fe=y(Go(m,Oe,0,0)),Oe=y(Go(k,Oe,0,0))):(Fe=m,et=l,Oe=k,Xe=f),(d|0)==(s|0)?Ge=Ii(Fe,et)|0:Ge=0,(B|0)==(c|0)?se=Ii(Oe,Xe)|0:se=0,!Ge&&(at=y(l-M),!(dp(s,at,Q)|0))&&!(mp(s,at,d,Q)|0)?Ge=mg(s,at,d,m,Q)|0:Ge=1,!se&&(Ue=y(f-q),!(dp(c,Ue,O)|0))&&!(mp(c,Ue,B,O)|0)?se=mg(c,Ue,B,k,O)|0:se=1,se=Ge&se),se|0}function dp(s,l,c){return s=s|0,l=y(l),c=y(c),(s|0)==1?s=Ii(l,c)|0:s=0,s|0}function mp(s,l,c,f){return s=s|0,l=y(l),c=c|0,f=y(f),(s|0)==2&(c|0)==0?l>=f?s=1:s=Ii(l,f)|0:s=0,s|0}function mg(s,l,c,f,d){return s=s|0,l=y(l),c=c|0,f=y(f),d=y(d),(s|0)==2&(c|0)==2&f>l?d<=l?s=1:s=Ii(l,d)|0:s=0,s|0}function fa(s,l,c,f,d,m,B,k,Q,O,M){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,O=O|0,M=M|0;var q=0,se=0,Ge=0,Oe=0,Fe=Ze,et=Ze,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=Ze,go=Ze,mo=Ze,yo=0,ya=0;ir=C,C=C+160|0,Xt=ir+152|0,or=ir+120|0,Or=ir+104|0,Ue=ir+72|0,Oe=ir+56|0,Lt=ir+8|0,at=ir,qe=(n[2279]|0)+1|0,n[2279]=qe,Pr=s+984|0,(o[Pr>>0]|0)!=0&&(n[s+512>>2]|0)!=(n[2278]|0)?Xe=4:(n[s+516>>2]|0)==(f|0)?Nr=0:Xe=4,(Xe|0)==4&&(n[s+520>>2]=0,n[s+924>>2]=-1,n[s+928>>2]=-1,h[s+932>>2]=y(-1),h[s+936>>2]=y(-1),Nr=1);e:do if(n[s+964>>2]|0)if(Fe=y(ln(s,2,B)),et=y(ln(s,0,B)),q=s+916|0,mo=y(h[q>>2]),go=y(h[s+920>>2]),bn=y(h[s+932>>2]),NA(d,l,m,c,n[s+924>>2]|0,mo,n[s+928>>2]|0,go,bn,y(h[s+936>>2]),Fe,et,M)|0)Xe=22;else if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(q=s+524+(se*24|0)|0,bn=y(h[q>>2]),go=y(h[s+524+(se*24|0)+4>>2]),mo=y(h[s+524+(se*24|0)+16>>2]),NA(d,l,m,c,n[s+524+(se*24|0)+8>>2]|0,bn,n[s+524+(se*24|0)+12>>2]|0,go,mo,y(h[s+524+(se*24|0)+20>>2]),Fe,et,M)|0){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}else{if(Q){if(q=s+916|0,!(Ii(y(h[q>>2]),l)|0)){Xe=21;break}if(!(Ii(y(h[s+920>>2]),c)|0)){Xe=21;break}if((n[s+924>>2]|0)!=(d|0)){Xe=21;break}q=(n[s+928>>2]|0)==(m|0)?q:0,Xe=22;break}if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(q=s+524+(se*24|0)|0,Ii(y(h[q>>2]),l)|0&&Ii(y(h[s+524+(se*24|0)+4>>2]),c)|0&&(n[s+524+(se*24|0)+8>>2]|0)==(d|0)&&(n[s+524+(se*24|0)+12>>2]|0)==(m|0)){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}}while(0);do if((Xe|0)==21)o[11697]|0?(q=0,Xe=28):(q=0,Xe=31);else if((Xe|0)==22){if(se=(o[11697]|0)!=0,!((q|0)!=0&(Nr^1)))if(se){Xe=28;break}else{Xe=31;break}Oe=q+16|0,n[s+908>>2]=n[Oe>>2],Ge=q+20|0,n[s+912>>2]=n[Ge>>2],(o[11698]|0)==0|se^1||(n[at>>2]=LA(qe)|0,n[at+4>>2]=qe,Ao(s,4,2972,at),se=n[s+972>>2]|0,se|0&&ef[se&127](s),d=qa(d,Q)|0,m=qa(m,Q)|0,ya=+y(h[Oe>>2]),yo=+y(h[Ge>>2]),n[Lt>>2]=d,n[Lt+4>>2]=m,E[Lt+8>>3]=+l,E[Lt+16>>3]=+c,E[Lt+24>>3]=ya,E[Lt+32>>3]=yo,n[Lt+40>>2]=O,Ao(s,4,2989,Lt))}while(0);return(Xe|0)==28&&(se=LA(qe)|0,n[Oe>>2]=se,n[Oe+4>>2]=qe,n[Oe+8>>2]=Nr?3047:11699,Ao(s,4,3038,Oe),se=n[s+972>>2]|0,se|0&&ef[se&127](s),Lt=qa(d,Q)|0,Xe=qa(m,Q)|0,n[Ue>>2]=Lt,n[Ue+4>>2]=Xe,E[Ue+8>>3]=+l,E[Ue+16>>3]=+c,n[Ue+24>>2]=O,Ao(s,4,3049,Ue),Xe=31),(Xe|0)==31&&(si(s,l,c,f,d,m,B,k,Q,M),o[11697]|0&&(se=n[2279]|0,Lt=LA(se)|0,n[Or>>2]=Lt,n[Or+4>>2]=se,n[Or+8>>2]=Nr?3047:11699,Ao(s,4,3083,Or),se=n[s+972>>2]|0,se|0&&ef[se&127](s),Lt=qa(d,Q)|0,Or=qa(m,Q)|0,yo=+y(h[s+908>>2]),ya=+y(h[s+912>>2]),n[or>>2]=Lt,n[or+4>>2]=Or,E[or+8>>3]=yo,E[or+16>>3]=ya,n[or+24>>2]=O,Ao(s,4,3092,or)),n[s+516>>2]=f,q||(se=s+520|0,q=n[se>>2]|0,(q|0)==16&&(o[11697]|0&&Ao(s,4,3124,Xt),n[se>>2]=0,q=0),Q?q=s+916|0:(n[se>>2]=q+1,q=s+524+(q*24|0)|0),h[q>>2]=l,h[q+4>>2]=c,n[q+8>>2]=d,n[q+12>>2]=m,n[q+16>>2]=n[s+908>>2],n[q+20>>2]=n[s+912>>2],q=0)),Q&&(n[s+416>>2]=n[s+908>>2],n[s+420>>2]=n[s+912>>2],o[s+985>>0]=1,o[Pr>>0]=0),n[2279]=(n[2279]|0)+-1,n[s+512>>2]=n[2278],C=ir,Nr|(q|0)==0|0}function ln(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(V(s,l,c)),y(f+y(re(s,l,c)))}function Ao(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=C,C=C+16|0,d=m,n[d>>2]=f,s?f=n[s+976>>2]|0:f=0,Eg(f,s,l,c,d),C=m}function LA(s){return s=s|0,(s>>>0>60?3201:3201+(60-s)|0)|0}function qa(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+32|0,c=d+12|0,f=d,n[c>>2]=n[254],n[c+4>>2]=n[255],n[c+8>>2]=n[256],n[f>>2]=n[257],n[f+4>>2]=n[258],n[f+8>>2]=n[259],(s|0)>2?s=11699:s=n[(l?f:c)+(s<<2)>>2]|0,C=d,s|0}function si(s,l,c,f,d,m,B,k,Q,O){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,O=O|0;var M=0,q=0,se=0,Ge=0,Oe=Ze,Fe=Ze,et=Ze,Xe=Ze,at=Ze,Ue=Ze,qe=Ze,Lt=0,Or=0,or=0,Xt=Ze,Pr=Ze,Nr=0,ir=Ze,bn=0,go=0,mo=0,yo=0,ya=0,Qp=0,Fp=0,xl=0,Tp=0,Fu=0,Tu=0,Rp=0,Np=0,Lp=0,Xr=0,bl=0,Mp=0,bc=0,Op=Ze,Up=Ze,Ru=Ze,Nu=Ze,kc=Ze,qs=0,za=0,Wo=0,kl=0,rf=0,nf=Ze,Lu=Ze,sf=Ze,of=Ze,Gs=Ze,vs=Ze,Ql=0,Tn=Ze,af=Ze,Eo=Ze,Qc=Ze,Co=Ze,Fc=Ze,lf=0,cf=0,Tc=Ze,Ys=Ze,Fl=0,uf=0,Af=0,ff=0,br=Ze,Jn=0,Ds=0,wo=0,Ws=0,Tr=0,ur=0,Tl=0,Jt=Ze,pf=0,li=0;Tl=C,C=C+16|0,qs=Tl+12|0,za=Tl+8|0,Wo=Tl+4|0,kl=Tl,Un(s,(d|0)==0|(_t(l)|0)^1,3326),Un(s,(m|0)==0|(_t(c)|0)^1,3406),Ds=mt(s,f)|0,n[s+496>>2]=Ds,Tr=fr(2,Ds)|0,ur=fr(0,Ds)|0,h[s+440>>2]=y(V(s,Tr,B)),h[s+444>>2]=y(re(s,Tr,B)),h[s+428>>2]=y(V(s,ur,B)),h[s+436>>2]=y(re(s,ur,B)),h[s+464>>2]=y(Cr(s,Tr)),h[s+468>>2]=y(yn(s,Tr)),h[s+452>>2]=y(Cr(s,ur)),h[s+460>>2]=y(yn(s,ur)),h[s+488>>2]=y(oi(s,Tr,B)),h[s+492>>2]=y(Mi(s,Tr,B)),h[s+476>>2]=y(oi(s,ur,B)),h[s+484>>2]=y(Mi(s,ur,B));do if(n[s+964>>2]|0)wg(s,l,c,d,m,B,k);else{if(wo=s+948|0,Ws=(n[s+952>>2]|0)-(n[wo>>2]|0)>>2,!Ws){Gv(s,l,c,d,m,B,k);break}if(!Q&&Yv(s,l,c,d,m,B,k)|0)break;$(s),bl=s+508|0,o[bl>>0]=0,Tr=fr(n[s+4>>2]|0,Ds)|0,ur=Cw(Tr,Ds)|0,Jn=he(Tr)|0,Mp=n[s+8>>2]|0,uf=s+28|0,bc=(n[uf>>2]|0)!=0,Co=Jn?B:k,Tc=Jn?k:B,Op=y(Ep(s,Tr,B)),Up=y(ww(s,Tr,B)),Oe=y(Ep(s,ur,B)),Fc=y(En(s,Tr,B)),Ys=y(En(s,ur,B)),or=Jn?d:m,Fl=Jn?m:d,br=Jn?Fc:Ys,at=Jn?Ys:Fc,Qc=y(ln(s,2,B)),Xe=y(ln(s,0,B)),Fe=y(y(Gr(s+364|0,B))-br),et=y(y(Gr(s+380|0,B))-br),Ue=y(y(Gr(s+372|0,k))-at),qe=y(y(Gr(s+388|0,k))-at),Ru=Jn?Fe:Ue,Nu=Jn?et:qe,Qc=y(l-Qc),l=y(Qc-br),_t(l)|0?br=l:br=y(_n(y(Tg(l,et)),Fe)),af=y(c-Xe),l=y(af-at),_t(l)|0?Eo=l:Eo=y(_n(y(Tg(l,qe)),Ue)),Fe=Jn?br:Eo,Tn=Jn?Eo:br;e:do if((or|0)==1)for(f=0,q=0;;){if(M=gs(s,q)|0,!f)y(rs(M))>y(0)&&y(js(M))>y(0)?f=M:f=0;else if(Tm(M)|0){Ge=0;break e}if(q=q+1|0,q>>>0>=Ws>>>0){Ge=f;break}}else Ge=0;while(0);Lt=Ge+500|0,Or=Ge+504|0,f=0,M=0,l=y(0),se=0;do{if(q=n[(n[wo>>2]|0)+(se<<2)>>2]|0,(n[q+36>>2]|0)==1)Bu(q),o[q+985>>0]=1,o[q+984>>0]=0;else{Bl(q),Q&&yp(q,mt(q,Ds)|0,Fe,Tn,br);do if((n[q+24>>2]|0)!=1)if((q|0)==(Ge|0)){n[Lt>>2]=n[2278],h[Or>>2]=y(0);break}else{Rm(s,q,br,d,Eo,br,Eo,m,Ds,O);break}else M|0&&(n[M+960>>2]=q),n[q+960>>2]=0,M=q,f=(f|0)==0?q:f;while(0);vs=y(h[q+504>>2]),l=y(l+y(vs+y(ln(q,Tr,br))))}se=se+1|0}while((se|0)!=(Ws|0));for(mo=l>Fe,Ql=bc&((or|0)==2&mo)?1:or,bn=(Fl|0)==1,ya=bn&(Q^1),Qp=(Ql|0)==1,Fp=(Ql|0)==2,xl=976+(Tr<<2)|0,Tp=(Fl|2|0)==2,Lp=bn&(bc^1),Fu=1040+(ur<<2)|0,Tu=1040+(Tr<<2)|0,Rp=976+(ur<<2)|0,Np=(Fl|0)!=1,mo=bc&((or|0)!=0&mo),go=s+976|0,bn=bn^1,l=Fe,Nr=0,yo=0,vs=y(0),kc=y(0);;){e:do if(Nr>>>0>>0)for(Or=n[wo>>2]|0,se=0,qe=y(0),Ue=y(0),et=y(0),Fe=y(0),q=0,M=0,Ge=Nr;;){if(Lt=n[Or+(Ge<<2)>>2]|0,(n[Lt+36>>2]|0)!=1&&(n[Lt+940>>2]=yo,(n[Lt+24>>2]|0)!=1)){if(Xe=y(ln(Lt,Tr,br)),Xr=n[xl>>2]|0,c=y(Gr(Lt+380+(Xr<<3)|0,Co)),at=y(h[Lt+504>>2]),c=y(Tg(c,at)),c=y(_n(y(Gr(Lt+364+(Xr<<3)|0,Co)),c)),bc&(se|0)!=0&y(Xe+y(Ue+c))>l){m=se,Xe=qe,or=Ge;break e}Xe=y(Xe+c),c=y(Ue+Xe),Xe=y(qe+Xe),Tm(Lt)|0&&(et=y(et+y(rs(Lt))),Fe=y(Fe-y(at*y(js(Lt))))),M|0&&(n[M+960>>2]=Lt),n[Lt+960>>2]=0,se=se+1|0,M=Lt,q=(q|0)==0?Lt:q}else Xe=qe,c=Ue;if(Ge=Ge+1|0,Ge>>>0>>0)qe=Xe,Ue=c;else{m=se,or=Ge;break}}else m=0,Xe=y(0),et=y(0),Fe=y(0),q=0,or=Nr;while(0);Xr=et>y(0)&ety(0)&FeNu&((_t(Nu)|0)^1))l=Nu,Xr=51;else if(o[(n[go>>2]|0)+3>>0]|0)Xr=51;else{if(Xt!=y(0)&&y(rs(s))!=y(0)){Xr=53;break}l=Xe,Xr=53}while(0);if((Xr|0)==51&&(Xr=0,_t(l)|0?Xr=53:(Pr=y(l-Xe),ir=l)),(Xr|0)==53&&(Xr=0,Xe>2]|0,Ge=Pry(0),Ue=y(Pr/Xt),et=y(0),Xe=y(0),l=y(0),M=q;do c=y(Gr(M+380+(se<<3)|0,Co)),Fe=y(Gr(M+364+(se<<3)|0,Co)),Fe=y(Tg(c,y(_n(Fe,y(h[M+504>>2]))))),Ge?(c=y(Fe*y(js(M))),c!=y(-0)&&(Jt=y(Fe-y(at*c)),nf=y(Bi(M,Tr,Jt,ir,br)),Jt!=nf)&&(et=y(et-y(nf-Fe)),l=y(l+c))):Lt&&(Lu=y(rs(M)),Lu!=y(0))&&(Jt=y(Fe+y(Ue*Lu)),sf=y(Bi(M,Tr,Jt,ir,br)),Jt!=sf)&&(et=y(et-y(sf-Fe)),Xe=y(Xe-Lu)),M=n[M+960>>2]|0;while((M|0)!=0);if(l=y(qe+l),Fe=y(Pr+et),rf)l=y(0);else{at=y(Xt+Xe),Ge=n[xl>>2]|0,Lt=Fey(0),at=y(Fe/at),l=y(0);do{Jt=y(Gr(q+380+(Ge<<3)|0,Co)),et=y(Gr(q+364+(Ge<<3)|0,Co)),et=y(Tg(Jt,y(_n(et,y(h[q+504>>2]))))),Lt?(Jt=y(et*y(js(q))),Fe=y(-Jt),Jt!=y(-0)?(Jt=y(Ue*Fe),Fe=y(Bi(q,Tr,y(et+(Or?Fe:Jt)),ir,br))):Fe=et):se&&(of=y(rs(q)),of!=y(0))?Fe=y(Bi(q,Tr,y(et+y(at*of)),ir,br)):Fe=et,l=y(l-y(Fe-et)),Xe=y(ln(q,Tr,br)),c=y(ln(q,ur,br)),Fe=y(Fe+Xe),h[za>>2]=Fe,n[kl>>2]=1,et=y(h[q+396>>2]);e:do if(_t(et)|0){M=_t(Tn)|0;do if(!M){if(mo|(ts(q,ur,Tn)|0|bn)||(ha(s,q)|0)!=4||(n[(vl(q,ur)|0)+4>>2]|0)==3||(n[(Pc(q,ur)|0)+4>>2]|0)==3)break;h[qs>>2]=Tn,n[Wo>>2]=1;break e}while(0);if(ts(q,ur,Tn)|0){M=n[q+992+(n[Rp>>2]<<2)>>2]|0,Jt=y(c+y(Gr(M,Tn))),h[qs>>2]=Jt,M=Np&(n[M+4>>2]|0)==2,n[Wo>>2]=((_t(Jt)|0|M)^1)&1;break}else{h[qs>>2]=Tn,n[Wo>>2]=M?0:2;break}}else Jt=y(Fe-Xe),Xt=y(Jt/et),Jt=y(et*Jt),n[Wo>>2]=1,h[qs>>2]=y(c+(Jn?Xt:Jt));while(0);yr(q,Tr,ir,br,kl,za),yr(q,ur,Tn,br,Wo,qs);do if(!(ts(q,ur,Tn)|0)&&(ha(s,q)|0)==4){if((n[(vl(q,ur)|0)+4>>2]|0)==3){M=0;break}M=(n[(Pc(q,ur)|0)+4>>2]|0)!=3}else M=0;while(0);Jt=y(h[za>>2]),Xt=y(h[qs>>2]),pf=n[kl>>2]|0,li=n[Wo>>2]|0,fa(q,Jn?Jt:Xt,Jn?Xt:Jt,Ds,Jn?pf:li,Jn?li:pf,br,Eo,Q&(M^1),3488,O)|0,o[bl>>0]=o[bl>>0]|o[q+508>>0],q=n[q+960>>2]|0}while((q|0)!=0)}}else l=y(0);if(l=y(Pr+l),li=l>0]=li|u[bl>>0],Fp&l>y(0)?(M=n[xl>>2]|0,(n[s+364+(M<<3)+4>>2]|0)!=0&&(Gs=y(Gr(s+364+(M<<3)|0,Co)),Gs>=y(0))?Fe=y(_n(y(0),y(Gs-y(ir-l)))):Fe=y(0)):Fe=l,Lt=Nr>>>0>>0,Lt){Ge=n[wo>>2]|0,se=Nr,M=0;do q=n[Ge+(se<<2)>>2]|0,n[q+24>>2]|0||(M=((n[(vl(q,Tr)|0)+4>>2]|0)==3&1)+M|0,M=M+((n[(Pc(q,Tr)|0)+4>>2]|0)==3&1)|0),se=se+1|0;while((se|0)!=(or|0));M?(Xe=y(0),c=y(0)):Xr=101}else Xr=101;e:do if((Xr|0)==101)switch(Xr=0,Mp|0){case 1:{M=0,Xe=y(Fe*y(.5)),c=y(0);break e}case 2:{M=0,Xe=Fe,c=y(0);break e}case 3:{if(m>>>0<=1){M=0,Xe=y(0),c=y(0);break e}c=y((m+-1|0)>>>0),M=0,Xe=y(0),c=y(y(_n(Fe,y(0)))/c);break e}case 5:{c=y(Fe/y((m+1|0)>>>0)),M=0,Xe=c;break e}case 4:{c=y(Fe/y(m>>>0)),M=0,Xe=y(c*y(.5));break e}default:{M=0,Xe=y(0),c=y(0);break e}}while(0);if(l=y(Op+Xe),Lt){et=y(Fe/y(M|0)),se=n[wo>>2]|0,q=Nr,Fe=y(0);do{M=n[se+(q<<2)>>2]|0;e:do if((n[M+36>>2]|0)!=1){switch(n[M+24>>2]|0){case 1:{if(gi(M,Tr)|0){if(!Q)break e;Jt=y(Mr(M,Tr,ir)),Jt=y(Jt+y(Cr(s,Tr))),Jt=y(Jt+y(V(M,Tr,br))),h[M+400+(n[Tu>>2]<<2)>>2]=Jt;break e}break}case 0:if(li=(n[(vl(M,Tr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,Q&&(li=M+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(l+y(h[li>>2]))),li=(n[(Pc(M,Tr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,ya){Jt=y(c+y(ln(M,Tr,br))),Fe=Tn,l=y(l+y(Jt+y(h[M+504>>2])));break e}else{l=y(l+y(c+y(ns(M,Tr,br)))),Fe=y(_n(Fe,y(ns(M,ur,br))));break e}default:}Q&&(Jt=y(Xe+y(Cr(s,Tr))),li=M+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2])))}while(0);q=q+1|0}while((q|0)!=(or|0))}else Fe=y(0);if(c=y(Up+l),Tp?Xe=y(y(Bi(s,ur,y(Ys+Fe),Tc,B))-Ys):Xe=Tn,et=y(y(Bi(s,ur,y(Ys+(Lp?Tn:Fe)),Tc,B))-Ys),Lt&Q){q=Nr;do{se=n[(n[wo>>2]|0)+(q<<2)>>2]|0;do if((n[se+36>>2]|0)!=1){if((n[se+24>>2]|0)==1){if(gi(se,ur)|0){if(Jt=y(Mr(se,ur,Tn)),Jt=y(Jt+y(Cr(s,ur))),Jt=y(Jt+y(V(se,ur,br))),M=n[Fu>>2]|0,h[se+400+(M<<2)>>2]=Jt,!(_t(Jt)|0))break}else M=n[Fu>>2]|0;Jt=y(Cr(s,ur)),h[se+400+(M<<2)>>2]=y(Jt+y(V(se,ur,br)));break}M=ha(s,se)|0;do if((M|0)==4){if((n[(vl(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if((n[(Pc(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if(ts(se,ur,Tn)|0){l=Oe;break}pf=n[se+908+(n[xl>>2]<<2)>>2]|0,n[qs>>2]=pf,l=y(h[se+396>>2]),li=_t(l)|0,Fe=(n[v>>2]=pf,y(h[v>>2])),li?l=et:(Pr=y(ln(se,ur,br)),Jt=y(Fe/l),l=y(l*Fe),l=y(Pr+(Jn?Jt:l))),h[za>>2]=l,h[qs>>2]=y(y(ln(se,Tr,br))+Fe),n[Wo>>2]=1,n[kl>>2]=1,yr(se,Tr,ir,br,Wo,qs),yr(se,ur,Tn,br,kl,za),l=y(h[qs>>2]),Pr=y(h[za>>2]),Jt=Jn?l:Pr,l=Jn?Pr:l,li=((_t(Jt)|0)^1)&1,fa(se,Jt,l,Ds,li,((_t(l)|0)^1)&1,br,Eo,1,3493,O)|0,l=Oe}else Xr=139;while(0);e:do if((Xr|0)==139){Xr=0,l=y(Xe-y(ns(se,ur,br)));do if((n[(vl(se,ur)|0)+4>>2]|0)==3){if((n[(Pc(se,ur)|0)+4>>2]|0)!=3)break;l=y(Oe+y(_n(y(0),y(l*y(.5)))));break e}while(0);if((n[(Pc(se,ur)|0)+4>>2]|0)==3){l=Oe;break}if((n[(vl(se,ur)|0)+4>>2]|0)==3){l=y(Oe+y(_n(y(0),l)));break}switch(M|0){case 1:{l=Oe;break e}case 2:{l=y(Oe+y(l*y(.5)));break e}default:{l=y(Oe+l);break e}}}while(0);Jt=y(vs+l),li=se+400+(n[Fu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2]))}while(0);q=q+1|0}while((q|0)!=(or|0))}if(vs=y(vs+et),kc=y(_n(kc,c)),m=yo+1|0,or>>>0>=Ws>>>0)break;l=ir,Nr=or,yo=m}do if(Q){if(M=m>>>0>1,!M&&!(Yi(s)|0))break;if(!(_t(Tn)|0)){l=y(Tn-vs);e:do switch(n[s+12>>2]|0){case 3:{Oe=y(Oe+l),Ue=y(0);break}case 2:{Oe=y(Oe+y(l*y(.5))),Ue=y(0);break}case 4:{Tn>vs?Ue=y(l/y(m>>>0)):Ue=y(0);break}case 7:if(Tn>vs){Oe=y(Oe+y(l/y(m<<1>>>0))),Ue=y(l/y(m>>>0)),Ue=M?Ue:y(0);break e}else{Oe=y(Oe+y(l*y(.5))),Ue=y(0);break e}case 6:{Ue=y(l/y(yo>>>0)),Ue=Tn>vs&M?Ue:y(0);break}default:Ue=y(0)}while(0);if(m|0)for(Lt=1040+(ur<<2)|0,Or=976+(ur<<2)|0,Ge=0,q=0;;){e:do if(q>>>0>>0)for(Fe=y(0),et=y(0),l=y(0),se=q;;){M=n[(n[wo>>2]|0)+(se<<2)>>2]|0;do if((n[M+36>>2]|0)!=1&&(n[M+24>>2]|0)==0){if((n[M+940>>2]|0)!=(Ge|0))break e;if(Nm(M,ur)|0&&(Jt=y(h[M+908+(n[Or>>2]<<2)>>2]),l=y(_n(l,y(Jt+y(ln(M,ur,br)))))),(ha(s,M)|0)!=5)break;Gs=y(Ya(M)),Gs=y(Gs+y(V(M,0,br))),Jt=y(h[M+912>>2]),Jt=y(y(Jt+y(ln(M,0,br)))-Gs),Gs=y(_n(et,Gs)),Jt=y(_n(Fe,Jt)),Fe=Jt,et=Gs,l=y(_n(l,y(Gs+Jt)))}while(0);if(M=se+1|0,M>>>0>>0)se=M;else{se=M;break}}else et=y(0),l=y(0),se=q;while(0);if(at=y(Ue+l),c=Oe,Oe=y(Oe+at),q>>>0>>0){Xe=y(c+et),M=q;do{q=n[(n[wo>>2]|0)+(M<<2)>>2]|0;e:do if((n[q+36>>2]|0)!=1&&(n[q+24>>2]|0)==0)switch(ha(s,q)|0){case 1:{Jt=y(c+y(V(q,ur,br))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 3:{Jt=y(y(Oe-y(re(q,ur,br)))-y(h[q+908+(n[Or>>2]<<2)>>2])),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 2:{Jt=y(c+y(y(at-y(h[q+908+(n[Or>>2]<<2)>>2]))*y(.5))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 4:{if(Jt=y(c+y(V(q,ur,br))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt,ts(q,ur,Tn)|0||(Jn?(Fe=y(h[q+908>>2]),l=y(Fe+y(ln(q,Tr,br))),et=at):(et=y(h[q+912>>2]),et=y(et+y(ln(q,ur,br))),l=at,Fe=y(h[q+908>>2])),Ii(l,Fe)|0&&Ii(et,y(h[q+912>>2]))|0))break e;fa(q,l,et,Ds,1,1,br,Eo,1,3501,O)|0;break e}case 5:{h[q+404>>2]=y(y(Xe-y(Ya(q)))+y(Mr(q,0,Tn)));break e}default:break e}while(0);M=M+1|0}while((M|0)!=(se|0))}if(Ge=Ge+1|0,(Ge|0)==(m|0))break;q=se}}}while(0);if(h[s+908>>2]=y(Bi(s,2,Qc,B,B)),h[s+912>>2]=y(Bi(s,0,af,k,B)),(Ql|0)!=0&&(lf=n[s+32>>2]|0,cf=(Ql|0)==2,!(cf&(lf|0)!=2))?cf&(lf|0)==2&&(l=y(Fc+ir),l=y(_n(y(Tg(l,y(MA(s,Tr,kc,Co)))),Fc)),Xr=198):(l=y(Bi(s,Tr,kc,Co,B)),Xr=198),(Xr|0)==198&&(h[s+908+(n[976+(Tr<<2)>>2]<<2)>>2]=l),(Fl|0)!=0&&(Af=n[s+32>>2]|0,ff=(Fl|0)==2,!(ff&(Af|0)!=2))?ff&(Af|0)==2&&(l=y(Ys+Tn),l=y(_n(y(Tg(l,y(MA(s,ur,y(Ys+vs),Tc)))),Ys)),Xr=204):(l=y(Bi(s,ur,y(Ys+vs),Tc,B)),Xr=204),(Xr|0)==204&&(h[s+908+(n[976+(ur<<2)>>2]<<2)>>2]=l),Q){if((n[uf>>2]|0)==2){q=976+(ur<<2)|0,se=1040+(ur<<2)|0,M=0;do Ge=gs(s,M)|0,n[Ge+24>>2]|0||(pf=n[q>>2]|0,Jt=y(h[s+908+(pf<<2)>>2]),li=Ge+400+(n[se>>2]<<2)|0,Jt=y(Jt-y(h[li>>2])),h[li>>2]=y(Jt-y(h[Ge+908+(pf<<2)>>2]))),M=M+1|0;while((M|0)!=(Ws|0))}if(f|0){M=Jn?Ql:d;do Lm(s,f,br,M,Eo,Ds,O),f=n[f+960>>2]|0;while((f|0)!=0)}if(M=(Tr|2|0)==3,q=(ur|2|0)==3,M|q){f=0;do se=n[(n[wo>>2]|0)+(f<<2)>>2]|0,(n[se+36>>2]|0)!=1&&(M&&Cp(s,se,Tr),q&&Cp(s,se,ur)),f=f+1|0;while((f|0)!=(Ws|0))}}}while(0);C=Tl}function pa(s,l){s=s|0,l=y(l);var c=0;oa(s,l>=y(0),3147),c=l==y(0),h[s+4>>2]=c?y(0):l}function vc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=f|0;var d=Ze,m=Ze,B=0,k=0,Q=0;n[2278]=(n[2278]|0)+1,Bl(s),ts(s,2,l)|0?(d=y(Gr(n[s+992>>2]|0,l)),Q=1,d=y(d+y(ln(s,2,l)))):(d=y(Gr(s+380|0,l)),d>=y(0)?Q=2:(Q=((_t(l)|0)^1)&1,d=l)),ts(s,0,c)|0?(m=y(Gr(n[s+996>>2]|0,c)),k=1,m=y(m+y(ln(s,0,l)))):(m=y(Gr(s+388|0,c)),m>=y(0)?k=2:(k=((_t(c)|0)^1)&1,m=c)),B=s+976|0,fa(s,d,m,f,Q,k,l,c,1,3189,n[B>>2]|0)|0&&(yp(s,n[s+496>>2]|0,l,c,l),Dc(s,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),o[11696]|0)&&km(s,7)}function Bl(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;k=C,C=C+32|0,B=k+24|0,m=k+16|0,f=k+8|0,d=k,c=0;do l=s+380+(c<<3)|0,(n[s+380+(c<<3)+4>>2]|0)!=0&&(Q=l,O=n[Q+4>>2]|0,M=f,n[M>>2]=n[Q>>2],n[M+4>>2]=O,M=s+364+(c<<3)|0,O=n[M+4>>2]|0,Q=d,n[Q>>2]=n[M>>2],n[Q+4>>2]=O,n[m>>2]=n[f>>2],n[m+4>>2]=n[f+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],ws(m,B)|0)||(l=s+348+(c<<3)|0),n[s+992+(c<<2)>>2]=l,c=c+1|0;while((c|0)!=2);C=k}function ts(s,l,c){s=s|0,l=l|0,c=y(c);var f=0;switch(s=n[s+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[s+4>>2]|0){case 0:case 3:{s=0;break}case 1:{y(h[s>>2])>2])>2]|0){case 2:{l=y(y(y(h[s>>2])*l)/y(100));break}case 1:{l=y(h[s>>2]);break}default:l=y(Ae)}return y(l)}function yp(s,l,c,f,d){s=s|0,l=l|0,c=y(c),f=y(f),d=y(d);var m=0,B=Ze;l=n[s+944>>2]|0?l:1,m=fr(n[s+4>>2]|0,l)|0,l=Cw(m,l)|0,c=y(Mm(s,m,c)),f=y(Mm(s,l,f)),B=y(c+y(V(s,m,d))),h[s+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,c=y(c+y(re(s,m,d))),h[s+400+(n[1e3+(m<<2)>>2]<<2)>>2]=c,c=y(f+y(V(s,l,d))),h[s+400+(n[1040+(l<<2)>>2]<<2)>>2]=c,d=y(f+y(re(s,l,d))),h[s+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function Dc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=y(f);var d=0,m=0,B=Ze,k=Ze,Q=0,O=0,M=Ze,q=0,se=Ze,Ge=Ze,Oe=Ze,Fe=Ze;if(l!=y(0)&&(d=s+400|0,Fe=y(h[d>>2]),m=s+404|0,Oe=y(h[m>>2]),q=s+416|0,Ge=y(h[q>>2]),O=s+420|0,B=y(h[O>>2]),se=y(Fe+c),M=y(Oe+f),f=y(se+Ge),k=y(M+B),Q=(n[s+988>>2]|0)==1,h[d>>2]=y(Go(Fe,l,0,Q)),h[m>>2]=y(Go(Oe,l,0,Q)),c=y(kT(y(Ge*l),y(1))),Ii(c,y(0))|0?m=0:m=(Ii(c,y(1))|0)^1,c=y(kT(y(B*l),y(1))),Ii(c,y(0))|0?d=0:d=(Ii(c,y(1))|0)^1,Fe=y(Go(f,l,Q&m,Q&(m^1))),h[q>>2]=y(Fe-y(Go(se,l,0,Q))),Fe=y(Go(k,l,Q&d,Q&(d^1))),h[O>>2]=y(Fe-y(Go(M,l,0,Q))),m=(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2,m|0)){d=0;do Dc(gs(s,d)|0,l,se,M),d=d+1|0;while((d|0)!=(m|0))}}function Ew(s,l,c,f,d){switch(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,c|0){case 5:case 0:{s=a7(n[489]|0,f,d)|0;break}default:s=t3e(f,d)|0}return s|0}function yg(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;d=C,C=C+16|0,m=d,n[m>>2]=f,Eg(s,0,l,c,m),C=d}function Eg(s,l,c,f,d){if(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,s=s|0?s:956,x7[n[s+8>>2]&1](s,l,c,f,d)|0,(c|0)==5)Tt();else return}function Ga(s,l,c){s=s|0,l=l|0,c=c|0,o[s+l>>0]=c&1}function Fm(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(Cg(s,f),Qt(s,n[l>>2]|0,n[c>>2]|0,f))}function Cg(s,l){s=s|0,l=l|0;var c=0;if((N(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function Qt(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N(s){return s=s|0,1073741823}function V(s,l,c){return s=s|0,l=l|0,c=y(c),he(l)|0&&(n[s+96>>2]|0)!=0?s=s+92|0:s=Fn(s+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function re(s,l,c){return s=s|0,l=l|0,c=y(c),he(l)|0&&(n[s+104>>2]|0)!=0?s=s+100|0:s=Fn(s+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function he(s){return s=s|0,(s|1|0)==3|0}function ze(s,l){return s=s|0,l=y(l),(n[s+4>>2]|0)==3?l=y(0):l=y(Gr(s,l)),y(l)}function mt(s,l){return s=s|0,l=l|0,s=n[s>>2]|0,((s|0)==0?(l|0)>1?l:1:s)|0}function fr(s,l){s=s|0,l=l|0;var c=0;e:do if((l|0)==2){switch(s|0){case 2:{s=3;break e}case 3:break;default:{c=4;break e}}s=2}else c=4;while(0);return s|0}function Cr(s,l){s=s|0,l=l|0;var c=Ze;return he(l)|0&&(n[s+312>>2]|0)!=0&&(c=y(h[s+308>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function yn(s,l){s=s|0,l=l|0;var c=Ze;return he(l)|0&&(n[s+320>>2]|0)!=0&&(c=y(h[s+316>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return he(l)|0&&(n[s+240>>2]|0)!=0&&(f=y(Gr(s+236|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1040+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Mi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return he(l)|0&&(n[s+248>>2]|0)!=0&&(f=y(Gr(s+244|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1e3+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function wg(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,O=Ze,M=Ze,q=Ze,se=Ze,Ge=0,Oe=0,Fe=0;Fe=C,C=C+16|0,Ge=Fe,Oe=s+964|0,Un(s,(n[Oe>>2]|0)!=0,3519),k=y(En(s,2,l)),Q=y(En(s,0,l)),O=y(ln(s,2,l)),M=y(ln(s,0,l)),_t(l)|0?q=l:q=y(_n(y(0),y(y(l-O)-k))),_t(c)|0?se=c:se=y(_n(y(0),y(y(c-M)-Q))),(f|0)==1&(d|0)==1?(h[s+908>>2]=y(Bi(s,2,y(l-O),m,m)),l=y(Bi(s,0,y(c-M),B,m))):(b7[n[Oe>>2]&1](Ge,s,q,f,se,d),q=y(k+y(h[Ge>>2])),se=y(l-O),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?q:se,m,m)),se=y(Q+y(h[Ge+4>>2])),l=y(c-M),l=y(Bi(s,0,(d|2|0)==2?se:l,B,m))),h[s+912>>2]=l,C=Fe}function Gv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,O=Ze,M=Ze;O=y(En(s,2,m)),k=y(En(s,0,m)),M=y(ln(s,2,m)),Q=y(ln(s,0,m)),l=y(l-M),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?O:l,m,m)),c=y(c-Q),h[s+912>>2]=y(Bi(s,0,(d|2|0)==2?k:c,B,m))}function Yv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=0,Q=Ze,O=Ze;return k=(f|0)==2,!(l<=y(0)&k)&&!(c<=y(0)&(d|0)==2)&&!((f|0)==1&(d|0)==1)?s=0:(Q=y(ln(s,0,m)),O=y(ln(s,2,m)),k=l>2]=y(Bi(s,2,k?y(0):l,m,m)),l=y(c-Q),k=c>2]=y(Bi(s,0,k?y(0):l,B,m)),s=1),s|0}function Cw(s,l){return s=s|0,l=l|0,OA(s)|0?s=fr(2,l)|0:s=0,s|0}function Ep(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(oi(s,l,c)),y(c+y(Cr(s,l)))}function ww(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(Mi(s,l,c)),y(c+y(yn(s,l)))}function En(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(Ep(s,l,c)),y(f+y(ww(s,l,c)))}function Tm(s){return s=s|0,n[s+24>>2]|0?s=0:y(rs(s))!=y(0)?s=1:s=y(js(s))!=y(0),s|0}function rs(s){s=s|0;var l=Ze;if(n[s+944>>2]|0){if(l=y(h[s+44>>2]),_t(l)|0)return l=y(h[s+40>>2]),s=l>y(0)&((_t(l)|0)^1),y(s?l:y(0))}else l=y(0);return y(l)}function js(s){s=s|0;var l=Ze,c=0,f=Ze;do if(n[s+944>>2]|0){if(l=y(h[s+48>>2]),_t(l)|0){if(c=o[(n[s+976>>2]|0)+2>>0]|0,c<<24>>24==0&&(f=y(h[s+40>>2]),f>24?y(1):y(0)}}else l=y(0);while(0);return y(l)}function Bu(s){s=s|0;var l=0,c=0;if(zm(s+400|0,0,540)|0,o[s+985>>0]=1,$(s),c=wi(s)|0,c|0){l=s+948|0,s=0;do Bu(n[(n[l>>2]|0)+(s<<2)>>2]|0),s=s+1|0;while((s|0)!=(c|0))}}function Rm(s,l,c,f,d,m,B,k,Q,O){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=y(m),B=y(B),k=k|0,Q=Q|0,O=O|0;var M=0,q=Ze,se=0,Ge=0,Oe=Ze,Fe=Ze,et=0,Xe=Ze,at=0,Ue=Ze,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0,go=0;bn=C,C=C+16|0,Or=bn+12|0,or=bn+8|0,Xt=bn+4|0,Pr=bn,ir=fr(n[s+4>>2]|0,Q)|0,qe=he(ir)|0,q=y(Gr(Iw(l)|0,qe?m:B)),Lt=ts(l,2,m)|0,Nr=ts(l,0,B)|0;do if(!(_t(q)|0)&&!(_t(qe?c:d)|0)){if(M=l+504|0,!(_t(y(h[M>>2]))|0)&&(!(Bw(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[M>>2]=y(_n(q,y(En(l,ir,m))))}else se=7;while(0);do if((se|0)==7){if(at=qe^1,!(at|Lt^1)){B=y(Gr(n[l+992>>2]|0,m)),h[l+504>>2]=y(_n(B,y(En(l,2,m))));break}if(!(qe|Nr^1)){B=y(Gr(n[l+996>>2]|0,B)),h[l+504>>2]=y(_n(B,y(En(l,0,m))));break}h[Or>>2]=y(Ae),h[or>>2]=y(Ae),n[Xt>>2]=0,n[Pr>>2]=0,Xe=y(ln(l,2,m)),Ue=y(ln(l,0,m)),Lt?(Oe=y(Xe+y(Gr(n[l+992>>2]|0,m))),h[Or>>2]=Oe,n[Xt>>2]=1,Ge=1):(Ge=0,Oe=y(Ae)),Nr?(q=y(Ue+y(Gr(n[l+996>>2]|0,B))),h[or>>2]=q,n[Pr>>2]=1,M=1):(M=0,q=y(Ae)),se=n[s+32>>2]|0,qe&(se|0)==2?se=2:_t(Oe)|0&&!(_t(c)|0)&&(h[Or>>2]=c,n[Xt>>2]=2,Ge=2,Oe=c),!((se|0)==2&at)&&_t(q)|0&&!(_t(d)|0)&&(h[or>>2]=d,n[Pr>>2]=2,M=2,q=d),Fe=y(h[l+396>>2]),et=_t(Fe)|0;do if(et)se=Ge;else{if((Ge|0)==1&at){h[or>>2]=y(y(Oe-Xe)/Fe),n[Pr>>2]=1,M=1,se=1;break}qe&(M|0)==1?(h[Or>>2]=y(Fe*y(q-Ue)),n[Xt>>2]=1,M=1,se=1):se=Ge}while(0);go=_t(c)|0,Ge=(ha(s,l)|0)!=4,!(qe|Lt|((f|0)!=1|go)|(Ge|(se|0)==1))&&(h[Or>>2]=c,n[Xt>>2]=1,!et)&&(h[or>>2]=y(y(c-Xe)/Fe),n[Pr>>2]=1,M=1),!(Nr|at|((k|0)!=1|(_t(d)|0))|(Ge|(M|0)==1))&&(h[or>>2]=d,n[Pr>>2]=1,!et)&&(h[Or>>2]=y(Fe*y(d-Ue)),n[Xt>>2]=1),yr(l,2,m,m,Xt,Or),yr(l,0,B,m,Pr,or),c=y(h[Or>>2]),d=y(h[or>>2]),fa(l,c,d,Q,n[Xt>>2]|0,n[Pr>>2]|0,m,B,0,3565,O)|0,B=y(h[l+908+(n[976+(ir<<2)>>2]<<2)>>2]),h[l+504>>2]=y(_n(B,y(En(l,ir,m))))}while(0);n[l+500>>2]=n[2278],C=bn}function Bi(s,l,c,f,d){return s=s|0,l=l|0,c=y(c),f=y(f),d=y(d),f=y(MA(s,l,c,f)),y(_n(f,y(En(s,l,d))))}function ha(s,l){return s=s|0,l=l|0,l=l+20|0,l=n[((n[l>>2]|0)==0?s+16|0:l)>>2]|0,(l|0)==5&&OA(n[s+4>>2]|0)|0&&(l=1),l|0}function vl(s,l){return s=s|0,l=l|0,he(l)|0&&(n[s+96>>2]|0)!=0?l=4:l=n[1040+(l<<2)>>2]|0,s+60+(l<<3)|0}function Pc(s,l){return s=s|0,l=l|0,he(l)|0&&(n[s+104>>2]|0)!=0?l=5:l=n[1e3+(l<<2)>>2]|0,s+60+(l<<3)|0}function yr(s,l,c,f,d,m){switch(s=s|0,l=l|0,c=y(c),f=y(f),d=d|0,m=m|0,c=y(Gr(s+380+(n[976+(l<<2)>>2]<<3)|0,c)),c=y(c+y(ln(s,l,f))),n[d>>2]|0){case 2:case 1:{d=_t(c)|0,f=y(h[m>>2]),h[m>>2]=d|f>2]=2,h[m>>2]=c);break}default:}}function gi(s,l){return s=s|0,l=l|0,s=s+132|0,he(l)|0&&(n[(Fn(s,4,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Mr(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,he(l)|0&&(f=Fn(s,4,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1040+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function ns(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),f=y(f+y(V(s,l,c))),y(f+y(re(s,l,c)))}function Yi(s){s=s|0;var l=0,c=0,f=0;e:do if(OA(n[s+4>>2]|0)|0)l=0;else if((n[s+16>>2]|0)!=5)if(c=wi(s)|0,!c)l=0;else for(l=0;;){if(f=gs(s,l)|0,(n[f+24>>2]|0)==0&&(n[f+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=c>>>0){l=0;break}}else l=1;while(0);return l|0}function Nm(s,l){s=s|0,l=l|0;var c=Ze;return c=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),c>=y(0)&((_t(c)|0)^1)|0}function Ya(s){s=s|0;var l=Ze,c=0,f=0,d=0,m=0,B=0,k=0,Q=Ze;if(c=n[s+968>>2]|0,c)Q=y(h[s+908>>2]),l=y(h[s+912>>2]),l=y(v7[c&0](s,Q,l)),Un(s,(_t(l)|0)^1,3573);else{m=wi(s)|0;do if(m|0){for(c=0,d=0;;){if(f=gs(s,d)|0,n[f+940>>2]|0){B=8;break}if((n[f+24>>2]|0)!=1)if(k=(ha(s,f)|0)==5,k){c=f;break}else c=(c|0)==0?f:c;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!c)break;return l=y(Ya(c)),y(l+y(h[c+404>>2]))}while(0);l=y(h[s+912>>2])}return y(l)}function MA(s,l,c,f){s=s|0,l=l|0,c=y(c),f=y(f);var d=Ze,m=0;return OA(l)|0?(l=1,m=3):he(l)|0?(l=0,m=3):(f=y(Ae),d=y(Ae)),(m|0)==3&&(d=y(Gr(s+364+(l<<3)|0,f)),f=y(Gr(s+380+(l<<3)|0,f))),m=f=y(0)&((_t(f)|0)^1)),c=m?f:c,m=d>=y(0)&((_t(d)|0)^1)&c>2]|0,m)|0,Oe=Cw(et,m)|0,Fe=he(et)|0,q=y(ln(l,2,c)),se=y(ln(l,0,c)),ts(l,2,c)|0?k=y(q+y(Gr(n[l+992>>2]|0,c))):gi(l,2)|0&&sr(l,2)|0?(k=y(h[s+908>>2]),Q=y(Cr(s,2)),Q=y(k-y(Q+y(yn(s,2)))),k=y(Mr(l,2,c)),k=y(Bi(l,2,y(Q-y(k+y(vu(l,2,c)))),c,c))):k=y(Ae),ts(l,0,d)|0?Q=y(se+y(Gr(n[l+996>>2]|0,d))):gi(l,0)|0&&sr(l,0)|0?(Q=y(h[s+912>>2]),at=y(Cr(s,0)),at=y(Q-y(at+y(yn(s,0)))),Q=y(Mr(l,0,d)),Q=y(Bi(l,0,y(at-y(Q+y(vu(l,0,d)))),d,c))):Q=y(Ae),O=_t(k)|0,M=_t(Q)|0;do if(O^M&&(Ge=y(h[l+396>>2]),!(_t(Ge)|0)))if(O){k=y(q+y(y(Q-se)*Ge));break}else{at=y(se+y(y(k-q)/Ge)),Q=M?at:Q;break}while(0);M=_t(k)|0,O=_t(Q)|0,M|O&&(Ue=(M^1)&1,f=c>y(0)&((f|0)!=0&M),k=Fe?k:f?c:k,fa(l,k,Q,m,Fe?Ue:f?2:Ue,M&(O^1)&1,k,Q,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(ln(l,2,c))),Q=y(h[l+912>>2]),Q=y(Q+y(ln(l,0,c)))),fa(l,k,Q,m,1,1,k,Q,1,3635,B)|0,sr(l,et)|0&&!(gi(l,et)|0)?(Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),at=y(at-y(yn(s,et))),at=y(at-y(re(l,et,c))),at=y(at-y(vu(l,et,Fe?c:d))),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at):Xe=21;do if((Xe|0)==21){if(!(gi(l,et)|0)&&(n[s+8>>2]|0)==1){Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(y(at-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at;break}!(gi(l,et)|0)&&(n[s+8>>2]|0)==2&&(Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at)}while(0);sr(l,Oe)|0&&!(gi(l,Oe)|0)?(Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),at=y(at-y(yn(s,Oe))),at=y(at-y(re(l,Oe,c))),at=y(at-y(vu(l,Oe,Fe?d:c))),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at):Xe=30;do if((Xe|0)==30&&!(gi(l,Oe)|0)){if((ha(s,l)|0)==2){Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(y(at-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at;break}Ue=(ha(s,l)|0)==3,Ue^(n[s+28>>2]|0)==2&&(Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at)}while(0)}function Cp(s,l,c){s=s|0,l=l|0,c=c|0;var f=Ze,d=0;d=n[976+(c<<2)>>2]|0,f=y(h[l+908+(d<<2)>>2]),f=y(y(h[s+908+(d<<2)>>2])-f),f=y(f-y(h[l+400+(n[1040+(c<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(c<<2)>>2]<<2)>>2]=f}function OA(s){return s=s|0,(s|1|0)==1|0}function Iw(s){s=s|0;var l=Ze;switch(n[s+56>>2]|0){case 0:case 3:{l=y(h[s+40>>2]),l>y(0)&((_t(l)|0)^1)?s=o[(n[s+976>>2]|0)+2>>0]|0?1056:992:s=1056;break}default:s=s+52|0}return s|0}function Bw(s,l){return s=s|0,l=l|0,(o[s+l>>0]|0)!=0|0}function sr(s,l){return s=s|0,l=l|0,s=s+132|0,he(l)|0&&(n[(Fn(s,5,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function vu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,he(l)|0&&(f=Fn(s,5,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1e3+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function Mm(s,l,c){return s=s|0,l=l|0,c=y(c),gi(s,l)|0?c=y(Mr(s,l,c)):c=y(-y(vu(s,l,c))),y(c)}function Du(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function wp(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function Ig(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function UA(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function _A(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;if(B=s+4|0,k=n[B>>2]|0,d=k-f|0,m=d>>2,s=l+(m<<2)|0,s>>>0>>0){f=k;do n[f>>2]=n[s>>2],s=s+4|0,f=(n[B>>2]|0)+4|0,n[B>>2]=f;while(s>>>0>>0)}m|0&&Mw(k+(0-m<<2)|0,l|0,d|0)|0}function Bg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return k=l+4|0,Q=n[k>>2]|0,d=n[s>>2]|0,B=c,m=B-d|0,f=Q+(0-(m>>2)<<2)|0,n[k>>2]=f,(m|0)>0&&Dr(f|0,d|0,m|0)|0,d=s+4|0,m=l+8|0,f=(n[d>>2]|0)-B|0,(f|0)>0&&(Dr(n[m>>2]|0,c|0,f|0)|0,n[m>>2]=(n[m>>2]|0)+(f>>>2<<2)),B=n[s>>2]|0,n[s>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=s+8|0,c=l+12|0,s=n[B>>2]|0,n[B>>2]=n[c>>2],n[c>>2]=s,n[l>>2]=n[k>>2],Q|0}function vw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[c>>2]|0,(B|0)!=(m|0)){d=s+8|0,c=((m+-4-B|0)>>>2)+1|0,s=B,f=n[d>>2]|0;do n[f>>2]=n[s>>2],f=(n[d>>2]|0)+4|0,n[d>>2]=f,s=s+4|0;while((s|0)!=(m|0));n[l>>2]=B+(c<<2)}}function Om(){dc()}function ga(){var s=0;return s=Vt(4)|0,HA(s),s|0}function HA(s){s=s|0,n[s>>2]=ys()|0}function Sc(s){s=s|0,s|0&&(vg(s),gt(s))}function vg(s){s=s|0,tt(n[s>>2]|0)}function Um(s,l,c){s=s|0,l=l|0,c=c|0,Ga(n[s>>2]|0,l,c)}function fo(s,l){s=s|0,l=y(l),pa(n[s>>2]|0,l)}function Wv(s,l){return s=s|0,l=l|0,Bw(n[s>>2]|0,l)|0}function Dw(){var s=0;return s=Vt(8)|0,Vv(s,0),s|0}function Vv(s,l){s=s|0,l=l|0,l?l=Ci(n[l>>2]|0)|0:l=co()|0,n[s>>2]=l,n[s+4>>2]=0,xi(l,s)}function pF(s){s=s|0;var l=0;return l=Vt(8)|0,Vv(l,s),l|0}function Kv(s){s=s|0,s|0&&(Pu(s),gt(s))}function Pu(s){s=s|0;var l=0;la(n[s>>2]|0),l=s+4|0,s=n[l>>2]|0,n[l>>2]=0,s|0&&(jA(s),gt(s))}function jA(s){s=s|0,qA(s)}function qA(s){s=s|0,s=n[s>>2]|0,s|0&&PA(s|0)}function Pw(s){return s=s|0,jo(s)|0}function _m(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),_s(n[s>>2]|0)}function hF(s,l){s=s|0,l=l|0,Zr(n[s>>2]|0,n[l>>2]|0)}function gF(s,l){s=s|0,l=l|0,ca(n[s>>2]|0,l)}function Jv(s,l,c){s=s|0,l=l|0,c=+c,yu(n[s>>2]|0,l,y(c))}function zv(s,l,c){s=s|0,l=l|0,c=+c,Es(n[s>>2]|0,l,y(c))}function Sw(s,l){s=s|0,l=l|0,gu(n[s>>2]|0,l)}function Su(s,l){s=s|0,l=l|0,du(n[s>>2]|0,l)}function dF(s,l){s=s|0,l=l|0,QA(n[s>>2]|0,l)}function mF(s,l){s=s|0,l=l|0,bA(n[s>>2]|0,l)}function Ip(s,l){s=s|0,l=l|0,yc(n[s>>2]|0,l)}function yF(s,l){s=s|0,l=l|0,up(n[s>>2]|0,l)}function Xv(s,l,c){s=s|0,l=l|0,c=+c,Cc(n[s>>2]|0,l,y(c))}function GA(s,l,c){s=s|0,l=l|0,c=+c,G(n[s>>2]|0,l,y(c))}function EF(s,l){s=s|0,l=l|0,wl(n[s>>2]|0,l)}function CF(s,l){s=s|0,l=l|0,og(n[s>>2]|0,l)}function Zv(s,l){s=s|0,l=l|0,Ap(n[s>>2]|0,l)}function xw(s,l){s=s|0,l=+l,FA(n[s>>2]|0,y(l))}function bw(s,l){s=s|0,l=+l,Ha(n[s>>2]|0,y(l))}function wF(s,l){s=s|0,l=+l,Gi(n[s>>2]|0,y(l))}function IF(s,l){s=s|0,l=+l,Hs(n[s>>2]|0,y(l))}function Dl(s,l){s=s|0,l=+l,mu(n[s>>2]|0,y(l))}function kw(s,l){s=s|0,l=+l,mw(n[s>>2]|0,y(l))}function BF(s,l){s=s|0,l=+l,TA(n[s>>2]|0,y(l))}function YA(s){s=s|0,fp(n[s>>2]|0)}function Hm(s,l){s=s|0,l=+l,Cs(n[s>>2]|0,y(l))}function xu(s,l){s=s|0,l=+l,cg(n[s>>2]|0,y(l))}function Qw(s){s=s|0,ug(n[s>>2]|0)}function Fw(s,l){s=s|0,l=+l,pp(n[s>>2]|0,y(l))}function vF(s,l){s=s|0,l=+l,Ic(n[s>>2]|0,y(l))}function $v(s,l){s=s|0,l=+l,Sm(n[s>>2]|0,y(l))}function WA(s,l){s=s|0,l=+l,fg(n[s>>2]|0,y(l))}function eD(s,l){s=s|0,l=+l,Cu(n[s>>2]|0,y(l))}function jm(s,l){s=s|0,l=+l,xm(n[s>>2]|0,y(l))}function tD(s,l){s=s|0,l=+l,wu(n[s>>2]|0,y(l))}function rD(s,l){s=s|0,l=+l,yw(n[s>>2]|0,y(l))}function qm(s,l){s=s|0,l=+l,Aa(n[s>>2]|0,y(l))}function nD(s,l,c){s=s|0,l=l|0,c=+c,Eu(n[s>>2]|0,l,y(c))}function DF(s,l,c){s=s|0,l=l|0,c=+c,bi(n[s>>2]|0,l,y(c))}function P(s,l,c){s=s|0,l=l|0,c=+c,wc(n[s>>2]|0,l,y(c))}function D(s){return s=s|0,sg(n[s>>2]|0)|0}function R(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Ec(d,n[l>>2]|0,c),j(s,d),C=f}function j(s,l){s=s|0,l=l|0,Y(s,n[l+4>>2]|0,+y(h[l>>2]))}function Y(s,l,c){s=s|0,l=l|0,c=+c,n[s>>2]=l,E[s+8>>3]=c}function fe(s){return s=s|0,ig(n[s>>2]|0)|0}function ve(s){return s=s|0,uo(n[s>>2]|0)|0}function vt(s){return s=s|0,mc(n[s>>2]|0)|0}function wt(s){return s=s|0,kA(n[s>>2]|0)|0}function bt(s){return s=s|0,Pm(n[s>>2]|0)|0}function _r(s){return s=s|0,ng(n[s>>2]|0)|0}function is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Dt(d,n[l>>2]|0,c),j(s,d),C=f}function di(s){return s=s|0,$n(n[s>>2]|0)|0}function po(s){return s=s|0,ag(n[s>>2]|0)|0}function VA(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,ua(f,n[l>>2]|0),j(s,f),C=c}function Yo(s){return s=s|0,+ +y(qi(n[s>>2]|0))}function rt(s){return s=s|0,+ +y(es(n[s>>2]|0))}function Ke(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Br(f,n[l>>2]|0),j(s,f),C=c}function At(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ag(f,n[l>>2]|0),j(s,f),C=c}function Wt(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ct(f,n[l>>2]|0),j(s,f),C=c}function vr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,pg(f,n[l>>2]|0),j(s,f),C=c}function Sn(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,hg(f,n[l>>2]|0),j(s,f),C=c}function Fr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,bm(f,n[l>>2]|0),j(s,f),C=c}function xn(s){return s=s|0,+ +y(Bc(n[s>>2]|0))}function ai(s,l){return s=s|0,l=l|0,+ +y(lg(n[s>>2]|0,l))}function en(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,ct(d,n[l>>2]|0,c),j(s,d),C=f}function ho(s,l,c){s=s|0,l=l|0,c=c|0,nr(n[s>>2]|0,n[l>>2]|0,c)}function PF(s,l){s=s|0,l=l|0,ms(n[s>>2]|0,n[l>>2]|0)}function sve(s){return s=s|0,wi(n[s>>2]|0)|0}function ove(s){return s=s|0,s=pt(n[s>>2]|0)|0,s?s=Pw(s)|0:s=0,s|0}function ave(s,l){return s=s|0,l=l|0,s=gs(n[s>>2]|0,l)|0,s?s=Pw(s)|0:s=0,s|0}function lve(s,l){s=s|0,l=l|0;var c=0,f=0;f=Vt(4)|0,$G(f,l),c=s+4|0,l=n[c>>2]|0,n[c>>2]=f,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,1)}function $G(s,l){s=s|0,l=l|0,Cve(s,l)}function cve(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,uve(k,jo(l)|0,+c,f,+d,m),h[s>>2]=y(+E[k>>3]),h[s+4>>2]=y(+E[k+8>>3]),C=B}function uve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0,k=0,Q=0,O=0,M=0;B=C,C=C+32|0,M=B+8|0,O=B+20|0,Q=B,k=B+16|0,E[M>>3]=c,n[O>>2]=f,E[Q>>3]=d,n[k>>2]=m,Ave(s,n[l+4>>2]|0,M,O,Q,k),C=B}function Ave(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,Va(k),l=da(l)|0,fve(s,l,+E[c>>3],n[f>>2]|0,+E[d>>3],n[m>>2]|0),Ka(k),C=B}function da(s){return s=s|0,n[s>>2]|0}function fve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0;B=Pl(pve()|0)|0,c=+KA(c),f=SF(f)|0,d=+KA(d),hve(s,hi(0,B|0,l|0,+c,f|0,+d,SF(m)|0)|0)}function pve(){var s=0;return o[7608]|0||(yve(9120),s=7608,n[s>>2]=1,n[s+4>>2]=0),9120}function Pl(s){return s=s|0,n[s+8>>2]|0}function KA(s){return s=+s,+ +xF(s)}function SF(s){return s=s|0,t5(s)|0}function hve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=l,f&1?(gve(c,0),ii(f|0,c|0)|0,dve(s,c),mve(c)):(n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]),C=d}function gve(s,l){s=s|0,l=l|0,e5(s,l),n[s+8>>2]=0,o[s+24>>0]=0}function dve(s,l){s=s|0,l=l|0,l=l+8|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]}function mve(s){s=s|0,o[s+24>>0]=0}function e5(s,l){s=s|0,l=l|0,n[s>>2]=l}function t5(s){return s=s|0,s|0}function xF(s){return s=+s,+s}function yve(s){s=s|0,Sl(s,Eve()|0,4)}function Eve(){return 1064}function Sl(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=cp(l|0,c+1|0)|0}function Cve(s,l){s=s|0,l=l|0,l=n[l>>2]|0,n[s>>2]=l,yl(l|0)}function wve(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,0)}function Ive(s){s=s|0,Rt(n[s>>2]|0)}function Bve(s){return s=s|0,er(n[s>>2]|0)|0}function vve(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,vc(n[s>>2]|0,y(l),y(c),f)}function Dve(s){return s=s|0,+ +y(Il(n[s>>2]|0))}function Pve(s){return s=s|0,+ +y(gg(n[s>>2]|0))}function Sve(s){return s=s|0,+ +y(Iu(n[s>>2]|0))}function xve(s){return s=s|0,+ +y(RA(n[s>>2]|0))}function bve(s){return s=s|0,+ +y(hp(n[s>>2]|0))}function kve(s){return s=s|0,+ +y(ja(n[s>>2]|0))}function Qve(s,l){s=s|0,l=l|0,E[s>>3]=+y(Il(n[l>>2]|0)),E[s+8>>3]=+y(gg(n[l>>2]|0)),E[s+16>>3]=+y(Iu(n[l>>2]|0)),E[s+24>>3]=+y(RA(n[l>>2]|0)),E[s+32>>3]=+y(hp(n[l>>2]|0)),E[s+40>>3]=+y(ja(n[l>>2]|0))}function Fve(s,l){return s=s|0,l=l|0,+ +y(dg(n[s>>2]|0,l))}function Tve(s,l){return s=s|0,l=l|0,+ +y(gp(n[s>>2]|0,l))}function Rve(s,l){return s=s|0,l=l|0,+ +y(qo(n[s>>2]|0,l))}function Nve(){return Pn()|0}function Lve(){Mve(),Ove(),Uve(),_ve(),Hve(),jve()}function Mve(){HNe(11713,4938,1)}function Ove(){oNe(10448)}function Uve(){HRe(10408)}function _ve(){uRe(10324)}function Hve(){yFe(10096)}function jve(){qve(9132)}function qve(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0,go=0,mo=0,yo=0,ya=0,Qp=0,Fp=0,xl=0,Tp=0,Fu=0,Tu=0,Rp=0,Np=0,Lp=0,Xr=0,bl=0,Mp=0,bc=0,Op=0,Up=0,Ru=0,Nu=0,kc=0,qs=0,za=0,Wo=0,kl=0,rf=0,nf=0,Lu=0,sf=0,of=0,Gs=0,vs=0,Ql=0,Tn=0,af=0,Eo=0,Qc=0,Co=0,Fc=0,lf=0,cf=0,Tc=0,Ys=0,Fl=0,uf=0,Af=0,ff=0,br=0,Jn=0,Ds=0,wo=0,Ws=0,Tr=0,ur=0,Tl=0;l=C,C=C+672|0,c=l+656|0,Tl=l+648|0,ur=l+640|0,Tr=l+632|0,Ws=l+624|0,wo=l+616|0,Ds=l+608|0,Jn=l+600|0,br=l+592|0,ff=l+584|0,Af=l+576|0,uf=l+568|0,Fl=l+560|0,Ys=l+552|0,Tc=l+544|0,cf=l+536|0,lf=l+528|0,Fc=l+520|0,Co=l+512|0,Qc=l+504|0,Eo=l+496|0,af=l+488|0,Tn=l+480|0,Ql=l+472|0,vs=l+464|0,Gs=l+456|0,of=l+448|0,sf=l+440|0,Lu=l+432|0,nf=l+424|0,rf=l+416|0,kl=l+408|0,Wo=l+400|0,za=l+392|0,qs=l+384|0,kc=l+376|0,Nu=l+368|0,Ru=l+360|0,Up=l+352|0,Op=l+344|0,bc=l+336|0,Mp=l+328|0,bl=l+320|0,Xr=l+312|0,Lp=l+304|0,Np=l+296|0,Rp=l+288|0,Tu=l+280|0,Fu=l+272|0,Tp=l+264|0,xl=l+256|0,Fp=l+248|0,Qp=l+240|0,ya=l+232|0,yo=l+224|0,mo=l+216|0,go=l+208|0,bn=l+200|0,ir=l+192|0,Nr=l+184|0,Pr=l+176|0,Xt=l+168|0,or=l+160|0,Or=l+152|0,Lt=l+144|0,qe=l+136|0,Ue=l+128|0,at=l+120|0,Xe=l+112|0,et=l+104|0,Fe=l+96|0,Oe=l+88|0,Ge=l+80|0,se=l+72|0,q=l+64|0,M=l+56|0,O=l+48|0,Q=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,f=l,Gve(s,3646),Yve(s,3651,2)|0,Wve(s,3665,2)|0,Vve(s,3682,18)|0,n[Tl>>2]=19,n[Tl+4>>2]=0,n[c>>2]=n[Tl>>2],n[c+4>>2]=n[Tl+4>>2],Tw(s,3690,c)|0,n[ur>>2]=1,n[ur+4>>2]=0,n[c>>2]=n[ur>>2],n[c+4>>2]=n[ur+4>>2],Kve(s,3696,c)|0,n[Tr>>2]=2,n[Tr+4>>2]=0,n[c>>2]=n[Tr>>2],n[c+4>>2]=n[Tr+4>>2],bu(s,3706,c)|0,n[Ws>>2]=1,n[Ws+4>>2]=0,n[c>>2]=n[Ws>>2],n[c+4>>2]=n[Ws+4>>2],Dg(s,3722,c)|0,n[wo>>2]=2,n[wo+4>>2]=0,n[c>>2]=n[wo>>2],n[c+4>>2]=n[wo+4>>2],Dg(s,3734,c)|0,n[Ds>>2]=3,n[Ds+4>>2]=0,n[c>>2]=n[Ds>>2],n[c+4>>2]=n[Ds+4>>2],bu(s,3753,c)|0,n[Jn>>2]=4,n[Jn+4>>2]=0,n[c>>2]=n[Jn>>2],n[c+4>>2]=n[Jn+4>>2],bu(s,3769,c)|0,n[br>>2]=5,n[br+4>>2]=0,n[c>>2]=n[br>>2],n[c+4>>2]=n[br+4>>2],bu(s,3783,c)|0,n[ff>>2]=6,n[ff+4>>2]=0,n[c>>2]=n[ff>>2],n[c+4>>2]=n[ff+4>>2],bu(s,3796,c)|0,n[Af>>2]=7,n[Af+4>>2]=0,n[c>>2]=n[Af>>2],n[c+4>>2]=n[Af+4>>2],bu(s,3813,c)|0,n[uf>>2]=8,n[uf+4>>2]=0,n[c>>2]=n[uf>>2],n[c+4>>2]=n[uf+4>>2],bu(s,3825,c)|0,n[Fl>>2]=3,n[Fl+4>>2]=0,n[c>>2]=n[Fl>>2],n[c+4>>2]=n[Fl+4>>2],Dg(s,3843,c)|0,n[Ys>>2]=4,n[Ys+4>>2]=0,n[c>>2]=n[Ys>>2],n[c+4>>2]=n[Ys+4>>2],Dg(s,3853,c)|0,n[Tc>>2]=9,n[Tc+4>>2]=0,n[c>>2]=n[Tc>>2],n[c+4>>2]=n[Tc+4>>2],bu(s,3870,c)|0,n[cf>>2]=10,n[cf+4>>2]=0,n[c>>2]=n[cf>>2],n[c+4>>2]=n[cf+4>>2],bu(s,3884,c)|0,n[lf>>2]=11,n[lf+4>>2]=0,n[c>>2]=n[lf>>2],n[c+4>>2]=n[lf+4>>2],bu(s,3896,c)|0,n[Fc>>2]=1,n[Fc+4>>2]=0,n[c>>2]=n[Fc>>2],n[c+4>>2]=n[Fc+4>>2],Is(s,3907,c)|0,n[Co>>2]=2,n[Co+4>>2]=0,n[c>>2]=n[Co>>2],n[c+4>>2]=n[Co+4>>2],Is(s,3915,c)|0,n[Qc>>2]=3,n[Qc+4>>2]=0,n[c>>2]=n[Qc>>2],n[c+4>>2]=n[Qc+4>>2],Is(s,3928,c)|0,n[Eo>>2]=4,n[Eo+4>>2]=0,n[c>>2]=n[Eo>>2],n[c+4>>2]=n[Eo+4>>2],Is(s,3948,c)|0,n[af>>2]=5,n[af+4>>2]=0,n[c>>2]=n[af>>2],n[c+4>>2]=n[af+4>>2],Is(s,3960,c)|0,n[Tn>>2]=6,n[Tn+4>>2]=0,n[c>>2]=n[Tn>>2],n[c+4>>2]=n[Tn+4>>2],Is(s,3974,c)|0,n[Ql>>2]=7,n[Ql+4>>2]=0,n[c>>2]=n[Ql>>2],n[c+4>>2]=n[Ql+4>>2],Is(s,3983,c)|0,n[vs>>2]=20,n[vs+4>>2]=0,n[c>>2]=n[vs>>2],n[c+4>>2]=n[vs+4>>2],Tw(s,3999,c)|0,n[Gs>>2]=8,n[Gs+4>>2]=0,n[c>>2]=n[Gs>>2],n[c+4>>2]=n[Gs+4>>2],Is(s,4012,c)|0,n[of>>2]=9,n[of+4>>2]=0,n[c>>2]=n[of>>2],n[c+4>>2]=n[of+4>>2],Is(s,4022,c)|0,n[sf>>2]=21,n[sf+4>>2]=0,n[c>>2]=n[sf>>2],n[c+4>>2]=n[sf+4>>2],Tw(s,4039,c)|0,n[Lu>>2]=10,n[Lu+4>>2]=0,n[c>>2]=n[Lu>>2],n[c+4>>2]=n[Lu+4>>2],Is(s,4053,c)|0,n[nf>>2]=11,n[nf+4>>2]=0,n[c>>2]=n[nf>>2],n[c+4>>2]=n[nf+4>>2],Is(s,4065,c)|0,n[rf>>2]=12,n[rf+4>>2]=0,n[c>>2]=n[rf>>2],n[c+4>>2]=n[rf+4>>2],Is(s,4084,c)|0,n[kl>>2]=13,n[kl+4>>2]=0,n[c>>2]=n[kl>>2],n[c+4>>2]=n[kl+4>>2],Is(s,4097,c)|0,n[Wo>>2]=14,n[Wo+4>>2]=0,n[c>>2]=n[Wo>>2],n[c+4>>2]=n[Wo+4>>2],Is(s,4117,c)|0,n[za>>2]=15,n[za+4>>2]=0,n[c>>2]=n[za>>2],n[c+4>>2]=n[za+4>>2],Is(s,4129,c)|0,n[qs>>2]=16,n[qs+4>>2]=0,n[c>>2]=n[qs>>2],n[c+4>>2]=n[qs+4>>2],Is(s,4148,c)|0,n[kc>>2]=17,n[kc+4>>2]=0,n[c>>2]=n[kc>>2],n[c+4>>2]=n[kc+4>>2],Is(s,4161,c)|0,n[Nu>>2]=18,n[Nu+4>>2]=0,n[c>>2]=n[Nu>>2],n[c+4>>2]=n[Nu+4>>2],Is(s,4181,c)|0,n[Ru>>2]=5,n[Ru+4>>2]=0,n[c>>2]=n[Ru>>2],n[c+4>>2]=n[Ru+4>>2],Dg(s,4196,c)|0,n[Up>>2]=6,n[Up+4>>2]=0,n[c>>2]=n[Up>>2],n[c+4>>2]=n[Up+4>>2],Dg(s,4206,c)|0,n[Op>>2]=7,n[Op+4>>2]=0,n[c>>2]=n[Op>>2],n[c+4>>2]=n[Op+4>>2],Dg(s,4217,c)|0,n[bc>>2]=3,n[bc+4>>2]=0,n[c>>2]=n[bc>>2],n[c+4>>2]=n[bc+4>>2],JA(s,4235,c)|0,n[Mp>>2]=1,n[Mp+4>>2]=0,n[c>>2]=n[Mp>>2],n[c+4>>2]=n[Mp+4>>2],bF(s,4251,c)|0,n[bl>>2]=4,n[bl+4>>2]=0,n[c>>2]=n[bl>>2],n[c+4>>2]=n[bl+4>>2],JA(s,4263,c)|0,n[Xr>>2]=5,n[Xr+4>>2]=0,n[c>>2]=n[Xr>>2],n[c+4>>2]=n[Xr+4>>2],JA(s,4279,c)|0,n[Lp>>2]=6,n[Lp+4>>2]=0,n[c>>2]=n[Lp>>2],n[c+4>>2]=n[Lp+4>>2],JA(s,4293,c)|0,n[Np>>2]=7,n[Np+4>>2]=0,n[c>>2]=n[Np>>2],n[c+4>>2]=n[Np+4>>2],JA(s,4306,c)|0,n[Rp>>2]=8,n[Rp+4>>2]=0,n[c>>2]=n[Rp>>2],n[c+4>>2]=n[Rp+4>>2],JA(s,4323,c)|0,n[Tu>>2]=9,n[Tu+4>>2]=0,n[c>>2]=n[Tu>>2],n[c+4>>2]=n[Tu+4>>2],JA(s,4335,c)|0,n[Fu>>2]=2,n[Fu+4>>2]=0,n[c>>2]=n[Fu>>2],n[c+4>>2]=n[Fu+4>>2],bF(s,4353,c)|0,n[Tp>>2]=12,n[Tp+4>>2]=0,n[c>>2]=n[Tp>>2],n[c+4>>2]=n[Tp+4>>2],Pg(s,4363,c)|0,n[xl>>2]=1,n[xl+4>>2]=0,n[c>>2]=n[xl>>2],n[c+4>>2]=n[xl+4>>2],zA(s,4376,c)|0,n[Fp>>2]=2,n[Fp+4>>2]=0,n[c>>2]=n[Fp>>2],n[c+4>>2]=n[Fp+4>>2],zA(s,4388,c)|0,n[Qp>>2]=13,n[Qp+4>>2]=0,n[c>>2]=n[Qp>>2],n[c+4>>2]=n[Qp+4>>2],Pg(s,4402,c)|0,n[ya>>2]=14,n[ya+4>>2]=0,n[c>>2]=n[ya>>2],n[c+4>>2]=n[ya+4>>2],Pg(s,4411,c)|0,n[yo>>2]=15,n[yo+4>>2]=0,n[c>>2]=n[yo>>2],n[c+4>>2]=n[yo+4>>2],Pg(s,4421,c)|0,n[mo>>2]=16,n[mo+4>>2]=0,n[c>>2]=n[mo>>2],n[c+4>>2]=n[mo+4>>2],Pg(s,4433,c)|0,n[go>>2]=17,n[go+4>>2]=0,n[c>>2]=n[go>>2],n[c+4>>2]=n[go+4>>2],Pg(s,4446,c)|0,n[bn>>2]=18,n[bn+4>>2]=0,n[c>>2]=n[bn>>2],n[c+4>>2]=n[bn+4>>2],Pg(s,4458,c)|0,n[ir>>2]=3,n[ir+4>>2]=0,n[c>>2]=n[ir>>2],n[c+4>>2]=n[ir+4>>2],zA(s,4471,c)|0,n[Nr>>2]=1,n[Nr+4>>2]=0,n[c>>2]=n[Nr>>2],n[c+4>>2]=n[Nr+4>>2],iD(s,4486,c)|0,n[Pr>>2]=10,n[Pr+4>>2]=0,n[c>>2]=n[Pr>>2],n[c+4>>2]=n[Pr+4>>2],JA(s,4496,c)|0,n[Xt>>2]=11,n[Xt+4>>2]=0,n[c>>2]=n[Xt>>2],n[c+4>>2]=n[Xt+4>>2],JA(s,4508,c)|0,n[or>>2]=3,n[or+4>>2]=0,n[c>>2]=n[or>>2],n[c+4>>2]=n[or+4>>2],bF(s,4519,c)|0,n[Or>>2]=4,n[Or+4>>2]=0,n[c>>2]=n[Or>>2],n[c+4>>2]=n[Or+4>>2],Jve(s,4530,c)|0,n[Lt>>2]=19,n[Lt+4>>2]=0,n[c>>2]=n[Lt>>2],n[c+4>>2]=n[Lt+4>>2],zve(s,4542,c)|0,n[qe>>2]=12,n[qe+4>>2]=0,n[c>>2]=n[qe>>2],n[c+4>>2]=n[qe+4>>2],Xve(s,4554,c)|0,n[Ue>>2]=13,n[Ue+4>>2]=0,n[c>>2]=n[Ue>>2],n[c+4>>2]=n[Ue+4>>2],Zve(s,4568,c)|0,n[at>>2]=2,n[at+4>>2]=0,n[c>>2]=n[at>>2],n[c+4>>2]=n[at+4>>2],$ve(s,4578,c)|0,n[Xe>>2]=20,n[Xe+4>>2]=0,n[c>>2]=n[Xe>>2],n[c+4>>2]=n[Xe+4>>2],eDe(s,4587,c)|0,n[et>>2]=22,n[et+4>>2]=0,n[c>>2]=n[et>>2],n[c+4>>2]=n[et+4>>2],Tw(s,4602,c)|0,n[Fe>>2]=23,n[Fe+4>>2]=0,n[c>>2]=n[Fe>>2],n[c+4>>2]=n[Fe+4>>2],Tw(s,4619,c)|0,n[Oe>>2]=14,n[Oe+4>>2]=0,n[c>>2]=n[Oe>>2],n[c+4>>2]=n[Oe+4>>2],tDe(s,4629,c)|0,n[Ge>>2]=1,n[Ge+4>>2]=0,n[c>>2]=n[Ge>>2],n[c+4>>2]=n[Ge+4>>2],rDe(s,4637,c)|0,n[se>>2]=4,n[se+4>>2]=0,n[c>>2]=n[se>>2],n[c+4>>2]=n[se+4>>2],zA(s,4653,c)|0,n[q>>2]=5,n[q+4>>2]=0,n[c>>2]=n[q>>2],n[c+4>>2]=n[q+4>>2],zA(s,4669,c)|0,n[M>>2]=6,n[M+4>>2]=0,n[c>>2]=n[M>>2],n[c+4>>2]=n[M+4>>2],zA(s,4686,c)|0,n[O>>2]=7,n[O+4>>2]=0,n[c>>2]=n[O>>2],n[c+4>>2]=n[O+4>>2],zA(s,4701,c)|0,n[Q>>2]=8,n[Q+4>>2]=0,n[c>>2]=n[Q>>2],n[c+4>>2]=n[Q+4>>2],zA(s,4719,c)|0,n[k>>2]=9,n[k+4>>2]=0,n[c>>2]=n[k>>2],n[c+4>>2]=n[k+4>>2],zA(s,4736,c)|0,n[B>>2]=21,n[B+4>>2]=0,n[c>>2]=n[B>>2],n[c+4>>2]=n[B+4>>2],nDe(s,4754,c)|0,n[m>>2]=2,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],iD(s,4772,c)|0,n[d>>2]=3,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],iD(s,4790,c)|0,n[f>>2]=4,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],iD(s,4808,c)|0,C=l}function Gve(s,l){s=s|0,l=l|0;var c=0;c=cFe()|0,n[s>>2]=c,uFe(c,l),xp(n[s>>2]|0)}function Yve(s,l,c){return s=s|0,l=l|0,c=c|0,JQe(s,pn(l)|0,c,0),s|0}function Wve(s,l,c){return s=s|0,l=l|0,c=c|0,TQe(s,pn(l)|0,c,0),s|0}function Vve(s,l,c){return s=s|0,l=l|0,c=c|0,EQe(s,pn(l)|0,c,0),s|0}function Tw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],nQe(s,l,d),C=f,s|0}function Kve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Oke(s,l,d),C=f,s|0}function bu(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ike(s,l,d),C=f,s|0}function Dg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oke(s,l,d),C=f,s|0}function Is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Gbe(s,l,d),C=f,s|0}function JA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xbe(s,l,d),C=f,s|0}function bF(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],fbe(s,l,d),C=f,s|0}function Pg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Oxe(s,l,d),C=f,s|0}function zA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ixe(s,l,d),C=f,s|0}function iD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oxe(s,l,d),C=f,s|0}function Jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],GSe(s,l,d),C=f,s|0}function zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xSe(s,l,d),C=f,s|0}function Xve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pSe(s,l,d),C=f,s|0}function Zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZPe(s,l,d),C=f,s|0}function $ve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],NPe(s,l,d),C=f,s|0}function eDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],yPe(s,l,d),C=f,s|0}function tDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rPe(s,l,d),C=f,s|0}function rDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ODe(s,l,d),C=f,s|0}function nDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iDe(s,l,d),C=f,s|0}function iDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],sDe(s,c,d,1),C=f}function pn(s){return s=s|0,s|0}function sDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=kF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=oDe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,aDe(m,f)|0,f),C=d}function kF(){var s=0,l=0;if(o[7616]|0||(i5(9136),tr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9136)|0)){s=9136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));i5(9136)}return 9136}function oDe(s){return s=s|0,0}function aDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=kF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],n5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uDe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function hn(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0;B=C,C=C+32|0,se=B+24|0,q=B+20|0,Q=B+16|0,M=B+12|0,O=B+8|0,k=B+4|0,Ge=B,n[q>>2]=l,n[Q>>2]=c,n[M>>2]=f,n[O>>2]=d,n[k>>2]=m,m=s+28|0,n[Ge>>2]=n[m>>2],n[se>>2]=n[Ge>>2],lDe(s+24|0,se,q,M,O,Q,k)|0,n[m>>2]=n[n[m>>2]>>2],C=B}function lDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,s=cDe(l)|0,l=Vt(24)|0,r5(l+4|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[s>>2],n[s>>2]=l,l|0}function cDe(s){return s=s|0,n[s>>2]|0}function r5(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gr(s,l){return s=s|0,l=l|0,l|s|0}function n5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ADe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fDe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],n5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pDe(s,k),hDe(k),C=O;return}}function ADe(s){return s=s|0,357913941}function fDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function i5(s){s=s|0,mDe(s)}function gDe(s){s=s|0,dDe(s+24|0)}function Rr(s){return s=s|0,n[s>>2]|0}function dDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mDe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,3,l,yDe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Vr(){return 9228}function yDe(){return 1140}function EDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=CDe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=wDe(l,f)|0,C=c,l|0}function Kr(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function CDe(s){return s=s|0,(n[(kF()|0)+24>>2]|0)+(s*12|0)|0}function wDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+48|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=IDe(f)|0,C=d,f|0}function IDe(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(s5()|0)|0,f?(FF(l,f),TF(c,l),BDe(s,c),s=RF(l)|0):s=vDe(s)|0,C=d,s|0}function s5(){var s=0;return o[7632]|0||(RDe(9184),tr(25,9184,U|0)|0,s=7632,n[s>>2]=1,n[s+4>>2]=0),9184}function QF(s){return s=s|0,n[s+36>>2]|0}function FF(s,l){s=s|0,l=l|0,n[s>>2]=l,n[s+4>>2]=s,n[s+8>>2]=0}function TF(s,l){s=s|0,l=l|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=0}function BDe(s,l){s=s|0,l=l|0,xDe(l,s,s+8|0,s+16|0,s+24|0,s+32|0,s+40|0)|0}function RF(s){return s=s|0,n[(n[s+4>>2]|0)+8>>2]|0}function vDe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;Q=C,C=C+16|0,c=Q+4|0,f=Q,d=Wa(8)|0,m=d,B=Vt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[s>>2],k=k+4|0,s=s+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Vt(8)|0,B=n[l>>2]|0,n[f>>2]=0,n[c>>2]=n[f>>2],o5(k,B,c),n[d>>2]=k,C=Q,m|0}function o5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1092,n[c+12>>2]=l,n[s+4>>2]=c}function DDe(s){s=s|0,Jm(s),gt(s)}function PDe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function SDe(s){s=s|0,gt(s)}function xDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,m=bDe(n[s>>2]|0,l,c,f,d,m,B)|0,B=s+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function bDe(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0;var k=0,Q=0;return k=C,C=C+16|0,Q=k,Va(Q),s=da(s)|0,B=kDe(s,+E[l>>3],+E[c>>3],+E[f>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,Ka(Q),C=k,B|0}function kDe(s,l,c,f,d,m,B){s=s|0,l=+l,c=+c,f=+f,d=+d,m=+m,B=+B;var k=0;return k=Pl(QDe()|0)|0,l=+KA(l),c=+KA(c),f=+KA(f),d=+KA(d),m=+KA(m),Os(0,k|0,s|0,+l,+c,+f,+d,+m,+ +KA(B))|0}function QDe(){var s=0;return o[7624]|0||(FDe(9172),s=7624,n[s>>2]=1,n[s+4>>2]=0),9172}function FDe(s){s=s|0,Sl(s,TDe()|0,6)}function TDe(){return 1112}function RDe(s){s=s|0,Bp(s)}function NDe(s){s=s|0,a5(s+24|0),l5(s+16|0)}function a5(s){s=s|0,MDe(s)}function l5(s){s=s|0,LDe(s)}function LDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function MDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function Bp(s){s=s|0;var l=0;n[s+16>>2]=0,n[s+20>>2]=0,l=s+24|0,n[l>>2]=0,n[s+28>>2]=l,n[s+36>>2]=0,o[s+40>>0]=0,o[s+41>>0]=0}function ODe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],UDe(s,c,d,0),C=f}function UDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=NF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_De(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,HDe(m,f)|0,f),C=d}function NF(){var s=0,l=0;if(o[7640]|0||(u5(9232),tr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9232)|0)){s=9232,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));u5(9232)}return 9232}function _De(s){return s=s|0,0}function HDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=NF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],c5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jDe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function c5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qDe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,GDe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],c5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,YDe(s,k),WDe(k),C=O;return}}function qDe(s){return s=s|0,357913941}function GDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function YDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function WDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function u5(s){s=s|0,JDe(s)}function VDe(s){s=s|0,KDe(s+24|0)}function KDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function JDe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,zDe()|0,3),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zDe(){return 1144}function XDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,B=m+8|0,k=m,Q=ZDe(s)|0,s=n[Q+4>>2]|0,n[k>>2]=n[Q>>2],n[k+4>>2]=s,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],$De(l,B,c,f,d),C=m}function ZDe(s){return s=s|0,(n[(NF()|0)+24>>2]|0)+(s*12|0)|0}function $De(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0,O=0;O=C,C=C+16|0,B=O+2|0,k=O+1|0,Q=O,m=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(m=n[(n[s>>2]|0)+m>>2]|0),ku(B,c),c=+Qu(B,c),ku(k,f),f=+Qu(k,f),XA(Q,d),Q=ZA(Q,d)|0,D7[m&1](s,c,f,Q),C=O}function ku(s,l){s=s|0,l=+l}function Qu(s,l){return s=s|0,l=+l,+ +tPe(l)}function XA(s,l){s=s|0,l=l|0}function ZA(s,l){return s=s|0,l=l|0,ePe(l)|0}function ePe(s){return s=s|0,s|0}function tPe(s){return s=+s,+s}function rPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],nPe(s,c,d,1),C=f}function nPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=LF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=iPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,sPe(m,f)|0,f),C=d}function LF(){var s=0,l=0;if(o[7648]|0||(f5(9268),tr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9268)|0)){s=9268,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f5(9268)}return 9268}function iPe(s){return s=s|0,0}function sPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=LF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],A5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(oPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function A5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function oPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=aPe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,lPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],A5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cPe(s,k),uPe(k),C=O;return}}function aPe(s){return s=s|0,357913941}function lPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function uPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function f5(s){s=s|0,pPe(s)}function APe(s){s=s|0,fPe(s+24|0)}function fPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,4,l,hPe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hPe(){return 1160}function gPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=dPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=mPe(l,f)|0,C=c,l|0}function dPe(s){return s=s|0,(n[(LF()|0)+24>>2]|0)+(s*12|0)|0}function mPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),p5(Ng[c&31](s)|0)|0}function p5(s){return s=s|0,s&1|0}function yPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],EPe(s,c,d,0),C=f}function EPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=MF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=CPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,wPe(m,f)|0,f),C=d}function MF(){var s=0,l=0;if(o[7656]|0||(g5(9304),tr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9304)|0)){s=9304,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));g5(9304)}return 9304}function CPe(s){return s=s|0,0}function wPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=MF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],h5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(IPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function h5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function IPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=BPe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,vPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],h5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,DPe(s,k),PPe(k),C=O;return}}function BPe(s){return s=s|0,357913941}function vPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function DPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function g5(s){s=s|0,bPe(s)}function SPe(s){s=s|0,xPe(s+24|0)}function xPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function bPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,kPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kPe(){return 1164}function QPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=FPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],TPe(l,d,c),C=f}function FPe(s){return s=s|0,(n[(MF()|0)+24>>2]|0)+(s*12|0)|0}function TPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),vp(d,c),c=Dp(d,c)|0,tf[f&31](s,c),Pp(d),C=m}function vp(s,l){s=s|0,l=l|0,RPe(s,l)}function Dp(s,l){return s=s|0,l=l|0,s|0}function Pp(s){s=s|0,jA(s)}function RPe(s,l){s=s|0,l=l|0,OF(s,l)}function OF(s,l){s=s|0,l=l|0,n[s>>2]=l}function NPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],LPe(s,c,d,0),C=f}function LPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=UF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=MPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,OPe(m,f)|0,f),C=d}function UF(){var s=0,l=0;if(o[7664]|0||(m5(9340),tr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9340)|0)){s=9340,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));m5(9340)}return 9340}function MPe(s){return s=s|0,0}function OPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=UF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],d5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(UPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function d5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function UPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=_Pe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,HPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],d5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,jPe(s,k),qPe(k),C=O;return}}function _Pe(s){return s=s|0,357913941}function HPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function jPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function m5(s){s=s|0,WPe(s)}function GPe(s){s=s|0,YPe(s+24|0)}function YPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function WPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,4,l,VPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VPe(){return 1180}function KPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=JPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=zPe(l,d,c)|0,C=f,c|0}function JPe(s){return s=s|0,(n[(UF()|0)+24>>2]|0)+(s*12|0)|0}function zPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Sg(d,c),d=xg(d,c)|0,d=sD(NT[f&15](s,d)|0)|0,C=m,d|0}function Sg(s,l){s=s|0,l=l|0}function xg(s,l){return s=s|0,l=l|0,XPe(l)|0}function sD(s){return s=s|0,s|0}function XPe(s){return s=s|0,s|0}function ZPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$Pe(s,c,d,0),C=f}function $Pe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=_F()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=eSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,tSe(m,f)|0,f),C=d}function _F(){var s=0,l=0;if(o[7672]|0||(E5(9376),tr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9376)|0)){s=9376,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));E5(9376)}return 9376}function eSe(s){return s=s|0,0}function tSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=_F()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],y5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(rSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function y5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function rSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=nSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,iSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],y5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,sSe(s,k),oSe(k),C=O;return}}function nSe(s){return s=s|0,357913941}function iSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function sSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function oSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function E5(s){s=s|0,cSe(s)}function aSe(s){s=s|0,lSe(s+24|0)}function lSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function cSe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function C5(){return 1196}function uSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=ASe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=fSe(l,f)|0,C=c,l|0}function ASe(s){return s=s|0,(n[(_F()|0)+24>>2]|0)+(s*12|0)|0}function fSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),sD(Ng[c&31](s)|0)|0}function pSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],hSe(s,c,d,1),C=f}function hSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=HF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=gSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,dSe(m,f)|0,f),C=d}function HF(){var s=0,l=0;if(o[7680]|0||(I5(9412),tr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9412)|0)){s=9412,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));I5(9412)}return 9412}function gSe(s){return s=s|0,0}function dSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=HF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],w5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(mSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function w5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function mSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ySe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,ESe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],w5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,CSe(s,k),wSe(k),C=O;return}}function ySe(s){return s=s|0,357913941}function ESe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function CSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function I5(s){s=s|0,vSe(s)}function ISe(s){s=s|0,BSe(s+24|0)}function BSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function vSe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,B5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function B5(){return 1200}function DSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=PSe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=SSe(l,f)|0,C=c,l|0}function PSe(s){return s=s|0,(n[(HF()|0)+24>>2]|0)+(s*12|0)|0}function SSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),oD(Ng[c&31](s)|0)|0}function oD(s){return s=s|0,s|0}function xSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bSe(s,c,d,0),C=f}function bSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=jF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=kSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,QSe(m,f)|0,f),C=d}function jF(){var s=0,l=0;if(o[7688]|0||(D5(9448),tr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9448)|0)){s=9448,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));D5(9448)}return 9448}function kSe(s){return s=s|0,0}function QSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=jF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],v5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(FSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function v5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function FSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=TSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,RSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],v5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,NSe(s,k),LSe(k),C=O;return}}function TSe(s){return s=s|0,357913941}function RSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function NSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function LSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function D5(s){s=s|0,USe(s)}function MSe(s){s=s|0,OSe(s+24|0)}function OSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function USe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,P5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function P5(){return 1204}function _Se(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=HSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jSe(l,d,c),C=f}function HSe(s){return s=s|0,(n[(jF()|0)+24>>2]|0)+(s*12|0)|0}function jSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),qF(d,c),d=GF(d,c)|0,tf[f&31](s,d),C=m}function qF(s,l){s=s|0,l=l|0}function GF(s,l){return s=s|0,l=l|0,qSe(l)|0}function qSe(s){return s=s|0,s|0}function GSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],YSe(s,c,d,0),C=f}function YSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=YF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=WSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,VSe(m,f)|0,f),C=d}function YF(){var s=0,l=0;if(o[7696]|0||(x5(9484),tr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9484)|0)){s=9484,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));x5(9484)}return 9484}function WSe(s){return s=s|0,0}function VSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=YF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],S5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(KSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function S5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function KSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=JSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,zSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],S5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,XSe(s,k),ZSe(k),C=O;return}}function JSe(s){return s=s|0,357913941}function zSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function XSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ZSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function x5(s){s=s|0,txe(s)}function $Se(s){s=s|0,exe(s+24|0)}function exe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function txe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,rxe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function rxe(){return 1212}function nxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=ixe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],sxe(l,m,c,f),C=d}function ixe(s){return s=s|0,(n[(YF()|0)+24>>2]|0)+(s*12|0)|0}function sxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),qF(m,c),m=GF(m,c)|0,Sg(B,f),B=xg(B,f)|0,_w[d&15](s,m,B),C=k}function oxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],axe(s,c,d,1),C=f}function axe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=WF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lxe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cxe(m,f)|0,f),C=d}function WF(){var s=0,l=0;if(o[7704]|0||(k5(9520),tr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9520)|0)){s=9520,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));k5(9520)}return 9520}function lxe(s){return s=s|0,0}function cxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=WF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],b5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function b5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Axe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],b5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pxe(s,k),hxe(k),C=O;return}}function Axe(s){return s=s|0,357913941}function fxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function k5(s){s=s|0,mxe(s)}function gxe(s){s=s|0,dxe(s+24|0)}function dxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mxe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,yxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yxe(){return 1224}function Exe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;return d=C,C=C+16|0,m=d+8|0,B=d,k=Cxe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],f=+wxe(l,m,c),C=d,+f}function Cxe(s){return s=s|0,(n[(WF()|0)+24>>2]|0)+(s*12|0)|0}function wxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,B=+xF(+S7[f&7](s,d)),C=m,+B}function Ixe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bxe(s,c,d,1),C=f}function Bxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=VF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=vxe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Dxe(m,f)|0,f),C=d}function VF(){var s=0,l=0;if(o[7712]|0||(F5(9556),tr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9556)|0)){s=9556,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));F5(9556)}return 9556}function vxe(s){return s=s|0,0}function Dxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=VF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function Q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Sxe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,xxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],Q5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,bxe(s,k),kxe(k),C=O;return}}function Sxe(s){return s=s|0,357913941}function xxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function bxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function F5(s){s=s|0,Txe(s)}function Qxe(s){s=s|0,Fxe(s+24|0)}function Fxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Txe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,Rxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Rxe(){return 1232}function Nxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Lxe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=+Mxe(l,d),C=f,+c}function Lxe(s){return s=s|0,(n[(VF()|0)+24>>2]|0)+(s*12|0)|0}function Mxe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),+ +xF(+P7[c&15](s))}function Oxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uxe(s,c,d,1),C=f}function Uxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=KF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_xe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Hxe(m,f)|0,f),C=d}function KF(){var s=0,l=0;if(o[7720]|0||(R5(9592),tr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9592)|0)){s=9592,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));R5(9592)}return 9592}function _xe(s){return s=s|0,0}function Hxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=KF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],T5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function T5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qxe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Gxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],T5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Yxe(s,k),Wxe(k),C=O;return}}function qxe(s){return s=s|0,357913941}function Gxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Yxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Wxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function R5(s){s=s|0,Jxe(s)}function Vxe(s){s=s|0,Kxe(s+24|0)}function Kxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Jxe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,7,l,zxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zxe(){return 1276}function Xxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Zxe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=$xe(l,f)|0,C=c,l|0}function Zxe(s){return s=s|0,(n[(KF()|0)+24>>2]|0)+(s*12|0)|0}function $xe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+16|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=N5(f)|0,C=d,f|0}function N5(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(L5()|0)|0,f?(FF(l,f),TF(c,l),ebe(s,c),s=RF(l)|0):s=tbe(s)|0,C=d,s|0}function L5(){var s=0;return o[7736]|0||(Abe(9640),tr(25,9640,U|0)|0,s=7736,n[s>>2]=1,n[s+4>>2]=0),9640}function ebe(s,l){s=s|0,l=l|0,sbe(l,s,s+8|0)|0}function tbe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(16)|0,n[k>>2]=n[s>>2],n[k+4>>2]=n[s+4>>2],n[k+8>>2]=n[s+8>>2],n[k+12>>2]=n[s+12>>2],m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],JF(s,m,d),n[f>>2]=s,C=c,l|0}function JF(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1244,n[c+12>>2]=l,n[s+4>>2]=c}function rbe(s){s=s|0,Jm(s),gt(s)}function nbe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function ibe(s){s=s|0,gt(s)}function sbe(s,l,c){return s=s|0,l=l|0,c=c|0,l=obe(n[s>>2]|0,l,c)|0,c=s+4|0,n[(n[c>>2]|0)+8>>2]=l,n[(n[c>>2]|0)+8>>2]|0}function obe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return f=C,C=C+16|0,d=f,Va(d),s=da(s)|0,c=abe(s,n[l>>2]|0,+E[c>>3])|0,Ka(d),C=f,c|0}function abe(s,l,c){s=s|0,l=l|0,c=+c;var f=0;return f=Pl(lbe()|0)|0,l=SF(l)|0,ml(0,f|0,s|0,l|0,+ +KA(c))|0}function lbe(){var s=0;return o[7728]|0||(cbe(9628),s=7728,n[s>>2]=1,n[s+4>>2]=0),9628}function cbe(s){s=s|0,Sl(s,ube()|0,2)}function ube(){return 1264}function Abe(s){s=s|0,Bp(s)}function fbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pbe(s,c,d,1),C=f}function pbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=zF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=hbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,gbe(m,f)|0,f),C=d}function zF(){var s=0,l=0;if(o[7744]|0||(O5(9684),tr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9684)|0)){s=9684,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));O5(9684)}return 9684}function hbe(s){return s=s|0,0}function gbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=zF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],M5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(dbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function M5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=mbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,ybe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],M5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Ebe(s,k),Cbe(k),C=O;return}}function mbe(s){return s=s|0,357913941}function ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Ebe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Cbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function O5(s){s=s|0,Bbe(s)}function wbe(s){s=s|0,Ibe(s+24|0)}function Ibe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Bbe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,vbe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function vbe(){return 1280}function Dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Pbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=Sbe(l,d,c)|0,C=f,c|0}function Pbe(s){return s=s|0,(n[(zF()|0)+24>>2]|0)+(s*12|0)|0}function Sbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return B=C,C=C+32|0,d=B,m=B+16|0,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(m,c),m=ZA(m,c)|0,_w[f&15](d,s,m),m=N5(d)|0,C=B,m|0}function xbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bbe(s,c,d,1),C=f}function bbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=XF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=kbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Qbe(m,f)|0,f),C=d}function XF(){var s=0,l=0;if(o[7752]|0||(_5(9720),tr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9720)|0)){s=9720,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));_5(9720)}return 9720}function kbe(s){return s=s|0,0}function Qbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=XF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],U5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Fbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function U5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Fbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Tbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Rbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],U5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Nbe(s,k),Lbe(k),C=O;return}}function Tbe(s){return s=s|0,357913941}function Rbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Nbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Lbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function _5(s){s=s|0,Ube(s)}function Mbe(s){s=s|0,Obe(s+24|0)}function Obe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Ube(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,_be()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function _be(){return 1288}function Hbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=jbe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=qbe(l,f)|0,C=c,l|0}function jbe(s){return s=s|0,(n[(XF()|0)+24>>2]|0)+(s*12|0)|0}function qbe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),t5(Ng[c&31](s)|0)|0}function Gbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ybe(s,c,d,0),C=f}function Ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=ZF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=Wbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Vbe(m,f)|0,f),C=d}function ZF(){var s=0,l=0;if(o[7760]|0||(j5(9756),tr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9756)|0)){s=9756,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));j5(9756)}return 9756}function Wbe(s){return s=s|0,0}function Vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=ZF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],H5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Kbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function H5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Kbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Jbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,zbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],H5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Xbe(s,k),Zbe(k),C=O;return}}function Jbe(s){return s=s|0,357913941}function zbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Xbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Zbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function j5(s){s=s|0,tke(s)}function $be(s){s=s|0,eke(s+24|0)}function eke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function tke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,rke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function rke(){return 1292}function nke(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=ike(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ske(l,d,c),C=f}function ike(s){return s=s|0,(n[(ZF()|0)+24>>2]|0)+(s*12|0)|0}function ske(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ku(d,c),c=+Qu(d,c),B7[f&31](s,c),C=m}function oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ake(s,c,d,0),C=f}function ake(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=$F()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cke(m,f)|0,f),C=d}function $F(){var s=0,l=0;if(o[7768]|0||(G5(9792),tr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9792)|0)){s=9792,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));G5(9792)}return 9792}function lke(s){return s=s|0,0}function cke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=$F()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ake(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],q5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pke(s,k),hke(k),C=O;return}}function Ake(s){return s=s|0,357913941}function fke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function G5(s){s=s|0,mke(s)}function gke(s){s=s|0,dke(s+24|0)}function dke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,yke()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yke(){return 1300}function Eke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=Cke(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],wke(l,m,c,f),C=d}function Cke(s){return s=s|0,(n[($F()|0)+24>>2]|0)+(s*12|0)|0}function wke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,ku(B,f),f=+Qu(B,f),Q7[d&15](s,m,f),C=k}function Ike(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bke(s,c,d,0),C=f}function Bke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=eT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=vke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Dke(m,f)|0,f),C=d}function eT(){var s=0,l=0;if(o[7776]|0||(W5(9828),tr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9828)|0)){s=9828,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));W5(9828)}return 9828}function vke(s){return s=s|0,0}function Dke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=eT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Y5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function Y5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ske(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,xke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],Y5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,bke(s,k),kke(k),C=O;return}}function Ske(s){return s=s|0,357913941}function xke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function bke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function W5(s){s=s|0,Tke(s)}function Qke(s){s=s|0,Fke(s+24|0)}function Fke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Tke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,7,l,Rke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Rke(){return 1312}function Nke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Lke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Mke(l,d,c),C=f}function Lke(s){return s=s|0,(n[(eT()|0)+24>>2]|0)+(s*12|0)|0}function Mke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,tf[f&31](s,d),C=m}function Oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uke(s,c,d,0),C=f}function Uke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=tT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_ke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Hke(m,f)|0,f),C=d}function tT(){var s=0,l=0;if(o[7784]|0||(K5(9864),tr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9864)|0)){s=9864,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));K5(9864)}return 9864}function _ke(s){return s=s|0,0}function Hke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=tT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],V5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function V5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qke(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Gke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],V5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Yke(s,k),Wke(k),C=O;return}}function qke(s){return s=s|0,357913941}function Gke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Yke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Wke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function K5(s){s=s|0,Jke(s)}function Vke(s){s=s|0,Kke(s+24|0)}function Kke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Jke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,zke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zke(){return 1320}function Xke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Zke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ke(l,d,c),C=f}function Zke(s){return s=s|0,(n[(tT()|0)+24>>2]|0)+(s*12|0)|0}function $ke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),eQe(d,c),d=tQe(d,c)|0,tf[f&31](s,d),C=m}function eQe(s,l){s=s|0,l=l|0}function tQe(s,l){return s=s|0,l=l|0,rQe(l)|0}function rQe(s){return s=s|0,s|0}function nQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iQe(s,c,d,0),C=f}function iQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=rT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=sQe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,oQe(m,f)|0,f),C=d}function rT(){var s=0,l=0;if(o[7792]|0||(z5(9900),tr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9900)|0)){s=9900,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));z5(9900)}return 9900}function sQe(s){return s=s|0,0}function oQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=rT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],J5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(aQe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function J5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function aQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=lQe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,cQe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],J5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,uQe(s,k),AQe(k),C=O;return}}function lQe(s){return s=s|0,357913941}function cQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function uQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function AQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function z5(s){s=s|0,hQe(s)}function fQe(s){s=s|0,pQe(s+24|0)}function pQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function hQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,22,l,gQe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function gQe(){return 1344}function dQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;c=C,C=C+16|0,f=c+8|0,d=c,m=mQe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],yQe(l,f),C=c}function mQe(s){return s=s|0,(n[(rT()|0)+24>>2]|0)+(s*12|0)|0}function yQe(s,l){s=s|0,l=l|0;var c=0;c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),ef[c&127](s)}function EQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=nT()|0,s=CQe(c)|0,hn(m,l,d,s,wQe(c,f)|0,f)}function nT(){var s=0,l=0;if(o[7800]|0||(Z5(9936),tr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9936)|0)){s=9936,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Z5(9936)}return 9936}function CQe(s){return s=s|0,s|0}function wQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=nT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(X5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(IQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function X5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function IQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=BQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,vQe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,X5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,DQe(s,d),PQe(d),C=k;return}}function BQe(s){return s=s|0,536870911}function vQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function DQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function Z5(s){s=s|0,bQe(s)}function SQe(s){s=s|0,xQe(s+24|0)}function xQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function bQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,23,l,P5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kQe(s,l){s=s|0,l=l|0,FQe(n[(QQe(s)|0)>>2]|0,l)}function QQe(s){return s=s|0,(n[(nT()|0)+24>>2]|0)+(s<<3)|0}function FQe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,qF(f,l),l=GF(f,l)|0,ef[s&127](l),C=c}function TQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=iT()|0,s=RQe(c)|0,hn(m,l,d,s,NQe(c,f)|0,f)}function iT(){var s=0,l=0;if(o[7808]|0||(e9(9972),tr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9972)|0)){s=9972,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));e9(9972)}return 9972}function RQe(s){return s=s|0,s|0}function NQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=iT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?($5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(LQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function $5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function LQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=MQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,OQe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,$5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,UQe(s,d),_Qe(d),C=k;return}}function MQe(s){return s=s|0,536870911}function OQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function UQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _Qe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function e9(s){s=s|0,qQe(s)}function HQe(s){s=s|0,jQe(s+24|0)}function jQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function qQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,9,l,GQe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function GQe(){return 1348}function YQe(s,l){return s=s|0,l=l|0,VQe(n[(WQe(s)|0)>>2]|0,l)|0}function WQe(s){return s=s|0,(n[(iT()|0)+24>>2]|0)+(s<<3)|0}function VQe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,t9(f,l),l=r9(f,l)|0,l=sD(Ng[s&31](l)|0)|0,C=c,l|0}function t9(s,l){s=s|0,l=l|0}function r9(s,l){return s=s|0,l=l|0,KQe(l)|0}function KQe(s){return s=s|0,s|0}function JQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=sT()|0,s=zQe(c)|0,hn(m,l,d,s,XQe(c,f)|0,f)}function sT(){var s=0,l=0;if(o[7816]|0||(i9(10008),tr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10008)|0)){s=10008,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));i9(10008)}return 10008}function zQe(s){return s=s|0,s|0}function XQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=sT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(n9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(ZQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function n9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function ZQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=$Qe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,eFe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,n9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,tFe(s,d),rFe(d),C=k;return}}function $Qe(s){return s=s|0,536870911}function eFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function tFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function rFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function i9(s){s=s|0,sFe(s)}function nFe(s){s=s|0,iFe(s+24|0)}function iFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function sFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,15,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function oFe(s){return s=s|0,lFe(n[(aFe(s)|0)>>2]|0)|0}function aFe(s){return s=s|0,(n[(sT()|0)+24>>2]|0)+(s<<3)|0}function lFe(s){return s=s|0,sD(CD[s&7]()|0)|0}function cFe(){var s=0;return o[7832]|0||(mFe(10052),tr(25,10052,U|0)|0,s=7832,n[s>>2]=1,n[s+4>>2]=0),10052}function uFe(s,l){s=s|0,l=l|0,n[s>>2]=AFe()|0,n[s+4>>2]=fFe()|0,n[s+12>>2]=l,n[s+8>>2]=pFe()|0,n[s+32>>2]=2}function AFe(){return 11709}function fFe(){return 1188}function pFe(){return aD()|0}function hFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(gFe(c),gt(c)):l|0&&(Pu(l),gt(l))}function Sp(s,l){return s=s|0,l=l|0,l&s|0}function gFe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function aD(){var s=0;return o[7824]|0||(n[2511]=dFe()|0,n[2512]=0,s=7824,n[s>>2]=1,n[s+4>>2]=0),10044}function dFe(){return 0}function mFe(s){s=s|0,Bp(s)}function yFe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0;l=C,C=C+32|0,c=l+24|0,m=l+16|0,d=l+8|0,f=l,EFe(s,4827),CFe(s,4834,3)|0,wFe(s,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],IFe(s,4841,c)|0,n[d>>2]=1,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],BFe(s,4871,c)|0,n[f>>2]=10,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],vFe(s,4891,c)|0,C=l}function EFe(s,l){s=s|0,l=l|0;var c=0;c=rRe()|0,n[s>>2]=c,nRe(c,l),xp(n[s>>2]|0)}function CFe(s,l,c){return s=s|0,l=l|0,c=c|0,_Te(s,pn(l)|0,c,0),s|0}function wFe(s,l,c){return s=s|0,l=l|0,c=c|0,DTe(s,pn(l)|0,c,0),s|0}function IFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oTe(s,l,d),C=f,s|0}function BFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],HFe(s,l,d),C=f,s|0}function vFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],DFe(s,l,d),C=f,s|0}function DFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],PFe(s,c,d,1),C=f}function PFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=oT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=SFe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,xFe(m,f)|0,f),C=d}function oT(){var s=0,l=0;if(o[7840]|0||(o9(10100),tr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10100)|0)){s=10100,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o9(10100)}return 10100}function SFe(s){return s=s|0,0}function xFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=oT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],s9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(bFe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function s9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function bFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=kFe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,QFe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],s9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,FFe(s,k),TFe(k),C=O;return}}function kFe(s){return s=s|0,357913941}function QFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function FFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function TFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function o9(s){s=s|0,LFe(s)}function RFe(s){s=s|0,NFe(s+24|0)}function NFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function LFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,MFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function MFe(){return 1364}function OFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=UFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=_Fe(l,d,c)|0,C=f,c|0}function UFe(s){return s=s|0,(n[(oT()|0)+24>>2]|0)+(s*12|0)|0}function _Fe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,d=p5(NT[f&15](s,d)|0)|0,C=m,d|0}function HFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jFe(s,c,d,0),C=f}function jFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=aT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=qFe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,GFe(m,f)|0,f),C=d}function aT(){var s=0,l=0;if(o[7848]|0||(l9(10136),tr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10136)|0)){s=10136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));l9(10136)}return 10136}function qFe(s){return s=s|0,0}function GFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=aT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],a9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(YFe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function a9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function YFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=WFe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,VFe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],a9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,KFe(s,k),JFe(k),C=O;return}}function WFe(s){return s=s|0,357913941}function VFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function KFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function l9(s){s=s|0,ZFe(s)}function zFe(s){s=s|0,XFe(s+24|0)}function XFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function ZFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,9,l,$Fe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function $Fe(){return 1372}function eTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=tTe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rTe(l,d,c),C=f}function tTe(s){return s=s|0,(n[(aT()|0)+24>>2]|0)+(s*12|0)|0}function rTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=Ze;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),nTe(d,c),B=y(iTe(d,c)),I7[f&1](s,B),C=m}function nTe(s,l){s=s|0,l=+l}function iTe(s,l){return s=s|0,l=+l,y(sTe(l))}function sTe(s){return s=+s,y(s)}function oTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],aTe(s,c,d,0),C=f}function aTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=lT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lTe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cTe(m,f)|0,f),C=d}function lT(){var s=0,l=0;if(o[7856]|0||(u9(10172),tr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10172)|0)){s=10172,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));u9(10172)}return 10172}function lTe(s){return s=s|0,0}function cTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=lT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],c9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uTe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function c9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ATe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fTe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],c9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pTe(s,k),hTe(k),C=O;return}}function ATe(s){return s=s|0,357913941}function fTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function u9(s){s=s|0,mTe(s)}function gTe(s){s=s|0,dTe(s+24|0)}function dTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,3,l,yTe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yTe(){return 1380}function ETe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=CTe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],wTe(l,m,c,f),C=d}function CTe(s){return s=s|0,(n[(lT()|0)+24>>2]|0)+(s*12|0)|0}function wTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,ITe(B,f),B=BTe(B,f)|0,_w[d&15](s,m,B),C=k}function ITe(s,l){s=s|0,l=l|0}function BTe(s,l){return s=s|0,l=l|0,vTe(l)|0}function vTe(s){return s=s|0,(s|0)!=0|0}function DTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=cT()|0,s=PTe(c)|0,hn(m,l,d,s,STe(c,f)|0,f)}function cT(){var s=0,l=0;if(o[7864]|0||(f9(10208),tr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10208)|0)){s=10208,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f9(10208)}return 10208}function PTe(s){return s=s|0,s|0}function STe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=cT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(A9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(xTe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function A9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function xTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=bTe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,kTe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,A9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,QTe(s,d),FTe(d),C=k;return}}function bTe(s){return s=s|0,536870911}function kTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function QTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function FTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function f9(s){s=s|0,NTe(s)}function TTe(s){s=s|0,RTe(s+24|0)}function RTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function NTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,24,l,LTe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function LTe(){return 1392}function MTe(s,l){s=s|0,l=l|0,UTe(n[(OTe(s)|0)>>2]|0,l)}function OTe(s){return s=s|0,(n[(cT()|0)+24>>2]|0)+(s<<3)|0}function UTe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,t9(f,l),l=r9(f,l)|0,ef[s&127](l),C=c}function _Te(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=uT()|0,s=HTe(c)|0,hn(m,l,d,s,jTe(c,f)|0,f)}function uT(){var s=0,l=0;if(o[7872]|0||(h9(10244),tr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10244)|0)){s=10244,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));h9(10244)}return 10244}function HTe(s){return s=s|0,s|0}function jTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=uT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(p9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(qTe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function p9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function qTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=GTe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,YTe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,p9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,WTe(s,d),VTe(d),C=k;return}}function GTe(s){return s=s|0,536870911}function YTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function WTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function VTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function h9(s){s=s|0,zTe(s)}function KTe(s){s=s|0,JTe(s+24|0)}function JTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function zTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,16,l,XTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function XTe(){return 1400}function ZTe(s){return s=s|0,eRe(n[($Te(s)|0)>>2]|0)|0}function $Te(s){return s=s|0,(n[(uT()|0)+24>>2]|0)+(s<<3)|0}function eRe(s){return s=s|0,tRe(CD[s&7]()|0)|0}function tRe(s){return s=s|0,s|0}function rRe(){var s=0;return o[7880]|0||(cRe(10280),tr(25,10280,U|0)|0,s=7880,n[s>>2]=1,n[s+4>>2]=0),10280}function nRe(s,l){s=s|0,l=l|0,n[s>>2]=iRe()|0,n[s+4>>2]=sRe()|0,n[s+12>>2]=l,n[s+8>>2]=oRe()|0,n[s+32>>2]=4}function iRe(){return 11711}function sRe(){return 1356}function oRe(){return aD()|0}function aRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(lRe(c),gt(c)):l|0&&(vg(l),gt(l))}function lRe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function cRe(s){s=s|0,Bp(s)}function uRe(s){s=s|0,ARe(s,4920),fRe(s)|0,pRe(s)|0}function ARe(s,l){s=s|0,l=l|0;var c=0;c=L5()|0,n[s>>2]=c,RRe(c,l),xp(n[s>>2]|0)}function fRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,vRe()|0),s|0}function pRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,hRe()|0),s|0}function hRe(){var s=0;return o[7888]|0||(g9(10328),tr(53,10328,U|0)|0,s=7888,n[s>>2]=1,n[s+4>>2]=0),Rr(10328)|0||g9(10328),10328}function bg(s,l){s=s|0,l=l|0,hn(s,0,l,0,0,0)}function g9(s){s=s|0,mRe(s),kg(s,10)}function gRe(s){s=s|0,dRe(s+24|0)}function dRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function mRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,1,l,wRe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yRe(s,l,c){s=s|0,l=l|0,c=+c,ERe(s,l,c)}function kg(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function ERe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,XA(k,l),n[m>>2]=ZA(k,l)|0,ku(B,c),E[d>>3]=+Qu(B,c),CRe(s,m,d),C=f}function CRe(s,l,c){s=s|0,l=l|0,c=c|0,Y(s+8|0,n[l>>2]|0,+E[c>>3]),o[s+24>>0]=1}function wRe(){return 1404}function IRe(s,l){return s=s|0,l=+l,BRe(s,l)|0}function BRe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,m=f+4|0,B=f+8|0,k=f,d=Wa(8)|0,c=d,Q=Vt(16)|0,XA(m,s),s=ZA(m,s)|0,ku(B,l),Y(Q,s,+Qu(B,l)),B=c+4|0,n[B>>2]=Q,s=Vt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],JF(s,B,m),n[d>>2]=s,C=f,c|0}function vRe(){var s=0;return o[7896]|0||(d9(10364),tr(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Rr(10364)|0||d9(10364),10364}function d9(s){s=s|0,SRe(s),kg(s,55)}function DRe(s){s=s|0,PRe(s+24|0)}function PRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function SRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,4,l,QRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xRe(s){s=s|0,bRe(s)}function bRe(s){s=s|0,kRe(s)}function kRe(s){s=s|0,m9(s+8|0),o[s+24>>0]=1}function m9(s){s=s|0,n[s>>2]=0,E[s+8>>3]=0}function QRe(){return 1424}function FRe(){return TRe()|0}function TRe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Vt(16)|0,m9(f),m=s+4|0,n[m>>2]=f,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],JF(f,m,d),n[c>>2]=f,C=l,s|0}function RRe(s,l){s=s|0,l=l|0,n[s>>2]=NRe()|0,n[s+4>>2]=LRe()|0,n[s+12>>2]=l,n[s+8>>2]=MRe()|0,n[s+32>>2]=5}function NRe(){return 11710}function LRe(){return 1416}function MRe(){return lD()|0}function ORe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(URe(c),gt(c)):l|0&>(l)}function URe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function lD(){var s=0;return o[7904]|0||(n[2600]=_Re()|0,n[2601]=0,s=7904,n[s>>2]=1,n[s+4>>2]=0),10400}function _Re(){return n[357]|0}function HRe(s){s=s|0,jRe(s,4926),qRe(s)|0}function jRe(s,l){s=s|0,l=l|0;var c=0;c=s5()|0,n[s>>2]=c,eNe(c,l),xp(n[s>>2]|0)}function qRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,GRe()|0),s|0}function GRe(){var s=0;return o[7912]|0||(y9(10412),tr(56,10412,U|0)|0,s=7912,n[s>>2]=1,n[s+4>>2]=0),Rr(10412)|0||y9(10412),10412}function y9(s){s=s|0,VRe(s),kg(s,57)}function YRe(s){s=s|0,WRe(s+24|0)}function WRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function VRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,5,l,XRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function KRe(s){s=s|0,JRe(s)}function JRe(s){s=s|0,zRe(s)}function zRe(s){s=s|0;var l=0,c=0;l=s+8|0,c=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(c|0));o[s+56>>0]=1}function XRe(){return 1432}function ZRe(){return $Re()|0}function $Re(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0;B=C,C=C+16|0,s=B+4|0,l=B,c=Wa(8)|0,f=c,d=Vt(48)|0,m=d,k=m+48|0;do n[m>>2]=0,m=m+4|0;while((m|0)<(k|0));return m=f+4|0,n[m>>2]=d,k=Vt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[s>>2]=n[l>>2],o5(k,m,s),n[c>>2]=k,C=B,f|0}function eNe(s,l){s=s|0,l=l|0,n[s>>2]=tNe()|0,n[s+4>>2]=rNe()|0,n[s+12>>2]=l,n[s+8>>2]=nNe()|0,n[s+32>>2]=6}function tNe(){return 11704}function rNe(){return 1436}function nNe(){return lD()|0}function iNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(sNe(c),gt(c)):l|0&>(l)}function sNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function oNe(s){s=s|0,aNe(s,4933),lNe(s)|0,cNe(s)|0}function aNe(s,l){s=s|0,l=l|0;var c=0;c=TNe()|0,n[s>>2]=c,RNe(c,l),xp(n[s>>2]|0)}function lNe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,BNe()|0),s|0}function cNe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,uNe()|0),s|0}function uNe(){var s=0;return o[7920]|0||(E9(10452),tr(58,10452,U|0)|0,s=7920,n[s>>2]=1,n[s+4>>2]=0),Rr(10452)|0||E9(10452),10452}function E9(s){s=s|0,pNe(s),kg(s,1)}function ANe(s){s=s|0,fNe(s+24|0)}function fNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function pNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,1,l,mNe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hNe(s,l,c){s=s|0,l=+l,c=+c,gNe(s,l,c)}function gNe(s,l,c){s=s|0,l=+l,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,m=f+8|0,k=f+17|0,d=f,B=f+16|0,ku(k,l),E[m>>3]=+Qu(k,l),ku(B,c),E[d>>3]=+Qu(B,c),dNe(s,m,d),C=f}function dNe(s,l,c){s=s|0,l=l|0,c=c|0,C9(s+8|0,+E[l>>3],+E[c>>3]),o[s+24>>0]=1}function C9(s,l,c){s=s|0,l=+l,c=+c,E[s>>3]=l,E[s+8>>3]=c}function mNe(){return 1472}function yNe(s,l){return s=+s,l=+l,ENe(s,l)|0}function ENe(s,l){s=+s,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,B=f+4|0,k=f+8|0,Q=f,d=Wa(8)|0,c=d,m=Vt(16)|0,ku(B,s),s=+Qu(B,s),ku(k,l),C9(m,s,+Qu(k,l)),k=c+4|0,n[k>>2]=m,m=Vt(8)|0,k=n[k>>2]|0,n[Q>>2]=0,n[B>>2]=n[Q>>2],w9(m,k,B),n[d>>2]=m,C=f,c|0}function w9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1452,n[c+12>>2]=l,n[s+4>>2]=c}function CNe(s){s=s|0,Jm(s),gt(s)}function wNe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function INe(s){s=s|0,gt(s)}function BNe(){var s=0;return o[7928]|0||(I9(10488),tr(59,10488,U|0)|0,s=7928,n[s>>2]=1,n[s+4>>2]=0),Rr(10488)|0||I9(10488),10488}function I9(s){s=s|0,PNe(s),kg(s,60)}function vNe(s){s=s|0,DNe(s+24|0)}function DNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function PNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,6,l,kNe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function SNe(s){s=s|0,xNe(s)}function xNe(s){s=s|0,bNe(s)}function bNe(s){s=s|0,B9(s+8|0),o[s+24>>0]=1}function B9(s){s=s|0,n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,n[s+12>>2]=0}function kNe(){return 1492}function QNe(){return FNe()|0}function FNe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Vt(16)|0,B9(f),m=s+4|0,n[m>>2]=f,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],w9(f,m,d),n[c>>2]=f,C=l,s|0}function TNe(){var s=0;return o[7936]|0||(_Ne(10524),tr(25,10524,U|0)|0,s=7936,n[s>>2]=1,n[s+4>>2]=0),10524}function RNe(s,l){s=s|0,l=l|0,n[s>>2]=NNe()|0,n[s+4>>2]=LNe()|0,n[s+12>>2]=l,n[s+8>>2]=MNe()|0,n[s+32>>2]=7}function NNe(){return 11700}function LNe(){return 1484}function MNe(){return lD()|0}function ONe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(UNe(c),gt(c)):l|0&>(l)}function UNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function _Ne(s){s=s|0,Bp(s)}function HNe(s,l,c){s=s|0,l=l|0,c=c|0,s=pn(l)|0,l=jNe(c)|0,c=qNe(c,0)|0,ELe(s,l,c,AT()|0,0)}function jNe(s){return s=s|0,s|0}function qNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=AT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(D9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(zNe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function AT(){var s=0,l=0;if(o[7944]|0||(v9(10568),tr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10568)|0)){s=10568,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));v9(10568)}return 10568}function v9(s){s=s|0,WNe(s)}function GNe(s){s=s|0,YNe(s+24|0)}function YNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function WNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,17,l,B5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VNe(s){return s=s|0,JNe(n[(KNe(s)|0)>>2]|0)|0}function KNe(s){return s=s|0,(n[(AT()|0)+24>>2]|0)+(s<<3)|0}function JNe(s){return s=s|0,oD(CD[s&7]()|0)|0}function D9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function zNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=XNe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,ZNe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,D9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,$Ne(s,d),eLe(d),C=k;return}}function XNe(s){return s=s|0,536870911}function ZNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function $Ne(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function eLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function tLe(){rLe()}function rLe(){nLe(10604)}function nLe(s){s=s|0,iLe(s,4955)}function iLe(s,l){s=s|0,l=l|0;var c=0;c=sLe()|0,n[s>>2]=c,oLe(c,l),xp(n[s>>2]|0)}function sLe(){var s=0;return o[7952]|0||(gLe(10612),tr(25,10612,U|0)|0,s=7952,n[s>>2]=1,n[s+4>>2]=0),10612}function oLe(s,l){s=s|0,l=l|0,n[s>>2]=uLe()|0,n[s+4>>2]=ALe()|0,n[s+12>>2]=l,n[s+8>>2]=fLe()|0,n[s+32>>2]=8}function xp(s){s=s|0;var l=0,c=0;l=C,C=C+16|0,c=l,Gm()|0,n[c>>2]=s,aLe(10608,c),C=l}function Gm(){return o[11714]|0||(n[2652]=0,tr(62,10608,U|0)|0,o[11714]=1),10608}function aLe(s,l){s=s|0,l=l|0;var c=0;c=Vt(8)|0,n[c+4>>2]=n[l>>2],n[c>>2]=n[s>>2],n[s>>2]=c}function lLe(s){s=s|0,cLe(s)}function cLe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function uLe(){return 11715}function ALe(){return 1496}function fLe(){return aD()|0}function pLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(hLe(c),gt(c)):l|0&>(l)}function hLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function gLe(s){s=s|0,Bp(s)}function dLe(s,l){s=s|0,l=l|0;var c=0,f=0;Gm()|0,c=n[2652]|0;e:do if(c|0){for(;f=n[c+4>>2]|0,!(f|0&&(o7(fT(f)|0,s)|0)==0);)if(c=n[c>>2]|0,!c)break e;mLe(f,l)}while(0)}function fT(s){return s=s|0,n[s+12>>2]|0}function mLe(s,l){s=s|0,l=l|0;var c=0;s=s+36|0,c=n[s>>2]|0,c|0&&(jA(c),gt(c)),c=Vt(4)|0,$G(c,l),n[s>>2]=c}function pT(){return o[11716]|0||(n[2664]=0,tr(63,10656,U|0)|0,o[11716]=1),10656}function P9(){var s=0;return o[11717]|0?s=n[2665]|0:(yLe(),n[2665]=1504,o[11717]=1,s=1504),s|0}function yLe(){o[11740]|0||(o[11718]=gr(gr(8,0)|0,0)|0,o[11719]=gr(gr(0,0)|0,0)|0,o[11720]=gr(gr(0,16)|0,0)|0,o[11721]=gr(gr(8,0)|0,0)|0,o[11722]=gr(gr(0,0)|0,0)|0,o[11723]=gr(gr(8,0)|0,0)|0,o[11724]=gr(gr(0,0)|0,0)|0,o[11725]=gr(gr(8,0)|0,0)|0,o[11726]=gr(gr(0,0)|0,0)|0,o[11727]=gr(gr(8,0)|0,0)|0,o[11728]=gr(gr(0,0)|0,0)|0,o[11729]=gr(gr(0,0)|0,32)|0,o[11730]=gr(gr(0,0)|0,32)|0,o[11740]=1)}function S9(){return 1572}function ELe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0;m=C,C=C+32|0,M=m+16|0,O=m+12|0,Q=m+8|0,k=m+4|0,B=m,n[M>>2]=s,n[O>>2]=l,n[Q>>2]=c,n[k>>2]=f,n[B>>2]=d,pT()|0,CLe(10656,M,O,Q,k,B),C=m}function CLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0;B=Vt(24)|0,r5(B+4|0,n[l>>2]|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[s>>2],n[s>>2]=B}function x9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0;if(at=C,C=C+32|0,Oe=at+20|0,Fe=at+8|0,et=at+4|0,Xe=at,l=n[l>>2]|0,l|0){Ge=Oe+4|0,Q=Oe+8|0,O=Fe+4|0,M=Fe+8|0,q=Fe+8|0,se=Oe+8|0;do{if(B=l+4|0,k=hT(B)|0,k|0){if(d=Rw(k)|0,n[Oe>>2]=0,n[Ge>>2]=0,n[Q>>2]=0,f=(Nw(k)|0)+1|0,wLe(Oe,f),f|0)for(;f=f+-1|0,xc(Fe,n[d>>2]|0),m=n[Ge>>2]|0,m>>>0<(n[se>>2]|0)>>>0?(n[m>>2]=n[Fe>>2],n[Ge>>2]=(n[Ge>>2]|0)+4):gT(Oe,Fe),f;)d=d+4|0;f=Lw(k)|0,n[Fe>>2]=0,n[O>>2]=0,n[M>>2]=0;e:do if(n[f>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?ILe(Fe,f):(n[d>>2]=n[f>>2],n[O>>2]=(n[O>>2]|0)+4),f=f+4|0,!(n[f>>2]|0))break e;d=n[O>>2]|0,m=n[q>>2]|0}while(0);n[et>>2]=cD(B)|0,n[Xe>>2]=Rr(k)|0,BLe(c,s,et,Xe,Oe,Fe),dT(Fe),$A(Oe)}l=n[l>>2]|0}while((l|0)!=0)}C=at}function hT(s){return s=s|0,n[s+12>>2]|0}function Rw(s){return s=s|0,n[s+12>>2]|0}function Nw(s){return s=s|0,n[s+16>>2]|0}function wLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=n[s>>2]|0,(n[s+8>>2]|0)-f>>2>>>0>>0&&(L9(c,l,(n[s+4>>2]|0)-f>>2,s+8|0),M9(s,c),O9(c)),C=d}function gT(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=N9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,O=(n[s+8>>2]|0)-k|0,Q=O>>1,L9(c,O>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,M9(s,c),O9(c),C=B;return}}function Lw(s){return s=s|0,n[s+8>>2]|0}function ILe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=R9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,O=(n[s+8>>2]|0)-k|0,Q=O>>1,jLe(c,O>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,qLe(s,c),GLe(c),C=B;return}}function cD(s){return s=s|0,n[s>>2]|0}function BLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,vLe(s,l,c,f,d,m)}function dT(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function $A(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function vLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+48|0,M=B+40|0,k=B+32|0,q=B+24|0,Q=B+12|0,O=B,Va(k),s=da(s)|0,n[q>>2]=n[l>>2],c=n[c>>2]|0,f=n[f>>2]|0,mT(Q,d),DLe(O,m),n[M>>2]=n[q>>2],PLe(s,M,c,f,Q,O),dT(O),$A(Q),Ka(k),C=B}function mT(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(_Le(s,f),HLe(s,n[l>>2]|0,n[c>>2]|0,f))}function DLe(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(OLe(s,f),ULe(s,n[l>>2]|0,n[c>>2]|0,f))}function PLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+32|0,M=B+28|0,q=B+24|0,k=B+12|0,Q=B,O=Pl(SLe()|0)|0,n[q>>2]=n[l>>2],n[M>>2]=n[q>>2],l=Qg(M)|0,c=b9(c)|0,f=yT(f)|0,n[k>>2]=n[d>>2],M=d+4|0,n[k+4>>2]=n[M>>2],q=d+8|0,n[k+8>>2]=n[q>>2],n[q>>2]=0,n[M>>2]=0,n[d>>2]=0,d=ET(k)|0,n[Q>>2]=n[m>>2],M=m+4|0,n[Q+4>>2]=n[M>>2],q=m+8|0,n[Q+8>>2]=n[q>>2],n[q>>2]=0,n[M>>2]=0,n[m>>2]=0,ao(0,O|0,s|0,l|0,c|0,f|0,d|0,xLe(Q)|0)|0,dT(Q),$A(k),C=B}function SLe(){var s=0;return o[7968]|0||(LLe(10708),s=7968,n[s>>2]=1,n[s+4>>2]=0),10708}function Qg(s){return s=s|0,Q9(s)|0}function b9(s){return s=s|0,k9(s)|0}function yT(s){return s=s|0,oD(s)|0}function ET(s){return s=s|0,kLe(s)|0}function xLe(s){return s=s|0,bLe(s)|0}function bLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=k9(n[(n[s>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function k9(s){return s=s|0,s|0}function kLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=Q9((n[s>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function Q9(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(F9()|0)|0,f?(FF(l,f),TF(c,l),fUe(s,c),s=RF(l)|0):s=QLe(s)|0,C=d,s|0}function F9(){var s=0;return o[7960]|0||(NLe(10664),tr(25,10664,U|0)|0,s=7960,n[s>>2]=1,n[s+4>>2]=0),10664}function QLe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(4)|0,n[k>>2]=n[s>>2],m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],T9(s,m,d),n[f>>2]=s,C=c,l|0}function T9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1656,n[c+12>>2]=l,n[s+4>>2]=c}function FLe(s){s=s|0,Jm(s),gt(s)}function TLe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function RLe(s){s=s|0,gt(s)}function NLe(s){s=s|0,Bp(s)}function LLe(s){s=s|0,Sl(s,MLe()|0,5)}function MLe(){return 1676}function OLe(s,l){s=s|0,l=l|0;var c=0;if((R9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function ULe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function R9(s){return s=s|0,1073741823}function _Le(s,l){s=s|0,l=l|0;var c=0;if((N9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function HLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N9(s){return s=s|0,1073741823}function jLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function qLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function GLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function L9(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function M9(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function O9(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function YLe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;if(Fe=C,C=C+32|0,M=Fe+20|0,q=Fe+12|0,O=Fe+16|0,se=Fe+4|0,Ge=Fe,Oe=Fe+8|0,k=P9()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(Q=n[k+8>>2]|0,k=n[k+4>>2]|0;xc(M,B),WLe(s,M,k,Q),m=m+4|0,B=n[m>>2]|0,B;)Q=Q+1|0,k=k+1|0;if(m=S9()|0,B=n[m>>2]|0,B|0)do xc(M,B),n[q>>2]=n[m+4>>2],VLe(l,M,q),m=m+8|0,B=n[m>>2]|0;while((B|0)!=0);if(m=n[(Gm()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,xc(M,n[(Ym(l)|0)>>2]|0),n[q>>2]=fT(l)|0,KLe(c,M,q),m=n[m>>2]|0;while((m|0)!=0);if(xc(O,0),m=pT()|0,n[M>>2]=n[O>>2],x9(M,m,d),m=n[(Gm()|0)>>2]|0,m|0){s=M+4|0,l=M+8|0,c=M+8|0;do{if(Q=n[m+4>>2]|0,xc(q,n[(Ym(Q)|0)>>2]|0),JLe(se,U9(Q)|0),B=n[se>>2]|0,B|0){n[M>>2]=0,n[s>>2]=0,n[l>>2]=0;do xc(Ge,n[(Ym(n[B+4>>2]|0)|0)>>2]|0),k=n[s>>2]|0,k>>>0<(n[c>>2]|0)>>>0?(n[k>>2]=n[Ge>>2],n[s>>2]=(n[s>>2]|0)+4):gT(M,Ge),B=n[B>>2]|0;while((B|0)!=0);zLe(f,q,M),$A(M)}n[Oe>>2]=n[q>>2],O=_9(Q)|0,n[M>>2]=n[Oe>>2],x9(M,O,d),l5(se),m=n[m>>2]|0}while((m|0)!=0)}C=Fe}function WLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,lMe(s,l,c,f)}function VLe(s,l,c){s=s|0,l=l|0,c=c|0,aMe(s,l,c)}function Ym(s){return s=s|0,s|0}function KLe(s,l,c){s=s|0,l=l|0,c=c|0,nMe(s,l,c)}function U9(s){return s=s|0,s+16|0}function JLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(m=C,C=C+16|0,d=m+8|0,c=m,n[s>>2]=0,f=n[l>>2]|0,n[d>>2]=f,n[c>>2]=s,c=rMe(c)|0,f|0){if(f=Vt(12)|0,B=(H9(d)|0)+4|0,s=n[B+4>>2]|0,l=f+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=s,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)s=f;else for(l=f;s=Vt(12)|0,Q=(H9(d)|0)+4|0,k=n[Q+4>>2]|0,B=s+4|0,n[B>>2]=n[Q>>2],n[B+4>>2]=k,n[l>>2]=s,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=s;n[s>>2]=n[c>>2],n[c>>2]=f}C=m}function zLe(s,l,c){s=s|0,l=l|0,c=c|0,XLe(s,l,c)}function _9(s){return s=s|0,s+24|0}function XLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+24|0,d=f+16|0,k=f+12|0,m=f,Va(d),s=da(s)|0,n[k>>2]=n[l>>2],mT(m,c),n[B>>2]=n[k>>2],ZLe(s,B,m),$A(m),Ka(d),C=f}function ZLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+16|0,k=f+12|0,d=f,m=Pl($Le()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Qg(B)|0,n[d>>2]=n[c>>2],B=c+4|0,n[d+4>>2]=n[B>>2],k=c+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[c>>2]=0,oo(0,m|0,s|0,l|0,ET(d)|0)|0,$A(d),C=f}function $Le(){var s=0;return o[7976]|0||(eMe(10720),s=7976,n[s>>2]=1,n[s+4>>2]=0),10720}function eMe(s){s=s|0,Sl(s,tMe()|0,2)}function tMe(){return 1732}function rMe(s){return s=s|0,n[s>>2]|0}function H9(s){return s=s|0,n[s>>2]|0}function nMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Va(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],j9(s,m,c),Ka(d),C=f}function j9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+4|0,B=f,d=Pl(iMe()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=Qg(m)|0,oo(0,d|0,s|0,l|0,b9(c)|0)|0,C=f}function iMe(){var s=0;return o[7984]|0||(sMe(10732),s=7984,n[s>>2]=1,n[s+4>>2]=0),10732}function sMe(s){s=s|0,Sl(s,oMe()|0,2)}function oMe(){return 1744}function aMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Va(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],j9(s,m,c),Ka(d),C=f}function lMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Va(m),s=da(s)|0,n[k>>2]=n[l>>2],c=o[c>>0]|0,f=o[f>>0]|0,n[B>>2]=n[k>>2],cMe(s,B,c,f),Ka(m),C=d}function cMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,B=d+4|0,k=d,m=Pl(uMe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Qg(B)|0,c=Wm(c)|0,pc(0,m|0,s|0,l|0,c|0,Wm(f)|0)|0,C=d}function uMe(){var s=0;return o[7992]|0||(fMe(10744),s=7992,n[s>>2]=1,n[s+4>>2]=0),10744}function Wm(s){return s=s|0,AMe(s)|0}function AMe(s){return s=s|0,s&255|0}function fMe(s){s=s|0,Sl(s,pMe()|0,3)}function pMe(){return 1756}function hMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;switch(se=C,C=C+32|0,k=se+8|0,Q=se+4|0,O=se+20|0,M=se,OF(s,0),f=AUe(l)|0,n[k>>2]=0,q=k+4|0,n[q>>2]=0,n[k+8>>2]=0,f<<24>>24){case 0:{o[O>>0]=0,gMe(Q,c,O),uD(s,Q)|0,qA(Q);break}case 8:{q=DT(l)|0,o[O>>0]=8,xc(M,n[q+4>>2]|0),dMe(Q,c,O,M,q+8|0),uD(s,Q)|0,qA(Q);break}case 9:{if(m=DT(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,xc(Q,n[d>>2]|0),f=n[q>>2]|0,f>>>0<(n[B>>2]|0)>>>0?(n[f>>2]=n[Q>>2],n[q>>2]=(n[q>>2]|0)+4):gT(k,Q),l;)d=d+4|0;o[O>>0]=9,xc(M,n[m+8>>2]|0),mMe(Q,c,O,M,k),uD(s,Q)|0,qA(Q);break}default:q=DT(l)|0,o[O>>0]=f,xc(M,n[q+4>>2]|0),yMe(Q,c,O,M),uD(s,Q)|0,qA(Q)}$A(k),C=se}function gMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Va(d),l=da(l)|0,QMe(s,l,o[c>>0]|0),Ka(d),C=f}function uD(s,l){s=s|0,l=l|0;var c=0;return c=n[s>>2]|0,c|0&&PA(c|0),n[s>>2]=n[l>>2],n[l>>2]=0,s|0}function dMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+32|0,k=m+16|0,B=m+8|0,Q=m,Va(B),l=da(l)|0,c=o[c>>0]|0,n[Q>>2]=n[f>>2],d=n[d>>2]|0,n[k>>2]=n[Q>>2],SMe(s,l,c,k,d),Ka(B),C=m}function mMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0;m=C,C=C+32|0,Q=m+24|0,B=m+16|0,O=m+12|0,k=m,Va(B),l=da(l)|0,c=o[c>>0]|0,n[O>>2]=n[f>>2],mT(k,d),n[Q>>2]=n[O>>2],BMe(s,l,c,Q,k),$A(k),Ka(B),C=m}function yMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Va(m),l=da(l)|0,c=o[c>>0]|0,n[k>>2]=n[f>>2],n[B>>2]=n[k>>2],EMe(s,l,c,B),Ka(m),C=d}function EMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+4|0,k=d,B=Pl(CMe()|0)|0,c=Wm(c)|0,n[k>>2]=n[f>>2],n[m>>2]=n[k>>2],AD(s,oo(0,B|0,l|0,c|0,Qg(m)|0)|0),C=d}function CMe(){var s=0;return o[8e3]|0||(wMe(10756),s=8e3,n[s>>2]=1,n[s+4>>2]=0),10756}function AD(s,l){s=s|0,l=l|0,OF(s,l)}function wMe(s){s=s|0,Sl(s,IMe()|0,2)}function IMe(){return 1772}function BMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0;m=C,C=C+32|0,Q=m+16|0,O=m+12|0,B=m,k=Pl(vMe()|0)|0,c=Wm(c)|0,n[O>>2]=n[f>>2],n[Q>>2]=n[O>>2],f=Qg(Q)|0,n[B>>2]=n[d>>2],Q=d+4|0,n[B+4>>2]=n[Q>>2],O=d+8|0,n[B+8>>2]=n[O>>2],n[O>>2]=0,n[Q>>2]=0,n[d>>2]=0,AD(s,pc(0,k|0,l|0,c|0,f|0,ET(B)|0)|0),$A(B),C=m}function vMe(){var s=0;return o[8008]|0||(DMe(10768),s=8008,n[s>>2]=1,n[s+4>>2]=0),10768}function DMe(s){s=s|0,Sl(s,PMe()|0,3)}function PMe(){return 1784}function SMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,k=m+4|0,Q=m,B=Pl(xMe()|0)|0,c=Wm(c)|0,n[Q>>2]=n[f>>2],n[k>>2]=n[Q>>2],f=Qg(k)|0,AD(s,pc(0,B|0,l|0,c|0,f|0,yT(d)|0)|0),C=m}function xMe(){var s=0;return o[8016]|0||(bMe(10780),s=8016,n[s>>2]=1,n[s+4>>2]=0),10780}function bMe(s){s=s|0,Sl(s,kMe()|0,3)}function kMe(){return 1800}function QMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=Pl(FMe()|0)|0,AD(s,Qn(0,f|0,l|0,Wm(c)|0)|0)}function FMe(){var s=0;return o[8024]|0||(TMe(10792),s=8024,n[s>>2]=1,n[s+4>>2]=0),10792}function TMe(s){s=s|0,Sl(s,RMe()|0,1)}function RMe(){return 1816}function NMe(){LMe(),MMe(),OMe()}function LMe(){n[2702]=d7(65536)|0}function MMe(){iOe(10856)}function OMe(){UMe(10816)}function UMe(s){s=s|0,_Me(s,5044),HMe(s)|0}function _Me(s,l){s=s|0,l=l|0;var c=0;c=F9()|0,n[s>>2]=c,ZMe(c,l),xp(n[s>>2]|0)}function HMe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,jMe()|0),s|0}function jMe(){var s=0;return o[8032]|0||(q9(10820),tr(64,10820,U|0)|0,s=8032,n[s>>2]=1,n[s+4>>2]=0),Rr(10820)|0||q9(10820),10820}function q9(s){s=s|0,YMe(s),kg(s,25)}function qMe(s){s=s|0,GMe(s+24|0)}function GMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function YMe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,18,l,JMe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function WMe(s,l){s=s|0,l=l|0,VMe(s,l)}function VMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;c=C,C=C+16|0,f=c,d=c+4|0,Sg(d,l),n[f>>2]=xg(d,l)|0,KMe(s,f),C=c}function KMe(s,l){s=s|0,l=l|0,G9(s+4|0,n[l>>2]|0),o[s+8>>0]=1}function G9(s,l){s=s|0,l=l|0,n[s>>2]=l}function JMe(){return 1824}function zMe(s){return s=s|0,XMe(s)|0}function XMe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(4)|0,Sg(d,s),G9(k,xg(d,s)|0),m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],T9(s,m,d),n[f>>2]=s,C=c,l|0}function Wa(s){s=s|0;var l=0,c=0;return s=s+7&-8,s>>>0<=32768&&(l=n[2701]|0,s>>>0<=(65536-l|0)>>>0)?(c=(n[2702]|0)+l|0,n[2701]=l+s,s=c):(s=d7(s+8|0)|0,n[s>>2]=n[2703],n[2703]=s,s=s+8|0),s|0}function ZMe(s,l){s=s|0,l=l|0,n[s>>2]=$Me()|0,n[s+4>>2]=eOe()|0,n[s+12>>2]=l,n[s+8>>2]=tOe()|0,n[s+32>>2]=9}function $Me(){return 11744}function eOe(){return 1832}function tOe(){return lD()|0}function rOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(nOe(c),gt(c)):l|0&>(l)}function nOe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function iOe(s){s=s|0,sOe(s,5052),oOe(s)|0,aOe(s,5058,26)|0,lOe(s,5069,1)|0,cOe(s,5077,10)|0,uOe(s,5087,19)|0,AOe(s,5094,27)|0}function sOe(s,l){s=s|0,l=l|0;var c=0;c=nUe()|0,n[s>>2]=c,iUe(c,l),xp(n[s>>2]|0)}function oOe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,q4e()|0),s|0}function aOe(s,l,c){return s=s|0,l=l|0,c=c|0,D4e(s,pn(l)|0,c,0),s|0}function lOe(s,l,c){return s=s|0,l=l|0,c=c|0,u4e(s,pn(l)|0,c,0),s|0}function cOe(s,l,c){return s=s|0,l=l|0,c=c|0,jOe(s,pn(l)|0,c,0),s|0}function uOe(s,l,c){return s=s|0,l=l|0,c=c|0,SOe(s,pn(l)|0,c,0),s|0}function Y9(s,l){s=s|0,l=l|0;var c=0,f=0;e:for(;;){for(c=n[2703]|0;;){if((c|0)==(l|0))break e;if(f=n[c>>2]|0,n[2703]=f,!c)c=f;else break}gt(c)}n[2701]=s}function AOe(s,l,c){return s=s|0,l=l|0,c=c|0,fOe(s,pn(l)|0,c,0),s|0}function fOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=CT()|0,s=pOe(c)|0,hn(m,l,d,s,hOe(c,f)|0,f)}function CT(){var s=0,l=0;if(o[8040]|0||(V9(10860),tr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10860)|0)){s=10860,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));V9(10860)}return 10860}function pOe(s){return s=s|0,s|0}function hOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=CT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(W9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(gOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function W9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function gOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=dOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,mOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,W9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,yOe(s,d),EOe(d),C=k;return}}function dOe(s){return s=s|0,536870911}function mOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function yOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function EOe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function V9(s){s=s|0,IOe(s)}function COe(s){s=s|0,wOe(s+24|0)}function wOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function IOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,11,l,BOe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function BOe(){return 1840}function vOe(s,l,c){s=s|0,l=l|0,c=c|0,POe(n[(DOe(s)|0)>>2]|0,l,c)}function DOe(s){return s=s|0,(n[(CT()|0)+24>>2]|0)+(s<<3)|0}function POe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+1|0,d=f,Sg(m,l),l=xg(m,l)|0,Sg(d,c),c=xg(d,c)|0,tf[s&31](l,c),C=f}function SOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=wT()|0,s=xOe(c)|0,hn(m,l,d,s,bOe(c,f)|0,f)}function wT(){var s=0,l=0;if(o[8048]|0||(J9(10896),tr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10896)|0)){s=10896,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));J9(10896)}return 10896}function xOe(s){return s=s|0,s|0}function bOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=wT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(K9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(kOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function K9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function kOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=QOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,FOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,K9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,TOe(s,d),ROe(d),C=k;return}}function QOe(s){return s=s|0,536870911}function FOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function TOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ROe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function J9(s){s=s|0,MOe(s)}function NOe(s){s=s|0,LOe(s+24|0)}function LOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function MOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,11,l,OOe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function OOe(){return 1852}function UOe(s,l){return s=s|0,l=l|0,HOe(n[(_Oe(s)|0)>>2]|0,l)|0}function _Oe(s){return s=s|0,(n[(wT()|0)+24>>2]|0)+(s<<3)|0}function HOe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Sg(f,l),l=xg(f,l)|0,l=oD(Ng[s&31](l)|0)|0,C=c,l|0}function jOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=IT()|0,s=qOe(c)|0,hn(m,l,d,s,GOe(c,f)|0,f)}function IT(){var s=0,l=0;if(o[8056]|0||(X9(10932),tr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10932)|0)){s=10932,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));X9(10932)}return 10932}function qOe(s){return s=s|0,s|0}function GOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=IT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(YOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function YOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=WOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,VOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,KOe(s,d),JOe(d),C=k;return}}function WOe(s){return s=s|0,536870911}function VOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function KOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JOe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function X9(s){s=s|0,ZOe(s)}function zOe(s){s=s|0,XOe(s+24|0)}function XOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function ZOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,7,l,$Oe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function $Oe(){return 1860}function e4e(s,l,c){return s=s|0,l=l|0,c=c|0,r4e(n[(t4e(s)|0)>>2]|0,l,c)|0}function t4e(s){return s=s|0,(n[(IT()|0)+24>>2]|0)+(s<<3)|0}function r4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+32|0,B=f+12|0,m=f+8|0,k=f,Q=f+16|0,d=f+4|0,n4e(Q,l),i4e(k,Q,l),vp(d,c),c=Dp(d,c)|0,n[B>>2]=n[k>>2],_w[s&15](m,B,c),c=s4e(m)|0,qA(m),Pp(d),C=f,c|0}function n4e(s,l){s=s|0,l=l|0}function i4e(s,l,c){s=s|0,l=l|0,c=c|0,o4e(s,c)}function s4e(s){return s=s|0,da(s)|0}function o4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+16|0,c=d,f=l,f&1?(a4e(c,0),ii(f|0,c|0)|0,l4e(s,c),c4e(c)):n[s>>2]=n[l>>2],C=d}function a4e(s,l){s=s|0,l=l|0,e5(s,l),n[s+4>>2]=0,o[s+8>>0]=0}function l4e(s,l){s=s|0,l=l|0,n[s>>2]=n[l+4>>2]}function c4e(s){s=s|0,o[s+8>>0]=0}function u4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=BT()|0,s=A4e(c)|0,hn(m,l,d,s,f4e(c,f)|0,f)}function BT(){var s=0,l=0;if(o[8064]|0||($9(10968),tr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10968)|0)){s=10968,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));$9(10968)}return 10968}function A4e(s){return s=s|0,s|0}function f4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=BT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(Z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(p4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function Z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function p4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=h4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,g4e(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,Z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,d4e(s,d),m4e(d),C=k;return}}function h4e(s){return s=s|0,536870911}function g4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function d4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function m4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function $9(s){s=s|0,C4e(s)}function y4e(s){s=s|0,E4e(s+24|0)}function E4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function C4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,1,l,w4e()|0,5),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function w4e(){return 1872}function I4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,v4e(n[(B4e(s)|0)>>2]|0,l,c,f,d,m)}function B4e(s){return s=s|0,(n[(BT()|0)+24>>2]|0)+(s<<3)|0}function v4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+32|0,k=B+16|0,Q=B+12|0,O=B+8|0,M=B+4|0,q=B,vp(k,l),l=Dp(k,l)|0,vp(Q,c),c=Dp(Q,c)|0,vp(O,f),f=Dp(O,f)|0,vp(M,d),d=Dp(M,d)|0,vp(q,m),m=Dp(q,m)|0,w7[s&1](l,c,f,d,m),Pp(q),Pp(M),Pp(O),Pp(Q),Pp(k),C=B}function D4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=vT()|0,s=P4e(c)|0,hn(m,l,d,s,S4e(c,f)|0,f)}function vT(){var s=0,l=0;if(o[8072]|0||(t7(11004),tr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Rr(11004)|0)){s=11004,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t7(11004)}return 11004}function P4e(s){return s=s|0,s|0}function S4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=vT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(e7(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(x4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function e7(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function x4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=b4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,k4e(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,e7(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,Q4e(s,d),F4e(d),C=k;return}}function b4e(s){return s=s|0,536870911}function k4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function Q4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function F4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function t7(s){s=s|0,N4e(s)}function T4e(s){s=s|0,R4e(s+24|0)}function R4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function N4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,12,l,L4e()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function L4e(){return 1896}function M4e(s,l,c){s=s|0,l=l|0,c=c|0,U4e(n[(O4e(s)|0)>>2]|0,l,c)}function O4e(s){return s=s|0,(n[(vT()|0)+24>>2]|0)+(s<<3)|0}function U4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+4|0,d=f,_4e(m,l),l=H4e(m,l)|0,vp(d,c),c=Dp(d,c)|0,tf[s&31](l,c),Pp(d),C=f}function _4e(s,l){s=s|0,l=l|0}function H4e(s,l){return s=s|0,l=l|0,j4e(l)|0}function j4e(s){return s=s|0,s|0}function q4e(){var s=0;return o[8080]|0||(r7(11040),tr(70,11040,U|0)|0,s=8080,n[s>>2]=1,n[s+4>>2]=0),Rr(11040)|0||r7(11040),11040}function r7(s){s=s|0,W4e(s),kg(s,71)}function G4e(s){s=s|0,Y4e(s+24|0)}function Y4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function W4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,7,l,z4e()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function V4e(s){s=s|0,K4e(s)}function K4e(s){s=s|0,J4e(s)}function J4e(s){s=s|0,o[s+8>>0]=1}function z4e(){return 1936}function X4e(){return Z4e()|0}function Z4e(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,m=s+4|0,n[m>>2]=Vt(1)|0,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],$4e(f,m,d),n[c>>2]=f,C=l,s|0}function $4e(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1916,n[c+12>>2]=l,n[s+4>>2]=c}function eUe(s){s=s|0,Jm(s),gt(s)}function tUe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function rUe(s){s=s|0,gt(s)}function nUe(){var s=0;return o[8088]|0||(uUe(11076),tr(25,11076,U|0)|0,s=8088,n[s>>2]=1,n[s+4>>2]=0),11076}function iUe(s,l){s=s|0,l=l|0,n[s>>2]=sUe()|0,n[s+4>>2]=oUe()|0,n[s+12>>2]=l,n[s+8>>2]=aUe()|0,n[s+32>>2]=10}function sUe(){return 11745}function oUe(){return 1940}function aUe(){return aD()|0}function lUe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(cUe(c),gt(c)):l|0&>(l)}function cUe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function uUe(s){s=s|0,Bp(s)}function xc(s,l){s=s|0,l=l|0,n[s>>2]=l}function DT(s){return s=s|0,n[s>>2]|0}function AUe(s){return s=s|0,o[n[s>>2]>>0]|0}function fUe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,n[f>>2]=n[s>>2],pUe(l,f)|0,C=c}function pUe(s,l){s=s|0,l=l|0;var c=0;return c=hUe(n[s>>2]|0,l)|0,l=s+4|0,n[(n[l>>2]|0)+8>>2]=c,n[(n[l>>2]|0)+8>>2]|0}function hUe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Va(f),s=da(s)|0,l=gUe(s,n[l>>2]|0)|0,Ka(f),C=c,l|0}function Va(s){s=s|0,n[s>>2]=n[2701],n[s+4>>2]=n[2703]}function gUe(s,l){s=s|0,l=l|0;var c=0;return c=Pl(dUe()|0)|0,Qn(0,c|0,s|0,yT(l)|0)|0}function Ka(s){s=s|0,Y9(n[s>>2]|0,n[s+4>>2]|0)}function dUe(){var s=0;return o[8096]|0||(mUe(11120),s=8096,n[s>>2]=1,n[s+4>>2]=0),11120}function mUe(s){s=s|0,Sl(s,yUe()|0,1)}function yUe(){return 1948}function EUe(){CUe()}function CUe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;if(Oe=C,C=C+16|0,M=Oe+4|0,q=Oe,Ni(65536,10804,n[2702]|0,10812),c=P9()|0,l=n[c>>2]|0,s=n[l>>2]|0,s|0)for(f=n[c+8>>2]|0,c=n[c+4>>2]|0;uc(s|0,u[c>>0]|0|0,o[f>>0]|0),l=l+4|0,s=n[l>>2]|0,s;)f=f+1|0,c=c+1|0;if(s=S9()|0,l=n[s>>2]|0,l|0)do uu(l|0,n[s+4>>2]|0),s=s+8|0,l=n[s>>2]|0;while((l|0)!=0);uu(wUe()|0,5167),O=Gm()|0,s=n[O>>2]|0;e:do if(s|0){do IUe(n[s+4>>2]|0),s=n[s>>2]|0;while((s|0)!=0);if(s=n[O>>2]|0,s|0){Q=O;do{for(;d=s,s=n[s>>2]|0,d=n[d+4>>2]|0,!!(BUe(d)|0);)if(n[q>>2]=Q,n[M>>2]=n[q>>2],vUe(O,M)|0,!s)break e;if(DUe(d),Q=n[Q>>2]|0,l=n7(d)|0,m=Hi()|0,B=C,C=C+((1*(l<<2)|0)+15&-16)|0,k=C,C=C+((1*(l<<2)|0)+15&-16)|0,l=n[(U9(d)|0)>>2]|0,l|0)for(c=B,f=k;n[c>>2]=n[(Ym(n[l+4>>2]|0)|0)>>2],n[f>>2]=n[l+8>>2],l=n[l>>2]|0,l;)c=c+4|0,f=f+4|0;Fe=Ym(d)|0,l=PUe(d)|0,c=n7(d)|0,f=SUe(d)|0,Au(Fe|0,l|0,B|0,k|0,c|0,f|0,fT(d)|0),_i(m|0)}while((s|0)!=0)}}while(0);if(s=n[(pT()|0)>>2]|0,s|0)do Fe=s+4|0,O=hT(Fe)|0,d=Lw(O)|0,m=Rw(O)|0,B=(Nw(O)|0)+1|0,k=fD(O)|0,Q=i7(Fe)|0,O=Rr(O)|0,M=cD(Fe)|0,q=PT(Fe)|0,El(0,d|0,m|0,B|0,k|0,Q|0,O|0,M|0,q|0,ST(Fe)|0),s=n[s>>2]|0;while((s|0)!=0);s=n[(Gm()|0)>>2]|0;e:do if(s|0){t:for(;;){if(l=n[s+4>>2]|0,l|0&&(se=n[(Ym(l)|0)>>2]|0,Ge=n[(_9(l)|0)>>2]|0,Ge|0)){c=Ge;do{l=c+4|0,f=hT(l)|0;r:do if(f|0)switch(Rr(f)|0){case 0:break t;case 4:case 3:case 2:{k=Lw(f)|0,Q=Rw(f)|0,O=(Nw(f)|0)+1|0,M=fD(f)|0,q=Rr(f)|0,Fe=cD(l)|0,El(se|0,k|0,Q|0,O|0,M|0,0,q|0,Fe|0,PT(l)|0,ST(l)|0);break r}case 1:{B=Lw(f)|0,k=Rw(f)|0,Q=(Nw(f)|0)+1|0,O=fD(f)|0,M=i7(l)|0,q=Rr(f)|0,Fe=cD(l)|0,El(se|0,B|0,k|0,Q|0,O|0,M|0,q|0,Fe|0,PT(l)|0,ST(l)|0);break r}case 5:{O=Lw(f)|0,M=Rw(f)|0,q=(Nw(f)|0)+1|0,Fe=fD(f)|0,El(se|0,O|0,M|0,q|0,Fe|0,xUe(f)|0,Rr(f)|0,0,0,0);break r}default:break r}while(0);c=n[c>>2]|0}while((c|0)!=0)}if(s=n[s>>2]|0,!s)break e}Tt()}while(0);Ce(),C=Oe}function wUe(){return 11703}function IUe(s){s=s|0,o[s+40>>0]=0}function BUe(s){return s=s|0,(o[s+40>>0]|0)!=0|0}function vUe(s,l){return s=s|0,l=l|0,l=bUe(l)|0,s=n[l>>2]|0,n[l>>2]=n[s>>2],gt(s),n[l>>2]|0}function DUe(s){s=s|0,o[s+40>>0]=1}function n7(s){return s=s|0,n[s+20>>2]|0}function PUe(s){return s=s|0,n[s+8>>2]|0}function SUe(s){return s=s|0,n[s+32>>2]|0}function fD(s){return s=s|0,n[s+4>>2]|0}function i7(s){return s=s|0,n[s+4>>2]|0}function PT(s){return s=s|0,n[s+8>>2]|0}function ST(s){return s=s|0,n[s+16>>2]|0}function xUe(s){return s=s|0,n[s+20>>2]|0}function bUe(s){return s=s|0,n[s>>2]|0}function pD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0;Lt=C,C=C+16|0,se=Lt;do if(s>>>0<245){if(O=s>>>0<11?16:s+11&-8,s=O>>>3,q=n[2783]|0,c=q>>>s,c&3|0)return l=(c&1^1)+s|0,s=11172+(l<<1<<2)|0,c=s+8|0,f=n[c>>2]|0,d=f+8|0,m=n[d>>2]|0,(s|0)==(m|0)?n[2783]=q&~(1<>2]=s,n[c>>2]=m),qe=l<<3,n[f+4>>2]=qe|3,qe=f+qe+4|0,n[qe>>2]=n[qe>>2]|1,qe=d,C=Lt,qe|0;if(M=n[2785]|0,O>>>0>M>>>0){if(c|0)return l=2<>>12&16,l=l>>>B,c=l>>>5&8,l=l>>>c,d=l>>>2&4,l=l>>>d,s=l>>>1&2,l=l>>>s,f=l>>>1&1,f=(c|B|d|s|f)+(l>>>f)|0,l=11172+(f<<1<<2)|0,s=l+8|0,d=n[s>>2]|0,B=d+8|0,c=n[B>>2]|0,(l|0)==(c|0)?(s=q&~(1<>2]=l,n[s>>2]=c,s=q),m=(f<<3)-O|0,n[d+4>>2]=O|3,f=d+O|0,n[f+4>>2]=m|1,n[f+m>>2]=m,M|0&&(d=n[2788]|0,l=M>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=c),n[2785]=m,n[2788]=f,qe=B,C=Lt,qe|0;if(k=n[2784]|0,k){if(c=(k&0-k)+-1|0,B=c>>>12&16,c=c>>>B,m=c>>>5&8,c=c>>>m,Q=c>>>2&4,c=c>>>Q,f=c>>>1&2,c=c>>>f,s=c>>>1&1,s=n[11436+((m|B|Q|f|s)+(c>>>s)<<2)>>2]|0,c=(n[s+4>>2]&-8)-O|0,f=n[s+16+(((n[s+16>>2]|0)==0&1)<<2)>>2]|0,!f)Q=s,m=c;else{do B=(n[f+4>>2]&-8)-O|0,Q=B>>>0>>0,c=Q?B:c,s=Q?f:s,f=n[f+16+(((n[f+16>>2]|0)==0&1)<<2)>>2]|0;while((f|0)!=0);Q=s,m=c}if(B=Q+O|0,Q>>>0>>0){d=n[Q+24>>2]|0,l=n[Q+12>>2]|0;do if((l|0)==(Q|0)){if(s=Q+20|0,l=n[s>>2]|0,!l&&(s=Q+16|0,l=n[s>>2]|0,!l)){c=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0,c=l}else c=n[Q+8>>2]|0,n[c+12>>2]=l,n[l+8>>2]=c,c=l;while(0);do if(d|0){if(l=n[Q+28>>2]|0,s=11436+(l<<2)|0,(Q|0)==(n[s>>2]|0)){if(n[s>>2]=c,!c){n[2784]=k&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=d,l=n[Q+16>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),l=n[Q+20>>2]|0,l|0&&(n[c+20>>2]=l,n[l+24>>2]=c)}while(0);return m>>>0<16?(qe=m+O|0,n[Q+4>>2]=qe|3,qe=Q+qe+4|0,n[qe>>2]=n[qe>>2]|1):(n[Q+4>>2]=O|3,n[B+4>>2]=m|1,n[B+m>>2]=m,M|0&&(f=n[2788]|0,l=M>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=q|l,l=c,s=c+8|0),n[s>>2]=f,n[l+12>>2]=f,n[f+8>>2]=l,n[f+12>>2]=c),n[2785]=m,n[2788]=B),qe=Q+8|0,C=Lt,qe|0}else q=O}else q=O}else q=O}else if(s>>>0<=4294967231)if(s=s+11|0,O=s&-8,Q=n[2784]|0,Q){f=0-O|0,s=s>>>8,s?O>>>0>16777215?k=31:(q=(s+1048320|0)>>>16&8,Ue=s<>>16&4,Ue=Ue<>>16&2,k=14-(M|q|k)+(Ue<>>15)|0,k=O>>>(k+7|0)&1|k<<1):k=0,c=n[11436+(k<<2)>>2]|0;e:do if(!c)c=0,s=0,Ue=57;else for(s=0,B=O<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[c+4>>2]&-8)-O|0,d>>>0>>0)if(d)s=c,f=d;else{s=c,f=0,d=c,Ue=61;break e}if(d=n[c+20>>2]|0,c=n[c+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(c|0)?m:d,d=(c|0)==0,d){c=m,Ue=57;break}else B=B<<((d^1)&1)}while(0);if((Ue|0)==57){if((c|0)==0&(s|0)==0){if(s=2<>>12&16,q=q>>>B,m=q>>>5&8,q=q>>>m,k=q>>>2&4,q=q>>>k,M=q>>>1&2,q=q>>>M,c=q>>>1&1,s=0,c=n[11436+((m|B|k|M|c)+(q>>>c)<<2)>>2]|0}c?(d=c,Ue=61):(k=s,B=f)}if((Ue|0)==61)for(;;)if(Ue=0,c=(n[d+4>>2]&-8)-O|0,q=c>>>0>>0,c=q?c:f,s=q?d:s,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)f=c,Ue=61;else{k=s,B=c;break}if((k|0)!=0&&B>>>0<((n[2785]|0)-O|0)>>>0){if(m=k+O|0,k>>>0>=m>>>0)return qe=0,C=Lt,qe|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(s=k+20|0,l=n[s>>2]|0,!l&&(s=k+16|0,l=n[s>>2]|0,!l)){l=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0}else qe=n[k+8>>2]|0,n[qe+12>>2]=l,n[l+8>>2]=qe;while(0);do if(d){if(s=n[k+28>>2]|0,c=11436+(s<<2)|0,(k|0)==(n[c>>2]|0)){if(n[c>>2]=l,!l){f=Q&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){f=Q;break}n[l+24>>2]=d,s=n[k+16>>2]|0,s|0&&(n[l+16>>2]=s,n[s+24>>2]=l),s=n[k+20>>2]|0,s&&(n[l+20>>2]=s,n[s+24>>2]=l),f=Q}else f=Q;while(0);do if(B>>>0>=16){if(n[k+4>>2]=O|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=c;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(at|Ue|l)+(qe<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,c=11436+(l<<2)|0,n[m+28>>2]=l,s=m+16|0,n[s+4>>2]=0,n[s>>2]=0,s=1<>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}for(s=B<<((l|0)==31?0:25-(l>>>1)|0),c=n[c>>2]|0;;){if((n[c+4>>2]&-8|0)==(B|0)){Ue=97;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=96;break}}if((Ue|0)==96){n[f>>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((Ue|0)==97){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=m,n[Ue>>2]=m,n[m+8>>2]=qe,n[m+12>>2]=c,n[m+24>>2]=0;break}}else qe=B+O|0,n[k+4>>2]=qe|3,qe=k+qe+4|0,n[qe>>2]=n[qe>>2]|1;while(0);return qe=k+8|0,C=Lt,qe|0}else q=O}else q=O;else q=-1;while(0);if(c=n[2785]|0,c>>>0>=q>>>0)return l=c-q|0,s=n[2788]|0,l>>>0>15?(qe=s+q|0,n[2788]=qe,n[2785]=l,n[qe+4>>2]=l|1,n[qe+l>>2]=l,n[s+4>>2]=q|3):(n[2785]=0,n[2788]=0,n[s+4>>2]=c|3,qe=s+c+4|0,n[qe>>2]=n[qe>>2]|1),qe=s+8|0,C=Lt,qe|0;if(B=n[2786]|0,B>>>0>q>>>0)return at=B-q|0,n[2786]=at,qe=n[2789]|0,Ue=qe+q|0,n[2789]=Ue,n[Ue+4>>2]=at|1,n[qe+4>>2]=q|3,qe=qe+8|0,C=Lt,qe|0;if(n[2901]|0?s=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,s=se&-16^1431655768,n[se>>2]=s,n[2901]=s,s=4096),k=q+48|0,Q=q+47|0,m=s+Q|0,d=0-s|0,O=m&d,O>>>0<=q>>>0||(s=n[2893]|0,s|0&&(M=n[2891]|0,se=M+O|0,se>>>0<=M>>>0|se>>>0>s>>>0)))return qe=0,C=Lt,qe|0;e:do if(n[2894]&4)l=0,Ue=133;else{c=n[2789]|0;t:do if(c){for(f=11580;s=n[f>>2]|0,!(s>>>0<=c>>>0&&(Fe=f+4|0,(s+(n[Fe>>2]|0)|0)>>>0>c>>>0));)if(s=n[f+8>>2]|0,s)f=s;else{Ue=118;break t}if(l=m-B&d,l>>>0<2147483647)if(s=kp(l|0)|0,(s|0)==((n[f>>2]|0)+(n[Fe>>2]|0)|0)){if((s|0)!=-1){B=l,m=s,Ue=135;break e}}else f=s,Ue=126;else l=0}else Ue=118;while(0);do if((Ue|0)==118)if(c=kp(0)|0,(c|0)!=-1&&(l=c,Ge=n[2902]|0,Oe=Ge+-1|0,l=((Oe&l|0)==0?0:(Oe+l&0-Ge)-l|0)+O|0,Ge=n[2891]|0,Oe=l+Ge|0,l>>>0>q>>>0&l>>>0<2147483647)){if(Fe=n[2893]|0,Fe|0&&Oe>>>0<=Ge>>>0|Oe>>>0>Fe>>>0){l=0;break}if(s=kp(l|0)|0,(s|0)==(c|0)){B=l,m=c,Ue=135;break e}else f=s,Ue=126}else l=0;while(0);do if((Ue|0)==126){if(c=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(f|0)!=-1)))if((f|0)==-1){l=0;break}else{B=l,m=f,Ue=135;break e}if(s=n[2903]|0,s=Q-l+s&0-s,s>>>0>=2147483647){B=l,m=f,Ue=135;break e}if((kp(s|0)|0)==-1){kp(c|0)|0,l=0;break}else{B=s+l|0,m=f,Ue=135;break e}}while(0);n[2894]=n[2894]|4,Ue=133}while(0);if((Ue|0)==133&&O>>>0<2147483647&&(at=kp(O|0)|0,Fe=kp(0)|0,et=Fe-at|0,Xe=et>>>0>(q+40|0)>>>0,!((at|0)==-1|Xe^1|at>>>0>>0&((at|0)!=-1&(Fe|0)!=-1)^1))&&(B=Xe?et:l,m=at,Ue=135),(Ue|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),Q=n[2789]|0;do if(Q){for(l=11580;;){if(s=n[l>>2]|0,c=l+4|0,f=n[c>>2]|0,(m|0)==(s+f|0)){Ue=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((Ue|0)==145&&(n[l+12>>2]&8|0)==0&&Q>>>0>>0&Q>>>0>=s>>>0){n[c>>2]=f+B,qe=Q+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=Q+qe|0,qe=(n[2786]|0)+(B-qe)|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),c=m+B|0,l=11580;;){if((n[l>>2]|0)==(c|0)){Ue=153;break}if(s=n[l+8>>2]|0,s)l=s;else break}if((Ue|0)==153&&(n[l+12>>2]&8|0)==0){n[l>>2]=m,M=l+4|0,n[M>>2]=(n[M>>2]|0)+B,M=m+8|0,M=m+((M&7|0)==0?0:0-M&7)|0,l=c+8|0,l=c+((l&7|0)==0?0:0-l&7)|0,O=M+q|0,k=l-M-q|0,n[M+4>>2]=q|3;do if((l|0)!=(Q|0)){if((l|0)==(n[2788]|0)){qe=(n[2785]|0)+k|0,n[2785]=qe,n[2788]=O,n[O+4>>2]=qe|1,n[O+qe>>2]=qe;break}if(s=n[l+4>>2]|0,(s&3|0)==1){B=s&-8,f=s>>>3;e:do if(s>>>0<256)if(s=n[l+8>>2]|0,c=n[l+12>>2]|0,(c|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=c,n[c+8>>2]=s;break}else{m=n[l+24>>2]|0,s=n[l+12>>2]|0;do if((s|0)==(l|0)){if(f=l+16|0,c=f+4|0,s=n[c>>2]|0,!s)if(s=n[f>>2]|0,s)c=f;else{s=0;break}for(;;){if(f=s+20|0,d=n[f>>2]|0,d|0){s=d,c=f;continue}if(f=s+16|0,d=n[f>>2]|0,d)s=d,c=f;else break}n[c>>2]=0}else qe=n[l+8>>2]|0,n[qe+12>>2]=s,n[s+8>>2]=qe;while(0);if(!m)break;c=n[l+28>>2]|0,f=11436+(c<<2)|0;do if((l|0)!=(n[f>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=s,!s)break e}else{if(n[f>>2]=s,s|0)break;n[2784]=n[2784]&~(1<>2]=m,c=l+16|0,f=n[c>>2]|0,f|0&&(n[s+16>>2]=f,n[f+24>>2]=s),c=n[c+4>>2]|0,!c)break;n[s+20>>2]=c,n[c+24>>2]=s}while(0);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[O+4>>2]=d|1,n[O+d>>2]=d,l=d>>>3,d>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=O,n[l+12>>2]=O,n[O+8>>2]=l,n[O+12>>2]=c;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(at|Ue|l)+(qe<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(0);if(f=11436+(l<<2)|0,n[O+28>>2]=l,s=O+16|0,n[s+4>>2]=0,n[s>>2]=0,s=n[2784]|0,c=1<>2]=O,n[O+24>>2]=f,n[O+12>>2]=O,n[O+8>>2]=O;break}for(s=d<<((l|0)==31?0:25-(l>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){Ue=194;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=193;break}}if((Ue|0)==193){n[f>>2]=O,n[O+24>>2]=c,n[O+12>>2]=O,n[O+8>>2]=O;break}else if((Ue|0)==194){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=O,n[Ue>>2]=O,n[O+8>>2]=qe,n[O+12>>2]=c,n[O+24>>2]=0;break}}else qe=(n[2786]|0)+k|0,n[2786]=qe,n[2789]=O,n[O+4>>2]=qe|1;while(0);return qe=M+8|0,C=Lt,qe|0}for(l=11580;s=n[l>>2]|0,!(s>>>0<=Q>>>0&&(qe=s+(n[l+4>>2]|0)|0,qe>>>0>Q>>>0));)l=n[l+8>>2]|0;d=qe+-47|0,s=d+8|0,s=d+((s&7|0)==0?0:0-s&7)|0,d=Q+16|0,s=s>>>0>>0?Q:s,l=s+8|0,c=m+8|0,c=(c&7|0)==0?0:0-c&7,Ue=m+c|0,c=B+-40-c|0,n[2789]=Ue,n[2786]=c,n[Ue+4>>2]=c|1,n[Ue+c+4>>2]=40,n[2790]=n[2905],c=s+4|0,n[c>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=s+24|0;do Ue=l,l=l+4|0,n[l>>2]=7;while((Ue+8|0)>>>0>>0);if((s|0)!=(Q|0)){if(m=s-Q|0,n[c>>2]=n[c>>2]&-2,n[Q+4>>2]=m|1,n[s>>2]=m,l=m>>>3,m>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=Q,n[l+12>>2]=Q,n[Q+8>>2]=l,n[Q+12>>2]=c;break}if(l=m>>>8,l?m>>>0>16777215?c=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,c=14-(at|Ue|c)+(qe<>>15)|0,c=m>>>(c+7|0)&1|c<<1):c=0,f=11436+(c<<2)|0,n[Q+28>>2]=c,n[Q+20>>2]=0,n[d>>2]=0,l=n[2784]|0,s=1<>2]=Q,n[Q+24>>2]=f,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}for(s=m<<((c|0)==31?0:25-(c>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(m|0)){Ue=216;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=215;break}}if((Ue|0)==215){n[f>>2]=Q,n[Q+24>>2]=c,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}else if((Ue|0)==216){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=Q,n[Ue>>2]=Q,n[Q+8>>2]=qe,n[Q+12>>2]=c,n[Q+24>>2]=0;break}}}else{qe=n[2787]|0,(qe|0)==0|m>>>0>>0&&(n[2787]=m),n[2895]=m,n[2896]=B,n[2898]=0,n[2792]=n[2901],n[2791]=-1,l=0;do qe=11172+(l<<1<<2)|0,n[qe+12>>2]=qe,n[qe+8>>2]=qe,l=l+1|0;while((l|0)!=32);qe=m+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=m+qe|0,qe=B+-40-qe|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905]}while(0);if(l=n[2786]|0,l>>>0>q>>>0)return at=l-q|0,n[2786]=at,qe=n[2789]|0,Ue=qe+q|0,n[2789]=Ue,n[Ue+4>>2]=at|1,n[qe+4>>2]=q|3,qe=qe+8|0,C=Lt,qe|0}return n[(Vm()|0)>>2]=12,qe=0,C=Lt,qe|0}function hD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(!!s){c=s+-8|0,d=n[2787]|0,s=n[s+-4>>2]|0,l=s&-8,Q=c+l|0;do if(s&1)k=c,B=c;else{if(f=n[c>>2]|0,!(s&3)||(B=c+(0-f)|0,m=f+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(s=Q+4|0,l=n[s>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[s>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(c=f>>>3,f>>>0<256)if(s=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=s,k=B,l=m;break}d=n[B+24>>2]|0,s=n[B+12>>2]|0;do if((s|0)==(B|0)){if(c=B+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{s=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=s,n[s+8>>2]=k;while(0);if(d){if(l=n[B+28>>2]|0,c=11436+(l<<2)|0,(B|0)==(n[c>>2]|0)){if(n[c>>2]=s,!s){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=s,!s){k=B,l=m;break}n[s+24>>2]=d,l=B+16|0,c=n[l>>2]|0,c|0&&(n[s+16>>2]=c,n[c+24>>2]=s),l=n[l+4>>2]|0,l?(n[s+20>>2]=l,n[l+24>>2]=s,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(0);if(!(B>>>0>=Q>>>0)&&(s=Q+4|0,f=n[s>>2]|0,!!(f&1))){if(f&2)n[s>>2]=f&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(s=n[2788]|0,(Q|0)==(n[2789]|0)){if(Q=(n[2786]|0)+l|0,n[2786]=Q,n[2789]=k,n[k+4>>2]=Q|1,(k|0)!=(s|0))return;n[2788]=0,n[2785]=0;return}if((Q|0)==(s|0)){Q=(n[2785]|0)+l|0,n[2785]=Q,n[2788]=B,n[k+4>>2]=Q|1,n[B+Q>>2]=Q;return}d=(f&-8)+l|0,c=f>>>3;do if(f>>>0<256)if(l=n[Q+8>>2]|0,s=n[Q+12>>2]|0,(s|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=s,n[s+8>>2]=l;break}else{m=n[Q+24>>2]|0,s=n[Q+12>>2]|0;do if((s|0)==(Q|0)){if(c=Q+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{c=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0,c=s}else c=n[Q+8>>2]|0,n[c+12>>2]=s,n[s+8>>2]=c,c=s;while(0);if(m|0){if(s=n[Q+28>>2]|0,l=11436+(s<<2)|0,(Q|0)==(n[l>>2]|0)){if(n[l>>2]=c,!c){n[2784]=n[2784]&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=m,s=Q+16|0,l=n[s>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),s=n[s+4>>2]|0,s|0&&(n[c+20>>2]=s,n[s+24>>2]=c)}}while(0);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(s=d>>>3,d>>>0<256){c=11172+(s<<1<<2)|0,l=n[2783]|0,s=1<>2]|0):(n[2783]=l|s,s=c,l=c+8|0),n[l>>2]=k,n[s+12>>2]=k,n[k+8>>2]=s,n[k+12>>2]=c;return}s=d>>>8,s?d>>>0>16777215?s=31:(B=(s+1048320|0)>>>16&8,Q=s<>>16&4,Q=Q<>>16&2,s=14-(m|B|s)+(Q<>>15)|0,s=d>>>(s+7|0)&1|s<<1):s=0,f=11436+(s<<2)|0,n[k+28>>2]=s,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,c=1<>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){s=73;break}if(f=c+16+(l>>>31<<2)|0,s=n[f>>2]|0,s)l=l<<1,c=s;else{s=72;break}}if((s|0)==72){n[f>>2]=k,n[k+24>>2]=c,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((s|0)==73){B=c+8|0,Q=n[B>>2]|0,n[Q+12>>2]=k,n[B>>2]=k,n[k+8>>2]=Q,n[k+12>>2]=c,n[k+24>>2]=0;break}}else n[2784]=l|c,n[f>>2]=k,n[k+24>>2]=f,n[k+12>>2]=k,n[k+8>>2]=k;while(0);if(Q=(n[2791]|0)+-1|0,n[2791]=Q,!Q)s=11588;else return;for(;s=n[s>>2]|0,s;)s=s+8|0;n[2791]=-1}}}function kUe(){return 11628}function QUe(s){s=s|0;var l=0,c=0;return l=C,C=C+16|0,c=l,n[c>>2]=RUe(n[s+60>>2]|0)|0,s=gD(hc(6,c|0)|0)|0,C=l,s|0}function s7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0;q=C,C=C+48|0,O=q+16|0,m=q,d=q+32|0,k=s+28|0,f=n[k>>2]|0,n[d>>2]=f,Q=s+20|0,f=(n[Q>>2]|0)-f|0,n[d+4>>2]=f,n[d+8>>2]=l,n[d+12>>2]=c,f=f+c|0,B=s+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=gD(Li(146,m|0)|0)|0;e:do if((f|0)!=(m|0)){for(l=2;!((m|0)<0);)if(f=f-m|0,Ge=n[d+4>>2]|0,se=m>>>0>Ge>>>0,d=se?d+8|0:d,l=(se<<31>>31)+l|0,Ge=m-(se?Ge:0)|0,n[d>>2]=(n[d>>2]|0)+Ge,se=d+4|0,n[se>>2]=(n[se>>2]|0)-Ge,n[O>>2]=n[B>>2],n[O+4>>2]=d,n[O+8>>2]=l,m=gD(Li(146,O|0)|0)|0,(f|0)==(m|0)){M=3;break e}n[s+16>>2]=0,n[k>>2]=0,n[Q>>2]=0,n[s>>2]=n[s>>2]|32,(l|0)==2?c=0:c=c-(n[d+4>>2]|0)|0}else M=3;while(0);return(M|0)==3&&(Ge=n[s+44>>2]|0,n[s+16>>2]=Ge+(n[s+48>>2]|0),n[k>>2]=Ge,n[Q>>2]=Ge),C=q,c|0}function FUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return d=C,C=C+32|0,m=d,f=d+20|0,n[m>>2]=n[s+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=f,n[m+16>>2]=c,(gD(sa(140,m|0)|0)|0)<0?(n[f>>2]=-1,s=-1):s=n[f>>2]|0,C=d,s|0}function gD(s){return s=s|0,s>>>0>4294963200&&(n[(Vm()|0)>>2]=0-s,s=-1),s|0}function Vm(){return(TUe()|0)+64|0}function TUe(){return xT()|0}function xT(){return 2084}function RUe(s){return s=s|0,s|0}function NUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return d=C,C=C+32|0,f=d,n[s+36>>2]=1,(n[s>>2]&64|0)==0&&(n[f>>2]=n[s+60>>2],n[f+4>>2]=21523,n[f+8>>2]=d+16,fu(54,f|0)|0)&&(o[s+75>>0]=-1),f=s7(s,l,c)|0,C=d,f|0}function o7(s,l){s=s|0,l=l|0;var c=0,f=0;if(c=o[s>>0]|0,f=o[l>>0]|0,c<<24>>24==0||c<<24>>24!=f<<24>>24)s=f;else{do s=s+1|0,l=l+1|0,c=o[s>>0]|0,f=o[l>>0]|0;while(!(c<<24>>24==0||c<<24>>24!=f<<24>>24));s=f}return(c&255)-(s&255)|0}function LUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;e:do if(!c)s=0;else{for(;f=o[s>>0]|0,d=o[l>>0]|0,f<<24>>24==d<<24>>24;)if(c=c+-1|0,c)s=s+1|0,l=l+1|0;else{s=0;break e}s=(f&255)-(d&255)|0}while(0);return s|0}function a7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;Fe=C,C=C+224|0,M=Fe+120|0,q=Fe+80|0,Ge=Fe,Oe=Fe+136|0,f=q,d=f+40|0;do n[f>>2]=0,f=f+4|0;while((f|0)<(d|0));return n[M>>2]=n[c>>2],(bT(0,l,M,Ge,q)|0)<0?c=-1:((n[s+76>>2]|0)>-1?se=MUe(s)|0:se=0,c=n[s>>2]|0,O=c&32,(o[s+74>>0]|0)<1&&(n[s>>2]=c&-33),f=s+48|0,n[f>>2]|0?c=bT(s,l,M,Ge,q)|0:(d=s+44|0,m=n[d>>2]|0,n[d>>2]=Oe,B=s+28|0,n[B>>2]=Oe,k=s+20|0,n[k>>2]=Oe,n[f>>2]=80,Q=s+16|0,n[Q>>2]=Oe+80,c=bT(s,l,M,Ge,q)|0,m&&(ED[n[s+36>>2]&7](s,0,0)|0,c=(n[k>>2]|0)==0?-1:c,n[d>>2]=m,n[f>>2]=0,n[Q>>2]=0,n[B>>2]=0,n[k>>2]=0)),f=n[s>>2]|0,n[s>>2]=f|O,se|0&&OUe(s),c=(f&32|0)==0?c:-1),C=Fe,c|0}function bT(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0;ir=C,C=C+64|0,or=ir+16|0,Xt=ir,Lt=ir+24|0,Pr=ir+8|0,Nr=ir+20|0,n[or>>2]=l,at=(s|0)!=0,Ue=Lt+40|0,qe=Ue,Lt=Lt+39|0,Or=Pr+4|0,B=0,m=0,M=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(Vm()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(0);if(B=o[l>>0]|0,B<<24>>24)k=l;else{Xe=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Xe=9;break t}case 0:{B=k;break t}default:}et=k+1|0,n[or>>2]=et,B=o[et>>0]|0,k=et}t:do if((Xe|0)==9)for(;;){if(Xe=0,(o[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[or>>2]=k,(o[k>>0]|0)==37)Xe=9;else break}while(0);if(B=B-l|0,at&&ss(s,l,B),B|0){l=k;continue}Q=k+1|0,B=(o[Q>>0]|0)+-48|0,B>>>0<10?(et=(o[k+2>>0]|0)==36,Fe=et?B:-1,M=et?1:M,Q=et?k+3|0:Q):Fe=-1,n[or>>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(O=0,q=B;;){if(B=1<>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;q=B}else O=0;while(0);if(B<<24>>24==42){if(k=Q+1|0,B=(o[k>>0]|0)+-48|0,B>>>0<10&&(o[Q+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[f+((o[k>>0]|0)+-48<<3)>>2]|0,M=1,Q=Q+3|0;else{if(M|0){m=-1;break}at?(M=(n[c>>2]|0)+(4-1)&~(4-1),B=n[M>>2]|0,n[c>>2]=M+4,M=0,Q=k):(B=0,M=0,Q=k)}n[or>>2]=Q,et=(B|0)<0,B=et?0-B|0:B,O=et?O|8192:O}else{if(B=l7(or)|0,(B|0)<0){m=-1;break}Q=n[or>>2]|0}do if((o[Q>>0]|0)==46){if((o[Q+1>>0]|0)!=42){n[or>>2]=Q+1,k=l7(or)|0,Q=n[or>>2]|0;break}if(q=Q+2|0,k=(o[q>>0]|0)+-48|0,k>>>0<10&&(o[Q+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[f+((o[q>>0]|0)+-48<<3)>>2]|0,Q=Q+4|0,n[or>>2]=Q;break}if(M|0){m=-1;break e}at?(et=(n[c>>2]|0)+(4-1)&~(4-1),k=n[et>>2]|0,n[c>>2]=et+4):k=0,n[or>>2]=q,Q=q}else k=-1;while(0);for(Oe=0;;){if(((o[Q>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(et=Q+1|0,n[or>>2]=et,q=o[(o[Q>>0]|0)+-65+(5178+(Oe*58|0))>>0]|0,se=q&255,(se+-1|0)>>>0<8)Oe=se,Q=et;else break}if(!(q<<24>>24)){m=-1;break}Ge=(Fe|0)>-1;do if(q<<24>>24==19)if(Ge){m=-1;break e}else Xe=49;else{if(Ge){n[d+(Fe<<2)>>2]=se,Ge=f+(Fe<<3)|0,Fe=n[Ge+4>>2]|0,Xe=Xt,n[Xe>>2]=n[Ge>>2],n[Xe+4>>2]=Fe,Xe=49;break}if(!at){m=0;break e}c7(Xt,se,c)}while(0);if((Xe|0)==49&&(Xe=0,!at)){B=0,l=et;continue}Q=o[Q>>0]|0,Q=(Oe|0)!=0&(Q&15|0)==3?Q&-33:Q,Ge=O&-65537,Fe=(O&8192|0)==0?O:Ge;t:do switch(Q|0){case 110:switch((Oe&255)<<24>>24){case 0:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 1:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 2:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}case 3:{a[n[Xt>>2]>>1]=m,B=0,l=et;continue e}case 4:{o[n[Xt>>2]>>0]=m,B=0,l=et;continue e}case 6:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 7:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}default:{B=0,l=et;continue e}}case 112:{Q=120,k=k>>>0>8?k:8,l=Fe|8,Xe=61;break}case 88:case 120:{l=Fe,Xe=61;break}case 111:{Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,se=_Ue(l,Q,Ue)|0,Ge=qe-se|0,O=0,q=5642,k=(Fe&8|0)==0|(k|0)>(Ge|0)?k:Ge+1|0,Ge=Fe,Xe=67;break}case 105:case 100:if(Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,(Q|0)<0){l=dD(0,0,l|0,Q|0)|0,Q=De,O=Xt,n[O>>2]=l,n[O+4>>2]=Q,O=1,q=5642,Xe=66;break t}else{O=(Fe&2049|0)!=0&1,q=(Fe&2048|0)==0?(Fe&1|0)==0?5642:5644:5643,Xe=66;break t}case 117:{Q=Xt,O=0,q=5642,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,Xe=66;break}case 99:{o[Lt>>0]=n[Xt>>2],l=Lt,O=0,q=5642,se=Ue,Q=1,k=Ge;break}case 109:{Q=HUe(n[(Vm()|0)>>2]|0)|0,Xe=71;break}case 115:{Q=n[Xt>>2]|0,Q=Q|0?Q:5652,Xe=71;break}case 67:{n[Pr>>2]=n[Xt>>2],n[Or>>2]=0,n[Xt>>2]=Pr,se=-1,Q=Pr,Xe=75;break}case 83:{l=n[Xt>>2]|0,k?(se=k,Q=l,Xe=75):(Bs(s,32,B,0,Fe),l=0,Xe=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=qUe(s,+E[Xt>>3],B,k,Fe,Q)|0,l=et;continue e}default:O=0,q=5642,se=Ue,Q=k,k=Fe}while(0);t:do if((Xe|0)==61)Fe=Xt,Oe=n[Fe>>2]|0,Fe=n[Fe+4>>2]|0,se=UUe(Oe,Fe,Ue,Q&32)|0,q=(l&8|0)==0|(Oe|0)==0&(Fe|0)==0,O=q?0:2,q=q?5642:5642+(Q>>4)|0,Ge=l,l=Oe,Q=Fe,Xe=67;else if((Xe|0)==66)se=Km(l,Q,Ue)|0,Ge=Fe,Xe=67;else if((Xe|0)==71)Xe=0,Fe=jUe(Q,0,k)|0,Oe=(Fe|0)==0,l=Q,O=0,q=5642,se=Oe?Q+k|0:Fe,Q=Oe?k:Fe-Q|0,k=Ge;else if((Xe|0)==75){for(Xe=0,q=Q,l=0,k=0;O=n[q>>2]|0,!(!O||(k=u7(Nr,O)|0,(k|0)<0|k>>>0>(se-l|0)>>>0));)if(l=k+l|0,se>>>0>l>>>0)q=q+4|0;else break;if((k|0)<0){m=-1;break e}if(Bs(s,32,B,l,Fe),!l)l=0,Xe=84;else for(O=0;;){if(k=n[Q>>2]|0,!k){Xe=84;break t}if(k=u7(Nr,k)|0,O=k+O|0,(O|0)>(l|0)){Xe=84;break t}if(ss(s,Nr,k),O>>>0>=l>>>0){Xe=84;break}else Q=Q+4|0}}while(0);if((Xe|0)==67)Xe=0,Q=(l|0)!=0|(Q|0)!=0,Fe=(k|0)!=0|Q,Q=((Q^1)&1)+(qe-se)|0,l=Fe?se:Ue,se=Ue,Q=Fe?(k|0)>(Q|0)?k:Q:k,k=(k|0)>-1?Ge&-65537:Ge;else if((Xe|0)==84){Xe=0,Bs(s,32,B,l,Fe^8192),B=(B|0)>(l|0)?B:l,l=et;continue}Oe=se-l|0,Ge=(Q|0)<(Oe|0)?Oe:Q,Fe=Ge+O|0,B=(B|0)<(Fe|0)?Fe:B,Bs(s,32,B,Fe,k),ss(s,q,O),Bs(s,48,B,Fe,k^65536),Bs(s,48,Ge,Oe,0),ss(s,l,Oe),Bs(s,32,B,Fe,k^8192),l=et}e:do if((Xe|0)==87&&!s)if(!M)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(c7(f+(m<<3)|0,l,c),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(0);return C=ir,m|0}function MUe(s){return s=s|0,0}function OUe(s){s=s|0}function ss(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]&32||ZUe(l,c,s)|0}function l7(s){s=s|0;var l=0,c=0,f=0;if(c=n[s>>2]|0,f=(o[c>>0]|0)+-48|0,f>>>0<10){l=0;do l=f+(l*10|0)|0,c=c+1|0,n[s>>2]=c,f=(o[c>>0]|0)+-48|0;while(f>>>0<10)}else l=0;return l|0}function c7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,n[s>>2]=l;break e}case 10:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=0;break e}case 12:{f=(n[c>>2]|0)+(8-1)&~(8-1),l=f,d=n[l>>2]|0,l=n[l+4>>2]|0,n[c>>2]=f+8,f=s,n[f>>2]=d,n[f+4>>2]=l;break e}case 13:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&65535)<<16>>16,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 14:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&65535,n[d+4>>2]=0;break e}case 15:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&255)<<24>>24,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 16:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&255,n[d+4>>2]=0;break e}case 17:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}case 18:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}default:break e}while(0);while(0)}function UUe(s,l,c,f){if(s=s|0,l=l|0,c=c|0,f=f|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=u[5694+(s&15)>>0]|0|f,s=mD(s|0,l|0,4)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function _Ue(s,l,c){if(s=s|0,l=l|0,c=c|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=s&7|48,s=mD(s|0,l|0,3)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function Km(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if(l>>>0>0|(l|0)==0&s>>>0>4294967295){for(;f=TT(s|0,l|0,10,0)|0,c=c+-1|0,o[c>>0]=f&255|48,f=s,s=FT(s|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&f>>>0>4294967295;)l=De;l=s}else l=s;if(l)for(;c=c+-1|0,o[c>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return c|0}function HUe(s){return s=s|0,KUe(s,n[(VUe()|0)+188>>2]|0)|0}function jUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;m=l&255,f=(c|0)!=0;e:do if(f&(s&3|0)!=0)for(d=l&255;;){if((o[s>>0]|0)==d<<24>>24){B=6;break e}if(s=s+1|0,c=c+-1|0,f=(c|0)!=0,!(f&(s&3|0)!=0)){B=5;break}}else B=5;while(0);(B|0)==5&&(f?B=6:c=0);e:do if((B|0)==6&&(d=l&255,(o[s>>0]|0)!=d<<24>>24)){f=He(m,16843009)|0;t:do if(c>>>0>3){for(;m=n[s>>2]^f,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(s=s+4|0,c=c+-4|0,c>>>0<=3){B=11;break t}}else B=11;while(0);if((B|0)==11&&!c){c=0;break}for(;;){if((o[s>>0]|0)==d<<24>>24)break e;if(s=s+1|0,c=c+-1|0,!c){c=0;break}}}while(0);return(c|0?s:0)|0}function Bs(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0;if(B=C,C=C+256|0,m=B,(c|0)>(f|0)&(d&73728|0)==0){if(d=c-f|0,zm(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=c-f|0;do ss(s,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}ss(s,m,d)}C=B}function u7(s,l){return s=s|0,l=l|0,s?s=YUe(s,l,0)|0:s=0,s|0}function qUe(s,l,c,f,d,m){s=s|0,l=+l,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0;bn=C,C=C+560|0,Q=bn+8|0,et=bn,ir=bn+524|0,Nr=ir,O=bn+512|0,n[et>>2]=0,Pr=O+12|0,A7(l)|0,(De|0)<0?(l=-l,or=1,Or=5659):(or=(d&2049|0)!=0&1,Or=(d&2048|0)==0?(d&1|0)==0?5660:5665:5662),A7(l)|0,Xt=De&2146435072;do if(Xt>>>0<2146435072|(Xt|0)==2146435072&0<0){if(Ge=+GUe(l,et)*2,B=Ge!=0,B&&(n[et>>2]=(n[et>>2]|0)+-1),at=m|32,(at|0)==97){Oe=m&32,se=(Oe|0)==0?Or:Or+9|0,q=or|2,B=12-f|0;do if(f>>>0>11|(B|0)==0)l=Ge;else{l=8;do B=B+-1|0,l=l*16;while((B|0)!=0);if((o[se>>0]|0)==45){l=-(l+(-Ge-l));break}else{l=Ge+l-l;break}}while(0);k=n[et>>2]|0,B=(k|0)<0?0-k|0:k,B=Km(B,((B|0)<0)<<31>>31,Pr)|0,(B|0)==(Pr|0)&&(B=O+11|0,o[B>>0]=48),o[B+-1>>0]=(k>>31&2)+43,M=B+-2|0,o[M>>0]=m+15,O=(f|0)<1,Q=(d&8|0)==0,B=ir;do Xt=~~l,k=B+1|0,o[B>>0]=u[5694+Xt>>0]|Oe,l=(l-+(Xt|0))*16,(k-Nr|0)==1&&!(Q&(O&l==0))?(o[k>>0]=46,B=B+2|0):B=k;while(l!=0);Xt=B-Nr|0,Nr=Pr-M|0,Pr=(f|0)!=0&(Xt+-2|0)<(f|0)?f+2|0:Xt,B=Nr+q+Pr|0,Bs(s,32,c,B,d),ss(s,se,q),Bs(s,48,c,B,d^65536),ss(s,ir,Xt),Bs(s,48,Pr-Xt|0,0,0),ss(s,M,Nr),Bs(s,32,c,B,d^8192);break}k=(f|0)<0?6:f,B?(B=(n[et>>2]|0)+-28|0,n[et>>2]=B,l=Ge*268435456):(l=Ge,B=n[et>>2]|0),Xt=(B|0)<0?Q:Q+288|0,Q=Xt;do qe=~~l>>>0,n[Q>>2]=qe,Q=Q+4|0,l=(l-+(qe>>>0))*1e9;while(l!=0);if((B|0)>0)for(O=Xt,q=Q;;){if(M=(B|0)<29?B:29,B=q+-4|0,B>>>0>=O>>>0){Q=0;do Ue=m7(n[B>>2]|0,0,M|0)|0,Ue=QT(Ue|0,De|0,Q|0,0)|0,qe=De,Xe=TT(Ue|0,qe|0,1e9,0)|0,n[B>>2]=Xe,Q=FT(Ue|0,qe|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=O>>>0);Q&&(O=O+-4|0,n[O>>2]=Q)}for(Q=q;!(Q>>>0<=O>>>0);)if(B=Q+-4|0,!(n[B>>2]|0))Q=B;else break;if(B=(n[et>>2]|0)-M|0,n[et>>2]=B,(B|0)>0)q=Q;else break}else O=Xt;if((B|0)<0){f=((k+25|0)/9|0)+1|0,Fe=(at|0)==102;do{if(Oe=0-B|0,Oe=(Oe|0)<9?Oe:9,O>>>0>>0){M=(1<>>Oe,se=0,B=O;do qe=n[B>>2]|0,n[B>>2]=(qe>>>Oe)+se,se=He(qe&M,q)|0,B=B+4|0;while(B>>>0>>0);B=(n[O>>2]|0)==0?O+4|0:O,se?(n[Q>>2]=se,O=B,B=Q+4|0):(O=B,B=Q)}else O=(n[O>>2]|0)==0?O+4|0:O,B=Q;Q=Fe?Xt:O,Q=(B-Q>>2|0)>(f|0)?Q+(f<<2)|0:B,B=(n[et>>2]|0)+Oe|0,n[et>>2]=B}while((B|0)<0);B=O,f=Q}else B=O,f=Q;if(qe=Xt,B>>>0>>0){if(Q=(qe-B>>2)*9|0,M=n[B>>2]|0,M>>>0>=10){O=10;do O=O*10|0,Q=Q+1|0;while(M>>>0>=O>>>0)}}else Q=0;if(Fe=(at|0)==103,Xe=(k|0)!=0,O=k-((at|0)!=102?Q:0)+((Xe&Fe)<<31>>31)|0,(O|0)<(((f-qe>>2)*9|0)+-9|0)){if(O=O+9216|0,Oe=Xt+4+(((O|0)/9|0)+-1024<<2)|0,O=((O|0)%9|0)+1|0,(O|0)<9){M=10;do M=M*10|0,O=O+1|0;while((O|0)!=9)}else M=10;if(q=n[Oe>>2]|0,se=(q>>>0)%(M>>>0)|0,O=(Oe+4|0)==(f|0),O&(se|0)==0)O=Oe;else if(Ge=(((q>>>0)/(M>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Ue=(M|0)/2|0,l=se>>>0>>0?.5:O&(se|0)==(Ue|0)?1:1.5,or&&(Ue=(o[Or>>0]|0)==45,l=Ue?-l:l,Ge=Ue?-Ge:Ge),O=q-se|0,n[Oe>>2]=O,Ge+l!=Ge){if(Ue=O+M|0,n[Oe>>2]=Ue,Ue>>>0>999999999)for(Q=Oe;O=Q+-4|0,n[Q>>2]=0,O>>>0>>0&&(B=B+-4|0,n[B>>2]=0),Ue=(n[O>>2]|0)+1|0,n[O>>2]=Ue,Ue>>>0>999999999;)Q=O;else O=Oe;if(Q=(qe-B>>2)*9|0,q=n[B>>2]|0,q>>>0>=10){M=10;do M=M*10|0,Q=Q+1|0;while(q>>>0>=M>>>0)}}else O=Oe;O=O+4|0,O=f>>>0>O>>>0?O:f,Ue=B}else O=f,Ue=B;for(at=O;;){if(at>>>0<=Ue>>>0){et=0;break}if(B=at+-4|0,!(n[B>>2]|0))at=B;else{et=1;break}}f=0-Q|0;do if(Fe)if(B=((Xe^1)&1)+k|0,(B|0)>(Q|0)&(Q|0)>-5?(M=m+-1|0,k=B+-1-Q|0):(M=m+-2|0,k=B+-1|0),B=d&8,B)Oe=B;else{if(et&&(Lt=n[at+-4>>2]|0,(Lt|0)!=0))if((Lt>>>0)%10|0)O=0;else{O=0,B=10;do B=B*10|0,O=O+1|0;while(!((Lt>>>0)%(B>>>0)|0|0))}else O=9;if(B=((at-qe>>2)*9|0)+-9|0,(M|32|0)==102){Oe=B-O|0,Oe=(Oe|0)>0?Oe:0,k=(k|0)<(Oe|0)?k:Oe,Oe=0;break}else{Oe=B+Q-O|0,Oe=(Oe|0)>0?Oe:0,k=(k|0)<(Oe|0)?k:Oe,Oe=0;break}}else M=m,Oe=d&8;while(0);if(Fe=k|Oe,q=(Fe|0)!=0&1,se=(M|32|0)==102,se)Xe=0,B=(Q|0)>0?Q:0;else{if(B=(Q|0)<0?f:Q,B=Km(B,((B|0)<0)<<31>>31,Pr)|0,O=Pr,(O-B|0)<2)do B=B+-1|0,o[B>>0]=48;while((O-B|0)<2);o[B+-1>>0]=(Q>>31&2)+43,B=B+-2|0,o[B>>0]=M,Xe=B,B=O-B|0}if(B=or+1+k+q+B|0,Bs(s,32,c,B,d),ss(s,Or,or),Bs(s,48,c,B,d^65536),se){M=Ue>>>0>Xt>>>0?Xt:Ue,Oe=ir+9|0,q=Oe,se=ir+8|0,O=M;do{if(Q=Km(n[O>>2]|0,0,Oe)|0,(O|0)==(M|0))(Q|0)==(Oe|0)&&(o[se>>0]=48,Q=se);else if(Q>>>0>ir>>>0){zm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}ss(s,Q,q-Q|0),O=O+4|0}while(O>>>0<=Xt>>>0);if(Fe|0&&ss(s,5710,1),O>>>0>>0&(k|0)>0)for(;;){if(Q=Km(n[O>>2]|0,0,Oe)|0,Q>>>0>ir>>>0){zm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}if(ss(s,Q,(k|0)<9?k:9),O=O+4|0,Q=k+-9|0,O>>>0>>0&(k|0)>9)k=Q;else{k=Q;break}}Bs(s,48,k+9|0,9,0)}else{if(Fe=et?at:Ue+4|0,(k|0)>-1){et=ir+9|0,Oe=(Oe|0)==0,f=et,q=0-Nr|0,se=ir+8|0,M=Ue;do{Q=Km(n[M>>2]|0,0,et)|0,(Q|0)==(et|0)&&(o[se>>0]=48,Q=se);do if((M|0)==(Ue|0)){if(O=Q+1|0,ss(s,Q,1),Oe&(k|0)<1){Q=O;break}ss(s,5710,1),Q=O}else{if(Q>>>0<=ir>>>0)break;zm(ir|0,48,Q+q|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}while(0);Nr=f-Q|0,ss(s,Q,(k|0)>(Nr|0)?Nr:k),k=k-Nr|0,M=M+4|0}while(M>>>0>>0&(k|0)>-1)}Bs(s,48,k+18|0,18,0),ss(s,Xe,Pr-Xe|0)}Bs(s,32,c,B,d^8192)}else ir=(m&32|0)!=0,B=or+3|0,Bs(s,32,c,B,d&-65537),ss(s,Or,or),ss(s,l!=l|!1?ir?5686:5690:ir?5678:5682,3),Bs(s,32,c,B,d^8192);while(0);return C=bn,((B|0)<(c|0)?c:B)|0}function A7(s){s=+s;var l=0;return E[v>>3]=s,l=n[v>>2]|0,De=n[v+4>>2]|0,l|0}function GUe(s,l){return s=+s,l=l|0,+ +f7(s,l)}function f7(s,l){s=+s,l=l|0;var c=0,f=0,d=0;switch(E[v>>3]=s,c=n[v>>2]|0,f=n[v+4>>2]|0,d=mD(c|0,f|0,52)|0,d&2047){case 0:{s!=0?(s=+f7(s*18446744073709552e3,l),c=(n[l>>2]|0)+-64|0):c=0,n[l>>2]=c;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[v>>2]=c,n[v+4>>2]=f&-2146435073|1071644672,s=+E[v>>3]}return+s}function YUe(s,l,c){s=s|0,l=l|0,c=c|0;do if(s){if(l>>>0<128){o[s>>0]=l,s=1;break}if(!(n[n[(WUe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){o[s>>0]=l,s=1;break}else{n[(Vm()|0)>>2]=84,s=-1;break}if(l>>>0<2048){o[s>>0]=l>>>6|192,o[s+1>>0]=l&63|128,s=2;break}if(l>>>0<55296|(l&-8192|0)==57344){o[s>>0]=l>>>12|224,o[s+1>>0]=l>>>6&63|128,o[s+2>>0]=l&63|128,s=3;break}if((l+-65536|0)>>>0<1048576){o[s>>0]=l>>>18|240,o[s+1>>0]=l>>>12&63|128,o[s+2>>0]=l>>>6&63|128,o[s+3>>0]=l&63|128,s=4;break}else{n[(Vm()|0)>>2]=84,s=-1;break}}else s=1;while(0);return s|0}function WUe(){return xT()|0}function VUe(){return xT()|0}function KUe(s,l){s=s|0,l=l|0;var c=0,f=0;for(f=0;;){if((u[5712+f>>0]|0)==(s|0)){s=2;break}if(c=f+1|0,(c|0)==87){c=5800,f=87,s=5;break}else f=c}if((s|0)==2&&(f?(c=5800,s=5):c=5800),(s|0)==5)for(;;){do s=c,c=c+1|0;while((o[s>>0]|0)!=0);if(f=f+-1|0,f)s=5;else break}return JUe(c,n[l+20>>2]|0)|0}function JUe(s,l){return s=s|0,l=l|0,zUe(s,l)|0}function zUe(s,l){return s=s|0,l=l|0,l?l=XUe(n[l>>2]|0,n[l+4>>2]|0,s)|0:l=0,(l|0?l:s)|0}function XUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;se=(n[s>>2]|0)+1794895138|0,m=Fg(n[s+8>>2]|0,se)|0,f=Fg(n[s+12>>2]|0,se)|0,d=Fg(n[s+16>>2]|0,se)|0;e:do if(m>>>0>>2>>>0&&(q=l-(m<<2)|0,f>>>0>>0&d>>>0>>0)&&((d|f)&3|0)==0){for(q=f>>>2,M=d>>>2,O=0;;){if(k=m>>>1,Q=O+k|0,B=Q<<1,d=B+q|0,f=Fg(n[s+(d<<2)>>2]|0,se)|0,d=Fg(n[s+(d+1<<2)>>2]|0,se)|0,!(d>>>0>>0&f>>>0<(l-d|0)>>>0)){f=0;break e}if(o[s+(d+f)>>0]|0){f=0;break e}if(f=o7(c,s+d|0)|0,!f)break;if(f=(f|0)<0,(m|0)==1){f=0;break e}else O=f?O:Q,m=f?k:m-k|0}f=B+M|0,d=Fg(n[s+(f<<2)>>2]|0,se)|0,f=Fg(n[s+(f+1<<2)>>2]|0,se)|0,f>>>0>>0&d>>>0<(l-f|0)>>>0?f=(o[s+(f+d)>>0]|0)==0?s+f|0:0:f=0}else f=0;while(0);return f|0}function Fg(s,l){s=s|0,l=l|0;var c=0;return c=C7(s|0)|0,((l|0)==0?s:c)|0}function ZUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=c+16|0,d=n[f>>2]|0,d?m=5:$Ue(c)|0?f=0:(d=n[f>>2]|0,m=5);e:do if((m|0)==5){if(k=c+20|0,B=n[k>>2]|0,f=B,(d-B|0)>>>0>>0){f=ED[n[c+36>>2]&7](c,s,l)|0;break}t:do if((o[c+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=s;break t}if(d=B+-1|0,(o[s+d>>0]|0)==10)break;B=d}if(f=ED[n[c+36>>2]&7](c,s,B)|0,f>>>0>>0)break e;m=B,d=s+B|0,l=l-B|0,f=n[k>>2]|0}else m=0,d=s;while(0);Dr(f|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,f=m+l|0}while(0);return f|0}function $Ue(s){s=s|0;var l=0,c=0;return l=s+74|0,c=o[l>>0]|0,o[l>>0]=c+255|c,l=n[s>>2]|0,l&8?(n[s>>2]=l|32,s=-1):(n[s+8>>2]=0,n[s+4>>2]=0,c=n[s+44>>2]|0,n[s+28>>2]=c,n[s+20>>2]=c,n[s+16>>2]=c+(n[s+48>>2]|0),s=0),s|0}function _n(s,l){s=y(s),l=y(l);var c=0,f=0;c=p7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=p7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?l:s;break}else{s=s>2]=s,n[v>>2]|0|0}function Tg(s,l){s=y(s),l=y(l);var c=0,f=0;c=h7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=h7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?s:l;break}else{s=s>2]=s,n[v>>2]|0|0}function kT(s,l){s=y(s),l=y(l);var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;m=(h[v>>2]=s,n[v>>2]|0),k=(h[v>>2]=l,n[v>>2]|0),c=m>>>23&255,B=k>>>23&255,Q=m&-2147483648,d=k<<1;e:do if((d|0)!=0&&!((c|0)==255|((e3e(l)|0)&2147483647)>>>0>2139095040)){if(f=m<<1,f>>>0<=d>>>0)return l=y(s*y(0)),y((f|0)==(d|0)?l:s);if(c)f=m&8388607|8388608;else{if(c=m<<9,(c|0)>-1){f=c,c=0;do c=c+-1|0,f=f<<1;while((f|0)>-1)}else c=0;f=m<<1-c}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=f-k|0,m=(d|0)>-1;t:do if((c|0)>(B|0)){for(;;){if(m)if(d)f=d;else break;if(f=f<<1,c=c+-1|0,d=f-k|0,m=(d|0)>-1,(c|0)<=(B|0))break t}l=y(s*y(0));break e}while(0);if(m)if(d)f=d;else{l=y(s*y(0));break}if(f>>>0<8388608)do f=f<<1,c=c+-1|0;while(f>>>0<8388608);(c|0)>0?c=f+-8388608|c<<23:c=f>>>(1-c|0),l=(n[v>>2]=c|Q,y(h[v>>2]))}else O=3;while(0);return(O|0)==3&&(l=y(s*l),l=y(l/l)),y(l)}function e3e(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function t3e(s,l){return s=s|0,l=l|0,a7(n[582]|0,s,l)|0}function zr(s){s=s|0,Tt()}function Jm(s){s=s|0}function r3e(s,l){return s=s|0,l=l|0,0}function n3e(s){return s=s|0,(g7(s+4|0)|0)==-1?(ef[n[(n[s>>2]|0)+8>>2]&127](s),s=1):s=0,s|0}function g7(s){s=s|0;var l=0;return l=n[s>>2]|0,n[s>>2]=l+-1,l+-1|0}function bp(s){s=s|0,n3e(s)|0&&i3e(s)}function i3e(s){s=s|0;var l=0;l=s+8|0,(n[l>>2]|0)!=0&&(g7(l)|0)!=-1||ef[n[(n[s>>2]|0)+16>>2]&127](s)}function Vt(s){s=s|0;var l=0;for(l=(s|0)==0?1:s;s=pD(l)|0,!(s|0);){if(s=o3e()|0,!s){s=0;break}k7[s&0]()}return s|0}function d7(s){return s=s|0,Vt(s)|0}function gt(s){s=s|0,hD(s)}function s3e(s){s=s|0,(o[s+11>>0]|0)<0&>(n[s>>2]|0)}function o3e(){var s=0;return s=n[2923]|0,n[2923]=s+0,s|0}function a3e(){}function dD(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,f=l-f-(c>>>0>s>>>0|0)>>>0,De=f,s-c>>>0|0|0}function QT(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,c=s+c>>>0,De=l+f+(c>>>0>>0|0)>>>0,c|0|0}function zm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(m=s+c|0,l=l&255,(c|0)>=67){for(;s&3;)o[s>>0]=l,s=s+1|0;for(f=m&-4|0,d=f-64|0,B=l|l<<8|l<<16|l<<24;(s|0)<=(d|0);)n[s>>2]=B,n[s+4>>2]=B,n[s+8>>2]=B,n[s+12>>2]=B,n[s+16>>2]=B,n[s+20>>2]=B,n[s+24>>2]=B,n[s+28>>2]=B,n[s+32>>2]=B,n[s+36>>2]=B,n[s+40>>2]=B,n[s+44>>2]=B,n[s+48>>2]=B,n[s+52>>2]=B,n[s+56>>2]=B,n[s+60>>2]=B,s=s+64|0;for(;(s|0)<(f|0);)n[s>>2]=B,s=s+4|0}for(;(s|0)<(m|0);)o[s>>0]=l,s=s+1|0;return m-c|0}function m7(s,l,c){return s=s|0,l=l|0,c=c|0,(c|0)<32?(De=l<>>32-c,s<>>c,s>>>c|(l&(1<>>c-32|0)}function Dr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;if((c|0)>=8192)return Ac(s|0,l|0,c|0)|0;if(m=s|0,d=s+c|0,(s&3)==(l&3)){for(;s&3;){if(!c)return m|0;o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0,c=c-1|0}for(c=d&-4|0,f=c-64|0;(s|0)<=(f|0);)n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2],n[s+16>>2]=n[l+16>>2],n[s+20>>2]=n[l+20>>2],n[s+24>>2]=n[l+24>>2],n[s+28>>2]=n[l+28>>2],n[s+32>>2]=n[l+32>>2],n[s+36>>2]=n[l+36>>2],n[s+40>>2]=n[l+40>>2],n[s+44>>2]=n[l+44>>2],n[s+48>>2]=n[l+48>>2],n[s+52>>2]=n[l+52>>2],n[s+56>>2]=n[l+56>>2],n[s+60>>2]=n[l+60>>2],s=s+64|0,l=l+64|0;for(;(s|0)<(c|0);)n[s>>2]=n[l>>2],s=s+4|0,l=l+4|0}else for(c=d-4|0;(s|0)<(c|0);)o[s>>0]=o[l>>0]|0,o[s+1>>0]=o[l+1>>0]|0,o[s+2>>0]=o[l+2>>0]|0,o[s+3>>0]=o[l+3>>0]|0,s=s+4|0,l=l+4|0;for(;(s|0)<(d|0);)o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0;return m|0}function y7(s){s=s|0;var l=0;return l=o[L+(s&255)>>0]|0,(l|0)<8?l|0:(l=o[L+(s>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=o[L+(s>>16&255)>>0]|0,(l|0)<8?l+16|0:(o[L+(s>>>24)>>0]|0)+24|0))}function E7(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0;if(M=s,Q=l,O=Q,B=c,se=f,k=se,!O)return m=(d|0)!=0,k?m?(n[d>>2]=s|0,n[d+4>>2]=l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0):(m&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),se=0,d=(M>>>0)/(B>>>0)>>>0,De=se,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(S(k|0)|0)-(S(O|0)|0)|0,m>>>0<=31){q=m+1|0,k=31-m|0,l=m-31>>31,B=q,s=M>>>(q>>>0)&l|O<>>(q>>>0)&l,m=0,k=M<>2]=s|0,n[d+4>>2]=Q|l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0)}if(m=B-1|0,m&B|0){k=(S(B|0)|0)+33-(S(O|0)|0)|0,Oe=64-k|0,q=32-k|0,Q=q>>31,Ge=k-32|0,l=Ge>>31,B=k,s=q-1>>31&O>>>(Ge>>>0)|(O<>>(k>>>0))&l,l=l&O>>>(k>>>0),m=M<>>(Ge>>>0))&Q|M<>31;break}return d|0&&(n[d>>2]=m&M,n[d+4>>2]=0),(B|0)==1?(Ge=Q|l&0,Oe=s|0|0,De=Ge,Oe|0):(Oe=y7(B|0)|0,Ge=O>>>(Oe>>>0)|0,Oe=O<<32-Oe|M>>>(Oe>>>0)|0,De=Ge,Oe|0)}else{if(m)return d|0&&(n[d>>2]=(O>>>0)%(B>>>0),n[d+4>>2]=0),Ge=0,Oe=(O>>>0)/(B>>>0)>>>0,De=Ge,Oe|0;if(!M)return d|0&&(n[d>>2]=0,n[d+4>>2]=(O>>>0)%(k>>>0)),Ge=0,Oe=(O>>>0)/(k>>>0)>>>0,De=Ge,Oe|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=s|0,n[d+4>>2]=m&O|l&0),Ge=0,Oe=O>>>((y7(k|0)|0)>>>0),De=Ge,Oe|0;if(m=(S(k|0)|0)-(S(O|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,s=O<>>(l>>>0),l=O>>>(l>>>0),m=0,k=M<>2]=s|0,n[d+4>>2]=Q|l&0,Ge=0,Oe=0,De=Ge,Oe|0):(Ge=0,Oe=0,De=Ge,Oe|0)}while(0);if(!B)O=k,Q=0,k=0;else{q=c|0|0,M=se|f&0,O=QT(q|0,M|0,-1,-1)|0,c=De,Q=k,k=0;do f=Q,Q=m>>>31|Q<<1,m=k|m<<1,f=s<<1|f>>>31|0,se=s>>>31|l<<1|0,dD(O|0,c|0,f|0,se|0)|0,Oe=De,Ge=Oe>>31|((Oe|0)<0?-1:0)<<1,k=Ge&1,s=dD(f|0,se|0,Ge&q|0,(((Oe|0)<0?-1:0)>>31|((Oe|0)<0?-1:0)<<1)&M|0)|0,l=De,B=B-1|0;while((B|0)!=0);O=Q,Q=0}return B=0,d|0&&(n[d>>2]=s,n[d+4>>2]=l),Ge=(m|0)>>>31|(O|B)<<1|(B<<1|m>>>31)&0|Q,Oe=(m<<1|0>>>31)&-2|k,De=Ge,Oe|0}function FT(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,E7(s,l,c,f,0)|0}function kp(s){s=s|0;var l=0,c=0;return c=s+15&-16|0,l=n[I>>2]|0,s=l+c|0,(c|0)>0&(s|0)<(l|0)|(s|0)<0?(ie()|0,vA(12),-1):(n[I>>2]=s,(s|0)>(Z()|0)&&(X()|0)==0?(n[I>>2]=l,vA(12),-1):l|0)}function Mw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if((l|0)<(s|0)&(s|0)<(l+c|0)){for(f=s,l=l+c|0,s=s+c|0;(c|0)>0;)s=s-1|0,l=l-1|0,c=c-1|0,o[s>>0]=o[l>>0]|0;s=f}else Dr(s,l,c)|0;return s|0}function TT(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;return m=C,C=C+16|0,d=m|0,E7(s,l,c,f,d)|0,C=m,De=n[d+4>>2]|0,n[d>>2]|0|0}function C7(s){return s=s|0,(s&255)<<24|(s>>8&255)<<16|(s>>16&255)<<8|s>>>24|0}function l3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,w7[s&1](l|0,c|0,f|0,d|0,m|0)}function c3e(s,l,c){s=s|0,l=l|0,c=y(c),I7[s&1](l|0,y(c))}function u3e(s,l,c){s=s|0,l=l|0,c=+c,B7[s&31](l|0,+c)}function A3e(s,l,c,f){return s=s|0,l=l|0,c=y(c),f=y(f),y(v7[s&0](l|0,y(c),y(f)))}function f3e(s,l){s=s|0,l=l|0,ef[s&127](l|0)}function p3e(s,l,c){s=s|0,l=l|0,c=c|0,tf[s&31](l|0,c|0)}function h3e(s,l){return s=s|0,l=l|0,Ng[s&31](l|0)|0}function g3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,D7[s&1](l|0,+c,+f,d|0)}function d3e(s,l,c,f){s=s|0,l=l|0,c=+c,f=+f,z3e[s&1](l|0,+c,+f)}function m3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,ED[s&7](l|0,c|0,f|0)|0}function y3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,+X3e[s&1](l|0,c|0,f|0)}function E3e(s,l){return s=s|0,l=l|0,+P7[s&15](l|0)}function C3e(s,l,c){return s=s|0,l=l|0,c=+c,Z3e[s&1](l|0,+c)|0}function w3e(s,l,c){return s=s|0,l=l|0,c=c|0,NT[s&15](l|0,c|0)|0}function I3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=+f,d=+d,m=m|0,$3e[s&1](l|0,c|0,+f,+d,m|0)}function B3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,e_e[s&1](l|0,c|0,f|0,d|0,m|0,B|0)}function v3e(s,l,c){return s=s|0,l=l|0,c=c|0,+S7[s&7](l|0,c|0)}function D3e(s){return s=s|0,CD[s&7]()|0}function P3e(s,l,c,f,d,m){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,x7[s&1](l|0,c|0,f|0,d|0,m|0)|0}function S3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=+d,t_e[s&1](l|0,c|0,f|0,+d)}function x3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,b7[s&1](l|0,c|0,y(f),d|0,y(m),B|0)}function b3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,_w[s&15](l|0,c|0,f|0)}function k3e(s){s=s|0,k7[s&0]()}function Q3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,Q7[s&15](l|0,c|0,+f)}function F3e(s,l,c){return s=s|0,l=+l,c=+c,r_e[s&1](+l,+c)|0}function T3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,LT[s&15](l|0,c|0,f|0,d|0)}function R3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(0)}function N3e(s,l){s=s|0,l=y(l),F(1)}function ma(s,l){s=s|0,l=+l,F(2)}function L3e(s,l,c){return s=s|0,l=y(l),c=y(c),F(3),Ze}function Er(s){s=s|0,F(4)}function Ow(s,l){s=s|0,l=l|0,F(5)}function Ja(s){return s=s|0,F(6),0}function M3e(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,F(7)}function O3e(s,l,c){s=s|0,l=+l,c=+c,F(8)}function U3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(9),0}function _3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(10),0}function Rg(s){return s=s|0,F(11),0}function H3e(s,l){return s=s|0,l=+l,F(12),0}function Uw(s,l){return s=s|0,l=l|0,F(13),0}function j3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,F(14)}function q3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,F(15)}function RT(s,l){return s=s|0,l=l|0,F(16),0}function G3e(){return F(17),0}function Y3e(s,l,c,f,d){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(18),0}function W3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,F(19)}function V3e(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0,F(20)}function yD(s,l,c){s=s|0,l=l|0,c=c|0,F(21)}function K3e(){F(22)}function Xm(s,l,c){s=s|0,l=l|0,c=+c,F(23)}function J3e(s,l){return s=+s,l=+l,F(24),0}function Zm(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,F(25)}var w7=[R3e,YLe],I7=[N3e,fo],B7=[ma,xw,bw,wF,IF,Dl,kw,BF,Hm,xu,Fw,vF,$v,WA,eD,jm,tD,rD,qm,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma],v7=[L3e],ef=[Er,Jm,DDe,PDe,SDe,rbe,nbe,ibe,CNe,wNe,INe,FLe,TLe,RLe,eUe,tUe,rUe,hs,Kv,_m,YA,Qw,wve,Ive,gDe,NDe,VDe,APe,SPe,GPe,aSe,ISe,MSe,$Se,gxe,Qxe,Vxe,wbe,Mbe,$be,gke,Qke,Vke,fQe,SQe,HQe,nFe,Sc,RFe,zFe,gTe,TTe,KTe,gRe,DRe,xRe,YRe,KRe,ANe,vNe,SNe,GNe,lLe,a5,qMe,COe,NOe,zOe,y4e,T4e,G4e,V4e,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er],tf=[Ow,hF,gF,Sw,Su,dF,mF,Ip,yF,EF,CF,Zv,VA,Ke,At,Wt,vr,Sn,Fr,PF,lve,Qve,dQe,kQe,MTe,WMe,dLe,Y9,Ow,Ow,Ow,Ow],Ng=[Ja,QUe,pF,D,fe,ve,vt,wt,bt,_r,di,po,sve,ove,Bve,oFe,ZTe,VNe,zMe,Wa,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja],D7=[M3e,vve],z3e=[O3e,hNe],ED=[U3e,s7,FUe,NUe,KPe,Dbe,OFe,e4e],X3e=[_3e,Exe],P7=[Rg,Yo,rt,xn,Dve,Pve,Sve,xve,bve,kve,Rg,Rg,Rg,Rg,Rg,Rg],Z3e=[H3e,IRe],NT=[Uw,r3e,ave,EDe,gPe,uSe,DSe,Xxe,Hbe,YQe,Wv,UOe,Uw,Uw,Uw,Uw],$3e=[j3e,XDe],e_e=[q3e,I4e],S7=[RT,ai,Fve,Tve,Rve,Nxe,RT,RT],CD=[G3e,Nve,Dw,ga,FRe,ZRe,QNe,X4e],x7=[Y3e,Ew],t_e=[W3e,Eke],b7=[V3e,cve],_w=[yD,R,is,en,ho,QPe,_Se,Nke,Xke,Um,hMe,vOe,M4e,yD,yD,yD],k7=[K3e],Q7=[Xm,Jv,zv,Xv,GA,nD,DF,P,nke,eTe,yRe,Xm,Xm,Xm,Xm,Xm],r_e=[J3e,yNe],LT=[Zm,nxe,hFe,ETe,aRe,ORe,iNe,ONe,pLe,rOe,lUe,Zm,Zm,Zm,Zm,Zm];return{_llvm_bswap_i32:C7,dynCall_idd:F3e,dynCall_i:D3e,_i64Subtract:dD,___udivdi3:FT,dynCall_vif:c3e,setThrew:hu,dynCall_viii:b3e,_bitshift64Lshr:mD,_bitshift64Shl:m7,dynCall_vi:f3e,dynCall_viiddi:I3e,dynCall_diii:y3e,dynCall_iii:w3e,_memset:zm,_sbrk:kp,_memcpy:Dr,__GLOBAL__sub_I_Yoga_cpp:Om,dynCall_vii:p3e,___uremdi3:TT,dynCall_vid:u3e,stackAlloc:lo,_nbind_init:EUe,getTempRet0:Ua,dynCall_di:E3e,dynCall_iid:C3e,setTempRet0:xA,_i64Add:QT,dynCall_fiff:A3e,dynCall_iiii:m3e,_emscripten_get_global_libc:kUe,dynCall_viid:Q3e,dynCall_viiid:S3e,dynCall_viififi:x3e,dynCall_ii:h3e,__GLOBAL__sub_I_Binding_cc:NMe,dynCall_viiii:T3e,dynCall_iiiiii:P3e,stackSave:gc,dynCall_viiiii:l3e,__GLOBAL__sub_I_nbind_cc:Lve,dynCall_vidd:d3e,_free:hD,runPostSets:a3e,dynCall_viiiiii:B3e,establishStackSpace:ji,_memmove:Mw,stackRestore:pu,_malloc:pD,__GLOBAL__sub_I_common_cc:tLe,dynCall_viddi:g3e,dynCall_dii:v3e,dynCall_v:k3e}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function o(){for(var p=0;p<4-1;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];o();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` -If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(o){r=o(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var om=_((wVt,OEe)=>{"use strict";var Jyt=LEe(),zyt=MEe(),Q6=!1,F6=null;zyt({},function(t,e){if(!Q6){if(Q6=!0,t)throw t;F6=e}});if(!Q6)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");OEe.exports=Jyt(F6.bind,F6.lib)});var R6=_((IVt,T6)=>{"use strict";var UEe=t=>Number.isNaN(t)?!1:t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141);T6.exports=UEe;T6.exports.default=UEe});var HEe=_((BVt,_Ee)=>{"use strict";_Ee.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Jk=_((vVt,N6)=>{"use strict";var Xyt=MP(),Zyt=R6(),$yt=HEe(),jEe=t=>{if(typeof t!="string"||t.length===0||(t=Xyt(t),t.length===0))return 0;t=t.replace($yt()," ");let e=0;for(let r=0;r=127&&o<=159||o>=768&&o<=879||(o>65535&&r++,e+=Zyt(o)?2:1)}return e};N6.exports=jEe;N6.exports.default=jEe});var M6=_((DVt,L6)=>{"use strict";var eEt=Jk(),qEe=t=>{let e=0;for(let r of t.split(` -`))e=Math.max(e,eEt(r));return e};L6.exports=qEe;L6.exports.default=qEe});var GEe=_(lB=>{"use strict";var tEt=lB&&lB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(lB,"__esModule",{value:!0});var rEt=tEt(M6()),O6={};lB.default=t=>{if(t.length===0)return{width:0,height:0};if(O6[t])return O6[t];let e=rEt.default(t),r=t.split(` -`).length;return O6[t]={width:e,height:r},{width:e,height:r}}});var YEe=_(cB=>{"use strict";var nEt=cB&&cB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cB,"__esModule",{value:!0});var dn=nEt(om()),iEt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?dn.default.POSITION_TYPE_ABSOLUTE:dn.default.POSITION_TYPE_RELATIVE)},sEt=(t,e)=>{"marginLeft"in e&&t.setMargin(dn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(dn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(dn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(dn.default.EDGE_BOTTOM,e.marginBottom||0)},oEt=(t,e)=>{"paddingLeft"in e&&t.setPadding(dn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(dn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(dn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(dn.default.EDGE_BOTTOM,e.paddingBottom||0)},aEt=(t,e)=>{var r;"flexGrow"in e&&t.setFlexGrow((r=e.flexGrow)!==null&&r!==void 0?r:0),"flexShrink"in e&&t.setFlexShrink(typeof e.flexShrink=="number"?e.flexShrink:1),"flexDirection"in e&&(e.flexDirection==="row"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in e&&(typeof e.flexBasis=="number"?t.setFlexBasis(e.flexBasis):typeof e.flexBasis=="string"?t.setFlexBasisPercent(Number.parseInt(e.flexBasis,10)):t.setFlexBasis(NaN)),"alignItems"in e&&((e.alignItems==="stretch"||!e.alignItems)&&t.setAlignItems(dn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(dn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(dn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(dn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(dn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(dn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(dn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(dn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(dn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_AROUND))},lEt=(t,e)=>{var r,o;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((o=e.minHeight)!==null&&o!==void 0?o:0))},cEt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?dn.default.DISPLAY_FLEX:dn.default.DISPLAY_NONE)},uEt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(dn.default.EDGE_TOP,r),t.setBorder(dn.default.EDGE_BOTTOM,r),t.setBorder(dn.default.EDGE_LEFT,r),t.setBorder(dn.default.EDGE_RIGHT,r)}};cB.default=(t,e={})=>{iEt(t,e),sEt(t,e),oEt(t,e),aEt(t,e),lEt(t,e),cEt(t,e),uEt(t,e)}});var KEe=_((xVt,VEe)=>{"use strict";var uB=Jk(),AEt=MP(),fEt=vI(),_6=new Set(["\x1B","\x9B"]),pEt=39,WEe=t=>`${_6.values().next().value}[${t}m`,hEt=t=>t.split(" ").map(e=>uB(e)),U6=(t,e,r)=>{let o=[...e],a=!1,n=uB(AEt(t[t.length-1]));for(let[u,A]of o.entries()){let p=uB(A);if(n+p<=r?t[t.length-1]+=A:(t.push(A),n=0),_6.has(A))a=!0;else if(a&&A==="m"){a=!1;continue}a||(n+=p,n===r&&u0&&t.length>1&&(t[t.length-2]+=t.pop())},gEt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(uB(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},dEt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",a="",n,u=hEt(t),A=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let E=uB(A[A.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(A.push(""),E=0),(E>0||r.trim===!1)&&(A[A.length-1]+=" ",E++)),r.hard&&u[p]>e){let I=e-E,v=1+Math.floor((u[p]-I-1)/e);Math.floor((u[p]-1)/e)e&&E>0&&u[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){U6(A,h,e);continue}A[A.length-1]+=h}r.trim!==!1&&(A=A.map(gEt)),o=A.join(` -`);for(let[p,h]of[...o].entries()){if(a+=h,_6.has(h)){let I=parseFloat(/\d[^m]*/.exec(o.slice(p,p+4)));n=I===pEt?null:I}let E=fEt.codes.get(Number(n));n&&E&&(o[p+1]===` -`?a+=WEe(E):h===` -`&&(a+=WEe(n)))}return a};VEe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` +${this.getDeclarations()}`}createSession(){return new CH(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),o=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:u,dependencyType:A}of e){let p=B2([A,W.stringifyIdent(n)]),h=_e.getMapWithDefault(o,a.cwd);_e.getMapWithDefault(h,p).set(u??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:u}of r){let A=B2(n),p=_e.getMapWithDefault(o,a.cwd);_e.getMapWithDefault(p,A).set(JSON.parse(u)??void 0,new Set)}return{manifestUpdates:o,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=V.resolve(this.project.cwd,em(o.links.WorkspaceCwd)),n=em(o.links.DependencyIdent),u=em(o.links.DependencyRange),A=em(o.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=W.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:u,dependencyType:A})}return _e.sortMap(r,[({dependencyRange:o})=>o!==null?"0":"1",({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({dependencyIdent:o})=>W.stringifyIdent(o)])}async genEnforcedFields(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=V.resolve(this.project.cwd,em(o.links.WorkspaceCwd)),n=em(o.links.FieldPath),u=Xgt(o.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let A=this.project.getWorkspaceByCwd(a);r.push({workspace:A,fieldPath:n,fieldValue:u})}return _e.sortMap(r,[({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({fieldPath:o})=>o])}async*query(e){let r=this.createSession();for await(let o of r.makeQuery(e)){let a={};for(let[n,u]of Object.entries(o.links))n!=="_"&&(a[n]=em(u));yield a}}}});var wme=_(Ik=>{"use strict";Object.defineProperty(Ik,"__esModule",{value:!0});function G2(t){let e=[...t.caches],r=e.shift();return r===void 0?Cme():{get(o,a,n={miss:()=>Promise.resolve()}){return r.get(o,a,n).catch(()=>G2({caches:e}).get(o,a,n))},set(o,a){return r.set(o,a).catch(()=>G2({caches:e}).set(o,a))},delete(o){return r.delete(o).catch(()=>G2({caches:e}).delete(o))},clear(){return r.clear().catch(()=>G2({caches:e}).clear())}}}function Cme(){return{get(t,e,r={miss:()=>Promise.resolve()}){return e().then(a=>Promise.all([a,r.miss(a)])).then(([a])=>a)},set(t,e){return Promise.resolve(e)},delete(t){return Promise.resolve()},clear(){return Promise.resolve()}}}Ik.createFallbackableCache=G2;Ik.createNullCache=Cme});var Bme=_((QWt,Ime)=>{Ime.exports=wme()});var vme=_(TH=>{"use strict";Object.defineProperty(TH,"__esModule",{value:!0});function ddt(t={serializable:!0}){let e={};return{get(r,o,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let u=o(),A=a&&a.miss||(()=>Promise.resolve());return u.then(p=>A(p)).then(()=>u)},set(r,o){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}TH.createInMemoryCache=ddt});var Sme=_((RWt,Dme)=>{Dme.exports=vme()});var bme=_(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});function mdt(t,e,r){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===NH.WithinHeaders?o:{}},queryParameters(){return t===NH.WithinQueryParameters?o:{}}}}function ydt(t){let e=0,r=()=>(e++,new Promise(o=>{setTimeout(()=>{o(t(r))},Math.min(100*e,1e3))}));return t(r)}function Pme(t,e=(r,o)=>Promise.resolve()){return Object.assign(t,{wait(r){return Pme(t.then(o=>Promise.all([e(o,r),o])).then(o=>o[1]))}})}function Edt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o}return t}function Cdt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function wdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var Idt="4.14.2",Bdt=t=>()=>t.transporter.requester.destroy(),NH={WithinQueryParameters:0,WithinHeaders:1};Zc.AuthMode=NH;Zc.addMethods=Cdt;Zc.createAuth=mdt;Zc.createRetryablePromise=ydt;Zc.createWaitablePromise=Pme;Zc.destroy=Bdt;Zc.encode=wdt;Zc.shuffle=Edt;Zc.version=Idt});var Y2=_((NWt,xme)=>{xme.exports=bme()});var kme=_(LH=>{"use strict";Object.defineProperty(LH,"__esModule",{value:!0});var vdt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};LH.MethodEnum=vdt});var W2=_((OWt,Qme)=>{Qme.exports=kme()});var Wme=_(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});var Rme=W2();function OH(t,e){let r=t||{},o=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(o[a]=r[a])}),{data:Object.entries(o).length>0?o:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var K2={Read:1,Write:2,Any:3},xC={Up:1,Down:2,Timeouted:3},Tme=2*60*1e3;function UH(t,e=xC.Up){return{...t,status:e,lastUpdate:Date.now()}}function Nme(t){return t.status===xC.Up||Date.now()-t.lastUpdate>Tme}function Lme(t){return t.status===xC.Timeouted&&Date.now()-t.lastUpdate<=Tme}function _H(t){return typeof t=="string"?{protocol:"https",url:t,accept:K2.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||K2.Any}}function Ddt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(UH(r))))).then(r=>{let o=r.filter(A=>Nme(A)),a=r.filter(A=>Lme(A)),n=[...o,...a],u=n.length>0?n.map(A=>_H(A)):e;return{getTimeout(A,p){return(a.length===0&&A===0?1:a.length+3+A)*p},statelessHosts:u}})}var Sdt=({isTimedOut:t,status:e})=>!t&&~~e===0,Pdt=t=>{let e=t.status;return t.isTimedOut||Sdt(t)||~~(e/100)!==2&&~~(e/100)!==4},bdt=({status:t})=>~~(t/100)===2,xdt=(t,e)=>Pdt(t)?e.onRetry(t):bdt(t)?e.onSuccess(t):e.onFail(t);function Fme(t,e,r,o){let a=[],n=Hme(r,o),u=qme(t,o),A=r.method,p=r.method!==Rme.MethodEnum.Get?{}:{...r.data,...o.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...o.queryParameters},E=0,I=(v,x)=>{let C=v.pop();if(C===void 0)throw Yme(MH(a));let R={data:n,headers:u,method:A,url:Ume(C,r.path,h),connectTimeout:x(E,t.timeouts.connect),responseTimeout:x(E,o.timeout)},L=J=>{let te={request:R,response:J,host:C,triesLeft:v.length};return a.push(te),te},U={onSuccess:J=>Ome(J),onRetry(J){let te=L(J);return J.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",HH(te)),t.hostsCache.set(C,UH(C,J.isTimedOut?xC.Timeouted:xC.Down))]).then(()=>I(v,x))},onFail(J){throw L(J),Mme(J,MH(a))}};return t.requester.send(R).then(J=>xdt(J,U))};return Ddt(t.hostsCache,e).then(v=>I([...v.statelessHosts].reverse(),v.getTimeout))}function kdt(t){let{hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,hosts:p,queryParameters:h,headers:E}=t,I={hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,headers:E,queryParameters:h,hosts:p.map(v=>_H(v)),read(v,x){let C=OH(x,I.timeouts.read),R=()=>Fme(I,I.hosts.filter(J=>(J.accept&K2.Read)!==0),v,C);if((C.cacheable!==void 0?C.cacheable:v.cacheable)!==!0)return R();let U={request:v,mappedRequestOptions:C,transporter:{queryParameters:I.queryParameters,headers:I.headers}};return I.responsesCache.get(U,()=>I.requestsCache.get(U,()=>I.requestsCache.set(U,R()).then(J=>Promise.all([I.requestsCache.delete(U),J]),J=>Promise.all([I.requestsCache.delete(U),Promise.reject(J)])).then(([J,te])=>te)),{miss:J=>I.responsesCache.set(U,J)})},write(v,x){return Fme(I,I.hosts.filter(C=>(C.accept&K2.Write)!==0),v,OH(x,I.timeouts.write))}};return I}function Qdt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let o=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(o)===-1&&(e.value=`${e.value}${o}`),e}};return e}function Ome(t){try{return JSON.parse(t.content)}catch(e){throw Gme(e.message,t)}}function Mme({content:t,status:e},r){let o=t;try{o=JSON.parse(t).message}catch{}return jme(o,e,r)}function Fdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function Ume(t,e,r){let o=_me(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return o.length&&(a+=`?${o}`),a}function _me(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Fdt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function Hme(t,e){if(t.method===Rme.MethodEnum.Get||t.data===void 0&&e.data===void 0)return;let r=Array.isArray(t.data)?t.data:{...t.data,...e.data};return JSON.stringify(r)}function qme(t,e){let r={...t.headers,...e.headers},o={};return Object.keys(r).forEach(a=>{let n=r[a];o[a.toLowerCase()]=n}),o}function MH(t){return t.map(e=>HH(e))}function HH(t){let e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...t,request:{...t.request,headers:{...t.request.headers,...e}}}}function jme(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function Gme(t,e){return{name:"DeserializationError",message:t,response:e}}function Yme(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Fi.CallEnum=K2;Fi.HostStatusEnum=xC;Fi.createApiError=jme;Fi.createDeserializationError=Gme;Fi.createMappedRequestOptions=OH;Fi.createRetryError=Yme;Fi.createStatefulHost=UH;Fi.createStatelessHost=_H;Fi.createTransporter=kdt;Fi.createUserAgent=Qdt;Fi.deserializeFailure=Mme;Fi.deserializeSuccess=Ome;Fi.isStatefulHostTimeouted=Lme;Fi.isStatefulHostUp=Nme;Fi.serializeData=Hme;Fi.serializeHeaders=qme;Fi.serializeQueryParameters=_me;Fi.serializeUrl=Ume;Fi.stackFrameWithoutCredentials=HH;Fi.stackTraceWithoutCredentials=MH});var V2=_((UWt,Kme)=>{Kme.exports=Wme()});var Vme=_(m0=>{"use strict";Object.defineProperty(m0,"__esModule",{value:!0});var kC=Y2(),Rdt=V2(),J2=W2(),Tdt=t=>{let e=t.region||"us",r=kC.createAuth(kC.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Rdt.createTransporter({hosts:[{url:`analytics.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a=t.appId;return kC.addMethods({appId:a,transporter:o},t.methods)},Ndt=t=>(e,r)=>t.transporter.write({method:J2.MethodEnum.Post,path:"2/abtests",data:e},r),Ldt=t=>(e,r)=>t.transporter.write({method:J2.MethodEnum.Delete,path:kC.encode("2/abtests/%s",e)},r),Odt=t=>(e,r)=>t.transporter.read({method:J2.MethodEnum.Get,path:kC.encode("2/abtests/%s",e)},r),Mdt=t=>e=>t.transporter.read({method:J2.MethodEnum.Get,path:"2/abtests"},e),Udt=t=>(e,r)=>t.transporter.write({method:J2.MethodEnum.Post,path:kC.encode("2/abtests/%s/stop",e)},r);m0.addABTest=Ndt;m0.createAnalyticsClient=Tdt;m0.deleteABTest=Ldt;m0.getABTest=Odt;m0.getABTests=Mdt;m0.stopABTest=Udt});var zme=_((HWt,Jme)=>{Jme.exports=Vme()});var Zme=_(z2=>{"use strict";Object.defineProperty(z2,"__esModule",{value:!0});var qH=Y2(),_dt=V2(),Xme=W2(),Hdt=t=>{let e=t.region||"us",r=qH.createAuth(qH.AuthMode.WithinHeaders,t.appId,t.apiKey),o=_dt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return qH.addMethods({appId:t.appId,transporter:o},t.methods)},qdt=t=>e=>t.transporter.read({method:Xme.MethodEnum.Get,path:"1/strategies/personalization"},e),jdt=t=>(e,r)=>t.transporter.write({method:Xme.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);z2.createPersonalizationClient=Hdt;z2.getPersonalizationStrategy=qdt;z2.setPersonalizationStrategy=jdt});var eye=_((jWt,$me)=>{$me.exports=Zme()});var hye=_(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var Gt=Y2(),Na=V2(),Ir=W2(),Gdt=ve("crypto");function Bk(t){let e=r=>t.request(r).then(o=>{if(t.batch!==void 0&&t.batch(o.hits),!t.shouldStop(o))return o.cursor?e({cursor:o.cursor}):e({page:(r.page||0)+1})});return e({})}var Ydt=t=>{let e=t.appId,r=Gt.createAuth(t.authMode!==void 0?t.authMode:Gt.AuthMode.WithinHeaders,e,t.apiKey),o=Na.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:Na.CallEnum.Read},{url:`${e}.algolia.net`,accept:Na.CallEnum.Write}].concat(Gt.shuffle([{url:`${e}-1.algolianet.com`},{url:`${e}-2.algolianet.com`},{url:`${e}-3.algolianet.com`}])),...t,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a={transporter:o,appId:e,addAlgoliaAgent(n,u){o.userAgent.add({segment:n,version:u})},clearCache(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})}};return Gt.addMethods(a,t.methods)};function tye(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function rye(){return{name:"ObjectNotFoundError",message:"Object not found."}}function nye(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Wdt=t=>(e,r)=>{let{queryParameters:o,...a}=r||{},n={acl:e,...o!==void 0?{queryParameters:o}:{}},u=(A,p)=>Gt.createRetryablePromise(h=>X2(t)(A.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/keys",data:n},a),u)},Kdt=t=>(e,r,o)=>{let a=Na.createMappedRequestOptions(o);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},Vdt=t=>(e,r,o)=>t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},o),Jdt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(o,a)=>QC(t)(o.taskID,a)),vk=t=>(e,r,o)=>{let a=(n,u)=>Z2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},o),a)},zdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Sk.Rules]}),Xdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Sk.Settings]}),Zdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Sk.Synonyms]}),$dt=t=>(e,r)=>e.method===Ir.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),emt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>X2(t)(e,n).then(u).catch(A=>{if(A.status!==404)throw A}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/keys/%s",e)},r),o)},tmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>QC(t)(n.taskID,u))},rmt=()=>(t,e)=>{let r=Na.serializeQueryParameters(e),o=Gdt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(o+r).toString("base64")},X2=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/keys/%s",e)},r),iye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/task/%s",e.toString())},r),nmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),imt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/logs"},e),smt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,o=e.match(r);if(o===null)throw nye();return parseInt(o[1],10)-Math.round(new Date().getTime()/1e3)},omt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/top"},e),amt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/clusters/mapping/%s",e)},r),lmt=t=>e=>{let{retrieveMappings:r,...o}=e||{};return r===!0&&(o.getClusters=!0),t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/pending"},o)},Z2=t=>(e,r={})=>{let o={transporter:t.transporter,appId:t.appId,indexName:e};return Gt.addMethods(o,r.methods)},cmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/keys"},e),umt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters"},e),Amt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/indexes"},e),fmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping"},e),pmt=t=>(e,r,o)=>{let a=(n,u)=>Z2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},o),a)},hmt=t=>(e,r)=>{let o=(a,n)=>Promise.all(Object.keys(a.taskID).map(u=>Z2(t)(u,{methods:{waitTask:Zi}}).waitTask(a.taskID[u],n)));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),o)},gmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),dmt=t=>(e,r)=>{let o=e.map(a=>({...a,params:Na.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},r)},mmt=t=>(e,r)=>Promise.all(e.map(o=>{let{facetName:a,facetQuery:n,...u}=o.params;return Z2(t)(o.indexName,{methods:{searchForFacetValues:Aye}}).searchForFacetValues(a,n,{...r,...u})})),ymt=t=>(e,r)=>{let o=Na.createMappedRequestOptions(r);return o.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Delete,path:"1/clusters/mapping"},o)},Emt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},o),(n,u)=>QC(t)(n.taskID,u))},Cmt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>X2(t)(e,n).catch(A=>{if(A.status!==404)throw A;return u()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/keys/%s/restore",e)},r),o)},wmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>QC(t)(n.taskID,u))},Imt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},o),Bmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),vmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(o,a)=>QC(t)(o.taskID,a)),Dmt=t=>(e,r)=>{let o=Object.assign({},r),{queryParameters:a,...n}=r||{},u=a?{queryParameters:a}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(o).filter(I=>A.indexOf(I)!==-1).every(I=>E[I]===o[I]),h=(E,I)=>Gt.createRetryablePromise(v=>X2(t)(e,I).then(x=>p(x)?Promise.resolve():v()));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/keys/%s",e),data:u},n),h)},QC=t=>(e,r)=>Gt.createRetryablePromise(o=>iye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),sye=t=>(e,r)=>{let o=(a,n)=>Zi(t)(a.taskID,n);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),o)},Smt=t=>e=>Bk({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),Pmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Bk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},bmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Bk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Dk=t=>(e,r,o)=>{let{batchSize:a,...n}=o||{},u={taskIDs:[],objectIDs:[]},A=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:I})),n).then(I=>(u.objectIDs=u.objectIDs.concat(I.objectIDs),u.taskIDs.push(I.taskID),E++,A(E)))};return Gt.createWaitablePromise(A(),(p,h)=>Promise.all(p.taskIDs.map(E=>Zi(t)(E,h))))},xmt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/clear",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),kmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Qmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Fmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(o,a)=>Zi(t)(o.taskID,a)),Rmt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Tmt=t=>(e,r)=>Gt.createWaitablePromise(oye(t)([e],r).then(o=>({taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),oye=t=>(e,r)=>{let o=e.map(a=>({objectID:a}));return Dk(t)(o,nm.DeleteObject,r)},Nmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Lmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Omt=t=>e=>aye(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),Mmt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},o),Umt=t=>(e,r)=>{let{query:o,paginate:a,...n}=r||{},u=0,A=()=>uye(t)(o||"",{...n,page:u}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:u};if(u++,a===!1||u>=p.nbPages)throw rye();return A()});return A()},_mt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/%s",t.indexName,e)},r),Hmt=()=>(t,e)=>{for(let[r,o]of Object.entries(t.hits))if(o.objectID===e)return parseInt(r,10);return-1},qmt=t=>(e,r)=>{let{attributesToRetrieve:o,...a}=r||{},n=e.map(u=>({indexName:t.indexName,objectID:u,...o?{attributesToRetrieve:o}:{}}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},jmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),aye=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),Gmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),lye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),Ymt=t=>(e,r)=>Gt.createWaitablePromise(cye(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),cye=t=>(e,r)=>{let{createIfNotExists:o,...a}=r||{},n=o?nm.PartialUpdateObject:nm.PartialUpdateObjectNoCreate;return Dk(t)(e,n,a)},Wmt=t=>(e,r)=>{let{safe:o,autoGenerateObjectIDIfNotExist:a,batchSize:n,...u}=r||{},A=(C,R,L,U)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",C),data:{operation:L,destination:R}},U),(J,te)=>Zi(t)(J.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=jH({appId:t.appId,transporter:t.transporter,indexName:h}),I=[],v=A(t.indexName,h,"copy",{...u,scope:["settings","synonyms","rules"]});I.push(v);let x=(o?v.wait(u):v).then(()=>{let C=E(e,{...u,autoGenerateObjectIDIfNotExist:a,batchSize:n});return I.push(C),o?C.wait(u):C}).then(()=>{let C=A(h,t.indexName,"move",u);return I.push(C),o?C.wait(u):C}).then(()=>Promise.all(I)).then(([C,R,L])=>({objectIDs:R.objectIDs,taskIDs:[C.taskID,...R.taskIDs,L.taskID]}));return Gt.createWaitablePromise(x,(C,R)=>Promise.all(I.map(L=>L.wait(R))))},Kmt=t=>(e,r)=>GH(t)(e,{...r,clearExistingRules:!0}),Vmt=t=>(e,r)=>YH(t)(e,{...r,clearExistingSynonyms:!0}),Jmt=t=>(e,r)=>Gt.createWaitablePromise(jH(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),jH=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:o,...a}=r||{},n=o?nm.AddObject:nm.UpdateObject;if(n===nm.UpdateObject){for(let u of e)if(u.objectID===void 0)return Gt.createWaitablePromise(Promise.reject(tye()))}return Dk(t)(e,n,a)},zmt=t=>(e,r)=>GH(t)([e],r),GH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingRules:a,...n}=r||{},u=Na.createMappedRequestOptions(n);return o&&(u.queryParameters.forwardToReplicas=1),a&&(u.queryParameters.clearExistingRules=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},u),(A,p)=>Zi(t)(A.taskID,p))},Xmt=t=>(e,r)=>YH(t)([e],r),YH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingSynonyms:a,replaceExistingSynonyms:n,...u}=r||{},A=Na.createMappedRequestOptions(u);return o&&(A.queryParameters.forwardToReplicas=1),(n||a)&&(A.queryParameters.replaceExistingSynonyms=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},A),(p,h)=>Zi(t)(p.taskID,h))},uye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),Aye=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},o),fye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),pye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),Zmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(u,A)=>Zi(t)(u.taskID,A))},Zi=t=>(e,r)=>Gt.createRetryablePromise(o=>lye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),$mt={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Personalization:"personalization",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},nm={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},Sk={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},eyt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},tyt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Ft.ApiKeyACLEnum=$mt;Ft.BatchActionEnum=nm;Ft.ScopeEnum=Sk;Ft.StrategyEnum=eyt;Ft.SynonymEnum=tyt;Ft.addApiKey=Wdt;Ft.assignUserID=Kdt;Ft.assignUserIDs=Vdt;Ft.batch=sye;Ft.browseObjects=Smt;Ft.browseRules=Pmt;Ft.browseSynonyms=bmt;Ft.chunkedBatch=Dk;Ft.clearDictionaryEntries=Jdt;Ft.clearObjects=xmt;Ft.clearRules=kmt;Ft.clearSynonyms=Qmt;Ft.copyIndex=vk;Ft.copyRules=zdt;Ft.copySettings=Xdt;Ft.copySynonyms=Zdt;Ft.createBrowsablePromise=Bk;Ft.createMissingObjectIDError=tye;Ft.createObjectNotFoundError=rye;Ft.createSearchClient=Ydt;Ft.createValidUntilNotFoundError=nye;Ft.customRequest=$dt;Ft.deleteApiKey=emt;Ft.deleteBy=Fmt;Ft.deleteDictionaryEntries=tmt;Ft.deleteIndex=Rmt;Ft.deleteObject=Tmt;Ft.deleteObjects=oye;Ft.deleteRule=Nmt;Ft.deleteSynonym=Lmt;Ft.exists=Omt;Ft.findAnswers=Mmt;Ft.findObject=Umt;Ft.generateSecuredApiKey=rmt;Ft.getApiKey=X2;Ft.getAppTask=iye;Ft.getDictionarySettings=nmt;Ft.getLogs=imt;Ft.getObject=_mt;Ft.getObjectPosition=Hmt;Ft.getObjects=qmt;Ft.getRule=jmt;Ft.getSecuredApiKeyRemainingValidity=smt;Ft.getSettings=aye;Ft.getSynonym=Gmt;Ft.getTask=lye;Ft.getTopUserIDs=omt;Ft.getUserID=amt;Ft.hasPendingMappings=lmt;Ft.initIndex=Z2;Ft.listApiKeys=cmt;Ft.listClusters=umt;Ft.listIndices=Amt;Ft.listUserIDs=fmt;Ft.moveIndex=pmt;Ft.multipleBatch=hmt;Ft.multipleGetObjects=gmt;Ft.multipleQueries=dmt;Ft.multipleSearchForFacetValues=mmt;Ft.partialUpdateObject=Ymt;Ft.partialUpdateObjects=cye;Ft.removeUserID=ymt;Ft.replaceAllObjects=Wmt;Ft.replaceAllRules=Kmt;Ft.replaceAllSynonyms=Vmt;Ft.replaceDictionaryEntries=Emt;Ft.restoreApiKey=Cmt;Ft.saveDictionaryEntries=wmt;Ft.saveObject=Jmt;Ft.saveObjects=jH;Ft.saveRule=zmt;Ft.saveRules=GH;Ft.saveSynonym=Xmt;Ft.saveSynonyms=YH;Ft.search=uye;Ft.searchDictionaryEntries=Imt;Ft.searchForFacetValues=Aye;Ft.searchRules=fye;Ft.searchSynonyms=pye;Ft.searchUserIDs=Bmt;Ft.setDictionarySettings=vmt;Ft.setSettings=Zmt;Ft.updateApiKey=Dmt;Ft.waitAppTask=QC;Ft.waitTask=Zi});var dye=_((YWt,gye)=>{gye.exports=hye()});var mye=_(Pk=>{"use strict";Object.defineProperty(Pk,"__esModule",{value:!0});function ryt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var nyt={Debug:1,Info:2,Error:3};Pk.LogLevelEnum=nyt;Pk.createNullLogger=ryt});var Eye=_((KWt,yye)=>{yye.exports=mye()});var Bye=_(WH=>{"use strict";Object.defineProperty(WH,"__esModule",{value:!0});var Cye=ve("http"),wye=ve("https"),iyt=ve("url"),Iye={keepAlive:!0},syt=new Cye.Agent(Iye),oyt=new wye.Agent(Iye);function ayt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:o={}}={}){let a=e||t||syt,n=r||t||oyt;return{send(u){return new Promise(A=>{let p=iyt.parse(u.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...o,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:u.method,headers:{...o&&o.headers?o.headers:{},...u.headers},...p.port!==void 0?{port:p.port||""}:{}},I=(p.protocol==="https:"?wye:Cye).request(E,R=>{let L=[];R.on("data",U=>{L=L.concat(U)}),R.on("end",()=>{clearTimeout(x),clearTimeout(C),A({status:R.statusCode||0,content:Buffer.concat(L).toString(),isTimedOut:!1})})}),v=(R,L)=>setTimeout(()=>{I.abort(),A({status:0,content:L,isTimedOut:!0})},R*1e3),x=v(u.connectTimeout,"Connection timeout"),C;I.on("error",R=>{clearTimeout(x),clearTimeout(C),A({status:0,content:R.message,isTimedOut:!1})}),I.once("response",()=>{clearTimeout(x),C=v(u.responseTimeout,"Socket timeout")}),u.data!==void 0&&I.write(u.data),I.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}WH.createNodeHttpRequester=ayt});var Dye=_((JWt,vye)=>{vye.exports=Bye()});var xye=_((zWt,bye)=>{"use strict";var Sye=Bme(),lyt=Sme(),FC=zme(),VH=Y2(),KH=eye(),Ut=dye(),cyt=Eye(),uyt=Dye(),Ayt=V2();function Pye(t,e,r){let o={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:uyt.createNodeHttpRequester(),logger:cyt.createNullLogger(),responsesCache:Sye.createNullCache(),requestsCache:Sye.createNullCache(),hostsCache:lyt.createInMemoryCache(),userAgent:Ayt.createUserAgent(VH.version).add({segment:"Node.js",version:process.versions.node})},a={...o,...r},n=()=>u=>KH.createPersonalizationClient({...o,...u,methods:{getPersonalizationStrategy:KH.getPersonalizationStrategy,setPersonalizationStrategy:KH.setPersonalizationStrategy}});return Ut.createSearchClient({...a,methods:{search:Ut.multipleQueries,searchForFacetValues:Ut.multipleSearchForFacetValues,multipleBatch:Ut.multipleBatch,multipleGetObjects:Ut.multipleGetObjects,multipleQueries:Ut.multipleQueries,copyIndex:Ut.copyIndex,copySettings:Ut.copySettings,copyRules:Ut.copyRules,copySynonyms:Ut.copySynonyms,moveIndex:Ut.moveIndex,listIndices:Ut.listIndices,getLogs:Ut.getLogs,listClusters:Ut.listClusters,multipleSearchForFacetValues:Ut.multipleSearchForFacetValues,getApiKey:Ut.getApiKey,addApiKey:Ut.addApiKey,listApiKeys:Ut.listApiKeys,updateApiKey:Ut.updateApiKey,deleteApiKey:Ut.deleteApiKey,restoreApiKey:Ut.restoreApiKey,assignUserID:Ut.assignUserID,assignUserIDs:Ut.assignUserIDs,getUserID:Ut.getUserID,searchUserIDs:Ut.searchUserIDs,listUserIDs:Ut.listUserIDs,getTopUserIDs:Ut.getTopUserIDs,removeUserID:Ut.removeUserID,hasPendingMappings:Ut.hasPendingMappings,generateSecuredApiKey:Ut.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Ut.getSecuredApiKeyRemainingValidity,destroy:VH.destroy,clearDictionaryEntries:Ut.clearDictionaryEntries,deleteDictionaryEntries:Ut.deleteDictionaryEntries,getDictionarySettings:Ut.getDictionarySettings,getAppTask:Ut.getAppTask,replaceDictionaryEntries:Ut.replaceDictionaryEntries,saveDictionaryEntries:Ut.saveDictionaryEntries,searchDictionaryEntries:Ut.searchDictionaryEntries,setDictionarySettings:Ut.setDictionarySettings,waitAppTask:Ut.waitAppTask,customRequest:Ut.customRequest,initIndex:u=>A=>Ut.initIndex(u)(A,{methods:{batch:Ut.batch,delete:Ut.deleteIndex,findAnswers:Ut.findAnswers,getObject:Ut.getObject,getObjects:Ut.getObjects,saveObject:Ut.saveObject,saveObjects:Ut.saveObjects,search:Ut.search,searchForFacetValues:Ut.searchForFacetValues,waitTask:Ut.waitTask,setSettings:Ut.setSettings,getSettings:Ut.getSettings,partialUpdateObject:Ut.partialUpdateObject,partialUpdateObjects:Ut.partialUpdateObjects,deleteObject:Ut.deleteObject,deleteObjects:Ut.deleteObjects,deleteBy:Ut.deleteBy,clearObjects:Ut.clearObjects,browseObjects:Ut.browseObjects,getObjectPosition:Ut.getObjectPosition,findObject:Ut.findObject,exists:Ut.exists,saveSynonym:Ut.saveSynonym,saveSynonyms:Ut.saveSynonyms,getSynonym:Ut.getSynonym,searchSynonyms:Ut.searchSynonyms,browseSynonyms:Ut.browseSynonyms,deleteSynonym:Ut.deleteSynonym,clearSynonyms:Ut.clearSynonyms,replaceAllObjects:Ut.replaceAllObjects,replaceAllSynonyms:Ut.replaceAllSynonyms,searchRules:Ut.searchRules,getRule:Ut.getRule,deleteRule:Ut.deleteRule,saveRule:Ut.saveRule,saveRules:Ut.saveRules,replaceAllRules:Ut.replaceAllRules,browseRules:Ut.browseRules,clearRules:Ut.clearRules}}),initAnalytics:()=>u=>FC.createAnalyticsClient({...o,...u,methods:{addABTest:FC.addABTest,getABTest:FC.getABTest,getABTests:FC.getABTests,stopABTest:FC.stopABTest,deleteABTest:FC.deleteABTest}}),initPersonalization:n,initRecommendation:()=>u=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(u))}})}Pye.version=VH.version;bye.exports=Pye});var zH=_((XWt,JH)=>{var kye=xye();JH.exports=kye;JH.exports.default=kye});var $H=_(($Wt,Rye)=>{"use strict";var Fye=Object.getOwnPropertySymbols,pyt=Object.prototype.hasOwnProperty,hyt=Object.prototype.propertyIsEnumerable;function gyt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function dyt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var o=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(o.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Rye.exports=dyt()?Object.assign:function(t,e){for(var r,o=gyt(t),a,n=1;n{"use strict";var i6=$H(),$c=typeof Symbol=="function"&&Symbol.for,$2=$c?Symbol.for("react.element"):60103,myt=$c?Symbol.for("react.portal"):60106,yyt=$c?Symbol.for("react.fragment"):60107,Eyt=$c?Symbol.for("react.strict_mode"):60108,Cyt=$c?Symbol.for("react.profiler"):60114,wyt=$c?Symbol.for("react.provider"):60109,Iyt=$c?Symbol.for("react.context"):60110,Byt=$c?Symbol.for("react.forward_ref"):60112,vyt=$c?Symbol.for("react.suspense"):60113,Dyt=$c?Symbol.for("react.memo"):60115,Syt=$c?Symbol.for("react.lazy"):60116,Tye=typeof Symbol=="function"&&Symbol.iterator;function eB(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;rbk.length&&bk.push(t)}function t6(t,e,r,o){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var n=!1;if(t===null)n=!0;else switch(a){case"string":case"number":n=!0;break;case"object":switch(t.$$typeof){case $2:case myt:n=!0}}if(n)return r(o,t,e===""?"."+e6(t,0):e),1;if(n=0,e=e===""?".":e+":",Array.isArray(t))for(var u=0;u{"use strict";Wye.exports=Yye()});var u6=_((rKt,c6)=>{"use strict";var An=c6.exports;c6.exports.default=An;var Ln="\x1B[",tB="\x1B]",TC="\x07",xk=";",Kye=process.env.TERM_PROGRAM==="Apple_Terminal";An.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Ln+(t+1)+"G":Ln+(e+1)+";"+(t+1)+"H"};An.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Ln+-t+"D":t>0&&(r+=Ln+t+"C"),e<0?r+=Ln+-e+"A":e>0&&(r+=Ln+e+"B"),r};An.cursorUp=(t=1)=>Ln+t+"A";An.cursorDown=(t=1)=>Ln+t+"B";An.cursorForward=(t=1)=>Ln+t+"C";An.cursorBackward=(t=1)=>Ln+t+"D";An.cursorLeft=Ln+"G";An.cursorSavePosition=Kye?"\x1B7":Ln+"s";An.cursorRestorePosition=Kye?"\x1B8":Ln+"u";An.cursorGetPosition=Ln+"6n";An.cursorNextLine=Ln+"E";An.cursorPrevLine=Ln+"F";An.cursorHide=Ln+"?25l";An.cursorShow=Ln+"?25h";An.eraseLines=t=>{let e="";for(let r=0;r[tB,"8",xk,xk,e,TC,t,tB,"8",xk,xk,TC].join("");An.image=(t,e={})=>{let r=`${tB}1337;File=inline=1`;return e.width&&(r+=`;width=${e.width}`),e.height&&(r+=`;height=${e.height}`),e.preserveAspectRatio===!1&&(r+=";preserveAspectRatio=0"),r+":"+t.toString("base64")+TC};An.iTerm={setCwd:(t=process.cwd())=>`${tB}50;CurrentDir=${t}${TC}`,annotation:(t,e={})=>{let r=`${tB}1337;`,o=typeof e.x<"u",a=typeof e.y<"u";if((o||a)&&!(o&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(o?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+TC}}});var Jye=_((nKt,A6)=>{"use strict";var Vye=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};A6.exports=Vye;A6.exports.default=Vye});var Xye=_((iKt,Qk)=>{"use strict";var Fyt=Jye(),kk=new WeakMap,zye=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,o=0,a=t.displayName||t.name||"",n=function(...u){if(kk.set(n,++o),o===1)r=t.apply(this,u),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return Fyt(n,t),kk.set(n,o),n};Qk.exports=zye;Qk.exports.default=zye;Qk.exports.callCount=t=>{if(!kk.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return kk.get(t)}});var Zye=_((sKt,Fk)=>{Fk.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Fk.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Fk.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var h6=_((oKt,OC)=>{var Ei=global.process,im=function(t){return t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function"};im(Ei)?($ye=ve("assert"),NC=Zye(),eEe=/^win/i.test(Ei.platform),rB=ve("events"),typeof rB!="function"&&(rB=rB.EventEmitter),Ei.__signal_exit_emitter__?Ts=Ei.__signal_exit_emitter__:(Ts=Ei.__signal_exit_emitter__=new rB,Ts.count=0,Ts.emitted={}),Ts.infinite||(Ts.setMaxListeners(1/0),Ts.infinite=!0),OC.exports=function(t,e){if(!im(global.process))return function(){};$ye.equal(typeof t,"function","a callback must be provided for exit handler"),LC===!1&&f6();var r="exit";e&&e.alwaysLast&&(r="afterexit");var o=function(){Ts.removeListener(r,t),Ts.listeners("exit").length===0&&Ts.listeners("afterexit").length===0&&Rk()};return Ts.on(r,t),o},Rk=function(){!LC||!im(global.process)||(LC=!1,NC.forEach(function(e){try{Ei.removeListener(e,Tk[e])}catch{}}),Ei.emit=Nk,Ei.reallyExit=p6,Ts.count-=1)},OC.exports.unload=Rk,sm=function(e,r,o){Ts.emitted[e]||(Ts.emitted[e]=!0,Ts.emit(e,r,o))},Tk={},NC.forEach(function(t){Tk[t]=function(){if(!!im(global.process)){var r=Ei.listeners(t);r.length===Ts.count&&(Rk(),sm("exit",null,t),sm("afterexit",null,t),eEe&&t==="SIGHUP"&&(t="SIGINT"),Ei.kill(Ei.pid,t))}}}),OC.exports.signals=function(){return NC},LC=!1,f6=function(){LC||!im(global.process)||(LC=!0,Ts.count+=1,NC=NC.filter(function(e){try{return Ei.on(e,Tk[e]),!0}catch{return!1}}),Ei.emit=rEe,Ei.reallyExit=tEe)},OC.exports.load=f6,p6=Ei.reallyExit,tEe=function(e){!im(global.process)||(Ei.exitCode=e||0,sm("exit",Ei.exitCode,null),sm("afterexit",Ei.exitCode,null),p6.call(Ei,Ei.exitCode))},Nk=Ei.emit,rEe=function(e,r){if(e==="exit"&&im(global.process)){r!==void 0&&(Ei.exitCode=r);var o=Nk.apply(this,arguments);return sm("exit",Ei.exitCode,null),sm("afterexit",Ei.exitCode,null),o}else return Nk.apply(this,arguments)}):OC.exports=function(){return function(){}};var $ye,NC,eEe,rB,Ts,Rk,sm,Tk,LC,f6,p6,tEe,Nk,rEe});var iEe=_((aKt,nEe)=>{"use strict";var Ryt=Xye(),Tyt=h6();nEe.exports=Ryt(()=>{Tyt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var g6=_(MC=>{"use strict";var Nyt=iEe(),Lk=!1;MC.show=(t=process.stderr)=>{!t.isTTY||(Lk=!1,t.write("\x1B[?25h"))};MC.hide=(t=process.stderr)=>{!t.isTTY||(Nyt(),Lk=!0,t.write("\x1B[?25l"))};MC.toggle=(t,e)=>{t!==void 0&&(Lk=t),Lk?MC.show(e):MC.hide(e)}});var lEe=_(nB=>{"use strict";var aEe=nB&&nB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nB,"__esModule",{value:!0});var sEe=aEe(u6()),oEe=aEe(g6()),Lyt=(t,{showCursor:e=!1}={})=>{let r=0,o="",a=!1,n=u=>{!e&&!a&&(oEe.default.hide(),a=!0);let A=u+` +`;A!==o&&(o=A,t.write(sEe.default.eraseLines(r)+A),r=A.split(` +`).length)};return n.clear=()=>{t.write(sEe.default.eraseLines(r)),o="",r=0},n.done=()=>{o="",r=0,e||(oEe.default.show(),a=!1)},n};nB.default={create:Lyt}});var cEe=_((uKt,Oyt)=>{Oyt.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var fEe=_(gl=>{"use strict";var AEe=cEe(),pA=process.env;Object.defineProperty(gl,"_vendors",{value:AEe.map(function(t){return t.constant})});gl.name=null;gl.isPR=null;AEe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(o){return uEe(o)});if(gl[t.constant]=r,r)switch(gl.name=t.name,typeof t.pr){case"string":gl.isPR=!!pA[t.pr];break;case"object":"env"in t.pr?gl.isPR=t.pr.env in pA&&pA[t.pr.env]!==t.pr.ne:"any"in t.pr?gl.isPR=t.pr.any.some(function(o){return!!pA[o]}):gl.isPR=uEe(t.pr);break;default:gl.isPR=null}});gl.isCI=!!(pA.CI||pA.CONTINUOUS_INTEGRATION||pA.BUILD_NUMBER||pA.RUN_ID||gl.name);function uEe(t){return typeof t=="string"?!!pA[t]:Object.keys(t).every(function(e){return pA[e]===t[e]})}});var hEe=_((fKt,pEe)=>{"use strict";pEe.exports=fEe().isCI});var dEe=_((pKt,gEe)=>{"use strict";var Myt=t=>{let e=new Set;do for(let r of Reflect.ownKeys(t))e.add([t,r]);while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e};gEe.exports=(t,{include:e,exclude:r}={})=>{let o=a=>{let n=u=>typeof u=="string"?a===u:u.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of Myt(t.constructor.prototype)){if(n==="constructor"||!o(n))continue;let u=Reflect.getOwnPropertyDescriptor(a,n);u&&typeof u.value=="function"&&(t[n]=t[n].bind(t))}return t}});var BEe=_(kn=>{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});var _C,oB,Hk,qk,I6;typeof window>"u"||typeof MessageChannel!="function"?(UC=null,d6=null,m6=function(){if(UC!==null)try{var t=kn.unstable_now();UC(!0,t),UC=null}catch(e){throw setTimeout(m6,0),e}},mEe=Date.now(),kn.unstable_now=function(){return Date.now()-mEe},_C=function(t){UC!==null?setTimeout(_C,0,t):(UC=t,setTimeout(m6,0))},oB=function(t,e){d6=setTimeout(t,e)},Hk=function(){clearTimeout(d6)},qk=function(){return!1},I6=kn.unstable_forceFrameRate=function(){}):(Ok=window.performance,y6=window.Date,yEe=window.setTimeout,EEe=window.clearTimeout,typeof console<"u"&&(CEe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof CEe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Ok=="object"&&typeof Ok.now=="function"?kn.unstable_now=function(){return Ok.now()}:(wEe=y6.now(),kn.unstable_now=function(){return y6.now()-wEe}),iB=!1,sB=null,Mk=-1,E6=5,C6=0,qk=function(){return kn.unstable_now()>=C6},I6=function(){},kn.unstable_forceFrameRate=function(t){0>t||125_k(u,r))p!==void 0&&0>_k(p,u)?(t[o]=p,t[A]=r,o=A):(t[o]=u,t[n]=r,o=n);else if(p!==void 0&&0>_k(p,r))t[o]=p,t[A]=r,o=A;else break e}}return e}return null}function _k(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var eu=[],y0=[],Uyt=1,na=null,Lo=3,Gk=!1,om=!1,aB=!1;function Yk(t){for(var e=nc(y0);e!==null;){if(e.callback===null)jk(y0);else if(e.startTime<=t)jk(y0),e.sortIndex=e.expirationTime,B6(eu,e);else break;e=nc(y0)}}function v6(t){if(aB=!1,Yk(t),!om)if(nc(eu)!==null)om=!0,_C(D6);else{var e=nc(y0);e!==null&&oB(v6,e.startTime-t)}}function D6(t,e){om=!1,aB&&(aB=!1,Hk()),Gk=!0;var r=Lo;try{for(Yk(e),na=nc(eu);na!==null&&(!(na.expirationTime>e)||t&&!qk());){var o=na.callback;if(o!==null){na.callback=null,Lo=na.priorityLevel;var a=o(na.expirationTime<=e);e=kn.unstable_now(),typeof a=="function"?na.callback=a:na===nc(eu)&&jk(eu),Yk(e)}else jk(eu);na=nc(eu)}if(na!==null)var n=!0;else{var u=nc(y0);u!==null&&oB(v6,u.startTime-e),n=!1}return n}finally{na=null,Lo=r,Gk=!1}}function IEe(t){switch(t){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var _yt=I6;kn.unstable_ImmediatePriority=1;kn.unstable_UserBlockingPriority=2;kn.unstable_NormalPriority=3;kn.unstable_IdlePriority=5;kn.unstable_LowPriority=4;kn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=Lo;Lo=t;try{return e()}finally{Lo=r}};kn.unstable_next=function(t){switch(Lo){case 1:case 2:case 3:var e=3;break;default:e=Lo}var r=Lo;Lo=e;try{return t()}finally{Lo=r}};kn.unstable_scheduleCallback=function(t,e,r){var o=kn.unstable_now();if(typeof r=="object"&&r!==null){var a=r.delay;a=typeof a=="number"&&0o?(t.sortIndex=a,B6(y0,t),nc(eu)===null&&t===nc(y0)&&(aB?Hk():aB=!0,oB(v6,a-o))):(t.sortIndex=r,B6(eu,t),om||Gk||(om=!0,_C(D6))),t};kn.unstable_cancelCallback=function(t){t.callback=null};kn.unstable_wrapCallback=function(t){var e=Lo;return function(){var r=Lo;Lo=e;try{return t.apply(this,arguments)}finally{Lo=r}}};kn.unstable_getCurrentPriorityLevel=function(){return Lo};kn.unstable_shouldYield=function(){var t=kn.unstable_now();Yk(t);var e=nc(eu);return e!==na&&na!==null&&e!==null&&e.callback!==null&&e.startTime<=t&&e.expirationTime{"use strict";vEe.exports=BEe()});var DEe=_((dKt,lB)=>{lB.exports=function t(e){"use strict";var r=$H(),o=on(),a=S6();function n(S){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+S,T=1;Tao||(S.current=yl[ao],yl[ao]=null,ao--)}function On(S,D){ao++,yl[ao]=S.current,S.current=D}var Ni={},Mn={current:Ni},_i={current:!1},tr=Ni;function Oe(S,D){var T=S.type.contextTypes;if(!T)return Ni;var q=S.stateNode;if(q&&q.__reactInternalMemoizedUnmaskedChildContext===D)return q.__reactInternalMemoizedMaskedChildContext;var Y={},Ae;for(Ae in T)Y[Ae]=D[Ae];return q&&(S=S.stateNode,S.__reactInternalMemoizedUnmaskedChildContext=D,S.__reactInternalMemoizedMaskedChildContext=Y),Y}function ii(S){return S=S.childContextTypes,S!=null}function Ma(S){Vn(_i,S),Vn(Mn,S)}function hr(S){Vn(_i,S),Vn(Mn,S)}function uc(S,D,T){if(Mn.current!==Ni)throw Error(n(168));On(Mn,D,S),On(_i,T,S)}function uu(S,D,T){var q=S.stateNode;if(S=D.childContextTypes,typeof q.getChildContext!="function")return T;q=q.getChildContext();for(var Y in q)if(!(Y in S))throw Error(n(108,he(D)||"Unknown",Y));return r({},T,{},q)}function Ac(S){var D=S.stateNode;return D=D&&D.__reactInternalMemoizedMergedChildContext||Ni,tr=Mn.current,On(Mn,D,S),On(_i,_i.current,S),!0}function El(S,D,T){var q=S.stateNode;if(!q)throw Error(n(169));T?(D=uu(S,D,tr),q.__reactInternalMemoizedMergedChildContext=D,Vn(_i,S),Vn(Mn,S),On(Mn,D,S)):Vn(_i,S),On(_i,T,S)}var DA=a.unstable_runWithPriority,Au=a.unstable_scheduleCallback,Ce=a.unstable_cancelCallback,Rt=a.unstable_shouldYield,fc=a.unstable_requestPaint,Hi=a.unstable_now,fu=a.unstable_getCurrentPriorityLevel,Yt=a.unstable_ImmediatePriority,Cl=a.unstable_UserBlockingPriority,SA=a.unstable_NormalPriority,up=a.unstable_LowPriority,pc=a.unstable_IdlePriority,PA={},Qn=fc!==void 0?fc:function(){},hi=null,hc=null,bA=!1,sa=Hi(),Li=1e4>sa?Hi:function(){return Hi()-sa};function _o(){switch(fu()){case Yt:return 99;case Cl:return 98;case SA:return 97;case up:return 96;case pc:return 95;default:throw Error(n(332))}}function Ze(S){switch(S){case 99:return Yt;case 98:return Cl;case 97:return SA;case 96:return up;case 95:return pc;default:throw Error(n(332))}}function lo(S,D){return S=Ze(S),DA(S,D)}function gc(S,D,T){return S=Ze(S),Au(S,D,T)}function pu(S){return hi===null?(hi=[S],hc=Au(Yt,hu)):hi.push(S),PA}function qi(){if(hc!==null){var S=hc;hc=null,Ce(S)}hu()}function hu(){if(!bA&&hi!==null){bA=!0;var S=0;try{var D=hi;lo(99,function(){for(;S=D&&(jo=!0),S.firstContext=null)}function ms(S,D){if(aa!==S&&D!==!1&&D!==0)if((typeof D!="number"||D===1073741823)&&(aa=S,D=1073741823),D={context:S,observedBits:D,next:null},Us===null){if(co===null)throw Error(n(308));Us=D,co.dependencies={expirationTime:0,firstContext:D,responders:null}}else Us=Us.next=D;return b?S._currentValue:S._currentValue2}var _s=!1;function Un(S){return{baseState:S,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Sn(S){return{baseState:S.baseState,firstUpdate:S.firstUpdate,lastUpdate:S.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function ys(S,D){return{expirationTime:S,suspenseConfig:D,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function We(S,D){S.lastUpdate===null?S.firstUpdate=S.lastUpdate=D:(S.lastUpdate.next=D,S.lastUpdate=D)}function tt(S,D){var T=S.alternate;if(T===null){var q=S.updateQueue,Y=null;q===null&&(q=S.updateQueue=Un(S.memoizedState))}else q=S.updateQueue,Y=T.updateQueue,q===null?Y===null?(q=S.updateQueue=Un(S.memoizedState),Y=T.updateQueue=Un(T.memoizedState)):q=S.updateQueue=Sn(Y):Y===null&&(Y=T.updateQueue=Sn(q));Y===null||q===Y?We(q,D):q.lastUpdate===null||Y.lastUpdate===null?(We(q,D),We(Y,D)):(We(q,D),Y.lastUpdate=D)}function It(S,D){var T=S.updateQueue;T=T===null?S.updateQueue=Un(S.memoizedState):nr(S,T),T.lastCapturedUpdate===null?T.firstCapturedUpdate=T.lastCapturedUpdate=D:(T.lastCapturedUpdate.next=D,T.lastCapturedUpdate=D)}function nr(S,D){var T=S.alternate;return T!==null&&D===T.updateQueue&&(D=S.updateQueue=Sn(D)),D}function $(S,D,T,q,Y,Ae){switch(T.tag){case 1:return S=T.payload,typeof S=="function"?S.call(Ae,q,Y):S;case 3:S.effectTag=S.effectTag&-4097|64;case 0:if(S=T.payload,Y=typeof S=="function"?S.call(Ae,q,Y):S,Y==null)break;return r({},q,Y);case 2:_s=!0}return q}function ye(S,D,T,q,Y){_s=!1,D=nr(S,D);for(var Ae=D.baseState,De=null,vt=0,wt=D.firstUpdate,xt=Ae;wt!==null;){var _r=wt.expirationTime;_rbn?(ai=Fr,Fr=null):ai=Fr.sibling;var tn=di(rt,Fr,ft[bn],Wt);if(tn===null){Fr===null&&(Fr=ai);break}S&&Fr&&tn.alternate===null&&D(rt,Fr),Ve=Ae(tn,Ve,bn),Pn===null?vr=tn:Pn.sibling=tn,Pn=tn,Fr=ai}if(bn===ft.length)return T(rt,Fr),vr;if(Fr===null){for(;bnbn?(ai=Fr,Fr=null):ai=Fr.sibling;var ho=di(rt,Fr,tn.value,Wt);if(ho===null){Fr===null&&(Fr=ai);break}S&&Fr&&ho.alternate===null&&D(rt,Fr),Ve=Ae(ho,Ve,bn),Pn===null?vr=ho:Pn.sibling=ho,Pn=ho,Fr=ai}if(tn.done)return T(rt,Fr),vr;if(Fr===null){for(;!tn.done;bn++,tn=ft.next())tn=is(rt,tn.value,Wt),tn!==null&&(Ve=Ae(tn,Ve,bn),Pn===null?vr=tn:Pn.sibling=tn,Pn=tn);return vr}for(Fr=q(rt,Fr);!tn.done;bn++,tn=ft.next())tn=po(Fr,rt,bn,tn.value,Wt),tn!==null&&(S&&tn.alternate!==null&&Fr.delete(tn.key===null?bn:tn.key),Ve=Ae(tn,Ve,bn),Pn===null?vr=tn:Pn.sibling=tn,Pn=tn);return S&&Fr.forEach(function(vF){return D(rt,vF)}),vr}return function(rt,Ve,ft,Wt){var vr=typeof ft=="object"&&ft!==null&&ft.type===E&&ft.key===null;vr&&(ft=ft.props.children);var Pn=typeof ft=="object"&&ft!==null;if(Pn)switch(ft.$$typeof){case p:e:{for(Pn=ft.key,vr=Ve;vr!==null;){if(vr.key===Pn)if(vr.tag===7?ft.type===E:vr.elementType===ft.type){T(rt,vr.sibling),Ve=Y(vr,ft.type===E?ft.props.children:ft.props,Wt),Ve.ref=QA(rt,vr,ft),Ve.return=rt,rt=Ve;break e}else{T(rt,vr);break}else D(rt,vr);vr=vr.sibling}ft.type===E?(Ve=bu(ft.props.children,rt.mode,Wt,ft.key),Ve.return=rt,rt=Ve):(Wt=qm(ft.type,ft.key,ft.props,null,rt.mode,Wt),Wt.ref=QA(rt,Ve,ft),Wt.return=rt,rt=Wt)}return De(rt);case h:e:{for(vr=ft.key;Ve!==null;){if(Ve.key===vr)if(Ve.tag===4&&Ve.stateNode.containerInfo===ft.containerInfo&&Ve.stateNode.implementation===ft.implementation){T(rt,Ve.sibling),Ve=Y(Ve,ft.children||[],Wt),Ve.return=rt,rt=Ve;break e}else{T(rt,Ve);break}else D(rt,Ve);Ve=Ve.sibling}Ve=Rw(ft,rt.mode,Wt),Ve.return=rt,rt=Ve}return De(rt)}if(typeof ft=="string"||typeof ft=="number")return ft=""+ft,Ve!==null&&Ve.tag===6?(T(rt,Ve.sibling),Ve=Y(Ve,ft,Wt),Ve.return=rt,rt=Ve):(T(rt,Ve),Ve=Fw(ft,rt.mode,Wt),Ve.return=rt,rt=Ve),De(rt);if(kA(ft))return VA(rt,Ve,ft,Wt);if(ce(ft))return Yo(rt,Ve,ft,Wt);if(Pn&&Ap(rt,ft),typeof ft>"u"&&!vr)switch(rt.tag){case 1:case 0:throw rt=rt.type,Error(n(152,rt.displayName||rt.name||"Component"))}return T(rt,Ve)}}var gu=ig(!0),sg=ig(!1),du={},uo={current:du},FA={current:du},mc={current:du};function ca(S){if(S===du)throw Error(n(174));return S}function og(S,D){On(mc,D,S),On(FA,S,S),On(uo,du,S),D=ne(D),Vn(uo,S),On(uo,D,S)}function yc(S){Vn(uo,S),Vn(FA,S),Vn(mc,S)}function Pm(S){var D=ca(mc.current),T=ca(uo.current);D=ee(T,S.type,D),T!==D&&(On(FA,S,S),On(uo,D,S))}function ag(S){FA.current===S&&(Vn(uo,S),Vn(FA,S))}var $n={current:0};function fp(S){for(var D=S;D!==null;){if(D.tag===13){var T=D.memoizedState;if(T!==null&&(T=T.dehydrated,T===null||Ls(T)||so(T)))return D}else if(D.tag===19&&D.memoizedProps.revealOrder!==void 0){if((D.effectTag&64)!==0)return D}else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===S)break;for(;D.sibling===null;){if(D.return===null||D.return===S)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}function lg(S,D){return{responder:S,props:D}}var RA=u.ReactCurrentDispatcher,Hs=u.ReactCurrentBatchConfig,mu=0,Ha=null,Gi=null,ua=null,yu=null,Es=null,Ec=null,Cc=0,G=null,Dt=0,wl=!1,xi=null,wc=0;function ct(){throw Error(n(321))}function Eu(S,D){if(D===null)return!1;for(var T=0;TCc&&(Cc=_r,Hm(Cc))):(Pw(_r,wt.suspenseConfig),Ae=wt.eagerReducer===S?wt.eagerState:S(Ae,wt.action)),De=wt,wt=wt.next}while(wt!==null&&wt!==q);xt||(vt=De,Y=Ae),hs(Ae,D.memoizedState)||(jo=!0),D.memoizedState=Ae,D.baseUpdate=vt,D.baseState=Y,T.lastRenderedState=Ae}return[D.memoizedState,T.dispatch]}function ug(S){var D=TA();return typeof S=="function"&&(S=S()),D.memoizedState=D.baseState=S,S=D.queue={last:null,dispatch:null,lastRenderedReducer:Br,lastRenderedState:S},S=S.dispatch=gg.bind(null,Ha,S),[D.memoizedState,S]}function Ag(S){return Cs(Br,S)}function fg(S,D,T,q){return S={tag:S,create:D,destroy:T,deps:q,next:null},G===null?(G={lastEffect:null},G.lastEffect=S.next=S):(D=G.lastEffect,D===null?G.lastEffect=S.next=S:(T=D.next,D.next=S,S.next=T,G.lastEffect=S)),S}function hp(S,D,T,q){var Y=TA();Dt|=S,Y.memoizedState=fg(D,T,void 0,q===void 0?null:q)}function Ic(S,D,T,q){var Y=pp();q=q===void 0?null:q;var Ae=void 0;if(Gi!==null){var De=Gi.memoizedState;if(Ae=De.destroy,q!==null&&Eu(q,De.deps)){fg(0,T,Ae,q);return}}Dt|=S,Y.memoizedState=fg(D,T,Ae,q)}function Ct(S,D){return hp(516,192,S,D)}function bm(S,D){return Ic(516,192,S,D)}function pg(S,D){if(typeof D=="function")return S=S(),D(S),function(){D(null)};if(D!=null)return S=S(),D.current=S,function(){D.current=null}}function hg(){}function Cu(S,D){return TA().memoizedState=[S,D===void 0?null:D],S}function xm(S,D){var T=pp();D=D===void 0?null:D;var q=T.memoizedState;return q!==null&&D!==null&&Eu(D,q[1])?q[0]:(T.memoizedState=[S,D],S)}function gg(S,D,T){if(!(25>wc))throw Error(n(301));var q=S.alternate;if(S===Ha||q!==null&&q===Ha)if(wl=!0,S={expirationTime:mu,suspenseConfig:null,action:T,eagerReducer:null,eagerState:null,next:null},xi===null&&(xi=new Map),T=xi.get(D),T===void 0)xi.set(D,S);else{for(D=T;D.next!==null;)D=D.next;D.next=S}else{var Y=ga(),Ae=ht.suspense;Y=qA(Y,S,Ae),Ae={expirationTime:Y,suspenseConfig:Ae,action:T,eagerReducer:null,eagerState:null,next:null};var De=D.last;if(De===null)Ae.next=Ae;else{var vt=De.next;vt!==null&&(Ae.next=vt),De.next=Ae}if(D.last=Ae,S.expirationTime===0&&(q===null||q.expirationTime===0)&&(q=D.lastRenderedReducer,q!==null))try{var wt=D.lastRenderedState,xt=q(wt,T);if(Ae.eagerReducer=q,Ae.eagerState=xt,hs(xt,wt))return}catch{}finally{}Pc(S,Y)}}var wu={readContext:ms,useCallback:ct,useContext:ct,useEffect:ct,useImperativeHandle:ct,useLayoutEffect:ct,useMemo:ct,useReducer:ct,useRef:ct,useState:ct,useDebugValue:ct,useResponder:ct,useDeferredValue:ct,useTransition:ct},Ew={readContext:ms,useCallback:Cu,useContext:ms,useEffect:Ct,useImperativeHandle:function(S,D,T){return T=T!=null?T.concat([S]):null,hp(4,36,pg.bind(null,D,S),T)},useLayoutEffect:function(S,D){return hp(4,36,S,D)},useMemo:function(S,D){var T=TA();return D=D===void 0?null:D,S=S(),T.memoizedState=[S,D],S},useReducer:function(S,D,T){var q=TA();return D=T!==void 0?T(D):D,q.memoizedState=q.baseState=D,S=q.queue={last:null,dispatch:null,lastRenderedReducer:S,lastRenderedState:D},S=S.dispatch=gg.bind(null,Ha,S),[q.memoizedState,S]},useRef:function(S){var D=TA();return S={current:S},D.memoizedState=S},useState:ug,useDebugValue:hg,useResponder:lg,useDeferredValue:function(S,D){var T=ug(S),q=T[0],Y=T[1];return Ct(function(){a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(S)}finally{Hs.suspense=Ae}})},[S,D]),q},useTransition:function(S){var D=ug(!1),T=D[0],q=D[1];return[Cu(function(Y){q(!0),a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=S===void 0?null:S;try{q(!1),Y()}finally{Hs.suspense=Ae}})},[S,T]),T]}},km={readContext:ms,useCallback:xm,useContext:ms,useEffect:bm,useImperativeHandle:function(S,D,T){return T=T!=null?T.concat([S]):null,Ic(4,36,pg.bind(null,D,S),T)},useLayoutEffect:function(S,D){return Ic(4,36,S,D)},useMemo:function(S,D){var T=pp();D=D===void 0?null:D;var q=T.memoizedState;return q!==null&&D!==null&&Eu(D,q[1])?q[0]:(S=S(),T.memoizedState=[S,D],S)},useReducer:Cs,useRef:function(){return pp().memoizedState},useState:Ag,useDebugValue:hg,useResponder:lg,useDeferredValue:function(S,D){var T=Ag(S),q=T[0],Y=T[1];return bm(function(){a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(S)}finally{Hs.suspense=Ae}})},[S,D]),q},useTransition:function(S){var D=Ag(!1),T=D[0],q=D[1];return[xm(function(Y){q(!0),a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=S===void 0?null:S;try{q(!1),Y()}finally{Hs.suspense=Ae}})},[S,T]),T]}},Aa=null,Bc=null,Il=!1;function Iu(S,D){var T=Dl(5,null,null,0);T.elementType="DELETED",T.type="DELETED",T.stateNode=D,T.return=S,T.effectTag=8,S.lastEffect!==null?(S.lastEffect.nextEffect=T,S.lastEffect=T):S.firstEffect=S.lastEffect=T}function dg(S,D){switch(S.tag){case 5:return D=io(D,S.type,S.pendingProps),D!==null?(S.stateNode=D,!0):!1;case 6:return D=Pi(D,S.pendingProps),D!==null?(S.stateNode=D,!0):!1;case 13:return!1;default:return!1}}function NA(S){if(Il){var D=Bc;if(D){var T=D;if(!dg(S,D)){if(D=cc(T),!D||!dg(S,D)){S.effectTag=S.effectTag&-1025|2,Il=!1,Aa=S;return}Iu(Aa,T)}Aa=S,Bc=cu(D)}else S.effectTag=S.effectTag&-1025|2,Il=!1,Aa=S}}function gp(S){for(S=S.return;S!==null&&S.tag!==5&&S.tag!==3&&S.tag!==13;)S=S.return;Aa=S}function qa(S){if(!y||S!==Aa)return!1;if(!Il)return gp(S),Il=!0,!1;var D=S.type;if(S.tag!==5||D!=="head"&&D!=="body"&&!ke(D,S.memoizedProps))for(D=Bc;D;)Iu(S,D),D=cc(D);if(gp(S),S.tag===13){if(!y)throw Error(n(316));if(S=S.memoizedState,S=S!==null?S.dehydrated:null,!S)throw Error(n(317));Bc=Os(S)}else Bc=Aa?cc(S.stateNode):null;return!0}function mg(){y&&(Bc=Aa=null,Il=!1)}var dp=u.ReactCurrentOwner,jo=!1;function ws(S,D,T,q){D.child=S===null?sg(D,null,T,q):gu(D,S.child,T,q)}function Ii(S,D,T,q,Y){T=T.render;var Ae=D.ref;return ds(D,Y),q=cg(S,D,T,q,Ae,Y),S!==null&&!jo?(D.updateQueue=S.updateQueue,D.effectTag&=-517,S.expirationTime<=Y&&(S.expirationTime=0),si(S,D,Y)):(D.effectTag|=1,ws(S,D,q,Y),D.child)}function Qm(S,D,T,q,Y,Ae){if(S===null){var De=T.type;return typeof De=="function"&&!Qw(De)&&De.defaultProps===void 0&&T.compare===null&&T.defaultProps===void 0?(D.tag=15,D.type=De,Fm(S,D,De,q,Y,Ae)):(S=qm(T.type,null,q,null,D.mode,Ae),S.ref=D.ref,S.return=D,D.child=S)}return De=S.child,YD)&&HA.set(S,D)))}}function Dg(S,D){S.expirationTimeS?D:S)}function fo(S){if(S.lastExpiredTime!==0)S.callbackExpirationTime=1073741823,S.callbackPriority=99,S.callbackNode=pu(Sw.bind(null,S));else{var D=_m(S),T=S.callbackNode;if(D===0)T!==null&&(S.callbackNode=null,S.callbackExpirationTime=0,S.callbackPriority=90);else{var q=ga();if(D===1073741823?q=99:D===1||D===2?q=95:(q=10*(1073741821-D)-10*(1073741821-q),q=0>=q?99:250>=q?98:5250>=q?97:95),T!==null){var Y=S.callbackPriority;if(S.callbackExpirationTime===D&&Y>=q)return;T!==PA&&Ce(T)}S.callbackExpirationTime=D,S.callbackPriority=q,D=D===1073741823?pu(Sw.bind(null,S)):gc(q,Wv.bind(null,S),{timeout:10*(1073741821-D)-Li()}),S.callbackNode=D}}}function Wv(S,D){if(Um=0,D)return D=ga(),jm(S,D),fo(S),null;var T=_m(S);if(T!==0){if(D=S.callbackNode,(yr&(rs|qs))!==En)throw Error(n(327));if(Bp(),S===gi&&T===ns||Su(S,T),Or!==null){var q=yr;yr|=rs;var Y=GA(S);do try{pF();break}catch(vt){jA(S,vt)}while(1);if(la(),yr=q,Cp.current=Y,Yi===Nm)throw D=Lm,Su(S,T),KA(S,T),fo(S),D;if(Or===null)switch(Y=S.finishedWork=S.current.alternate,S.finishedExpirationTime=T,q=Yi,gi=null,q){case Bu:case Nm:throw Error(n(345));case Bi:jm(S,2=T){S.lastPingedTime=T,Su(S,T);break}}if(Ae=_m(S),Ae!==0&&Ae!==T)break;if(q!==0&&q!==T){S.lastPingedTime=q;break}S.timeoutHandle=Te(Pu.bind(null,S),Y);break}Pu(S);break;case vl:if(KA(S,T),q=S.lastSuspendedTime,T===q&&(S.nextKnownPendingLevel=bw(Y)),UA&&(Y=S.lastPingedTime,Y===0||Y>=T)){S.lastPingedTime=T,Su(S,T);break}if(Y=_m(S),Y!==0&&Y!==T)break;if(q!==0&&q!==T){S.lastPingedTime=q;break}if(MA!==1073741823?q=10*(1073741821-MA)-Li():Ya===1073741823?q=0:(q=10*(1073741821-Ya)-5e3,Y=Li(),T=10*(1073741821-T)-Y,q=Y-q,0>q&&(q=0),q=(120>q?120:480>q?480:1080>q?1080:1920>q?1920:3e3>q?3e3:4320>q?4320:1960*ww(q/1960))-q,T=q?q=0:(Y=De.busyDelayMs|0,Ae=Li()-(10*(1073741821-Ae)-(De.timeoutMs|0||5e3)),q=Ae<=Y?0:Y+q-Ae),10 component higher in the tree to provide a loading indicator or placeholder to display.`+ml(Y))}Yi!==Sc&&(Yi=Bi),Ae=Eg(Ae,Y),wt=q;do{switch(wt.tag){case 3:De=Ae,wt.effectTag|=4096,wt.expirationTime=D;var Ve=Gv(wt,De,D);It(wt,Ve);break e;case 1:De=Ae;var ft=wt.type,Wt=wt.stateNode;if((wt.effectTag&64)===0&&(typeof ft.getDerivedStateFromError=="function"||Wt!==null&&typeof Wt.componentDidCatch=="function"&&(Du===null||!Du.has(Wt)))){wt.effectTag|=4096,wt.expirationTime=D;var vr=Yv(wt,De,D);It(wt,vr);break e}}wt=wt.return}while(wt!==null)}Or=zv(Or)}catch(Pn){D=Pn;continue}break}while(1)}function GA(){var S=Cp.current;return Cp.current=wu,S===null?wu:S}function Pw(S,D){Swp&&(wp=S)}function fF(){for(;Or!==null;)Or=Jv(Or)}function pF(){for(;Or!==null&&!Rt();)Or=Jv(Or)}function Jv(S){var D=Zv(S.alternate,S,ns);return S.memoizedProps=S.pendingProps,D===null&&(D=zv(S)),Iw.current=null,D}function zv(S){Or=S;do{var D=Or.alternate;if(S=Or.return,(Or.effectTag&2048)===0){e:{var T=D;D=Or;var q=ns,Y=D.pendingProps;switch(D.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:ii(D.type)&&Ma(D);break;case 3:yc(D),hr(D),Y=D.stateNode,Y.pendingContext&&(Y.context=Y.pendingContext,Y.pendingContext=null),(T===null||T.child===null)&&qa(D)&&pa(D),Bl(D);break;case 5:ag(D);var Ae=ca(mc.current);if(q=D.type,T!==null&&D.stateNode!=null)ts(T,D,q,Y,Ae),T.ref!==D.ref&&(D.effectTag|=128);else if(Y){if(T=ca(uo.current),qa(D)){if(Y=D,!y)throw Error(n(175));T=lp(Y.stateNode,Y.type,Y.memoizedProps,Ae,T,Y),Y.updateQueue=T,T=T!==null,T&&pa(D)}else{var De=At(q,Y,Ae,T,D);vc(De,D,!1,!1),D.stateNode=De,at(De,q,Y,Ae,T)&&pa(D)}D.ref!==null&&(D.effectTag|=128)}else if(D.stateNode===null)throw Error(n(166));break;case 6:if(T&&D.stateNode!=null)Gr(T,D,T.memoizedProps,Y);else{if(typeof Y!="string"&&D.stateNode===null)throw Error(n(166));if(T=ca(mc.current),Ae=ca(uo.current),qa(D)){if(T=D,!y)throw Error(n(176));(T=cp(T.stateNode,T.memoizedProps,T))&&pa(D)}else D.stateNode=He(Y,T,Ae,D)}break;case 11:break;case 13:if(Vn($n,D),Y=D.memoizedState,(D.effectTag&64)!==0){D.expirationTime=q;break e}Y=Y!==null,Ae=!1,T===null?D.memoizedProps.fallback!==void 0&&qa(D):(q=T.memoizedState,Ae=q!==null,Y||q===null||(q=T.child.sibling,q!==null&&(De=D.firstEffect,De!==null?(D.firstEffect=q,q.nextEffect=De):(D.firstEffect=D.lastEffect=q,q.nextEffect=null),q.effectTag=8))),Y&&!Ae&&(D.mode&2)!==0&&(T===null&&D.memoizedProps.unstable_avoidThisFallback!==!0||($n.current&1)!==0?Yi===Bu&&(Yi=ha):((Yi===Bu||Yi===ha)&&(Yi=vl),wp!==0&&gi!==null&&(KA(gi,ns),eD(gi,wp)))),P&&Y&&(D.effectTag|=4),w&&(Y||Ae)&&(D.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:yc(D),Bl(D);break;case 10:wi(D);break;case 9:break;case 14:break;case 17:ii(D.type)&&Ma(D);break;case 19:if(Vn($n,D),Y=D.memoizedState,Y===null)break;if(Ae=(D.effectTag&64)!==0,De=Y.rendering,De===null){if(Ae)Dc(Y,!1);else if(Yi!==Bu||T!==null&&(T.effectTag&64)!==0)for(T=D.child;T!==null;){if(De=fp(T),De!==null){for(D.effectTag|=64,Dc(Y,!1),T=De.updateQueue,T!==null&&(D.updateQueue=T,D.effectTag|=4),Y.lastEffect===null&&(D.firstEffect=null),D.lastEffect=Y.lastEffect,T=q,Y=D.child;Y!==null;)Ae=Y,q=T,Ae.effectTag&=2,Ae.nextEffect=null,Ae.firstEffect=null,Ae.lastEffect=null,De=Ae.alternate,De===null?(Ae.childExpirationTime=0,Ae.expirationTime=q,Ae.child=null,Ae.memoizedProps=null,Ae.memoizedState=null,Ae.updateQueue=null,Ae.dependencies=null):(Ae.childExpirationTime=De.childExpirationTime,Ae.expirationTime=De.expirationTime,Ae.child=De.child,Ae.memoizedProps=De.memoizedProps,Ae.memoizedState=De.memoizedState,Ae.updateQueue=De.updateQueue,q=De.dependencies,Ae.dependencies=q===null?null:{expirationTime:q.expirationTime,firstContext:q.firstContext,responders:q.responders}),Y=Y.sibling;On($n,$n.current&1|2,D),D=D.child;break e}T=T.sibling}}else{if(!Ae)if(T=fp(De),T!==null){if(D.effectTag|=64,Ae=!0,T=T.updateQueue,T!==null&&(D.updateQueue=T,D.effectTag|=4),Dc(Y,!0),Y.tail===null&&Y.tailMode==="hidden"&&!De.alternate){D=D.lastEffect=Y.lastEffect,D!==null&&(D.nextEffect=null);break}}else Li()>Y.tailExpiration&&1Y&&(Y=q),De>Y&&(Y=De),Ae=Ae.sibling;T.childExpirationTime=Y}if(D!==null)return D;S!==null&&(S.effectTag&2048)===0&&(S.firstEffect===null&&(S.firstEffect=Or.firstEffect),Or.lastEffect!==null&&(S.lastEffect!==null&&(S.lastEffect.nextEffect=Or.firstEffect),S.lastEffect=Or.lastEffect),1S?D:S}function Pu(S){var D=_o();return lo(99,hF.bind(null,S,D)),null}function hF(S,D){do Bp();while(Bg!==null);if((yr&(rs|qs))!==En)throw Error(n(327));var T=S.finishedWork,q=S.finishedExpirationTime;if(T===null)return null;if(S.finishedWork=null,S.finishedExpirationTime=0,T===S.current)throw Error(n(177));S.callbackNode=null,S.callbackExpirationTime=0,S.callbackPriority=90,S.nextKnownPendingLevel=0;var Y=bw(T);if(S.firstPendingTime=Y,q<=S.lastSuspendedTime?S.firstSuspendedTime=S.lastSuspendedTime=S.nextKnownPendingLevel=0:q<=S.firstSuspendedTime&&(S.firstSuspendedTime=q-1),q<=S.lastPingedTime&&(S.lastPingedTime=0),q<=S.lastExpiredTime&&(S.lastExpiredTime=0),S===gi&&(Or=gi=null,ns=0),1=T?ln(S,D,T):(On($n,$n.current&1,D),D=si(S,D,T),D!==null?D.sibling:null);On($n,$n.current&1,D);break;case 19:if(q=D.childExpirationTime>=T,(S.effectTag&64)!==0){if(q)return ja(S,D,T);D.effectTag|=64}if(Y=D.memoizedState,Y!==null&&(Y.rendering=null,Y.tail=null),On($n,$n.current,D),!q)return null}return si(S,D,T)}jo=!1}}else jo=!1;switch(D.expirationTime=0,D.tag){case 2:if(q=D.type,S!==null&&(S.alternate=null,D.alternate=null,D.effectTag|=2),S=D.pendingProps,Y=Oe(D,Mn.current),ds(D,T),Y=cg(null,D,q,S,Y,T),D.effectTag|=1,typeof Y=="object"&&Y!==null&&typeof Y.render=="function"&&Y.$$typeof===void 0){if(D.tag=1,yw(),ii(q)){var Ae=!0;Ac(D)}else Ae=!1;D.memoizedState=Y.state!==null&&Y.state!==void 0?Y.state:null;var De=q.getDerivedStateFromProps;typeof De=="function"&&er(D,q,De,S),Y.updater=$r,D.stateNode=Y,Y._reactInternalFiber=D,qo(D,q,S,T),D=yp(null,D,q,!0,Ae,T)}else D.tag=0,ws(null,D,Y,T),D=D.child;return D;case 16:if(Y=D.elementType,S!==null&&(S.alternate=null,D.alternate=null,D.effectTag|=2),S=D.pendingProps,me(Y),Y._status!==1)throw Y._result;switch(Y=Y._result,D.type=Y,Ae=D.tag=wF(Y),S=Ci(Y,S),Ae){case 0:D=LA(null,D,Y,S,T);break;case 1:D=mp(null,D,Y,S,T);break;case 11:D=Ii(null,D,Y,S,T);break;case 14:D=Qm(null,D,Y,Ci(Y.type,S),q,T);break;default:throw Error(n(306,Y,""))}return D;case 0:return q=D.type,Y=D.pendingProps,Y=D.elementType===q?Y:Ci(q,Y),LA(S,D,q,Y,T);case 1:return q=D.type,Y=D.pendingProps,Y=D.elementType===q?Y:Ci(q,Y),mp(S,D,q,Y,T);case 3:if(yg(D),q=D.updateQueue,q===null)throw Error(n(282));if(Y=D.memoizedState,Y=Y!==null?Y.element:null,ye(D,q,D.pendingProps,null,T),q=D.memoizedState.element,q===Y)mg(),D=si(S,D,T);else{if((Y=D.stateNode.hydrate)&&(y?(Bc=cu(D.stateNode.containerInfo),Aa=D,Y=Il=!0):Y=!1),Y)for(T=sg(D,null,q,T),D.child=T;T;)T.effectTag=T.effectTag&-3|1024,T=T.sibling;else ws(S,D,q,T),mg();D=D.child}return D;case 5:return Pm(D),S===null&&NA(D),q=D.type,Y=D.pendingProps,Ae=S!==null?S.memoizedProps:null,De=Y.children,ke(q,Y)?De=null:Ae!==null&&ke(q,Ae)&&(D.effectTag|=16),Go(S,D),D.mode&4&&T!==1&&xe(q,Y)?(D.expirationTime=D.childExpirationTime=1,D=null):(ws(S,D,De,T),D=D.child),D;case 6:return S===null&&NA(D),null;case 13:return ln(S,D,T);case 4:return og(D,D.stateNode.containerInfo),q=D.pendingProps,S===null?D.child=gu(D,null,q,T):ws(S,D,q,T),D.child;case 11:return q=D.type,Y=D.pendingProps,Y=D.elementType===q?Y:Ci(q,Y),Ii(S,D,q,Y,T);case 7:return ws(S,D,D.pendingProps,T),D.child;case 8:return ws(S,D,D.pendingProps.children,T),D.child;case 12:return ws(S,D,D.pendingProps.children,T),D.child;case 10:e:{if(q=D.type._context,Y=D.pendingProps,De=D.memoizedProps,Ae=Y.value,Ho(D,Ae),De!==null){var vt=De.value;if(Ae=hs(vt,Ae)?0:(typeof q._calculateChangedBits=="function"?q._calculateChangedBits(vt,Ae):1073741823)|0,Ae===0){if(De.children===Y.children&&!_i.current){D=si(S,D,T);break e}}else for(vt=D.child,vt!==null&&(vt.return=D);vt!==null;){var wt=vt.dependencies;if(wt!==null){De=vt.child;for(var xt=wt.firstContext;xt!==null;){if(xt.context===q&&(xt.observedBits&Ae)!==0){vt.tag===1&&(xt=ys(T,null),xt.tag=2,tt(vt,xt)),vt.expirationTime"u")return!1;var D=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(D.isDisabled||!D.supportsFiber)return!0;try{var T=D.inject(S);xw=function(q){try{D.onCommitFiberRoot(T,q,void 0,(q.current.effectTag&64)===64)}catch{}},kw=function(q){try{D.onCommitFiberUnmount(T,q)}catch{}}}catch{}return!0}function CF(S,D,T,q){this.tag=S,this.key=T,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=D,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=q,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Dl(S,D,T,q){return new CF(S,D,T,q)}function Qw(S){return S=S.prototype,!(!S||!S.isReactComponent)}function wF(S){if(typeof S=="function")return Qw(S)?1:0;if(S!=null){if(S=S.$$typeof,S===L)return 11;if(S===te)return 14}return 2}function WA(S,D){var T=S.alternate;return T===null?(T=Dl(S.tag,D,S.key,S.mode),T.elementType=S.elementType,T.type=S.type,T.stateNode=S.stateNode,T.alternate=S,S.alternate=T):(T.pendingProps=D,T.effectTag=0,T.nextEffect=null,T.firstEffect=null,T.lastEffect=null),T.childExpirationTime=S.childExpirationTime,T.expirationTime=S.expirationTime,T.child=S.child,T.memoizedProps=S.memoizedProps,T.memoizedState=S.memoizedState,T.updateQueue=S.updateQueue,D=S.dependencies,T.dependencies=D===null?null:{expirationTime:D.expirationTime,firstContext:D.firstContext,responders:D.responders},T.sibling=S.sibling,T.index=S.index,T.ref=S.ref,T}function qm(S,D,T,q,Y,Ae){var De=2;if(q=S,typeof S=="function")Qw(S)&&(De=1);else if(typeof S=="string")De=5;else e:switch(S){case E:return bu(T.children,Y,Ae,D);case R:De=8,Y|=7;break;case I:De=8,Y|=1;break;case v:return S=Dl(12,T,D,Y|8),S.elementType=v,S.type=v,S.expirationTime=Ae,S;case U:return S=Dl(13,T,D,Y),S.type=U,S.elementType=U,S.expirationTime=Ae,S;case J:return S=Dl(19,T,D,Y),S.elementType=J,S.expirationTime=Ae,S;default:if(typeof S=="object"&&S!==null)switch(S.$$typeof){case x:De=10;break e;case C:De=9;break e;case L:De=11;break e;case te:De=14;break e;case ae:De=16,q=null;break e}throw Error(n(130,S==null?S:typeof S,""))}return D=Dl(De,T,D,Y),D.elementType=S,D.type=q,D.expirationTime=Ae,D}function bu(S,D,T,q){return S=Dl(7,S,q,D),S.expirationTime=T,S}function Fw(S,D,T){return S=Dl(6,S,null,D),S.expirationTime=T,S}function Rw(S,D,T){return D=Dl(4,S.children!==null?S.children:[],S.key,D),D.expirationTime=T,D.stateNode={containerInfo:S.containerInfo,pendingChildren:null,implementation:S.implementation},D}function IF(S,D,T){this.tag=D,this.current=null,this.containerInfo=S,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=qe,this.pendingContext=this.context=null,this.hydrate=T,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function $v(S,D){var T=S.firstSuspendedTime;return S=S.lastSuspendedTime,T!==0&&T>=D&&S<=D}function KA(S,D){var T=S.firstSuspendedTime,q=S.lastSuspendedTime;TD||T===0)&&(S.lastSuspendedTime=D),D<=S.lastPingedTime&&(S.lastPingedTime=0),D<=S.lastExpiredTime&&(S.lastExpiredTime=0)}function eD(S,D){D>S.firstPendingTime&&(S.firstPendingTime=D);var T=S.firstSuspendedTime;T!==0&&(D>=T?S.firstSuspendedTime=S.lastSuspendedTime=S.nextKnownPendingLevel=0:D>=S.lastSuspendedTime&&(S.lastSuspendedTime=D+1),D>S.nextKnownPendingLevel&&(S.nextKnownPendingLevel=D))}function jm(S,D){var T=S.lastExpiredTime;(T===0||T>D)&&(S.lastExpiredTime=D)}function tD(S){var D=S._reactInternalFiber;if(D===void 0)throw typeof S.render=="function"?Error(n(188)):Error(n(268,Object.keys(S)));return S=Ee(D),S===null?null:S.stateNode}function rD(S,D){S=S.memoizedState,S!==null&&S.dehydrated!==null&&S.retryTime{"use strict";SEe.exports=DEe()});var xEe=_((yKt,bEe)=>{"use strict";var Hyt={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};bEe.exports=Hyt});var REe=_((EKt,FEe)=>{"use strict";var qyt=Object.assign||function(t){for(var e=1;e"}}]),t}(),kEe=function(){Wk(t,null,[{key:"fromJS",value:function(r){var o=r.width,a=r.height;return new t(o,a)}}]);function t(e,r){b6(this,t),this.width=e,this.height=r}return Wk(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),QEe=function(){function t(e,r){b6(this,t),this.unit=e,this.value=r}return Wk(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case tu.UNIT_POINT:return String(this.value);case tu.UNIT_PERCENT:return this.value+"%";case tu.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();FEe.exports=function(t,e){function r(u,A,p){var h=u[A];u[A]=function(){for(var E=arguments.length,I=Array(E),v=0;v1?I-1:0),x=1;x1&&arguments[1]!==void 0?arguments[1]:NaN,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:tu.DIRECTION_LTR;return u.call(this,A,p,h)}),qyt({Config:e.Config,Node:e.Node,Layout:t("Layout",jyt),Size:t("Size",kEe),Value:t("Value",QEe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},tu)}});var TEe=_((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof ve=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var o=nodeFS.readFileSync(e);return r?o:o.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,o){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):o()},a.onerror=o,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var o=enlargeMemory();if(!o)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var o=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return o},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,o,a,n){var u=getCFunc(e),A=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,o){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var u=typeof e=="string"?e:null,A;if(r==ALLOC_NONE?A=o:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,u?1:e.length)),a){var o=A,p;for(assert((A&3)==0),p=A+(n&-4);o>2]=0;for(p=A+n;o>0]=0;return A}if(u==="i8")return t.subarray||t.slice?HEAPU8.set(t,A):HEAPU8.set(new Uint8Array(t),A),A;for(var h=0,E,I,v;h>0],r|=o,!(o==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var u=1024,A;e>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,u))),n=n?n+A:A,t+=u,e-=u;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var o,a,n,u,A,p,h="";;){if(o=t[e++],!o)return h;if(!(o&128)){h+=String.fromCharCode(o);continue}if(a=t[e++]&63,(o&224)==192){h+=String.fromCharCode((o&31)<<6|a);continue}if(n=t[e++]&63,(o&240)==224?o=(o&15)<<12|a<<6|n:(u=t[e++]&63,(o&248)==240?o=(o&7)<<18|a<<12|n<<6|u:(A=t[e++]&63,(o&252)==248?o=(o&3)<<24|a<<18|n<<12|u<<6|A:(p=t[e++]&63,o=(o&1)<<30|a<<24|n<<18|u<<12|A<<6|p))),o<65536)h+=String.fromCharCode(o);else{var E=o-65536;h+=String.fromCharCode(55296|E>>10,56320|E&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,o){if(!(o>0))return 0;for(var a=r,n=r+o-1,u=0;u=55296&&A<=57343&&(A=65536+((A&1023)<<10)|t.charCodeAt(++u)&1023),A<=127){if(r>=n)break;e[r++]=A}else if(A<=2047){if(r+1>=n)break;e[r++]=192|A>>6,e[r++]=128|A&63}else if(A<=65535){if(r+2>=n)break;e[r++]=224|A>>12,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=2097151){if(r+3>=n)break;e[r++]=240|A>>18,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=67108863){if(r+4>=n)break;e[r++]=248|A>>24,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else{if(r+5>=n)break;e[r++]=252|A>>30,e[r++]=128|A>>24&63,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&o<=57343&&(o=65536+((o&1023)<<10)|t.charCodeAt(++r)&1023),o<=127?++e:o<=2047?e+=2:o<=65535?e+=3:o<=2097151?e+=4:o<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),o=lengthBytesUTF8(r)+1,a=_malloc(o);stringToUTF8(r,a,o);var n=_malloc(4),u=e(a,0,0,n);if(getValue(n,"i32")===0&&u)return Pointer_stringify(u)}catch{}finally{a&&_free(a),n&&_free(n),u&&_free(u)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var o=demangle(r);return r===o?r:r+" ["+o+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` +`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var o=r>0?r:lengthBytesUTF8(t)+1,a=new Array(o),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(o&=255),e.push(String.fromCharCode(o))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var o,a;r&&(a=e+lengthBytesUTF8(t),o=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=o)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var o=0;o>0]=t.charCodeAt(o);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var o=e>>>16,a=e&65535,n=r>>>16,u=r&65535;return a*u+(o*u+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,o,a,n,u,A){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,o,a,n,u,A){return ASM_CONSTS[t](e,r,o,a,n,u,A)}function _emscripten_asm_const_iiiii(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiidddddd(t,e,r,o,a,n,u,A,p){return ASM_CONSTS[t](e,r,o,a,n,u,A,p)}function _emscripten_asm_const_iiididi(t,e,r,o,a,n,u){return ASM_CONSTS[t](e,r,o,a,n,u)}function _emscripten_asm_const_iiii(t,e,r,o){return ASM_CONSTS[t](e,r,o)}function _emscripten_asm_const_iiiid(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiiiii(t,e,r,o,a,n){return ASM_CONSTS[t](e,r,o,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,o){var a=arguments.length,n=a<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,o);else for(var A=t.length-1;A>=0;A--)(u=t[A])&&(n=(a<3?u(n):a>3?u(e,r,n):u(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,o){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=o/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var u=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,u)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(u){u.source===window&&u.data===o&&(u.stopPropagation(),r.shift()())};var a=n,r=[],o="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(A){r.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:o})):window.postMessage(o,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,o,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=o;var n;typeof o<"u"?n=function(){Module.dynCall_vi(t,o)}:n=function(){Module.dynCall_v(t)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var E=Browser.mainLoop.remainingBlockers,I=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=I:(I=I+.5,Browser.mainLoop.remainingBlockers=(8*E+I)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(u0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,u,A,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(u)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(u)}))}catch(x){Runtime.warnOnce("Blob constructor present but fails: "+x+"; falling back to blob builder")}if(!h){var E=new Browser.BlobBuilder;E.append(new Uint8Array(n).buffer),h=E.getBlob()}var I=Browser.URLObject.createObjectURL(h),v=new Image;v.onload=function(){assert(v.complete,"Image "+u+" could not be decoded");var C=document.createElement("canvas");C.width=v.width,C.height=v.height;var R=C.getContext("2d");R.drawImage(v,0,0),Module.preloadedImages[u]=C,Browser.URLObject.revokeObjectURL(I),A&&A(n)},v.onerror=function(C){console.log("Image "+I+" could not be decoded"),p&&p()},v.src=I},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,u,A,p){var h=!1;function E(R){h||(h=!0,Module.preloadedAudios[u]=R,A&&A(n))}function I(){h||(h=!0,Module.preloadedAudios[u]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var v=new Blob([n],{type:Browser.getMimetype(u)})}catch{return I()}var x=Browser.URLObject.createObjectURL(v),C=new Audio;C.addEventListener("canplaythrough",function(){E(C)},!1),C.onerror=function(L){if(h)return;console.log("warning: browser could not fully decode audio "+u+", trying slower base64 approach");function U(J){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ae="=",fe="",ce=0,me=0,he=0;he=6;){var Be=ce>>me-6&63;me-=6,fe+=te[Be]}return me==2?(fe+=te[(ce&3)<<4],fe+=ae+ae):me==4&&(fe+=te[(ce&15)<<2],fe+=ae),fe}C.src="data:audio/x-"+u.substr(-3)+";base64,"+U(n),E(C)},C.src=x,Browser.safeSetTimeout(function(){E(C)},1e4)}else return I()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var o=Module.canvas;o&&(o.requestPointerLock=o.requestPointerLock||o.mozRequestPointerLock||o.webkitRequestPointerLock||o.msRequestPointerLock||function(){},o.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},o.exitPointerLock=o.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&o.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,o){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var u={antialias:!1,alpha:!1};if(o)for(var A in o)u[A]=o[A];n=GL.createContext(t,u),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var o=Module.canvas;function a(){Browser.isFullscreen=!1;var u=o.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===u?(o.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},o.exitFullscreen=o.exitFullscreen.bind(document),Browser.lockPointer&&o.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(u.parentNode.insertBefore(o,u),u.parentNode.removeChild(u),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(o)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");o.parentNode.insertBefore(n,o),n.appendChild(o),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(o,a,n){return Browser.requestFullscreen(o,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,o=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var u=t.touch;if(u===void 0)return;var A=u.pageX-(a+e.left),p=u.pageY-(n+e.top);A=A*(r/e.width),p=p*(o/e.height);var h={x:A,y:p};if(t.type==="touchstart")Browser.lastTouches[u.identifier]=h,Browser.touches[u.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[u.identifier];E||(E=h),Browser.lastTouches[u.identifier]=E,Browser.touches[u.identifier]=h}return}var I=t.pageX-(a+e.left),v=t.pageY-(n+e.top);I=I*(r/e.width),v=v*(o/e.height),Browser.mouseMovementX=I-Browser.mouseX,Browser.mouseMovementY=v-Browser.mouseY,Browser.mouseX=I,Browser.mouseY=v}},asyncLoad:function(t,e,r,o){var a=o?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var o=Module.canvas;Browser.updateCanvasDimensions(o,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var o=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(o/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(o){return(typeof FS>"u"||!(o instanceof FS.ErrnoError))&&abort(o),-o.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,E,I,v,x){if(h==1){var C=I&896;(C==128||C==256||C==384)&&(p="X const")}var R;return x?R=E.replace("X",p).replace("Y",v):R=p.replace("X",E).replace("Y",v),R.replace(/([*&]) (?=[*&])/g,"$1")}function o(p,h,E,I,v){throw new Error(p+" type "+E.replace("X",h+"?")+(I?" with flag "+I:"")+" in "+v)}function a(p,h,E,I,v,x,C,R){x===void 0&&(x="X"),R===void 0&&(R=1);var L=E(p);if(L)return L;var U=I(p),J=U.placeholderFlag,te=e[J];C&&te&&(x=r(C[2],C[0],x,te[0],"?",!0));var ae;J==0&&(ae="Unbound"),J>=10&&(ae="Corrupt"),R>20&&(ae="Deeply nested"),ae&&o(ae,p,x,J,v||"?");var fe=U.paramList[0],ce=a(fe,h,E,I,v,x,te,R+1),me,he={flags:te[0],id:p,name:"",paramList:[ce]},Be=[],we="?";switch(U.placeholderFlag){case 1:me=ce.spec;break;case 2:if((ce.flags&15360)==1024&&ce.spec.ptrSize==1){he.flags=7168;break}case 3:case 6:case 5:me=ce.spec,ce.flags&15360;break;case 8:we=""+U.paramList[1],he.paramList.push(U.paramList[1]);break;case 9:for(var g=0,Ee=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),u=SYSCALLS.get(),A=a;return FS.llseek(r,A,u),HEAP32[n>>2]=r.position,r.getdents&&A===0&&u===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,I){var v=___syscall146.buffers[E];assert(v),I===0||I===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(v,0)),v.length=0):v.push(I)});for(var u=0;u>2],p=HEAP32[o+(u*8+4)>>2],h=0;h"u"||!(E instanceof FS.ErrnoError))&&abort(E),-E.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var o=_nbind.typeNameTbl.NBind.proto;return o.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var o=HEAPU32[t.pagePtr];if(o){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],o=new r(e);return typeIdTbl[e.id]=o,_nbind.typeNameTbl[e.name]=o,o}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var o=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(o=[o[0],o.slice(1)]),{paramList:o,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},o=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+o];if(!a)throw new Error("dynCall_"+o+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,o){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,o)):(r.arity=o,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var o=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return o.heap=a[r.ptrSize*8],o.ptrSize=r.ptrSize,o}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,o=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,o,r),o}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,o){return function(a){return pushCString(a,o)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(o){return!!o},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(o){__extends(a,o);function a(n,u,A,p){var h=o.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=u,I=A,v=p;if(n!==_nbind.ptrMarker){var x=h.__nbindConstructor.apply(h,arguments);E=4608,v=HEAPU32[x/4],I=HEAPU32[x/4+1]}var C={configurable:!0,enumerable:!1,value:null,writable:!1},R={__nbindFlags:E,__nbindPtr:I};v&&(R.__nbindShared=v,_nbind.mark(h));for(var L=0,U=Object.keys(R);L>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?u=Buffer.from(n):u=new Buffer(n),u.copy(o)}else getBuffer(o).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,o,a,n){try{Module.dynCall_viiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,o){try{return Module.dynCall_fiff(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,o,a){try{Module.dynCall_viddi(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,o){try{Module.dynCall_vidd(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,o){try{return Module.dynCall_iiii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,o){try{return Module.dynCall_diii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,o,a,n){try{Module.dynCall_viiddi(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,o,a,n,u){try{Module.dynCall_viiiiii(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,o,a,n){try{return Module.dynCall_iiiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,o,a){try{Module.dynCall_viiid(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,o,a,n,u){try{Module.dynCall_viififi(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(t,e,r,o){try{Module.dynCall_viii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,o){try{Module.dynCall_viid(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,o,a){try{Module.dynCall_viiii(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var o=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),u=new t.Uint8Array(r),A=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),I=e.DYNAMICTOP_PTR|0,v=e.tempDoublePtr|0,x=e.ABORT|0,C=e.STACKTOP|0,R=e.STACK_MAX|0,L=e.cttz_i8|0,U=e.___dso_handle|0,J=0,te=0,ae=0,fe=0,ce=t.NaN,me=t.Infinity,he=0,Be=0,we=0,g=0,Ee=0,Se=0,le=t.Math.floor,ne=t.Math.abs,ee=t.Math.sqrt,Ie=t.Math.pow,Fe=t.Math.cos,At=t.Math.sin,H=t.Math.tan,at=t.Math.acos,Re=t.Math.asin,ke=t.Math.atan,xe=t.Math.atan2,He=t.Math.exp,Te=t.Math.log,Je=t.Math.ceil,qe=t.Math.imul,b=t.Math.min,w=t.Math.max,P=t.Math.clz32,y=t.Math.fround,F=e.abort,z=e.assert,X=e.enlargeMemory,Z=e.getTotalMemory,ie=e.abortOnCannotGrowMemory,Pe=e.invoke_viiiii,Ne=e.invoke_vif,ot=e.invoke_vid,dt=e.invoke_fiff,jt=e.invoke_vi,$t=e.invoke_vii,bt=e.invoke_ii,an=e.invoke_viddi,Qr=e.invoke_vidd,mr=e.invoke_iiii,br=e.invoke_diii,Wr=e.invoke_di,Kn=e.invoke_iid,Ns=e.invoke_iii,Ti=e.invoke_viiddi,ps=e.invoke_viiiiii,io=e.invoke_dii,Pi=e.invoke_i,Ls=e.invoke_iiiiii,so=e.invoke_viiid,cc=e.invoke_viififi,cu=e.invoke_viii,lp=e.invoke_v,cp=e.invoke_viid,Os=e.invoke_idd,Dn=e.invoke_viiii,oo=e._emscripten_asm_const_iiiii,Ms=e._emscripten_asm_const_iiidddddd,ml=e._emscripten_asm_const_iiiid,yl=e.__nbind_reference_external,ao=e._emscripten_asm_const_iiiiiiii,Vn=e._removeAccessorPrefix,On=e._typeModule,Ni=e.__nbind_register_pool,Mn=e.__decorate,_i=e._llvm_stackrestore,tr=e.___cxa_atexit,Oe=e.__extends,ii=e.__nbind_get_value_object,Ma=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,hr=e._emscripten_set_main_loop_timing,uc=e.__nbind_register_primitive,uu=e.__nbind_register_type,Ac=e._emscripten_memcpy_big,El=e.__nbind_register_function,DA=e.___setErrNo,Au=e.__nbind_register_class,Ce=e.__nbind_finish,Rt=e._abort,fc=e._nbind_value,Hi=e._llvm_stacksave,fu=e.___syscall54,Yt=e._defineHidden,Cl=e._emscripten_set_main_loop,SA=e._emscripten_get_now,up=e.__nbind_register_callback_signature,pc=e._emscripten_asm_const_iiiiii,PA=e.__nbind_free_external,Qn=e._emscripten_asm_const_iiii,hi=e._emscripten_asm_const_iiididi,hc=e.___syscall6,bA=e._atexit,sa=e.___syscall140,Li=e.___syscall146,_o=y(0);let Ze=y(0);function lo(s){s=s|0;var l=0;return l=C,C=C+s|0,C=C+15&-16,l|0}function gc(){return C|0}function pu(s){s=s|0,C=s}function qi(s,l){s=s|0,l=l|0,C=s,R=l}function hu(s,l){s=s|0,l=l|0,J||(J=s,te=l)}function xA(s){s=s|0,Se=s}function Ua(){return Se|0}function dc(){var s=0,l=0;Dr(8104,8,400)|0,Dr(8504,408,540)|0,s=9044,l=s+44|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o[9088]=0,o[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,tr(17,8104,U|0)|0}function hs(s){s=s|0,pt(s+948|0)}function _t(s){return s=y(s),((Du(s)|0)&2147483647)>>>0>2139095040|0}function Fn(s,l,c){s=s|0,l=l|0,c=c|0;e:do if(n[s+(l<<3)+4>>2]|0)s=s+(l<<3)|0;else{if((l|2|0)==3&&n[s+60>>2]|0){s=s+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[s+52>>2]|0){s=s+48|0;break e}break}default:}if(n[s+68>>2]|0){s=s+64|0;break}else{s=(l|1|0)==5?948:c;break}}while(0);return s|0}function Ci(s){s=s|0;var l=0;return l=pD(1e3)|0,oa(s,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Dr(l|0,8104,1e3)|0,o[s+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=s,l|0}function oa(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Eg(s,5,3197,f)),C=d}function co(){return Ci(956)|0}function Us(s){s=s|0;var l=0;return l=Kt(1e3)|0,aa(l,s),oa(n[s+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function aa(s,l){s=s|0,l=l|0;var c=0;Dr(s|0,l|0,948)|0,Rm(s+948|0,l+948|0),c=s+960|0,s=l+960|0,l=c+40|0;do n[c>>2]=n[s>>2],c=c+4|0,s=s+4|0;while((c|0)<(l|0))}function la(s){s=s|0;var l=0,c=0,f=0,d=0;if(l=s+944|0,c=n[l>>2]|0,c|0&&(Ho(c+948|0,s)|0,n[l>>2]=0),c=wi(s)|0,c|0){l=0;do n[(gs(s,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(c|0))}c=s+948|0,f=n[c>>2]|0,d=s+952|0,l=n[d>>2]|0,(l|0)!=(f|0)&&(n[d>>2]=l+(~((l+-4-f|0)>>>2)<<2)),ds(c),hD(s),n[2276]=(n[2276]|0)+-1}function Ho(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0;f=n[s>>2]|0,k=s+4|0,c=n[k>>2]|0,m=c;e:do if((f|0)==(c|0))d=f,B=4;else for(s=f;;){if((n[s>>2]|0)==(l|0)){d=s,B=4;break e}if(s=s+4|0,(s|0)==(c|0)){s=0;break}}while(0);return(B|0)==4&&((d|0)!=(c|0)?(f=d+4|0,s=m-f|0,l=s>>2,l&&(Mw(d|0,f|0,s|0)|0,c=n[k>>2]|0),s=d+(l<<2)|0,(c|0)==(s|0)||(n[k>>2]=c+(~((c+-4-s|0)>>>2)<<2)),s=1):s=0),s|0}function wi(s){return s=s|0,(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2|0}function gs(s,l){s=s|0,l=l|0;var c=0;return c=n[s+948>>2]|0,(n[s+952>>2]|0)-c>>2>>>0>l>>>0?s=n[c+(l<<2)>>2]|0:s=0,s|0}function ds(s){s=s|0;var l=0,c=0,f=0,d=0;f=C,C=C+32|0,l=f,d=n[s>>2]|0,c=(n[s+4>>2]|0)-d|0,((n[s+8>>2]|0)-d|0)>>>0>c>>>0&&(d=c>>2,Ip(l,d,d,s+8|0),Bg(s,l),_A(l)),C=f}function ms(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;M=wi(s)|0;do if(M|0){if((n[(gs(s,0)|0)+944>>2]|0)==(s|0)){if(!(Ho(s+948|0,l)|0))break;Dr(l+400|0,8504,540)|0,n[l+944>>2]=0,Le(s);break}B=n[(n[s+976>>2]|0)+12>>2]|0,k=s+948|0,Q=(B|0)==0,c=0,m=0;do f=n[(n[k>>2]|0)+(m<<2)>>2]|0,(f|0)==(l|0)?Le(s):(d=Us(f)|0,n[(n[k>>2]|0)+(c<<2)>>2]=d,n[d+944>>2]=s,Q||TR[B&15](f,d,s,c),c=c+1|0),m=m+1|0;while((m|0)!=(M|0));if(c>>>0>>0){Q=s+948|0,k=s+952|0,B=c,c=n[k>>2]|0;do m=(n[Q>>2]|0)+(B<<2)|0,f=m+4|0,d=c-f|0,l=d>>2,l&&(Mw(m|0,f|0,d|0)|0,c=n[k>>2]|0),d=c,f=m+(l<<2)|0,(d|0)!=(f|0)&&(c=d+(~((d+-4-f|0)>>>2)<<2)|0,n[k>>2]=c),B=B+1|0;while((B|0)!=(M|0))}}while(0)}function _s(s){s=s|0;var l=0,c=0,f=0,d=0;Un(s,(wi(s)|0)==0,2491),Un(s,(n[s+944>>2]|0)==0,2545),l=s+948|0,c=n[l>>2]|0,f=s+952|0,d=n[f>>2]|0,(d|0)!=(c|0)&&(n[f>>2]=d+(~((d+-4-c|0)>>>2)<<2)),ds(l),l=s+976|0,c=n[l>>2]|0,Dr(s|0,8104,1e3)|0,o[c+2>>0]|0&&(n[s+4>>2]=2,n[s+12>>2]=4),n[l>>2]=c}function Un(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Ao(s,5,3197,f)),C=d}function Sn(){return n[2276]|0}function ys(){var s=0;return s=pD(20)|0,We((s|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[s>>2]=n[239],n[s+4>>2]=n[240],n[s+8>>2]=n[241],n[s+12>>2]=n[242],n[s+16>>2]=n[243],s|0}function We(s,l){s=s|0,l=l|0;var c=0,f=0;f=C,C=C+16|0,c=f,s||(n[c>>2]=l,Ao(0,5,3197,c)),C=f}function tt(s){s=s|0,hD(s),n[2277]=(n[2277]|0)+-1}function It(s,l){s=s|0,l=l|0;var c=0;l?(Un(s,(wi(s)|0)==0,2629),c=1):(c=0,l=0),n[s+964>>2]=l,n[s+988>>2]=c}function nr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+8|0,d=f+4|0,B=f,n[d>>2]=l,Un(s,(n[l+944>>2]|0)==0,2709),Un(s,(n[s+964>>2]|0)==0,2763),$(s),l=s+948|0,n[B>>2]=(n[l>>2]|0)+(c<<2),n[m>>2]=n[B>>2],ye(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=s,Le(s),C=f}function $(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;if(c=wi(s)|0,c|0&&(n[(gs(s,0)|0)+944>>2]|0)!=(s|0)){f=n[(n[s+976>>2]|0)+12>>2]|0,d=s+948|0,m=(f|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=Us(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=s,m||TR[f&15](B,k,s,l),l=l+1|0;while((l|0)!=(c|0))}}function ye(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0;et=C,C=C+64|0,j=et+52|0,k=et+48|0,se=et+28|0,Ge=et+24|0,Me=et+20|0,Qe=et,f=n[s>>2]|0,m=f,l=f+((n[l>>2]|0)-m>>2<<2)|0,f=s+4|0,d=n[f>>2]|0,B=s+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[c>>2],n[f>>2]=(n[f>>2]|0)+4;break}HA(s,l,d,l+4|0),l>>>0<=c>>>0&&(c=(n[f>>2]|0)>>>0>c>>>0?c+4|0:c),n[l>>2]=n[c>>2]}else{f=(d-m>>2)+1|0,d=N(s)|0,d>>>0>>0&&zr(s),O=n[s>>2]|0,M=(n[B>>2]|0)-O|0,m=M>>1,Ip(Qe,M>>2>>>0>>1>>>0?m>>>0>>0?f:m:d,l-O>>2,s+8|0),O=Qe+8|0,f=n[O>>2]|0,m=Qe+12|0,M=n[m>>2]|0,B=M,Q=f;do if((f|0)==(M|0)){if(M=Qe+4|0,f=n[M>>2]|0,Xe=n[Qe>>2]|0,d=Xe,f>>>0<=Xe>>>0){f=B-d>>1,f=(f|0)==0?1:f,Ip(se,f,f>>>2,n[Qe+16>>2]|0),n[Ge>>2]=n[M>>2],n[Me>>2]=n[O>>2],n[k>>2]=n[Ge>>2],n[j>>2]=n[Me>>2],Dw(se,k,j),f=n[Qe>>2]|0,n[Qe>>2]=n[se>>2],n[se>>2]=f,f=se+4|0,Xe=n[M>>2]|0,n[M>>2]=n[f>>2],n[f>>2]=Xe,f=se+8|0,Xe=n[O>>2]|0,n[O>>2]=n[f>>2],n[f>>2]=Xe,f=se+12|0,Xe=n[m>>2]|0,n[m>>2]=n[f>>2],n[f>>2]=Xe,_A(se),f=n[O>>2]|0;break}m=f,B=((m-d>>2)+1|0)/-2|0,k=f+(B<<2)|0,d=Q-m|0,m=d>>2,m&&(Mw(k|0,f|0,d|0)|0,f=n[M>>2]|0),Xe=k+(m<<2)|0,n[O>>2]=Xe,n[M>>2]=f+(B<<2),f=Xe}while(0);n[f>>2]=n[c>>2],n[O>>2]=(n[O>>2]|0)+4,l=vg(s,Qe,l)|0,_A(Qe)}while(0);return C=et,l|0}function Le(s){s=s|0;var l=0;do{if(l=s+984|0,o[l>>0]|0)break;o[l>>0]=1,h[s+504>>2]=y(ce),s=n[s+944>>2]|0}while((s|0)!=0)}function pt(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function ht(s){return s=s|0,n[s+944>>2]|0}function Tt(s){s=s|0,Un(s,(n[s+964>>2]|0)!=0,2832),Le(s)}function er(s){return s=s|0,(o[s+984>>0]|0)!=0|0}function $r(s,l){s=s|0,l=l|0,QUe(s,l,400)|0&&(Dr(s|0,l|0,400)|0,Le(s))}function ji(s){s=s|0;var l=Ze;return l=y(h[s+44>>2]),s=_t(l)|0,y(s?y(0):l)}function es(s){s=s|0;var l=Ze;return l=y(h[s+48>>2]),_t(l)|0&&(l=o[(n[s+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function bi(s,l){s=s|0,l=l|0,n[s+980>>2]=l}function qo(s){return s=s|0,n[s+980>>2]|0}function kA(s,l){s=s|0,l=l|0;var c=0;c=s+4|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function QA(s){return s=s|0,n[s+4>>2]|0}function Ap(s,l){s=s|0,l=l|0;var c=0;c=s+8|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ig(s){return s=s|0,n[s+8>>2]|0}function gu(s,l){s=s|0,l=l|0;var c=0;c=s+12|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function sg(s){return s=s|0,n[s+12>>2]|0}function du(s,l){s=s|0,l=l|0;var c=0;c=s+16|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function uo(s){return s=s|0,n[s+16>>2]|0}function FA(s,l){s=s|0,l=l|0;var c=0;c=s+20|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function mc(s){return s=s|0,n[s+20>>2]|0}function ca(s,l){s=s|0,l=l|0;var c=0;c=s+24|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function og(s){return s=s|0,n[s+24>>2]|0}function yc(s,l){s=s|0,l=l|0;var c=0;c=s+28|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function Pm(s){return s=s|0,n[s+28>>2]|0}function ag(s,l){s=s|0,l=l|0;var c=0;c=s+32|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function $n(s){return s=s|0,n[s+32>>2]|0}function fp(s,l){s=s|0,l=l|0;var c=0;c=s+36|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function lg(s){return s=s|0,n[s+36>>2]|0}function RA(s,l){s=s|0,l=y(l);var c=0;c=s+40|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Hs(s,l){s=s|0,l=y(l);var c=0;c=s+44|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function mu(s,l){s=s|0,l=y(l);var c=0;c=s+48|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Ha(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+52|0,d=s+56|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Gi(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+52|0,c=s+56|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ua(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+52|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function yu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Es(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Ec(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+132+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Cc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function G(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Dt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+60+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function wl(s,l){s=s|0,l=l|0;var c=0;c=s+60+(l<<3)+4|0,(n[c>>2]|0)!=3&&(h[s+60+(l<<3)>>2]=y(ce),n[c>>2]=3,Le(s))}function xi(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function wc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function ct(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+204+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Eu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+276+(l<<3)|0,l=s+276+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function cg(s,l){return s=s|0,l=l|0,y(h[s+276+(l<<3)>>2])}function yw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+348|0,d=s+352|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function TA(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+348|0,c=s+352|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function pp(s){s=s|0;var l=0;l=s+352|0,(n[l>>2]|0)!=3&&(h[s+348>>2]=y(ce),n[l>>2]=3,Le(s))}function Br(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+348|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cs(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+356|0,d=s+360|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function ug(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+356|0,c=s+360|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function Ag(s){s=s|0;var l=0;l=s+360|0,(n[l>>2]|0)!=3&&(h[s+356>>2]=y(ce),n[l>>2]=3,Le(s))}function fg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+356|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function hp(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ic(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ct(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+364|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function bm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function pg(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function hg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+372|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function xm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function gg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+380|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function wu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ew(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function km(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+388|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Aa(s,l){s=s|0,l=y(l);var c=0;c=s+396|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Bc(s){return s=s|0,y(h[s+396>>2])}function Il(s){return s=s|0,y(h[s+400>>2])}function Iu(s){return s=s|0,y(h[s+404>>2])}function dg(s){return s=s|0,y(h[s+408>>2])}function NA(s){return s=s|0,y(h[s+412>>2])}function gp(s){return s=s|0,y(h[s+416>>2])}function qa(s){return s=s|0,y(h[s+420>>2])}function mg(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+424+(l<<2)>>2])}function dp(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+448+(l<<2)>>2])}function jo(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+472+(l<<2)>>2])}function ws(s,l){s=s|0,l=l|0;var c=0,f=Ze;return c=n[s+4>>2]|0,(c|0)==(n[l+4>>2]|0)?c?(f=y(h[s>>2]),s=y(ne(y(f-y(h[l>>2]))))>2]=0,n[f+4>>2]=0,n[f+8>>2]=0,Ma(f|0,s|0,l|0,0),Ao(s,3,(o[f+11>>0]|0)<0?n[f>>2]|0:f,c),e3e(f),C=c}function Go(s,l,c,f){s=y(s),l=y(l),c=c|0,f=f|0;var d=Ze;s=y(s*l),d=y(bR(s,y(1)));do if(Ii(d,y(0))|0)s=y(s-d);else{if(s=y(s-d),Ii(d,y(1))|0){s=y(s+y(1));break}if(c){s=y(s+y(1));break}f||(d>y(.5)?d=y(1):(f=Ii(d,y(.5))|0,d=y(f?1:0)),s=y(s+d))}while(0);return y(s/l)}function LA(s,l,c,f,d,m,B,k,Q,M,O,j,se){s=s|0,l=y(l),c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,k=y(k),Q=y(Q),M=y(M),O=y(O),j=y(j),se=se|0;var Ge=0,Me=Ze,Qe=Ze,et=Ze,Xe=Ze,lt=Ze,Ue=Ze;return Q>2]),Me!=y(0))?(et=y(Go(l,Me,0,0)),Xe=y(Go(f,Me,0,0)),Qe=y(Go(m,Me,0,0)),Me=y(Go(k,Me,0,0))):(Qe=m,et=l,Me=k,Xe=f),(d|0)==(s|0)?Ge=Ii(Qe,et)|0:Ge=0,(B|0)==(c|0)?se=Ii(Me,Xe)|0:se=0,!Ge&&(lt=y(l-O),!(mp(s,lt,Q)|0))&&!(yp(s,lt,d,Q)|0)?Ge=yg(s,lt,d,m,Q)|0:Ge=1,!se&&(Ue=y(f-j),!(mp(c,Ue,M)|0))&&!(yp(c,Ue,B,M)|0)?se=yg(c,Ue,B,k,M)|0:se=1,se=Ge&se),se|0}function mp(s,l,c){return s=s|0,l=y(l),c=y(c),(s|0)==1?s=Ii(l,c)|0:s=0,s|0}function yp(s,l,c,f){return s=s|0,l=y(l),c=c|0,f=y(f),(s|0)==2&(c|0)==0?l>=f?s=1:s=Ii(l,f)|0:s=0,s|0}function yg(s,l,c,f,d){return s=s|0,l=y(l),c=c|0,f=y(f),d=y(d),(s|0)==2&(c|0)==2&f>l?d<=l?s=1:s=Ii(l,d)|0:s=0,s|0}function fa(s,l,c,f,d,m,B,k,Q,M,O){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,M=M|0,O=O|0;var j=0,se=0,Ge=0,Me=0,Qe=Ze,et=Ze,Xe=0,lt=0,Ue=0,je=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0,xn=Ze,go=Ze,mo=Ze,yo=0,ya=0;ir=C,C=C+160|0,Xt=ir+152|0,or=ir+120|0,Mr=ir+104|0,Ue=ir+72|0,Me=ir+56|0,Lt=ir+8|0,lt=ir,je=(n[2279]|0)+1|0,n[2279]=je,Sr=s+984|0,(o[Sr>>0]|0)!=0&&(n[s+512>>2]|0)!=(n[2278]|0)?Xe=4:(n[s+516>>2]|0)==(f|0)?Nr=0:Xe=4,(Xe|0)==4&&(n[s+520>>2]=0,n[s+924>>2]=-1,n[s+928>>2]=-1,h[s+932>>2]=y(-1),h[s+936>>2]=y(-1),Nr=1);e:do if(n[s+964>>2]|0)if(Qe=y(ln(s,2,B)),et=y(ln(s,0,B)),j=s+916|0,mo=y(h[j>>2]),go=y(h[s+920>>2]),xn=y(h[s+932>>2]),LA(d,l,m,c,n[s+924>>2]|0,mo,n[s+928>>2]|0,go,xn,y(h[s+936>>2]),Qe,et,O)|0)Xe=22;else if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(j=s+524+(se*24|0)|0,xn=y(h[j>>2]),go=y(h[s+524+(se*24|0)+4>>2]),mo=y(h[s+524+(se*24|0)+16>>2]),LA(d,l,m,c,n[s+524+(se*24|0)+8>>2]|0,xn,n[s+524+(se*24|0)+12>>2]|0,go,mo,y(h[s+524+(se*24|0)+20>>2]),Qe,et,O)|0){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}else{if(Q){if(j=s+916|0,!(Ii(y(h[j>>2]),l)|0)){Xe=21;break}if(!(Ii(y(h[s+920>>2]),c)|0)){Xe=21;break}if((n[s+924>>2]|0)!=(d|0)){Xe=21;break}j=(n[s+928>>2]|0)==(m|0)?j:0,Xe=22;break}if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(j=s+524+(se*24|0)|0,Ii(y(h[j>>2]),l)|0&&Ii(y(h[s+524+(se*24|0)+4>>2]),c)|0&&(n[s+524+(se*24|0)+8>>2]|0)==(d|0)&&(n[s+524+(se*24|0)+12>>2]|0)==(m|0)){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}}while(0);do if((Xe|0)==21)o[11697]|0?(j=0,Xe=28):(j=0,Xe=31);else if((Xe|0)==22){if(se=(o[11697]|0)!=0,!((j|0)!=0&(Nr^1)))if(se){Xe=28;break}else{Xe=31;break}Me=j+16|0,n[s+908>>2]=n[Me>>2],Ge=j+20|0,n[s+912>>2]=n[Ge>>2],(o[11698]|0)==0|se^1||(n[lt>>2]=OA(je)|0,n[lt+4>>2]=je,Ao(s,4,2972,lt),se=n[s+972>>2]|0,se|0&&tf[se&127](s),d=ja(d,Q)|0,m=ja(m,Q)|0,ya=+y(h[Me>>2]),yo=+y(h[Ge>>2]),n[Lt>>2]=d,n[Lt+4>>2]=m,E[Lt+8>>3]=+l,E[Lt+16>>3]=+c,E[Lt+24>>3]=ya,E[Lt+32>>3]=yo,n[Lt+40>>2]=M,Ao(s,4,2989,Lt))}while(0);return(Xe|0)==28&&(se=OA(je)|0,n[Me>>2]=se,n[Me+4>>2]=je,n[Me+8>>2]=Nr?3047:11699,Ao(s,4,3038,Me),se=n[s+972>>2]|0,se|0&&tf[se&127](s),Lt=ja(d,Q)|0,Xe=ja(m,Q)|0,n[Ue>>2]=Lt,n[Ue+4>>2]=Xe,E[Ue+8>>3]=+l,E[Ue+16>>3]=+c,n[Ue+24>>2]=M,Ao(s,4,3049,Ue),Xe=31),(Xe|0)==31&&(si(s,l,c,f,d,m,B,k,Q,O),o[11697]|0&&(se=n[2279]|0,Lt=OA(se)|0,n[Mr>>2]=Lt,n[Mr+4>>2]=se,n[Mr+8>>2]=Nr?3047:11699,Ao(s,4,3083,Mr),se=n[s+972>>2]|0,se|0&&tf[se&127](s),Lt=ja(d,Q)|0,Mr=ja(m,Q)|0,yo=+y(h[s+908>>2]),ya=+y(h[s+912>>2]),n[or>>2]=Lt,n[or+4>>2]=Mr,E[or+8>>3]=yo,E[or+16>>3]=ya,n[or+24>>2]=M,Ao(s,4,3092,or)),n[s+516>>2]=f,j||(se=s+520|0,j=n[se>>2]|0,(j|0)==16&&(o[11697]|0&&Ao(s,4,3124,Xt),n[se>>2]=0,j=0),Q?j=s+916|0:(n[se>>2]=j+1,j=s+524+(j*24|0)|0),h[j>>2]=l,h[j+4>>2]=c,n[j+8>>2]=d,n[j+12>>2]=m,n[j+16>>2]=n[s+908>>2],n[j+20>>2]=n[s+912>>2],j=0)),Q&&(n[s+416>>2]=n[s+908>>2],n[s+420>>2]=n[s+912>>2],o[s+985>>0]=1,o[Sr>>0]=0),n[2279]=(n[2279]|0)+-1,n[s+512>>2]=n[2278],C=ir,Nr|(j|0)==0|0}function ln(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(K(s,l,c)),y(f+y(re(s,l,c)))}function Ao(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=C,C=C+16|0,d=m,n[d>>2]=f,s?f=n[s+976>>2]|0:f=0,Cg(f,s,l,c,d),C=m}function OA(s){return s=s|0,(s>>>0>60?3201:3201+(60-s)|0)|0}function ja(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+32|0,c=d+12|0,f=d,n[c>>2]=n[254],n[c+4>>2]=n[255],n[c+8>>2]=n[256],n[f>>2]=n[257],n[f+4>>2]=n[258],n[f+8>>2]=n[259],(s|0)>2?s=11699:s=n[(l?f:c)+(s<<2)>>2]|0,C=d,s|0}function si(s,l,c,f,d,m,B,k,Q,M){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,M=M|0;var O=0,j=0,se=0,Ge=0,Me=Ze,Qe=Ze,et=Ze,Xe=Ze,lt=Ze,Ue=Ze,je=Ze,Lt=0,Mr=0,or=0,Xt=Ze,Sr=Ze,Nr=0,ir=Ze,xn=0,go=0,mo=0,yo=0,ya=0,Fp=0,Rp=0,bl=0,Tp=0,Fu=0,Ru=0,Np=0,Lp=0,Op=0,Xr=0,xl=0,Mp=0,xc=0,Up=Ze,_p=Ze,Tu=Ze,Nu=Ze,kc=Ze,js=0,za=0,Wo=0,kl=0,nf=0,sf=Ze,Lu=Ze,of=Ze,af=Ze,Gs=Ze,vs=Ze,Ql=0,Rn=Ze,lf=Ze,Eo=Ze,Qc=Ze,Co=Ze,Fc=Ze,cf=0,uf=0,Rc=Ze,Ys=Ze,Fl=0,Af=0,ff=0,pf=0,xr=Ze,Jn=0,Ds=0,wo=0,Ws=0,Rr=0,ur=0,Rl=0,Jt=Ze,hf=0,li=0;Rl=C,C=C+16|0,js=Rl+12|0,za=Rl+8|0,Wo=Rl+4|0,kl=Rl,Un(s,(d|0)==0|(_t(l)|0)^1,3326),Un(s,(m|0)==0|(_t(c)|0)^1,3406),Ds=mt(s,f)|0,n[s+496>>2]=Ds,Rr=fr(2,Ds)|0,ur=fr(0,Ds)|0,h[s+440>>2]=y(K(s,Rr,B)),h[s+444>>2]=y(re(s,Rr,B)),h[s+428>>2]=y(K(s,ur,B)),h[s+436>>2]=y(re(s,ur,B)),h[s+464>>2]=y(Cr(s,Rr)),h[s+468>>2]=y(yn(s,Rr)),h[s+452>>2]=y(Cr(s,ur)),h[s+460>>2]=y(yn(s,ur)),h[s+488>>2]=y(oi(s,Rr,B)),h[s+492>>2]=y(Oi(s,Rr,B)),h[s+476>>2]=y(oi(s,ur,B)),h[s+484>>2]=y(Oi(s,ur,B));do if(n[s+964>>2]|0)Ig(s,l,c,d,m,B,k);else{if(wo=s+948|0,Ws=(n[s+952>>2]|0)-(n[wo>>2]|0)>>2,!Ws){Gv(s,l,c,d,m,B,k);break}if(!Q&&Yv(s,l,c,d,m,B,k)|0)break;$(s),xl=s+508|0,o[xl>>0]=0,Rr=fr(n[s+4>>2]|0,Ds)|0,ur=ww(Rr,Ds)|0,Jn=pe(Rr)|0,Mp=n[s+8>>2]|0,Af=s+28|0,xc=(n[Af>>2]|0)!=0,Co=Jn?B:k,Rc=Jn?k:B,Up=y(Cp(s,Rr,B)),_p=y(Iw(s,Rr,B)),Me=y(Cp(s,ur,B)),Fc=y(En(s,Rr,B)),Ys=y(En(s,ur,B)),or=Jn?d:m,Fl=Jn?m:d,xr=Jn?Fc:Ys,lt=Jn?Ys:Fc,Qc=y(ln(s,2,B)),Xe=y(ln(s,0,B)),Qe=y(y(Gr(s+364|0,B))-xr),et=y(y(Gr(s+380|0,B))-xr),Ue=y(y(Gr(s+372|0,k))-lt),je=y(y(Gr(s+388|0,k))-lt),Tu=Jn?Qe:Ue,Nu=Jn?et:je,Qc=y(l-Qc),l=y(Qc-xr),_t(l)|0?xr=l:xr=y(_n(y(Tg(l,et)),Qe)),lf=y(c-Xe),l=y(lf-lt),_t(l)|0?Eo=l:Eo=y(_n(y(Tg(l,je)),Ue)),Qe=Jn?xr:Eo,Rn=Jn?Eo:xr;e:do if((or|0)==1)for(f=0,j=0;;){if(O=gs(s,j)|0,!f)y(rs(O))>y(0)&&y(qs(O))>y(0)?f=O:f=0;else if(Tm(O)|0){Ge=0;break e}if(j=j+1|0,j>>>0>=Ws>>>0){Ge=f;break}}else Ge=0;while(0);Lt=Ge+500|0,Mr=Ge+504|0,f=0,O=0,l=y(0),se=0;do{if(j=n[(n[wo>>2]|0)+(se<<2)>>2]|0,(n[j+36>>2]|0)==1)Bu(j),o[j+985>>0]=1,o[j+984>>0]=0;else{Bl(j),Q&&Ep(j,mt(j,Ds)|0,Qe,Rn,xr);do if((n[j+24>>2]|0)!=1)if((j|0)==(Ge|0)){n[Lt>>2]=n[2278],h[Mr>>2]=y(0);break}else{Nm(s,j,xr,d,Eo,xr,Eo,m,Ds,M);break}else O|0&&(n[O+960>>2]=j),n[j+960>>2]=0,O=j,f=(f|0)==0?j:f;while(0);vs=y(h[j+504>>2]),l=y(l+y(vs+y(ln(j,Rr,xr))))}se=se+1|0}while((se|0)!=(Ws|0));for(mo=l>Qe,Ql=xc&((or|0)==2&mo)?1:or,xn=(Fl|0)==1,ya=xn&(Q^1),Fp=(Ql|0)==1,Rp=(Ql|0)==2,bl=976+(Rr<<2)|0,Tp=(Fl|2|0)==2,Op=xn&(xc^1),Fu=1040+(ur<<2)|0,Ru=1040+(Rr<<2)|0,Np=976+(ur<<2)|0,Lp=(Fl|0)!=1,mo=xc&((or|0)!=0&mo),go=s+976|0,xn=xn^1,l=Qe,Nr=0,yo=0,vs=y(0),kc=y(0);;){e:do if(Nr>>>0>>0)for(Mr=n[wo>>2]|0,se=0,je=y(0),Ue=y(0),et=y(0),Qe=y(0),j=0,O=0,Ge=Nr;;){if(Lt=n[Mr+(Ge<<2)>>2]|0,(n[Lt+36>>2]|0)!=1&&(n[Lt+940>>2]=yo,(n[Lt+24>>2]|0)!=1)){if(Xe=y(ln(Lt,Rr,xr)),Xr=n[bl>>2]|0,c=y(Gr(Lt+380+(Xr<<3)|0,Co)),lt=y(h[Lt+504>>2]),c=y(Tg(c,lt)),c=y(_n(y(Gr(Lt+364+(Xr<<3)|0,Co)),c)),xc&(se|0)!=0&y(Xe+y(Ue+c))>l){m=se,Xe=je,or=Ge;break e}Xe=y(Xe+c),c=y(Ue+Xe),Xe=y(je+Xe),Tm(Lt)|0&&(et=y(et+y(rs(Lt))),Qe=y(Qe-y(lt*y(qs(Lt))))),O|0&&(n[O+960>>2]=Lt),n[Lt+960>>2]=0,se=se+1|0,O=Lt,j=(j|0)==0?Lt:j}else Xe=je,c=Ue;if(Ge=Ge+1|0,Ge>>>0>>0)je=Xe,Ue=c;else{m=se,or=Ge;break}}else m=0,Xe=y(0),et=y(0),Qe=y(0),j=0,or=Nr;while(0);Xr=et>y(0)&ety(0)&QeNu&((_t(Nu)|0)^1))l=Nu,Xr=51;else if(o[(n[go>>2]|0)+3>>0]|0)Xr=51;else{if(Xt!=y(0)&&y(rs(s))!=y(0)){Xr=53;break}l=Xe,Xr=53}while(0);if((Xr|0)==51&&(Xr=0,_t(l)|0?Xr=53:(Sr=y(l-Xe),ir=l)),(Xr|0)==53&&(Xr=0,Xe>2]|0,Ge=Sry(0),Ue=y(Sr/Xt),et=y(0),Xe=y(0),l=y(0),O=j;do c=y(Gr(O+380+(se<<3)|0,Co)),Qe=y(Gr(O+364+(se<<3)|0,Co)),Qe=y(Tg(c,y(_n(Qe,y(h[O+504>>2]))))),Ge?(c=y(Qe*y(qs(O))),c!=y(-0)&&(Jt=y(Qe-y(lt*c)),sf=y(Bi(O,Rr,Jt,ir,xr)),Jt!=sf)&&(et=y(et-y(sf-Qe)),l=y(l+c))):Lt&&(Lu=y(rs(O)),Lu!=y(0))&&(Jt=y(Qe+y(Ue*Lu)),of=y(Bi(O,Rr,Jt,ir,xr)),Jt!=of)&&(et=y(et-y(of-Qe)),Xe=y(Xe-Lu)),O=n[O+960>>2]|0;while((O|0)!=0);if(l=y(je+l),Qe=y(Sr+et),nf)l=y(0);else{lt=y(Xt+Xe),Ge=n[bl>>2]|0,Lt=Qey(0),lt=y(Qe/lt),l=y(0);do{Jt=y(Gr(j+380+(Ge<<3)|0,Co)),et=y(Gr(j+364+(Ge<<3)|0,Co)),et=y(Tg(Jt,y(_n(et,y(h[j+504>>2]))))),Lt?(Jt=y(et*y(qs(j))),Qe=y(-Jt),Jt!=y(-0)?(Jt=y(Ue*Qe),Qe=y(Bi(j,Rr,y(et+(Mr?Qe:Jt)),ir,xr))):Qe=et):se&&(af=y(rs(j)),af!=y(0))?Qe=y(Bi(j,Rr,y(et+y(lt*af)),ir,xr)):Qe=et,l=y(l-y(Qe-et)),Xe=y(ln(j,Rr,xr)),c=y(ln(j,ur,xr)),Qe=y(Qe+Xe),h[za>>2]=Qe,n[kl>>2]=1,et=y(h[j+396>>2]);e:do if(_t(et)|0){O=_t(Rn)|0;do if(!O){if(mo|(ts(j,ur,Rn)|0|xn)||(ha(s,j)|0)!=4||(n[(vl(j,ur)|0)+4>>2]|0)==3||(n[(Sc(j,ur)|0)+4>>2]|0)==3)break;h[js>>2]=Rn,n[Wo>>2]=1;break e}while(0);if(ts(j,ur,Rn)|0){O=n[j+992+(n[Np>>2]<<2)>>2]|0,Jt=y(c+y(Gr(O,Rn))),h[js>>2]=Jt,O=Lp&(n[O+4>>2]|0)==2,n[Wo>>2]=((_t(Jt)|0|O)^1)&1;break}else{h[js>>2]=Rn,n[Wo>>2]=O?0:2;break}}else Jt=y(Qe-Xe),Xt=y(Jt/et),Jt=y(et*Jt),n[Wo>>2]=1,h[js>>2]=y(c+(Jn?Xt:Jt));while(0);yr(j,Rr,ir,xr,kl,za),yr(j,ur,Rn,xr,Wo,js);do if(!(ts(j,ur,Rn)|0)&&(ha(s,j)|0)==4){if((n[(vl(j,ur)|0)+4>>2]|0)==3){O=0;break}O=(n[(Sc(j,ur)|0)+4>>2]|0)!=3}else O=0;while(0);Jt=y(h[za>>2]),Xt=y(h[js>>2]),hf=n[kl>>2]|0,li=n[Wo>>2]|0,fa(j,Jn?Jt:Xt,Jn?Xt:Jt,Ds,Jn?hf:li,Jn?li:hf,xr,Eo,Q&(O^1),3488,M)|0,o[xl>>0]=o[xl>>0]|o[j+508>>0],j=n[j+960>>2]|0}while((j|0)!=0)}}else l=y(0);if(l=y(Sr+l),li=l>0]=li|u[xl>>0],Rp&l>y(0)?(O=n[bl>>2]|0,(n[s+364+(O<<3)+4>>2]|0)!=0&&(Gs=y(Gr(s+364+(O<<3)|0,Co)),Gs>=y(0))?Qe=y(_n(y(0),y(Gs-y(ir-l)))):Qe=y(0)):Qe=l,Lt=Nr>>>0>>0,Lt){Ge=n[wo>>2]|0,se=Nr,O=0;do j=n[Ge+(se<<2)>>2]|0,n[j+24>>2]|0||(O=((n[(vl(j,Rr)|0)+4>>2]|0)==3&1)+O|0,O=O+((n[(Sc(j,Rr)|0)+4>>2]|0)==3&1)|0),se=se+1|0;while((se|0)!=(or|0));O?(Xe=y(0),c=y(0)):Xr=101}else Xr=101;e:do if((Xr|0)==101)switch(Xr=0,Mp|0){case 1:{O=0,Xe=y(Qe*y(.5)),c=y(0);break e}case 2:{O=0,Xe=Qe,c=y(0);break e}case 3:{if(m>>>0<=1){O=0,Xe=y(0),c=y(0);break e}c=y((m+-1|0)>>>0),O=0,Xe=y(0),c=y(y(_n(Qe,y(0)))/c);break e}case 5:{c=y(Qe/y((m+1|0)>>>0)),O=0,Xe=c;break e}case 4:{c=y(Qe/y(m>>>0)),O=0,Xe=y(c*y(.5));break e}default:{O=0,Xe=y(0),c=y(0);break e}}while(0);if(l=y(Up+Xe),Lt){et=y(Qe/y(O|0)),se=n[wo>>2]|0,j=Nr,Qe=y(0);do{O=n[se+(j<<2)>>2]|0;e:do if((n[O+36>>2]|0)!=1){switch(n[O+24>>2]|0){case 1:{if(gi(O,Rr)|0){if(!Q)break e;Jt=y(Or(O,Rr,ir)),Jt=y(Jt+y(Cr(s,Rr))),Jt=y(Jt+y(K(O,Rr,xr))),h[O+400+(n[Ru>>2]<<2)>>2]=Jt;break e}break}case 0:if(li=(n[(vl(O,Rr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,Q&&(li=O+400+(n[Ru>>2]<<2)|0,h[li>>2]=y(l+y(h[li>>2]))),li=(n[(Sc(O,Rr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,ya){Jt=y(c+y(ln(O,Rr,xr))),Qe=Rn,l=y(l+y(Jt+y(h[O+504>>2])));break e}else{l=y(l+y(c+y(ns(O,Rr,xr)))),Qe=y(_n(Qe,y(ns(O,ur,xr))));break e}default:}Q&&(Jt=y(Xe+y(Cr(s,Rr))),li=O+400+(n[Ru>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2])))}while(0);j=j+1|0}while((j|0)!=(or|0))}else Qe=y(0);if(c=y(_p+l),Tp?Xe=y(y(Bi(s,ur,y(Ys+Qe),Rc,B))-Ys):Xe=Rn,et=y(y(Bi(s,ur,y(Ys+(Op?Rn:Qe)),Rc,B))-Ys),Lt&Q){j=Nr;do{se=n[(n[wo>>2]|0)+(j<<2)>>2]|0;do if((n[se+36>>2]|0)!=1){if((n[se+24>>2]|0)==1){if(gi(se,ur)|0){if(Jt=y(Or(se,ur,Rn)),Jt=y(Jt+y(Cr(s,ur))),Jt=y(Jt+y(K(se,ur,xr))),O=n[Fu>>2]|0,h[se+400+(O<<2)>>2]=Jt,!(_t(Jt)|0))break}else O=n[Fu>>2]|0;Jt=y(Cr(s,ur)),h[se+400+(O<<2)>>2]=y(Jt+y(K(se,ur,xr)));break}O=ha(s,se)|0;do if((O|0)==4){if((n[(vl(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if((n[(Sc(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if(ts(se,ur,Rn)|0){l=Me;break}hf=n[se+908+(n[bl>>2]<<2)>>2]|0,n[js>>2]=hf,l=y(h[se+396>>2]),li=_t(l)|0,Qe=(n[v>>2]=hf,y(h[v>>2])),li?l=et:(Sr=y(ln(se,ur,xr)),Jt=y(Qe/l),l=y(l*Qe),l=y(Sr+(Jn?Jt:l))),h[za>>2]=l,h[js>>2]=y(y(ln(se,Rr,xr))+Qe),n[Wo>>2]=1,n[kl>>2]=1,yr(se,Rr,ir,xr,Wo,js),yr(se,ur,Rn,xr,kl,za),l=y(h[js>>2]),Sr=y(h[za>>2]),Jt=Jn?l:Sr,l=Jn?Sr:l,li=((_t(Jt)|0)^1)&1,fa(se,Jt,l,Ds,li,((_t(l)|0)^1)&1,xr,Eo,1,3493,M)|0,l=Me}else Xr=139;while(0);e:do if((Xr|0)==139){Xr=0,l=y(Xe-y(ns(se,ur,xr)));do if((n[(vl(se,ur)|0)+4>>2]|0)==3){if((n[(Sc(se,ur)|0)+4>>2]|0)!=3)break;l=y(Me+y(_n(y(0),y(l*y(.5)))));break e}while(0);if((n[(Sc(se,ur)|0)+4>>2]|0)==3){l=Me;break}if((n[(vl(se,ur)|0)+4>>2]|0)==3){l=y(Me+y(_n(y(0),l)));break}switch(O|0){case 1:{l=Me;break e}case 2:{l=y(Me+y(l*y(.5)));break e}default:{l=y(Me+l);break e}}}while(0);Jt=y(vs+l),li=se+400+(n[Fu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2]))}while(0);j=j+1|0}while((j|0)!=(or|0))}if(vs=y(vs+et),kc=y(_n(kc,c)),m=yo+1|0,or>>>0>=Ws>>>0)break;l=ir,Nr=or,yo=m}do if(Q){if(O=m>>>0>1,!O&&!(Yi(s)|0))break;if(!(_t(Rn)|0)){l=y(Rn-vs);e:do switch(n[s+12>>2]|0){case 3:{Me=y(Me+l),Ue=y(0);break}case 2:{Me=y(Me+y(l*y(.5))),Ue=y(0);break}case 4:{Rn>vs?Ue=y(l/y(m>>>0)):Ue=y(0);break}case 7:if(Rn>vs){Me=y(Me+y(l/y(m<<1>>>0))),Ue=y(l/y(m>>>0)),Ue=O?Ue:y(0);break e}else{Me=y(Me+y(l*y(.5))),Ue=y(0);break e}case 6:{Ue=y(l/y(yo>>>0)),Ue=Rn>vs&O?Ue:y(0);break}default:Ue=y(0)}while(0);if(m|0)for(Lt=1040+(ur<<2)|0,Mr=976+(ur<<2)|0,Ge=0,j=0;;){e:do if(j>>>0>>0)for(Qe=y(0),et=y(0),l=y(0),se=j;;){O=n[(n[wo>>2]|0)+(se<<2)>>2]|0;do if((n[O+36>>2]|0)!=1&&(n[O+24>>2]|0)==0){if((n[O+940>>2]|0)!=(Ge|0))break e;if(Lm(O,ur)|0&&(Jt=y(h[O+908+(n[Mr>>2]<<2)>>2]),l=y(_n(l,y(Jt+y(ln(O,ur,xr)))))),(ha(s,O)|0)!=5)break;Gs=y(Ya(O)),Gs=y(Gs+y(K(O,0,xr))),Jt=y(h[O+912>>2]),Jt=y(y(Jt+y(ln(O,0,xr)))-Gs),Gs=y(_n(et,Gs)),Jt=y(_n(Qe,Jt)),Qe=Jt,et=Gs,l=y(_n(l,y(Gs+Jt)))}while(0);if(O=se+1|0,O>>>0>>0)se=O;else{se=O;break}}else et=y(0),l=y(0),se=j;while(0);if(lt=y(Ue+l),c=Me,Me=y(Me+lt),j>>>0>>0){Xe=y(c+et),O=j;do{j=n[(n[wo>>2]|0)+(O<<2)>>2]|0;e:do if((n[j+36>>2]|0)!=1&&(n[j+24>>2]|0)==0)switch(ha(s,j)|0){case 1:{Jt=y(c+y(K(j,ur,xr))),h[j+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 3:{Jt=y(y(Me-y(re(j,ur,xr)))-y(h[j+908+(n[Mr>>2]<<2)>>2])),h[j+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 2:{Jt=y(c+y(y(lt-y(h[j+908+(n[Mr>>2]<<2)>>2]))*y(.5))),h[j+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 4:{if(Jt=y(c+y(K(j,ur,xr))),h[j+400+(n[Lt>>2]<<2)>>2]=Jt,ts(j,ur,Rn)|0||(Jn?(Qe=y(h[j+908>>2]),l=y(Qe+y(ln(j,Rr,xr))),et=lt):(et=y(h[j+912>>2]),et=y(et+y(ln(j,ur,xr))),l=lt,Qe=y(h[j+908>>2])),Ii(l,Qe)|0&&Ii(et,y(h[j+912>>2]))|0))break e;fa(j,l,et,Ds,1,1,xr,Eo,1,3501,M)|0;break e}case 5:{h[j+404>>2]=y(y(Xe-y(Ya(j)))+y(Or(j,0,Rn)));break e}default:break e}while(0);O=O+1|0}while((O|0)!=(se|0))}if(Ge=Ge+1|0,(Ge|0)==(m|0))break;j=se}}}while(0);if(h[s+908>>2]=y(Bi(s,2,Qc,B,B)),h[s+912>>2]=y(Bi(s,0,lf,k,B)),(Ql|0)!=0&&(cf=n[s+32>>2]|0,uf=(Ql|0)==2,!(uf&(cf|0)!=2))?uf&(cf|0)==2&&(l=y(Fc+ir),l=y(_n(y(Tg(l,y(MA(s,Rr,kc,Co)))),Fc)),Xr=198):(l=y(Bi(s,Rr,kc,Co,B)),Xr=198),(Xr|0)==198&&(h[s+908+(n[976+(Rr<<2)>>2]<<2)>>2]=l),(Fl|0)!=0&&(ff=n[s+32>>2]|0,pf=(Fl|0)==2,!(pf&(ff|0)!=2))?pf&(ff|0)==2&&(l=y(Ys+Rn),l=y(_n(y(Tg(l,y(MA(s,ur,y(Ys+vs),Rc)))),Ys)),Xr=204):(l=y(Bi(s,ur,y(Ys+vs),Rc,B)),Xr=204),(Xr|0)==204&&(h[s+908+(n[976+(ur<<2)>>2]<<2)>>2]=l),Q){if((n[Af>>2]|0)==2){j=976+(ur<<2)|0,se=1040+(ur<<2)|0,O=0;do Ge=gs(s,O)|0,n[Ge+24>>2]|0||(hf=n[j>>2]|0,Jt=y(h[s+908+(hf<<2)>>2]),li=Ge+400+(n[se>>2]<<2)|0,Jt=y(Jt-y(h[li>>2])),h[li>>2]=y(Jt-y(h[Ge+908+(hf<<2)>>2]))),O=O+1|0;while((O|0)!=(Ws|0))}if(f|0){O=Jn?Ql:d;do Om(s,f,xr,O,Eo,Ds,M),f=n[f+960>>2]|0;while((f|0)!=0)}if(O=(Rr|2|0)==3,j=(ur|2|0)==3,O|j){f=0;do se=n[(n[wo>>2]|0)+(f<<2)>>2]|0,(n[se+36>>2]|0)!=1&&(O&&wp(s,se,Rr),j&&wp(s,se,ur)),f=f+1|0;while((f|0)!=(Ws|0))}}}while(0);C=Rl}function pa(s,l){s=s|0,l=y(l);var c=0;oa(s,l>=y(0),3147),c=l==y(0),h[s+4>>2]=c?y(0):l}function vc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=f|0;var d=Ze,m=Ze,B=0,k=0,Q=0;n[2278]=(n[2278]|0)+1,Bl(s),ts(s,2,l)|0?(d=y(Gr(n[s+992>>2]|0,l)),Q=1,d=y(d+y(ln(s,2,l)))):(d=y(Gr(s+380|0,l)),d>=y(0)?Q=2:(Q=((_t(l)|0)^1)&1,d=l)),ts(s,0,c)|0?(m=y(Gr(n[s+996>>2]|0,c)),k=1,m=y(m+y(ln(s,0,l)))):(m=y(Gr(s+388|0,c)),m>=y(0)?k=2:(k=((_t(c)|0)^1)&1,m=c)),B=s+976|0,fa(s,d,m,f,Q,k,l,c,1,3189,n[B>>2]|0)|0&&(Ep(s,n[s+496>>2]|0,l,c,l),Dc(s,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),o[11696]|0)&&Qm(s,7)}function Bl(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;k=C,C=C+32|0,B=k+24|0,m=k+16|0,f=k+8|0,d=k,c=0;do l=s+380+(c<<3)|0,(n[s+380+(c<<3)+4>>2]|0)!=0&&(Q=l,M=n[Q+4>>2]|0,O=f,n[O>>2]=n[Q>>2],n[O+4>>2]=M,O=s+364+(c<<3)|0,M=n[O+4>>2]|0,Q=d,n[Q>>2]=n[O>>2],n[Q+4>>2]=M,n[m>>2]=n[f>>2],n[m+4>>2]=n[f+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],ws(m,B)|0)||(l=s+348+(c<<3)|0),n[s+992+(c<<2)>>2]=l,c=c+1|0;while((c|0)!=2);C=k}function ts(s,l,c){s=s|0,l=l|0,c=y(c);var f=0;switch(s=n[s+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[s+4>>2]|0){case 0:case 3:{s=0;break}case 1:{y(h[s>>2])>2])>2]|0){case 2:{l=y(y(y(h[s>>2])*l)/y(100));break}case 1:{l=y(h[s>>2]);break}default:l=y(ce)}return y(l)}function Ep(s,l,c,f,d){s=s|0,l=l|0,c=y(c),f=y(f),d=y(d);var m=0,B=Ze;l=n[s+944>>2]|0?l:1,m=fr(n[s+4>>2]|0,l)|0,l=ww(m,l)|0,c=y(Mm(s,m,c)),f=y(Mm(s,l,f)),B=y(c+y(K(s,m,d))),h[s+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,c=y(c+y(re(s,m,d))),h[s+400+(n[1e3+(m<<2)>>2]<<2)>>2]=c,c=y(f+y(K(s,l,d))),h[s+400+(n[1040+(l<<2)>>2]<<2)>>2]=c,d=y(f+y(re(s,l,d))),h[s+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function Dc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=y(f);var d=0,m=0,B=Ze,k=Ze,Q=0,M=0,O=Ze,j=0,se=Ze,Ge=Ze,Me=Ze,Qe=Ze;if(l!=y(0)&&(d=s+400|0,Qe=y(h[d>>2]),m=s+404|0,Me=y(h[m>>2]),j=s+416|0,Ge=y(h[j>>2]),M=s+420|0,B=y(h[M>>2]),se=y(Qe+c),O=y(Me+f),f=y(se+Ge),k=y(O+B),Q=(n[s+988>>2]|0)==1,h[d>>2]=y(Go(Qe,l,0,Q)),h[m>>2]=y(Go(Me,l,0,Q)),c=y(bR(y(Ge*l),y(1))),Ii(c,y(0))|0?m=0:m=(Ii(c,y(1))|0)^1,c=y(bR(y(B*l),y(1))),Ii(c,y(0))|0?d=0:d=(Ii(c,y(1))|0)^1,Qe=y(Go(f,l,Q&m,Q&(m^1))),h[j>>2]=y(Qe-y(Go(se,l,0,Q))),Qe=y(Go(k,l,Q&d,Q&(d^1))),h[M>>2]=y(Qe-y(Go(O,l,0,Q))),m=(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2,m|0)){d=0;do Dc(gs(s,d)|0,l,se,O),d=d+1|0;while((d|0)!=(m|0))}}function Cw(s,l,c,f,d){switch(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,c|0){case 5:case 0:{s=i7(n[489]|0,f,d)|0;break}default:s=zUe(f,d)|0}return s|0}function Eg(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;d=C,C=C+16|0,m=d,n[m>>2]=f,Cg(s,0,l,c,m),C=d}function Cg(s,l,c,f,d){if(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,s=s|0?s:956,D7[n[s+8>>2]&1](s,l,c,f,d)|0,(c|0)==5)Rt();else return}function Ga(s,l,c){s=s|0,l=l|0,c=c|0,o[s+l>>0]=c&1}function Rm(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(wg(s,f),Qt(s,n[l>>2]|0,n[c>>2]|0,f))}function wg(s,l){s=s|0,l=l|0;var c=0;if((N(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function Qt(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N(s){return s=s|0,1073741823}function K(s,l,c){return s=s|0,l=l|0,c=y(c),pe(l)|0&&(n[s+96>>2]|0)!=0?s=s+92|0:s=Fn(s+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function re(s,l,c){return s=s|0,l=l|0,c=y(c),pe(l)|0&&(n[s+104>>2]|0)!=0?s=s+100|0:s=Fn(s+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function pe(s){return s=s|0,(s|1|0)==3|0}function ze(s,l){return s=s|0,l=y(l),(n[s+4>>2]|0)==3?l=y(0):l=y(Gr(s,l)),y(l)}function mt(s,l){return s=s|0,l=l|0,s=n[s>>2]|0,((s|0)==0?(l|0)>1?l:1:s)|0}function fr(s,l){s=s|0,l=l|0;var c=0;e:do if((l|0)==2){switch(s|0){case 2:{s=3;break e}case 3:break;default:{c=4;break e}}s=2}else c=4;while(0);return s|0}function Cr(s,l){s=s|0,l=l|0;var c=Ze;return pe(l)|0&&(n[s+312>>2]|0)!=0&&(c=y(h[s+308>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function yn(s,l){s=s|0,l=l|0;var c=Ze;return pe(l)|0&&(n[s+320>>2]|0)!=0&&(c=y(h[s+316>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return pe(l)|0&&(n[s+240>>2]|0)!=0&&(f=y(Gr(s+236|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1040+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return pe(l)|0&&(n[s+248>>2]|0)!=0&&(f=y(Gr(s+244|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1e3+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Ig(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,M=Ze,O=Ze,j=Ze,se=Ze,Ge=0,Me=0,Qe=0;Qe=C,C=C+16|0,Ge=Qe,Me=s+964|0,Un(s,(n[Me>>2]|0)!=0,3519),k=y(En(s,2,l)),Q=y(En(s,0,l)),M=y(ln(s,2,l)),O=y(ln(s,0,l)),_t(l)|0?j=l:j=y(_n(y(0),y(y(l-M)-k))),_t(c)|0?se=c:se=y(_n(y(0),y(y(c-O)-Q))),(f|0)==1&(d|0)==1?(h[s+908>>2]=y(Bi(s,2,y(l-M),m,m)),l=y(Bi(s,0,y(c-O),B,m))):(S7[n[Me>>2]&1](Ge,s,j,f,se,d),j=y(k+y(h[Ge>>2])),se=y(l-M),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?j:se,m,m)),se=y(Q+y(h[Ge+4>>2])),l=y(c-O),l=y(Bi(s,0,(d|2|0)==2?se:l,B,m))),h[s+912>>2]=l,C=Qe}function Gv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,M=Ze,O=Ze;M=y(En(s,2,m)),k=y(En(s,0,m)),O=y(ln(s,2,m)),Q=y(ln(s,0,m)),l=y(l-O),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?M:l,m,m)),c=y(c-Q),h[s+912>>2]=y(Bi(s,0,(d|2|0)==2?k:c,B,m))}function Yv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=0,Q=Ze,M=Ze;return k=(f|0)==2,!(l<=y(0)&k)&&!(c<=y(0)&(d|0)==2)&&!((f|0)==1&(d|0)==1)?s=0:(Q=y(ln(s,0,m)),M=y(ln(s,2,m)),k=l>2]=y(Bi(s,2,k?y(0):l,m,m)),l=y(c-Q),k=c>2]=y(Bi(s,0,k?y(0):l,B,m)),s=1),s|0}function ww(s,l){return s=s|0,l=l|0,UA(s)|0?s=fr(2,l)|0:s=0,s|0}function Cp(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(oi(s,l,c)),y(c+y(Cr(s,l)))}function Iw(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(Oi(s,l,c)),y(c+y(yn(s,l)))}function En(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(Cp(s,l,c)),y(f+y(Iw(s,l,c)))}function Tm(s){return s=s|0,n[s+24>>2]|0?s=0:y(rs(s))!=y(0)?s=1:s=y(qs(s))!=y(0),s|0}function rs(s){s=s|0;var l=Ze;if(n[s+944>>2]|0){if(l=y(h[s+44>>2]),_t(l)|0)return l=y(h[s+40>>2]),s=l>y(0)&((_t(l)|0)^1),y(s?l:y(0))}else l=y(0);return y(l)}function qs(s){s=s|0;var l=Ze,c=0,f=Ze;do if(n[s+944>>2]|0){if(l=y(h[s+48>>2]),_t(l)|0){if(c=o[(n[s+976>>2]|0)+2>>0]|0,c<<24>>24==0&&(f=y(h[s+40>>2]),f>24?y(1):y(0)}}else l=y(0);while(0);return y(l)}function Bu(s){s=s|0;var l=0,c=0;if(Xm(s+400|0,0,540)|0,o[s+985>>0]=1,$(s),c=wi(s)|0,c|0){l=s+948|0,s=0;do Bu(n[(n[l>>2]|0)+(s<<2)>>2]|0),s=s+1|0;while((s|0)!=(c|0))}}function Nm(s,l,c,f,d,m,B,k,Q,M){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=y(m),B=y(B),k=k|0,Q=Q|0,M=M|0;var O=0,j=Ze,se=0,Ge=0,Me=Ze,Qe=Ze,et=0,Xe=Ze,lt=0,Ue=Ze,je=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0,xn=0,go=0;xn=C,C=C+16|0,Mr=xn+12|0,or=xn+8|0,Xt=xn+4|0,Sr=xn,ir=fr(n[s+4>>2]|0,Q)|0,je=pe(ir)|0,j=y(Gr(Bw(l)|0,je?m:B)),Lt=ts(l,2,m)|0,Nr=ts(l,0,B)|0;do if(!(_t(j)|0)&&!(_t(je?c:d)|0)){if(O=l+504|0,!(_t(y(h[O>>2]))|0)&&(!(vw(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[O>>2]=y(_n(j,y(En(l,ir,m))))}else se=7;while(0);do if((se|0)==7){if(lt=je^1,!(lt|Lt^1)){B=y(Gr(n[l+992>>2]|0,m)),h[l+504>>2]=y(_n(B,y(En(l,2,m))));break}if(!(je|Nr^1)){B=y(Gr(n[l+996>>2]|0,B)),h[l+504>>2]=y(_n(B,y(En(l,0,m))));break}h[Mr>>2]=y(ce),h[or>>2]=y(ce),n[Xt>>2]=0,n[Sr>>2]=0,Xe=y(ln(l,2,m)),Ue=y(ln(l,0,m)),Lt?(Me=y(Xe+y(Gr(n[l+992>>2]|0,m))),h[Mr>>2]=Me,n[Xt>>2]=1,Ge=1):(Ge=0,Me=y(ce)),Nr?(j=y(Ue+y(Gr(n[l+996>>2]|0,B))),h[or>>2]=j,n[Sr>>2]=1,O=1):(O=0,j=y(ce)),se=n[s+32>>2]|0,je&(se|0)==2?se=2:_t(Me)|0&&!(_t(c)|0)&&(h[Mr>>2]=c,n[Xt>>2]=2,Ge=2,Me=c),!((se|0)==2<)&&_t(j)|0&&!(_t(d)|0)&&(h[or>>2]=d,n[Sr>>2]=2,O=2,j=d),Qe=y(h[l+396>>2]),et=_t(Qe)|0;do if(et)se=Ge;else{if((Ge|0)==1<){h[or>>2]=y(y(Me-Xe)/Qe),n[Sr>>2]=1,O=1,se=1;break}je&(O|0)==1?(h[Mr>>2]=y(Qe*y(j-Ue)),n[Xt>>2]=1,O=1,se=1):se=Ge}while(0);go=_t(c)|0,Ge=(ha(s,l)|0)!=4,!(je|Lt|((f|0)!=1|go)|(Ge|(se|0)==1))&&(h[Mr>>2]=c,n[Xt>>2]=1,!et)&&(h[or>>2]=y(y(c-Xe)/Qe),n[Sr>>2]=1,O=1),!(Nr|lt|((k|0)!=1|(_t(d)|0))|(Ge|(O|0)==1))&&(h[or>>2]=d,n[Sr>>2]=1,!et)&&(h[Mr>>2]=y(Qe*y(d-Ue)),n[Xt>>2]=1),yr(l,2,m,m,Xt,Mr),yr(l,0,B,m,Sr,or),c=y(h[Mr>>2]),d=y(h[or>>2]),fa(l,c,d,Q,n[Xt>>2]|0,n[Sr>>2]|0,m,B,0,3565,M)|0,B=y(h[l+908+(n[976+(ir<<2)>>2]<<2)>>2]),h[l+504>>2]=y(_n(B,y(En(l,ir,m))))}while(0);n[l+500>>2]=n[2278],C=xn}function Bi(s,l,c,f,d){return s=s|0,l=l|0,c=y(c),f=y(f),d=y(d),f=y(MA(s,l,c,f)),y(_n(f,y(En(s,l,d))))}function ha(s,l){return s=s|0,l=l|0,l=l+20|0,l=n[((n[l>>2]|0)==0?s+16|0:l)>>2]|0,(l|0)==5&&UA(n[s+4>>2]|0)|0&&(l=1),l|0}function vl(s,l){return s=s|0,l=l|0,pe(l)|0&&(n[s+96>>2]|0)!=0?l=4:l=n[1040+(l<<2)>>2]|0,s+60+(l<<3)|0}function Sc(s,l){return s=s|0,l=l|0,pe(l)|0&&(n[s+104>>2]|0)!=0?l=5:l=n[1e3+(l<<2)>>2]|0,s+60+(l<<3)|0}function yr(s,l,c,f,d,m){switch(s=s|0,l=l|0,c=y(c),f=y(f),d=d|0,m=m|0,c=y(Gr(s+380+(n[976+(l<<2)>>2]<<3)|0,c)),c=y(c+y(ln(s,l,f))),n[d>>2]|0){case 2:case 1:{d=_t(c)|0,f=y(h[m>>2]),h[m>>2]=d|f>2]=2,h[m>>2]=c);break}default:}}function gi(s,l){return s=s|0,l=l|0,s=s+132|0,pe(l)|0&&(n[(Fn(s,4,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Or(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,pe(l)|0&&(f=Fn(s,4,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1040+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function ns(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),f=y(f+y(K(s,l,c))),y(f+y(re(s,l,c)))}function Yi(s){s=s|0;var l=0,c=0,f=0;e:do if(UA(n[s+4>>2]|0)|0)l=0;else if((n[s+16>>2]|0)!=5)if(c=wi(s)|0,!c)l=0;else for(l=0;;){if(f=gs(s,l)|0,(n[f+24>>2]|0)==0&&(n[f+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=c>>>0){l=0;break}}else l=1;while(0);return l|0}function Lm(s,l){s=s|0,l=l|0;var c=Ze;return c=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),c>=y(0)&((_t(c)|0)^1)|0}function Ya(s){s=s|0;var l=Ze,c=0,f=0,d=0,m=0,B=0,k=0,Q=Ze;if(c=n[s+968>>2]|0,c)Q=y(h[s+908>>2]),l=y(h[s+912>>2]),l=y(w7[c&0](s,Q,l)),Un(s,(_t(l)|0)^1,3573);else{m=wi(s)|0;do if(m|0){for(c=0,d=0;;){if(f=gs(s,d)|0,n[f+940>>2]|0){B=8;break}if((n[f+24>>2]|0)!=1)if(k=(ha(s,f)|0)==5,k){c=f;break}else c=(c|0)==0?f:c;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!c)break;return l=y(Ya(c)),y(l+y(h[c+404>>2]))}while(0);l=y(h[s+912>>2])}return y(l)}function MA(s,l,c,f){s=s|0,l=l|0,c=y(c),f=y(f);var d=Ze,m=0;return UA(l)|0?(l=1,m=3):pe(l)|0?(l=0,m=3):(f=y(ce),d=y(ce)),(m|0)==3&&(d=y(Gr(s+364+(l<<3)|0,f)),f=y(Gr(s+380+(l<<3)|0,f))),m=f=y(0)&((_t(f)|0)^1)),c=m?f:c,m=d>=y(0)&((_t(d)|0)^1)&c>2]|0,m)|0,Me=ww(et,m)|0,Qe=pe(et)|0,j=y(ln(l,2,c)),se=y(ln(l,0,c)),ts(l,2,c)|0?k=y(j+y(Gr(n[l+992>>2]|0,c))):gi(l,2)|0&&sr(l,2)|0?(k=y(h[s+908>>2]),Q=y(Cr(s,2)),Q=y(k-y(Q+y(yn(s,2)))),k=y(Or(l,2,c)),k=y(Bi(l,2,y(Q-y(k+y(vu(l,2,c)))),c,c))):k=y(ce),ts(l,0,d)|0?Q=y(se+y(Gr(n[l+996>>2]|0,d))):gi(l,0)|0&&sr(l,0)|0?(Q=y(h[s+912>>2]),lt=y(Cr(s,0)),lt=y(Q-y(lt+y(yn(s,0)))),Q=y(Or(l,0,d)),Q=y(Bi(l,0,y(lt-y(Q+y(vu(l,0,d)))),d,c))):Q=y(ce),M=_t(k)|0,O=_t(Q)|0;do if(M^O&&(Ge=y(h[l+396>>2]),!(_t(Ge)|0)))if(M){k=y(j+y(y(Q-se)*Ge));break}else{lt=y(se+y(y(k-j)/Ge)),Q=O?lt:Q;break}while(0);O=_t(k)|0,M=_t(Q)|0,O|M&&(Ue=(O^1)&1,f=c>y(0)&((f|0)!=0&O),k=Qe?k:f?c:k,fa(l,k,Q,m,Qe?Ue:f?2:Ue,O&(M^1)&1,k,Q,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(ln(l,2,c))),Q=y(h[l+912>>2]),Q=y(Q+y(ln(l,0,c)))),fa(l,k,Q,m,1,1,k,Q,1,3635,B)|0,sr(l,et)|0&&!(gi(l,et)|0)?(Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),lt=y(lt-y(yn(s,et))),lt=y(lt-y(re(l,et,c))),lt=y(lt-y(vu(l,et,Qe?c:d))),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt):Xe=21;do if((Xe|0)==21){if(!(gi(l,et)|0)&&(n[s+8>>2]|0)==1){Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(y(lt-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt;break}!(gi(l,et)|0)&&(n[s+8>>2]|0)==2&&(Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt)}while(0);sr(l,Me)|0&&!(gi(l,Me)|0)?(Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),lt=y(lt-y(yn(s,Me))),lt=y(lt-y(re(l,Me,c))),lt=y(lt-y(vu(l,Me,Qe?d:c))),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt):Xe=30;do if((Xe|0)==30&&!(gi(l,Me)|0)){if((ha(s,l)|0)==2){Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(y(lt-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt;break}Ue=(ha(s,l)|0)==3,Ue^(n[s+28>>2]|0)==2&&(Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt)}while(0)}function wp(s,l,c){s=s|0,l=l|0,c=c|0;var f=Ze,d=0;d=n[976+(c<<2)>>2]|0,f=y(h[l+908+(d<<2)>>2]),f=y(y(h[s+908+(d<<2)>>2])-f),f=y(f-y(h[l+400+(n[1040+(c<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(c<<2)>>2]<<2)>>2]=f}function UA(s){return s=s|0,(s|1|0)==1|0}function Bw(s){s=s|0;var l=Ze;switch(n[s+56>>2]|0){case 0:case 3:{l=y(h[s+40>>2]),l>y(0)&((_t(l)|0)^1)?s=o[(n[s+976>>2]|0)+2>>0]|0?1056:992:s=1056;break}default:s=s+52|0}return s|0}function vw(s,l){return s=s|0,l=l|0,(o[s+l>>0]|0)!=0|0}function sr(s,l){return s=s|0,l=l|0,s=s+132|0,pe(l)|0&&(n[(Fn(s,5,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function vu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,pe(l)|0&&(f=Fn(s,5,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1e3+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function Mm(s,l,c){return s=s|0,l=l|0,c=y(c),gi(s,l)|0?c=y(Or(s,l,c)):c=y(-y(vu(s,l,c))),y(c)}function Du(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function Ip(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function Bg(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _A(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function HA(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;if(B=s+4|0,k=n[B>>2]|0,d=k-f|0,m=d>>2,s=l+(m<<2)|0,s>>>0>>0){f=k;do n[f>>2]=n[s>>2],s=s+4|0,f=(n[B>>2]|0)+4|0,n[B>>2]=f;while(s>>>0>>0)}m|0&&Mw(k+(0-m<<2)|0,l|0,d|0)|0}function vg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return k=l+4|0,Q=n[k>>2]|0,d=n[s>>2]|0,B=c,m=B-d|0,f=Q+(0-(m>>2)<<2)|0,n[k>>2]=f,(m|0)>0&&Dr(f|0,d|0,m|0)|0,d=s+4|0,m=l+8|0,f=(n[d>>2]|0)-B|0,(f|0)>0&&(Dr(n[m>>2]|0,c|0,f|0)|0,n[m>>2]=(n[m>>2]|0)+(f>>>2<<2)),B=n[s>>2]|0,n[s>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=s+8|0,c=l+12|0,s=n[B>>2]|0,n[B>>2]=n[c>>2],n[c>>2]=s,n[l>>2]=n[k>>2],Q|0}function Dw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[c>>2]|0,(B|0)!=(m|0)){d=s+8|0,c=((m+-4-B|0)>>>2)+1|0,s=B,f=n[d>>2]|0;do n[f>>2]=n[s>>2],f=(n[d>>2]|0)+4|0,n[d>>2]=f,s=s+4|0;while((s|0)!=(m|0));n[l>>2]=B+(c<<2)}}function Um(){dc()}function ga(){var s=0;return s=Kt(4)|0,qA(s),s|0}function qA(s){s=s|0,n[s>>2]=ys()|0}function Pc(s){s=s|0,s|0&&(Dg(s),gt(s))}function Dg(s){s=s|0,tt(n[s>>2]|0)}function _m(s,l,c){s=s|0,l=l|0,c=c|0,Ga(n[s>>2]|0,l,c)}function fo(s,l){s=s|0,l=y(l),pa(n[s>>2]|0,l)}function Wv(s,l){return s=s|0,l=l|0,vw(n[s>>2]|0,l)|0}function Sw(){var s=0;return s=Kt(8)|0,Kv(s,0),s|0}function Kv(s,l){s=s|0,l=l|0,l?l=Ci(n[l>>2]|0)|0:l=co()|0,n[s>>2]=l,n[s+4>>2]=0,bi(l,s)}function AF(s){s=s|0;var l=0;return l=Kt(8)|0,Kv(l,s),l|0}function Vv(s){s=s|0,s|0&&(Su(s),gt(s))}function Su(s){s=s|0;var l=0;la(n[s>>2]|0),l=s+4|0,s=n[l>>2]|0,n[l>>2]=0,s|0&&(jA(s),gt(s))}function jA(s){s=s|0,GA(s)}function GA(s){s=s|0,s=n[s>>2]|0,s|0&&PA(s|0)}function Pw(s){return s=s|0,qo(s)|0}function Hm(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),_s(n[s>>2]|0)}function fF(s,l){s=s|0,l=l|0,$r(n[s>>2]|0,n[l>>2]|0)}function pF(s,l){s=s|0,l=l|0,ca(n[s>>2]|0,l)}function Jv(s,l,c){s=s|0,l=l|0,c=+c,yu(n[s>>2]|0,l,y(c))}function zv(s,l,c){s=s|0,l=l|0,c=+c,Es(n[s>>2]|0,l,y(c))}function bw(s,l){s=s|0,l=l|0,gu(n[s>>2]|0,l)}function Pu(s,l){s=s|0,l=l|0,du(n[s>>2]|0,l)}function hF(s,l){s=s|0,l=l|0,FA(n[s>>2]|0,l)}function gF(s,l){s=s|0,l=l|0,kA(n[s>>2]|0,l)}function Bp(s,l){s=s|0,l=l|0,yc(n[s>>2]|0,l)}function dF(s,l){s=s|0,l=l|0,Ap(n[s>>2]|0,l)}function Xv(s,l,c){s=s|0,l=l|0,c=+c,Cc(n[s>>2]|0,l,y(c))}function YA(s,l,c){s=s|0,l=l|0,c=+c,G(n[s>>2]|0,l,y(c))}function mF(s,l){s=s|0,l=l|0,wl(n[s>>2]|0,l)}function yF(s,l){s=s|0,l=l|0,ag(n[s>>2]|0,l)}function Zv(s,l){s=s|0,l=l|0,fp(n[s>>2]|0,l)}function xw(s,l){s=s|0,l=+l,RA(n[s>>2]|0,y(l))}function kw(s,l){s=s|0,l=+l,Ha(n[s>>2]|0,y(l))}function EF(s,l){s=s|0,l=+l,Gi(n[s>>2]|0,y(l))}function CF(s,l){s=s|0,l=+l,Hs(n[s>>2]|0,y(l))}function Dl(s,l){s=s|0,l=+l,mu(n[s>>2]|0,y(l))}function Qw(s,l){s=s|0,l=+l,yw(n[s>>2]|0,y(l))}function wF(s,l){s=s|0,l=+l,TA(n[s>>2]|0,y(l))}function WA(s){s=s|0,pp(n[s>>2]|0)}function qm(s,l){s=s|0,l=+l,Cs(n[s>>2]|0,y(l))}function bu(s,l){s=s|0,l=+l,ug(n[s>>2]|0,y(l))}function Fw(s){s=s|0,Ag(n[s>>2]|0)}function Rw(s,l){s=s|0,l=+l,hp(n[s>>2]|0,y(l))}function IF(s,l){s=s|0,l=+l,Ic(n[s>>2]|0,y(l))}function $v(s,l){s=s|0,l=+l,bm(n[s>>2]|0,y(l))}function KA(s,l){s=s|0,l=+l,pg(n[s>>2]|0,y(l))}function eD(s,l){s=s|0,l=+l,Cu(n[s>>2]|0,y(l))}function jm(s,l){s=s|0,l=+l,xm(n[s>>2]|0,y(l))}function tD(s,l){s=s|0,l=+l,wu(n[s>>2]|0,y(l))}function rD(s,l){s=s|0,l=+l,Ew(n[s>>2]|0,y(l))}function Gm(s,l){s=s|0,l=+l,Aa(n[s>>2]|0,y(l))}function nD(s,l,c){s=s|0,l=l|0,c=+c,Eu(n[s>>2]|0,l,y(c))}function BF(s,l,c){s=s|0,l=l|0,c=+c,xi(n[s>>2]|0,l,y(c))}function S(s,l,c){s=s|0,l=l|0,c=+c,wc(n[s>>2]|0,l,y(c))}function D(s){return s=s|0,og(n[s>>2]|0)|0}function T(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Ec(d,n[l>>2]|0,c),q(s,d),C=f}function q(s,l){s=s|0,l=l|0,Y(s,n[l+4>>2]|0,+y(h[l>>2]))}function Y(s,l,c){s=s|0,l=l|0,c=+c,n[s>>2]=l,E[s+8>>3]=c}function Ae(s){return s=s|0,sg(n[s>>2]|0)|0}function De(s){return s=s|0,uo(n[s>>2]|0)|0}function vt(s){return s=s|0,mc(n[s>>2]|0)|0}function wt(s){return s=s|0,QA(n[s>>2]|0)|0}function xt(s){return s=s|0,Pm(n[s>>2]|0)|0}function _r(s){return s=s|0,ig(n[s>>2]|0)|0}function is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Dt(d,n[l>>2]|0,c),q(s,d),C=f}function di(s){return s=s|0,$n(n[s>>2]|0)|0}function po(s){return s=s|0,lg(n[s>>2]|0)|0}function VA(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,ua(f,n[l>>2]|0),q(s,f),C=c}function Yo(s){return s=s|0,+ +y(ji(n[s>>2]|0))}function rt(s){return s=s|0,+ +y(es(n[s>>2]|0))}function Ve(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Br(f,n[l>>2]|0),q(s,f),C=c}function ft(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,fg(f,n[l>>2]|0),q(s,f),C=c}function Wt(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ct(f,n[l>>2]|0),q(s,f),C=c}function vr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,hg(f,n[l>>2]|0),q(s,f),C=c}function Pn(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,gg(f,n[l>>2]|0),q(s,f),C=c}function Fr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,km(f,n[l>>2]|0),q(s,f),C=c}function bn(s){return s=s|0,+ +y(Bc(n[s>>2]|0))}function ai(s,l){return s=s|0,l=l|0,+ +y(cg(n[s>>2]|0,l))}function tn(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,ct(d,n[l>>2]|0,c),q(s,d),C=f}function ho(s,l,c){s=s|0,l=l|0,c=c|0,nr(n[s>>2]|0,n[l>>2]|0,c)}function vF(s,l){s=s|0,l=l|0,ms(n[s>>2]|0,n[l>>2]|0)}function eve(s){return s=s|0,wi(n[s>>2]|0)|0}function tve(s){return s=s|0,s=ht(n[s>>2]|0)|0,s?s=Pw(s)|0:s=0,s|0}function rve(s,l){return s=s|0,l=l|0,s=gs(n[s>>2]|0,l)|0,s?s=Pw(s)|0:s=0,s|0}function nve(s,l){s=s|0,l=l|0;var c=0,f=0;f=Kt(4)|0,zG(f,l),c=s+4|0,l=n[c>>2]|0,n[c>>2]=f,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,1)}function zG(s,l){s=s|0,l=l|0,gve(s,l)}function ive(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,sve(k,qo(l)|0,+c,f,+d,m),h[s>>2]=y(+E[k>>3]),h[s+4>>2]=y(+E[k+8>>3]),C=B}function sve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0,k=0,Q=0,M=0,O=0;B=C,C=C+32|0,O=B+8|0,M=B+20|0,Q=B,k=B+16|0,E[O>>3]=c,n[M>>2]=f,E[Q>>3]=d,n[k>>2]=m,ove(s,n[l+4>>2]|0,O,M,Q,k),C=B}function ove(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,Ka(k),l=da(l)|0,ave(s,l,+E[c>>3],n[f>>2]|0,+E[d>>3],n[m>>2]|0),Va(k),C=B}function da(s){return s=s|0,n[s>>2]|0}function ave(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0;B=Sl(lve()|0)|0,c=+JA(c),f=DF(f)|0,d=+JA(d),cve(s,hi(0,B|0,l|0,+c,f|0,+d,DF(m)|0)|0)}function lve(){var s=0;return o[7608]|0||(pve(9120),s=7608,n[s>>2]=1,n[s+4>>2]=0),9120}function Sl(s){return s=s|0,n[s+8>>2]|0}function JA(s){return s=+s,+ +SF(s)}function DF(s){return s=s|0,ZG(s)|0}function cve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=l,f&1?(uve(c,0),ii(f|0,c|0)|0,Ave(s,c),fve(c)):(n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]),C=d}function uve(s,l){s=s|0,l=l|0,XG(s,l),n[s+8>>2]=0,o[s+24>>0]=0}function Ave(s,l){s=s|0,l=l|0,l=l+8|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]}function fve(s){s=s|0,o[s+24>>0]=0}function XG(s,l){s=s|0,l=l|0,n[s>>2]=l}function ZG(s){return s=s|0,s|0}function SF(s){return s=+s,+s}function pve(s){s=s|0,Pl(s,hve()|0,4)}function hve(){return 1064}function Pl(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=up(l|0,c+1|0)|0}function gve(s,l){s=s|0,l=l|0,l=n[l>>2]|0,n[s>>2]=l,yl(l|0)}function dve(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,0)}function mve(s){s=s|0,Tt(n[s>>2]|0)}function yve(s){return s=s|0,er(n[s>>2]|0)|0}function Eve(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,vc(n[s>>2]|0,y(l),y(c),f)}function Cve(s){return s=s|0,+ +y(Il(n[s>>2]|0))}function wve(s){return s=s|0,+ +y(dg(n[s>>2]|0))}function Ive(s){return s=s|0,+ +y(Iu(n[s>>2]|0))}function Bve(s){return s=s|0,+ +y(NA(n[s>>2]|0))}function vve(s){return s=s|0,+ +y(gp(n[s>>2]|0))}function Dve(s){return s=s|0,+ +y(qa(n[s>>2]|0))}function Sve(s,l){s=s|0,l=l|0,E[s>>3]=+y(Il(n[l>>2]|0)),E[s+8>>3]=+y(dg(n[l>>2]|0)),E[s+16>>3]=+y(Iu(n[l>>2]|0)),E[s+24>>3]=+y(NA(n[l>>2]|0)),E[s+32>>3]=+y(gp(n[l>>2]|0)),E[s+40>>3]=+y(qa(n[l>>2]|0))}function Pve(s,l){return s=s|0,l=l|0,+ +y(mg(n[s>>2]|0,l))}function bve(s,l){return s=s|0,l=l|0,+ +y(dp(n[s>>2]|0,l))}function xve(s,l){return s=s|0,l=l|0,+ +y(jo(n[s>>2]|0,l))}function kve(){return Sn()|0}function Qve(){Fve(),Rve(),Tve(),Nve(),Lve(),Ove()}function Fve(){LNe(11713,4938,1)}function Rve(){tNe(10448)}function Tve(){LTe(10408)}function Nve(){sTe(10324)}function Lve(){pFe(10096)}function Ove(){Mve(9132)}function Mve(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,je=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0,xn=0,go=0,mo=0,yo=0,ya=0,Fp=0,Rp=0,bl=0,Tp=0,Fu=0,Ru=0,Np=0,Lp=0,Op=0,Xr=0,xl=0,Mp=0,xc=0,Up=0,_p=0,Tu=0,Nu=0,kc=0,js=0,za=0,Wo=0,kl=0,nf=0,sf=0,Lu=0,of=0,af=0,Gs=0,vs=0,Ql=0,Rn=0,lf=0,Eo=0,Qc=0,Co=0,Fc=0,cf=0,uf=0,Rc=0,Ys=0,Fl=0,Af=0,ff=0,pf=0,xr=0,Jn=0,Ds=0,wo=0,Ws=0,Rr=0,ur=0,Rl=0;l=C,C=C+672|0,c=l+656|0,Rl=l+648|0,ur=l+640|0,Rr=l+632|0,Ws=l+624|0,wo=l+616|0,Ds=l+608|0,Jn=l+600|0,xr=l+592|0,pf=l+584|0,ff=l+576|0,Af=l+568|0,Fl=l+560|0,Ys=l+552|0,Rc=l+544|0,uf=l+536|0,cf=l+528|0,Fc=l+520|0,Co=l+512|0,Qc=l+504|0,Eo=l+496|0,lf=l+488|0,Rn=l+480|0,Ql=l+472|0,vs=l+464|0,Gs=l+456|0,af=l+448|0,of=l+440|0,Lu=l+432|0,sf=l+424|0,nf=l+416|0,kl=l+408|0,Wo=l+400|0,za=l+392|0,js=l+384|0,kc=l+376|0,Nu=l+368|0,Tu=l+360|0,_p=l+352|0,Up=l+344|0,xc=l+336|0,Mp=l+328|0,xl=l+320|0,Xr=l+312|0,Op=l+304|0,Lp=l+296|0,Np=l+288|0,Ru=l+280|0,Fu=l+272|0,Tp=l+264|0,bl=l+256|0,Rp=l+248|0,Fp=l+240|0,ya=l+232|0,yo=l+224|0,mo=l+216|0,go=l+208|0,xn=l+200|0,ir=l+192|0,Nr=l+184|0,Sr=l+176|0,Xt=l+168|0,or=l+160|0,Mr=l+152|0,Lt=l+144|0,je=l+136|0,Ue=l+128|0,lt=l+120|0,Xe=l+112|0,et=l+104|0,Qe=l+96|0,Me=l+88|0,Ge=l+80|0,se=l+72|0,j=l+64|0,O=l+56|0,M=l+48|0,Q=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,f=l,Uve(s,3646),_ve(s,3651,2)|0,Hve(s,3665,2)|0,qve(s,3682,18)|0,n[Rl>>2]=19,n[Rl+4>>2]=0,n[c>>2]=n[Rl>>2],n[c+4>>2]=n[Rl+4>>2],Tw(s,3690,c)|0,n[ur>>2]=1,n[ur+4>>2]=0,n[c>>2]=n[ur>>2],n[c+4>>2]=n[ur+4>>2],jve(s,3696,c)|0,n[Rr>>2]=2,n[Rr+4>>2]=0,n[c>>2]=n[Rr>>2],n[c+4>>2]=n[Rr+4>>2],xu(s,3706,c)|0,n[Ws>>2]=1,n[Ws+4>>2]=0,n[c>>2]=n[Ws>>2],n[c+4>>2]=n[Ws+4>>2],Sg(s,3722,c)|0,n[wo>>2]=2,n[wo+4>>2]=0,n[c>>2]=n[wo>>2],n[c+4>>2]=n[wo+4>>2],Sg(s,3734,c)|0,n[Ds>>2]=3,n[Ds+4>>2]=0,n[c>>2]=n[Ds>>2],n[c+4>>2]=n[Ds+4>>2],xu(s,3753,c)|0,n[Jn>>2]=4,n[Jn+4>>2]=0,n[c>>2]=n[Jn>>2],n[c+4>>2]=n[Jn+4>>2],xu(s,3769,c)|0,n[xr>>2]=5,n[xr+4>>2]=0,n[c>>2]=n[xr>>2],n[c+4>>2]=n[xr+4>>2],xu(s,3783,c)|0,n[pf>>2]=6,n[pf+4>>2]=0,n[c>>2]=n[pf>>2],n[c+4>>2]=n[pf+4>>2],xu(s,3796,c)|0,n[ff>>2]=7,n[ff+4>>2]=0,n[c>>2]=n[ff>>2],n[c+4>>2]=n[ff+4>>2],xu(s,3813,c)|0,n[Af>>2]=8,n[Af+4>>2]=0,n[c>>2]=n[Af>>2],n[c+4>>2]=n[Af+4>>2],xu(s,3825,c)|0,n[Fl>>2]=3,n[Fl+4>>2]=0,n[c>>2]=n[Fl>>2],n[c+4>>2]=n[Fl+4>>2],Sg(s,3843,c)|0,n[Ys>>2]=4,n[Ys+4>>2]=0,n[c>>2]=n[Ys>>2],n[c+4>>2]=n[Ys+4>>2],Sg(s,3853,c)|0,n[Rc>>2]=9,n[Rc+4>>2]=0,n[c>>2]=n[Rc>>2],n[c+4>>2]=n[Rc+4>>2],xu(s,3870,c)|0,n[uf>>2]=10,n[uf+4>>2]=0,n[c>>2]=n[uf>>2],n[c+4>>2]=n[uf+4>>2],xu(s,3884,c)|0,n[cf>>2]=11,n[cf+4>>2]=0,n[c>>2]=n[cf>>2],n[c+4>>2]=n[cf+4>>2],xu(s,3896,c)|0,n[Fc>>2]=1,n[Fc+4>>2]=0,n[c>>2]=n[Fc>>2],n[c+4>>2]=n[Fc+4>>2],Is(s,3907,c)|0,n[Co>>2]=2,n[Co+4>>2]=0,n[c>>2]=n[Co>>2],n[c+4>>2]=n[Co+4>>2],Is(s,3915,c)|0,n[Qc>>2]=3,n[Qc+4>>2]=0,n[c>>2]=n[Qc>>2],n[c+4>>2]=n[Qc+4>>2],Is(s,3928,c)|0,n[Eo>>2]=4,n[Eo+4>>2]=0,n[c>>2]=n[Eo>>2],n[c+4>>2]=n[Eo+4>>2],Is(s,3948,c)|0,n[lf>>2]=5,n[lf+4>>2]=0,n[c>>2]=n[lf>>2],n[c+4>>2]=n[lf+4>>2],Is(s,3960,c)|0,n[Rn>>2]=6,n[Rn+4>>2]=0,n[c>>2]=n[Rn>>2],n[c+4>>2]=n[Rn+4>>2],Is(s,3974,c)|0,n[Ql>>2]=7,n[Ql+4>>2]=0,n[c>>2]=n[Ql>>2],n[c+4>>2]=n[Ql+4>>2],Is(s,3983,c)|0,n[vs>>2]=20,n[vs+4>>2]=0,n[c>>2]=n[vs>>2],n[c+4>>2]=n[vs+4>>2],Tw(s,3999,c)|0,n[Gs>>2]=8,n[Gs+4>>2]=0,n[c>>2]=n[Gs>>2],n[c+4>>2]=n[Gs+4>>2],Is(s,4012,c)|0,n[af>>2]=9,n[af+4>>2]=0,n[c>>2]=n[af>>2],n[c+4>>2]=n[af+4>>2],Is(s,4022,c)|0,n[of>>2]=21,n[of+4>>2]=0,n[c>>2]=n[of>>2],n[c+4>>2]=n[of+4>>2],Tw(s,4039,c)|0,n[Lu>>2]=10,n[Lu+4>>2]=0,n[c>>2]=n[Lu>>2],n[c+4>>2]=n[Lu+4>>2],Is(s,4053,c)|0,n[sf>>2]=11,n[sf+4>>2]=0,n[c>>2]=n[sf>>2],n[c+4>>2]=n[sf+4>>2],Is(s,4065,c)|0,n[nf>>2]=12,n[nf+4>>2]=0,n[c>>2]=n[nf>>2],n[c+4>>2]=n[nf+4>>2],Is(s,4084,c)|0,n[kl>>2]=13,n[kl+4>>2]=0,n[c>>2]=n[kl>>2],n[c+4>>2]=n[kl+4>>2],Is(s,4097,c)|0,n[Wo>>2]=14,n[Wo+4>>2]=0,n[c>>2]=n[Wo>>2],n[c+4>>2]=n[Wo+4>>2],Is(s,4117,c)|0,n[za>>2]=15,n[za+4>>2]=0,n[c>>2]=n[za>>2],n[c+4>>2]=n[za+4>>2],Is(s,4129,c)|0,n[js>>2]=16,n[js+4>>2]=0,n[c>>2]=n[js>>2],n[c+4>>2]=n[js+4>>2],Is(s,4148,c)|0,n[kc>>2]=17,n[kc+4>>2]=0,n[c>>2]=n[kc>>2],n[c+4>>2]=n[kc+4>>2],Is(s,4161,c)|0,n[Nu>>2]=18,n[Nu+4>>2]=0,n[c>>2]=n[Nu>>2],n[c+4>>2]=n[Nu+4>>2],Is(s,4181,c)|0,n[Tu>>2]=5,n[Tu+4>>2]=0,n[c>>2]=n[Tu>>2],n[c+4>>2]=n[Tu+4>>2],Sg(s,4196,c)|0,n[_p>>2]=6,n[_p+4>>2]=0,n[c>>2]=n[_p>>2],n[c+4>>2]=n[_p+4>>2],Sg(s,4206,c)|0,n[Up>>2]=7,n[Up+4>>2]=0,n[c>>2]=n[Up>>2],n[c+4>>2]=n[Up+4>>2],Sg(s,4217,c)|0,n[xc>>2]=3,n[xc+4>>2]=0,n[c>>2]=n[xc>>2],n[c+4>>2]=n[xc+4>>2],zA(s,4235,c)|0,n[Mp>>2]=1,n[Mp+4>>2]=0,n[c>>2]=n[Mp>>2],n[c+4>>2]=n[Mp+4>>2],PF(s,4251,c)|0,n[xl>>2]=4,n[xl+4>>2]=0,n[c>>2]=n[xl>>2],n[c+4>>2]=n[xl+4>>2],zA(s,4263,c)|0,n[Xr>>2]=5,n[Xr+4>>2]=0,n[c>>2]=n[Xr>>2],n[c+4>>2]=n[Xr+4>>2],zA(s,4279,c)|0,n[Op>>2]=6,n[Op+4>>2]=0,n[c>>2]=n[Op>>2],n[c+4>>2]=n[Op+4>>2],zA(s,4293,c)|0,n[Lp>>2]=7,n[Lp+4>>2]=0,n[c>>2]=n[Lp>>2],n[c+4>>2]=n[Lp+4>>2],zA(s,4306,c)|0,n[Np>>2]=8,n[Np+4>>2]=0,n[c>>2]=n[Np>>2],n[c+4>>2]=n[Np+4>>2],zA(s,4323,c)|0,n[Ru>>2]=9,n[Ru+4>>2]=0,n[c>>2]=n[Ru>>2],n[c+4>>2]=n[Ru+4>>2],zA(s,4335,c)|0,n[Fu>>2]=2,n[Fu+4>>2]=0,n[c>>2]=n[Fu>>2],n[c+4>>2]=n[Fu+4>>2],PF(s,4353,c)|0,n[Tp>>2]=12,n[Tp+4>>2]=0,n[c>>2]=n[Tp>>2],n[c+4>>2]=n[Tp+4>>2],Pg(s,4363,c)|0,n[bl>>2]=1,n[bl+4>>2]=0,n[c>>2]=n[bl>>2],n[c+4>>2]=n[bl+4>>2],XA(s,4376,c)|0,n[Rp>>2]=2,n[Rp+4>>2]=0,n[c>>2]=n[Rp>>2],n[c+4>>2]=n[Rp+4>>2],XA(s,4388,c)|0,n[Fp>>2]=13,n[Fp+4>>2]=0,n[c>>2]=n[Fp>>2],n[c+4>>2]=n[Fp+4>>2],Pg(s,4402,c)|0,n[ya>>2]=14,n[ya+4>>2]=0,n[c>>2]=n[ya>>2],n[c+4>>2]=n[ya+4>>2],Pg(s,4411,c)|0,n[yo>>2]=15,n[yo+4>>2]=0,n[c>>2]=n[yo>>2],n[c+4>>2]=n[yo+4>>2],Pg(s,4421,c)|0,n[mo>>2]=16,n[mo+4>>2]=0,n[c>>2]=n[mo>>2],n[c+4>>2]=n[mo+4>>2],Pg(s,4433,c)|0,n[go>>2]=17,n[go+4>>2]=0,n[c>>2]=n[go>>2],n[c+4>>2]=n[go+4>>2],Pg(s,4446,c)|0,n[xn>>2]=18,n[xn+4>>2]=0,n[c>>2]=n[xn>>2],n[c+4>>2]=n[xn+4>>2],Pg(s,4458,c)|0,n[ir>>2]=3,n[ir+4>>2]=0,n[c>>2]=n[ir>>2],n[c+4>>2]=n[ir+4>>2],XA(s,4471,c)|0,n[Nr>>2]=1,n[Nr+4>>2]=0,n[c>>2]=n[Nr>>2],n[c+4>>2]=n[Nr+4>>2],iD(s,4486,c)|0,n[Sr>>2]=10,n[Sr+4>>2]=0,n[c>>2]=n[Sr>>2],n[c+4>>2]=n[Sr+4>>2],zA(s,4496,c)|0,n[Xt>>2]=11,n[Xt+4>>2]=0,n[c>>2]=n[Xt>>2],n[c+4>>2]=n[Xt+4>>2],zA(s,4508,c)|0,n[or>>2]=3,n[or+4>>2]=0,n[c>>2]=n[or>>2],n[c+4>>2]=n[or+4>>2],PF(s,4519,c)|0,n[Mr>>2]=4,n[Mr+4>>2]=0,n[c>>2]=n[Mr>>2],n[c+4>>2]=n[Mr+4>>2],Gve(s,4530,c)|0,n[Lt>>2]=19,n[Lt+4>>2]=0,n[c>>2]=n[Lt>>2],n[c+4>>2]=n[Lt+4>>2],Yve(s,4542,c)|0,n[je>>2]=12,n[je+4>>2]=0,n[c>>2]=n[je>>2],n[c+4>>2]=n[je+4>>2],Wve(s,4554,c)|0,n[Ue>>2]=13,n[Ue+4>>2]=0,n[c>>2]=n[Ue>>2],n[c+4>>2]=n[Ue+4>>2],Kve(s,4568,c)|0,n[lt>>2]=2,n[lt+4>>2]=0,n[c>>2]=n[lt>>2],n[c+4>>2]=n[lt+4>>2],Vve(s,4578,c)|0,n[Xe>>2]=20,n[Xe+4>>2]=0,n[c>>2]=n[Xe>>2],n[c+4>>2]=n[Xe+4>>2],Jve(s,4587,c)|0,n[et>>2]=22,n[et+4>>2]=0,n[c>>2]=n[et>>2],n[c+4>>2]=n[et+4>>2],Tw(s,4602,c)|0,n[Qe>>2]=23,n[Qe+4>>2]=0,n[c>>2]=n[Qe>>2],n[c+4>>2]=n[Qe+4>>2],Tw(s,4619,c)|0,n[Me>>2]=14,n[Me+4>>2]=0,n[c>>2]=n[Me>>2],n[c+4>>2]=n[Me+4>>2],zve(s,4629,c)|0,n[Ge>>2]=1,n[Ge+4>>2]=0,n[c>>2]=n[Ge>>2],n[c+4>>2]=n[Ge+4>>2],Xve(s,4637,c)|0,n[se>>2]=4,n[se+4>>2]=0,n[c>>2]=n[se>>2],n[c+4>>2]=n[se+4>>2],XA(s,4653,c)|0,n[j>>2]=5,n[j+4>>2]=0,n[c>>2]=n[j>>2],n[c+4>>2]=n[j+4>>2],XA(s,4669,c)|0,n[O>>2]=6,n[O+4>>2]=0,n[c>>2]=n[O>>2],n[c+4>>2]=n[O+4>>2],XA(s,4686,c)|0,n[M>>2]=7,n[M+4>>2]=0,n[c>>2]=n[M>>2],n[c+4>>2]=n[M+4>>2],XA(s,4701,c)|0,n[Q>>2]=8,n[Q+4>>2]=0,n[c>>2]=n[Q>>2],n[c+4>>2]=n[Q+4>>2],XA(s,4719,c)|0,n[k>>2]=9,n[k+4>>2]=0,n[c>>2]=n[k>>2],n[c+4>>2]=n[k+4>>2],XA(s,4736,c)|0,n[B>>2]=21,n[B+4>>2]=0,n[c>>2]=n[B>>2],n[c+4>>2]=n[B+4>>2],Zve(s,4754,c)|0,n[m>>2]=2,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],iD(s,4772,c)|0,n[d>>2]=3,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],iD(s,4790,c)|0,n[f>>2]=4,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],iD(s,4808,c)|0,C=l}function Uve(s,l){s=s|0,l=l|0;var c=0;c=iFe()|0,n[s>>2]=c,sFe(c,l),xp(n[s>>2]|0)}function _ve(s,l,c){return s=s|0,l=l|0,c=c|0,GQe(s,pn(l)|0,c,0),s|0}function Hve(s,l,c){return s=s|0,l=l|0,c=c|0,bQe(s,pn(l)|0,c,0),s|0}function qve(s,l,c){return s=s|0,l=l|0,c=c|0,hQe(s,pn(l)|0,c,0),s|0}function Tw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Zke(s,l,d),C=f,s|0}function jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Rke(s,l,d),C=f,s|0}function xu(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],mke(s,l,d),C=f,s|0}function Sg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tke(s,l,d),C=f,s|0}function Is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uxe(s,l,d),C=f,s|0}function zA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bxe(s,l,d),C=f,s|0}function PF(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],axe(s,l,d),C=f,s|0}function Pg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Rbe(s,l,d),C=f,s|0}function XA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],mbe(s,l,d),C=f,s|0}function iD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tbe(s,l,d),C=f,s|0}function Gve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],UPe(s,l,d),C=f,s|0}function Yve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],BPe(s,l,d),C=f,s|0}function Wve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],lPe(s,l,d),C=f,s|0}function Kve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],KSe(s,l,d),C=f,s|0}function Vve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],kSe(s,l,d),C=f,s|0}function Jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pSe(s,l,d),C=f,s|0}function zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],XDe(s,l,d),C=f,s|0}function Xve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],RDe(s,l,d),C=f,s|0}function Zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ve(s,l,d),C=f,s|0}function $ve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],eDe(s,c,d,1),C=f}function pn(s){return s=s|0,s|0}function eDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=bF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=tDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,rDe(m,f)|0,f),C=d}function bF(){var s=0,l=0;if(o[7616]|0||(t5(9136),tr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9136)|0)){s=9136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t5(9136)}return 9136}function tDe(s){return s=s|0,0}function rDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=bF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],e5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(sDe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function hn(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0;B=C,C=C+32|0,se=B+24|0,j=B+20|0,Q=B+16|0,O=B+12|0,M=B+8|0,k=B+4|0,Ge=B,n[j>>2]=l,n[Q>>2]=c,n[O>>2]=f,n[M>>2]=d,n[k>>2]=m,m=s+28|0,n[Ge>>2]=n[m>>2],n[se>>2]=n[Ge>>2],nDe(s+24|0,se,j,O,M,Q,k)|0,n[m>>2]=n[n[m>>2]>>2],C=B}function nDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,s=iDe(l)|0,l=Kt(24)|0,$G(l+4|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[s>>2],n[s>>2]=l,l|0}function iDe(s){return s=s|0,n[s>>2]|0}function $G(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gr(s,l){return s=s|0,l=l|0,l|s|0}function e5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function sDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=oDe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,aDe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],e5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lDe(s,k),cDe(k),C=M;return}}function oDe(s){return s=s|0,357913941}function aDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function t5(s){s=s|0,fDe(s)}function uDe(s){s=s|0,ADe(s+24|0)}function Tr(s){return s=s|0,n[s>>2]|0}function ADe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fDe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,3,l,pDe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Kr(){return 9228}function pDe(){return 1140}function hDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=gDe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=dDe(l,f)|0,C=c,l|0}function Vr(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gDe(s){return s=s|0,(n[(bF()|0)+24>>2]|0)+(s*12|0)|0}function dDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+48|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),rf[c&31](f,s),f=mDe(f)|0,C=d,f|0}function mDe(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=xF(r5()|0)|0,f?(kF(l,f),QF(c,l),yDe(s,c),s=FF(l)|0):s=EDe(s)|0,C=d,s|0}function r5(){var s=0;return o[7632]|0||(xDe(9184),tr(25,9184,U|0)|0,s=7632,n[s>>2]=1,n[s+4>>2]=0),9184}function xF(s){return s=s|0,n[s+36>>2]|0}function kF(s,l){s=s|0,l=l|0,n[s>>2]=l,n[s+4>>2]=s,n[s+8>>2]=0}function QF(s,l){s=s|0,l=l|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=0}function yDe(s,l){s=s|0,l=l|0,BDe(l,s,s+8|0,s+16|0,s+24|0,s+32|0,s+40|0)|0}function FF(s){return s=s|0,n[(n[s+4>>2]|0)+8>>2]|0}function EDe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;Q=C,C=C+16|0,c=Q+4|0,f=Q,d=Wa(8)|0,m=d,B=Kt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[s>>2],k=k+4|0,s=s+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Kt(8)|0,B=n[l>>2]|0,n[f>>2]=0,n[c>>2]=n[f>>2],n5(k,B,c),n[d>>2]=k,C=Q,m|0}function n5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1092,n[c+12>>2]=l,n[s+4>>2]=c}function CDe(s){s=s|0,zm(s),gt(s)}function wDe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function IDe(s){s=s|0,gt(s)}function BDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,m=vDe(n[s>>2]|0,l,c,f,d,m,B)|0,B=s+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function vDe(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0;var k=0,Q=0;return k=C,C=C+16|0,Q=k,Ka(Q),s=da(s)|0,B=DDe(s,+E[l>>3],+E[c>>3],+E[f>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,Va(Q),C=k,B|0}function DDe(s,l,c,f,d,m,B){s=s|0,l=+l,c=+c,f=+f,d=+d,m=+m,B=+B;var k=0;return k=Sl(SDe()|0)|0,l=+JA(l),c=+JA(c),f=+JA(f),d=+JA(d),m=+JA(m),Ms(0,k|0,s|0,+l,+c,+f,+d,+m,+ +JA(B))|0}function SDe(){var s=0;return o[7624]|0||(PDe(9172),s=7624,n[s>>2]=1,n[s+4>>2]=0),9172}function PDe(s){s=s|0,Pl(s,bDe()|0,6)}function bDe(){return 1112}function xDe(s){s=s|0,vp(s)}function kDe(s){s=s|0,i5(s+24|0),s5(s+16|0)}function i5(s){s=s|0,FDe(s)}function s5(s){s=s|0,QDe(s)}function QDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function FDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function vp(s){s=s|0;var l=0;n[s+16>>2]=0,n[s+20>>2]=0,l=s+24|0,n[l>>2]=0,n[s+28>>2]=l,n[s+36>>2]=0,o[s+40>>0]=0,o[s+41>>0]=0}function RDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],TDe(s,c,d,0),C=f}function TDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=RF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=NDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,LDe(m,f)|0,f),C=d}function RF(){var s=0,l=0;if(o[7640]|0||(a5(9232),tr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9232)|0)){s=9232,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));a5(9232)}return 9232}function NDe(s){return s=s|0,0}function LDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=RF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],o5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(ODe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function o5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function ODe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=MDe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,UDe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],o5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,_De(s,k),HDe(k),C=M;return}}function MDe(s){return s=s|0,357913941}function UDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function _De(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function HDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function a5(s){s=s|0,GDe(s)}function qDe(s){s=s|0,jDe(s+24|0)}function jDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function GDe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,YDe()|0,3),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function YDe(){return 1144}function WDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,B=m+8|0,k=m,Q=KDe(s)|0,s=n[Q+4>>2]|0,n[k>>2]=n[Q>>2],n[k+4>>2]=s,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],VDe(l,B,c,f,d),C=m}function KDe(s){return s=s|0,(n[(RF()|0)+24>>2]|0)+(s*12|0)|0}function VDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0,M=0;M=C,C=C+16|0,B=M+2|0,k=M+1|0,Q=M,m=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(m=n[(n[s>>2]|0)+m>>2]|0),ku(B,c),c=+Qu(B,c),ku(k,f),f=+Qu(k,f),ZA(Q,d),Q=$A(Q,d)|0,I7[m&1](s,c,f,Q),C=M}function ku(s,l){s=s|0,l=+l}function Qu(s,l){return s=s|0,l=+l,+ +zDe(l)}function ZA(s,l){s=s|0,l=l|0}function $A(s,l){return s=s|0,l=l|0,JDe(l)|0}function JDe(s){return s=s|0,s|0}function zDe(s){return s=+s,+s}function XDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZDe(s,c,d,1),C=f}function ZDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=TF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=$De(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,eSe(m,f)|0,f),C=d}function TF(){var s=0,l=0;if(o[7648]|0||(c5(9268),tr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9268)|0)){s=9268,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c5(9268)}return 9268}function $De(s){return s=s|0,0}function eSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=TF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],l5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(tSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function l5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function tSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=rSe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,nSe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],l5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,iSe(s,k),sSe(k),C=M;return}}function rSe(s){return s=s|0,357913941}function nSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function iSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function sSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function c5(s){s=s|0,lSe(s)}function oSe(s){s=s|0,aSe(s+24|0)}function aSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function lSe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,4,l,cSe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function cSe(){return 1160}function uSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=ASe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=fSe(l,f)|0,C=c,l|0}function ASe(s){return s=s|0,(n[(TF()|0)+24>>2]|0)+(s*12|0)|0}function fSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),u5(Lg[c&31](s)|0)|0}function u5(s){return s=s|0,s&1|0}function pSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],hSe(s,c,d,0),C=f}function hSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=NF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=gSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,dSe(m,f)|0,f),C=d}function NF(){var s=0,l=0;if(o[7656]|0||(f5(9304),tr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9304)|0)){s=9304,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f5(9304)}return 9304}function gSe(s){return s=s|0,0}function dSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=NF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],A5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(mSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function A5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function mSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ySe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,ESe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],A5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,CSe(s,k),wSe(k),C=M;return}}function ySe(s){return s=s|0,357913941}function ESe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function CSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function f5(s){s=s|0,vSe(s)}function ISe(s){s=s|0,BSe(s+24|0)}function BSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function vSe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,DSe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function DSe(){return 1164}function SSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=PSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bSe(l,d,c),C=f}function PSe(s){return s=s|0,(n[(NF()|0)+24>>2]|0)+(s*12|0)|0}function bSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Dp(d,c),c=Sp(d,c)|0,rf[f&31](s,c),Pp(d),C=m}function Dp(s,l){s=s|0,l=l|0,xSe(s,l)}function Sp(s,l){return s=s|0,l=l|0,s|0}function Pp(s){s=s|0,jA(s)}function xSe(s,l){s=s|0,l=l|0,LF(s,l)}function LF(s,l){s=s|0,l=l|0,n[s>>2]=l}function kSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],QSe(s,c,d,0),C=f}function QSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=OF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=FSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,RSe(m,f)|0,f),C=d}function OF(){var s=0,l=0;if(o[7664]|0||(h5(9340),tr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9340)|0)){s=9340,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));h5(9340)}return 9340}function FSe(s){return s=s|0,0}function RSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=OF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],p5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(TSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function p5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function TSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=NSe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,LSe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],p5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,OSe(s,k),MSe(k),C=M;return}}function NSe(s){return s=s|0,357913941}function LSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function OSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function MSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function h5(s){s=s|0,HSe(s)}function USe(s){s=s|0,_Se(s+24|0)}function _Se(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function HSe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,4,l,qSe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function qSe(){return 1180}function jSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=GSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=YSe(l,d,c)|0,C=f,c|0}function GSe(s){return s=s|0,(n[(OF()|0)+24>>2]|0)+(s*12|0)|0}function YSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),bg(d,c),d=xg(d,c)|0,d=sD(RR[f&15](s,d)|0)|0,C=m,d|0}function bg(s,l){s=s|0,l=l|0}function xg(s,l){return s=s|0,l=l|0,WSe(l)|0}function sD(s){return s=s|0,s|0}function WSe(s){return s=s|0,s|0}function KSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],VSe(s,c,d,0),C=f}function VSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=MF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=JSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,zSe(m,f)|0,f),C=d}function MF(){var s=0,l=0;if(o[7672]|0||(d5(9376),tr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9376)|0)){s=9376,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));d5(9376)}return 9376}function JSe(s){return s=s|0,0}function zSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=MF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],g5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(XSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function g5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function XSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ZSe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,$Se(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],g5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,ePe(s,k),tPe(k),C=M;return}}function ZSe(s){return s=s|0,357913941}function $Se(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function ePe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function tPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function d5(s){s=s|0,iPe(s)}function rPe(s){s=s|0,nPe(s+24|0)}function nPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function iPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,m5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function m5(){return 1196}function sPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=oPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=aPe(l,f)|0,C=c,l|0}function oPe(s){return s=s|0,(n[(MF()|0)+24>>2]|0)+(s*12|0)|0}function aPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),sD(Lg[c&31](s)|0)|0}function lPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],cPe(s,c,d,1),C=f}function cPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=UF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=uPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,APe(m,f)|0,f),C=d}function UF(){var s=0,l=0;if(o[7680]|0||(E5(9412),tr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9412)|0)){s=9412,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));E5(9412)}return 9412}function uPe(s){return s=s|0,0}function APe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=UF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],y5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(fPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function y5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function fPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=pPe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,hPe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],y5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,gPe(s,k),dPe(k),C=M;return}}function pPe(s){return s=s|0,357913941}function hPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function gPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function dPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function E5(s){s=s|0,EPe(s)}function mPe(s){s=s|0,yPe(s+24|0)}function yPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function EPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,6,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function C5(){return 1200}function CPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=wPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=IPe(l,f)|0,C=c,l|0}function wPe(s){return s=s|0,(n[(UF()|0)+24>>2]|0)+(s*12|0)|0}function IPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),oD(Lg[c&31](s)|0)|0}function oD(s){return s=s|0,s|0}function BPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vPe(s,c,d,0),C=f}function vPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=_F()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=DPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,SPe(m,f)|0,f),C=d}function _F(){var s=0,l=0;if(o[7688]|0||(I5(9448),tr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9448)|0)){s=9448,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));I5(9448)}return 9448}function DPe(s){return s=s|0,0}function SPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=_F()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],w5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(PPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function w5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function PPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=bPe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,xPe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],w5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,kPe(s,k),QPe(k),C=M;return}}function bPe(s){return s=s|0,357913941}function xPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function kPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function QPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function I5(s){s=s|0,TPe(s)}function FPe(s){s=s|0,RPe(s+24|0)}function RPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function TPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,6,l,B5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function B5(){return 1204}function NPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=LPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],OPe(l,d,c),C=f}function LPe(s){return s=s|0,(n[(_F()|0)+24>>2]|0)+(s*12|0)|0}function OPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),HF(d,c),d=qF(d,c)|0,rf[f&31](s,d),C=m}function HF(s,l){s=s|0,l=l|0}function qF(s,l){return s=s|0,l=l|0,MPe(l)|0}function MPe(s){return s=s|0,s|0}function UPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_Pe(s,c,d,0),C=f}function _Pe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=jF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=HPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,qPe(m,f)|0,f),C=d}function jF(){var s=0,l=0;if(o[7696]|0||(D5(9484),tr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9484)|0)){s=9484,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));D5(9484)}return 9484}function HPe(s){return s=s|0,0}function qPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=jF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],v5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function v5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=GPe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,YPe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],v5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,WPe(s,k),KPe(k),C=M;return}}function GPe(s){return s=s|0,357913941}function YPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function WPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function KPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function D5(s){s=s|0,zPe(s)}function VPe(s){s=s|0,JPe(s+24|0)}function JPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function zPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,XPe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function XPe(){return 1212}function ZPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=$Pe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],ebe(l,m,c,f),C=d}function $Pe(s){return s=s|0,(n[(jF()|0)+24>>2]|0)+(s*12|0)|0}function ebe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),HF(m,c),m=qF(m,c)|0,bg(B,f),B=xg(B,f)|0,Hw[d&15](s,m,B),C=k}function tbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rbe(s,c,d,1),C=f}function rbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=GF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=nbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,ibe(m,f)|0,f),C=d}function GF(){var s=0,l=0;if(o[7704]|0||(P5(9520),tr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9520)|0)){s=9520,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));P5(9520)}return 9520}function nbe(s){return s=s|0,0}function ibe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=GF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],S5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(sbe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function S5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function sbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=obe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,abe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],S5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lbe(s,k),cbe(k),C=M;return}}function obe(s){return s=s|0,357913941}function abe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function P5(s){s=s|0,fbe(s)}function ube(s){s=s|0,Abe(s+24|0)}function Abe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fbe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,pbe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pbe(){return 1224}function hbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;return d=C,C=C+16|0,m=d+8|0,B=d,k=gbe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],f=+dbe(l,m,c),C=d,+f}function gbe(s){return s=s|0,(n[(GF()|0)+24>>2]|0)+(s*12|0)|0}function dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,B=+SF(+v7[f&7](s,d)),C=m,+B}function mbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ybe(s,c,d,1),C=f}function ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=YF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Ebe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Cbe(m,f)|0,f),C=d}function YF(){var s=0,l=0;if(o[7712]|0||(x5(9556),tr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9556)|0)){s=9556,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));x5(9556)}return 9556}function Ebe(s){return s=s|0,0}function Cbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=YF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],b5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(wbe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function b5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function wbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ibe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,Bbe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],b5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,vbe(s,k),Dbe(k),C=M;return}}function Ibe(s){return s=s|0,357913941}function Bbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Dbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function x5(s){s=s|0,bbe(s)}function Sbe(s){s=s|0,Pbe(s+24|0)}function Pbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function bbe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,xbe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xbe(){return 1232}function kbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Qbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=+Fbe(l,d),C=f,+c}function Qbe(s){return s=s|0,(n[(YF()|0)+24>>2]|0)+(s*12|0)|0}function Fbe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),+ +SF(+B7[c&15](s))}function Rbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Tbe(s,c,d,1),C=f}function Tbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=WF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Nbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Lbe(m,f)|0,f),C=d}function WF(){var s=0,l=0;if(o[7720]|0||(Q5(9592),tr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9592)|0)){s=9592,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Q5(9592)}return 9592}function Nbe(s){return s=s|0,0}function Lbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=WF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],k5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Obe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function k5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Obe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Mbe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,Ube(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],k5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,_be(s,k),Hbe(k),C=M;return}}function Mbe(s){return s=s|0,357913941}function Ube(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function _be(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Hbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function Q5(s){s=s|0,Gbe(s)}function qbe(s){s=s|0,jbe(s+24|0)}function jbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Gbe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,7,l,Ybe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Ybe(){return 1276}function Wbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Kbe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Vbe(l,f)|0,C=c,l|0}function Kbe(s){return s=s|0,(n[(WF()|0)+24>>2]|0)+(s*12|0)|0}function Vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+16|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),rf[c&31](f,s),f=F5(f)|0,C=d,f|0}function F5(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=xF(R5()|0)|0,f?(kF(l,f),QF(c,l),Jbe(s,c),s=FF(l)|0):s=zbe(s)|0,C=d,s|0}function R5(){var s=0;return o[7736]|0||(oxe(9640),tr(25,9640,U|0)|0,s=7736,n[s>>2]=1,n[s+4>>2]=0),9640}function Jbe(s,l){s=s|0,l=l|0,exe(l,s,s+8|0)|0}function zbe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Kt(16)|0,n[k>>2]=n[s>>2],n[k+4>>2]=n[s+4>>2],n[k+8>>2]=n[s+8>>2],n[k+12>>2]=n[s+12>>2],m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],KF(s,m,d),n[f>>2]=s,C=c,l|0}function KF(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1244,n[c+12>>2]=l,n[s+4>>2]=c}function Xbe(s){s=s|0,zm(s),gt(s)}function Zbe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function $be(s){s=s|0,gt(s)}function exe(s,l,c){return s=s|0,l=l|0,c=c|0,l=txe(n[s>>2]|0,l,c)|0,c=s+4|0,n[(n[c>>2]|0)+8>>2]=l,n[(n[c>>2]|0)+8>>2]|0}function txe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return f=C,C=C+16|0,d=f,Ka(d),s=da(s)|0,c=rxe(s,n[l>>2]|0,+E[c>>3])|0,Va(d),C=f,c|0}function rxe(s,l,c){s=s|0,l=l|0,c=+c;var f=0;return f=Sl(nxe()|0)|0,l=DF(l)|0,ml(0,f|0,s|0,l|0,+ +JA(c))|0}function nxe(){var s=0;return o[7728]|0||(ixe(9628),s=7728,n[s>>2]=1,n[s+4>>2]=0),9628}function ixe(s){s=s|0,Pl(s,sxe()|0,2)}function sxe(){return 1264}function oxe(s){s=s|0,vp(s)}function axe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],lxe(s,c,d,1),C=f}function lxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=VF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=cxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,uxe(m,f)|0,f),C=d}function VF(){var s=0,l=0;if(o[7744]|0||(N5(9684),tr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9684)|0)){s=9684,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));N5(9684)}return 9684}function cxe(s){return s=s|0,0}function uxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=VF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],T5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Axe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function T5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Axe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=fxe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,pxe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],T5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,hxe(s,k),gxe(k),C=M;return}}function fxe(s){return s=s|0,357913941}function pxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function hxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function gxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function N5(s){s=s|0,yxe(s)}function dxe(s){s=s|0,mxe(s+24|0)}function mxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function yxe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,Exe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Exe(){return 1280}function Cxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=wxe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=Ixe(l,d,c)|0,C=f,c|0}function wxe(s){return s=s|0,(n[(VF()|0)+24>>2]|0)+(s*12|0)|0}function Ixe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return B=C,C=C+32|0,d=B,m=B+16|0,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(m,c),m=$A(m,c)|0,Hw[f&15](d,s,m),m=F5(d)|0,C=B,m|0}function Bxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vxe(s,c,d,1),C=f}function vxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=JF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Dxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Sxe(m,f)|0,f),C=d}function JF(){var s=0,l=0;if(o[7752]|0||(O5(9720),tr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9720)|0)){s=9720,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));O5(9720)}return 9720}function Dxe(s){return s=s|0,0}function Sxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=JF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],L5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pxe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function L5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=bxe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,xxe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],L5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,kxe(s,k),Qxe(k),C=M;return}}function bxe(s){return s=s|0,357913941}function xxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function kxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Qxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function O5(s){s=s|0,Txe(s)}function Fxe(s){s=s|0,Rxe(s+24|0)}function Rxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Txe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,8,l,Nxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Nxe(){return 1288}function Lxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Oxe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Mxe(l,f)|0,C=c,l|0}function Oxe(s){return s=s|0,(n[(JF()|0)+24>>2]|0)+(s*12|0)|0}function Mxe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),ZG(Lg[c&31](s)|0)|0}function Uxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_xe(s,c,d,0),C=f}function _xe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=zF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Hxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,qxe(m,f)|0,f),C=d}function zF(){var s=0,l=0;if(o[7760]|0||(U5(9756),tr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9756)|0)){s=9756,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));U5(9756)}return 9756}function Hxe(s){return s=s|0,0}function qxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=zF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],M5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jxe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function M5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Gxe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,Yxe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],M5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Wxe(s,k),Kxe(k),C=M;return}}function Gxe(s){return s=s|0,357913941}function Yxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Wxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Kxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function U5(s){s=s|0,zxe(s)}function Vxe(s){s=s|0,Jxe(s+24|0)}function Jxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function zxe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,8,l,Xxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Xxe(){return 1292}function Zxe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=$xe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],eke(l,d,c),C=f}function $xe(s){return s=s|0,(n[(zF()|0)+24>>2]|0)+(s*12|0)|0}function eke(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ku(d,c),c=+Qu(d,c),C7[f&31](s,c),C=m}function tke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rke(s,c,d,0),C=f}function rke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=XF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=nke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,ike(m,f)|0,f),C=d}function XF(){var s=0,l=0;if(o[7768]|0||(H5(9792),tr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9792)|0)){s=9792,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));H5(9792)}return 9792}function nke(s){return s=s|0,0}function ike(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=XF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],_5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(ske(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function _5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function ske(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=oke(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,ake(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],_5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lke(s,k),cke(k),C=M;return}}function oke(s){return s=s|0,357913941}function ake(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function H5(s){s=s|0,fke(s)}function uke(s){s=s|0,Ake(s+24|0)}function Ake(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fke(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,pke()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pke(){return 1300}function hke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=gke(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],dke(l,m,c,f),C=d}function gke(s){return s=s|0,(n[(XF()|0)+24>>2]|0)+(s*12|0)|0}function dke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),ZA(m,c),m=$A(m,c)|0,ku(B,f),f=+Qu(B,f),b7[d&15](s,m,f),C=k}function mke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],yke(s,c,d,0),C=f}function yke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=ZF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Eke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Cke(m,f)|0,f),C=d}function ZF(){var s=0,l=0;if(o[7776]|0||(j5(9828),tr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9828)|0)){s=9828,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));j5(9828)}return 9828}function Eke(s){return s=s|0,0}function Cke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=ZF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(wke(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function wke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ike(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,Bke(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],q5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,vke(s,k),Dke(k),C=M;return}}function Ike(s){return s=s|0,357913941}function Bke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function vke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Dke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function j5(s){s=s|0,bke(s)}function Ske(s){s=s|0,Pke(s+24|0)}function Pke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function bke(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,7,l,xke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xke(){return 1312}function kke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Qke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Fke(l,d,c),C=f}function Qke(s){return s=s|0,(n[(ZF()|0)+24>>2]|0)+(s*12|0)|0}function Fke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,rf[f&31](s,d),C=m}function Rke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Tke(s,c,d,0),C=f}function Tke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=$F()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Nke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Lke(m,f)|0,f),C=d}function $F(){var s=0,l=0;if(o[7784]|0||(Y5(9864),tr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9864)|0)){s=9864,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Y5(9864)}return 9864}function Nke(s){return s=s|0,0}function Lke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=$F()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],G5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Oke(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function G5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Mke(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,Uke(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],G5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,_ke(s,k),Hke(k),C=M;return}}function Mke(s){return s=s|0,357913941}function Uke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function _ke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Hke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function Y5(s){s=s|0,Gke(s)}function qke(s){s=s|0,jke(s+24|0)}function jke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Gke(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,8,l,Yke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Yke(){return 1320}function Wke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Kke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Vke(l,d,c),C=f}function Kke(s){return s=s|0,(n[($F()|0)+24>>2]|0)+(s*12|0)|0}function Vke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Jke(d,c),d=zke(d,c)|0,rf[f&31](s,d),C=m}function Jke(s,l){s=s|0,l=l|0}function zke(s,l){return s=s|0,l=l|0,Xke(l)|0}function Xke(s){return s=s|0,s|0}function Zke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ke(s,c,d,0),C=f}function $ke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=eR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=eQe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,tQe(m,f)|0,f),C=d}function eR(){var s=0,l=0;if(o[7792]|0||(K5(9900),tr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9900)|0)){s=9900,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));K5(9900)}return 9900}function eQe(s){return s=s|0,0}function tQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=eR()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],W5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(rQe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function W5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function rQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=nQe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,iQe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],W5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,sQe(s,k),oQe(k),C=M;return}}function nQe(s){return s=s|0,357913941}function iQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function sQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function oQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function K5(s){s=s|0,cQe(s)}function aQe(s){s=s|0,lQe(s+24|0)}function lQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function cQe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,22,l,uQe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function uQe(){return 1344}function AQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;c=C,C=C+16|0,f=c+8|0,d=c,m=fQe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],pQe(l,f),C=c}function fQe(s){return s=s|0,(n[(eR()|0)+24>>2]|0)+(s*12|0)|0}function pQe(s,l){s=s|0,l=l|0;var c=0;c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&127](s)}function hQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=tR()|0,s=gQe(c)|0,hn(m,l,d,s,dQe(c,f)|0,f)}function tR(){var s=0,l=0;if(o[7800]|0||(J5(9936),tr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9936)|0)){s=9936,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));J5(9936)}return 9936}function gQe(s){return s=s|0,s|0}function dQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=tR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(V5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(mQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function V5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function mQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=yQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,EQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,V5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,CQe(s,d),wQe(d),C=k;return}}function yQe(s){return s=s|0,536870911}function EQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function CQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function J5(s){s=s|0,vQe(s)}function IQe(s){s=s|0,BQe(s+24|0)}function BQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function vQe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,23,l,B5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function DQe(s,l){s=s|0,l=l|0,PQe(n[(SQe(s)|0)>>2]|0,l)}function SQe(s){return s=s|0,(n[(tR()|0)+24>>2]|0)+(s<<3)|0}function PQe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,HF(f,l),l=qF(f,l)|0,tf[s&127](l),C=c}function bQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=rR()|0,s=xQe(c)|0,hn(m,l,d,s,kQe(c,f)|0,f)}function rR(){var s=0,l=0;if(o[7808]|0||(X5(9972),tr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9972)|0)){s=9972,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));X5(9972)}return 9972}function xQe(s){return s=s|0,s|0}function kQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=rR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(z5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(QQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function z5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function QQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=FQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,RQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,z5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,TQe(s,d),NQe(d),C=k;return}}function FQe(s){return s=s|0,536870911}function RQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function TQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function NQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function X5(s){s=s|0,MQe(s)}function LQe(s){s=s|0,OQe(s+24|0)}function OQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function MQe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,9,l,UQe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function UQe(){return 1348}function _Qe(s,l){return s=s|0,l=l|0,qQe(n[(HQe(s)|0)>>2]|0,l)|0}function HQe(s){return s=s|0,(n[(rR()|0)+24>>2]|0)+(s<<3)|0}function qQe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Z5(f,l),l=$5(f,l)|0,l=sD(Lg[s&31](l)|0)|0,C=c,l|0}function Z5(s,l){s=s|0,l=l|0}function $5(s,l){return s=s|0,l=l|0,jQe(l)|0}function jQe(s){return s=s|0,s|0}function GQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=nR()|0,s=YQe(c)|0,hn(m,l,d,s,WQe(c,f)|0,f)}function nR(){var s=0,l=0;if(o[7816]|0||(t9(10008),tr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10008)|0)){s=10008,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t9(10008)}return 10008}function YQe(s){return s=s|0,s|0}function WQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=nR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(e9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(KQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function e9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function KQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=VQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,JQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,e9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,zQe(s,d),XQe(d),C=k;return}}function VQe(s){return s=s|0,536870911}function JQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function zQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function XQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function t9(s){s=s|0,eFe(s)}function ZQe(s){s=s|0,$Qe(s+24|0)}function $Qe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function eFe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,15,l,m5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function tFe(s){return s=s|0,nFe(n[(rFe(s)|0)>>2]|0)|0}function rFe(s){return s=s|0,(n[(nR()|0)+24>>2]|0)+(s<<3)|0}function nFe(s){return s=s|0,sD(CD[s&7]()|0)|0}function iFe(){var s=0;return o[7832]|0||(fFe(10052),tr(25,10052,U|0)|0,s=7832,n[s>>2]=1,n[s+4>>2]=0),10052}function sFe(s,l){s=s|0,l=l|0,n[s>>2]=oFe()|0,n[s+4>>2]=aFe()|0,n[s+12>>2]=l,n[s+8>>2]=lFe()|0,n[s+32>>2]=2}function oFe(){return 11709}function aFe(){return 1188}function lFe(){return aD()|0}function cFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(uFe(c),gt(c)):l|0&&(Su(l),gt(l))}function bp(s,l){return s=s|0,l=l|0,l&s|0}function uFe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function aD(){var s=0;return o[7824]|0||(n[2511]=AFe()|0,n[2512]=0,s=7824,n[s>>2]=1,n[s+4>>2]=0),10044}function AFe(){return 0}function fFe(s){s=s|0,vp(s)}function pFe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0;l=C,C=C+32|0,c=l+24|0,m=l+16|0,d=l+8|0,f=l,hFe(s,4827),gFe(s,4834,3)|0,dFe(s,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],mFe(s,4841,c)|0,n[d>>2]=1,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],yFe(s,4871,c)|0,n[f>>2]=10,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],EFe(s,4891,c)|0,C=l}function hFe(s,l){s=s|0,l=l|0;var c=0;c=XRe()|0,n[s>>2]=c,ZRe(c,l),xp(n[s>>2]|0)}function gFe(s,l,c){return s=s|0,l=l|0,c=c|0,NRe(s,pn(l)|0,c,0),s|0}function dFe(s,l,c){return s=s|0,l=l|0,c=c|0,CRe(s,pn(l)|0,c,0),s|0}function mFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tRe(s,l,d),C=f,s|0}function yFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],LFe(s,l,d),C=f,s|0}function EFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],CFe(s,l,d),C=f,s|0}function CFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],wFe(s,c,d,1),C=f}function wFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=iR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=IFe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,BFe(m,f)|0,f),C=d}function iR(){var s=0,l=0;if(o[7840]|0||(n9(10100),tr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10100)|0)){s=10100,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));n9(10100)}return 10100}function IFe(s){return s=s|0,0}function BFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=iR()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],r9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(vFe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function r9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function vFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=DFe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,SFe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],r9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,PFe(s,k),bFe(k),C=M;return}}function DFe(s){return s=s|0,357913941}function SFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function PFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function bFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function n9(s){s=s|0,QFe(s)}function xFe(s){s=s|0,kFe(s+24|0)}function kFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function QFe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,6,l,FFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function FFe(){return 1364}function RFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=TFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=NFe(l,d,c)|0,C=f,c|0}function TFe(s){return s=s|0,(n[(iR()|0)+24>>2]|0)+(s*12|0)|0}function NFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,d=u5(RR[f&15](s,d)|0)|0,C=m,d|0}function LFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],OFe(s,c,d,0),C=f}function OFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=sR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=MFe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,UFe(m,f)|0,f),C=d}function sR(){var s=0,l=0;if(o[7848]|0||(s9(10136),tr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10136)|0)){s=10136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));s9(10136)}return 10136}function MFe(s){return s=s|0,0}function UFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=sR()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],i9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(_Fe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function i9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function _Fe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=HFe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,qFe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],i9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,jFe(s,k),GFe(k),C=M;return}}function HFe(s){return s=s|0,357913941}function qFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function jFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function GFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function s9(s){s=s|0,KFe(s)}function YFe(s){s=s|0,WFe(s+24|0)}function WFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function KFe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,9,l,VFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VFe(){return 1372}function JFe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=zFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],XFe(l,d,c),C=f}function zFe(s){return s=s|0,(n[(sR()|0)+24>>2]|0)+(s*12|0)|0}function XFe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=Ze;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZFe(d,c),B=y($Fe(d,c)),E7[f&1](s,B),C=m}function ZFe(s,l){s=s|0,l=+l}function $Fe(s,l){return s=s|0,l=+l,y(eRe(l))}function eRe(s){return s=+s,y(s)}function tRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rRe(s,c,d,0),C=f}function rRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=oR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=nRe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,iRe(m,f)|0,f),C=d}function oR(){var s=0,l=0;if(o[7856]|0||(a9(10172),tr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10172)|0)){s=10172,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));a9(10172)}return 10172}function nRe(s){return s=s|0,0}function iRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=oR()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],o9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(sRe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function o9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function sRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=oRe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,aRe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],o9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lRe(s,k),cRe(k),C=M;return}}function oRe(s){return s=s|0,357913941}function aRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function a9(s){s=s|0,fRe(s)}function uRe(s){s=s|0,ARe(s+24|0)}function ARe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fRe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,3,l,pRe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pRe(){return 1380}function hRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=gRe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],dRe(l,m,c,f),C=d}function gRe(s){return s=s|0,(n[(oR()|0)+24>>2]|0)+(s*12|0)|0}function dRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),ZA(m,c),m=$A(m,c)|0,mRe(B,f),B=yRe(B,f)|0,Hw[d&15](s,m,B),C=k}function mRe(s,l){s=s|0,l=l|0}function yRe(s,l){return s=s|0,l=l|0,ERe(l)|0}function ERe(s){return s=s|0,(s|0)!=0|0}function CRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=aR()|0,s=wRe(c)|0,hn(m,l,d,s,IRe(c,f)|0,f)}function aR(){var s=0,l=0;if(o[7864]|0||(c9(10208),tr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10208)|0)){s=10208,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c9(10208)}return 10208}function wRe(s){return s=s|0,s|0}function IRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=aR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(l9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(BRe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function l9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function BRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=vRe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,DRe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,l9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,SRe(s,d),PRe(d),C=k;return}}function vRe(s){return s=s|0,536870911}function DRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function SRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function c9(s){s=s|0,kRe(s)}function bRe(s){s=s|0,xRe(s+24|0)}function xRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function kRe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,24,l,QRe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function QRe(){return 1392}function FRe(s,l){s=s|0,l=l|0,TRe(n[(RRe(s)|0)>>2]|0,l)}function RRe(s){return s=s|0,(n[(aR()|0)+24>>2]|0)+(s<<3)|0}function TRe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Z5(f,l),l=$5(f,l)|0,tf[s&127](l),C=c}function NRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=lR()|0,s=LRe(c)|0,hn(m,l,d,s,ORe(c,f)|0,f)}function lR(){var s=0,l=0;if(o[7872]|0||(A9(10244),tr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10244)|0)){s=10244,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));A9(10244)}return 10244}function LRe(s){return s=s|0,s|0}function ORe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=lR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(u9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(MRe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function u9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function MRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=URe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,_Re(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,u9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,HRe(s,d),qRe(d),C=k;return}}function URe(s){return s=s|0,536870911}function _Re(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function HRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function A9(s){s=s|0,YRe(s)}function jRe(s){s=s|0,GRe(s+24|0)}function GRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function YRe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,16,l,WRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function WRe(){return 1400}function KRe(s){return s=s|0,JRe(n[(VRe(s)|0)>>2]|0)|0}function VRe(s){return s=s|0,(n[(lR()|0)+24>>2]|0)+(s<<3)|0}function JRe(s){return s=s|0,zRe(CD[s&7]()|0)|0}function zRe(s){return s=s|0,s|0}function XRe(){var s=0;return o[7880]|0||(iTe(10280),tr(25,10280,U|0)|0,s=7880,n[s>>2]=1,n[s+4>>2]=0),10280}function ZRe(s,l){s=s|0,l=l|0,n[s>>2]=$Re()|0,n[s+4>>2]=eTe()|0,n[s+12>>2]=l,n[s+8>>2]=tTe()|0,n[s+32>>2]=4}function $Re(){return 11711}function eTe(){return 1356}function tTe(){return aD()|0}function rTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(nTe(c),gt(c)):l|0&&(Dg(l),gt(l))}function nTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function iTe(s){s=s|0,vp(s)}function sTe(s){s=s|0,oTe(s,4920),aTe(s)|0,lTe(s)|0}function oTe(s,l){s=s|0,l=l|0;var c=0;c=R5()|0,n[s>>2]=c,xTe(c,l),xp(n[s>>2]|0)}function aTe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,ETe()|0),s|0}function lTe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,cTe()|0),s|0}function cTe(){var s=0;return o[7888]|0||(f9(10328),tr(53,10328,U|0)|0,s=7888,n[s>>2]=1,n[s+4>>2]=0),Tr(10328)|0||f9(10328),10328}function kg(s,l){s=s|0,l=l|0,hn(s,0,l,0,0,0)}function f9(s){s=s|0,fTe(s),Qg(s,10)}function uTe(s){s=s|0,ATe(s+24|0)}function ATe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function fTe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,1,l,dTe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pTe(s,l,c){s=s|0,l=l|0,c=+c,hTe(s,l,c)}function Qg(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function hTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,ZA(k,l),n[m>>2]=$A(k,l)|0,ku(B,c),E[d>>3]=+Qu(B,c),gTe(s,m,d),C=f}function gTe(s,l,c){s=s|0,l=l|0,c=c|0,Y(s+8|0,n[l>>2]|0,+E[c>>3]),o[s+24>>0]=1}function dTe(){return 1404}function mTe(s,l){return s=s|0,l=+l,yTe(s,l)|0}function yTe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,m=f+4|0,B=f+8|0,k=f,d=Wa(8)|0,c=d,Q=Kt(16)|0,ZA(m,s),s=$A(m,s)|0,ku(B,l),Y(Q,s,+Qu(B,l)),B=c+4|0,n[B>>2]=Q,s=Kt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],KF(s,B,m),n[d>>2]=s,C=f,c|0}function ETe(){var s=0;return o[7896]|0||(p9(10364),tr(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Tr(10364)|0||p9(10364),10364}function p9(s){s=s|0,ITe(s),Qg(s,55)}function CTe(s){s=s|0,wTe(s+24|0)}function wTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function ITe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,4,l,STe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function BTe(s){s=s|0,vTe(s)}function vTe(s){s=s|0,DTe(s)}function DTe(s){s=s|0,h9(s+8|0),o[s+24>>0]=1}function h9(s){s=s|0,n[s>>2]=0,E[s+8>>3]=0}function STe(){return 1424}function PTe(){return bTe()|0}function bTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Kt(16)|0,h9(f),m=s+4|0,n[m>>2]=f,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],KF(f,m,d),n[c>>2]=f,C=l,s|0}function xTe(s,l){s=s|0,l=l|0,n[s>>2]=kTe()|0,n[s+4>>2]=QTe()|0,n[s+12>>2]=l,n[s+8>>2]=FTe()|0,n[s+32>>2]=5}function kTe(){return 11710}function QTe(){return 1416}function FTe(){return lD()|0}function RTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(TTe(c),gt(c)):l|0&>(l)}function TTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function lD(){var s=0;return o[7904]|0||(n[2600]=NTe()|0,n[2601]=0,s=7904,n[s>>2]=1,n[s+4>>2]=0),10400}function NTe(){return n[357]|0}function LTe(s){s=s|0,OTe(s,4926),MTe(s)|0}function OTe(s,l){s=s|0,l=l|0;var c=0;c=r5()|0,n[s>>2]=c,JTe(c,l),xp(n[s>>2]|0)}function MTe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,UTe()|0),s|0}function UTe(){var s=0;return o[7912]|0||(g9(10412),tr(56,10412,U|0)|0,s=7912,n[s>>2]=1,n[s+4>>2]=0),Tr(10412)|0||g9(10412),10412}function g9(s){s=s|0,qTe(s),Qg(s,57)}function _Te(s){s=s|0,HTe(s+24|0)}function HTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function qTe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,5,l,WTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function jTe(s){s=s|0,GTe(s)}function GTe(s){s=s|0,YTe(s)}function YTe(s){s=s|0;var l=0,c=0;l=s+8|0,c=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(c|0));o[s+56>>0]=1}function WTe(){return 1432}function KTe(){return VTe()|0}function VTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0;B=C,C=C+16|0,s=B+4|0,l=B,c=Wa(8)|0,f=c,d=Kt(48)|0,m=d,k=m+48|0;do n[m>>2]=0,m=m+4|0;while((m|0)<(k|0));return m=f+4|0,n[m>>2]=d,k=Kt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[s>>2]=n[l>>2],n5(k,m,s),n[c>>2]=k,C=B,f|0}function JTe(s,l){s=s|0,l=l|0,n[s>>2]=zTe()|0,n[s+4>>2]=XTe()|0,n[s+12>>2]=l,n[s+8>>2]=ZTe()|0,n[s+32>>2]=6}function zTe(){return 11704}function XTe(){return 1436}function ZTe(){return lD()|0}function $Te(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(eNe(c),gt(c)):l|0&>(l)}function eNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function tNe(s){s=s|0,rNe(s,4933),nNe(s)|0,iNe(s)|0}function rNe(s,l){s=s|0,l=l|0;var c=0;c=bNe()|0,n[s>>2]=c,xNe(c,l),xp(n[s>>2]|0)}function nNe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,yNe()|0),s|0}function iNe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,sNe()|0),s|0}function sNe(){var s=0;return o[7920]|0||(d9(10452),tr(58,10452,U|0)|0,s=7920,n[s>>2]=1,n[s+4>>2]=0),Tr(10452)|0||d9(10452),10452}function d9(s){s=s|0,lNe(s),Qg(s,1)}function oNe(s){s=s|0,aNe(s+24|0)}function aNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function lNe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,1,l,fNe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function cNe(s,l,c){s=s|0,l=+l,c=+c,uNe(s,l,c)}function uNe(s,l,c){s=s|0,l=+l,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,m=f+8|0,k=f+17|0,d=f,B=f+16|0,ku(k,l),E[m>>3]=+Qu(k,l),ku(B,c),E[d>>3]=+Qu(B,c),ANe(s,m,d),C=f}function ANe(s,l,c){s=s|0,l=l|0,c=c|0,m9(s+8|0,+E[l>>3],+E[c>>3]),o[s+24>>0]=1}function m9(s,l,c){s=s|0,l=+l,c=+c,E[s>>3]=l,E[s+8>>3]=c}function fNe(){return 1472}function pNe(s,l){return s=+s,l=+l,hNe(s,l)|0}function hNe(s,l){s=+s,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,B=f+4|0,k=f+8|0,Q=f,d=Wa(8)|0,c=d,m=Kt(16)|0,ku(B,s),s=+Qu(B,s),ku(k,l),m9(m,s,+Qu(k,l)),k=c+4|0,n[k>>2]=m,m=Kt(8)|0,k=n[k>>2]|0,n[Q>>2]=0,n[B>>2]=n[Q>>2],y9(m,k,B),n[d>>2]=m,C=f,c|0}function y9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1452,n[c+12>>2]=l,n[s+4>>2]=c}function gNe(s){s=s|0,zm(s),gt(s)}function dNe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function mNe(s){s=s|0,gt(s)}function yNe(){var s=0;return o[7928]|0||(E9(10488),tr(59,10488,U|0)|0,s=7928,n[s>>2]=1,n[s+4>>2]=0),Tr(10488)|0||E9(10488),10488}function E9(s){s=s|0,wNe(s),Qg(s,60)}function ENe(s){s=s|0,CNe(s+24|0)}function CNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function wNe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,6,l,DNe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function INe(s){s=s|0,BNe(s)}function BNe(s){s=s|0,vNe(s)}function vNe(s){s=s|0,C9(s+8|0),o[s+24>>0]=1}function C9(s){s=s|0,n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,n[s+12>>2]=0}function DNe(){return 1492}function SNe(){return PNe()|0}function PNe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Kt(16)|0,C9(f),m=s+4|0,n[m>>2]=f,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],y9(f,m,d),n[c>>2]=f,C=l,s|0}function bNe(){var s=0;return o[7936]|0||(NNe(10524),tr(25,10524,U|0)|0,s=7936,n[s>>2]=1,n[s+4>>2]=0),10524}function xNe(s,l){s=s|0,l=l|0,n[s>>2]=kNe()|0,n[s+4>>2]=QNe()|0,n[s+12>>2]=l,n[s+8>>2]=FNe()|0,n[s+32>>2]=7}function kNe(){return 11700}function QNe(){return 1484}function FNe(){return lD()|0}function RNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(TNe(c),gt(c)):l|0&>(l)}function TNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function NNe(s){s=s|0,vp(s)}function LNe(s,l,c){s=s|0,l=l|0,c=c|0,s=pn(l)|0,l=ONe(c)|0,c=MNe(c,0)|0,hLe(s,l,c,cR()|0,0)}function ONe(s){return s=s|0,s|0}function MNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=cR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(I9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(YNe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function cR(){var s=0,l=0;if(o[7944]|0||(w9(10568),tr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10568)|0)){s=10568,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));w9(10568)}return 10568}function w9(s){s=s|0,HNe(s)}function UNe(s){s=s|0,_Ne(s+24|0)}function _Ne(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function HNe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,17,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function qNe(s){return s=s|0,GNe(n[(jNe(s)|0)>>2]|0)|0}function jNe(s){return s=s|0,(n[(cR()|0)+24>>2]|0)+(s<<3)|0}function GNe(s){return s=s|0,oD(CD[s&7]()|0)|0}function I9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function YNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=WNe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,KNe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,I9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,VNe(s,d),JNe(d),C=k;return}}function WNe(s){return s=s|0,536870911}function KNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function VNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JNe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function zNe(){XNe()}function XNe(){ZNe(10604)}function ZNe(s){s=s|0,$Ne(s,4955)}function $Ne(s,l){s=s|0,l=l|0;var c=0;c=eLe()|0,n[s>>2]=c,tLe(c,l),xp(n[s>>2]|0)}function eLe(){var s=0;return o[7952]|0||(uLe(10612),tr(25,10612,U|0)|0,s=7952,n[s>>2]=1,n[s+4>>2]=0),10612}function tLe(s,l){s=s|0,l=l|0,n[s>>2]=sLe()|0,n[s+4>>2]=oLe()|0,n[s+12>>2]=l,n[s+8>>2]=aLe()|0,n[s+32>>2]=8}function xp(s){s=s|0;var l=0,c=0;l=C,C=C+16|0,c=l,Ym()|0,n[c>>2]=s,rLe(10608,c),C=l}function Ym(){return o[11714]|0||(n[2652]=0,tr(62,10608,U|0)|0,o[11714]=1),10608}function rLe(s,l){s=s|0,l=l|0;var c=0;c=Kt(8)|0,n[c+4>>2]=n[l>>2],n[c>>2]=n[s>>2],n[s>>2]=c}function nLe(s){s=s|0,iLe(s)}function iLe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function sLe(){return 11715}function oLe(){return 1496}function aLe(){return aD()|0}function lLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(cLe(c),gt(c)):l|0&>(l)}function cLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function uLe(s){s=s|0,vp(s)}function ALe(s,l){s=s|0,l=l|0;var c=0,f=0;Ym()|0,c=n[2652]|0;e:do if(c|0){for(;f=n[c+4>>2]|0,!(f|0&&(n7(uR(f)|0,s)|0)==0);)if(c=n[c>>2]|0,!c)break e;fLe(f,l)}while(0)}function uR(s){return s=s|0,n[s+12>>2]|0}function fLe(s,l){s=s|0,l=l|0;var c=0;s=s+36|0,c=n[s>>2]|0,c|0&&(jA(c),gt(c)),c=Kt(4)|0,zG(c,l),n[s>>2]=c}function AR(){return o[11716]|0||(n[2664]=0,tr(63,10656,U|0)|0,o[11716]=1),10656}function B9(){var s=0;return o[11717]|0?s=n[2665]|0:(pLe(),n[2665]=1504,o[11717]=1,s=1504),s|0}function pLe(){o[11740]|0||(o[11718]=gr(gr(8,0)|0,0)|0,o[11719]=gr(gr(0,0)|0,0)|0,o[11720]=gr(gr(0,16)|0,0)|0,o[11721]=gr(gr(8,0)|0,0)|0,o[11722]=gr(gr(0,0)|0,0)|0,o[11723]=gr(gr(8,0)|0,0)|0,o[11724]=gr(gr(0,0)|0,0)|0,o[11725]=gr(gr(8,0)|0,0)|0,o[11726]=gr(gr(0,0)|0,0)|0,o[11727]=gr(gr(8,0)|0,0)|0,o[11728]=gr(gr(0,0)|0,0)|0,o[11729]=gr(gr(0,0)|0,32)|0,o[11730]=gr(gr(0,0)|0,32)|0,o[11740]=1)}function v9(){return 1572}function hLe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0;m=C,C=C+32|0,O=m+16|0,M=m+12|0,Q=m+8|0,k=m+4|0,B=m,n[O>>2]=s,n[M>>2]=l,n[Q>>2]=c,n[k>>2]=f,n[B>>2]=d,AR()|0,gLe(10656,O,M,Q,k,B),C=m}function gLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0;B=Kt(24)|0,$G(B+4|0,n[l>>2]|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[s>>2],n[s>>2]=B}function D9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,lt=0;if(lt=C,C=C+32|0,Me=lt+20|0,Qe=lt+8|0,et=lt+4|0,Xe=lt,l=n[l>>2]|0,l|0){Ge=Me+4|0,Q=Me+8|0,M=Qe+4|0,O=Qe+8|0,j=Qe+8|0,se=Me+8|0;do{if(B=l+4|0,k=fR(B)|0,k|0){if(d=Nw(k)|0,n[Me>>2]=0,n[Ge>>2]=0,n[Q>>2]=0,f=(Lw(k)|0)+1|0,dLe(Me,f),f|0)for(;f=f+-1|0,bc(Qe,n[d>>2]|0),m=n[Ge>>2]|0,m>>>0<(n[se>>2]|0)>>>0?(n[m>>2]=n[Qe>>2],n[Ge>>2]=(n[Ge>>2]|0)+4):pR(Me,Qe),f;)d=d+4|0;f=Ow(k)|0,n[Qe>>2]=0,n[M>>2]=0,n[O>>2]=0;e:do if(n[f>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?mLe(Qe,f):(n[d>>2]=n[f>>2],n[M>>2]=(n[M>>2]|0)+4),f=f+4|0,!(n[f>>2]|0))break e;d=n[M>>2]|0,m=n[j>>2]|0}while(0);n[et>>2]=cD(B)|0,n[Xe>>2]=Tr(k)|0,yLe(c,s,et,Xe,Me,Qe),hR(Qe),ef(Me)}l=n[l>>2]|0}while((l|0)!=0)}C=lt}function fR(s){return s=s|0,n[s+12>>2]|0}function Nw(s){return s=s|0,n[s+12>>2]|0}function Lw(s){return s=s|0,n[s+16>>2]|0}function dLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=n[s>>2]|0,(n[s+8>>2]|0)-f>>2>>>0>>0&&(R9(c,l,(n[s+4>>2]|0)-f>>2,s+8|0),T9(s,c),N9(c)),C=d}function pR(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=F9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,Q=M>>1,R9(c,M>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,T9(s,c),N9(c),C=B;return}}function Ow(s){return s=s|0,n[s+8>>2]|0}function mLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=Q9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,Q=M>>1,OLe(c,M>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,MLe(s,c),ULe(c),C=B;return}}function cD(s){return s=s|0,n[s>>2]|0}function yLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,ELe(s,l,c,f,d,m)}function hR(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function ef(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function ELe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,j=0;B=C,C=C+48|0,O=B+40|0,k=B+32|0,j=B+24|0,Q=B+12|0,M=B,Ka(k),s=da(s)|0,n[j>>2]=n[l>>2],c=n[c>>2]|0,f=n[f>>2]|0,gR(Q,d),CLe(M,m),n[O>>2]=n[j>>2],wLe(s,O,c,f,Q,M),hR(M),ef(Q),Va(k),C=B}function gR(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(NLe(s,f),LLe(s,n[l>>2]|0,n[c>>2]|0,f))}function CLe(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(RLe(s,f),TLe(s,n[l>>2]|0,n[c>>2]|0,f))}function wLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,j=0;B=C,C=C+32|0,O=B+28|0,j=B+24|0,k=B+12|0,Q=B,M=Sl(ILe()|0)|0,n[j>>2]=n[l>>2],n[O>>2]=n[j>>2],l=Fg(O)|0,c=S9(c)|0,f=dR(f)|0,n[k>>2]=n[d>>2],O=d+4|0,n[k+4>>2]=n[O>>2],j=d+8|0,n[k+8>>2]=n[j>>2],n[j>>2]=0,n[O>>2]=0,n[d>>2]=0,d=mR(k)|0,n[Q>>2]=n[m>>2],O=m+4|0,n[Q+4>>2]=n[O>>2],j=m+8|0,n[Q+8>>2]=n[j>>2],n[j>>2]=0,n[O>>2]=0,n[m>>2]=0,ao(0,M|0,s|0,l|0,c|0,f|0,d|0,BLe(Q)|0)|0,hR(Q),ef(k),C=B}function ILe(){var s=0;return o[7968]|0||(QLe(10708),s=7968,n[s>>2]=1,n[s+4>>2]=0),10708}function Fg(s){return s=s|0,b9(s)|0}function S9(s){return s=s|0,P9(s)|0}function dR(s){return s=s|0,oD(s)|0}function mR(s){return s=s|0,DLe(s)|0}function BLe(s){return s=s|0,vLe(s)|0}function vLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=P9(n[(n[s>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function P9(s){return s=s|0,s|0}function DLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=b9((n[s>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function b9(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=xF(x9()|0)|0,f?(kF(l,f),QF(c,l),aUe(s,c),s=FF(l)|0):s=SLe(s)|0,C=d,s|0}function x9(){var s=0;return o[7960]|0||(kLe(10664),tr(25,10664,U|0)|0,s=7960,n[s>>2]=1,n[s+4>>2]=0),10664}function SLe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Kt(4)|0,n[k>>2]=n[s>>2],m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],k9(s,m,d),n[f>>2]=s,C=c,l|0}function k9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1656,n[c+12>>2]=l,n[s+4>>2]=c}function PLe(s){s=s|0,zm(s),gt(s)}function bLe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function xLe(s){s=s|0,gt(s)}function kLe(s){s=s|0,vp(s)}function QLe(s){s=s|0,Pl(s,FLe()|0,5)}function FLe(){return 1676}function RLe(s,l){s=s|0,l=l|0;var c=0;if((Q9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function TLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function Q9(s){return s=s|0,1073741823}function NLe(s,l){s=s|0,l=l|0;var c=0;if((F9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function LLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function F9(s){return s=s|0,1073741823}function OLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function MLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ULe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function R9(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function T9(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function N9(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function _Le(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0;if(Qe=C,C=C+32|0,O=Qe+20|0,j=Qe+12|0,M=Qe+16|0,se=Qe+4|0,Ge=Qe,Me=Qe+8|0,k=B9()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(Q=n[k+8>>2]|0,k=n[k+4>>2]|0;bc(O,B),HLe(s,O,k,Q),m=m+4|0,B=n[m>>2]|0,B;)Q=Q+1|0,k=k+1|0;if(m=v9()|0,B=n[m>>2]|0,B|0)do bc(O,B),n[j>>2]=n[m+4>>2],qLe(l,O,j),m=m+8|0,B=n[m>>2]|0;while((B|0)!=0);if(m=n[(Ym()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,bc(O,n[(Wm(l)|0)>>2]|0),n[j>>2]=uR(l)|0,jLe(c,O,j),m=n[m>>2]|0;while((m|0)!=0);if(bc(M,0),m=AR()|0,n[O>>2]=n[M>>2],D9(O,m,d),m=n[(Ym()|0)>>2]|0,m|0){s=O+4|0,l=O+8|0,c=O+8|0;do{if(Q=n[m+4>>2]|0,bc(j,n[(Wm(Q)|0)>>2]|0),GLe(se,L9(Q)|0),B=n[se>>2]|0,B|0){n[O>>2]=0,n[s>>2]=0,n[l>>2]=0;do bc(Ge,n[(Wm(n[B+4>>2]|0)|0)>>2]|0),k=n[s>>2]|0,k>>>0<(n[c>>2]|0)>>>0?(n[k>>2]=n[Ge>>2],n[s>>2]=(n[s>>2]|0)+4):pR(O,Ge),B=n[B>>2]|0;while((B|0)!=0);YLe(f,j,O),ef(O)}n[Me>>2]=n[j>>2],M=O9(Q)|0,n[O>>2]=n[Me>>2],D9(O,M,d),s5(se),m=n[m>>2]|0}while((m|0)!=0)}C=Qe}function HLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,nOe(s,l,c,f)}function qLe(s,l,c){s=s|0,l=l|0,c=c|0,rOe(s,l,c)}function Wm(s){return s=s|0,s|0}function jLe(s,l,c){s=s|0,l=l|0,c=c|0,ZLe(s,l,c)}function L9(s){return s=s|0,s+16|0}function GLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(m=C,C=C+16|0,d=m+8|0,c=m,n[s>>2]=0,f=n[l>>2]|0,n[d>>2]=f,n[c>>2]=s,c=XLe(c)|0,f|0){if(f=Kt(12)|0,B=(M9(d)|0)+4|0,s=n[B+4>>2]|0,l=f+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=s,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)s=f;else for(l=f;s=Kt(12)|0,Q=(M9(d)|0)+4|0,k=n[Q+4>>2]|0,B=s+4|0,n[B>>2]=n[Q>>2],n[B+4>>2]=k,n[l>>2]=s,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=s;n[s>>2]=n[c>>2],n[c>>2]=f}C=m}function YLe(s,l,c){s=s|0,l=l|0,c=c|0,WLe(s,l,c)}function O9(s){return s=s|0,s+24|0}function WLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+24|0,d=f+16|0,k=f+12|0,m=f,Ka(d),s=da(s)|0,n[k>>2]=n[l>>2],gR(m,c),n[B>>2]=n[k>>2],KLe(s,B,m),ef(m),Va(d),C=f}function KLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+16|0,k=f+12|0,d=f,m=Sl(VLe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Fg(B)|0,n[d>>2]=n[c>>2],B=c+4|0,n[d+4>>2]=n[B>>2],k=c+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[c>>2]=0,oo(0,m|0,s|0,l|0,mR(d)|0)|0,ef(d),C=f}function VLe(){var s=0;return o[7976]|0||(JLe(10720),s=7976,n[s>>2]=1,n[s+4>>2]=0),10720}function JLe(s){s=s|0,Pl(s,zLe()|0,2)}function zLe(){return 1732}function XLe(s){return s=s|0,n[s>>2]|0}function M9(s){return s=s|0,n[s>>2]|0}function ZLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Ka(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],U9(s,m,c),Va(d),C=f}function U9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+4|0,B=f,d=Sl($Le()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=Fg(m)|0,oo(0,d|0,s|0,l|0,S9(c)|0)|0,C=f}function $Le(){var s=0;return o[7984]|0||(eOe(10732),s=7984,n[s>>2]=1,n[s+4>>2]=0),10732}function eOe(s){s=s|0,Pl(s,tOe()|0,2)}function tOe(){return 1744}function rOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Ka(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],U9(s,m,c),Va(d),C=f}function nOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Ka(m),s=da(s)|0,n[k>>2]=n[l>>2],c=o[c>>0]|0,f=o[f>>0]|0,n[B>>2]=n[k>>2],iOe(s,B,c,f),Va(m),C=d}function iOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,B=d+4|0,k=d,m=Sl(sOe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Fg(B)|0,c=Km(c)|0,pc(0,m|0,s|0,l|0,c|0,Km(f)|0)|0,C=d}function sOe(){var s=0;return o[7992]|0||(aOe(10744),s=7992,n[s>>2]=1,n[s+4>>2]=0),10744}function Km(s){return s=s|0,oOe(s)|0}function oOe(s){return s=s|0,s&255|0}function aOe(s){s=s|0,Pl(s,lOe()|0,3)}function lOe(){return 1756}function cOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;switch(se=C,C=C+32|0,k=se+8|0,Q=se+4|0,M=se+20|0,O=se,LF(s,0),f=oUe(l)|0,n[k>>2]=0,j=k+4|0,n[j>>2]=0,n[k+8>>2]=0,f<<24>>24){case 0:{o[M>>0]=0,uOe(Q,c,M),uD(s,Q)|0,GA(Q);break}case 8:{j=BR(l)|0,o[M>>0]=8,bc(O,n[j+4>>2]|0),AOe(Q,c,M,O,j+8|0),uD(s,Q)|0,GA(Q);break}case 9:{if(m=BR(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,bc(Q,n[d>>2]|0),f=n[j>>2]|0,f>>>0<(n[B>>2]|0)>>>0?(n[f>>2]=n[Q>>2],n[j>>2]=(n[j>>2]|0)+4):pR(k,Q),l;)d=d+4|0;o[M>>0]=9,bc(O,n[m+8>>2]|0),fOe(Q,c,M,O,k),uD(s,Q)|0,GA(Q);break}default:j=BR(l)|0,o[M>>0]=f,bc(O,n[j+4>>2]|0),pOe(Q,c,M,O),uD(s,Q)|0,GA(Q)}ef(k),C=se}function uOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Ka(d),l=da(l)|0,SOe(s,l,o[c>>0]|0),Va(d),C=f}function uD(s,l){s=s|0,l=l|0;var c=0;return c=n[s>>2]|0,c|0&&PA(c|0),n[s>>2]=n[l>>2],n[l>>2]=0,s|0}function AOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+32|0,k=m+16|0,B=m+8|0,Q=m,Ka(B),l=da(l)|0,c=o[c>>0]|0,n[Q>>2]=n[f>>2],d=n[d>>2]|0,n[k>>2]=n[Q>>2],IOe(s,l,c,k,d),Va(B),C=m}function fOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0;m=C,C=C+32|0,Q=m+24|0,B=m+16|0,M=m+12|0,k=m,Ka(B),l=da(l)|0,c=o[c>>0]|0,n[M>>2]=n[f>>2],gR(k,d),n[Q>>2]=n[M>>2],yOe(s,l,c,Q,k),ef(k),Va(B),C=m}function pOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Ka(m),l=da(l)|0,c=o[c>>0]|0,n[k>>2]=n[f>>2],n[B>>2]=n[k>>2],hOe(s,l,c,B),Va(m),C=d}function hOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+4|0,k=d,B=Sl(gOe()|0)|0,c=Km(c)|0,n[k>>2]=n[f>>2],n[m>>2]=n[k>>2],AD(s,oo(0,B|0,l|0,c|0,Fg(m)|0)|0),C=d}function gOe(){var s=0;return o[8e3]|0||(dOe(10756),s=8e3,n[s>>2]=1,n[s+4>>2]=0),10756}function AD(s,l){s=s|0,l=l|0,LF(s,l)}function dOe(s){s=s|0,Pl(s,mOe()|0,2)}function mOe(){return 1772}function yOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0;m=C,C=C+32|0,Q=m+16|0,M=m+12|0,B=m,k=Sl(EOe()|0)|0,c=Km(c)|0,n[M>>2]=n[f>>2],n[Q>>2]=n[M>>2],f=Fg(Q)|0,n[B>>2]=n[d>>2],Q=d+4|0,n[B+4>>2]=n[Q>>2],M=d+8|0,n[B+8>>2]=n[M>>2],n[M>>2]=0,n[Q>>2]=0,n[d>>2]=0,AD(s,pc(0,k|0,l|0,c|0,f|0,mR(B)|0)|0),ef(B),C=m}function EOe(){var s=0;return o[8008]|0||(COe(10768),s=8008,n[s>>2]=1,n[s+4>>2]=0),10768}function COe(s){s=s|0,Pl(s,wOe()|0,3)}function wOe(){return 1784}function IOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,k=m+4|0,Q=m,B=Sl(BOe()|0)|0,c=Km(c)|0,n[Q>>2]=n[f>>2],n[k>>2]=n[Q>>2],f=Fg(k)|0,AD(s,pc(0,B|0,l|0,c|0,f|0,dR(d)|0)|0),C=m}function BOe(){var s=0;return o[8016]|0||(vOe(10780),s=8016,n[s>>2]=1,n[s+4>>2]=0),10780}function vOe(s){s=s|0,Pl(s,DOe()|0,3)}function DOe(){return 1800}function SOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=Sl(POe()|0)|0,AD(s,Qn(0,f|0,l|0,Km(c)|0)|0)}function POe(){var s=0;return o[8024]|0||(bOe(10792),s=8024,n[s>>2]=1,n[s+4>>2]=0),10792}function bOe(s){s=s|0,Pl(s,xOe()|0,1)}function xOe(){return 1816}function kOe(){QOe(),FOe(),ROe()}function QOe(){n[2702]=p7(65536)|0}function FOe(){$Oe(10856)}function ROe(){TOe(10816)}function TOe(s){s=s|0,NOe(s,5044),LOe(s)|0}function NOe(s,l){s=s|0,l=l|0;var c=0;c=x9()|0,n[s>>2]=c,KOe(c,l),xp(n[s>>2]|0)}function LOe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,OOe()|0),s|0}function OOe(){var s=0;return o[8032]|0||(_9(10820),tr(64,10820,U|0)|0,s=8032,n[s>>2]=1,n[s+4>>2]=0),Tr(10820)|0||_9(10820),10820}function _9(s){s=s|0,_Oe(s),Qg(s,25)}function MOe(s){s=s|0,UOe(s+24|0)}function UOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function _Oe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,18,l,GOe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function HOe(s,l){s=s|0,l=l|0,qOe(s,l)}function qOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;c=C,C=C+16|0,f=c,d=c+4|0,bg(d,l),n[f>>2]=xg(d,l)|0,jOe(s,f),C=c}function jOe(s,l){s=s|0,l=l|0,H9(s+4|0,n[l>>2]|0),o[s+8>>0]=1}function H9(s,l){s=s|0,l=l|0,n[s>>2]=l}function GOe(){return 1824}function YOe(s){return s=s|0,WOe(s)|0}function WOe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Kt(4)|0,bg(d,s),H9(k,xg(d,s)|0),m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],k9(s,m,d),n[f>>2]=s,C=c,l|0}function Wa(s){s=s|0;var l=0,c=0;return s=s+7&-8,s>>>0<=32768&&(l=n[2701]|0,s>>>0<=(65536-l|0)>>>0)?(c=(n[2702]|0)+l|0,n[2701]=l+s,s=c):(s=p7(s+8|0)|0,n[s>>2]=n[2703],n[2703]=s,s=s+8|0),s|0}function KOe(s,l){s=s|0,l=l|0,n[s>>2]=VOe()|0,n[s+4>>2]=JOe()|0,n[s+12>>2]=l,n[s+8>>2]=zOe()|0,n[s+32>>2]=9}function VOe(){return 11744}function JOe(){return 1832}function zOe(){return lD()|0}function XOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(ZOe(c),gt(c)):l|0&>(l)}function ZOe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function $Oe(s){s=s|0,eMe(s,5052),tMe(s)|0,rMe(s,5058,26)|0,nMe(s,5069,1)|0,iMe(s,5077,10)|0,sMe(s,5087,19)|0,oMe(s,5094,27)|0}function eMe(s,l){s=s|0,l=l|0;var c=0;c=Z4e()|0,n[s>>2]=c,$4e(c,l),xp(n[s>>2]|0)}function tMe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,M4e()|0),s|0}function rMe(s,l,c){return s=s|0,l=l|0,c=c|0,C4e(s,pn(l)|0,c,0),s|0}function nMe(s,l,c){return s=s|0,l=l|0,c=c|0,s4e(s,pn(l)|0,c,0),s|0}function iMe(s,l,c){return s=s|0,l=l|0,c=c|0,OMe(s,pn(l)|0,c,0),s|0}function sMe(s,l,c){return s=s|0,l=l|0,c=c|0,IMe(s,pn(l)|0,c,0),s|0}function q9(s,l){s=s|0,l=l|0;var c=0,f=0;e:for(;;){for(c=n[2703]|0;;){if((c|0)==(l|0))break e;if(f=n[c>>2]|0,n[2703]=f,!c)c=f;else break}gt(c)}n[2701]=s}function oMe(s,l,c){return s=s|0,l=l|0,c=c|0,aMe(s,pn(l)|0,c,0),s|0}function aMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=yR()|0,s=lMe(c)|0,hn(m,l,d,s,cMe(c,f)|0,f)}function yR(){var s=0,l=0;if(o[8040]|0||(G9(10860),tr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10860)|0)){s=10860,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));G9(10860)}return 10860}function lMe(s){return s=s|0,s|0}function cMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=yR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(j9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(uMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function j9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function uMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=AMe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,fMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,j9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,pMe(s,d),hMe(d),C=k;return}}function AMe(s){return s=s|0,536870911}function fMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function pMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function G9(s){s=s|0,mMe(s)}function gMe(s){s=s|0,dMe(s+24|0)}function dMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function mMe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,11,l,yMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yMe(){return 1840}function EMe(s,l,c){s=s|0,l=l|0,c=c|0,wMe(n[(CMe(s)|0)>>2]|0,l,c)}function CMe(s){return s=s|0,(n[(yR()|0)+24>>2]|0)+(s<<3)|0}function wMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+1|0,d=f,bg(m,l),l=xg(m,l)|0,bg(d,c),c=xg(d,c)|0,rf[s&31](l,c),C=f}function IMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=ER()|0,s=BMe(c)|0,hn(m,l,d,s,vMe(c,f)|0,f)}function ER(){var s=0,l=0;if(o[8048]|0||(W9(10896),tr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10896)|0)){s=10896,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));W9(10896)}return 10896}function BMe(s){return s=s|0,s|0}function vMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=ER()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(Y9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(DMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function Y9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function DMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=SMe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,PMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,Y9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,bMe(s,d),xMe(d),C=k;return}}function SMe(s){return s=s|0,536870911}function PMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function bMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function xMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function W9(s){s=s|0,FMe(s)}function kMe(s){s=s|0,QMe(s+24|0)}function QMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function FMe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,11,l,RMe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function RMe(){return 1852}function TMe(s,l){return s=s|0,l=l|0,LMe(n[(NMe(s)|0)>>2]|0,l)|0}function NMe(s){return s=s|0,(n[(ER()|0)+24>>2]|0)+(s<<3)|0}function LMe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,bg(f,l),l=xg(f,l)|0,l=oD(Lg[s&31](l)|0)|0,C=c,l|0}function OMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=CR()|0,s=MMe(c)|0,hn(m,l,d,s,UMe(c,f)|0,f)}function CR(){var s=0,l=0;if(o[8056]|0||(V9(10932),tr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10932)|0)){s=10932,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));V9(10932)}return 10932}function MMe(s){return s=s|0,s|0}function UMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=CR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(K9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(_Me(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function K9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function _Me(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=HMe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,qMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,K9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,jMe(s,d),GMe(d),C=k;return}}function HMe(s){return s=s|0,536870911}function qMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function jMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function GMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function V9(s){s=s|0,KMe(s)}function YMe(s){s=s|0,WMe(s+24|0)}function WMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function KMe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,7,l,VMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VMe(){return 1860}function JMe(s,l,c){return s=s|0,l=l|0,c=c|0,XMe(n[(zMe(s)|0)>>2]|0,l,c)|0}function zMe(s){return s=s|0,(n[(CR()|0)+24>>2]|0)+(s<<3)|0}function XMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+32|0,B=f+12|0,m=f+8|0,k=f,Q=f+16|0,d=f+4|0,ZMe(Q,l),$Me(k,Q,l),Dp(d,c),c=Sp(d,c)|0,n[B>>2]=n[k>>2],Hw[s&15](m,B,c),c=e4e(m)|0,GA(m),Pp(d),C=f,c|0}function ZMe(s,l){s=s|0,l=l|0}function $Me(s,l,c){s=s|0,l=l|0,c=c|0,t4e(s,c)}function e4e(s){return s=s|0,da(s)|0}function t4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+16|0,c=d,f=l,f&1?(r4e(c,0),ii(f|0,c|0)|0,n4e(s,c),i4e(c)):n[s>>2]=n[l>>2],C=d}function r4e(s,l){s=s|0,l=l|0,XG(s,l),n[s+4>>2]=0,o[s+8>>0]=0}function n4e(s,l){s=s|0,l=l|0,n[s>>2]=n[l+4>>2]}function i4e(s){s=s|0,o[s+8>>0]=0}function s4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=wR()|0,s=o4e(c)|0,hn(m,l,d,s,a4e(c,f)|0,f)}function wR(){var s=0,l=0;if(o[8064]|0||(z9(10968),tr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10968)|0)){s=10968,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));z9(10968)}return 10968}function o4e(s){return s=s|0,s|0}function a4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=wR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(J9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(l4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function J9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function l4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=c4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,u4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,J9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,A4e(s,d),f4e(d),C=k;return}}function c4e(s){return s=s|0,536870911}function u4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function A4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function f4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function z9(s){s=s|0,g4e(s)}function p4e(s){s=s|0,h4e(s+24|0)}function h4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function g4e(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,1,l,d4e()|0,5),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function d4e(){return 1872}function m4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,E4e(n[(y4e(s)|0)>>2]|0,l,c,f,d,m)}function y4e(s){return s=s|0,(n[(wR()|0)+24>>2]|0)+(s<<3)|0}function E4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,j=0;B=C,C=C+32|0,k=B+16|0,Q=B+12|0,M=B+8|0,O=B+4|0,j=B,Dp(k,l),l=Sp(k,l)|0,Dp(Q,c),c=Sp(Q,c)|0,Dp(M,f),f=Sp(M,f)|0,Dp(O,d),d=Sp(O,d)|0,Dp(j,m),m=Sp(j,m)|0,y7[s&1](l,c,f,d,m),Pp(j),Pp(O),Pp(M),Pp(Q),Pp(k),C=B}function C4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=IR()|0,s=w4e(c)|0,hn(m,l,d,s,I4e(c,f)|0,f)}function IR(){var s=0,l=0;if(o[8072]|0||(Z9(11004),tr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Tr(11004)|0)){s=11004,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Z9(11004)}return 11004}function w4e(s){return s=s|0,s|0}function I4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=IR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(X9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(B4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function X9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function B4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=v4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,D4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,X9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,S4e(s,d),P4e(d),C=k;return}}function v4e(s){return s=s|0,536870911}function D4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function S4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function P4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function Z9(s){s=s|0,k4e(s)}function b4e(s){s=s|0,x4e(s+24|0)}function x4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function k4e(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,12,l,Q4e()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Q4e(){return 1896}function F4e(s,l,c){s=s|0,l=l|0,c=c|0,T4e(n[(R4e(s)|0)>>2]|0,l,c)}function R4e(s){return s=s|0,(n[(IR()|0)+24>>2]|0)+(s<<3)|0}function T4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+4|0,d=f,N4e(m,l),l=L4e(m,l)|0,Dp(d,c),c=Sp(d,c)|0,rf[s&31](l,c),Pp(d),C=f}function N4e(s,l){s=s|0,l=l|0}function L4e(s,l){return s=s|0,l=l|0,O4e(l)|0}function O4e(s){return s=s|0,s|0}function M4e(){var s=0;return o[8080]|0||($9(11040),tr(70,11040,U|0)|0,s=8080,n[s>>2]=1,n[s+4>>2]=0),Tr(11040)|0||$9(11040),11040}function $9(s){s=s|0,H4e(s),Qg(s,71)}function U4e(s){s=s|0,_4e(s+24|0)}function _4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function H4e(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,7,l,Y4e()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function q4e(s){s=s|0,j4e(s)}function j4e(s){s=s|0,G4e(s)}function G4e(s){s=s|0,o[s+8>>0]=1}function Y4e(){return 1936}function W4e(){return K4e()|0}function K4e(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,m=s+4|0,n[m>>2]=Kt(1)|0,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],V4e(f,m,d),n[c>>2]=f,C=l,s|0}function V4e(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1916,n[c+12>>2]=l,n[s+4>>2]=c}function J4e(s){s=s|0,zm(s),gt(s)}function z4e(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function X4e(s){s=s|0,gt(s)}function Z4e(){var s=0;return o[8088]|0||(sUe(11076),tr(25,11076,U|0)|0,s=8088,n[s>>2]=1,n[s+4>>2]=0),11076}function $4e(s,l){s=s|0,l=l|0,n[s>>2]=eUe()|0,n[s+4>>2]=tUe()|0,n[s+12>>2]=l,n[s+8>>2]=rUe()|0,n[s+32>>2]=10}function eUe(){return 11745}function tUe(){return 1940}function rUe(){return aD()|0}function nUe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(iUe(c),gt(c)):l|0&>(l)}function iUe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function sUe(s){s=s|0,vp(s)}function bc(s,l){s=s|0,l=l|0,n[s>>2]=l}function BR(s){return s=s|0,n[s>>2]|0}function oUe(s){return s=s|0,o[n[s>>2]>>0]|0}function aUe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,n[f>>2]=n[s>>2],lUe(l,f)|0,C=c}function lUe(s,l){s=s|0,l=l|0;var c=0;return c=cUe(n[s>>2]|0,l)|0,l=s+4|0,n[(n[l>>2]|0)+8>>2]=c,n[(n[l>>2]|0)+8>>2]|0}function cUe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Ka(f),s=da(s)|0,l=uUe(s,n[l>>2]|0)|0,Va(f),C=c,l|0}function Ka(s){s=s|0,n[s>>2]=n[2701],n[s+4>>2]=n[2703]}function uUe(s,l){s=s|0,l=l|0;var c=0;return c=Sl(AUe()|0)|0,Qn(0,c|0,s|0,dR(l)|0)|0}function Va(s){s=s|0,q9(n[s>>2]|0,n[s+4>>2]|0)}function AUe(){var s=0;return o[8096]|0||(fUe(11120),s=8096,n[s>>2]=1,n[s+4>>2]=0),11120}function fUe(s){s=s|0,Pl(s,pUe()|0,1)}function pUe(){return 1948}function hUe(){gUe()}function gUe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0;if(Me=C,C=C+16|0,O=Me+4|0,j=Me,Ni(65536,10804,n[2702]|0,10812),c=B9()|0,l=n[c>>2]|0,s=n[l>>2]|0,s|0)for(f=n[c+8>>2]|0,c=n[c+4>>2]|0;uc(s|0,u[c>>0]|0|0,o[f>>0]|0),l=l+4|0,s=n[l>>2]|0,s;)f=f+1|0,c=c+1|0;if(s=v9()|0,l=n[s>>2]|0,l|0)do uu(l|0,n[s+4>>2]|0),s=s+8|0,l=n[s>>2]|0;while((l|0)!=0);uu(dUe()|0,5167),M=Ym()|0,s=n[M>>2]|0;e:do if(s|0){do mUe(n[s+4>>2]|0),s=n[s>>2]|0;while((s|0)!=0);if(s=n[M>>2]|0,s|0){Q=M;do{for(;d=s,s=n[s>>2]|0,d=n[d+4>>2]|0,!!(yUe(d)|0);)if(n[j>>2]=Q,n[O>>2]=n[j>>2],EUe(M,O)|0,!s)break e;if(CUe(d),Q=n[Q>>2]|0,l=e7(d)|0,m=Hi()|0,B=C,C=C+((1*(l<<2)|0)+15&-16)|0,k=C,C=C+((1*(l<<2)|0)+15&-16)|0,l=n[(L9(d)|0)>>2]|0,l|0)for(c=B,f=k;n[c>>2]=n[(Wm(n[l+4>>2]|0)|0)>>2],n[f>>2]=n[l+8>>2],l=n[l>>2]|0,l;)c=c+4|0,f=f+4|0;Qe=Wm(d)|0,l=wUe(d)|0,c=e7(d)|0,f=IUe(d)|0,Au(Qe|0,l|0,B|0,k|0,c|0,f|0,uR(d)|0),_i(m|0)}while((s|0)!=0)}}while(0);if(s=n[(AR()|0)>>2]|0,s|0)do Qe=s+4|0,M=fR(Qe)|0,d=Ow(M)|0,m=Nw(M)|0,B=(Lw(M)|0)+1|0,k=fD(M)|0,Q=t7(Qe)|0,M=Tr(M)|0,O=cD(Qe)|0,j=vR(Qe)|0,El(0,d|0,m|0,B|0,k|0,Q|0,M|0,O|0,j|0,DR(Qe)|0),s=n[s>>2]|0;while((s|0)!=0);s=n[(Ym()|0)>>2]|0;e:do if(s|0){t:for(;;){if(l=n[s+4>>2]|0,l|0&&(se=n[(Wm(l)|0)>>2]|0,Ge=n[(O9(l)|0)>>2]|0,Ge|0)){c=Ge;do{l=c+4|0,f=fR(l)|0;r:do if(f|0)switch(Tr(f)|0){case 0:break t;case 4:case 3:case 2:{k=Ow(f)|0,Q=Nw(f)|0,M=(Lw(f)|0)+1|0,O=fD(f)|0,j=Tr(f)|0,Qe=cD(l)|0,El(se|0,k|0,Q|0,M|0,O|0,0,j|0,Qe|0,vR(l)|0,DR(l)|0);break r}case 1:{B=Ow(f)|0,k=Nw(f)|0,Q=(Lw(f)|0)+1|0,M=fD(f)|0,O=t7(l)|0,j=Tr(f)|0,Qe=cD(l)|0,El(se|0,B|0,k|0,Q|0,M|0,O|0,j|0,Qe|0,vR(l)|0,DR(l)|0);break r}case 5:{M=Ow(f)|0,O=Nw(f)|0,j=(Lw(f)|0)+1|0,Qe=fD(f)|0,El(se|0,M|0,O|0,j|0,Qe|0,BUe(f)|0,Tr(f)|0,0,0,0);break r}default:break r}while(0);c=n[c>>2]|0}while((c|0)!=0)}if(s=n[s>>2]|0,!s)break e}Rt()}while(0);Ce(),C=Me}function dUe(){return 11703}function mUe(s){s=s|0,o[s+40>>0]=0}function yUe(s){return s=s|0,(o[s+40>>0]|0)!=0|0}function EUe(s,l){return s=s|0,l=l|0,l=vUe(l)|0,s=n[l>>2]|0,n[l>>2]=n[s>>2],gt(s),n[l>>2]|0}function CUe(s){s=s|0,o[s+40>>0]=1}function e7(s){return s=s|0,n[s+20>>2]|0}function wUe(s){return s=s|0,n[s+8>>2]|0}function IUe(s){return s=s|0,n[s+32>>2]|0}function fD(s){return s=s|0,n[s+4>>2]|0}function t7(s){return s=s|0,n[s+4>>2]|0}function vR(s){return s=s|0,n[s+8>>2]|0}function DR(s){return s=s|0,n[s+16>>2]|0}function BUe(s){return s=s|0,n[s+20>>2]|0}function vUe(s){return s=s|0,n[s>>2]|0}function pD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,je=0,Lt=0;Lt=C,C=C+16|0,se=Lt;do if(s>>>0<245){if(M=s>>>0<11?16:s+11&-8,s=M>>>3,j=n[2783]|0,c=j>>>s,c&3|0)return l=(c&1^1)+s|0,s=11172+(l<<1<<2)|0,c=s+8|0,f=n[c>>2]|0,d=f+8|0,m=n[d>>2]|0,(s|0)==(m|0)?n[2783]=j&~(1<>2]=s,n[c>>2]=m),je=l<<3,n[f+4>>2]=je|3,je=f+je+4|0,n[je>>2]=n[je>>2]|1,je=d,C=Lt,je|0;if(O=n[2785]|0,M>>>0>O>>>0){if(c|0)return l=2<>>12&16,l=l>>>B,c=l>>>5&8,l=l>>>c,d=l>>>2&4,l=l>>>d,s=l>>>1&2,l=l>>>s,f=l>>>1&1,f=(c|B|d|s|f)+(l>>>f)|0,l=11172+(f<<1<<2)|0,s=l+8|0,d=n[s>>2]|0,B=d+8|0,c=n[B>>2]|0,(l|0)==(c|0)?(s=j&~(1<>2]=l,n[s>>2]=c,s=j),m=(f<<3)-M|0,n[d+4>>2]=M|3,f=d+M|0,n[f+4>>2]=m|1,n[f+m>>2]=m,O|0&&(d=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=c),n[2785]=m,n[2788]=f,je=B,C=Lt,je|0;if(k=n[2784]|0,k){if(c=(k&0-k)+-1|0,B=c>>>12&16,c=c>>>B,m=c>>>5&8,c=c>>>m,Q=c>>>2&4,c=c>>>Q,f=c>>>1&2,c=c>>>f,s=c>>>1&1,s=n[11436+((m|B|Q|f|s)+(c>>>s)<<2)>>2]|0,c=(n[s+4>>2]&-8)-M|0,f=n[s+16+(((n[s+16>>2]|0)==0&1)<<2)>>2]|0,!f)Q=s,m=c;else{do B=(n[f+4>>2]&-8)-M|0,Q=B>>>0>>0,c=Q?B:c,s=Q?f:s,f=n[f+16+(((n[f+16>>2]|0)==0&1)<<2)>>2]|0;while((f|0)!=0);Q=s,m=c}if(B=Q+M|0,Q>>>0>>0){d=n[Q+24>>2]|0,l=n[Q+12>>2]|0;do if((l|0)==(Q|0)){if(s=Q+20|0,l=n[s>>2]|0,!l&&(s=Q+16|0,l=n[s>>2]|0,!l)){c=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0,c=l}else c=n[Q+8>>2]|0,n[c+12>>2]=l,n[l+8>>2]=c,c=l;while(0);do if(d|0){if(l=n[Q+28>>2]|0,s=11436+(l<<2)|0,(Q|0)==(n[s>>2]|0)){if(n[s>>2]=c,!c){n[2784]=k&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=d,l=n[Q+16>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),l=n[Q+20>>2]|0,l|0&&(n[c+20>>2]=l,n[l+24>>2]=c)}while(0);return m>>>0<16?(je=m+M|0,n[Q+4>>2]=je|3,je=Q+je+4|0,n[je>>2]=n[je>>2]|1):(n[Q+4>>2]=M|3,n[B+4>>2]=m|1,n[B+m>>2]=m,O|0&&(f=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=j|l,l=c,s=c+8|0),n[s>>2]=f,n[l+12>>2]=f,n[f+8>>2]=l,n[f+12>>2]=c),n[2785]=m,n[2788]=B),je=Q+8|0,C=Lt,je|0}else j=M}else j=M}else j=M}else if(s>>>0<=4294967231)if(s=s+11|0,M=s&-8,Q=n[2784]|0,Q){f=0-M|0,s=s>>>8,s?M>>>0>16777215?k=31:(j=(s+1048320|0)>>>16&8,Ue=s<>>16&4,Ue=Ue<>>16&2,k=14-(O|j|k)+(Ue<>>15)|0,k=M>>>(k+7|0)&1|k<<1):k=0,c=n[11436+(k<<2)>>2]|0;e:do if(!c)c=0,s=0,Ue=57;else for(s=0,B=M<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[c+4>>2]&-8)-M|0,d>>>0>>0)if(d)s=c,f=d;else{s=c,f=0,d=c,Ue=61;break e}if(d=n[c+20>>2]|0,c=n[c+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(c|0)?m:d,d=(c|0)==0,d){c=m,Ue=57;break}else B=B<<((d^1)&1)}while(0);if((Ue|0)==57){if((c|0)==0&(s|0)==0){if(s=2<>>12&16,j=j>>>B,m=j>>>5&8,j=j>>>m,k=j>>>2&4,j=j>>>k,O=j>>>1&2,j=j>>>O,c=j>>>1&1,s=0,c=n[11436+((m|B|k|O|c)+(j>>>c)<<2)>>2]|0}c?(d=c,Ue=61):(k=s,B=f)}if((Ue|0)==61)for(;;)if(Ue=0,c=(n[d+4>>2]&-8)-M|0,j=c>>>0>>0,c=j?c:f,s=j?d:s,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)f=c,Ue=61;else{k=s,B=c;break}if((k|0)!=0&&B>>>0<((n[2785]|0)-M|0)>>>0){if(m=k+M|0,k>>>0>=m>>>0)return je=0,C=Lt,je|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(s=k+20|0,l=n[s>>2]|0,!l&&(s=k+16|0,l=n[s>>2]|0,!l)){l=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0}else je=n[k+8>>2]|0,n[je+12>>2]=l,n[l+8>>2]=je;while(0);do if(d){if(s=n[k+28>>2]|0,c=11436+(s<<2)|0,(k|0)==(n[c>>2]|0)){if(n[c>>2]=l,!l){f=Q&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){f=Q;break}n[l+24>>2]=d,s=n[k+16>>2]|0,s|0&&(n[l+16>>2]=s,n[s+24>>2]=l),s=n[k+20>>2]|0,s&&(n[l+20>>2]=s,n[s+24>>2]=l),f=Q}else f=Q;while(0);do if(B>>>0>=16){if(n[k+4>>2]=M|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=c;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(Ue=(l+1048320|0)>>>16&8,je=l<>>16&4,je=je<>>16&2,l=14-(lt|Ue|l)+(je<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,c=11436+(l<<2)|0,n[m+28>>2]=l,s=m+16|0,n[s+4>>2]=0,n[s>>2]=0,s=1<>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}for(s=B<<((l|0)==31?0:25-(l>>>1)|0),c=n[c>>2]|0;;){if((n[c+4>>2]&-8|0)==(B|0)){Ue=97;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=96;break}}if((Ue|0)==96){n[f>>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((Ue|0)==97){Ue=c+8|0,je=n[Ue>>2]|0,n[je+12>>2]=m,n[Ue>>2]=m,n[m+8>>2]=je,n[m+12>>2]=c,n[m+24>>2]=0;break}}else je=B+M|0,n[k+4>>2]=je|3,je=k+je+4|0,n[je>>2]=n[je>>2]|1;while(0);return je=k+8|0,C=Lt,je|0}else j=M}else j=M;else j=-1;while(0);if(c=n[2785]|0,c>>>0>=j>>>0)return l=c-j|0,s=n[2788]|0,l>>>0>15?(je=s+j|0,n[2788]=je,n[2785]=l,n[je+4>>2]=l|1,n[je+l>>2]=l,n[s+4>>2]=j|3):(n[2785]=0,n[2788]=0,n[s+4>>2]=c|3,je=s+c+4|0,n[je>>2]=n[je>>2]|1),je=s+8|0,C=Lt,je|0;if(B=n[2786]|0,B>>>0>j>>>0)return lt=B-j|0,n[2786]=lt,je=n[2789]|0,Ue=je+j|0,n[2789]=Ue,n[Ue+4>>2]=lt|1,n[je+4>>2]=j|3,je=je+8|0,C=Lt,je|0;if(n[2901]|0?s=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,s=se&-16^1431655768,n[se>>2]=s,n[2901]=s,s=4096),k=j+48|0,Q=j+47|0,m=s+Q|0,d=0-s|0,M=m&d,M>>>0<=j>>>0||(s=n[2893]|0,s|0&&(O=n[2891]|0,se=O+M|0,se>>>0<=O>>>0|se>>>0>s>>>0)))return je=0,C=Lt,je|0;e:do if(n[2894]&4)l=0,Ue=133;else{c=n[2789]|0;t:do if(c){for(f=11580;s=n[f>>2]|0,!(s>>>0<=c>>>0&&(Qe=f+4|0,(s+(n[Qe>>2]|0)|0)>>>0>c>>>0));)if(s=n[f+8>>2]|0,s)f=s;else{Ue=118;break t}if(l=m-B&d,l>>>0<2147483647)if(s=Qp(l|0)|0,(s|0)==((n[f>>2]|0)+(n[Qe>>2]|0)|0)){if((s|0)!=-1){B=l,m=s,Ue=135;break e}}else f=s,Ue=126;else l=0}else Ue=118;while(0);do if((Ue|0)==118)if(c=Qp(0)|0,(c|0)!=-1&&(l=c,Ge=n[2902]|0,Me=Ge+-1|0,l=((Me&l|0)==0?0:(Me+l&0-Ge)-l|0)+M|0,Ge=n[2891]|0,Me=l+Ge|0,l>>>0>j>>>0&l>>>0<2147483647)){if(Qe=n[2893]|0,Qe|0&&Me>>>0<=Ge>>>0|Me>>>0>Qe>>>0){l=0;break}if(s=Qp(l|0)|0,(s|0)==(c|0)){B=l,m=c,Ue=135;break e}else f=s,Ue=126}else l=0;while(0);do if((Ue|0)==126){if(c=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(f|0)!=-1)))if((f|0)==-1){l=0;break}else{B=l,m=f,Ue=135;break e}if(s=n[2903]|0,s=Q-l+s&0-s,s>>>0>=2147483647){B=l,m=f,Ue=135;break e}if((Qp(s|0)|0)==-1){Qp(c|0)|0,l=0;break}else{B=s+l|0,m=f,Ue=135;break e}}while(0);n[2894]=n[2894]|4,Ue=133}while(0);if((Ue|0)==133&&M>>>0<2147483647&&(lt=Qp(M|0)|0,Qe=Qp(0)|0,et=Qe-lt|0,Xe=et>>>0>(j+40|0)>>>0,!((lt|0)==-1|Xe^1|lt>>>0>>0&((lt|0)!=-1&(Qe|0)!=-1)^1))&&(B=Xe?et:l,m=lt,Ue=135),(Ue|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),Q=n[2789]|0;do if(Q){for(l=11580;;){if(s=n[l>>2]|0,c=l+4|0,f=n[c>>2]|0,(m|0)==(s+f|0)){Ue=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((Ue|0)==145&&(n[l+12>>2]&8|0)==0&&Q>>>0>>0&Q>>>0>=s>>>0){n[c>>2]=f+B,je=Q+8|0,je=(je&7|0)==0?0:0-je&7,Ue=Q+je|0,je=(n[2786]|0)+(B-je)|0,n[2789]=Ue,n[2786]=je,n[Ue+4>>2]=je|1,n[Ue+je+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),c=m+B|0,l=11580;;){if((n[l>>2]|0)==(c|0)){Ue=153;break}if(s=n[l+8>>2]|0,s)l=s;else break}if((Ue|0)==153&&(n[l+12>>2]&8|0)==0){n[l>>2]=m,O=l+4|0,n[O>>2]=(n[O>>2]|0)+B,O=m+8|0,O=m+((O&7|0)==0?0:0-O&7)|0,l=c+8|0,l=c+((l&7|0)==0?0:0-l&7)|0,M=O+j|0,k=l-O-j|0,n[O+4>>2]=j|3;do if((l|0)!=(Q|0)){if((l|0)==(n[2788]|0)){je=(n[2785]|0)+k|0,n[2785]=je,n[2788]=M,n[M+4>>2]=je|1,n[M+je>>2]=je;break}if(s=n[l+4>>2]|0,(s&3|0)==1){B=s&-8,f=s>>>3;e:do if(s>>>0<256)if(s=n[l+8>>2]|0,c=n[l+12>>2]|0,(c|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=c,n[c+8>>2]=s;break}else{m=n[l+24>>2]|0,s=n[l+12>>2]|0;do if((s|0)==(l|0)){if(f=l+16|0,c=f+4|0,s=n[c>>2]|0,!s)if(s=n[f>>2]|0,s)c=f;else{s=0;break}for(;;){if(f=s+20|0,d=n[f>>2]|0,d|0){s=d,c=f;continue}if(f=s+16|0,d=n[f>>2]|0,d)s=d,c=f;else break}n[c>>2]=0}else je=n[l+8>>2]|0,n[je+12>>2]=s,n[s+8>>2]=je;while(0);if(!m)break;c=n[l+28>>2]|0,f=11436+(c<<2)|0;do if((l|0)!=(n[f>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=s,!s)break e}else{if(n[f>>2]=s,s|0)break;n[2784]=n[2784]&~(1<>2]=m,c=l+16|0,f=n[c>>2]|0,f|0&&(n[s+16>>2]=f,n[f+24>>2]=s),c=n[c+4>>2]|0,!c)break;n[s+20>>2]=c,n[c+24>>2]=s}while(0);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[M+4>>2]=d|1,n[M+d>>2]=d,l=d>>>3,d>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=M,n[l+12>>2]=M,n[M+8>>2]=l,n[M+12>>2]=c;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}Ue=(l+1048320|0)>>>16&8,je=l<>>16&4,je=je<>>16&2,l=14-(lt|Ue|l)+(je<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(0);if(f=11436+(l<<2)|0,n[M+28>>2]=l,s=M+16|0,n[s+4>>2]=0,n[s>>2]=0,s=n[2784]|0,c=1<>2]=M,n[M+24>>2]=f,n[M+12>>2]=M,n[M+8>>2]=M;break}for(s=d<<((l|0)==31?0:25-(l>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){Ue=194;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=193;break}}if((Ue|0)==193){n[f>>2]=M,n[M+24>>2]=c,n[M+12>>2]=M,n[M+8>>2]=M;break}else if((Ue|0)==194){Ue=c+8|0,je=n[Ue>>2]|0,n[je+12>>2]=M,n[Ue>>2]=M,n[M+8>>2]=je,n[M+12>>2]=c,n[M+24>>2]=0;break}}else je=(n[2786]|0)+k|0,n[2786]=je,n[2789]=M,n[M+4>>2]=je|1;while(0);return je=O+8|0,C=Lt,je|0}for(l=11580;s=n[l>>2]|0,!(s>>>0<=Q>>>0&&(je=s+(n[l+4>>2]|0)|0,je>>>0>Q>>>0));)l=n[l+8>>2]|0;d=je+-47|0,s=d+8|0,s=d+((s&7|0)==0?0:0-s&7)|0,d=Q+16|0,s=s>>>0>>0?Q:s,l=s+8|0,c=m+8|0,c=(c&7|0)==0?0:0-c&7,Ue=m+c|0,c=B+-40-c|0,n[2789]=Ue,n[2786]=c,n[Ue+4>>2]=c|1,n[Ue+c+4>>2]=40,n[2790]=n[2905],c=s+4|0,n[c>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=s+24|0;do Ue=l,l=l+4|0,n[l>>2]=7;while((Ue+8|0)>>>0>>0);if((s|0)!=(Q|0)){if(m=s-Q|0,n[c>>2]=n[c>>2]&-2,n[Q+4>>2]=m|1,n[s>>2]=m,l=m>>>3,m>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=Q,n[l+12>>2]=Q,n[Q+8>>2]=l,n[Q+12>>2]=c;break}if(l=m>>>8,l?m>>>0>16777215?c=31:(Ue=(l+1048320|0)>>>16&8,je=l<>>16&4,je=je<>>16&2,c=14-(lt|Ue|c)+(je<>>15)|0,c=m>>>(c+7|0)&1|c<<1):c=0,f=11436+(c<<2)|0,n[Q+28>>2]=c,n[Q+20>>2]=0,n[d>>2]=0,l=n[2784]|0,s=1<>2]=Q,n[Q+24>>2]=f,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}for(s=m<<((c|0)==31?0:25-(c>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(m|0)){Ue=216;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=215;break}}if((Ue|0)==215){n[f>>2]=Q,n[Q+24>>2]=c,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}else if((Ue|0)==216){Ue=c+8|0,je=n[Ue>>2]|0,n[je+12>>2]=Q,n[Ue>>2]=Q,n[Q+8>>2]=je,n[Q+12>>2]=c,n[Q+24>>2]=0;break}}}else{je=n[2787]|0,(je|0)==0|m>>>0>>0&&(n[2787]=m),n[2895]=m,n[2896]=B,n[2898]=0,n[2792]=n[2901],n[2791]=-1,l=0;do je=11172+(l<<1<<2)|0,n[je+12>>2]=je,n[je+8>>2]=je,l=l+1|0;while((l|0)!=32);je=m+8|0,je=(je&7|0)==0?0:0-je&7,Ue=m+je|0,je=B+-40-je|0,n[2789]=Ue,n[2786]=je,n[Ue+4>>2]=je|1,n[Ue+je+4>>2]=40,n[2790]=n[2905]}while(0);if(l=n[2786]|0,l>>>0>j>>>0)return lt=l-j|0,n[2786]=lt,je=n[2789]|0,Ue=je+j|0,n[2789]=Ue,n[Ue+4>>2]=lt|1,n[je+4>>2]=j|3,je=je+8|0,C=Lt,je|0}return n[(Vm()|0)>>2]=12,je=0,C=Lt,je|0}function hD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(!!s){c=s+-8|0,d=n[2787]|0,s=n[s+-4>>2]|0,l=s&-8,Q=c+l|0;do if(s&1)k=c,B=c;else{if(f=n[c>>2]|0,!(s&3)||(B=c+(0-f)|0,m=f+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(s=Q+4|0,l=n[s>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[s>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(c=f>>>3,f>>>0<256)if(s=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=s,k=B,l=m;break}d=n[B+24>>2]|0,s=n[B+12>>2]|0;do if((s|0)==(B|0)){if(c=B+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{s=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=s,n[s+8>>2]=k;while(0);if(d){if(l=n[B+28>>2]|0,c=11436+(l<<2)|0,(B|0)==(n[c>>2]|0)){if(n[c>>2]=s,!s){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=s,!s){k=B,l=m;break}n[s+24>>2]=d,l=B+16|0,c=n[l>>2]|0,c|0&&(n[s+16>>2]=c,n[c+24>>2]=s),l=n[l+4>>2]|0,l?(n[s+20>>2]=l,n[l+24>>2]=s,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(0);if(!(B>>>0>=Q>>>0)&&(s=Q+4|0,f=n[s>>2]|0,!!(f&1))){if(f&2)n[s>>2]=f&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(s=n[2788]|0,(Q|0)==(n[2789]|0)){if(Q=(n[2786]|0)+l|0,n[2786]=Q,n[2789]=k,n[k+4>>2]=Q|1,(k|0)!=(s|0))return;n[2788]=0,n[2785]=0;return}if((Q|0)==(s|0)){Q=(n[2785]|0)+l|0,n[2785]=Q,n[2788]=B,n[k+4>>2]=Q|1,n[B+Q>>2]=Q;return}d=(f&-8)+l|0,c=f>>>3;do if(f>>>0<256)if(l=n[Q+8>>2]|0,s=n[Q+12>>2]|0,(s|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=s,n[s+8>>2]=l;break}else{m=n[Q+24>>2]|0,s=n[Q+12>>2]|0;do if((s|0)==(Q|0)){if(c=Q+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{c=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0,c=s}else c=n[Q+8>>2]|0,n[c+12>>2]=s,n[s+8>>2]=c,c=s;while(0);if(m|0){if(s=n[Q+28>>2]|0,l=11436+(s<<2)|0,(Q|0)==(n[l>>2]|0)){if(n[l>>2]=c,!c){n[2784]=n[2784]&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=m,s=Q+16|0,l=n[s>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),s=n[s+4>>2]|0,s|0&&(n[c+20>>2]=s,n[s+24>>2]=c)}}while(0);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(s=d>>>3,d>>>0<256){c=11172+(s<<1<<2)|0,l=n[2783]|0,s=1<>2]|0):(n[2783]=l|s,s=c,l=c+8|0),n[l>>2]=k,n[s+12>>2]=k,n[k+8>>2]=s,n[k+12>>2]=c;return}s=d>>>8,s?d>>>0>16777215?s=31:(B=(s+1048320|0)>>>16&8,Q=s<>>16&4,Q=Q<>>16&2,s=14-(m|B|s)+(Q<>>15)|0,s=d>>>(s+7|0)&1|s<<1):s=0,f=11436+(s<<2)|0,n[k+28>>2]=s,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,c=1<>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){s=73;break}if(f=c+16+(l>>>31<<2)|0,s=n[f>>2]|0,s)l=l<<1,c=s;else{s=72;break}}if((s|0)==72){n[f>>2]=k,n[k+24>>2]=c,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((s|0)==73){B=c+8|0,Q=n[B>>2]|0,n[Q+12>>2]=k,n[B>>2]=k,n[k+8>>2]=Q,n[k+12>>2]=c,n[k+24>>2]=0;break}}else n[2784]=l|c,n[f>>2]=k,n[k+24>>2]=f,n[k+12>>2]=k,n[k+8>>2]=k;while(0);if(Q=(n[2791]|0)+-1|0,n[2791]=Q,!Q)s=11588;else return;for(;s=n[s>>2]|0,s;)s=s+8|0;n[2791]=-1}}}function DUe(){return 11628}function SUe(s){s=s|0;var l=0,c=0;return l=C,C=C+16|0,c=l,n[c>>2]=xUe(n[s+60>>2]|0)|0,s=gD(hc(6,c|0)|0)|0,C=l,s|0}function r7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0;j=C,C=C+48|0,M=j+16|0,m=j,d=j+32|0,k=s+28|0,f=n[k>>2]|0,n[d>>2]=f,Q=s+20|0,f=(n[Q>>2]|0)-f|0,n[d+4>>2]=f,n[d+8>>2]=l,n[d+12>>2]=c,f=f+c|0,B=s+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=gD(Li(146,m|0)|0)|0;e:do if((f|0)!=(m|0)){for(l=2;!((m|0)<0);)if(f=f-m|0,Ge=n[d+4>>2]|0,se=m>>>0>Ge>>>0,d=se?d+8|0:d,l=(se<<31>>31)+l|0,Ge=m-(se?Ge:0)|0,n[d>>2]=(n[d>>2]|0)+Ge,se=d+4|0,n[se>>2]=(n[se>>2]|0)-Ge,n[M>>2]=n[B>>2],n[M+4>>2]=d,n[M+8>>2]=l,m=gD(Li(146,M|0)|0)|0,(f|0)==(m|0)){O=3;break e}n[s+16>>2]=0,n[k>>2]=0,n[Q>>2]=0,n[s>>2]=n[s>>2]|32,(l|0)==2?c=0:c=c-(n[d+4>>2]|0)|0}else O=3;while(0);return(O|0)==3&&(Ge=n[s+44>>2]|0,n[s+16>>2]=Ge+(n[s+48>>2]|0),n[k>>2]=Ge,n[Q>>2]=Ge),C=j,c|0}function PUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return d=C,C=C+32|0,m=d,f=d+20|0,n[m>>2]=n[s+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=f,n[m+16>>2]=c,(gD(sa(140,m|0)|0)|0)<0?(n[f>>2]=-1,s=-1):s=n[f>>2]|0,C=d,s|0}function gD(s){return s=s|0,s>>>0>4294963200&&(n[(Vm()|0)>>2]=0-s,s=-1),s|0}function Vm(){return(bUe()|0)+64|0}function bUe(){return SR()|0}function SR(){return 2084}function xUe(s){return s=s|0,s|0}function kUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return d=C,C=C+32|0,f=d,n[s+36>>2]=1,(n[s>>2]&64|0)==0&&(n[f>>2]=n[s+60>>2],n[f+4>>2]=21523,n[f+8>>2]=d+16,fu(54,f|0)|0)&&(o[s+75>>0]=-1),f=r7(s,l,c)|0,C=d,f|0}function n7(s,l){s=s|0,l=l|0;var c=0,f=0;if(c=o[s>>0]|0,f=o[l>>0]|0,c<<24>>24==0||c<<24>>24!=f<<24>>24)s=f;else{do s=s+1|0,l=l+1|0,c=o[s>>0]|0,f=o[l>>0]|0;while(!(c<<24>>24==0||c<<24>>24!=f<<24>>24));s=f}return(c&255)-(s&255)|0}function QUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;e:do if(!c)s=0;else{for(;f=o[s>>0]|0,d=o[l>>0]|0,f<<24>>24==d<<24>>24;)if(c=c+-1|0,c)s=s+1|0,l=l+1|0;else{s=0;break e}s=(f&255)-(d&255)|0}while(0);return s|0}function i7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0;Qe=C,C=C+224|0,O=Qe+120|0,j=Qe+80|0,Ge=Qe,Me=Qe+136|0,f=j,d=f+40|0;do n[f>>2]=0,f=f+4|0;while((f|0)<(d|0));return n[O>>2]=n[c>>2],(PR(0,l,O,Ge,j)|0)<0?c=-1:((n[s+76>>2]|0)>-1?se=FUe(s)|0:se=0,c=n[s>>2]|0,M=c&32,(o[s+74>>0]|0)<1&&(n[s>>2]=c&-33),f=s+48|0,n[f>>2]|0?c=PR(s,l,O,Ge,j)|0:(d=s+44|0,m=n[d>>2]|0,n[d>>2]=Me,B=s+28|0,n[B>>2]=Me,k=s+20|0,n[k>>2]=Me,n[f>>2]=80,Q=s+16|0,n[Q>>2]=Me+80,c=PR(s,l,O,Ge,j)|0,m&&(ED[n[s+36>>2]&7](s,0,0)|0,c=(n[k>>2]|0)==0?-1:c,n[d>>2]=m,n[f>>2]=0,n[Q>>2]=0,n[B>>2]=0,n[k>>2]=0)),f=n[s>>2]|0,n[s>>2]=f|M,se|0&&RUe(s),c=(f&32|0)==0?c:-1),C=Qe,c|0}function PR(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,je=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0;ir=C,C=C+64|0,or=ir+16|0,Xt=ir,Lt=ir+24|0,Sr=ir+8|0,Nr=ir+20|0,n[or>>2]=l,lt=(s|0)!=0,Ue=Lt+40|0,je=Ue,Lt=Lt+39|0,Mr=Sr+4|0,B=0,m=0,O=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(Vm()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(0);if(B=o[l>>0]|0,B<<24>>24)k=l;else{Xe=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Xe=9;break t}case 0:{B=k;break t}default:}et=k+1|0,n[or>>2]=et,B=o[et>>0]|0,k=et}t:do if((Xe|0)==9)for(;;){if(Xe=0,(o[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[or>>2]=k,(o[k>>0]|0)==37)Xe=9;else break}while(0);if(B=B-l|0,lt&&ss(s,l,B),B|0){l=k;continue}Q=k+1|0,B=(o[Q>>0]|0)+-48|0,B>>>0<10?(et=(o[k+2>>0]|0)==36,Qe=et?B:-1,O=et?1:O,Q=et?k+3|0:Q):Qe=-1,n[or>>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(M=0,j=B;;){if(B=1<>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;j=B}else M=0;while(0);if(B<<24>>24==42){if(k=Q+1|0,B=(o[k>>0]|0)+-48|0,B>>>0<10&&(o[Q+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[f+((o[k>>0]|0)+-48<<3)>>2]|0,O=1,Q=Q+3|0;else{if(O|0){m=-1;break}lt?(O=(n[c>>2]|0)+(4-1)&~(4-1),B=n[O>>2]|0,n[c>>2]=O+4,O=0,Q=k):(B=0,O=0,Q=k)}n[or>>2]=Q,et=(B|0)<0,B=et?0-B|0:B,M=et?M|8192:M}else{if(B=s7(or)|0,(B|0)<0){m=-1;break}Q=n[or>>2]|0}do if((o[Q>>0]|0)==46){if((o[Q+1>>0]|0)!=42){n[or>>2]=Q+1,k=s7(or)|0,Q=n[or>>2]|0;break}if(j=Q+2|0,k=(o[j>>0]|0)+-48|0,k>>>0<10&&(o[Q+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[f+((o[j>>0]|0)+-48<<3)>>2]|0,Q=Q+4|0,n[or>>2]=Q;break}if(O|0){m=-1;break e}lt?(et=(n[c>>2]|0)+(4-1)&~(4-1),k=n[et>>2]|0,n[c>>2]=et+4):k=0,n[or>>2]=j,Q=j}else k=-1;while(0);for(Me=0;;){if(((o[Q>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(et=Q+1|0,n[or>>2]=et,j=o[(o[Q>>0]|0)+-65+(5178+(Me*58|0))>>0]|0,se=j&255,(se+-1|0)>>>0<8)Me=se,Q=et;else break}if(!(j<<24>>24)){m=-1;break}Ge=(Qe|0)>-1;do if(j<<24>>24==19)if(Ge){m=-1;break e}else Xe=49;else{if(Ge){n[d+(Qe<<2)>>2]=se,Ge=f+(Qe<<3)|0,Qe=n[Ge+4>>2]|0,Xe=Xt,n[Xe>>2]=n[Ge>>2],n[Xe+4>>2]=Qe,Xe=49;break}if(!lt){m=0;break e}o7(Xt,se,c)}while(0);if((Xe|0)==49&&(Xe=0,!lt)){B=0,l=et;continue}Q=o[Q>>0]|0,Q=(Me|0)!=0&(Q&15|0)==3?Q&-33:Q,Ge=M&-65537,Qe=(M&8192|0)==0?M:Ge;t:do switch(Q|0){case 110:switch((Me&255)<<24>>24){case 0:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 1:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 2:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}case 3:{a[n[Xt>>2]>>1]=m,B=0,l=et;continue e}case 4:{o[n[Xt>>2]>>0]=m,B=0,l=et;continue e}case 6:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 7:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}default:{B=0,l=et;continue e}}case 112:{Q=120,k=k>>>0>8?k:8,l=Qe|8,Xe=61;break}case 88:case 120:{l=Qe,Xe=61;break}case 111:{Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,se=NUe(l,Q,Ue)|0,Ge=je-se|0,M=0,j=5642,k=(Qe&8|0)==0|(k|0)>(Ge|0)?k:Ge+1|0,Ge=Qe,Xe=67;break}case 105:case 100:if(Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,(Q|0)<0){l=dD(0,0,l|0,Q|0)|0,Q=Se,M=Xt,n[M>>2]=l,n[M+4>>2]=Q,M=1,j=5642,Xe=66;break t}else{M=(Qe&2049|0)!=0&1,j=(Qe&2048|0)==0?(Qe&1|0)==0?5642:5644:5643,Xe=66;break t}case 117:{Q=Xt,M=0,j=5642,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,Xe=66;break}case 99:{o[Lt>>0]=n[Xt>>2],l=Lt,M=0,j=5642,se=Ue,Q=1,k=Ge;break}case 109:{Q=LUe(n[(Vm()|0)>>2]|0)|0,Xe=71;break}case 115:{Q=n[Xt>>2]|0,Q=Q|0?Q:5652,Xe=71;break}case 67:{n[Sr>>2]=n[Xt>>2],n[Mr>>2]=0,n[Xt>>2]=Sr,se=-1,Q=Sr,Xe=75;break}case 83:{l=n[Xt>>2]|0,k?(se=k,Q=l,Xe=75):(Bs(s,32,B,0,Qe),l=0,Xe=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=MUe(s,+E[Xt>>3],B,k,Qe,Q)|0,l=et;continue e}default:M=0,j=5642,se=Ue,Q=k,k=Qe}while(0);t:do if((Xe|0)==61)Qe=Xt,Me=n[Qe>>2]|0,Qe=n[Qe+4>>2]|0,se=TUe(Me,Qe,Ue,Q&32)|0,j=(l&8|0)==0|(Me|0)==0&(Qe|0)==0,M=j?0:2,j=j?5642:5642+(Q>>4)|0,Ge=l,l=Me,Q=Qe,Xe=67;else if((Xe|0)==66)se=Jm(l,Q,Ue)|0,Ge=Qe,Xe=67;else if((Xe|0)==71)Xe=0,Qe=OUe(Q,0,k)|0,Me=(Qe|0)==0,l=Q,M=0,j=5642,se=Me?Q+k|0:Qe,Q=Me?k:Qe-Q|0,k=Ge;else if((Xe|0)==75){for(Xe=0,j=Q,l=0,k=0;M=n[j>>2]|0,!(!M||(k=a7(Nr,M)|0,(k|0)<0|k>>>0>(se-l|0)>>>0));)if(l=k+l|0,se>>>0>l>>>0)j=j+4|0;else break;if((k|0)<0){m=-1;break e}if(Bs(s,32,B,l,Qe),!l)l=0,Xe=84;else for(M=0;;){if(k=n[Q>>2]|0,!k){Xe=84;break t}if(k=a7(Nr,k)|0,M=k+M|0,(M|0)>(l|0)){Xe=84;break t}if(ss(s,Nr,k),M>>>0>=l>>>0){Xe=84;break}else Q=Q+4|0}}while(0);if((Xe|0)==67)Xe=0,Q=(l|0)!=0|(Q|0)!=0,Qe=(k|0)!=0|Q,Q=((Q^1)&1)+(je-se)|0,l=Qe?se:Ue,se=Ue,Q=Qe?(k|0)>(Q|0)?k:Q:k,k=(k|0)>-1?Ge&-65537:Ge;else if((Xe|0)==84){Xe=0,Bs(s,32,B,l,Qe^8192),B=(B|0)>(l|0)?B:l,l=et;continue}Me=se-l|0,Ge=(Q|0)<(Me|0)?Me:Q,Qe=Ge+M|0,B=(B|0)<(Qe|0)?Qe:B,Bs(s,32,B,Qe,k),ss(s,j,M),Bs(s,48,B,Qe,k^65536),Bs(s,48,Ge,Me,0),ss(s,l,Me),Bs(s,32,B,Qe,k^8192),l=et}e:do if((Xe|0)==87&&!s)if(!O)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(o7(f+(m<<3)|0,l,c),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(0);return C=ir,m|0}function FUe(s){return s=s|0,0}function RUe(s){s=s|0}function ss(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]&32||KUe(l,c,s)|0}function s7(s){s=s|0;var l=0,c=0,f=0;if(c=n[s>>2]|0,f=(o[c>>0]|0)+-48|0,f>>>0<10){l=0;do l=f+(l*10|0)|0,c=c+1|0,n[s>>2]=c,f=(o[c>>0]|0)+-48|0;while(f>>>0<10)}else l=0;return l|0}function o7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,n[s>>2]=l;break e}case 10:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=0;break e}case 12:{f=(n[c>>2]|0)+(8-1)&~(8-1),l=f,d=n[l>>2]|0,l=n[l+4>>2]|0,n[c>>2]=f+8,f=s,n[f>>2]=d,n[f+4>>2]=l;break e}case 13:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&65535)<<16>>16,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 14:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&65535,n[d+4>>2]=0;break e}case 15:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&255)<<24>>24,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 16:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&255,n[d+4>>2]=0;break e}case 17:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}case 18:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}default:break e}while(0);while(0)}function TUe(s,l,c,f){if(s=s|0,l=l|0,c=c|0,f=f|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=u[5694+(s&15)>>0]|0|f,s=mD(s|0,l|0,4)|0,l=Se;while(!((s|0)==0&(l|0)==0));return c|0}function NUe(s,l,c){if(s=s|0,l=l|0,c=c|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=s&7|48,s=mD(s|0,l|0,3)|0,l=Se;while(!((s|0)==0&(l|0)==0));return c|0}function Jm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if(l>>>0>0|(l|0)==0&s>>>0>4294967295){for(;f=QR(s|0,l|0,10,0)|0,c=c+-1|0,o[c>>0]=f&255|48,f=s,s=kR(s|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&f>>>0>4294967295;)l=Se;l=s}else l=s;if(l)for(;c=c+-1|0,o[c>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return c|0}function LUe(s){return s=s|0,jUe(s,n[(qUe()|0)+188>>2]|0)|0}function OUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;m=l&255,f=(c|0)!=0;e:do if(f&(s&3|0)!=0)for(d=l&255;;){if((o[s>>0]|0)==d<<24>>24){B=6;break e}if(s=s+1|0,c=c+-1|0,f=(c|0)!=0,!(f&(s&3|0)!=0)){B=5;break}}else B=5;while(0);(B|0)==5&&(f?B=6:c=0);e:do if((B|0)==6&&(d=l&255,(o[s>>0]|0)!=d<<24>>24)){f=qe(m,16843009)|0;t:do if(c>>>0>3){for(;m=n[s>>2]^f,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(s=s+4|0,c=c+-4|0,c>>>0<=3){B=11;break t}}else B=11;while(0);if((B|0)==11&&!c){c=0;break}for(;;){if((o[s>>0]|0)==d<<24>>24)break e;if(s=s+1|0,c=c+-1|0,!c){c=0;break}}}while(0);return(c|0?s:0)|0}function Bs(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0;if(B=C,C=C+256|0,m=B,(c|0)>(f|0)&(d&73728|0)==0){if(d=c-f|0,Xm(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=c-f|0;do ss(s,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}ss(s,m,d)}C=B}function a7(s,l){return s=s|0,l=l|0,s?s=_Ue(s,l,0)|0:s=0,s|0}function MUe(s,l,c,f,d,m){s=s|0,l=+l,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,je=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0,xn=0;xn=C,C=C+560|0,Q=xn+8|0,et=xn,ir=xn+524|0,Nr=ir,M=xn+512|0,n[et>>2]=0,Sr=M+12|0,l7(l)|0,(Se|0)<0?(l=-l,or=1,Mr=5659):(or=(d&2049|0)!=0&1,Mr=(d&2048|0)==0?(d&1|0)==0?5660:5665:5662),l7(l)|0,Xt=Se&2146435072;do if(Xt>>>0<2146435072|(Xt|0)==2146435072&0<0){if(Ge=+UUe(l,et)*2,B=Ge!=0,B&&(n[et>>2]=(n[et>>2]|0)+-1),lt=m|32,(lt|0)==97){Me=m&32,se=(Me|0)==0?Mr:Mr+9|0,j=or|2,B=12-f|0;do if(f>>>0>11|(B|0)==0)l=Ge;else{l=8;do B=B+-1|0,l=l*16;while((B|0)!=0);if((o[se>>0]|0)==45){l=-(l+(-Ge-l));break}else{l=Ge+l-l;break}}while(0);k=n[et>>2]|0,B=(k|0)<0?0-k|0:k,B=Jm(B,((B|0)<0)<<31>>31,Sr)|0,(B|0)==(Sr|0)&&(B=M+11|0,o[B>>0]=48),o[B+-1>>0]=(k>>31&2)+43,O=B+-2|0,o[O>>0]=m+15,M=(f|0)<1,Q=(d&8|0)==0,B=ir;do Xt=~~l,k=B+1|0,o[B>>0]=u[5694+Xt>>0]|Me,l=(l-+(Xt|0))*16,(k-Nr|0)==1&&!(Q&(M&l==0))?(o[k>>0]=46,B=B+2|0):B=k;while(l!=0);Xt=B-Nr|0,Nr=Sr-O|0,Sr=(f|0)!=0&(Xt+-2|0)<(f|0)?f+2|0:Xt,B=Nr+j+Sr|0,Bs(s,32,c,B,d),ss(s,se,j),Bs(s,48,c,B,d^65536),ss(s,ir,Xt),Bs(s,48,Sr-Xt|0,0,0),ss(s,O,Nr),Bs(s,32,c,B,d^8192);break}k=(f|0)<0?6:f,B?(B=(n[et>>2]|0)+-28|0,n[et>>2]=B,l=Ge*268435456):(l=Ge,B=n[et>>2]|0),Xt=(B|0)<0?Q:Q+288|0,Q=Xt;do je=~~l>>>0,n[Q>>2]=je,Q=Q+4|0,l=(l-+(je>>>0))*1e9;while(l!=0);if((B|0)>0)for(M=Xt,j=Q;;){if(O=(B|0)<29?B:29,B=j+-4|0,B>>>0>=M>>>0){Q=0;do Ue=h7(n[B>>2]|0,0,O|0)|0,Ue=xR(Ue|0,Se|0,Q|0,0)|0,je=Se,Xe=QR(Ue|0,je|0,1e9,0)|0,n[B>>2]=Xe,Q=kR(Ue|0,je|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=M>>>0);Q&&(M=M+-4|0,n[M>>2]=Q)}for(Q=j;!(Q>>>0<=M>>>0);)if(B=Q+-4|0,!(n[B>>2]|0))Q=B;else break;if(B=(n[et>>2]|0)-O|0,n[et>>2]=B,(B|0)>0)j=Q;else break}else M=Xt;if((B|0)<0){f=((k+25|0)/9|0)+1|0,Qe=(lt|0)==102;do{if(Me=0-B|0,Me=(Me|0)<9?Me:9,M>>>0>>0){O=(1<>>Me,se=0,B=M;do je=n[B>>2]|0,n[B>>2]=(je>>>Me)+se,se=qe(je&O,j)|0,B=B+4|0;while(B>>>0>>0);B=(n[M>>2]|0)==0?M+4|0:M,se?(n[Q>>2]=se,M=B,B=Q+4|0):(M=B,B=Q)}else M=(n[M>>2]|0)==0?M+4|0:M,B=Q;Q=Qe?Xt:M,Q=(B-Q>>2|0)>(f|0)?Q+(f<<2)|0:B,B=(n[et>>2]|0)+Me|0,n[et>>2]=B}while((B|0)<0);B=M,f=Q}else B=M,f=Q;if(je=Xt,B>>>0>>0){if(Q=(je-B>>2)*9|0,O=n[B>>2]|0,O>>>0>=10){M=10;do M=M*10|0,Q=Q+1|0;while(O>>>0>=M>>>0)}}else Q=0;if(Qe=(lt|0)==103,Xe=(k|0)!=0,M=k-((lt|0)!=102?Q:0)+((Xe&Qe)<<31>>31)|0,(M|0)<(((f-je>>2)*9|0)+-9|0)){if(M=M+9216|0,Me=Xt+4+(((M|0)/9|0)+-1024<<2)|0,M=((M|0)%9|0)+1|0,(M|0)<9){O=10;do O=O*10|0,M=M+1|0;while((M|0)!=9)}else O=10;if(j=n[Me>>2]|0,se=(j>>>0)%(O>>>0)|0,M=(Me+4|0)==(f|0),M&(se|0)==0)M=Me;else if(Ge=(((j>>>0)/(O>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Ue=(O|0)/2|0,l=se>>>0>>0?.5:M&(se|0)==(Ue|0)?1:1.5,or&&(Ue=(o[Mr>>0]|0)==45,l=Ue?-l:l,Ge=Ue?-Ge:Ge),M=j-se|0,n[Me>>2]=M,Ge+l!=Ge){if(Ue=M+O|0,n[Me>>2]=Ue,Ue>>>0>999999999)for(Q=Me;M=Q+-4|0,n[Q>>2]=0,M>>>0>>0&&(B=B+-4|0,n[B>>2]=0),Ue=(n[M>>2]|0)+1|0,n[M>>2]=Ue,Ue>>>0>999999999;)Q=M;else M=Me;if(Q=(je-B>>2)*9|0,j=n[B>>2]|0,j>>>0>=10){O=10;do O=O*10|0,Q=Q+1|0;while(j>>>0>=O>>>0)}}else M=Me;M=M+4|0,M=f>>>0>M>>>0?M:f,Ue=B}else M=f,Ue=B;for(lt=M;;){if(lt>>>0<=Ue>>>0){et=0;break}if(B=lt+-4|0,!(n[B>>2]|0))lt=B;else{et=1;break}}f=0-Q|0;do if(Qe)if(B=((Xe^1)&1)+k|0,(B|0)>(Q|0)&(Q|0)>-5?(O=m+-1|0,k=B+-1-Q|0):(O=m+-2|0,k=B+-1|0),B=d&8,B)Me=B;else{if(et&&(Lt=n[lt+-4>>2]|0,(Lt|0)!=0))if((Lt>>>0)%10|0)M=0;else{M=0,B=10;do B=B*10|0,M=M+1|0;while(!((Lt>>>0)%(B>>>0)|0|0))}else M=9;if(B=((lt-je>>2)*9|0)+-9|0,(O|32|0)==102){Me=B-M|0,Me=(Me|0)>0?Me:0,k=(k|0)<(Me|0)?k:Me,Me=0;break}else{Me=B+Q-M|0,Me=(Me|0)>0?Me:0,k=(k|0)<(Me|0)?k:Me,Me=0;break}}else O=m,Me=d&8;while(0);if(Qe=k|Me,j=(Qe|0)!=0&1,se=(O|32|0)==102,se)Xe=0,B=(Q|0)>0?Q:0;else{if(B=(Q|0)<0?f:Q,B=Jm(B,((B|0)<0)<<31>>31,Sr)|0,M=Sr,(M-B|0)<2)do B=B+-1|0,o[B>>0]=48;while((M-B|0)<2);o[B+-1>>0]=(Q>>31&2)+43,B=B+-2|0,o[B>>0]=O,Xe=B,B=M-B|0}if(B=or+1+k+j+B|0,Bs(s,32,c,B,d),ss(s,Mr,or),Bs(s,48,c,B,d^65536),se){O=Ue>>>0>Xt>>>0?Xt:Ue,Me=ir+9|0,j=Me,se=ir+8|0,M=O;do{if(Q=Jm(n[M>>2]|0,0,Me)|0,(M|0)==(O|0))(Q|0)==(Me|0)&&(o[se>>0]=48,Q=se);else if(Q>>>0>ir>>>0){Xm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}ss(s,Q,j-Q|0),M=M+4|0}while(M>>>0<=Xt>>>0);if(Qe|0&&ss(s,5710,1),M>>>0>>0&(k|0)>0)for(;;){if(Q=Jm(n[M>>2]|0,0,Me)|0,Q>>>0>ir>>>0){Xm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}if(ss(s,Q,(k|0)<9?k:9),M=M+4|0,Q=k+-9|0,M>>>0>>0&(k|0)>9)k=Q;else{k=Q;break}}Bs(s,48,k+9|0,9,0)}else{if(Qe=et?lt:Ue+4|0,(k|0)>-1){et=ir+9|0,Me=(Me|0)==0,f=et,j=0-Nr|0,se=ir+8|0,O=Ue;do{Q=Jm(n[O>>2]|0,0,et)|0,(Q|0)==(et|0)&&(o[se>>0]=48,Q=se);do if((O|0)==(Ue|0)){if(M=Q+1|0,ss(s,Q,1),Me&(k|0)<1){Q=M;break}ss(s,5710,1),Q=M}else{if(Q>>>0<=ir>>>0)break;Xm(ir|0,48,Q+j|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}while(0);Nr=f-Q|0,ss(s,Q,(k|0)>(Nr|0)?Nr:k),k=k-Nr|0,O=O+4|0}while(O>>>0>>0&(k|0)>-1)}Bs(s,48,k+18|0,18,0),ss(s,Xe,Sr-Xe|0)}Bs(s,32,c,B,d^8192)}else ir=(m&32|0)!=0,B=or+3|0,Bs(s,32,c,B,d&-65537),ss(s,Mr,or),ss(s,l!=l|!1?ir?5686:5690:ir?5678:5682,3),Bs(s,32,c,B,d^8192);while(0);return C=xn,((B|0)<(c|0)?c:B)|0}function l7(s){s=+s;var l=0;return E[v>>3]=s,l=n[v>>2]|0,Se=n[v+4>>2]|0,l|0}function UUe(s,l){return s=+s,l=l|0,+ +c7(s,l)}function c7(s,l){s=+s,l=l|0;var c=0,f=0,d=0;switch(E[v>>3]=s,c=n[v>>2]|0,f=n[v+4>>2]|0,d=mD(c|0,f|0,52)|0,d&2047){case 0:{s!=0?(s=+c7(s*18446744073709552e3,l),c=(n[l>>2]|0)+-64|0):c=0,n[l>>2]=c;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[v>>2]=c,n[v+4>>2]=f&-2146435073|1071644672,s=+E[v>>3]}return+s}function _Ue(s,l,c){s=s|0,l=l|0,c=c|0;do if(s){if(l>>>0<128){o[s>>0]=l,s=1;break}if(!(n[n[(HUe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){o[s>>0]=l,s=1;break}else{n[(Vm()|0)>>2]=84,s=-1;break}if(l>>>0<2048){o[s>>0]=l>>>6|192,o[s+1>>0]=l&63|128,s=2;break}if(l>>>0<55296|(l&-8192|0)==57344){o[s>>0]=l>>>12|224,o[s+1>>0]=l>>>6&63|128,o[s+2>>0]=l&63|128,s=3;break}if((l+-65536|0)>>>0<1048576){o[s>>0]=l>>>18|240,o[s+1>>0]=l>>>12&63|128,o[s+2>>0]=l>>>6&63|128,o[s+3>>0]=l&63|128,s=4;break}else{n[(Vm()|0)>>2]=84,s=-1;break}}else s=1;while(0);return s|0}function HUe(){return SR()|0}function qUe(){return SR()|0}function jUe(s,l){s=s|0,l=l|0;var c=0,f=0;for(f=0;;){if((u[5712+f>>0]|0)==(s|0)){s=2;break}if(c=f+1|0,(c|0)==87){c=5800,f=87,s=5;break}else f=c}if((s|0)==2&&(f?(c=5800,s=5):c=5800),(s|0)==5)for(;;){do s=c,c=c+1|0;while((o[s>>0]|0)!=0);if(f=f+-1|0,f)s=5;else break}return GUe(c,n[l+20>>2]|0)|0}function GUe(s,l){return s=s|0,l=l|0,YUe(s,l)|0}function YUe(s,l){return s=s|0,l=l|0,l?l=WUe(n[l>>2]|0,n[l+4>>2]|0,s)|0:l=0,(l|0?l:s)|0}function WUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;se=(n[s>>2]|0)+1794895138|0,m=Rg(n[s+8>>2]|0,se)|0,f=Rg(n[s+12>>2]|0,se)|0,d=Rg(n[s+16>>2]|0,se)|0;e:do if(m>>>0>>2>>>0&&(j=l-(m<<2)|0,f>>>0>>0&d>>>0>>0)&&((d|f)&3|0)==0){for(j=f>>>2,O=d>>>2,M=0;;){if(k=m>>>1,Q=M+k|0,B=Q<<1,d=B+j|0,f=Rg(n[s+(d<<2)>>2]|0,se)|0,d=Rg(n[s+(d+1<<2)>>2]|0,se)|0,!(d>>>0>>0&f>>>0<(l-d|0)>>>0)){f=0;break e}if(o[s+(d+f)>>0]|0){f=0;break e}if(f=n7(c,s+d|0)|0,!f)break;if(f=(f|0)<0,(m|0)==1){f=0;break e}else M=f?M:Q,m=f?k:m-k|0}f=B+O|0,d=Rg(n[s+(f<<2)>>2]|0,se)|0,f=Rg(n[s+(f+1<<2)>>2]|0,se)|0,f>>>0>>0&d>>>0<(l-f|0)>>>0?f=(o[s+(f+d)>>0]|0)==0?s+f|0:0:f=0}else f=0;while(0);return f|0}function Rg(s,l){s=s|0,l=l|0;var c=0;return c=m7(s|0)|0,((l|0)==0?s:c)|0}function KUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=c+16|0,d=n[f>>2]|0,d?m=5:VUe(c)|0?f=0:(d=n[f>>2]|0,m=5);e:do if((m|0)==5){if(k=c+20|0,B=n[k>>2]|0,f=B,(d-B|0)>>>0>>0){f=ED[n[c+36>>2]&7](c,s,l)|0;break}t:do if((o[c+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=s;break t}if(d=B+-1|0,(o[s+d>>0]|0)==10)break;B=d}if(f=ED[n[c+36>>2]&7](c,s,B)|0,f>>>0>>0)break e;m=B,d=s+B|0,l=l-B|0,f=n[k>>2]|0}else m=0,d=s;while(0);Dr(f|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,f=m+l|0}while(0);return f|0}function VUe(s){s=s|0;var l=0,c=0;return l=s+74|0,c=o[l>>0]|0,o[l>>0]=c+255|c,l=n[s>>2]|0,l&8?(n[s>>2]=l|32,s=-1):(n[s+8>>2]=0,n[s+4>>2]=0,c=n[s+44>>2]|0,n[s+28>>2]=c,n[s+20>>2]=c,n[s+16>>2]=c+(n[s+48>>2]|0),s=0),s|0}function _n(s,l){s=y(s),l=y(l);var c=0,f=0;c=u7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=u7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?l:s;break}else{s=s>2]=s,n[v>>2]|0|0}function Tg(s,l){s=y(s),l=y(l);var c=0,f=0;c=A7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=A7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?s:l;break}else{s=s>2]=s,n[v>>2]|0|0}function bR(s,l){s=y(s),l=y(l);var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;m=(h[v>>2]=s,n[v>>2]|0),k=(h[v>>2]=l,n[v>>2]|0),c=m>>>23&255,B=k>>>23&255,Q=m&-2147483648,d=k<<1;e:do if((d|0)!=0&&!((c|0)==255|((JUe(l)|0)&2147483647)>>>0>2139095040)){if(f=m<<1,f>>>0<=d>>>0)return l=y(s*y(0)),y((f|0)==(d|0)?l:s);if(c)f=m&8388607|8388608;else{if(c=m<<9,(c|0)>-1){f=c,c=0;do c=c+-1|0,f=f<<1;while((f|0)>-1)}else c=0;f=m<<1-c}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=f-k|0,m=(d|0)>-1;t:do if((c|0)>(B|0)){for(;;){if(m)if(d)f=d;else break;if(f=f<<1,c=c+-1|0,d=f-k|0,m=(d|0)>-1,(c|0)<=(B|0))break t}l=y(s*y(0));break e}while(0);if(m)if(d)f=d;else{l=y(s*y(0));break}if(f>>>0<8388608)do f=f<<1,c=c+-1|0;while(f>>>0<8388608);(c|0)>0?c=f+-8388608|c<<23:c=f>>>(1-c|0),l=(n[v>>2]=c|Q,y(h[v>>2]))}else M=3;while(0);return(M|0)==3&&(l=y(s*l),l=y(l/l)),y(l)}function JUe(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function zUe(s,l){return s=s|0,l=l|0,i7(n[582]|0,s,l)|0}function zr(s){s=s|0,Rt()}function zm(s){s=s|0}function XUe(s,l){return s=s|0,l=l|0,0}function ZUe(s){return s=s|0,(f7(s+4|0)|0)==-1?(tf[n[(n[s>>2]|0)+8>>2]&127](s),s=1):s=0,s|0}function f7(s){s=s|0;var l=0;return l=n[s>>2]|0,n[s>>2]=l+-1,l+-1|0}function kp(s){s=s|0,ZUe(s)|0&&$Ue(s)}function $Ue(s){s=s|0;var l=0;l=s+8|0,(n[l>>2]|0)!=0&&(f7(l)|0)!=-1||tf[n[(n[s>>2]|0)+16>>2]&127](s)}function Kt(s){s=s|0;var l=0;for(l=(s|0)==0?1:s;s=pD(l)|0,!(s|0);){if(s=t3e()|0,!s){s=0;break}P7[s&0]()}return s|0}function p7(s){return s=s|0,Kt(s)|0}function gt(s){s=s|0,hD(s)}function e3e(s){s=s|0,(o[s+11>>0]|0)<0&>(n[s>>2]|0)}function t3e(){var s=0;return s=n[2923]|0,n[2923]=s+0,s|0}function r3e(){}function dD(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,f=l-f-(c>>>0>s>>>0|0)>>>0,Se=f,s-c>>>0|0|0}function xR(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,c=s+c>>>0,Se=l+f+(c>>>0>>0|0)>>>0,c|0|0}function Xm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(m=s+c|0,l=l&255,(c|0)>=67){for(;s&3;)o[s>>0]=l,s=s+1|0;for(f=m&-4|0,d=f-64|0,B=l|l<<8|l<<16|l<<24;(s|0)<=(d|0);)n[s>>2]=B,n[s+4>>2]=B,n[s+8>>2]=B,n[s+12>>2]=B,n[s+16>>2]=B,n[s+20>>2]=B,n[s+24>>2]=B,n[s+28>>2]=B,n[s+32>>2]=B,n[s+36>>2]=B,n[s+40>>2]=B,n[s+44>>2]=B,n[s+48>>2]=B,n[s+52>>2]=B,n[s+56>>2]=B,n[s+60>>2]=B,s=s+64|0;for(;(s|0)<(f|0);)n[s>>2]=B,s=s+4|0}for(;(s|0)<(m|0);)o[s>>0]=l,s=s+1|0;return m-c|0}function h7(s,l,c){return s=s|0,l=l|0,c=c|0,(c|0)<32?(Se=l<>>32-c,s<>>c,s>>>c|(l&(1<>>c-32|0)}function Dr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;if((c|0)>=8192)return Ac(s|0,l|0,c|0)|0;if(m=s|0,d=s+c|0,(s&3)==(l&3)){for(;s&3;){if(!c)return m|0;o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0,c=c-1|0}for(c=d&-4|0,f=c-64|0;(s|0)<=(f|0);)n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2],n[s+16>>2]=n[l+16>>2],n[s+20>>2]=n[l+20>>2],n[s+24>>2]=n[l+24>>2],n[s+28>>2]=n[l+28>>2],n[s+32>>2]=n[l+32>>2],n[s+36>>2]=n[l+36>>2],n[s+40>>2]=n[l+40>>2],n[s+44>>2]=n[l+44>>2],n[s+48>>2]=n[l+48>>2],n[s+52>>2]=n[l+52>>2],n[s+56>>2]=n[l+56>>2],n[s+60>>2]=n[l+60>>2],s=s+64|0,l=l+64|0;for(;(s|0)<(c|0);)n[s>>2]=n[l>>2],s=s+4|0,l=l+4|0}else for(c=d-4|0;(s|0)<(c|0);)o[s>>0]=o[l>>0]|0,o[s+1>>0]=o[l+1>>0]|0,o[s+2>>0]=o[l+2>>0]|0,o[s+3>>0]=o[l+3>>0]|0,s=s+4|0,l=l+4|0;for(;(s|0)<(d|0);)o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0;return m|0}function g7(s){s=s|0;var l=0;return l=o[L+(s&255)>>0]|0,(l|0)<8?l|0:(l=o[L+(s>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=o[L+(s>>16&255)>>0]|0,(l|0)<8?l+16|0:(o[L+(s>>>24)>>0]|0)+24|0))}function d7(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0;if(O=s,Q=l,M=Q,B=c,se=f,k=se,!M)return m=(d|0)!=0,k?m?(n[d>>2]=s|0,n[d+4>>2]=l&0,se=0,d=0,Se=se,d|0):(se=0,d=0,Se=se,d|0):(m&&(n[d>>2]=(O>>>0)%(B>>>0),n[d+4>>2]=0),se=0,d=(O>>>0)/(B>>>0)>>>0,Se=se,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(P(k|0)|0)-(P(M|0)|0)|0,m>>>0<=31){j=m+1|0,k=31-m|0,l=m-31>>31,B=j,s=O>>>(j>>>0)&l|M<>>(j>>>0)&l,m=0,k=O<>2]=s|0,n[d+4>>2]=Q|l&0,se=0,d=0,Se=se,d|0):(se=0,d=0,Se=se,d|0)}if(m=B-1|0,m&B|0){k=(P(B|0)|0)+33-(P(M|0)|0)|0,Me=64-k|0,j=32-k|0,Q=j>>31,Ge=k-32|0,l=Ge>>31,B=k,s=j-1>>31&M>>>(Ge>>>0)|(M<>>(k>>>0))&l,l=l&M>>>(k>>>0),m=O<>>(Ge>>>0))&Q|O<>31;break}return d|0&&(n[d>>2]=m&O,n[d+4>>2]=0),(B|0)==1?(Ge=Q|l&0,Me=s|0|0,Se=Ge,Me|0):(Me=g7(B|0)|0,Ge=M>>>(Me>>>0)|0,Me=M<<32-Me|O>>>(Me>>>0)|0,Se=Ge,Me|0)}else{if(m)return d|0&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),Ge=0,Me=(M>>>0)/(B>>>0)>>>0,Se=Ge,Me|0;if(!O)return d|0&&(n[d>>2]=0,n[d+4>>2]=(M>>>0)%(k>>>0)),Ge=0,Me=(M>>>0)/(k>>>0)>>>0,Se=Ge,Me|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=s|0,n[d+4>>2]=m&M|l&0),Ge=0,Me=M>>>((g7(k|0)|0)>>>0),Se=Ge,Me|0;if(m=(P(k|0)|0)-(P(M|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,s=M<>>(l>>>0),l=M>>>(l>>>0),m=0,k=O<>2]=s|0,n[d+4>>2]=Q|l&0,Ge=0,Me=0,Se=Ge,Me|0):(Ge=0,Me=0,Se=Ge,Me|0)}while(0);if(!B)M=k,Q=0,k=0;else{j=c|0|0,O=se|f&0,M=xR(j|0,O|0,-1,-1)|0,c=Se,Q=k,k=0;do f=Q,Q=m>>>31|Q<<1,m=k|m<<1,f=s<<1|f>>>31|0,se=s>>>31|l<<1|0,dD(M|0,c|0,f|0,se|0)|0,Me=Se,Ge=Me>>31|((Me|0)<0?-1:0)<<1,k=Ge&1,s=dD(f|0,se|0,Ge&j|0,(((Me|0)<0?-1:0)>>31|((Me|0)<0?-1:0)<<1)&O|0)|0,l=Se,B=B-1|0;while((B|0)!=0);M=Q,Q=0}return B=0,d|0&&(n[d>>2]=s,n[d+4>>2]=l),Ge=(m|0)>>>31|(M|B)<<1|(B<<1|m>>>31)&0|Q,Me=(m<<1|0>>>31)&-2|k,Se=Ge,Me|0}function kR(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,d7(s,l,c,f,0)|0}function Qp(s){s=s|0;var l=0,c=0;return c=s+15&-16|0,l=n[I>>2]|0,s=l+c|0,(c|0)>0&(s|0)<(l|0)|(s|0)<0?(ie()|0,DA(12),-1):(n[I>>2]=s,(s|0)>(Z()|0)&&(X()|0)==0?(n[I>>2]=l,DA(12),-1):l|0)}function Mw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if((l|0)<(s|0)&(s|0)<(l+c|0)){for(f=s,l=l+c|0,s=s+c|0;(c|0)>0;)s=s-1|0,l=l-1|0,c=c-1|0,o[s>>0]=o[l>>0]|0;s=f}else Dr(s,l,c)|0;return s|0}function QR(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;return m=C,C=C+16|0,d=m|0,d7(s,l,c,f,d)|0,C=m,Se=n[d+4>>2]|0,n[d>>2]|0|0}function m7(s){return s=s|0,(s&255)<<24|(s>>8&255)<<16|(s>>16&255)<<8|s>>>24|0}function n3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,y7[s&1](l|0,c|0,f|0,d|0,m|0)}function i3e(s,l,c){s=s|0,l=l|0,c=y(c),E7[s&1](l|0,y(c))}function s3e(s,l,c){s=s|0,l=l|0,c=+c,C7[s&31](l|0,+c)}function o3e(s,l,c,f){return s=s|0,l=l|0,c=y(c),f=y(f),y(w7[s&0](l|0,y(c),y(f)))}function a3e(s,l){s=s|0,l=l|0,tf[s&127](l|0)}function l3e(s,l,c){s=s|0,l=l|0,c=c|0,rf[s&31](l|0,c|0)}function c3e(s,l){return s=s|0,l=l|0,Lg[s&31](l|0)|0}function u3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,I7[s&1](l|0,+c,+f,d|0)}function A3e(s,l,c,f){s=s|0,l=l|0,c=+c,f=+f,Y3e[s&1](l|0,+c,+f)}function f3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,ED[s&7](l|0,c|0,f|0)|0}function p3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,+W3e[s&1](l|0,c|0,f|0)}function h3e(s,l){return s=s|0,l=l|0,+B7[s&15](l|0)}function g3e(s,l,c){return s=s|0,l=l|0,c=+c,K3e[s&1](l|0,+c)|0}function d3e(s,l,c){return s=s|0,l=l|0,c=c|0,RR[s&15](l|0,c|0)|0}function m3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=+f,d=+d,m=m|0,V3e[s&1](l|0,c|0,+f,+d,m|0)}function y3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,J3e[s&1](l|0,c|0,f|0,d|0,m|0,B|0)}function E3e(s,l,c){return s=s|0,l=l|0,c=c|0,+v7[s&7](l|0,c|0)}function C3e(s){return s=s|0,CD[s&7]()|0}function w3e(s,l,c,f,d,m){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,D7[s&1](l|0,c|0,f|0,d|0,m|0)|0}function I3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=+d,z3e[s&1](l|0,c|0,f|0,+d)}function B3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,S7[s&1](l|0,c|0,y(f),d|0,y(m),B|0)}function v3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,Hw[s&15](l|0,c|0,f|0)}function D3e(s){s=s|0,P7[s&0]()}function S3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,b7[s&15](l|0,c|0,+f)}function P3e(s,l,c){return s=s|0,l=+l,c=+c,X3e[s&1](+l,+c)|0}function b3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,TR[s&15](l|0,c|0,f|0,d|0)}function x3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(0)}function k3e(s,l){s=s|0,l=y(l),F(1)}function ma(s,l){s=s|0,l=+l,F(2)}function Q3e(s,l,c){return s=s|0,l=y(l),c=y(c),F(3),Ze}function Er(s){s=s|0,F(4)}function Uw(s,l){s=s|0,l=l|0,F(5)}function Ja(s){return s=s|0,F(6),0}function F3e(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,F(7)}function R3e(s,l,c){s=s|0,l=+l,c=+c,F(8)}function T3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(9),0}function N3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(10),0}function Ng(s){return s=s|0,F(11),0}function L3e(s,l){return s=s|0,l=+l,F(12),0}function _w(s,l){return s=s|0,l=l|0,F(13),0}function O3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,F(14)}function M3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,F(15)}function FR(s,l){return s=s|0,l=l|0,F(16),0}function U3e(){return F(17),0}function _3e(s,l,c,f,d){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(18),0}function H3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,F(19)}function q3e(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0,F(20)}function yD(s,l,c){s=s|0,l=l|0,c=c|0,F(21)}function j3e(){F(22)}function Zm(s,l,c){s=s|0,l=l|0,c=+c,F(23)}function G3e(s,l){return s=+s,l=+l,F(24),0}function $m(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,F(25)}var y7=[x3e,_Le],E7=[k3e,fo],C7=[ma,xw,kw,EF,CF,Dl,Qw,wF,qm,bu,Rw,IF,$v,KA,eD,jm,tD,rD,Gm,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma],w7=[Q3e],tf=[Er,zm,CDe,wDe,IDe,Xbe,Zbe,$be,gNe,dNe,mNe,PLe,bLe,xLe,J4e,z4e,X4e,hs,Vv,Hm,WA,Fw,dve,mve,uDe,kDe,qDe,oSe,ISe,USe,rPe,mPe,FPe,VPe,ube,Sbe,qbe,dxe,Fxe,Vxe,uke,Ske,qke,aQe,IQe,LQe,ZQe,Pc,xFe,YFe,uRe,bRe,jRe,uTe,CTe,BTe,_Te,jTe,oNe,ENe,INe,UNe,nLe,i5,MOe,gMe,kMe,YMe,p4e,b4e,U4e,q4e,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er],rf=[Uw,fF,pF,bw,Pu,hF,gF,Bp,dF,mF,yF,Zv,VA,Ve,ft,Wt,vr,Pn,Fr,vF,nve,Sve,AQe,DQe,FRe,HOe,ALe,q9,Uw,Uw,Uw,Uw],Lg=[Ja,SUe,AF,D,Ae,De,vt,wt,xt,_r,di,po,eve,tve,yve,tFe,KRe,qNe,YOe,Wa,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja],I7=[F3e,Eve],Y3e=[R3e,cNe],ED=[T3e,r7,PUe,kUe,jSe,Cxe,RFe,JMe],W3e=[N3e,hbe],B7=[Ng,Yo,rt,bn,Cve,wve,Ive,Bve,vve,Dve,Ng,Ng,Ng,Ng,Ng,Ng],K3e=[L3e,mTe],RR=[_w,XUe,rve,hDe,uSe,sPe,CPe,Wbe,Lxe,_Qe,Wv,TMe,_w,_w,_w,_w],V3e=[O3e,WDe],J3e=[M3e,m4e],v7=[FR,ai,Pve,bve,xve,kbe,FR,FR],CD=[U3e,kve,Sw,ga,PTe,KTe,SNe,W4e],D7=[_3e,Cw],z3e=[H3e,hke],S7=[q3e,ive],Hw=[yD,T,is,tn,ho,SSe,NPe,kke,Wke,_m,cOe,EMe,F4e,yD,yD,yD],P7=[j3e],b7=[Zm,Jv,zv,Xv,YA,nD,BF,S,Zxe,JFe,pTe,Zm,Zm,Zm,Zm,Zm],X3e=[G3e,pNe],TR=[$m,ZPe,cFe,hRe,rTe,RTe,$Te,RNe,lLe,XOe,nUe,$m,$m,$m,$m,$m];return{_llvm_bswap_i32:m7,dynCall_idd:P3e,dynCall_i:C3e,_i64Subtract:dD,___udivdi3:kR,dynCall_vif:i3e,setThrew:hu,dynCall_viii:v3e,_bitshift64Lshr:mD,_bitshift64Shl:h7,dynCall_vi:a3e,dynCall_viiddi:m3e,dynCall_diii:p3e,dynCall_iii:d3e,_memset:Xm,_sbrk:Qp,_memcpy:Dr,__GLOBAL__sub_I_Yoga_cpp:Um,dynCall_vii:l3e,___uremdi3:QR,dynCall_vid:s3e,stackAlloc:lo,_nbind_init:hUe,getTempRet0:Ua,dynCall_di:h3e,dynCall_iid:g3e,setTempRet0:xA,_i64Add:xR,dynCall_fiff:o3e,dynCall_iiii:f3e,_emscripten_get_global_libc:DUe,dynCall_viid:S3e,dynCall_viiid:I3e,dynCall_viififi:B3e,dynCall_ii:c3e,__GLOBAL__sub_I_Binding_cc:kOe,dynCall_viiii:b3e,dynCall_iiiiii:w3e,stackSave:gc,dynCall_viiiii:n3e,__GLOBAL__sub_I_nbind_cc:Qve,dynCall_vidd:A3e,_free:hD,runPostSets:r3e,dynCall_viiiiii:y3e,establishStackSpace:qi,_memmove:Mw,stackRestore:pu,_malloc:pD,__GLOBAL__sub_I_common_cc:zNe,dynCall_viddi:u3e,dynCall_dii:E3e,dynCall_v:D3e}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function o(){for(var p=0;p<4-1;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];o();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` +If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(o){r=o(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var am=_((wKt,NEe)=>{"use strict";var Gyt=REe(),Yyt=TEe(),x6=!1,k6=null;Yyt({},function(t,e){if(!x6){if(x6=!0,t)throw t;k6=e}});if(!x6)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");NEe.exports=Gyt(k6.bind,k6.lib)});var F6=_((IKt,Q6)=>{"use strict";var LEe=t=>Number.isNaN(t)?!1:t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141);Q6.exports=LEe;Q6.exports.default=LEe});var MEe=_((BKt,OEe)=>{"use strict";OEe.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Kk=_((vKt,R6)=>{"use strict";var Wyt=OS(),Kyt=F6(),Vyt=MEe(),UEe=t=>{if(typeof t!="string"||t.length===0||(t=Wyt(t),t.length===0))return 0;t=t.replace(Vyt()," ");let e=0;for(let r=0;r=127&&o<=159||o>=768&&o<=879||(o>65535&&r++,e+=Kyt(o)?2:1)}return e};R6.exports=UEe;R6.exports.default=UEe});var N6=_((DKt,T6)=>{"use strict";var Jyt=Kk(),_Ee=t=>{let e=0;for(let r of t.split(` +`))e=Math.max(e,Jyt(r));return e};T6.exports=_Ee;T6.exports.default=_Ee});var HEe=_(cB=>{"use strict";var zyt=cB&&cB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cB,"__esModule",{value:!0});var Xyt=zyt(N6()),L6={};cB.default=t=>{if(t.length===0)return{width:0,height:0};if(L6[t])return L6[t];let e=Xyt.default(t),r=t.split(` +`).length;return L6[t]={width:e,height:r},{width:e,height:r}}});var qEe=_(uB=>{"use strict";var Zyt=uB&&uB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(uB,"__esModule",{value:!0});var dn=Zyt(am()),$yt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?dn.default.POSITION_TYPE_ABSOLUTE:dn.default.POSITION_TYPE_RELATIVE)},eEt=(t,e)=>{"marginLeft"in e&&t.setMargin(dn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(dn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(dn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(dn.default.EDGE_BOTTOM,e.marginBottom||0)},tEt=(t,e)=>{"paddingLeft"in e&&t.setPadding(dn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(dn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(dn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(dn.default.EDGE_BOTTOM,e.paddingBottom||0)},rEt=(t,e)=>{var r;"flexGrow"in e&&t.setFlexGrow((r=e.flexGrow)!==null&&r!==void 0?r:0),"flexShrink"in e&&t.setFlexShrink(typeof e.flexShrink=="number"?e.flexShrink:1),"flexDirection"in e&&(e.flexDirection==="row"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in e&&(typeof e.flexBasis=="number"?t.setFlexBasis(e.flexBasis):typeof e.flexBasis=="string"?t.setFlexBasisPercent(Number.parseInt(e.flexBasis,10)):t.setFlexBasis(NaN)),"alignItems"in e&&((e.alignItems==="stretch"||!e.alignItems)&&t.setAlignItems(dn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(dn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(dn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(dn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(dn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(dn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(dn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(dn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(dn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_AROUND))},nEt=(t,e)=>{var r,o;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((o=e.minHeight)!==null&&o!==void 0?o:0))},iEt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?dn.default.DISPLAY_FLEX:dn.default.DISPLAY_NONE)},sEt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(dn.default.EDGE_TOP,r),t.setBorder(dn.default.EDGE_BOTTOM,r),t.setBorder(dn.default.EDGE_LEFT,r),t.setBorder(dn.default.EDGE_RIGHT,r)}};uB.default=(t,e={})=>{$yt(t,e),eEt(t,e),tEt(t,e),rEt(t,e),nEt(t,e),iEt(t,e),sEt(t,e)}});var YEe=_((bKt,GEe)=>{"use strict";var AB=Kk(),oEt=OS(),aEt=DI(),M6=new Set(["\x1B","\x9B"]),lEt=39,jEe=t=>`${M6.values().next().value}[${t}m`,cEt=t=>t.split(" ").map(e=>AB(e)),O6=(t,e,r)=>{let o=[...e],a=!1,n=AB(oEt(t[t.length-1]));for(let[u,A]of o.entries()){let p=AB(A);if(n+p<=r?t[t.length-1]+=A:(t.push(A),n=0),M6.has(A))a=!0;else if(a&&A==="m"){a=!1;continue}a||(n+=p,n===r&&u0&&t.length>1&&(t[t.length-2]+=t.pop())},uEt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(AB(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},AEt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",a="",n,u=cEt(t),A=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let E=AB(A[A.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(A.push(""),E=0),(E>0||r.trim===!1)&&(A[A.length-1]+=" ",E++)),r.hard&&u[p]>e){let I=e-E,v=1+Math.floor((u[p]-I-1)/e);Math.floor((u[p]-1)/e)e&&E>0&&u[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){O6(A,h,e);continue}A[A.length-1]+=h}r.trim!==!1&&(A=A.map(uEt)),o=A.join(` +`);for(let[p,h]of[...o].entries()){if(a+=h,M6.has(h)){let I=parseFloat(/\d[^m]*/.exec(o.slice(p,p+4)));n=I===lEt?null:I}let E=aEt.codes.get(Number(n));n&&E&&(o[p+1]===` +`?a+=jEe(E):h===` +`&&(a+=jEe(n)))}return a};GEe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` `).split(` -`).map(o=>dEt(o,e,r)).join(` -`)});var XEe=_((bVt,zEe)=>{"use strict";var JEe="[\uD800-\uDBFF][\uDC00-\uDFFF]",mEt=t=>t&&t.exact?new RegExp(`^${JEe}$`):new RegExp(JEe,"g");zEe.exports=mEt});var H6=_((kVt,tCe)=>{"use strict";var yEt=R6(),EEt=XEe(),ZEe=vI(),eCe=["\x1B","\x9B"],zk=t=>`${eCe[0]}[${t}m`,$Ee=(t,e,r)=>{let o=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let u=ZEe.codes.get(parseInt(a,10));if(u){let A=t.indexOf(u.toString());A>=0?t.splice(A,1):o.push(zk(e?u:n))}else if(e){o.push(zk(0));break}else o.push(zk(n))}if(e&&(o=o.filter((a,n)=>o.indexOf(a)===n),r!==void 0)){let a=zk(ZEe.codes.get(parseInt(r,10)));o=o.reduce((n,u)=>u===a?[u,...n]:[...n,u],[])}return o.join("")};tCe.exports=(t,e,r)=>{let o=[...t.normalize()],a=[];r=typeof r=="number"?r:o.length;let n=!1,u,A=0,p="";for(let[h,E]of o.entries()){let I=!1;if(eCe.includes(E)){let v=/\d[^m]*/.exec(t.slice(h,h+18));u=v&&v.length>0?v[0]:void 0,Ae&&A<=r)p+=E;else if(A===e&&!n&&u!==void 0)p=$Ee(a);else if(A>=r){p+=$Ee(a,!0,u);break}}return p}});var nCe=_((QVt,rCe)=>{"use strict";var y0=H6(),CEt=Jk();function Xk(t,e,r){if(t.charAt(e)===" ")return e;for(let o=1;o<=3;o++)if(r){if(t.charAt(e+o)===" ")return e+o}else if(t.charAt(e-o)===" ")return e-o;return e}rCe.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:o,space:a,preferTruncationOnSpace:n}=r,u="\u2026",A=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return u;let p=CEt(t);if(p<=e)return t;if(o==="start"){if(n){let h=Xk(t,p-e+1,!0);return u+y0(t,h,p).trim()}return a===!0&&(u+=" ",A=2),u+y0(t,p-e+A,p)}if(o==="middle"){a===!0&&(u=" "+u+" ",A=3);let h=Math.floor(e/2);if(n){let E=Xk(t,h),I=Xk(t,p-(e-h)+1,!0);return y0(t,0,E)+u+y0(t,I,p).trim()}return y0(t,0,h)+u+y0(t,p-(e-h)+A,p)}if(o==="end"){if(n){let h=Xk(t,e-1);return y0(t,0,h)+u}return a===!0&&(u=" "+u,A=2),y0(t,0,e-A)+u}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${o}`)}});var q6=_(AB=>{"use strict";var iCe=AB&&AB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(AB,"__esModule",{value:!0});var wEt=iCe(KEe()),IEt=iCe(nCe()),j6={};AB.default=(t,e,r)=>{let o=t+String(e)+String(r);if(j6[o])return j6[o];let a=t;if(r==="wrap"&&(a=wEt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=IEt.default(t,e,{position:n})}return j6[o]=a,a}});var Y6=_(G6=>{"use strict";Object.defineProperty(G6,"__esModule",{value:!0});var sCe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let o="";r.nodeName==="#text"?o=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(o=sCe(r)),o.length>0&&typeof r.internal_transform=="function"&&(o=r.internal_transform(o))),e+=o}return e};G6.default=sCe});var W6=_(pi=>{"use strict";var fB=pi&&pi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pi,"__esModule",{value:!0});pi.setTextNodeValue=pi.createTextNode=pi.setStyle=pi.setAttribute=pi.removeChildNode=pi.insertBeforeNode=pi.appendChildNode=pi.createNode=pi.TEXT_NAME=void 0;var BEt=fB(om()),oCe=fB(GEe()),vEt=fB(YEe()),DEt=fB(q6()),PEt=fB(Y6());pi.TEXT_NAME="#text";pi.createNode=t=>{var e;let r={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:t==="ink-virtual-text"?void 0:BEt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(SEt.bind(null,r))),r};pi.appendChildNode=(t,e)=>{var r;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t,t.childNodes.push(e),e.yogaNode&&((r=t.yogaNode)===null||r===void 0||r.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.insertBeforeNode=(t,e,r)=>{var o,a;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t;let n=t.childNodes.indexOf(r);if(n>=0){t.childNodes.splice(n,0,e),e.yogaNode&&((o=t.yogaNode)===null||o===void 0||o.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.removeChildNode=(t,e)=>{var r,o;e.yogaNode&&((o=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||o===void 0||o.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.setAttribute=(t,e,r)=>{t.attributes[e]=r};pi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&vEt.default(t.yogaNode,e)};pi.createTextNode=t=>{let e={nodeName:"#text",nodeValue:t,yogaNode:void 0,parentNode:null,style:{}};return pi.setTextNodeValue(e,t),e};var SEt=function(t,e){var r,o;let a=t.nodeName==="#text"?t.nodeValue:PEt.default(t),n=oCe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let u=(o=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&o!==void 0?o:"wrap",A=DEt.default(a,e,u);return oCe.default(A)},aCe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:aCe(t.parentNode)},Zk=t=>{let e=aCe(t);e?.markDirty()};pi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,Zk(t)}});var fCe=_(pB=>{"use strict";var ACe=pB&&pB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pB,"__esModule",{value:!0});var lCe=x6(),xEt=ACe(kEe()),cCe=ACe(om()),Mo=W6(),uCe=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};pB.default=xEt.default({schedulePassiveEffects:lCe.unstable_scheduleCallback,cancelPassiveEffects:lCe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,o=e==="ink-text"||e==="ink-virtual-text";return r===o?t:{isInsideText:o}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,o)=>{if(o.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&o.isInsideText?"ink-virtual-text":t,n=Mo.createNode(a);for(let[u,A]of Object.entries(e))u!=="children"&&(u==="style"?Mo.setStyle(n,A):u==="internal_transform"?n.internal_transform=A:u==="internal_static"?n.internal_static=!0:Mo.setAttribute(n,u,A));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return Mo.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{Mo.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{Mo.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(cCe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(cCe.default.DISPLAY_FLEX)},appendInitialChild:Mo.appendChildNode,appendChild:Mo.appendChildNode,insertBefore:Mo.insertBeforeNode,finalizeInitialChildren:(t,e,r,o)=>(t.internal_static&&(o.isStaticDirty=!0,o.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:Mo.appendChildNode,insertInContainerBefore:Mo.insertBeforeNode,removeChildFromContainer:(t,e)=>{Mo.removeChildNode(t,e),uCe(e.yogaNode)},prepareUpdate:(t,e,r,o,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},u=Object.keys(o);for(let A of u)if(o[A]!==r[A]){if(A==="style"&&typeof o.style=="object"&&typeof r.style=="object"){let h=o.style,E=r.style,I=Object.keys(h);for(let v of I){if(v==="borderStyle"||v==="borderColor"){if(typeof n.style!="object"){let b={};n.style=b}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[v]!==E[v]){if(typeof n.style!="object"){let b={};n.style=b}n.style[v]=h[v]}}continue}n[A]=o[A]}return n},commitUpdate:(t,e)=>{for(let[r,o]of Object.entries(e))r!=="children"&&(r==="style"?Mo.setStyle(t,o):r==="internal_transform"?t.internal_transform=o:r==="internal_static"?t.internal_static=!0:Mo.setAttribute(t,r,o))},commitTextUpdate:(t,e,r)=>{Mo.setTextNodeValue(t,r)},removeChild:(t,e)=>{Mo.removeChildNode(t,e),uCe(e.yogaNode)}})});var hCe=_((LVt,pCe)=>{"use strict";pCe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let o=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(o,r.indent.repeat(e))}});var gCe=_(hB=>{"use strict";var bEt=hB&&hB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(hB,"__esModule",{value:!0});var $k=bEt(om());hB.default=t=>t.getComputedWidth()-t.getComputedPadding($k.default.EDGE_LEFT)-t.getComputedPadding($k.default.EDGE_RIGHT)-t.getComputedBorder($k.default.EDGE_LEFT)-t.getComputedBorder($k.default.EDGE_RIGHT)});var dCe=_((OVt,kEt)=>{kEt.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var yCe=_((UVt,V6)=>{"use strict";var mCe=dCe();V6.exports=mCe;V6.exports.default=mCe});var CCe=_((_Vt,ECe)=>{"use strict";var QEt=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},FEt=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`).map(o=>AEt(o,e,r)).join(` +`)});var VEe=_((xKt,KEe)=>{"use strict";var WEe="[\uD800-\uDBFF][\uDC00-\uDFFF]",fEt=t=>t&&t.exact?new RegExp(`^${WEe}$`):new RegExp(WEe,"g");KEe.exports=fEt});var U6=_((kKt,ZEe)=>{"use strict";var pEt=F6(),hEt=VEe(),JEe=DI(),XEe=["\x1B","\x9B"],Vk=t=>`${XEe[0]}[${t}m`,zEe=(t,e,r)=>{let o=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let u=JEe.codes.get(parseInt(a,10));if(u){let A=t.indexOf(u.toString());A>=0?t.splice(A,1):o.push(Vk(e?u:n))}else if(e){o.push(Vk(0));break}else o.push(Vk(n))}if(e&&(o=o.filter((a,n)=>o.indexOf(a)===n),r!==void 0)){let a=Vk(JEe.codes.get(parseInt(r,10)));o=o.reduce((n,u)=>u===a?[u,...n]:[...n,u],[])}return o.join("")};ZEe.exports=(t,e,r)=>{let o=[...t.normalize()],a=[];r=typeof r=="number"?r:o.length;let n=!1,u,A=0,p="";for(let[h,E]of o.entries()){let I=!1;if(XEe.includes(E)){let v=/\d[^m]*/.exec(t.slice(h,h+18));u=v&&v.length>0?v[0]:void 0,Ae&&A<=r)p+=E;else if(A===e&&!n&&u!==void 0)p=zEe(a);else if(A>=r){p+=zEe(a,!0,u);break}}return p}});var eCe=_((QKt,$Ee)=>{"use strict";var E0=U6(),gEt=Kk();function Jk(t,e,r){if(t.charAt(e)===" ")return e;for(let o=1;o<=3;o++)if(r){if(t.charAt(e+o)===" ")return e+o}else if(t.charAt(e-o)===" ")return e-o;return e}$Ee.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:o,space:a,preferTruncationOnSpace:n}=r,u="\u2026",A=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return u;let p=gEt(t);if(p<=e)return t;if(o==="start"){if(n){let h=Jk(t,p-e+1,!0);return u+E0(t,h,p).trim()}return a===!0&&(u+=" ",A=2),u+E0(t,p-e+A,p)}if(o==="middle"){a===!0&&(u=" "+u+" ",A=3);let h=Math.floor(e/2);if(n){let E=Jk(t,h),I=Jk(t,p-(e-h)+1,!0);return E0(t,0,E)+u+E0(t,I,p).trim()}return E0(t,0,h)+u+E0(t,p-(e-h)+A,p)}if(o==="end"){if(n){let h=Jk(t,e-1);return E0(t,0,h)+u}return a===!0&&(u=" "+u,A=2),E0(t,0,e-A)+u}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${o}`)}});var H6=_(fB=>{"use strict";var tCe=fB&&fB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(fB,"__esModule",{value:!0});var dEt=tCe(YEe()),mEt=tCe(eCe()),_6={};fB.default=(t,e,r)=>{let o=t+String(e)+String(r);if(_6[o])return _6[o];let a=t;if(r==="wrap"&&(a=dEt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=mEt.default(t,e,{position:n})}return _6[o]=a,a}});var j6=_(q6=>{"use strict";Object.defineProperty(q6,"__esModule",{value:!0});var rCe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let o="";r.nodeName==="#text"?o=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(o=rCe(r)),o.length>0&&typeof r.internal_transform=="function"&&(o=r.internal_transform(o))),e+=o}return e};q6.default=rCe});var G6=_(pi=>{"use strict";var pB=pi&&pi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pi,"__esModule",{value:!0});pi.setTextNodeValue=pi.createTextNode=pi.setStyle=pi.setAttribute=pi.removeChildNode=pi.insertBeforeNode=pi.appendChildNode=pi.createNode=pi.TEXT_NAME=void 0;var yEt=pB(am()),nCe=pB(HEe()),EEt=pB(qEe()),CEt=pB(H6()),wEt=pB(j6());pi.TEXT_NAME="#text";pi.createNode=t=>{var e;let r={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:t==="ink-virtual-text"?void 0:yEt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(IEt.bind(null,r))),r};pi.appendChildNode=(t,e)=>{var r;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t,t.childNodes.push(e),e.yogaNode&&((r=t.yogaNode)===null||r===void 0||r.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&zk(t)};pi.insertBeforeNode=(t,e,r)=>{var o,a;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t;let n=t.childNodes.indexOf(r);if(n>=0){t.childNodes.splice(n,0,e),e.yogaNode&&((o=t.yogaNode)===null||o===void 0||o.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&zk(t)};pi.removeChildNode=(t,e)=>{var r,o;e.yogaNode&&((o=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||o===void 0||o.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&zk(t)};pi.setAttribute=(t,e,r)=>{t.attributes[e]=r};pi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&EEt.default(t.yogaNode,e)};pi.createTextNode=t=>{let e={nodeName:"#text",nodeValue:t,yogaNode:void 0,parentNode:null,style:{}};return pi.setTextNodeValue(e,t),e};var IEt=function(t,e){var r,o;let a=t.nodeName==="#text"?t.nodeValue:wEt.default(t),n=nCe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let u=(o=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&o!==void 0?o:"wrap",A=CEt.default(a,e,u);return nCe.default(A)},iCe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:iCe(t.parentNode)},zk=t=>{let e=iCe(t);e?.markDirty()};pi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,zk(t)}});var cCe=_(hB=>{"use strict";var lCe=hB&&hB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(hB,"__esModule",{value:!0});var sCe=S6(),BEt=lCe(PEe()),oCe=lCe(am()),Oo=G6(),aCe=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};hB.default=BEt.default({schedulePassiveEffects:sCe.unstable_scheduleCallback,cancelPassiveEffects:sCe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,o=e==="ink-text"||e==="ink-virtual-text";return r===o?t:{isInsideText:o}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,o)=>{if(o.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&o.isInsideText?"ink-virtual-text":t,n=Oo.createNode(a);for(let[u,A]of Object.entries(e))u!=="children"&&(u==="style"?Oo.setStyle(n,A):u==="internal_transform"?n.internal_transform=A:u==="internal_static"?n.internal_static=!0:Oo.setAttribute(n,u,A));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return Oo.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{Oo.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{Oo.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(oCe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(oCe.default.DISPLAY_FLEX)},appendInitialChild:Oo.appendChildNode,appendChild:Oo.appendChildNode,insertBefore:Oo.insertBeforeNode,finalizeInitialChildren:(t,e,r,o)=>(t.internal_static&&(o.isStaticDirty=!0,o.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:Oo.appendChildNode,insertInContainerBefore:Oo.insertBeforeNode,removeChildFromContainer:(t,e)=>{Oo.removeChildNode(t,e),aCe(e.yogaNode)},prepareUpdate:(t,e,r,o,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},u=Object.keys(o);for(let A of u)if(o[A]!==r[A]){if(A==="style"&&typeof o.style=="object"&&typeof r.style=="object"){let h=o.style,E=r.style,I=Object.keys(h);for(let v of I){if(v==="borderStyle"||v==="borderColor"){if(typeof n.style!="object"){let x={};n.style=x}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[v]!==E[v]){if(typeof n.style!="object"){let x={};n.style=x}n.style[v]=h[v]}}continue}n[A]=o[A]}return n},commitUpdate:(t,e)=>{for(let[r,o]of Object.entries(e))r!=="children"&&(r==="style"?Oo.setStyle(t,o):r==="internal_transform"?t.internal_transform=o:r==="internal_static"?t.internal_static=!0:Oo.setAttribute(t,r,o))},commitTextUpdate:(t,e,r)=>{Oo.setTextNodeValue(t,r)},removeChild:(t,e)=>{Oo.removeChildNode(t,e),aCe(e.yogaNode)}})});var ACe=_((LKt,uCe)=>{"use strict";uCe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let o=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(o,r.indent.repeat(e))}});var fCe=_(gB=>{"use strict";var vEt=gB&&gB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(gB,"__esModule",{value:!0});var Xk=vEt(am());gB.default=t=>t.getComputedWidth()-t.getComputedPadding(Xk.default.EDGE_LEFT)-t.getComputedPadding(Xk.default.EDGE_RIGHT)-t.getComputedBorder(Xk.default.EDGE_LEFT)-t.getComputedBorder(Xk.default.EDGE_RIGHT)});var pCe=_((MKt,DEt)=>{DEt.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var gCe=_((UKt,Y6)=>{"use strict";var hCe=pCe();Y6.exports=hCe;Y6.exports.default=hCe});var mCe=_((_Kt,dCe)=>{"use strict";var SEt=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},PEt=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r `:` `)+r,a=o+1,o=t.indexOf(` -`,a)}while(o!==-1);return n+=t.substr(a),n};ECe.exports={stringReplaceAll:QEt,stringEncaseCRLFWithFirstIndex:FEt}});var DCe=_((HVt,vCe)=>{"use strict";var TEt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,wCe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,REt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,NEt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,LEt=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function BCe(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):LEt.get(t)||t}function MEt(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(REt))r.push(a[2].replace(NEt,(A,p,h)=>p?BCe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function OEt(t){wCe.lastIndex=0;let e=[],r;for(;(r=wCe.exec(t))!==null;){let o=r[1];if(r[2]){let a=MEt(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function ICe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}vCe.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(TEt,(n,u,A,p,h,E)=>{if(u)a.push(BCe(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:ICe(t,r)(I)),r.push({inverse:A,styles:OEt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(ICe(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var iQ=_((jVt,QCe)=>{"use strict";var gB=vI(),{stdout:J6,stderr:z6}=yN(),{stringReplaceAll:UEt,stringEncaseCRLFWithFirstIndex:_Et}=CCe(),{isArray:eQ}=Array,SCe=["ansi","ansi","ansi256","ansi16m"],_C=Object.create(null),HEt=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=J6?J6.level:0;t.level=e.level===void 0?r:e.level},X6=class{constructor(e){return xCe(e)}},xCe=t=>{let e={};return HEt(e,t),e.template=(...r)=>kCe(e.template,...r),Object.setPrototypeOf(e,tQ.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=X6,e.template};function tQ(t){return xCe(t)}for(let[t,e]of Object.entries(gB))_C[t]={get(){let r=rQ(this,Z6(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};_C.visible={get(){let t=rQ(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var bCe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of bCe)_C[t]={get(){let{level:e}=this;return function(...r){let o=Z6(gB.color[SCe[e]][t](...r),gB.color.close,this._styler);return rQ(this,o,this._isEmpty)}}};for(let t of bCe){let e="bg"+t[0].toUpperCase()+t.slice(1);_C[e]={get(){let{level:r}=this;return function(...o){let a=Z6(gB.bgColor[SCe[r]][t](...o),gB.bgColor.close,this._styler);return rQ(this,a,this._isEmpty)}}}}var jEt=Object.defineProperties(()=>{},{..._C,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),Z6=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},rQ=(t,e,r)=>{let o=(...a)=>eQ(a[0])&&eQ(a[0].raw)?PCe(o,kCe(o,...a)):PCe(o,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(o,jEt),o._generator=t,o._styler=e,o._isEmpty=r,o},PCe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=UEt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` -`);return n!==-1&&(e=_Et(e,a,o,n)),o+e+a},K6,kCe=(t,...e)=>{let[r]=e;if(!eQ(r)||!eQ(r.raw))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";var qEt=mB&&mB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(mB,"__esModule",{value:!0});var dB=qEt(iQ()),GEt=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,YEt=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,sQ=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);mB.default=(t,e,r)=>{if(!e)return t;if(e in dB.default){let a=sQ(e,r);return dB.default[a](t)}if(e.startsWith("#")){let a=sQ("hex",r);return dB.default[a](e)(t)}if(e.startsWith("ansi")){let a=YEt.exec(e);if(!a)return t;let n=sQ(a[1],r),u=Number(a[2]);return dB.default[n](u)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=GEt.exec(e);if(!a)return t;let n=sQ(a[1],r),u=Number(a[2]),A=Number(a[3]),p=Number(a[4]);return dB.default[n](u,A,p)(t)}return t}});var TCe=_(yB=>{"use strict";var FCe=yB&&yB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(yB,"__esModule",{value:!0});var WEt=FCe(yCe()),ej=FCe($6());yB.default=(t,e,r,o)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),u=r.style.borderColor,A=WEt.default[r.style.borderStyle],p=ej.default(A.topLeft+A.horizontal.repeat(a-2)+A.topRight,u,"foreground"),h=(ej.default(A.vertical,u,"foreground")+` -`).repeat(n-2),E=ej.default(A.bottomLeft+A.horizontal.repeat(a-2)+A.bottomRight,u,"foreground");o.write(t,e,p,{transformers:[]}),o.write(t,e+1,h,{transformers:[]}),o.write(t+a-1,e+1,h,{transformers:[]}),o.write(t,e+n-1,E,{transformers:[]})}}});var NCe=_(EB=>{"use strict";var am=EB&&EB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(EB,"__esModule",{value:!0});var VEt=am(om()),KEt=am(M6()),JEt=am(hCe()),zEt=am(q6()),XEt=am(gCe()),ZEt=am(Y6()),$Et=am(TCe()),eCt=(t,e)=>{var r;let o=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(o){let a=o.getComputedLeft(),n=o.getComputedTop();e=` -`.repeat(n)+JEt.default(e,a)}return e},RCe=(t,e,r)=>{var o;let{offsetX:a=0,offsetY:n=0,transformers:u=[],skipStaticElements:A}=r;if(A&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===VEt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),I=u;if(typeof t.internal_transform=="function"&&(I=[t.internal_transform,...u]),t.nodeName==="ink-text"){let v=ZEt.default(t);if(v.length>0){let b=KEt.default(v),C=XEt.default(p);if(b>C){let T=(o=t.style.textWrap)!==null&&o!==void 0?o:"wrap";v=zEt.default(v,C,T)}v=eCt(t,v),e.write(h,E,v,{transformers:I})}return}if(t.nodeName==="ink-box"&&$Et.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let v of t.childNodes)RCe(v,e,{offsetX:h,offsetY:E,transformers:I,skipStaticElements:A})}};EB.default=RCe});var MCe=_((WVt,LCe)=>{"use strict";LCe.exports=t=>{t=Object.assign({onlyFirst:!1},t);let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t.onlyFirst?void 0:"g")}});var UCe=_((VVt,tj)=>{"use strict";var tCt=MCe(),OCe=t=>typeof t=="string"?t.replace(tCt(),""):t;tj.exports=OCe;tj.exports.default=OCe});var jCe=_((KVt,HCe)=>{"use strict";var _Ce="[\uD800-\uDBFF][\uDC00-\uDFFF]";HCe.exports=t=>t&&t.exact?new RegExp(`^${_Ce}$`):new RegExp(_Ce,"g")});var GCe=_((JVt,rj)=>{"use strict";var rCt=UCe(),nCt=jCe(),qCe=t=>rCt(t).replace(nCt()," ").length;rj.exports=qCe;rj.exports.default=qCe});var VCe=_(CB=>{"use strict";var WCe=CB&&CB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CB,"__esModule",{value:!0});var YCe=WCe(H6()),iCt=WCe(GCe()),nj=class{constructor(e){this.writes=[];let{width:r,height:o}=e;this.width=r,this.height=o}write(e,r,o,a){let{transformers:n}=a;!o||this.writes.push({x:e,y:r,text:o,transformers:n})}get(){let e=[];for(let o=0;oo.trimRight()).join(` -`),height:e.length}}};CB.default=nj});var zCe=_(wB=>{"use strict";var ij=wB&&wB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wB,"__esModule",{value:!0});var sCt=ij(om()),KCe=ij(NCe()),JCe=ij(VCe());wB.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,sCt.default.DIRECTION_LTR);let o=new JCe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});KCe.default(t,o,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new JCe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),KCe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:u}=o.get();return{output:n,outputHeight:u,staticOutput:a?`${a.get().output} -`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var ewe=_((ZVt,$Ce)=>{"use strict";var XCe=Be("stream"),ZCe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],sj={},oCt=t=>{let e=new XCe.PassThrough,r=new XCe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let o=new console.Console(e,r);for(let a of ZCe)sj[a]=console[a],console[a]=o[a];return()=>{for(let a of ZCe)console[a]=sj[a];sj={}}};$Ce.exports=oCt});var aj=_(oj=>{"use strict";Object.defineProperty(oj,"__esModule",{value:!0});oj.default=new WeakMap});var cj=_(lj=>{"use strict";Object.defineProperty(lj,"__esModule",{value:!0});var aCt=sn(),twe=aCt.createContext({exit:()=>{}});twe.displayName="InternalAppContext";lj.default=twe});var Aj=_(uj=>{"use strict";Object.defineProperty(uj,"__esModule",{value:!0});var lCt=sn(),rwe=lCt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});rwe.displayName="InternalStdinContext";uj.default=rwe});var pj=_(fj=>{"use strict";Object.defineProperty(fj,"__esModule",{value:!0});var cCt=sn(),nwe=cCt.createContext({stdout:void 0,write:()=>{}});nwe.displayName="InternalStdoutContext";fj.default=nwe});var gj=_(hj=>{"use strict";Object.defineProperty(hj,"__esModule",{value:!0});var uCt=sn(),iwe=uCt.createContext({stderr:void 0,write:()=>{}});iwe.displayName="InternalStderrContext";hj.default=iwe});var oQ=_(dj=>{"use strict";Object.defineProperty(dj,"__esModule",{value:!0});var ACt=sn(),swe=ACt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});swe.displayName="InternalFocusContext";dj.default=swe});var awe=_((sKt,owe)=>{"use strict";var fCt=/[|\\{}()[\]^$+*?.-]/g;owe.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(fCt,"\\$&")}});var Awe=_((oKt,uwe)=>{"use strict";var pCt=awe(),hCt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",cwe=[].concat(Be("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));cwe.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var IB=class{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=IB.nodeInternals()),"cwd"in e||(e.cwd=hCt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,gCt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...cwe]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` +`,a)}while(o!==-1);return n+=t.substr(a),n};dCe.exports={stringReplaceAll:SEt,stringEncaseCRLFWithFirstIndex:PEt}});var ICe=_((HKt,wCe)=>{"use strict";var bEt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,yCe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,xEt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,kEt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,QEt=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function CCe(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):QEt.get(t)||t}function FEt(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(xEt))r.push(a[2].replace(kEt,(A,p,h)=>p?CCe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function REt(t){yCe.lastIndex=0;let e=[],r;for(;(r=yCe.exec(t))!==null;){let o=r[1];if(r[2]){let a=FEt(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function ECe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}wCe.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(bEt,(n,u,A,p,h,E)=>{if(u)a.push(CCe(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:ECe(t,r)(I)),r.push({inverse:A,styles:REt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(ECe(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var rQ=_((qKt,bCe)=>{"use strict";var dB=DI(),{stdout:K6,stderr:V6}=dN(),{stringReplaceAll:TEt,stringEncaseCRLFWithFirstIndex:NEt}=mCe(),{isArray:Zk}=Array,vCe=["ansi","ansi","ansi256","ansi16m"],HC=Object.create(null),LEt=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=K6?K6.level:0;t.level=e.level===void 0?r:e.level},J6=class{constructor(e){return DCe(e)}},DCe=t=>{let e={};return LEt(e,t),e.template=(...r)=>PCe(e.template,...r),Object.setPrototypeOf(e,$k.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=J6,e.template};function $k(t){return DCe(t)}for(let[t,e]of Object.entries(dB))HC[t]={get(){let r=eQ(this,z6(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};HC.visible={get(){let t=eQ(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var SCe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of SCe)HC[t]={get(){let{level:e}=this;return function(...r){let o=z6(dB.color[vCe[e]][t](...r),dB.color.close,this._styler);return eQ(this,o,this._isEmpty)}}};for(let t of SCe){let e="bg"+t[0].toUpperCase()+t.slice(1);HC[e]={get(){let{level:r}=this;return function(...o){let a=z6(dB.bgColor[vCe[r]][t](...o),dB.bgColor.close,this._styler);return eQ(this,a,this._isEmpty)}}}}var OEt=Object.defineProperties(()=>{},{...HC,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),z6=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},eQ=(t,e,r)=>{let o=(...a)=>Zk(a[0])&&Zk(a[0].raw)?BCe(o,PCe(o,...a)):BCe(o,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(o,OEt),o._generator=t,o._styler=e,o._isEmpty=r,o},BCe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=TEt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=NEt(e,a,o,n)),o+e+a},W6,PCe=(t,...e)=>{let[r]=e;if(!Zk(r)||!Zk(r.raw))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";var MEt=yB&&yB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(yB,"__esModule",{value:!0});var mB=MEt(rQ()),UEt=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,_Et=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,nQ=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);yB.default=(t,e,r)=>{if(!e)return t;if(e in mB.default){let a=nQ(e,r);return mB.default[a](t)}if(e.startsWith("#")){let a=nQ("hex",r);return mB.default[a](e)(t)}if(e.startsWith("ansi")){let a=_Et.exec(e);if(!a)return t;let n=nQ(a[1],r),u=Number(a[2]);return mB.default[n](u)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=UEt.exec(e);if(!a)return t;let n=nQ(a[1],r),u=Number(a[2]),A=Number(a[3]),p=Number(a[4]);return mB.default[n](u,A,p)(t)}return t}});var kCe=_(EB=>{"use strict";var xCe=EB&&EB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(EB,"__esModule",{value:!0});var HEt=xCe(gCe()),Z6=xCe(X6());EB.default=(t,e,r,o)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),u=r.style.borderColor,A=HEt.default[r.style.borderStyle],p=Z6.default(A.topLeft+A.horizontal.repeat(a-2)+A.topRight,u,"foreground"),h=(Z6.default(A.vertical,u,"foreground")+` +`).repeat(n-2),E=Z6.default(A.bottomLeft+A.horizontal.repeat(a-2)+A.bottomRight,u,"foreground");o.write(t,e,p,{transformers:[]}),o.write(t,e+1,h,{transformers:[]}),o.write(t+a-1,e+1,h,{transformers:[]}),o.write(t,e+n-1,E,{transformers:[]})}}});var FCe=_(CB=>{"use strict";var lm=CB&&CB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CB,"__esModule",{value:!0});var qEt=lm(am()),jEt=lm(N6()),GEt=lm(ACe()),YEt=lm(H6()),WEt=lm(fCe()),KEt=lm(j6()),VEt=lm(kCe()),JEt=(t,e)=>{var r;let o=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(o){let a=o.getComputedLeft(),n=o.getComputedTop();e=` +`.repeat(n)+GEt.default(e,a)}return e},QCe=(t,e,r)=>{var o;let{offsetX:a=0,offsetY:n=0,transformers:u=[],skipStaticElements:A}=r;if(A&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===qEt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),I=u;if(typeof t.internal_transform=="function"&&(I=[t.internal_transform,...u]),t.nodeName==="ink-text"){let v=KEt.default(t);if(v.length>0){let x=jEt.default(v),C=WEt.default(p);if(x>C){let R=(o=t.style.textWrap)!==null&&o!==void 0?o:"wrap";v=YEt.default(v,C,R)}v=JEt(t,v),e.write(h,E,v,{transformers:I})}return}if(t.nodeName==="ink-box"&&VEt.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let v of t.childNodes)QCe(v,e,{offsetX:h,offsetY:E,transformers:I,skipStaticElements:A})}};CB.default=QCe});var TCe=_((WKt,RCe)=>{"use strict";RCe.exports=t=>{t=Object.assign({onlyFirst:!1},t);let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t.onlyFirst?void 0:"g")}});var LCe=_((KKt,$6)=>{"use strict";var zEt=TCe(),NCe=t=>typeof t=="string"?t.replace(zEt(),""):t;$6.exports=NCe;$6.exports.default=NCe});var UCe=_((VKt,MCe)=>{"use strict";var OCe="[\uD800-\uDBFF][\uDC00-\uDFFF]";MCe.exports=t=>t&&t.exact?new RegExp(`^${OCe}$`):new RegExp(OCe,"g")});var HCe=_((JKt,eq)=>{"use strict";var XEt=LCe(),ZEt=UCe(),_Ce=t=>XEt(t).replace(ZEt()," ").length;eq.exports=_Ce;eq.exports.default=_Ce});var GCe=_(wB=>{"use strict";var jCe=wB&&wB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wB,"__esModule",{value:!0});var qCe=jCe(U6()),$Et=jCe(HCe()),tq=class{constructor(e){this.writes=[];let{width:r,height:o}=e;this.width=r,this.height=o}write(e,r,o,a){let{transformers:n}=a;!o||this.writes.push({x:e,y:r,text:o,transformers:n})}get(){let e=[];for(let o=0;oo.trimRight()).join(` +`),height:e.length}}};wB.default=tq});var KCe=_(IB=>{"use strict";var rq=IB&&IB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(IB,"__esModule",{value:!0});var eCt=rq(am()),YCe=rq(FCe()),WCe=rq(GCe());IB.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,eCt.default.DIRECTION_LTR);let o=new WCe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});YCe.default(t,o,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new WCe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),YCe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:u}=o.get();return{output:n,outputHeight:u,staticOutput:a?`${a.get().output} +`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var XCe=_((ZKt,zCe)=>{"use strict";var VCe=ve("stream"),JCe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],nq={},tCt=t=>{let e=new VCe.PassThrough,r=new VCe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let o=new console.Console(e,r);for(let a of JCe)nq[a]=console[a],console[a]=o[a];return()=>{for(let a of JCe)console[a]=nq[a];nq={}}};zCe.exports=tCt});var sq=_(iq=>{"use strict";Object.defineProperty(iq,"__esModule",{value:!0});iq.default=new WeakMap});var aq=_(oq=>{"use strict";Object.defineProperty(oq,"__esModule",{value:!0});var rCt=on(),ZCe=rCt.createContext({exit:()=>{}});ZCe.displayName="InternalAppContext";oq.default=ZCe});var cq=_(lq=>{"use strict";Object.defineProperty(lq,"__esModule",{value:!0});var nCt=on(),$Ce=nCt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});$Ce.displayName="InternalStdinContext";lq.default=$Ce});var Aq=_(uq=>{"use strict";Object.defineProperty(uq,"__esModule",{value:!0});var iCt=on(),ewe=iCt.createContext({stdout:void 0,write:()=>{}});ewe.displayName="InternalStdoutContext";uq.default=ewe});var pq=_(fq=>{"use strict";Object.defineProperty(fq,"__esModule",{value:!0});var sCt=on(),twe=sCt.createContext({stderr:void 0,write:()=>{}});twe.displayName="InternalStderrContext";fq.default=twe});var iQ=_(hq=>{"use strict";Object.defineProperty(hq,"__esModule",{value:!0});var oCt=on(),rwe=oCt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});rwe.displayName="InternalFocusContext";hq.default=rwe});var iwe=_((sVt,nwe)=>{"use strict";var aCt=/[|\\{}()[\]^$+*?.-]/g;nwe.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(aCt,"\\$&")}});var lwe=_((oVt,awe)=>{"use strict";var lCt=iwe(),cCt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",owe=[].concat(ve("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));owe.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var BB=class{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=BB.nodeInternals()),"cwd"in e||(e.cwd=cCt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,uCt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...owe]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` `)),!/^\s*at /.test(e[0])&&/^\s*at /.test(e[1])&&(e=e.slice(1));let o=!1,a=null,n=[];return e.forEach(u=>{if(u=u.replace(/\\/g,"/"),this._internals.some(p=>p.test(u)))return;let A=/^\s*at /.test(u);o?u=u.trimEnd().replace(/^(\s+)at /,"$1"):(u=u.trim(),A&&(u=u.slice(3))),u=u.replace(`${this._cwd}/`,""),u&&(A?(a&&(n.push(a),a=null),n.push(u)):(o=!0,a=u))}),n.map(u=>`${r}${u} -`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:o}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=o,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:o,stackTraceLimit:a}=Error;Error.prepareStackTrace=(A,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:u}=n;return Object.assign(Error,{prepareStackTrace:o,stackTraceLimit:a}),u}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let o={line:r.getLineNumber(),column:r.getColumnNumber()};lwe(o,r.getFileName(),this._cwd),r.isConstructor()&&(o.constructor=!0),r.isEval()&&(o.evalOrigin=r.getEvalOrigin()),r.isNative()&&(o.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(o.type=a);let n=r.getFunctionName();n&&(o.function=n);let u=r.getMethodName();return u&&n!==u&&(o.method=u),o}parseLine(e){let r=e&&e.match(dCt);if(!r)return null;let o=r[1]==="new",a=r[2],n=r[3],u=r[4],A=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],I=r[9],v=r[10]==="native",b=r[11]===")",C,T={};if(E&&(T.line=Number(E)),I&&(T.column=Number(I)),b&&h){let L=0;for(let U=h.length-1;U>0;U--)if(h.charAt(U)===")")L++;else if(h.charAt(U)==="("&&h.charAt(U-1)===" "&&(L--,L===-1&&h.charAt(U-1)===" ")){let J=h.slice(0,U-1);h=h.slice(U+1),a+=` (${J}`;break}}if(a){let L=a.match(mCt);L&&(a=L[1],C=L[2])}return lwe(T,h,this._cwd),o&&(T.constructor=!0),n&&(T.evalOrigin=n,T.evalLine=A,T.evalColumn=p,T.evalFile=u&&u.replace(/\\/g,"/")),v&&(T.native=!0),a&&(T.function=a),C&&a!==C&&(T.method=C),T}};function lwe(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function gCt(t){if(t.length===0)return[];let e=t.map(r=>pCt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var dCt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),mCt=/^(.*?) \[as (.*?)\]$/;uwe.exports=IB});var pwe=_((aKt,fwe)=>{"use strict";fwe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var gwe=_((lKt,hwe)=>{"use strict";var yCt=pwe(),ECt=(t,e)=>{let r=[],o=t-e,a=t+e;for(let n=o;n<=a;n++)r.push(n);return r};hwe.exports=(t,e,r)=>{if(typeof t!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");if(t=yCt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},ECt(e,r.around).filter(o=>t[o-1]!==void 0).map(o=>({line:o,value:t[o-1]}))}});var aQ=_(ru=>{"use strict";var CCt=ru&&ru.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),wCt=ru&&ru.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ICt=ru&&ru.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&CCt(e,t,r);return wCt(e,t),e},BCt=ru&&ru.__rest||function(t,e){var r={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(t);a{var{children:r}=t,o=BCt(t,["children"]);let a=Object.assign(Object.assign({},o),{marginLeft:o.marginLeft||o.marginX||o.margin||0,marginRight:o.marginRight||o.marginX||o.margin||0,marginTop:o.marginTop||o.marginY||o.margin||0,marginBottom:o.marginBottom||o.marginY||o.margin||0,paddingLeft:o.paddingLeft||o.paddingX||o.padding||0,paddingRight:o.paddingRight||o.paddingX||o.padding||0,paddingTop:o.paddingTop||o.paddingY||o.padding||0,paddingBottom:o.paddingBottom||o.paddingY||o.padding||0});return dwe.default.createElement("ink-box",{ref:e,style:a},r)});mj.displayName="Box";mj.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};ru.default=mj});var Cj=_(BB=>{"use strict";var yj=BB&&BB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(BB,"__esModule",{value:!0});var vCt=yj(sn()),HC=yj(iQ()),mwe=yj($6()),Ej=({color:t,backgroundColor:e,dimColor:r,bold:o,italic:a,underline:n,strikethrough:u,inverse:A,wrap:p,children:h})=>{if(h==null)return null;let E=I=>(r&&(I=HC.default.dim(I)),t&&(I=mwe.default(I,t,"foreground")),e&&(I=mwe.default(I,e,"background")),o&&(I=HC.default.bold(I)),a&&(I=HC.default.italic(I)),n&&(I=HC.default.underline(I)),u&&(I=HC.default.strikethrough(I)),A&&(I=HC.default.inverse(I)),I);return vCt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};Ej.displayName="Text";Ej.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};BB.default=Ej});var wwe=_(nu=>{"use strict";var DCt=nu&&nu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),PCt=nu&&nu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),SCt=nu&&nu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&DCt(e,t,r);return PCt(e,t),e},vB=nu&&nu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nu,"__esModule",{value:!0});var ywe=SCt(Be("fs")),fs=vB(sn()),Ewe=vB(Awe()),xCt=vB(gwe()),Xf=vB(aQ()),hA=vB(Cj()),Cwe=new Ewe.default({cwd:process.cwd(),internals:Ewe.default.nodeInternals()}),bCt=({error:t})=>{let e=t.stack?t.stack.split(` -`).slice(1):void 0,r=e?Cwe.parseLine(e[0]):void 0,o,a=0;if(r?.file&&r?.line&&ywe.existsSync(r.file)){let n=ywe.readFileSync(r.file,"utf8");if(o=xCt.default(n,r.line),o)for(let{line:u}of o)a=Math.max(a,String(u).length)}return fs.default.createElement(Xf.default,{flexDirection:"column",padding:1},fs.default.createElement(Xf.default,null,fs.default.createElement(hA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),fs.default.createElement(hA.default,null," ",t.message)),r&&fs.default.createElement(Xf.default,{marginTop:1},fs.default.createElement(hA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&o&&fs.default.createElement(Xf.default,{marginTop:1,flexDirection:"column"},o.map(({line:n,value:u})=>fs.default.createElement(Xf.default,{key:n},fs.default.createElement(Xf.default,{width:a+1},fs.default.createElement(hA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),fs.default.createElement(hA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+u)))),t.stack&&fs.default.createElement(Xf.default,{marginTop:1,flexDirection:"column"},t.stack.split(` -`).slice(1).map(n=>{let u=Cwe.parseLine(n);return u?fs.default.createElement(Xf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},u.function),fs.default.createElement(hA.default,{dimColor:!0,color:"gray"}," ","(",u.file,":",u.line,":",u.column,")")):fs.default.createElement(Xf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},n))})))};nu.default=bCt});var Bwe=_(iu=>{"use strict";var kCt=iu&&iu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),QCt=iu&&iu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),FCt=iu&&iu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&kCt(e,t,r);return QCt(e,t),e},cm=iu&&iu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iu,"__esModule",{value:!0});var lm=FCt(sn()),Iwe=cm(m6()),TCt=cm(cj()),RCt=cm(Aj()),NCt=cm(pj()),LCt=cm(gj()),MCt=cm(oQ()),OCt=cm(wwe()),UCt=" ",_Ct="\x1B[Z",HCt="\x1B",lQ=class extends lm.PureComponent{constructor(){super(...arguments),this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=e=>{let{stdin:r}=this.props;if(!this.isRawModeSupported())throw r===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. +`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:o}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=o,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:o,stackTraceLimit:a}=Error;Error.prepareStackTrace=(A,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:u}=n;return Object.assign(Error,{prepareStackTrace:o,stackTraceLimit:a}),u}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let o={line:r.getLineNumber(),column:r.getColumnNumber()};swe(o,r.getFileName(),this._cwd),r.isConstructor()&&(o.constructor=!0),r.isEval()&&(o.evalOrigin=r.getEvalOrigin()),r.isNative()&&(o.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(o.type=a);let n=r.getFunctionName();n&&(o.function=n);let u=r.getMethodName();return u&&n!==u&&(o.method=u),o}parseLine(e){let r=e&&e.match(ACt);if(!r)return null;let o=r[1]==="new",a=r[2],n=r[3],u=r[4],A=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],I=r[9],v=r[10]==="native",x=r[11]===")",C,R={};if(E&&(R.line=Number(E)),I&&(R.column=Number(I)),x&&h){let L=0;for(let U=h.length-1;U>0;U--)if(h.charAt(U)===")")L++;else if(h.charAt(U)==="("&&h.charAt(U-1)===" "&&(L--,L===-1&&h.charAt(U-1)===" ")){let J=h.slice(0,U-1);h=h.slice(U+1),a+=` (${J}`;break}}if(a){let L=a.match(fCt);L&&(a=L[1],C=L[2])}return swe(R,h,this._cwd),o&&(R.constructor=!0),n&&(R.evalOrigin=n,R.evalLine=A,R.evalColumn=p,R.evalFile=u&&u.replace(/\\/g,"/")),v&&(R.native=!0),a&&(R.function=a),C&&a!==C&&(R.method=C),R}};function swe(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function uCt(t){if(t.length===0)return[];let e=t.map(r=>lCt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var ACt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),fCt=/^(.*?) \[as (.*?)\]$/;awe.exports=BB});var uwe=_((aVt,cwe)=>{"use strict";cwe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var fwe=_((lVt,Awe)=>{"use strict";var pCt=uwe(),hCt=(t,e)=>{let r=[],o=t-e,a=t+e;for(let n=o;n<=a;n++)r.push(n);return r};Awe.exports=(t,e,r)=>{if(typeof t!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");if(t=pCt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},hCt(e,r.around).filter(o=>t[o-1]!==void 0).map(o=>({line:o,value:t[o-1]}))}});var sQ=_(ru=>{"use strict";var gCt=ru&&ru.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),dCt=ru&&ru.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),mCt=ru&&ru.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&gCt(e,t,r);return dCt(e,t),e},yCt=ru&&ru.__rest||function(t,e){var r={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(t);a{var{children:r}=t,o=yCt(t,["children"]);let a=Object.assign(Object.assign({},o),{marginLeft:o.marginLeft||o.marginX||o.margin||0,marginRight:o.marginRight||o.marginX||o.margin||0,marginTop:o.marginTop||o.marginY||o.margin||0,marginBottom:o.marginBottom||o.marginY||o.margin||0,paddingLeft:o.paddingLeft||o.paddingX||o.padding||0,paddingRight:o.paddingRight||o.paddingX||o.padding||0,paddingTop:o.paddingTop||o.paddingY||o.padding||0,paddingBottom:o.paddingBottom||o.paddingY||o.padding||0});return pwe.default.createElement("ink-box",{ref:e,style:a},r)});gq.displayName="Box";gq.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};ru.default=gq});var yq=_(vB=>{"use strict";var dq=vB&&vB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(vB,"__esModule",{value:!0});var ECt=dq(on()),qC=dq(rQ()),hwe=dq(X6()),mq=({color:t,backgroundColor:e,dimColor:r,bold:o,italic:a,underline:n,strikethrough:u,inverse:A,wrap:p,children:h})=>{if(h==null)return null;let E=I=>(r&&(I=qC.default.dim(I)),t&&(I=hwe.default(I,t,"foreground")),e&&(I=hwe.default(I,e,"background")),o&&(I=qC.default.bold(I)),a&&(I=qC.default.italic(I)),n&&(I=qC.default.underline(I)),u&&(I=qC.default.strikethrough(I)),A&&(I=qC.default.inverse(I)),I);return ECt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};mq.displayName="Text";mq.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};vB.default=mq});var ywe=_(nu=>{"use strict";var CCt=nu&&nu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),wCt=nu&&nu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ICt=nu&&nu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&CCt(e,t,r);return wCt(e,t),e},DB=nu&&nu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nu,"__esModule",{value:!0});var gwe=ICt(ve("fs")),fs=DB(on()),dwe=DB(lwe()),BCt=DB(fwe()),Zf=DB(sQ()),hA=DB(yq()),mwe=new dwe.default({cwd:process.cwd(),internals:dwe.default.nodeInternals()}),vCt=({error:t})=>{let e=t.stack?t.stack.split(` +`).slice(1):void 0,r=e?mwe.parseLine(e[0]):void 0,o,a=0;if(r?.file&&r?.line&&gwe.existsSync(r.file)){let n=gwe.readFileSync(r.file,"utf8");if(o=BCt.default(n,r.line),o)for(let{line:u}of o)a=Math.max(a,String(u).length)}return fs.default.createElement(Zf.default,{flexDirection:"column",padding:1},fs.default.createElement(Zf.default,null,fs.default.createElement(hA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),fs.default.createElement(hA.default,null," ",t.message)),r&&fs.default.createElement(Zf.default,{marginTop:1},fs.default.createElement(hA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&o&&fs.default.createElement(Zf.default,{marginTop:1,flexDirection:"column"},o.map(({line:n,value:u})=>fs.default.createElement(Zf.default,{key:n},fs.default.createElement(Zf.default,{width:a+1},fs.default.createElement(hA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),fs.default.createElement(hA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+u)))),t.stack&&fs.default.createElement(Zf.default,{marginTop:1,flexDirection:"column"},t.stack.split(` +`).slice(1).map(n=>{let u=mwe.parseLine(n);return u?fs.default.createElement(Zf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},u.function),fs.default.createElement(hA.default,{dimColor:!0,color:"gray"}," ","(",u.file,":",u.line,":",u.column,")")):fs.default.createElement(Zf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},n))})))};nu.default=vCt});var Cwe=_(iu=>{"use strict";var DCt=iu&&iu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),SCt=iu&&iu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),PCt=iu&&iu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&DCt(e,t,r);return SCt(e,t),e},um=iu&&iu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iu,"__esModule",{value:!0});var cm=PCt(on()),Ewe=um(g6()),bCt=um(aq()),xCt=um(cq()),kCt=um(Aq()),QCt=um(pq()),FCt=um(iQ()),RCt=um(ywe()),TCt=" ",NCt="\x1B[Z",LCt="\x1B",oQ=class extends cm.PureComponent{constructor(){super(...arguments),this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=e=>{let{stdin:r}=this.props;if(!this.isRawModeSupported())throw r===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(r.setEncoding("utf8"),e){this.rawModeEnabledCount===0&&(r.addListener("data",this.handleInput),r.resume(),r.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount===0&&(r.setRawMode(!1),r.removeListener("data",this.handleInput),r.pause())},this.handleInput=e=>{e===""&&this.props.exitOnCtrlC&&this.handleExit(),e===HCt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===UCt&&this.focusNext(),e===_Ct&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(e=>{let r=e.focusables[0].id;return{activeFocusId:this.findNextFocusable(e)||r}})},this.focusPrevious=()=>{this.setState(e=>{let r=e.focusables[e.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(e)||r}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(o=>{let a=o.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...o.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(o=>o.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r+1;o{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r-1;o>=0;o--)if(e.focusables[o].isActive)return e.focusables[o].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return lm.default.createElement(TCt.default.Provider,{value:{exit:this.handleExit}},lm.default.createElement(RCt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},lm.default.createElement(NCt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},lm.default.createElement(LCt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},lm.default.createElement(MCt.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?lm.default.createElement(OCt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){Iwe.default.hide(this.props.stdout)}componentWillUnmount(){Iwe.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};iu.default=lQ;lQ.displayName="InternalApp"});var Pwe=_(su=>{"use strict";var jCt=su&&su.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),qCt=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),GCt=su&&su.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&jCt(e,t,r);return qCt(e,t),e},ou=su&&su.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(su,"__esModule",{value:!0});var YCt=ou(sn()),vwe=uO(),WCt=ou(AEe()),VCt=ou(f6()),KCt=ou(mEe()),JCt=ou(EEe()),wj=ou(fCe()),zCt=ou(zCe()),XCt=ou(d6()),ZCt=ou(ewe()),$Ct=GCt(W6()),ewt=ou(aj()),twt=ou(Bwe()),jC=process.env.CI==="false"?!1:KCt.default,Dwe=()=>{},Ij=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:o,staticOutput:a}=zCt.default(this.rootNode,this.options.stdout.columns||80),n=a&&a!==` -`;if(this.options.debug){n&&(this.fullStaticOutput+=a),this.options.stdout.write(this.fullStaticOutput+r);return}if(jC){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),o>=this.options.stdout.rows){this.options.stdout.write(VCt.default.clearTerminal+this.fullStaticOutput+r),this.lastOutput=r;return}n&&(this.log.clear(),this.options.stdout.write(a),this.log(r)),!n&&r!==this.lastOutput&&this.throttledLog(r),this.lastOutput=r},JCt.default(this),this.options=e,this.rootNode=$Ct.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:vwe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=WCt.default.create(e.stdout),this.throttledLog=e.debug?this.log:vwe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=wj.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=XCt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),jC||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=YCt.default.createElement(twt.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},e);wj.default.updateContainer(r,this.container,null,Dwe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stdout.write(e);return}this.log.clear(),this.options.stdout.write(e),this.log(this.lastOutput)}}writeToStderr(e){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(e),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stderr.write(e);return}this.log.clear(),this.options.stderr.write(e),this.log(this.lastOutput)}}unmount(e){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),jC?this.options.stdout.write(this.lastOutput+` -`):this.options.debug||this.log.done(),this.isUnmounted=!0,wj.default.updateContainer(null,this.container,null,Dwe),ewt.default.delete(this.options.stdout),e instanceof Error?this.rejectExitPromise(e):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((e,r)=>{this.resolveExitPromise=e,this.rejectExitPromise=r})),this.exitPromise}clear(){!jC&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=ZCt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};su.default=Ij});var xwe=_(DB=>{"use strict";var Swe=DB&&DB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(DB,"__esModule",{value:!0});var rwt=Swe(Pwe()),cQ=Swe(aj()),nwt=Be("stream"),iwt=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},swt(e)),o=owt(r.stdout,()=>new rwt.default(r));return o.render(t),{rerender:o.render,unmount:()=>o.unmount(),waitUntilExit:o.waitUntilExit,cleanup:()=>cQ.default.delete(r.stdout),clear:o.clear}};DB.default=iwt;var swt=(t={})=>t instanceof nwt.Stream?{stdout:t,stdin:process.stdin}:t,owt=(t,e)=>{let r;return cQ.default.has(t)?r=cQ.default.get(t):(r=e(),cQ.default.set(t,r)),r}});var kwe=_(Zf=>{"use strict";var awt=Zf&&Zf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),lwt=Zf&&Zf.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),cwt=Zf&&Zf.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&awt(e,t,r);return lwt(e,t),e};Object.defineProperty(Zf,"__esModule",{value:!0});var PB=cwt(sn()),bwe=t=>{let{items:e,children:r,style:o}=t,[a,n]=PB.useState(0),u=PB.useMemo(()=>e.slice(a),[e,a]);PB.useLayoutEffect(()=>{n(e.length)},[e.length]);let A=u.map((h,E)=>r(h,a+E)),p=PB.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},o),[o]);return PB.default.createElement("ink-box",{internal_static:!0,style:p},A)};bwe.displayName="Static";Zf.default=bwe});var Fwe=_(SB=>{"use strict";var uwt=SB&&SB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(SB,"__esModule",{value:!0});var Awt=uwt(sn()),Qwe=({children:t,transform:e})=>t==null?null:Awt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);Qwe.displayName="Transform";SB.default=Qwe});var Rwe=_(xB=>{"use strict";var fwt=xB&&xB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xB,"__esModule",{value:!0});var pwt=fwt(sn()),Twe=({count:t=1})=>pwt.default.createElement("ink-text",null,` -`.repeat(t));Twe.displayName="Newline";xB.default=Twe});var Mwe=_(bB=>{"use strict";var Nwe=bB&&bB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(bB,"__esModule",{value:!0});var hwt=Nwe(sn()),gwt=Nwe(aQ()),Lwe=()=>hwt.default.createElement(gwt.default,{flexGrow:1});Lwe.displayName="Spacer";bB.default=Lwe});var uQ=_(kB=>{"use strict";var dwt=kB&&kB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kB,"__esModule",{value:!0});var mwt=sn(),ywt=dwt(Aj()),Ewt=()=>mwt.useContext(ywt.default);kB.default=Ewt});var Uwe=_(QB=>{"use strict";var Cwt=QB&&QB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(QB,"__esModule",{value:!0});var Owe=sn(),wwt=Cwt(uQ()),Iwt=(t,e={})=>{let{stdin:r,setRawMode:o,internal_exitOnCtrlC:a}=wwt.default();Owe.useEffect(()=>{if(e.isActive!==!1)return o(!0),()=>{o(!1)}},[e.isActive,o]),Owe.useEffect(()=>{if(e.isActive===!1)return;let n=u=>{let A=String(u),p={upArrow:A==="\x1B[A",downArrow:A==="\x1B[B",leftArrow:A==="\x1B[D",rightArrow:A==="\x1B[C",pageDown:A==="\x1B[6~",pageUp:A==="\x1B[5~",return:A==="\r",escape:A==="\x1B",ctrl:!1,shift:!1,tab:A===" "||A==="\x1B[Z",backspace:A==="\b",delete:A==="\x7F"||A==="\x1B[3~",meta:!1};A<=""&&!p.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),p.ctrl=!0),A.startsWith("\x1B")&&(A=A.slice(1),p.meta=!0);let h=A>="A"&&A<="Z",E=A>="\u0410"&&A<="\u042F";A.length===1&&(h||E)&&(p.shift=!0),p.tab&&A==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(A=""),(!(A==="c"&&p.ctrl)||!a)&&t(A,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};QB.default=Iwt});var _we=_(FB=>{"use strict";var Bwt=FB&&FB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(FB,"__esModule",{value:!0});var vwt=sn(),Dwt=Bwt(cj()),Pwt=()=>vwt.useContext(Dwt.default);FB.default=Pwt});var Hwe=_(TB=>{"use strict";var Swt=TB&&TB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(TB,"__esModule",{value:!0});var xwt=sn(),bwt=Swt(pj()),kwt=()=>xwt.useContext(bwt.default);TB.default=kwt});var jwe=_(RB=>{"use strict";var Qwt=RB&&RB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(RB,"__esModule",{value:!0});var Fwt=sn(),Twt=Qwt(gj()),Rwt=()=>Fwt.useContext(Twt.default);RB.default=Rwt});var Gwe=_(LB=>{"use strict";var qwe=LB&&LB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(LB,"__esModule",{value:!0});var NB=sn(),Nwt=qwe(oQ()),Lwt=qwe(uQ()),Mwt=({isActive:t=!0,autoFocus:e=!1}={})=>{let{isRawModeSupported:r,setRawMode:o}=Lwt.default(),{activeId:a,add:n,remove:u,activate:A,deactivate:p}=NB.useContext(Nwt.default),h=NB.useMemo(()=>Math.random().toString().slice(2,7),[]);return NB.useEffect(()=>(n(h,{autoFocus:e}),()=>{u(h)}),[h,e]),NB.useEffect(()=>{t?A(h):p(h)},[t,h]),NB.useEffect(()=>{if(!(!r||!t))return o(!0),()=>{o(!1)}},[t]),{isFocused:Boolean(h)&&a===h}};LB.default=Mwt});var Ywe=_(MB=>{"use strict";var Owt=MB&&MB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(MB,"__esModule",{value:!0});var Uwt=sn(),_wt=Owt(oQ()),Hwt=()=>{let t=Uwt.useContext(_wt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious}};MB.default=Hwt});var Wwe=_(Bj=>{"use strict";Object.defineProperty(Bj,"__esModule",{value:!0});Bj.default=t=>{var e,r,o,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(o=t.yogaNode)===null||o===void 0?void 0:o.getComputedHeight())!==null&&a!==void 0?a:0}}});var ic=_(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});var jwt=xwe();Object.defineProperty(ro,"render",{enumerable:!0,get:function(){return jwt.default}});var qwt=aQ();Object.defineProperty(ro,"Box",{enumerable:!0,get:function(){return qwt.default}});var Gwt=Cj();Object.defineProperty(ro,"Text",{enumerable:!0,get:function(){return Gwt.default}});var Ywt=kwe();Object.defineProperty(ro,"Static",{enumerable:!0,get:function(){return Ywt.default}});var Wwt=Fwe();Object.defineProperty(ro,"Transform",{enumerable:!0,get:function(){return Wwt.default}});var Vwt=Rwe();Object.defineProperty(ro,"Newline",{enumerable:!0,get:function(){return Vwt.default}});var Kwt=Mwe();Object.defineProperty(ro,"Spacer",{enumerable:!0,get:function(){return Kwt.default}});var Jwt=Uwe();Object.defineProperty(ro,"useInput",{enumerable:!0,get:function(){return Jwt.default}});var zwt=_we();Object.defineProperty(ro,"useApp",{enumerable:!0,get:function(){return zwt.default}});var Xwt=uQ();Object.defineProperty(ro,"useStdin",{enumerable:!0,get:function(){return Xwt.default}});var Zwt=Hwe();Object.defineProperty(ro,"useStdout",{enumerable:!0,get:function(){return Zwt.default}});var $wt=jwe();Object.defineProperty(ro,"useStderr",{enumerable:!0,get:function(){return $wt.default}});var eIt=Gwe();Object.defineProperty(ro,"useFocus",{enumerable:!0,get:function(){return eIt.default}});var tIt=Ywe();Object.defineProperty(ro,"useFocusManager",{enumerable:!0,get:function(){return tIt.default}});var rIt=Wwe();Object.defineProperty(ro,"measureElement",{enumerable:!0,get:function(){return rIt.default}})});var Dj={};Kt(Dj,{Gem:()=>vj});var Vwe,um,vj,AQ=Et(()=>{Vwe=$e(ic()),um=$e(sn()),vj=(0,um.memo)(({active:t})=>{let e=(0,um.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,um.useMemo)(()=>t?"green":"yellow",[t]);return um.default.createElement(Vwe.Text,{color:r},e)})});var Jwe={};Kt(Jwe,{useKeypress:()=>Am});function Am({active:t},e,r){let{stdin:o}=(0,Kwe.useStdin)(),a=(0,fQ.useCallback)((n,u)=>e(n,u),r);(0,fQ.useEffect)(()=>{if(!(!t||!o))return o.on("keypress",a),()=>{o.off("keypress",a)}},[t,a,o])}var Kwe,fQ,OB=Et(()=>{Kwe=$e(ic()),fQ=$e(sn())});var Xwe={};Kt(Xwe,{FocusRequest:()=>zwe,useFocusRequest:()=>Pj});var zwe,Pj,Sj=Et(()=>{OB();zwe=(r=>(r.BEFORE="before",r.AFTER="after",r))(zwe||{}),Pj=function({active:t},e,r){Am({active:t},(o,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var Zwe={};Kt(Zwe,{useListInput:()=>UB});var UB,pQ=Et(()=>{OB();UB=function(t,e,{active:r,minus:o,plus:a,set:n,loop:u=!0}){Am({active:r},(A,p)=>{let h=e.indexOf(t);switch(p.name){case o:{let E=h-1;if(u){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(u){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,u])}});var hQ={};Kt(hQ,{ScrollableItems:()=>nIt});var E0,La,nIt,gQ=Et(()=>{E0=$e(ic()),La=$e(sn());Sj();pQ();nIt=({active:t=!0,children:e=[],radius:r=10,size:o=1,loop:a=!0,onFocusRequest:n,willReachEnd:u})=>{let A=L=>{if(L.key===null)throw new Error("Expected all children to have a key");return L.key},p=La.default.Children.map(e,L=>A(L)),h=p[0],[E,I]=(0,La.useState)(h),v=p.indexOf(E);(0,La.useEffect)(()=>{p.includes(E)||I(h)},[e]),(0,La.useEffect)(()=>{u&&v>=p.length-2&&u()},[v]),Pj({active:t&&!!n},L=>{n?.(L)},[n]),UB(E,p,{active:t,minus:"up",plus:"down",set:I,loop:a});let b=v-r,C=v+r;C>p.length&&(b-=C-p.length,C=p.length),b<0&&(C+=-b,b=0),C>=p.length&&(C=p.length-1);let T=[];for(let L=b;L<=C;++L){let U=p[L],J=t&&U===E;T.push(La.default.createElement(E0.Box,{key:U,height:o},La.default.createElement(E0.Box,{marginLeft:1,marginRight:1},La.default.createElement(E0.Text,null,J?La.default.createElement(E0.Text,{color:"cyan",bold:!0},">"):" ")),La.default.createElement(E0.Box,null,La.default.cloneElement(e[L],{active:J}))))}return La.default.createElement(E0.Box,{flexDirection:"column",width:"100%"},T)}});var $we,$f,eIe,xj,tIe,bj=Et(()=>{$we=$e(ic()),$f=$e(sn()),eIe=Be("readline"),xj=$f.default.createContext(null),tIe=({children:t})=>{let{stdin:e,setRawMode:r}=(0,$we.useStdin)();(0,$f.useEffect)(()=>{r&&r(!0),e&&(0,eIe.emitKeypressEvents)(e)},[e,r]);let[o,a]=(0,$f.useState)(new Map),n=(0,$f.useMemo)(()=>({getAll:()=>o,get:u=>o.get(u),set:(u,A)=>a(new Map([...o,[u,A]]))}),[o,a]);return $f.default.createElement(xj.Provider,{value:n,children:t})}});var kj={};Kt(kj,{useMinistore:()=>iIt});function iIt(t,e){let r=(0,dQ.useContext)(xj);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let o=(0,dQ.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,o]}var dQ,Qj=Et(()=>{dQ=$e(sn());bj()});var yQ={};Kt(yQ,{renderForm:()=>sIt});async function sIt(t,e,{stdin:r,stdout:o,stderr:a}){let n,u=p=>{let{exit:h}=(0,mQ.useApp)();Am({active:!0},(E,I)=>{I.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:A}=(0,mQ.render)(Fj.default.createElement(tIe,null,Fj.default.createElement(t,{...e,useSubmit:u})),{stdin:r,stdout:o,stderr:a});return await A(),n}var mQ,Fj,EQ=Et(()=>{mQ=$e(ic()),Fj=$e(sn());bj();OB()});var sIe=_(_B=>{"use strict";Object.defineProperty(_B,"__esModule",{value:!0});_B.UncontrolledTextInput=void 0;var nIe=sn(),Tj=sn(),rIe=ic(),fm=iQ(),iIe=({value:t,placeholder:e="",focus:r=!0,mask:o,highlightPastedText:a=!1,showCursor:n=!0,onChange:u,onSubmit:A})=>{let[{cursorOffset:p,cursorWidth:h},E]=Tj.useState({cursorOffset:(t||"").length,cursorWidth:0});Tj.useEffect(()=>{E(T=>{if(!r||!n)return T;let L=t||"";return T.cursorOffset>L.length-1?{cursorOffset:L.length,cursorWidth:0}:T})},[t,r,n]);let I=a?h:0,v=o?o.repeat(t.length):t,b=v,C=e?fm.grey(e):void 0;if(n&&r){C=e.length>0?fm.inverse(e[0])+fm.grey(e.slice(1)):fm.inverse(" "),b=v.length>0?"":fm.inverse(" ");let T=0;for(let L of v)T>=p-I&&T<=p?b+=fm.inverse(L):b+=L,T++;v.length>0&&p===v.length&&(b+=fm.inverse(" "))}return rIe.useInput((T,L)=>{if(L.upArrow||L.downArrow||L.ctrl&&T==="c"||L.tab||L.shift&&L.tab)return;if(L.return){A&&A(t);return}let U=p,J=t,te=0;L.leftArrow?n&&U--:L.rightArrow?n&&U++:L.backspace||L.delete?p>0&&(J=t.slice(0,p-1)+t.slice(p,t.length),U--):(J=t.slice(0,p)+T+t.slice(p,t.length),U+=T.length,T.length>1&&(te=T.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:te}),J!==t&&u(J)},{isActive:r}),nIe.createElement(rIe.Text,null,e?v.length>0?b:C:b)};_B.default=iIe;_B.UncontrolledTextInput=t=>{let[e,r]=Tj.useState("");return nIe.createElement(iIe,Object.assign({},t,{value:e,onChange:r}))}});var lIe={};Kt(lIe,{Pad:()=>Rj});var oIe,aIe,Rj,Nj=Et(()=>{oIe=$e(ic()),aIe=$e(sn()),Rj=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return aIe.default.createElement(oIe.Text,{dimColor:!e},r)}});var cIe={};Kt(cIe,{ItemOptions:()=>oIt});var jB,w0,oIt,uIe=Et(()=>{jB=$e(ic()),w0=$e(sn());pQ();AQ();Nj();oIt=function({active:t,skewer:e,options:r,value:o,onChange:a,sizes:n=[]}){let u=r.filter(({label:p})=>!!p).map(({value:p})=>p),A=r.findIndex(p=>p.value===o&&p.label!="");return UB(o,u,{active:t,minus:"left",plus:"right",set:a}),w0.default.createElement(w0.default.Fragment,null,r.map(({label:p},h)=>{let E=h===A,I=n[h]-1||0,v=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),b=Math.max(0,I-v.length-2);return p?w0.default.createElement(jB.Box,{key:p,width:I,marginLeft:1},w0.default.createElement(jB.Text,{wrap:"truncate"},w0.default.createElement(vj,{active:E})," ",p),e?w0.default.createElement(Rj,{active:t,length:b}):null):w0.default.createElement(jB.Box,{key:`spacer-${h}`,width:I,marginLeft:1})}))}});var PIe=_((zJt,DIe)=>{var Gj;DIe.exports=()=>(typeof Gj>"u"&&(Gj=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),Gj)});var VIe=_((wzt,WIe)=>{var $j=Symbol("arg flag"),Ma=class extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,Ma.prototype)}};function iv(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:o=!1}={}){if(!t)throw new Ma("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},u={};for(let A of Object.keys(t)){if(!A)throw new Ma("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(A[0]!=="-")throw new Ma(`argument key must start with '-' but found: '${A}'`,"ARG_CONFIG_NONOPT_KEY");if(A.length===1)throw new Ma(`argument key must have a name; singular '-' keys are not allowed: ${A}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[A]=="string"){n[A]=t[A];continue}let p=t[A],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(I,v,b=[])=>(b.push(E(I,v,b[b.length-1])),b),h=E===Boolean||E[$j]===!0}else if(typeof p=="function")h=p===Boolean||p[$j]===!0;else throw new Ma(`type missing or not a function or valid array type: ${A}`,"ARG_CONFIG_VAD_TYPE");if(A[1]!=="-"&&A.length>2)throw new Ma(`short argument keys (with a single hyphen) must have only one character: ${A}`,"ARG_CONFIG_SHORTOPT_TOOLONG");u[A]=[p,h]}for(let A=0,p=e.length;A0){a._=a._.concat(e.slice(A));break}if(h==="--"){a._=a._.concat(e.slice(A+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(I=>`-${I}`);for(let I=0;I1&&e[A+1][0]==="-"&&!(e[A+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(L===Number||typeof BigInt<"u"&&L===BigInt))){let J=b===T?"":` (alias for ${T})`;throw new Ma(`option requires argument: ${b}${J}`,"ARG_MISSING_REQUIRED_LONGARG")}a[T]=L(e[A+1],T,a[T]),++A}else a[T]=L(C,T,a[T])}}else a._.push(h)}return a}iv.flag=t=>(t[$j]=!0,t);iv.COUNT=iv.flag((t,e,r)=>(r||0)+1);iv.ArgError=Ma;WIe.exports=iv});var t1e=_((Kzt,e1e)=>{var nq;e1e.exports=()=>(typeof nq>"u"&&(nq=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),nq)});var o1e=_((cq,uq)=>{(function(t){cq&&typeof cq=="object"&&typeof uq<"u"?uq.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window<"u"?window.isWindows=t():typeof global<"u"?global.isWindows=t():typeof self<"u"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var u1e=_((WXt,c1e)=>{"use strict";Aq.ifExists=n1t;var GC=Be("util"),sc=Be("path"),a1e=o1e(),e1t=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,t1t={createPwshFile:!0,createCmdFile:a1e(),fs:Be("fs")},r1t=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function l1e(t){let e={...t1t,...t},r=e.fs;return e.fs_={chmod:r.chmod?GC.promisify(r.chmod):async()=>{},mkdir:GC.promisify(r.mkdir),readFile:GC.promisify(r.readFile),stat:GC.promisify(r.stat),unlink:GC.promisify(r.unlink),writeFile:GC.promisify(r.writeFile)},e}async function Aq(t,e,r){let o=l1e(r);await o.fs_.stat(t),await s1t(t,e,o)}function n1t(t,e,r){return Aq(t,e,r).catch(()=>{})}function i1t(t,e){return e.fs_.unlink(t).catch(()=>{})}async function s1t(t,e,r){let o=await u1t(t,r);return await o1t(e,r),a1t(t,e,o,r)}function o1t(t,e){return e.fs_.mkdir(sc.dirname(t),{recursive:!0})}function a1t(t,e,r,o){let a=l1e(o),n=[{generator:p1t,extension:""}];return a.createCmdFile&&n.push({generator:f1t,extension:".cmd"}),a.createPwshFile&&n.push({generator:h1t,extension:".ps1"}),Promise.all(n.map(u=>A1t(t,e+u.extension,r,u.generator,a)))}function l1t(t,e){return i1t(t,e)}function c1t(t,e){return g1t(t,e)}async function u1t(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(e1t);if(!a){let n=sc.extname(t).toLowerCase();return{program:r1t.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function A1t(t,e,r,o,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",u=[r.additionalArgs,n].filter(A=>A).join(" ");return a=Object.assign({},a,{prog:r.program,args:u}),await l1t(e,a),await a.fs_.writeFile(e,o(t,e,a),"utf8"),c1t(e,a)}function f1t(t,e,r){let a=sc.relative(sc.dirname(e),t).split("/").join("\\"),n=sc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,u,A=r.prog,p=r.args||"",h=fq(r.nodePath).win32;A?(u=`"%~dp0\\${A}.exe"`,a=n):(A=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",I=h?`@SET NODE_PATH=${h}\r +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(r.setEncoding("utf8"),e){this.rawModeEnabledCount===0&&(r.addListener("data",this.handleInput),r.resume(),r.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount===0&&(r.setRawMode(!1),r.removeListener("data",this.handleInput),r.pause())},this.handleInput=e=>{e===""&&this.props.exitOnCtrlC&&this.handleExit(),e===LCt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===TCt&&this.focusNext(),e===NCt&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(e=>{let r=e.focusables[0].id;return{activeFocusId:this.findNextFocusable(e)||r}})},this.focusPrevious=()=>{this.setState(e=>{let r=e.focusables[e.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(e)||r}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(o=>{let a=o.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...o.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(o=>o.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r+1;o{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r-1;o>=0;o--)if(e.focusables[o].isActive)return e.focusables[o].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return cm.default.createElement(bCt.default.Provider,{value:{exit:this.handleExit}},cm.default.createElement(xCt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},cm.default.createElement(kCt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},cm.default.createElement(QCt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},cm.default.createElement(FCt.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?cm.default.createElement(RCt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){Ewe.default.hide(this.props.stdout)}componentWillUnmount(){Ewe.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};iu.default=oQ;oQ.displayName="InternalApp"});var Bwe=_(su=>{"use strict";var OCt=su&&su.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),MCt=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),UCt=su&&su.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&OCt(e,t,r);return MCt(e,t),e},ou=su&&su.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(su,"__esModule",{value:!0});var _Ct=ou(on()),wwe=lM(),HCt=ou(lEe()),qCt=ou(u6()),jCt=ou(hEe()),GCt=ou(dEe()),Eq=ou(cCe()),YCt=ou(KCe()),WCt=ou(h6()),KCt=ou(XCe()),VCt=UCt(G6()),JCt=ou(sq()),zCt=ou(Cwe()),jC=process.env.CI==="false"?!1:jCt.default,Iwe=()=>{},Cq=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:o,staticOutput:a}=YCt.default(this.rootNode,this.options.stdout.columns||80),n=a&&a!==` +`;if(this.options.debug){n&&(this.fullStaticOutput+=a),this.options.stdout.write(this.fullStaticOutput+r);return}if(jC){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),o>=this.options.stdout.rows){this.options.stdout.write(qCt.default.clearTerminal+this.fullStaticOutput+r),this.lastOutput=r;return}n&&(this.log.clear(),this.options.stdout.write(a),this.log(r)),!n&&r!==this.lastOutput&&this.throttledLog(r),this.lastOutput=r},GCt.default(this),this.options=e,this.rootNode=VCt.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:wwe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=HCt.default.create(e.stdout),this.throttledLog=e.debug?this.log:wwe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=Eq.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=WCt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),jC||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=_Ct.default.createElement(zCt.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},e);Eq.default.updateContainer(r,this.container,null,Iwe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stdout.write(e);return}this.log.clear(),this.options.stdout.write(e),this.log(this.lastOutput)}}writeToStderr(e){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(e),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stderr.write(e);return}this.log.clear(),this.options.stderr.write(e),this.log(this.lastOutput)}}unmount(e){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),jC?this.options.stdout.write(this.lastOutput+` +`):this.options.debug||this.log.done(),this.isUnmounted=!0,Eq.default.updateContainer(null,this.container,null,Iwe),JCt.default.delete(this.options.stdout),e instanceof Error?this.rejectExitPromise(e):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((e,r)=>{this.resolveExitPromise=e,this.rejectExitPromise=r})),this.exitPromise}clear(){!jC&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=KCt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};su.default=Cq});var Dwe=_(SB=>{"use strict";var vwe=SB&&SB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(SB,"__esModule",{value:!0});var XCt=vwe(Bwe()),aQ=vwe(sq()),ZCt=ve("stream"),$Ct=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},ewt(e)),o=twt(r.stdout,()=>new XCt.default(r));return o.render(t),{rerender:o.render,unmount:()=>o.unmount(),waitUntilExit:o.waitUntilExit,cleanup:()=>aQ.default.delete(r.stdout),clear:o.clear}};SB.default=$Ct;var ewt=(t={})=>t instanceof ZCt.Stream?{stdout:t,stdin:process.stdin}:t,twt=(t,e)=>{let r;return aQ.default.has(t)?r=aQ.default.get(t):(r=e(),aQ.default.set(t,r)),r}});var Pwe=_($f=>{"use strict";var rwt=$f&&$f.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),nwt=$f&&$f.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),iwt=$f&&$f.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&rwt(e,t,r);return nwt(e,t),e};Object.defineProperty($f,"__esModule",{value:!0});var PB=iwt(on()),Swe=t=>{let{items:e,children:r,style:o}=t,[a,n]=PB.useState(0),u=PB.useMemo(()=>e.slice(a),[e,a]);PB.useLayoutEffect(()=>{n(e.length)},[e.length]);let A=u.map((h,E)=>r(h,a+E)),p=PB.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},o),[o]);return PB.default.createElement("ink-box",{internal_static:!0,style:p},A)};Swe.displayName="Static";$f.default=Swe});var xwe=_(bB=>{"use strict";var swt=bB&&bB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(bB,"__esModule",{value:!0});var owt=swt(on()),bwe=({children:t,transform:e})=>t==null?null:owt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);bwe.displayName="Transform";bB.default=bwe});var Qwe=_(xB=>{"use strict";var awt=xB&&xB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xB,"__esModule",{value:!0});var lwt=awt(on()),kwe=({count:t=1})=>lwt.default.createElement("ink-text",null,` +`.repeat(t));kwe.displayName="Newline";xB.default=kwe});var Twe=_(kB=>{"use strict";var Fwe=kB&&kB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kB,"__esModule",{value:!0});var cwt=Fwe(on()),uwt=Fwe(sQ()),Rwe=()=>cwt.default.createElement(uwt.default,{flexGrow:1});Rwe.displayName="Spacer";kB.default=Rwe});var lQ=_(QB=>{"use strict";var Awt=QB&&QB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(QB,"__esModule",{value:!0});var fwt=on(),pwt=Awt(cq()),hwt=()=>fwt.useContext(pwt.default);QB.default=hwt});var Lwe=_(FB=>{"use strict";var gwt=FB&&FB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(FB,"__esModule",{value:!0});var Nwe=on(),dwt=gwt(lQ()),mwt=(t,e={})=>{let{stdin:r,setRawMode:o,internal_exitOnCtrlC:a}=dwt.default();Nwe.useEffect(()=>{if(e.isActive!==!1)return o(!0),()=>{o(!1)}},[e.isActive,o]),Nwe.useEffect(()=>{if(e.isActive===!1)return;let n=u=>{let A=String(u),p={upArrow:A==="\x1B[A",downArrow:A==="\x1B[B",leftArrow:A==="\x1B[D",rightArrow:A==="\x1B[C",pageDown:A==="\x1B[6~",pageUp:A==="\x1B[5~",return:A==="\r",escape:A==="\x1B",ctrl:!1,shift:!1,tab:A===" "||A==="\x1B[Z",backspace:A==="\b",delete:A==="\x7F"||A==="\x1B[3~",meta:!1};A<=""&&!p.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),p.ctrl=!0),A.startsWith("\x1B")&&(A=A.slice(1),p.meta=!0);let h=A>="A"&&A<="Z",E=A>="\u0410"&&A<="\u042F";A.length===1&&(h||E)&&(p.shift=!0),p.tab&&A==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(A=""),(!(A==="c"&&p.ctrl)||!a)&&t(A,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};FB.default=mwt});var Owe=_(RB=>{"use strict";var ywt=RB&&RB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(RB,"__esModule",{value:!0});var Ewt=on(),Cwt=ywt(aq()),wwt=()=>Ewt.useContext(Cwt.default);RB.default=wwt});var Mwe=_(TB=>{"use strict";var Iwt=TB&&TB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(TB,"__esModule",{value:!0});var Bwt=on(),vwt=Iwt(Aq()),Dwt=()=>Bwt.useContext(vwt.default);TB.default=Dwt});var Uwe=_(NB=>{"use strict";var Swt=NB&&NB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(NB,"__esModule",{value:!0});var Pwt=on(),bwt=Swt(pq()),xwt=()=>Pwt.useContext(bwt.default);NB.default=xwt});var Hwe=_(OB=>{"use strict";var _we=OB&&OB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(OB,"__esModule",{value:!0});var LB=on(),kwt=_we(iQ()),Qwt=_we(lQ()),Fwt=({isActive:t=!0,autoFocus:e=!1}={})=>{let{isRawModeSupported:r,setRawMode:o}=Qwt.default(),{activeId:a,add:n,remove:u,activate:A,deactivate:p}=LB.useContext(kwt.default),h=LB.useMemo(()=>Math.random().toString().slice(2,7),[]);return LB.useEffect(()=>(n(h,{autoFocus:e}),()=>{u(h)}),[h,e]),LB.useEffect(()=>{t?A(h):p(h)},[t,h]),LB.useEffect(()=>{if(!(!r||!t))return o(!0),()=>{o(!1)}},[t]),{isFocused:Boolean(h)&&a===h}};OB.default=Fwt});var qwe=_(MB=>{"use strict";var Rwt=MB&&MB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(MB,"__esModule",{value:!0});var Twt=on(),Nwt=Rwt(iQ()),Lwt=()=>{let t=Twt.useContext(Nwt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious}};MB.default=Lwt});var jwe=_(wq=>{"use strict";Object.defineProperty(wq,"__esModule",{value:!0});wq.default=t=>{var e,r,o,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(o=t.yogaNode)===null||o===void 0?void 0:o.getComputedHeight())!==null&&a!==void 0?a:0}}});var ic=_(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});var Owt=Dwe();Object.defineProperty(ro,"render",{enumerable:!0,get:function(){return Owt.default}});var Mwt=sQ();Object.defineProperty(ro,"Box",{enumerable:!0,get:function(){return Mwt.default}});var Uwt=yq();Object.defineProperty(ro,"Text",{enumerable:!0,get:function(){return Uwt.default}});var _wt=Pwe();Object.defineProperty(ro,"Static",{enumerable:!0,get:function(){return _wt.default}});var Hwt=xwe();Object.defineProperty(ro,"Transform",{enumerable:!0,get:function(){return Hwt.default}});var qwt=Qwe();Object.defineProperty(ro,"Newline",{enumerable:!0,get:function(){return qwt.default}});var jwt=Twe();Object.defineProperty(ro,"Spacer",{enumerable:!0,get:function(){return jwt.default}});var Gwt=Lwe();Object.defineProperty(ro,"useInput",{enumerable:!0,get:function(){return Gwt.default}});var Ywt=Owe();Object.defineProperty(ro,"useApp",{enumerable:!0,get:function(){return Ywt.default}});var Wwt=lQ();Object.defineProperty(ro,"useStdin",{enumerable:!0,get:function(){return Wwt.default}});var Kwt=Mwe();Object.defineProperty(ro,"useStdout",{enumerable:!0,get:function(){return Kwt.default}});var Vwt=Uwe();Object.defineProperty(ro,"useStderr",{enumerable:!0,get:function(){return Vwt.default}});var Jwt=Hwe();Object.defineProperty(ro,"useFocus",{enumerable:!0,get:function(){return Jwt.default}});var zwt=qwe();Object.defineProperty(ro,"useFocusManager",{enumerable:!0,get:function(){return zwt.default}});var Xwt=jwe();Object.defineProperty(ro,"measureElement",{enumerable:!0,get:function(){return Xwt.default}})});var Bq={};Vt(Bq,{Gem:()=>Iq});var Gwe,Am,Iq,cQ=Et(()=>{Gwe=$e(ic()),Am=$e(on()),Iq=(0,Am.memo)(({active:t})=>{let e=(0,Am.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,Am.useMemo)(()=>t?"green":"yellow",[t]);return Am.default.createElement(Gwe.Text,{color:r},e)})});var Wwe={};Vt(Wwe,{useKeypress:()=>fm});function fm({active:t},e,r){let{stdin:o}=(0,Ywe.useStdin)(),a=(0,uQ.useCallback)((n,u)=>e(n,u),r);(0,uQ.useEffect)(()=>{if(!(!t||!o))return o.on("keypress",a),()=>{o.off("keypress",a)}},[t,a,o])}var Ywe,uQ,UB=Et(()=>{Ywe=$e(ic()),uQ=$e(on())});var Vwe={};Vt(Vwe,{FocusRequest:()=>Kwe,useFocusRequest:()=>vq});var Kwe,vq,Dq=Et(()=>{UB();Kwe=(r=>(r.BEFORE="before",r.AFTER="after",r))(Kwe||{}),vq=function({active:t},e,r){fm({active:t},(o,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var Jwe={};Vt(Jwe,{useListInput:()=>_B});var _B,AQ=Et(()=>{UB();_B=function(t,e,{active:r,minus:o,plus:a,set:n,loop:u=!0}){fm({active:r},(A,p)=>{let h=e.indexOf(t);switch(p.name){case o:{let E=h-1;if(u){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(u){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,u])}});var fQ={};Vt(fQ,{ScrollableItems:()=>Zwt});var C0,La,Zwt,pQ=Et(()=>{C0=$e(ic()),La=$e(on());Dq();AQ();Zwt=({active:t=!0,children:e=[],radius:r=10,size:o=1,loop:a=!0,onFocusRequest:n,willReachEnd:u})=>{let A=L=>{if(L.key===null)throw new Error("Expected all children to have a key");return L.key},p=La.default.Children.map(e,L=>A(L)),h=p[0],[E,I]=(0,La.useState)(h),v=p.indexOf(E);(0,La.useEffect)(()=>{p.includes(E)||I(h)},[e]),(0,La.useEffect)(()=>{u&&v>=p.length-2&&u()},[v]),vq({active:t&&!!n},L=>{n?.(L)},[n]),_B(E,p,{active:t,minus:"up",plus:"down",set:I,loop:a});let x=v-r,C=v+r;C>p.length&&(x-=C-p.length,C=p.length),x<0&&(C+=-x,x=0),C>=p.length&&(C=p.length-1);let R=[];for(let L=x;L<=C;++L){let U=p[L],J=t&&U===E;R.push(La.default.createElement(C0.Box,{key:U,height:o},La.default.createElement(C0.Box,{marginLeft:1,marginRight:1},La.default.createElement(C0.Text,null,J?La.default.createElement(C0.Text,{color:"cyan",bold:!0},">"):" ")),La.default.createElement(C0.Box,null,La.default.cloneElement(e[L],{active:J}))))}return La.default.createElement(C0.Box,{flexDirection:"column",width:"100%"},R)}});var zwe,ep,Xwe,Sq,Zwe,Pq=Et(()=>{zwe=$e(ic()),ep=$e(on()),Xwe=ve("readline"),Sq=ep.default.createContext(null),Zwe=({children:t})=>{let{stdin:e,setRawMode:r}=(0,zwe.useStdin)();(0,ep.useEffect)(()=>{r&&r(!0),e&&(0,Xwe.emitKeypressEvents)(e)},[e,r]);let[o,a]=(0,ep.useState)(new Map),n=(0,ep.useMemo)(()=>({getAll:()=>o,get:u=>o.get(u),set:(u,A)=>a(new Map([...o,[u,A]]))}),[o,a]);return ep.default.createElement(Sq.Provider,{value:n,children:t})}});var bq={};Vt(bq,{useMinistore:()=>$wt});function $wt(t,e){let r=(0,hQ.useContext)(Sq);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let o=(0,hQ.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,o]}var hQ,xq=Et(()=>{hQ=$e(on());Pq()});var dQ={};Vt(dQ,{renderForm:()=>eIt});async function eIt(t,e,{stdin:r,stdout:o,stderr:a}){let n,u=p=>{let{exit:h}=(0,gQ.useApp)();fm({active:!0},(E,I)=>{I.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:A}=(0,gQ.render)(kq.default.createElement(Zwe,null,kq.default.createElement(t,{...e,useSubmit:u})),{stdin:r,stdout:o,stderr:a});return await A(),n}var gQ,kq,mQ=Et(()=>{gQ=$e(ic()),kq=$e(on());Pq();UB()});var rIe=_(HB=>{"use strict";Object.defineProperty(HB,"__esModule",{value:!0});HB.UncontrolledTextInput=void 0;var eIe=on(),Qq=on(),$we=ic(),pm=rQ(),tIe=({value:t,placeholder:e="",focus:r=!0,mask:o,highlightPastedText:a=!1,showCursor:n=!0,onChange:u,onSubmit:A})=>{let[{cursorOffset:p,cursorWidth:h},E]=Qq.useState({cursorOffset:(t||"").length,cursorWidth:0});Qq.useEffect(()=>{E(R=>{if(!r||!n)return R;let L=t||"";return R.cursorOffset>L.length-1?{cursorOffset:L.length,cursorWidth:0}:R})},[t,r,n]);let I=a?h:0,v=o?o.repeat(t.length):t,x=v,C=e?pm.grey(e):void 0;if(n&&r){C=e.length>0?pm.inverse(e[0])+pm.grey(e.slice(1)):pm.inverse(" "),x=v.length>0?"":pm.inverse(" ");let R=0;for(let L of v)R>=p-I&&R<=p?x+=pm.inverse(L):x+=L,R++;v.length>0&&p===v.length&&(x+=pm.inverse(" "))}return $we.useInput((R,L)=>{if(L.upArrow||L.downArrow||L.ctrl&&R==="c"||L.tab||L.shift&&L.tab)return;if(L.return){A&&A(t);return}let U=p,J=t,te=0;L.leftArrow?n&&U--:L.rightArrow?n&&U++:L.backspace||L.delete?p>0&&(J=t.slice(0,p-1)+t.slice(p,t.length),U--):(J=t.slice(0,p)+R+t.slice(p,t.length),U+=R.length,R.length>1&&(te=R.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:te}),J!==t&&u(J)},{isActive:r}),eIe.createElement($we.Text,null,e?v.length>0?x:C:x)};HB.default=tIe;HB.UncontrolledTextInput=t=>{let[e,r]=Qq.useState("");return eIe.createElement(tIe,Object.assign({},t,{value:e,onChange:r}))}});var sIe={};Vt(sIe,{Pad:()=>Fq});var nIe,iIe,Fq,Rq=Et(()=>{nIe=$e(ic()),iIe=$e(on()),Fq=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return iIe.default.createElement(nIe.Text,{dimColor:!e},r)}});var oIe={};Vt(oIe,{ItemOptions:()=>tIt});var jB,I0,tIt,aIe=Et(()=>{jB=$e(ic()),I0=$e(on());AQ();cQ();Rq();tIt=function({active:t,skewer:e,options:r,value:o,onChange:a,sizes:n=[]}){let u=r.filter(({label:p})=>!!p).map(({value:p})=>p),A=r.findIndex(p=>p.value===o&&p.label!="");return _B(o,u,{active:t,minus:"left",plus:"right",set:a}),I0.default.createElement(I0.default.Fragment,null,r.map(({label:p},h)=>{let E=h===A,I=n[h]-1||0,v=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),x=Math.max(0,I-v.length-2);return p?I0.default.createElement(jB.Box,{key:p,width:I,marginLeft:1},I0.default.createElement(jB.Text,{wrap:"truncate"},I0.default.createElement(Iq,{active:E})," ",p),e?I0.default.createElement(Fq,{active:t,length:x}):null):I0.default.createElement(jB.Box,{key:`spacer-${h}`,width:I,marginLeft:1})}))}});var BIe=_((zJt,IIe)=>{var qq;IIe.exports=()=>(typeof qq>"u"&&(qq=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),qq)});var GIe=_((wzt,jIe)=>{var Xq=Symbol("arg flag"),Oa=class extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,Oa.prototype)}};function sv(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:o=!1}={}){if(!t)throw new Oa("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},u={};for(let A of Object.keys(t)){if(!A)throw new Oa("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(A[0]!=="-")throw new Oa(`argument key must start with '-' but found: '${A}'`,"ARG_CONFIG_NONOPT_KEY");if(A.length===1)throw new Oa(`argument key must have a name; singular '-' keys are not allowed: ${A}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[A]=="string"){n[A]=t[A];continue}let p=t[A],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(I,v,x=[])=>(x.push(E(I,v,x[x.length-1])),x),h=E===Boolean||E[Xq]===!0}else if(typeof p=="function")h=p===Boolean||p[Xq]===!0;else throw new Oa(`type missing or not a function or valid array type: ${A}`,"ARG_CONFIG_VAD_TYPE");if(A[1]!=="-"&&A.length>2)throw new Oa(`short argument keys (with a single hyphen) must have only one character: ${A}`,"ARG_CONFIG_SHORTOPT_TOOLONG");u[A]=[p,h]}for(let A=0,p=e.length;A0){a._=a._.concat(e.slice(A));break}if(h==="--"){a._=a._.concat(e.slice(A+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(I=>`-${I}`);for(let I=0;I1&&e[A+1][0]==="-"&&!(e[A+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(L===Number||typeof BigInt<"u"&&L===BigInt))){let J=x===R?"":` (alias for ${R})`;throw new Oa(`option requires argument: ${x}${J}`,"ARG_MISSING_REQUIRED_LONGARG")}a[R]=L(e[A+1],R,a[R]),++A}else a[R]=L(C,R,a[R])}}else a._.push(h)}return a}sv.flag=t=>(t[Xq]=!0,t);sv.COUNT=sv.flag((t,e,r)=>(r||0)+1);sv.ArgError=Oa;jIe.exports=sv});var ZIe=_((Jzt,XIe)=>{var tj;XIe.exports=()=>(typeof tj>"u"&&(tj=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),tj)});var n1e=_((aj,lj)=>{(function(t){aj&&typeof aj=="object"&&typeof lj<"u"?lj.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window<"u"?window.isWindows=t():typeof global<"u"?global.isWindows=t():typeof self<"u"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var a1e=_((KXt,o1e)=>{"use strict";cj.ifExists=ZIt;var YC=ve("util"),sc=ve("path"),i1e=n1e(),JIt=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,zIt={createPwshFile:!0,createCmdFile:i1e(),fs:ve("fs")},XIt=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function s1e(t){let e={...zIt,...t},r=e.fs;return e.fs_={chmod:r.chmod?YC.promisify(r.chmod):async()=>{},mkdir:YC.promisify(r.mkdir),readFile:YC.promisify(r.readFile),stat:YC.promisify(r.stat),unlink:YC.promisify(r.unlink),writeFile:YC.promisify(r.writeFile)},e}async function cj(t,e,r){let o=s1e(r);await o.fs_.stat(t),await e1t(t,e,o)}function ZIt(t,e,r){return cj(t,e,r).catch(()=>{})}function $It(t,e){return e.fs_.unlink(t).catch(()=>{})}async function e1t(t,e,r){let o=await s1t(t,r);return await t1t(e,r),r1t(t,e,o,r)}function t1t(t,e){return e.fs_.mkdir(sc.dirname(t),{recursive:!0})}function r1t(t,e,r,o){let a=s1e(o),n=[{generator:l1t,extension:""}];return a.createCmdFile&&n.push({generator:a1t,extension:".cmd"}),a.createPwshFile&&n.push({generator:c1t,extension:".ps1"}),Promise.all(n.map(u=>o1t(t,e+u.extension,r,u.generator,a)))}function n1t(t,e){return $It(t,e)}function i1t(t,e){return u1t(t,e)}async function s1t(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(JIt);if(!a){let n=sc.extname(t).toLowerCase();return{program:XIt.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function o1t(t,e,r,o,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",u=[r.additionalArgs,n].filter(A=>A).join(" ");return a=Object.assign({},a,{prog:r.program,args:u}),await n1t(e,a),await a.fs_.writeFile(e,o(t,e,a),"utf8"),i1t(e,a)}function a1t(t,e,r){let a=sc.relative(sc.dirname(e),t).split("/").join("\\"),n=sc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,u,A=r.prog,p=r.args||"",h=uj(r.nodePath).win32;A?(u=`"%~dp0\\${A}.exe"`,a=n):(A=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",I=h?`@SET NODE_PATH=${h}\r `:"";return u?I+=`@IF EXIST ${u} (\r ${u} ${p} ${a} ${E}%*\r ) ELSE (\r @@ -325,7 +325,7 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr ${A} ${p} ${a} ${E}%*\r )\r `:I+=`@${A} ${p} ${a} ${E}%*\r -`,I}function p1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;o=o.split("\\").join("/");let u=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,A=r.args||"",p=fq(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,o=u):(a=u,A="",o="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",E=`#!/bin/sh +`,I}function l1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;o=o.split("\\").join("/");let u=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,A=r.args||"",p=uj(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,o=u):(a=u,A="",o="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",E=`#!/bin/sh basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") case \`uname\` in @@ -340,7 +340,7 @@ else fi `:E+=`${I}${a} ${A} ${o} ${h}"$@" exit $? -`,E}function h1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,u;o=o.split("\\").join("/");let A=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,p=r.args||"",h=fq(r.nodePath),E=h.win32,I=h.posix;n?(u=`"$basedir/${r.prog}$exe"`,o=A):(n=A,p="",o="");let v=r.progArgs?`${r.progArgs.join(" ")} `:"",b=`#!/usr/bin/env pwsh +`,E}function c1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,u;o=o.split("\\").join("/");let A=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,p=r.args||"",h=uj(r.nodePath),E=h.win32,I=h.posix;n?(u=`"$basedir/${r.prog}$exe"`,o=A):(n=A,p="",o="");let v=r.progArgs?`${r.progArgs.join(" ")} `:"",x=`#!/usr/bin/env pwsh $basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent $exe="" @@ -350,9 +350,9 @@ $env:NODE_PATH="${E}" # Fix case when both the Windows and Linux builds of Node # are installed in the same directory $exe=".exe" -}`;return r.nodePath&&(b+=` else { +}`;return r.nodePath&&(x+=` else { $env:NODE_PATH="${I}" -}`),u?b+=` +}`),u?x+=` $ret=0 if (Test-Path ${u}) { # Support pipeline input @@ -373,7 +373,7 @@ if (Test-Path ${u}) { } ${r.nodePath?`$env:NODE_PATH=$env_node_path `:""}exit $ret -`:b+=` +`:x+=` # Support pipeline input if ($MyInvocation.ExpectingInput) { $input | & ${n} ${p} ${o} ${v}$args @@ -382,47 +382,47 @@ if ($MyInvocation.ExpectingInput) { } ${r.nodePath?`$env:NODE_PATH=$env_node_path `:""}exit $LASTEXITCODE -`,b}function g1t(t,e){return e.fs_.chmod(t,493)}function fq(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(sc.delimiter):Array.from(t),r={};for(let o=0;o`/mnt/${A.toLowerCase()}`):e[o];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[o]={win32:a,posix:n}}return r}c1e.exports=Aq});var Sq=_((h$t,F1e)=>{F1e.exports=Be("stream")});var L1e=_((g$t,N1e)=>{"use strict";function T1e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function U1t(t){for(var e=1;e0?this.tail.next=o:this.head=o,this.tail=o,++this.length}},{key:"unshift",value:function(r){var o={data:r,next:this.head};this.length===0&&(this.tail=o),this.head=o,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var o=this.head,a=""+o.data;o=o.next;)a+=r+o.data;return a}},{key:"concat",value:function(r){if(this.length===0)return QQ.alloc(0);for(var o=QQ.allocUnsafe(r>>>0),a=this.head,n=0;a;)W1t(a.data,o,n),n+=a.data.length,a=a.next;return o}},{key:"consume",value:function(r,o){var a;return ru.length?u.length:r;if(A===u.length?n+=u:n+=u.slice(0,r),r-=A,r===0){A===u.length?(++a,o.next?this.head=o.next:this.head=this.tail=null):(this.head=o,o.data=u.slice(A));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var o=QQ.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(o),r-=a.data.length;a=a.next;){var u=a.data,A=r>u.length?u.length:r;if(u.copy(o,o.length-r,0,A),r-=A,r===0){A===u.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=u.slice(A));break}++n}return this.length-=n,o}},{key:Y1t,value:function(r,o){return xq(this,U1t({},o,{depth:0,customInspect:!1}))}}]),t}()});var kq=_((d$t,O1e)=>{"use strict";function V1t(t,e){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(bq,this,t)):process.nextTick(bq,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(n){!e&&n?r._writableState?r._writableState.errorEmitted?process.nextTick(FQ,r):(r._writableState.errorEmitted=!0,process.nextTick(M1e,r,n)):process.nextTick(M1e,r,n):e?(process.nextTick(FQ,r),e(n)):process.nextTick(FQ,r)}),this)}function M1e(t,e){bq(t,e),FQ(t)}function FQ(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function K1t(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function bq(t,e){t.emit("error",e)}function J1t(t,e){var r=t._readableState,o=t._writableState;r&&r.autoDestroy||o&&o.autoDestroy?t.destroy(e):t.emit("error",e)}O1e.exports={destroy:V1t,undestroy:K1t,errorOrDestroy:J1t}});var k0=_((m$t,H1e)=>{"use strict";var _1e={};function ac(t,e,r){r||(r=Error);function o(n,u,A){return typeof e=="string"?e:e(n,u,A)}class a extends r{constructor(u,A,p){super(o(u,A,p))}}a.prototype.name=r.name,a.prototype.code=t,_1e[t]=a}function U1e(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(o=>String(o)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function z1t(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function X1t(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function Z1t(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}ac("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);ac("ERR_INVALID_ARG_TYPE",function(t,e,r){let o;typeof e=="string"&&z1t(e,"not ")?(o="must not be",e=e.replace(/^not /,"")):o="must be";let a;if(X1t(t," argument"))a=`The ${t} ${o} ${U1e(e,"type")}`;else{let n=Z1t(t,".")?"property":"argument";a=`The "${t}" ${n} ${o} ${U1e(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);ac("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");ac("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});ac("ERR_STREAM_PREMATURE_CLOSE","Premature close");ac("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});ac("ERR_MULTIPLE_CALLBACK","Callback called multiple times");ac("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");ac("ERR_STREAM_WRITE_AFTER_END","write after end");ac("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);ac("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);ac("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");H1e.exports.codes=_1e});var Qq=_((y$t,j1e)=>{"use strict";var $1t=k0().codes.ERR_INVALID_OPT_VALUE;function e2t(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function t2t(t,e,r,o){var a=e2t(e,o,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=o?r:"highWaterMark";throw new $1t(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}j1e.exports={getHighWaterMark:t2t}});var q1e=_((E$t,Fq)=>{typeof Object.create=="function"?Fq.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:Fq.exports=function(e,r){if(r){e.super_=r;var o=function(){};o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e}}});var Q0=_((C$t,Rq)=>{try{if(Tq=Be("util"),typeof Tq.inherits!="function")throw"";Rq.exports=Tq.inherits}catch{Rq.exports=q1e()}var Tq});var Y1e=_((w$t,G1e)=>{G1e.exports=Be("util").deprecate});var Mq=_((I$t,X1e)=>{"use strict";X1e.exports=Ti;function V1e(t){var e=this;this.next=null,this.entry=null,this.finish=function(){x2t(e,t)}}var JC;Ti.WritableState=mv;var r2t={deprecate:Y1e()},K1e=Sq(),RQ=Be("buffer").Buffer,n2t=global.Uint8Array||function(){};function i2t(t){return RQ.from(t)}function s2t(t){return RQ.isBuffer(t)||t instanceof n2t}var Lq=kq(),o2t=Qq(),a2t=o2t.getHighWaterMark,F0=k0().codes,l2t=F0.ERR_INVALID_ARG_TYPE,c2t=F0.ERR_METHOD_NOT_IMPLEMENTED,u2t=F0.ERR_MULTIPLE_CALLBACK,A2t=F0.ERR_STREAM_CANNOT_PIPE,f2t=F0.ERR_STREAM_DESTROYED,p2t=F0.ERR_STREAM_NULL_VALUES,h2t=F0.ERR_STREAM_WRITE_AFTER_END,g2t=F0.ERR_UNKNOWN_ENCODING,zC=Lq.errorOrDestroy;Q0()(Ti,K1e);function d2t(){}function mv(t,e,r){JC=JC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof JC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=a2t(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){B2t(e,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new V1e(this)}mv.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(mv.prototype,"buffer",{get:r2t.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var TQ;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(TQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ti,Symbol.hasInstance,{value:function(e){return TQ.call(this,e)?!0:this!==Ti?!1:e&&e._writableState instanceof mv}})):TQ=function(e){return e instanceof this};function Ti(t){JC=JC||Em();var e=this instanceof JC;if(!e&&!TQ.call(Ti,this))return new Ti(t);this._writableState=new mv(t,this,e),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final)),K1e.call(this)}Ti.prototype.pipe=function(){zC(this,new A2t)};function m2t(t,e){var r=new h2t;zC(t,r),process.nextTick(e,r)}function y2t(t,e,r,o){var a;return r===null?a=new p2t:typeof r!="string"&&!e.objectMode&&(a=new l2t("chunk",["string","Buffer"],r)),a?(zC(t,a),process.nextTick(o,a),!1):!0}Ti.prototype.write=function(t,e,r){var o=this._writableState,a=!1,n=!o.objectMode&&s2t(t);return n&&!RQ.isBuffer(t)&&(t=i2t(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=o.defaultEncoding),typeof r!="function"&&(r=d2t),o.ending?m2t(this,r):(n||y2t(this,o,t,r))&&(o.pendingcb++,a=C2t(this,o,n,t,e,r)),a};Ti.prototype.cork=function(){this._writableState.corked++};Ti.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&J1e(this,t))};Ti.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new g2t(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Ti.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function E2t(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=RQ.from(e,r)),e}Object.defineProperty(Ti.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function C2t(t,e,r,o,a,n){if(!r){var u=E2t(e,o,a);o!==u&&(r=!0,a="buffer",o=u)}var A=e.objectMode?1:o.length;e.length+=A;var p=e.length{"use strict";var b2t=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};$1e.exports=yA;var Z1e=_q(),Uq=Mq();Q0()(yA,Z1e);for(Oq=b2t(Uq.prototype),NQ=0;NQ{var MQ=Be("buffer"),np=MQ.Buffer;function e2e(t,e){for(var r in t)e[r]=t[r]}np.from&&np.alloc&&np.allocUnsafe&&np.allocUnsafeSlow?t2e.exports=MQ:(e2e(MQ,Hq),Hq.Buffer=XC);function XC(t,e,r){return np(t,e,r)}e2e(np,XC);XC.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return np(t,e,r)};XC.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var o=np(t);return e!==void 0?typeof r=="string"?o.fill(e,r):o.fill(e):o.fill(0),o};XC.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return np(t)};XC.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return MQ.SlowBuffer(t)}});var Gq=_(i2e=>{"use strict";var qq=r2e().Buffer,n2e=qq.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function F2t(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function T2t(t){var e=F2t(t);if(typeof e!="string"&&(qq.isEncoding===n2e||!n2e(t)))throw new Error("Unknown encoding: "+t);return e||t}i2e.StringDecoder=yv;function yv(t){this.encoding=T2t(t);var e;switch(this.encoding){case"utf16le":this.text=U2t,this.end=_2t,e=4;break;case"utf8":this.fillLast=L2t,e=4;break;case"base64":this.text=H2t,this.end=j2t,e=3;break;default:this.write=q2t,this.end=G2t;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=qq.allocUnsafe(e)}yv.prototype.write=function(t){if(t.length===0)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),e===void 0)return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r>5===6?2:t>>4===14?3:t>>3===30?4:t>>6===2?-1:-2}function R2t(t,e,r){var o=e.length-1;if(o=0?(a>0&&(t.lastNeed=a-1),a):--o=0?(a>0&&(t.lastNeed=a-2),a):--o=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function N2t(t,e,r){if((e[0]&192)!==128)return t.lastNeed=0,"\uFFFD";if(t.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return t.lastNeed=1,"\uFFFD";if(t.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return t.lastNeed=2,"\uFFFD"}}function L2t(t){var e=this.lastTotal-this.lastNeed,r=N2t(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function M2t(t,e){var r=R2t(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var o=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,o),t.toString("utf8",e,o)}function O2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function U2t(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var o=r.charCodeAt(r.length-1);if(o>=55296&&o<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function _2t(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function H2t(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function j2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function q2t(t){return t.toString(this.encoding)}function G2t(t){return t&&t.length?this.write(t):""}});var OQ=_((D$t,a2e)=>{"use strict";var s2e=k0().codes.ERR_STREAM_PREMATURE_CLOSE;function Y2t(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";var UQ;function T0(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var K2t=OQ(),R0=Symbol("lastResolve"),Cm=Symbol("lastReject"),Ev=Symbol("error"),_Q=Symbol("ended"),wm=Symbol("lastPromise"),Yq=Symbol("handlePromise"),Im=Symbol("stream");function N0(t,e){return{value:t,done:e}}function J2t(t){var e=t[R0];if(e!==null){var r=t[Im].read();r!==null&&(t[wm]=null,t[R0]=null,t[Cm]=null,e(N0(r,!1)))}}function z2t(t){process.nextTick(J2t,t)}function X2t(t,e){return function(r,o){t.then(function(){if(e[_Q]){r(N0(void 0,!0));return}e[Yq](r,o)},o)}}var Z2t=Object.getPrototypeOf(function(){}),$2t=Object.setPrototypeOf((UQ={get stream(){return this[Im]},next:function(){var e=this,r=this[Ev];if(r!==null)return Promise.reject(r);if(this[_Q])return Promise.resolve(N0(void 0,!0));if(this[Im].destroyed)return new Promise(function(u,A){process.nextTick(function(){e[Ev]?A(e[Ev]):u(N0(void 0,!0))})});var o=this[wm],a;if(o)a=new Promise(X2t(o,this));else{var n=this[Im].read();if(n!==null)return Promise.resolve(N0(n,!1));a=new Promise(this[Yq])}return this[wm]=a,a}},T0(UQ,Symbol.asyncIterator,function(){return this}),T0(UQ,"return",function(){var e=this;return new Promise(function(r,o){e[Im].destroy(null,function(a){if(a){o(a);return}r(N0(void 0,!0))})})}),UQ),Z2t),eBt=function(e){var r,o=Object.create($2t,(r={},T0(r,Im,{value:e,writable:!0}),T0(r,R0,{value:null,writable:!0}),T0(r,Cm,{value:null,writable:!0}),T0(r,Ev,{value:null,writable:!0}),T0(r,_Q,{value:e._readableState.endEmitted,writable:!0}),T0(r,Yq,{value:function(n,u){var A=o[Im].read();A?(o[wm]=null,o[R0]=null,o[Cm]=null,n(N0(A,!1))):(o[R0]=n,o[Cm]=u)},writable:!0}),r));return o[wm]=null,K2t(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=o[Cm];n!==null&&(o[wm]=null,o[R0]=null,o[Cm]=null,n(a)),o[Ev]=a;return}var u=o[R0];u!==null&&(o[wm]=null,o[R0]=null,o[Cm]=null,u(N0(void 0,!0))),o[_Q]=!0}),e.on("readable",z2t.bind(null,o)),o};l2e.exports=eBt});var p2e=_((S$t,f2e)=>{"use strict";function u2e(t,e,r,o,a,n,u){try{var A=t[n](u),p=A.value}catch(h){r(h);return}A.done?e(p):Promise.resolve(p).then(o,a)}function tBt(t){return function(){var e=this,r=arguments;return new Promise(function(o,a){var n=t.apply(e,r);function u(p){u2e(n,o,a,u,A,"next",p)}function A(p){u2e(n,o,a,u,A,"throw",p)}u(void 0)})}}function A2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function rBt(t){for(var e=1;e{"use strict";B2e.exports=mn;var ZC;mn.ReadableState=m2e;var x$t=Be("events").EventEmitter,d2e=function(e,r){return e.listeners(r).length},wv=Sq(),HQ=Be("buffer").Buffer,oBt=global.Uint8Array||function(){};function aBt(t){return HQ.from(t)}function lBt(t){return HQ.isBuffer(t)||t instanceof oBt}var Wq=Be("util"),$r;Wq&&Wq.debuglog?$r=Wq.debuglog("stream"):$r=function(){};var cBt=L1e(),$q=kq(),uBt=Qq(),ABt=uBt.getHighWaterMark,jQ=k0().codes,fBt=jQ.ERR_INVALID_ARG_TYPE,pBt=jQ.ERR_STREAM_PUSH_AFTER_EOF,hBt=jQ.ERR_METHOD_NOT_IMPLEMENTED,gBt=jQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,$C,Vq,Kq;Q0()(mn,wv);var Cv=$q.errorOrDestroy,Jq=["error","close","destroy","pause","resume"];function dBt(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]}function m2e(t,e,r){ZC=ZC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof ZC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=ABt(this,t,"readableHighWaterMark",r),this.buffer=new cBt,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&($C||($C=Gq().StringDecoder),this.decoder=new $C(t.encoding),this.encoding=t.encoding)}function mn(t){if(ZC=ZC||Em(),!(this instanceof mn))return new mn(t);var e=this instanceof ZC;this._readableState=new m2e(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),wv.call(this)}Object.defineProperty(mn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});mn.prototype.destroy=$q.destroy;mn.prototype._undestroy=$q.undestroy;mn.prototype._destroy=function(t,e){e(t)};mn.prototype.push=function(t,e){var r=this._readableState,o;return r.objectMode?o=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=HQ.from(t,e),e=""),o=!0),y2e(this,t,e,!1,o)};mn.prototype.unshift=function(t){return y2e(this,t,null,!0,!1)};function y2e(t,e,r,o,a){$r("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,EBt(t,n);else{var u;if(a||(u=mBt(n,e)),u)Cv(t,u);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==HQ.prototype&&(e=aBt(e)),o)n.endEmitted?Cv(t,new gBt):zq(t,n,e,!0);else if(n.ended)Cv(t,new pBt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?zq(t,n,e,!1):Zq(t,n)):zq(t,n,e,!1)}else o||(n.reading=!1,Zq(t,n))}return!n.ended&&(n.length=h2e?t=h2e:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function g2e(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=yBt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}mn.prototype.read=function(t){$r("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return $r("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?Xq(this):qQ(this),null;if(t=g2e(t,e),t===0&&e.ended)return e.length===0&&Xq(this),null;var o=e.needReadable;$r("need readable",o),(e.length===0||e.length-t0?a=w2e(t,e):a=null,a===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&Xq(this)),a!==null&&this.emit("data",a),a};function EBt(t,e){if($r("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?qQ(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,E2e(t)))}}function qQ(t){var e=t._readableState;$r("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||($r("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(E2e,t))}function E2e(t){var e=t._readableState;$r("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,eG(t)}function Zq(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(CBt,t,e))}function CBt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&I2e(o.pipes,t)!==-1)&&!h&&($r("false write response, pause",o.awaitDrain),o.awaitDrain++),r.pause())}function v(L){$r("onerror",L),T(),t.removeListener("error",v),d2e(t,"error")===0&&Cv(t,L)}dBt(t,"error",v);function b(){t.removeListener("finish",C),T()}t.once("close",b);function C(){$r("onfinish"),t.removeListener("close",b),T()}t.once("finish",C);function T(){$r("unpipe"),r.unpipe(t)}return t.emit("pipe",r),o.flowing||($r("pipe resume"),r.resume()),t};function wBt(t){return function(){var r=t._readableState;$r("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&d2e(t,"data")&&(r.flowing=!0,eG(t))}}mn.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var o=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,o.flowing!==!1&&this.resume()):t==="readable"&&!o.endEmitted&&!o.readableListening&&(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,$r("on readable",o.length,o.reading),o.length?qQ(this):o.reading||process.nextTick(IBt,this)),r};mn.prototype.addListener=mn.prototype.on;mn.prototype.removeListener=function(t,e){var r=wv.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(C2e,this),r};mn.prototype.removeAllListeners=function(t){var e=wv.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(C2e,this),e};function C2e(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function IBt(t){$r("readable nexttick read 0"),t.read(0)}mn.prototype.resume=function(){var t=this._readableState;return t.flowing||($r("resume"),t.flowing=!t.readableListening,BBt(this,t)),t.paused=!1,this};function BBt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(vBt,t,e))}function vBt(t,e){$r("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),eG(t),e.flowing&&!e.reading&&t.read(0)}mn.prototype.pause=function(){return $r("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&($r("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function eG(t){var e=t._readableState;for($r("flow",e.flowing);e.flowing&&t.read()!==null;);}mn.prototype.wrap=function(t){var e=this,r=this._readableState,o=!1;t.on("end",function(){if($r("wrapped end"),r.decoder&&!r.ended){var u=r.decoder.end();u&&u.length&&e.push(u)}e.push(null)}),t.on("data",function(u){if($r("wrapped data"),r.decoder&&(u=r.decoder.write(u)),!(r.objectMode&&u==null)&&!(!r.objectMode&&(!u||!u.length))){var A=e.push(u);A||(o=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(A){return function(){return t[A].apply(t,arguments)}}(a));for(var n=0;n=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function Xq(t){var e=t._readableState;$r("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(DBt,e,t))}function DBt(t,e){if($r("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}typeof Symbol=="function"&&(mn.from=function(t,e){return Kq===void 0&&(Kq=p2e()),Kq(mn,t,e)});function I2e(t,e){for(var r=0,o=t.length;r{"use strict";D2e.exports=ip;var GQ=k0().codes,PBt=GQ.ERR_METHOD_NOT_IMPLEMENTED,SBt=GQ.ERR_MULTIPLE_CALLBACK,xBt=GQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,bBt=GQ.ERR_TRANSFORM_WITH_LENGTH_0,YQ=Em();Q0()(ip,YQ);function kBt(t,e){var r=this._transformState;r.transforming=!1;var o=r.writecb;if(o===null)return this.emit("error",new SBt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),o(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";S2e.exports=Iv;var P2e=tG();Q0()(Iv,P2e);function Iv(t){if(!(this instanceof Iv))return new Iv(t);P2e.call(this,t)}Iv.prototype._transform=function(t,e,r){r(null,t)}});var T2e=_((F$t,F2e)=>{"use strict";var rG;function FBt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var Q2e=k0().codes,TBt=Q2e.ERR_MISSING_ARGS,RBt=Q2e.ERR_STREAM_DESTROYED;function b2e(t){if(t)throw t}function NBt(t){return t.setHeader&&typeof t.abort=="function"}function LBt(t,e,r,o){o=FBt(o);var a=!1;t.on("close",function(){a=!0}),rG===void 0&&(rG=OQ()),rG(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,NBt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();o(u||new RBt("pipe"))}}}function k2e(t){t()}function MBt(t,e){return t.pipe(e)}function OBt(t){return!t.length||typeof t[t.length-1]!="function"?b2e:t.pop()}function UBt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return LBt(u,p,h,function(E){a||(a=E),E&&n.forEach(k2e),!p&&(n.forEach(k2e),o(a))})});return e.reduce(MBt)}F2e.exports=UBt});var ew=_((lc,vv)=>{var Bv=Be("stream");process.env.READABLE_STREAM==="disable"&&Bv?(vv.exports=Bv.Readable,Object.assign(vv.exports,Bv),vv.exports.Stream=Bv):(lc=vv.exports=_q(),lc.Stream=Bv||lc,lc.Readable=lc,lc.Writable=Mq(),lc.Duplex=Em(),lc.Transform=tG(),lc.PassThrough=x2e(),lc.finished=OQ(),lc.pipeline=T2e())});var L2e=_((T$t,N2e)=>{"use strict";var{Buffer:lu}=Be("buffer"),R2e=Symbol.for("BufferList");function ni(t){if(!(this instanceof ni))return new ni(t);ni._init.call(this,t)}ni._init=function(e){Object.defineProperty(this,R2e,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};ni.prototype._new=function(e){return new ni(e)};ni.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let o=0;othis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ni.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ni.prototype.copy=function(e,r,o,a){if((typeof o!="number"||o<0)&&(o=0),(typeof a!="number"||a>this.length)&&(a=this.length),o>=this.length||a<=0)return e||lu.alloc(0);let n=!!e,u=this._offset(o),A=a-o,p=A,h=n&&r||0,E=u[1];if(o===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:lu.concat(this._bufs,this.length);for(let I=0;Iv)this._bufs[I].copy(e,h,E),h+=v;else{this._bufs[I].copy(e,h,E,E+p),h+=v;break}p-=v,E&&(E=0)}return e.length>h?e.slice(0,h):e};ni.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let o=this._offset(e),a=this._offset(r),n=this._bufs.slice(o[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),o[1]!==0&&(n[0]=n[0].slice(o[1])),this._new(n)};ni.prototype.toString=function(e,r,o){return this.slice(r,o).toString(e)};ni.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ni.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let o=this._offset(e),a=o[0],n=o[1];for(;a=t.length){let p=u.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=u.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};ni.prototype._match=function(t,e){if(this.length-t{"use strict";var nG=ew().Duplex,_Bt=Q0(),Dv=L2e();function Uo(t){if(!(this instanceof Uo))return new Uo(t);if(typeof t=="function"){this._callback=t;let e=function(o){this._callback&&(this._callback(o),this._callback=null)}.bind(this);this.on("pipe",function(o){o.on("error",e)}),this.on("unpipe",function(o){o.removeListener("error",e)}),t=null}Dv._init.call(this,t),nG.call(this)}_Bt(Uo,nG);Object.assign(Uo.prototype,Dv.prototype);Uo.prototype._new=function(e){return new Uo(e)};Uo.prototype._write=function(e,r,o){this._appendBuffer(e),typeof o=="function"&&o()};Uo.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Uo.prototype.end=function(e){nG.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Uo.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Uo.prototype._isBufferList=function(e){return e instanceof Uo||e instanceof Dv||Uo.isBufferList(e)};Uo.isBufferList=Dv.isBufferList;WQ.exports=Uo;WQ.exports.BufferListStream=Uo;WQ.exports.BufferList=Dv});var oG=_(rw=>{var HBt=Buffer.alloc,jBt="0000000000000000000",qBt="7777777777777777777",O2e="0".charCodeAt(0),U2e=Buffer.from("ustar\0","binary"),GBt=Buffer.from("00","binary"),YBt=Buffer.from("ustar ","binary"),WBt=Buffer.from(" \0","binary"),VBt=parseInt("7777",8),Pv=257,sG=263,KBt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},JBt=function(t){switch(t){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null},zBt=function(t){switch(t){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0},_2e=function(t,e,r,o){for(;re?qBt.slice(0,e)+" ":jBt.slice(0,e-t.length)+t+" "};function XBt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],o=t.length-1;o>0;o--){var a=t[o];e?r.push(a):r.push(255-a)}var n=0,u=r.length;for(o=0;o=Math.pow(10,r)&&r++,e+r+t};rw.decodeLongPath=function(t,e){return tw(t,0,t.length,e)};rw.encodePax=function(t){var e="";t.name&&(e+=iG(" path="+t.name+` -`)),t.linkname&&(e+=iG(" linkpath="+t.linkname+` -`));var r=t.pax;if(r)for(var o in r)e+=iG(" "+o+"="+r[o]+` -`);return Buffer.from(e)};rw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;o+=o?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(o)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(L0(t.mode&VBt,6),100),e.write(L0(t.uid,6),108),e.write(L0(t.gid,6),116),e.write(L0(t.size,11),124),e.write(L0(t.mtime.getTime()/1e3|0,11),136),e[156]=O2e+zBt(t.type),t.linkname&&e.write(t.linkname,157),U2e.copy(e,Pv),GBt.copy(e,sG),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(L0(t.devmajor||0,6),329),e.write(L0(t.devminor||0,6),337),o&&e.write(o,345),e.write(L0(H2e(e),6),148),e)};rw.decode=function(t,e,r){var o=t[156]===0?0:t[156]-O2e,a=tw(t,0,100,e),n=M0(t,100,8),u=M0(t,108,8),A=M0(t,116,8),p=M0(t,124,12),h=M0(t,136,12),E=JBt(o),I=t[157]===0?null:tw(t,157,100,e),v=tw(t,265,32),b=tw(t,297,32),C=M0(t,329,8),T=M0(t,337,8),L=H2e(t);if(L===8*32)return null;if(L!==M0(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(U2e.compare(t,Pv,Pv+6)===0)t[345]&&(a=tw(t,345,155,e)+"/"+a);else if(!(YBt.compare(t,Pv,Pv+6)===0&&WBt.compare(t,sG,sG+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return o===0&&a&&a[a.length-1]==="/"&&(o=5),{name:a,mode:n,uid:u,gid:A,size:p,mtime:new Date(1e3*h),type:E,linkname:I,uname:v,gname:b,devmajor:C,devminor:T}}});var K2e=_((L$t,V2e)=>{var q2e=Be("util"),ZBt=M2e(),Sv=oG(),G2e=ew().Writable,Y2e=ew().PassThrough,W2e=function(){},j2e=function(t){return t&=511,t&&512-t},$Bt=function(t,e){var r=new VQ(t,e);return r.end(),r},evt=function(t,e){return e.path&&(t.name=e.path),e.linkpath&&(t.linkname=e.linkpath),e.size&&(t.size=parseInt(e.size,10)),t.pax=e,t},VQ=function(t,e){this._parent=t,this.offset=e,Y2e.call(this,{autoDestroy:!1})};q2e.inherits(VQ,Y2e);VQ.prototype.destroy=function(t){this._parent.destroy(t)};var sp=function(t){if(!(this instanceof sp))return new sp(t);G2e.call(this,t),t=t||{},this._offset=0,this._buffer=ZBt(),this._missing=0,this._partial=!1,this._onparse=W2e,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,o=function(){e._continue()},a=function(v){if(e._locked=!1,v)return e.destroy(v);e._stream||o()},n=function(){e._stream=null;var v=j2e(e._header.size);v?e._parse(v,u):e._parse(512,I),e._locked||o()},u=function(){e._buffer.consume(j2e(e._header.size)),e._parse(512,I),o()},A=function(){var v=e._header.size;e._paxGlobal=Sv.decodePax(r.slice(0,v)),r.consume(v),n()},p=function(){var v=e._header.size;e._pax=Sv.decodePax(r.slice(0,v)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(v),n()},h=function(){var v=e._header.size;this._gnuLongPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},E=function(){var v=e._header.size;this._gnuLongLinkPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},I=function(){var v=e._offset,b;try{b=e._header=Sv.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(C){e.emit("error",C)}if(r.consume(512),!b){e._parse(512,I),o();return}if(b.type==="gnu-long-path"){e._parse(b.size,h),o();return}if(b.type==="gnu-long-link-path"){e._parse(b.size,E),o();return}if(b.type==="pax-global-header"){e._parse(b.size,A),o();return}if(b.type==="pax-header"){e._parse(b.size,p),o();return}if(e._gnuLongPath&&(b.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(b.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=b=evt(b,e._pax),e._pax=null),e._locked=!0,!b.size||b.type==="directory"){e._parse(512,I),e.emit("entry",b,$Bt(e,v),a);return}e._stream=new VQ(e,v),e.emit("entry",b,e._stream,a),e._parse(b.size,n),o()};this._onheader=I,this._parse(512,I)};q2e.inherits(sp,G2e);sp.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};sp.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};sp.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=W2e,this._overflow?this._write(this._overflow,void 0,t):t()}};sp.prototype._write=function(t,e,r){if(!this._destroyed){var o=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(u=t.slice(n),t=t.slice(0,n)),o?o.end(t):a.append(t),this._overflow=u,this._onparse()}};sp.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};V2e.exports=sp});var z2e=_((M$t,J2e)=>{J2e.exports=Be("fs").constants||Be("constants")});var tBe=_((O$t,eBe)=>{var nw=z2e(),X2e=OO(),JQ=Q0(),tvt=Buffer.alloc,Z2e=ew().Readable,iw=ew().Writable,rvt=Be("string_decoder").StringDecoder,KQ=oG(),nvt=parseInt("755",8),ivt=parseInt("644",8),$2e=tvt(1024),lG=function(){},aG=function(t,e){e&=511,e&&t.push($2e.slice(0,512-e))};function svt(t){switch(t&nw.S_IFMT){case nw.S_IFBLK:return"block-device";case nw.S_IFCHR:return"character-device";case nw.S_IFDIR:return"directory";case nw.S_IFIFO:return"fifo";case nw.S_IFLNK:return"symlink"}return"file"}var zQ=function(t){iw.call(this),this.written=0,this._to=t,this._destroyed=!1};JQ(zQ,iw);zQ.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};zQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var XQ=function(){iw.call(this),this.linkname="",this._decoder=new rvt("utf-8"),this._destroyed=!1};JQ(XQ,iw);XQ.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};XQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var xv=function(){iw.call(this),this._destroyed=!1};JQ(xv,iw);xv.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};xv.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var EA=function(t){if(!(this instanceof EA))return new EA(t);Z2e.call(this,t),this._drain=lG,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};JQ(EA,Z2e);EA.prototype.entry=function(t,e,r){if(this._stream)throw new Error("already piping an entry");if(!(this._finalized||this._destroyed)){typeof e=="function"&&(r=e,e=null),r||(r=lG);var o=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=svt(t.mode)),t.mode||(t.mode=t.type==="directory"?nvt:ivt),t.uid||(t.uid=0),t.gid||(t.gid=0),t.mtime||(t.mtime=new Date),typeof e=="string"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){t.size=e.length,this._encode(t);var a=this.push(e);return aG(o,t.size),a?process.nextTick(r):this._drain=r,new xv}if(t.type==="symlink"&&!t.linkname){var n=new XQ;return X2e(n,function(A){if(A)return o.destroy(),r(A);t.linkname=n.linkname,o._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new xv;var u=new zQ(this);return this._stream=u,X2e(u,function(A){if(o._stream=null,A)return o.destroy(),r(A);if(u.written!==t.size)return o.destroy(),r(new Error("size mismatch"));aG(o,t.size),o._finalizing&&o.finalize(),r()}),u}};EA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push($2e),this.push(null))};EA.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())};EA.prototype._encode=function(t){if(!t.pax){var e=KQ.encode(t);if(e){this.push(e);return}}this._encodePax(t)};EA.prototype._encodePax=function(t){var e=KQ.encodePax({name:t.name,linkname:t.linkname,pax:t.pax}),r={name:"PaxHeader",mode:t.mode,uid:t.uid,gid:t.gid,size:e.length,mtime:t.mtime,type:"pax-header",linkname:t.linkname&&"PaxHeader",uname:t.uname,gname:t.gname,devmajor:t.devmajor,devminor:t.devminor};this.push(KQ.encode(r)),this.push(e),aG(this,e.length),r.size=t.size,r.type=t.type,this.push(KQ.encode(r))};EA.prototype._read=function(t){var e=this._drain;this._drain=lG,e()};eBe.exports=EA});var rBe=_(cG=>{cG.extract=K2e();cG.pack=tBe()});var hBe=_((ier,pBe)=>{"use strict";var Bm=class{constructor(e,r,o){this.__specs=e||{},Object.keys(this.__specs).forEach(a=>{if(typeof this.__specs[a]=="string"){let n=this.__specs[a],u=this.__specs[n];if(u){let A=u.aliases||[];A.push(a,n),u.aliases=[...new Set(A)],this.__specs[a]=u}else throw new Error(`Alias refers to invalid key: ${n} -> ${a}`)}}),this.__opts=r||{},this.__providers=ABe(o.filter(a=>a!=null&&typeof a=="object")),this.__isFiggyPudding=!0}get(e){return gG(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[o,a]of this.entries())e.call(r,a,o,this)}toJSON(){let e={};return this.forEach((r,o)=>{e[o]=r}),e}*entries(e){for(let o of Object.keys(this.__specs))yield[o,this.get(o)];let r=e||this.__opts.other;if(r){let o=new Set;for(let a of this.__providers){let n=a.entries?a.entries(r):Cvt(a);for(let[u,A]of n)r(u)&&!o.has(u)&&(o.add(u),yield[u,A])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Bm(this.__specs,this.__opts,ABe(this.__providers).concat(e)),fBe)}};try{let t=Be("util");Bm.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch{}function yvt(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function gG(t,e,r){let o=t.__specs[e];if(r&&!o&&(!t.__opts.other||!t.__opts.other(e)))yvt(e);else{o||(o={});let a;for(let n of t.__providers){if(a=uBe(e,n),a===void 0&&o.aliases&&o.aliases.length){for(let u of o.aliases)if(u!==e&&(a=uBe(u,n),a!==void 0))break}if(a!==void 0)break}return a===void 0&&o.default!==void 0?typeof o.default=="function"?o.default(t):o.default:a}}function uBe(t,e){let r;return e.__isFiggyPudding?r=gG(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var fBe={has(t,e){return e in t.__specs&&gG(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in Bm.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};pBe.exports=Evt;function Evt(t,e){function r(...o){return new Proxy(new Bm(t,e,o),fBe)}return r}function ABe(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function Cvt(t){return Object.keys(t).map(e=>[e,t[e]])}});var mBe=_((ser,IA)=>{"use strict";var kv=Be("crypto"),wvt=hBe(),Ivt=Be("stream").Transform,gBe=["sha256","sha384","sha512"],Bvt=/^[a-z0-9+/]+(?:=?=?)$/i,vvt=/^([^-]+)-([^?]+)([?\S*]*)$/,Dvt=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,Pvt=/^[\x21-\x7E]+$/,ia=wvt({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>Rvt},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),U0=class{get isHash(){return!0}constructor(e,r){r=ia(r);let o=!!r.strict;this.source=e.trim();let a=this.source.match(o?Dvt:vvt);if(!a||o&&!gBe.some(u=>u===a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=ia(e),e.strict&&!(gBe.some(o=>o===this.algorithm)&&this.digest.match(Bvt)&&(this.options||[]).every(o=>o.match(Pvt))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},vm=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=ia(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(o=>this[o].map(a=>U0.prototype.toString.call(a,e)).filter(a=>a.length).join(r)).filter(o=>o.length).join(r)}concat(e,r){r=ia(r);let o=typeof e=="string"?e:bv(e,r);return wA(`${this.toString(r)} ${o}`,r)}hexDigest(){return wA(this,{single:!0}).hexDigest()}match(e,r){r=ia(r);let o=wA(e,r),a=o.pickAlgorithm(r);return this[a]&&o[a]&&this[a].find(n=>o[a].find(u=>n.digest===u.digest))||!1}pickAlgorithm(e){e=ia(e);let r=e.pickAlgorithm,o=Object.keys(this);if(!o.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return o.reduce((a,n)=>r(a,n)||a)}};IA.exports.parse=wA;function wA(t,e){if(e=ia(e),typeof t=="string")return dG(t,e);if(t.algorithm&&t.digest){let r=new vm;return r[t.algorithm]=[t],dG(bv(r,e),e)}else return dG(bv(t,e),e)}function dG(t,e){return e.single?new U0(t,e):t.trim().split(/\s+/).reduce((r,o)=>{let a=new U0(o,e);if(a.algorithm&&a.digest){let n=a.algorithm;r[n]||(r[n]=[]),r[n].push(a)}return r},new vm)}IA.exports.stringify=bv;function bv(t,e){return e=ia(e),t.algorithm&&t.digest?U0.prototype.toString.call(t,e):typeof t=="string"?bv(wA(t,e),e):vm.prototype.toString.call(t,e)}IA.exports.fromHex=Svt;function Svt(t,e,r){r=ia(r);let o=r.options&&r.options.length?`?${r.options.join("?")}`:"";return wA(`${e}-${Buffer.from(t,"hex").toString("base64")}${o}`,r)}IA.exports.fromData=xvt;function xvt(t,e){e=ia(e);let r=e.algorithms,o=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((a,n)=>{let u=kv.createHash(n).update(t).digest("base64"),A=new U0(`${n}-${u}${o}`,e);if(A.algorithm&&A.digest){let p=A.algorithm;a[p]||(a[p]=[]),a[p].push(A)}return a},new vm)}IA.exports.fromStream=bvt;function bvt(t,e){e=ia(e);let r=e.Promise||Promise,o=mG(e);return new r((a,n)=>{t.pipe(o),t.on("error",n),o.on("error",n);let u;o.on("integrity",A=>{u=A}),o.on("end",()=>a(u)),o.on("data",()=>{})})}IA.exports.checkData=kvt;function kvt(t,e,r){if(r=ia(r),e=wA(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let o=e.pickAlgorithm(r),a=kv.createHash(o).update(t).digest("base64"),n=wA({algorithm:o,digest:a}),u=n.match(e,r);if(u||!r.error)return u;if(typeof r.size=="number"&&t.length!==r.size){let A=new Error(`data size mismatch when checking ${e}. +`,x}function u1t(t,e){return e.fs_.chmod(t,493)}function uj(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(sc.delimiter):Array.from(t),r={};for(let o=0;o`/mnt/${A.toLowerCase()}`):e[o];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[o]={win32:a,posix:n}}return r}o1e.exports=cj});var vj=_((h$t,b1e)=>{b1e.exports=ve("stream")});var F1e=_((g$t,Q1e)=>{"use strict";function x1e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function O1t(t){for(var e=1;e0?this.tail.next=o:this.head=o,this.tail=o,++this.length}},{key:"unshift",value:function(r){var o={data:r,next:this.head};this.length===0&&(this.tail=o),this.head=o,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var o=this.head,a=""+o.data;o=o.next;)a+=r+o.data;return a}},{key:"concat",value:function(r){if(this.length===0)return xQ.alloc(0);for(var o=xQ.allocUnsafe(r>>>0),a=this.head,n=0;a;)G1t(a.data,o,n),n+=a.data.length,a=a.next;return o}},{key:"consume",value:function(r,o){var a;return ru.length?u.length:r;if(A===u.length?n+=u:n+=u.slice(0,r),r-=A,r===0){A===u.length?(++a,o.next?this.head=o.next:this.head=this.tail=null):(this.head=o,o.data=u.slice(A));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var o=xQ.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(o),r-=a.data.length;a=a.next;){var u=a.data,A=r>u.length?u.length:r;if(u.copy(o,o.length-r,0,A),r-=A,r===0){A===u.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=u.slice(A));break}++n}return this.length-=n,o}},{key:j1t,value:function(r,o){return Dj(this,O1t({},o,{depth:0,customInspect:!1}))}}]),t}()});var Pj=_((d$t,T1e)=>{"use strict";function Y1t(t,e){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(Sj,this,t)):process.nextTick(Sj,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(n){!e&&n?r._writableState?r._writableState.errorEmitted?process.nextTick(kQ,r):(r._writableState.errorEmitted=!0,process.nextTick(R1e,r,n)):process.nextTick(R1e,r,n):e?(process.nextTick(kQ,r),e(n)):process.nextTick(kQ,r)}),this)}function R1e(t,e){Sj(t,e),kQ(t)}function kQ(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function W1t(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function Sj(t,e){t.emit("error",e)}function K1t(t,e){var r=t._readableState,o=t._writableState;r&&r.autoDestroy||o&&o.autoDestroy?t.destroy(e):t.emit("error",e)}T1e.exports={destroy:Y1t,undestroy:W1t,errorOrDestroy:K1t}});var Q0=_((m$t,O1e)=>{"use strict";var L1e={};function ac(t,e,r){r||(r=Error);function o(n,u,A){return typeof e=="string"?e:e(n,u,A)}class a extends r{constructor(u,A,p){super(o(u,A,p))}}a.prototype.name=r.name,a.prototype.code=t,L1e[t]=a}function N1e(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(o=>String(o)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function V1t(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function J1t(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function z1t(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}ac("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);ac("ERR_INVALID_ARG_TYPE",function(t,e,r){let o;typeof e=="string"&&V1t(e,"not ")?(o="must not be",e=e.replace(/^not /,"")):o="must be";let a;if(J1t(t," argument"))a=`The ${t} ${o} ${N1e(e,"type")}`;else{let n=z1t(t,".")?"property":"argument";a=`The "${t}" ${n} ${o} ${N1e(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);ac("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");ac("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});ac("ERR_STREAM_PREMATURE_CLOSE","Premature close");ac("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});ac("ERR_MULTIPLE_CALLBACK","Callback called multiple times");ac("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");ac("ERR_STREAM_WRITE_AFTER_END","write after end");ac("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);ac("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);ac("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");O1e.exports.codes=L1e});var bj=_((y$t,M1e)=>{"use strict";var X1t=Q0().codes.ERR_INVALID_OPT_VALUE;function Z1t(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function $1t(t,e,r,o){var a=Z1t(e,o,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=o?r:"highWaterMark";throw new X1t(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}M1e.exports={getHighWaterMark:$1t}});var U1e=_((E$t,xj)=>{typeof Object.create=="function"?xj.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:xj.exports=function(e,r){if(r){e.super_=r;var o=function(){};o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e}}});var F0=_((C$t,Qj)=>{try{if(kj=ve("util"),typeof kj.inherits!="function")throw"";Qj.exports=kj.inherits}catch{Qj.exports=U1e()}var kj});var H1e=_((w$t,_1e)=>{_1e.exports=ve("util").deprecate});var Tj=_((I$t,K1e)=>{"use strict";K1e.exports=Ri;function j1e(t){var e=this;this.next=null,this.entry=null,this.finish=function(){S2t(e,t)}}var zC;Ri.WritableState=mv;var e2t={deprecate:H1e()},G1e=vj(),FQ=ve("buffer").Buffer,t2t=global.Uint8Array||function(){};function r2t(t){return FQ.from(t)}function n2t(t){return FQ.isBuffer(t)||t instanceof t2t}var Rj=Pj(),i2t=bj(),s2t=i2t.getHighWaterMark,R0=Q0().codes,o2t=R0.ERR_INVALID_ARG_TYPE,a2t=R0.ERR_METHOD_NOT_IMPLEMENTED,l2t=R0.ERR_MULTIPLE_CALLBACK,c2t=R0.ERR_STREAM_CANNOT_PIPE,u2t=R0.ERR_STREAM_DESTROYED,A2t=R0.ERR_STREAM_NULL_VALUES,f2t=R0.ERR_STREAM_WRITE_AFTER_END,p2t=R0.ERR_UNKNOWN_ENCODING,XC=Rj.errorOrDestroy;F0()(Ri,G1e);function h2t(){}function mv(t,e,r){zC=zC||Cm(),t=t||{},typeof r!="boolean"&&(r=e instanceof zC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=s2t(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){w2t(e,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new j1e(this)}mv.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(mv.prototype,"buffer",{get:e2t.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var QQ;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(QQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ri,Symbol.hasInstance,{value:function(e){return QQ.call(this,e)?!0:this!==Ri?!1:e&&e._writableState instanceof mv}})):QQ=function(e){return e instanceof this};function Ri(t){zC=zC||Cm();var e=this instanceof zC;if(!e&&!QQ.call(Ri,this))return new Ri(t);this._writableState=new mv(t,this,e),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final)),G1e.call(this)}Ri.prototype.pipe=function(){XC(this,new c2t)};function g2t(t,e){var r=new f2t;XC(t,r),process.nextTick(e,r)}function d2t(t,e,r,o){var a;return r===null?a=new A2t:typeof r!="string"&&!e.objectMode&&(a=new o2t("chunk",["string","Buffer"],r)),a?(XC(t,a),process.nextTick(o,a),!1):!0}Ri.prototype.write=function(t,e,r){var o=this._writableState,a=!1,n=!o.objectMode&&n2t(t);return n&&!FQ.isBuffer(t)&&(t=r2t(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=o.defaultEncoding),typeof r!="function"&&(r=h2t),o.ending?g2t(this,r):(n||d2t(this,o,t,r))&&(o.pendingcb++,a=y2t(this,o,n,t,e,r)),a};Ri.prototype.cork=function(){this._writableState.corked++};Ri.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&Y1e(this,t))};Ri.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new p2t(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Ri.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function m2t(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=FQ.from(e,r)),e}Object.defineProperty(Ri.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function y2t(t,e,r,o,a,n){if(!r){var u=m2t(e,o,a);o!==u&&(r=!0,a="buffer",o=u)}var A=e.objectMode?1:o.length;e.length+=A;var p=e.length{"use strict";var P2t=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};J1e.exports=EA;var V1e=Oj(),Lj=Tj();F0()(EA,V1e);for(Nj=P2t(Lj.prototype),RQ=0;RQ{var NQ=ve("buffer"),ip=NQ.Buffer;function z1e(t,e){for(var r in t)e[r]=t[r]}ip.from&&ip.alloc&&ip.allocUnsafe&&ip.allocUnsafeSlow?X1e.exports=NQ:(z1e(NQ,Mj),Mj.Buffer=ZC);function ZC(t,e,r){return ip(t,e,r)}z1e(ip,ZC);ZC.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return ip(t,e,r)};ZC.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var o=ip(t);return e!==void 0?typeof r=="string"?o.fill(e,r):o.fill(e):o.fill(0),o};ZC.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return ip(t)};ZC.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return NQ.SlowBuffer(t)}});var Hj=_(e2e=>{"use strict";var _j=Z1e().Buffer,$1e=_j.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function k2t(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function Q2t(t){var e=k2t(t);if(typeof e!="string"&&(_j.isEncoding===$1e||!$1e(t)))throw new Error("Unknown encoding: "+t);return e||t}e2e.StringDecoder=yv;function yv(t){this.encoding=Q2t(t);var e;switch(this.encoding){case"utf16le":this.text=O2t,this.end=M2t,e=4;break;case"utf8":this.fillLast=T2t,e=4;break;case"base64":this.text=U2t,this.end=_2t,e=3;break;default:this.write=H2t,this.end=q2t;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=_j.allocUnsafe(e)}yv.prototype.write=function(t){if(t.length===0)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),e===void 0)return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r>5===6?2:t>>4===14?3:t>>3===30?4:t>>6===2?-1:-2}function F2t(t,e,r){var o=e.length-1;if(o=0?(a>0&&(t.lastNeed=a-1),a):--o=0?(a>0&&(t.lastNeed=a-2),a):--o=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function R2t(t,e,r){if((e[0]&192)!==128)return t.lastNeed=0,"\uFFFD";if(t.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return t.lastNeed=1,"\uFFFD";if(t.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return t.lastNeed=2,"\uFFFD"}}function T2t(t){var e=this.lastTotal-this.lastNeed,r=R2t(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function N2t(t,e){var r=F2t(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var o=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,o),t.toString("utf8",e,o)}function L2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function O2t(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var o=r.charCodeAt(r.length-1);if(o>=55296&&o<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function M2t(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function U2t(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function _2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function H2t(t){return t.toString(this.encoding)}function q2t(t){return t&&t.length?this.write(t):""}});var LQ=_((D$t,n2e)=>{"use strict";var t2e=Q0().codes.ERR_STREAM_PREMATURE_CLOSE;function j2t(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";var OQ;function T0(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var W2t=LQ(),N0=Symbol("lastResolve"),wm=Symbol("lastReject"),Ev=Symbol("error"),MQ=Symbol("ended"),Im=Symbol("lastPromise"),qj=Symbol("handlePromise"),Bm=Symbol("stream");function L0(t,e){return{value:t,done:e}}function K2t(t){var e=t[N0];if(e!==null){var r=t[Bm].read();r!==null&&(t[Im]=null,t[N0]=null,t[wm]=null,e(L0(r,!1)))}}function V2t(t){process.nextTick(K2t,t)}function J2t(t,e){return function(r,o){t.then(function(){if(e[MQ]){r(L0(void 0,!0));return}e[qj](r,o)},o)}}var z2t=Object.getPrototypeOf(function(){}),X2t=Object.setPrototypeOf((OQ={get stream(){return this[Bm]},next:function(){var e=this,r=this[Ev];if(r!==null)return Promise.reject(r);if(this[MQ])return Promise.resolve(L0(void 0,!0));if(this[Bm].destroyed)return new Promise(function(u,A){process.nextTick(function(){e[Ev]?A(e[Ev]):u(L0(void 0,!0))})});var o=this[Im],a;if(o)a=new Promise(J2t(o,this));else{var n=this[Bm].read();if(n!==null)return Promise.resolve(L0(n,!1));a=new Promise(this[qj])}return this[Im]=a,a}},T0(OQ,Symbol.asyncIterator,function(){return this}),T0(OQ,"return",function(){var e=this;return new Promise(function(r,o){e[Bm].destroy(null,function(a){if(a){o(a);return}r(L0(void 0,!0))})})}),OQ),z2t),Z2t=function(e){var r,o=Object.create(X2t,(r={},T0(r,Bm,{value:e,writable:!0}),T0(r,N0,{value:null,writable:!0}),T0(r,wm,{value:null,writable:!0}),T0(r,Ev,{value:null,writable:!0}),T0(r,MQ,{value:e._readableState.endEmitted,writable:!0}),T0(r,qj,{value:function(n,u){var A=o[Bm].read();A?(o[Im]=null,o[N0]=null,o[wm]=null,n(L0(A,!1))):(o[N0]=n,o[wm]=u)},writable:!0}),r));return o[Im]=null,W2t(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=o[wm];n!==null&&(o[Im]=null,o[N0]=null,o[wm]=null,n(a)),o[Ev]=a;return}var u=o[N0];u!==null&&(o[Im]=null,o[N0]=null,o[wm]=null,u(L0(void 0,!0))),o[MQ]=!0}),e.on("readable",V2t.bind(null,o)),o};i2e.exports=Z2t});var c2e=_((P$t,l2e)=>{"use strict";function o2e(t,e,r,o,a,n,u){try{var A=t[n](u),p=A.value}catch(h){r(h);return}A.done?e(p):Promise.resolve(p).then(o,a)}function $2t(t){return function(){var e=this,r=arguments;return new Promise(function(o,a){var n=t.apply(e,r);function u(p){o2e(n,o,a,u,A,"next",p)}function A(p){o2e(n,o,a,u,A,"throw",p)}u(void 0)})}}function a2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function eBt(t){for(var e=1;e{"use strict";E2e.exports=mn;var $C;mn.ReadableState=p2e;var b$t=ve("events").EventEmitter,f2e=function(e,r){return e.listeners(r).length},wv=vj(),UQ=ve("buffer").Buffer,iBt=global.Uint8Array||function(){};function sBt(t){return UQ.from(t)}function oBt(t){return UQ.isBuffer(t)||t instanceof iBt}var jj=ve("util"),en;jj&&jj.debuglog?en=jj.debuglog("stream"):en=function(){};var aBt=F1e(),zj=Pj(),lBt=bj(),cBt=lBt.getHighWaterMark,_Q=Q0().codes,uBt=_Q.ERR_INVALID_ARG_TYPE,ABt=_Q.ERR_STREAM_PUSH_AFTER_EOF,fBt=_Q.ERR_METHOD_NOT_IMPLEMENTED,pBt=_Q.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,ew,Gj,Yj;F0()(mn,wv);var Cv=zj.errorOrDestroy,Wj=["error","close","destroy","pause","resume"];function hBt(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]}function p2e(t,e,r){$C=$C||Cm(),t=t||{},typeof r!="boolean"&&(r=e instanceof $C),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=cBt(this,t,"readableHighWaterMark",r),this.buffer=new aBt,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(ew||(ew=Hj().StringDecoder),this.decoder=new ew(t.encoding),this.encoding=t.encoding)}function mn(t){if($C=$C||Cm(),!(this instanceof mn))return new mn(t);var e=this instanceof $C;this._readableState=new p2e(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),wv.call(this)}Object.defineProperty(mn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});mn.prototype.destroy=zj.destroy;mn.prototype._undestroy=zj.undestroy;mn.prototype._destroy=function(t,e){e(t)};mn.prototype.push=function(t,e){var r=this._readableState,o;return r.objectMode?o=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=UQ.from(t,e),e=""),o=!0),h2e(this,t,e,!1,o)};mn.prototype.unshift=function(t){return h2e(this,t,null,!0,!1)};function h2e(t,e,r,o,a){en("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,mBt(t,n);else{var u;if(a||(u=gBt(n,e)),u)Cv(t,u);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==UQ.prototype&&(e=sBt(e)),o)n.endEmitted?Cv(t,new pBt):Kj(t,n,e,!0);else if(n.ended)Cv(t,new ABt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?Kj(t,n,e,!1):Jj(t,n)):Kj(t,n,e,!1)}else o||(n.reading=!1,Jj(t,n))}return!n.ended&&(n.length=u2e?t=u2e:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function A2e(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=dBt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}mn.prototype.read=function(t){en("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return en("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?Vj(this):HQ(this),null;if(t=A2e(t,e),t===0&&e.ended)return e.length===0&&Vj(this),null;var o=e.needReadable;en("need readable",o),(e.length===0||e.length-t0?a=m2e(t,e):a=null,a===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&Vj(this)),a!==null&&this.emit("data",a),a};function mBt(t,e){if(en("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?HQ(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,g2e(t)))}}function HQ(t){var e=t._readableState;en("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(en("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(g2e,t))}function g2e(t){var e=t._readableState;en("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,Xj(t)}function Jj(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(yBt,t,e))}function yBt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&y2e(o.pipes,t)!==-1)&&!h&&(en("false write response, pause",o.awaitDrain),o.awaitDrain++),r.pause())}function v(L){en("onerror",L),R(),t.removeListener("error",v),f2e(t,"error")===0&&Cv(t,L)}hBt(t,"error",v);function x(){t.removeListener("finish",C),R()}t.once("close",x);function C(){en("onfinish"),t.removeListener("close",x),R()}t.once("finish",C);function R(){en("unpipe"),r.unpipe(t)}return t.emit("pipe",r),o.flowing||(en("pipe resume"),r.resume()),t};function EBt(t){return function(){var r=t._readableState;en("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&f2e(t,"data")&&(r.flowing=!0,Xj(t))}}mn.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var o=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,o.flowing!==!1&&this.resume()):t==="readable"&&!o.endEmitted&&!o.readableListening&&(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,en("on readable",o.length,o.reading),o.length?HQ(this):o.reading||process.nextTick(CBt,this)),r};mn.prototype.addListener=mn.prototype.on;mn.prototype.removeListener=function(t,e){var r=wv.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(d2e,this),r};mn.prototype.removeAllListeners=function(t){var e=wv.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(d2e,this),e};function d2e(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function CBt(t){en("readable nexttick read 0"),t.read(0)}mn.prototype.resume=function(){var t=this._readableState;return t.flowing||(en("resume"),t.flowing=!t.readableListening,wBt(this,t)),t.paused=!1,this};function wBt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(IBt,t,e))}function IBt(t,e){en("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),Xj(t),e.flowing&&!e.reading&&t.read(0)}mn.prototype.pause=function(){return en("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(en("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function Xj(t){var e=t._readableState;for(en("flow",e.flowing);e.flowing&&t.read()!==null;);}mn.prototype.wrap=function(t){var e=this,r=this._readableState,o=!1;t.on("end",function(){if(en("wrapped end"),r.decoder&&!r.ended){var u=r.decoder.end();u&&u.length&&e.push(u)}e.push(null)}),t.on("data",function(u){if(en("wrapped data"),r.decoder&&(u=r.decoder.write(u)),!(r.objectMode&&u==null)&&!(!r.objectMode&&(!u||!u.length))){var A=e.push(u);A||(o=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(A){return function(){return t[A].apply(t,arguments)}}(a));for(var n=0;n=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function Vj(t){var e=t._readableState;en("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(BBt,e,t))}function BBt(t,e){if(en("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}typeof Symbol=="function"&&(mn.from=function(t,e){return Yj===void 0&&(Yj=c2e()),Yj(mn,t,e)});function y2e(t,e){for(var r=0,o=t.length;r{"use strict";w2e.exports=sp;var qQ=Q0().codes,vBt=qQ.ERR_METHOD_NOT_IMPLEMENTED,DBt=qQ.ERR_MULTIPLE_CALLBACK,SBt=qQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,PBt=qQ.ERR_TRANSFORM_WITH_LENGTH_0,jQ=Cm();F0()(sp,jQ);function bBt(t,e){var r=this._transformState;r.transforming=!1;var o=r.writecb;if(o===null)return this.emit("error",new DBt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),o(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";B2e.exports=Iv;var I2e=Zj();F0()(Iv,I2e);function Iv(t){if(!(this instanceof Iv))return new Iv(t);I2e.call(this,t)}Iv.prototype._transform=function(t,e,r){r(null,t)}});var x2e=_((F$t,b2e)=>{"use strict";var $j;function kBt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var P2e=Q0().codes,QBt=P2e.ERR_MISSING_ARGS,FBt=P2e.ERR_STREAM_DESTROYED;function D2e(t){if(t)throw t}function RBt(t){return t.setHeader&&typeof t.abort=="function"}function TBt(t,e,r,o){o=kBt(o);var a=!1;t.on("close",function(){a=!0}),$j===void 0&&($j=LQ()),$j(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,RBt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();o(u||new FBt("pipe"))}}}function S2e(t){t()}function NBt(t,e){return t.pipe(e)}function LBt(t){return!t.length||typeof t[t.length-1]!="function"?D2e:t.pop()}function OBt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return TBt(u,p,h,function(E){a||(a=E),E&&n.forEach(S2e),!p&&(n.forEach(S2e),o(a))})});return e.reduce(NBt)}b2e.exports=OBt});var tw=_((lc,vv)=>{var Bv=ve("stream");process.env.READABLE_STREAM==="disable"&&Bv?(vv.exports=Bv.Readable,Object.assign(vv.exports,Bv),vv.exports.Stream=Bv):(lc=vv.exports=Oj(),lc.Stream=Bv||lc,lc.Readable=lc,lc.Writable=Tj(),lc.Duplex=Cm(),lc.Transform=Zj(),lc.PassThrough=v2e(),lc.finished=LQ(),lc.pipeline=x2e())});var F2e=_((R$t,Q2e)=>{"use strict";var{Buffer:lu}=ve("buffer"),k2e=Symbol.for("BufferList");function ni(t){if(!(this instanceof ni))return new ni(t);ni._init.call(this,t)}ni._init=function(e){Object.defineProperty(this,k2e,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};ni.prototype._new=function(e){return new ni(e)};ni.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let o=0;othis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ni.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ni.prototype.copy=function(e,r,o,a){if((typeof o!="number"||o<0)&&(o=0),(typeof a!="number"||a>this.length)&&(a=this.length),o>=this.length||a<=0)return e||lu.alloc(0);let n=!!e,u=this._offset(o),A=a-o,p=A,h=n&&r||0,E=u[1];if(o===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:lu.concat(this._bufs,this.length);for(let I=0;Iv)this._bufs[I].copy(e,h,E),h+=v;else{this._bufs[I].copy(e,h,E,E+p),h+=v;break}p-=v,E&&(E=0)}return e.length>h?e.slice(0,h):e};ni.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let o=this._offset(e),a=this._offset(r),n=this._bufs.slice(o[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),o[1]!==0&&(n[0]=n[0].slice(o[1])),this._new(n)};ni.prototype.toString=function(e,r,o){return this.slice(r,o).toString(e)};ni.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ni.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let o=this._offset(e),a=o[0],n=o[1];for(;a=t.length){let p=u.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=u.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};ni.prototype._match=function(t,e){if(this.length-t{"use strict";var eG=tw().Duplex,MBt=F0(),Dv=F2e();function Uo(t){if(!(this instanceof Uo))return new Uo(t);if(typeof t=="function"){this._callback=t;let e=function(o){this._callback&&(this._callback(o),this._callback=null)}.bind(this);this.on("pipe",function(o){o.on("error",e)}),this.on("unpipe",function(o){o.removeListener("error",e)}),t=null}Dv._init.call(this,t),eG.call(this)}MBt(Uo,eG);Object.assign(Uo.prototype,Dv.prototype);Uo.prototype._new=function(e){return new Uo(e)};Uo.prototype._write=function(e,r,o){this._appendBuffer(e),typeof o=="function"&&o()};Uo.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Uo.prototype.end=function(e){eG.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Uo.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Uo.prototype._isBufferList=function(e){return e instanceof Uo||e instanceof Dv||Uo.isBufferList(e)};Uo.isBufferList=Dv.isBufferList;GQ.exports=Uo;GQ.exports.BufferListStream=Uo;GQ.exports.BufferList=Dv});var nG=_(nw=>{var UBt=Buffer.alloc,_Bt="0000000000000000000",HBt="7777777777777777777",T2e="0".charCodeAt(0),N2e=Buffer.from("ustar\0","binary"),qBt=Buffer.from("00","binary"),jBt=Buffer.from("ustar ","binary"),GBt=Buffer.from(" \0","binary"),YBt=parseInt("7777",8),Sv=257,rG=263,WBt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},KBt=function(t){switch(t){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null},VBt=function(t){switch(t){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0},L2e=function(t,e,r,o){for(;re?HBt.slice(0,e)+" ":_Bt.slice(0,e-t.length)+t+" "};function JBt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],o=t.length-1;o>0;o--){var a=t[o];e?r.push(a):r.push(255-a)}var n=0,u=r.length;for(o=0;o=Math.pow(10,r)&&r++,e+r+t};nw.decodeLongPath=function(t,e){return rw(t,0,t.length,e)};nw.encodePax=function(t){var e="";t.name&&(e+=tG(" path="+t.name+` +`)),t.linkname&&(e+=tG(" linkpath="+t.linkname+` +`));var r=t.pax;if(r)for(var o in r)e+=tG(" "+o+"="+r[o]+` +`);return Buffer.from(e)};nw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;o+=o?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(o)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(O0(t.mode&YBt,6),100),e.write(O0(t.uid,6),108),e.write(O0(t.gid,6),116),e.write(O0(t.size,11),124),e.write(O0(t.mtime.getTime()/1e3|0,11),136),e[156]=T2e+VBt(t.type),t.linkname&&e.write(t.linkname,157),N2e.copy(e,Sv),qBt.copy(e,rG),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(O0(t.devmajor||0,6),329),e.write(O0(t.devminor||0,6),337),o&&e.write(o,345),e.write(O0(O2e(e),6),148),e)};nw.decode=function(t,e,r){var o=t[156]===0?0:t[156]-T2e,a=rw(t,0,100,e),n=M0(t,100,8),u=M0(t,108,8),A=M0(t,116,8),p=M0(t,124,12),h=M0(t,136,12),E=KBt(o),I=t[157]===0?null:rw(t,157,100,e),v=rw(t,265,32),x=rw(t,297,32),C=M0(t,329,8),R=M0(t,337,8),L=O2e(t);if(L===8*32)return null;if(L!==M0(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(N2e.compare(t,Sv,Sv+6)===0)t[345]&&(a=rw(t,345,155,e)+"/"+a);else if(!(jBt.compare(t,Sv,Sv+6)===0&&GBt.compare(t,rG,rG+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return o===0&&a&&a[a.length-1]==="/"&&(o=5),{name:a,mode:n,uid:u,gid:A,size:p,mtime:new Date(1e3*h),type:E,linkname:I,uname:v,gname:x,devmajor:C,devminor:R}}});var G2e=_((L$t,j2e)=>{var U2e=ve("util"),zBt=R2e(),Pv=nG(),_2e=tw().Writable,H2e=tw().PassThrough,q2e=function(){},M2e=function(t){return t&=511,t&&512-t},XBt=function(t,e){var r=new YQ(t,e);return r.end(),r},ZBt=function(t,e){return e.path&&(t.name=e.path),e.linkpath&&(t.linkname=e.linkpath),e.size&&(t.size=parseInt(e.size,10)),t.pax=e,t},YQ=function(t,e){this._parent=t,this.offset=e,H2e.call(this,{autoDestroy:!1})};U2e.inherits(YQ,H2e);YQ.prototype.destroy=function(t){this._parent.destroy(t)};var op=function(t){if(!(this instanceof op))return new op(t);_2e.call(this,t),t=t||{},this._offset=0,this._buffer=zBt(),this._missing=0,this._partial=!1,this._onparse=q2e,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,o=function(){e._continue()},a=function(v){if(e._locked=!1,v)return e.destroy(v);e._stream||o()},n=function(){e._stream=null;var v=M2e(e._header.size);v?e._parse(v,u):e._parse(512,I),e._locked||o()},u=function(){e._buffer.consume(M2e(e._header.size)),e._parse(512,I),o()},A=function(){var v=e._header.size;e._paxGlobal=Pv.decodePax(r.slice(0,v)),r.consume(v),n()},p=function(){var v=e._header.size;e._pax=Pv.decodePax(r.slice(0,v)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(v),n()},h=function(){var v=e._header.size;this._gnuLongPath=Pv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},E=function(){var v=e._header.size;this._gnuLongLinkPath=Pv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},I=function(){var v=e._offset,x;try{x=e._header=Pv.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(C){e.emit("error",C)}if(r.consume(512),!x){e._parse(512,I),o();return}if(x.type==="gnu-long-path"){e._parse(x.size,h),o();return}if(x.type==="gnu-long-link-path"){e._parse(x.size,E),o();return}if(x.type==="pax-global-header"){e._parse(x.size,A),o();return}if(x.type==="pax-header"){e._parse(x.size,p),o();return}if(e._gnuLongPath&&(x.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(x.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=x=ZBt(x,e._pax),e._pax=null),e._locked=!0,!x.size||x.type==="directory"){e._parse(512,I),e.emit("entry",x,XBt(e,v),a);return}e._stream=new YQ(e,v),e.emit("entry",x,e._stream,a),e._parse(x.size,n),o()};this._onheader=I,this._parse(512,I)};U2e.inherits(op,_2e);op.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};op.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};op.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=q2e,this._overflow?this._write(this._overflow,void 0,t):t()}};op.prototype._write=function(t,e,r){if(!this._destroyed){var o=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(u=t.slice(n),t=t.slice(0,n)),o?o.end(t):a.append(t),this._overflow=u,this._onparse()}};op.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};j2e.exports=op});var W2e=_((O$t,Y2e)=>{Y2e.exports=ve("fs").constants||ve("constants")});var X2e=_((M$t,z2e)=>{var iw=W2e(),K2e=LM(),KQ=F0(),$Bt=Buffer.alloc,V2e=tw().Readable,sw=tw().Writable,evt=ve("string_decoder").StringDecoder,WQ=nG(),tvt=parseInt("755",8),rvt=parseInt("644",8),J2e=$Bt(1024),sG=function(){},iG=function(t,e){e&=511,e&&t.push(J2e.slice(0,512-e))};function nvt(t){switch(t&iw.S_IFMT){case iw.S_IFBLK:return"block-device";case iw.S_IFCHR:return"character-device";case iw.S_IFDIR:return"directory";case iw.S_IFIFO:return"fifo";case iw.S_IFLNK:return"symlink"}return"file"}var VQ=function(t){sw.call(this),this.written=0,this._to=t,this._destroyed=!1};KQ(VQ,sw);VQ.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};VQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var JQ=function(){sw.call(this),this.linkname="",this._decoder=new evt("utf-8"),this._destroyed=!1};KQ(JQ,sw);JQ.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};JQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var bv=function(){sw.call(this),this._destroyed=!1};KQ(bv,sw);bv.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};bv.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var CA=function(t){if(!(this instanceof CA))return new CA(t);V2e.call(this,t),this._drain=sG,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};KQ(CA,V2e);CA.prototype.entry=function(t,e,r){if(this._stream)throw new Error("already piping an entry");if(!(this._finalized||this._destroyed)){typeof e=="function"&&(r=e,e=null),r||(r=sG);var o=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=nvt(t.mode)),t.mode||(t.mode=t.type==="directory"?tvt:rvt),t.uid||(t.uid=0),t.gid||(t.gid=0),t.mtime||(t.mtime=new Date),typeof e=="string"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){t.size=e.length,this._encode(t);var a=this.push(e);return iG(o,t.size),a?process.nextTick(r):this._drain=r,new bv}if(t.type==="symlink"&&!t.linkname){var n=new JQ;return K2e(n,function(A){if(A)return o.destroy(),r(A);t.linkname=n.linkname,o._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new bv;var u=new VQ(this);return this._stream=u,K2e(u,function(A){if(o._stream=null,A)return o.destroy(),r(A);if(u.written!==t.size)return o.destroy(),r(new Error("size mismatch"));iG(o,t.size),o._finalizing&&o.finalize(),r()}),u}};CA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(J2e),this.push(null))};CA.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())};CA.prototype._encode=function(t){if(!t.pax){var e=WQ.encode(t);if(e){this.push(e);return}}this._encodePax(t)};CA.prototype._encodePax=function(t){var e=WQ.encodePax({name:t.name,linkname:t.linkname,pax:t.pax}),r={name:"PaxHeader",mode:t.mode,uid:t.uid,gid:t.gid,size:e.length,mtime:t.mtime,type:"pax-header",linkname:t.linkname&&"PaxHeader",uname:t.uname,gname:t.gname,devmajor:t.devmajor,devminor:t.devminor};this.push(WQ.encode(r)),this.push(e),iG(this,e.length),r.size=t.size,r.type=t.type,this.push(WQ.encode(r))};CA.prototype._read=function(t){var e=this._drain;this._drain=sG,e()};z2e.exports=CA});var Z2e=_(oG=>{oG.extract=G2e();oG.pack=X2e()});var uBe=_((ier,cBe)=>{"use strict";var vm=class{constructor(e,r,o){this.__specs=e||{},Object.keys(this.__specs).forEach(a=>{if(typeof this.__specs[a]=="string"){let n=this.__specs[a],u=this.__specs[n];if(u){let A=u.aliases||[];A.push(a,n),u.aliases=[...new Set(A)],this.__specs[a]=u}else throw new Error(`Alias refers to invalid key: ${n} -> ${a}`)}}),this.__opts=r||{},this.__providers=aBe(o.filter(a=>a!=null&&typeof a=="object")),this.__isFiggyPudding=!0}get(e){return fG(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[o,a]of this.entries())e.call(r,a,o,this)}toJSON(){let e={};return this.forEach((r,o)=>{e[o]=r}),e}*entries(e){for(let o of Object.keys(this.__specs))yield[o,this.get(o)];let r=e||this.__opts.other;if(r){let o=new Set;for(let a of this.__providers){let n=a.entries?a.entries(r):yvt(a);for(let[u,A]of n)r(u)&&!o.has(u)&&(o.add(u),yield[u,A])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new vm(this.__specs,this.__opts,aBe(this.__providers).concat(e)),lBe)}};try{let t=ve("util");vm.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch{}function dvt(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function fG(t,e,r){let o=t.__specs[e];if(r&&!o&&(!t.__opts.other||!t.__opts.other(e)))dvt(e);else{o||(o={});let a;for(let n of t.__providers){if(a=oBe(e,n),a===void 0&&o.aliases&&o.aliases.length){for(let u of o.aliases)if(u!==e&&(a=oBe(u,n),a!==void 0))break}if(a!==void 0)break}return a===void 0&&o.default!==void 0?typeof o.default=="function"?o.default(t):o.default:a}}function oBe(t,e){let r;return e.__isFiggyPudding?r=fG(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var lBe={has(t,e){return e in t.__specs&&fG(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in vm.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};cBe.exports=mvt;function mvt(t,e){function r(...o){return new Proxy(new vm(t,e,o),lBe)}return r}function aBe(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function yvt(t){return Object.keys(t).map(e=>[e,t[e]])}});var pBe=_((ser,BA)=>{"use strict";var kv=ve("crypto"),Evt=uBe(),Cvt=ve("stream").Transform,ABe=["sha256","sha384","sha512"],wvt=/^[a-z0-9+/]+(?:=?=?)$/i,Ivt=/^([^-]+)-([^?]+)([?\S*]*)$/,Bvt=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,vvt=/^[\x21-\x7E]+$/,ia=Evt({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>Fvt},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),_0=class{get isHash(){return!0}constructor(e,r){r=ia(r);let o=!!r.strict;this.source=e.trim();let a=this.source.match(o?Bvt:Ivt);if(!a||o&&!ABe.some(u=>u===a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=ia(e),e.strict&&!(ABe.some(o=>o===this.algorithm)&&this.digest.match(wvt)&&(this.options||[]).every(o=>o.match(vvt))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},Dm=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=ia(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(o=>this[o].map(a=>_0.prototype.toString.call(a,e)).filter(a=>a.length).join(r)).filter(o=>o.length).join(r)}concat(e,r){r=ia(r);let o=typeof e=="string"?e:xv(e,r);return IA(`${this.toString(r)} ${o}`,r)}hexDigest(){return IA(this,{single:!0}).hexDigest()}match(e,r){r=ia(r);let o=IA(e,r),a=o.pickAlgorithm(r);return this[a]&&o[a]&&this[a].find(n=>o[a].find(u=>n.digest===u.digest))||!1}pickAlgorithm(e){e=ia(e);let r=e.pickAlgorithm,o=Object.keys(this);if(!o.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return o.reduce((a,n)=>r(a,n)||a)}};BA.exports.parse=IA;function IA(t,e){if(e=ia(e),typeof t=="string")return pG(t,e);if(t.algorithm&&t.digest){let r=new Dm;return r[t.algorithm]=[t],pG(xv(r,e),e)}else return pG(xv(t,e),e)}function pG(t,e){return e.single?new _0(t,e):t.trim().split(/\s+/).reduce((r,o)=>{let a=new _0(o,e);if(a.algorithm&&a.digest){let n=a.algorithm;r[n]||(r[n]=[]),r[n].push(a)}return r},new Dm)}BA.exports.stringify=xv;function xv(t,e){return e=ia(e),t.algorithm&&t.digest?_0.prototype.toString.call(t,e):typeof t=="string"?xv(IA(t,e),e):Dm.prototype.toString.call(t,e)}BA.exports.fromHex=Dvt;function Dvt(t,e,r){r=ia(r);let o=r.options&&r.options.length?`?${r.options.join("?")}`:"";return IA(`${e}-${Buffer.from(t,"hex").toString("base64")}${o}`,r)}BA.exports.fromData=Svt;function Svt(t,e){e=ia(e);let r=e.algorithms,o=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((a,n)=>{let u=kv.createHash(n).update(t).digest("base64"),A=new _0(`${n}-${u}${o}`,e);if(A.algorithm&&A.digest){let p=A.algorithm;a[p]||(a[p]=[]),a[p].push(A)}return a},new Dm)}BA.exports.fromStream=Pvt;function Pvt(t,e){e=ia(e);let r=e.Promise||Promise,o=hG(e);return new r((a,n)=>{t.pipe(o),t.on("error",n),o.on("error",n);let u;o.on("integrity",A=>{u=A}),o.on("end",()=>a(u)),o.on("data",()=>{})})}BA.exports.checkData=bvt;function bvt(t,e,r){if(r=ia(r),e=IA(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let o=e.pickAlgorithm(r),a=kv.createHash(o).update(t).digest("base64"),n=IA({algorithm:o,digest:a}),u=n.match(e,r);if(u||!r.error)return u;if(typeof r.size=="number"&&t.length!==r.size){let A=new Error(`data size mismatch when checking ${e}. Wanted: ${r.size} - Found: ${t.length}`);throw A.code="EBADSIZE",A.found=t.length,A.expected=r.size,A.sri=e,A}else{let A=new Error(`Integrity checksum failed when using ${o}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw A.code="EINTEGRITY",A.found=n,A.expected=e,A.algorithm=o,A.sri=e,A}}IA.exports.checkStream=Qvt;function Qvt(t,e,r){r=ia(r);let o=r.Promise||Promise,a=mG(r.concat({integrity:e}));return new o((n,u)=>{t.pipe(a),t.on("error",u),a.on("error",u);let A;a.on("verified",p=>{A=p}),a.on("end",()=>n(A)),a.on("data",()=>{})})}IA.exports.integrityStream=mG;function mG(t){t=ia(t);let e=t.integrity&&wA(t.integrity,t),r=e&&Object.keys(e).length,o=r&&e.pickAlgorithm(t),a=r&&e[o],n=Array.from(new Set(t.algorithms.concat(o?[o]:[]))),u=n.map(kv.createHash),A=0,p=new Ivt({transform(h,E,I){A+=h.length,u.forEach(v=>v.update(h,E)),I(null,h,E)}}).on("end",()=>{let h=t.options&&t.options.length?`?${t.options.join("?")}`:"",E=wA(u.map((v,b)=>`${n[b]}-${v.digest("base64")}${h}`).join(" "),t),I=r&&E.match(e,t);if(typeof t.size=="number"&&A!==t.size){let v=new Error(`stream size mismatch when checking ${e}. + Found: ${t.length}`);throw A.code="EBADSIZE",A.found=t.length,A.expected=r.size,A.sri=e,A}else{let A=new Error(`Integrity checksum failed when using ${o}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw A.code="EINTEGRITY",A.found=n,A.expected=e,A.algorithm=o,A.sri=e,A}}BA.exports.checkStream=xvt;function xvt(t,e,r){r=ia(r);let o=r.Promise||Promise,a=hG(r.concat({integrity:e}));return new o((n,u)=>{t.pipe(a),t.on("error",u),a.on("error",u);let A;a.on("verified",p=>{A=p}),a.on("end",()=>n(A)),a.on("data",()=>{})})}BA.exports.integrityStream=hG;function hG(t){t=ia(t);let e=t.integrity&&IA(t.integrity,t),r=e&&Object.keys(e).length,o=r&&e.pickAlgorithm(t),a=r&&e[o],n=Array.from(new Set(t.algorithms.concat(o?[o]:[]))),u=n.map(kv.createHash),A=0,p=new Cvt({transform(h,E,I){A+=h.length,u.forEach(v=>v.update(h,E)),I(null,h,E)}}).on("end",()=>{let h=t.options&&t.options.length?`?${t.options.join("?")}`:"",E=IA(u.map((v,x)=>`${n[x]}-${v.digest("base64")}${h}`).join(" "),t),I=r&&E.match(e,t);if(typeof t.size=="number"&&A!==t.size){let v=new Error(`stream size mismatch when checking ${e}. Wanted: ${t.size} - Found: ${A}`);v.code="EBADSIZE",v.found=A,v.expected=t.size,v.sri=e,p.emit("error",v)}else if(t.integrity&&!I){let v=new Error(`${e} integrity checksum failed when using ${o}: wanted ${a} but got ${E}. (${A} bytes)`);v.code="EINTEGRITY",v.found=E,v.expected=a,v.algorithm=o,v.sri=e,p.emit("error",v)}else p.emit("size",A),p.emit("integrity",E),I&&p.emit("verified",I)});return p}IA.exports.create=Fvt;function Fvt(t){t=ia(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",o=e.map(kv.createHash);return{update:function(a,n){return o.forEach(u=>u.update(a,n)),this},digest:function(a){return e.reduce((u,A)=>{let p=o.shift().digest("base64"),h=new U0(`${A}-${p}${r}`,t);if(h.algorithm&&h.digest){let E=h.algorithm;u[E]||(u[E]=[]),u[E].push(h)}return u},new vm)}}}var Tvt=new Set(kv.getHashes()),dBe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>Tvt.has(t));function Rvt(t,e){return dBe.indexOf(t.toLowerCase())>=dBe.indexOf(e.toLowerCase())?t:e}});var VBe=_((lir,WBe)=>{var TDt=uL();function RDt(t){return TDt(t)?void 0:t}WBe.exports=RDt});var JBe=_((cir,KBe)=>{var NDt=jx(),LDt=Q8(),MDt=N8(),ODt=jd(),UDt=gd(),_Dt=VBe(),HDt=P_(),jDt=k8(),qDt=1,GDt=2,YDt=4,WDt=HDt(function(t,e){var r={};if(t==null)return r;var o=!1;e=NDt(e,function(n){return n=ODt(n,t),o||(o=n.length>1),n}),UDt(t,jDt(t),r),o&&(r=LDt(r,qDt|GDt|YDt,_Dt));for(var a=e.length;a--;)MDt(r,e[a]);return r});KBe.exports=WDt});Pt();Ye();Pt();var eve=Be("child_process"),tve=$e(ed());qt();var uC=new Map([]);var o2={};Kt(o2,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>rr,getCli:()=>the,getDynamicLibs:()=>ehe,getPluginConfiguration:()=>fC,openWorkspace:()=>AC,pluginCommands:()=>uC,runExit:()=>sk});qt();var ut=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new it("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ye();Pt();qt();var rr=class extends it{constructor(e,r){let o=K.relative(e,r),a=K.join(e,Mt.fileName);super(`This command can only be run from within a workspace of your project (${o} isn't a workspace of ${a}).`)}};Ye();Pt();nA();Nl();b1();qt();var OAt=$e(zn());Za();var ehe=()=>new Map([["@yarnpkg/cli",o2],["@yarnpkg/core",s2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",tI],["@yarnpkg/shell",T1],["clipanion",pI],["semver",OAt],["typanion",Ko]]);Ye();async function AC(t,e){let{project:r,workspace:o}=await St.find(t,e);if(!o)throw new rr(r.cwd,e);return o}Ye();Pt();nA();Nl();b1();qt();var tPt=$e(zn());Za();var tH={};Kt(tH,{AddCommand:()=>bh,BinCommand:()=>kh,CacheCleanCommand:()=>Qh,ClipanionCommand:()=>Wd,ConfigCommand:()=>Nh,ConfigGetCommand:()=>Fh,ConfigSetCommand:()=>Th,ConfigUnsetCommand:()=>Rh,DedupeCommand:()=>Lh,EntryCommand:()=>dC,ExecCommand:()=>Mh,ExplainCommand:()=>_h,ExplainPeerRequirementsCommand:()=>Oh,HelpCommand:()=>Vd,InfoCommand:()=>Hh,LinkCommand:()=>qh,NodeCommand:()=>Gh,PluginCheckCommand:()=>Yh,PluginImportCommand:()=>Kh,PluginImportSourcesCommand:()=>Jh,PluginListCommand:()=>Wh,PluginRemoveCommand:()=>zh,PluginRuntimeCommand:()=>Xh,RebuildCommand:()=>Zh,RemoveCommand:()=>$h,RunCommand:()=>e0,RunIndexCommand:()=>zd,SetResolutionCommand:()=>t0,SetVersionCommand:()=>Uh,SetVersionSourcesCommand:()=>Vh,UnlinkCommand:()=>r0,UpCommand:()=>Kf,VersionCommand:()=>Kd,WhyCommand:()=>n0,WorkspaceCommand:()=>o0,WorkspacesListCommand:()=>s0,YarnCommand:()=>jh,dedupeUtils:()=>gk,default:()=>Qgt,suggestUtils:()=>zc});var Tde=$e(ed());Ye();Ye();Ye();qt();var j0e=$e(A2());Za();var zc={};Kt(zc,{Modifier:()=>D8,Strategy:()=>fk,Target:()=>f2,WorkspaceModifier:()=>M0e,applyModifier:()=>ipt,extractDescriptorFromPath:()=>P8,extractRangeModifier:()=>O0e,fetchDescriptorFrom:()=>S8,findProjectDescriptors:()=>H0e,getModifier:()=>p2,getSuggestedDescriptors:()=>h2,makeWorkspaceDescriptor:()=>_0e,toWorkspaceModifier:()=>U0e});Ye();Ye();Pt();var v8=$e(zn()),rpt="workspace:",f2=(o=>(o.REGULAR="dependencies",o.DEVELOPMENT="devDependencies",o.PEER="peerDependencies",o))(f2||{}),D8=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="",o))(D8||{}),M0e=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="*",o))(M0e||{}),fk=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(fk||{});function p2(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var npt=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function O0e(t,{project:e}){let r=t.match(npt);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function ipt(t,e){let{protocol:r,source:o,params:a,selector:n}=W.parseRange(t.range);return v8.default.valid(n)&&(n=`${e}${t.range}`),W.makeDescriptor(t,W.makeRange({protocol:r,source:o,params:a,selector:n}))}function U0e(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function _0e(t,e){return W.makeDescriptor(t.anchoredDescriptor,`${rpt}${U0e(e)}`)}async function H0e(t,{project:e,target:r}){let o=new Map,a=n=>{let u=o.get(n.descriptorHash);return u||o.set(n.descriptorHash,u={descriptor:n,locators:[]}),u};for(let n of e.workspaces)if(r==="peerDependencies"){let u=n.manifest.peerDependencies.get(t.identHash);u!==void 0&&a(u).locators.push(n.anchoredLocator)}else{let u=n.manifest.dependencies.get(t.identHash),A=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?A!==void 0?a(A).locators.push(n.anchoredLocator):u!==void 0&&a(u).locators.push(n.anchoredLocator):u!==void 0?a(u).locators.push(n.anchoredLocator):A!==void 0&&a(A).locators.push(n.anchoredLocator)}return o}async function P8(t,{cwd:e,workspace:r}){return await spt(async o=>{K.isAbsolute(t)||(t=K.relative(r.cwd,K.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await S8(W.makeIdent(null,"archive"),t,{project:r.project,cache:o,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let u=new Qi,A=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:o,fetcher:p,report:u,resolver:A},E=A.bindDescriptor(n,r.anchoredLocator,h),I=W.convertDescriptorToLocator(E),v=await p.fetch(I,h),b=await Mt.find(v.prefixPath,{baseFs:v.packageFs});if(!b.name)throw new Error("Target path doesn't have a name");return W.makeDescriptor(b.name,t)})}async function h2(t,{project:e,workspace:r,cache:o,target:a,fixed:n,modifier:u,strategies:A,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let[h,E]=t.range!=="unknown"?n||kr.validRange(t.range)||!t.range.match(/^[a-z0-9._-]+$/i)?[t.range,"latest"]:["unknown",t.range]:["unknown","latest"];if(h!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${W.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let I=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,v=[],b=[],C=async T=>{try{await T()}catch(L){b.push(L)}};for(let T of A){if(v.length>=p)break;switch(T){case"keep":await C(async()=>{I&&v.push({descriptor:I,name:`Keep ${W.prettyDescriptor(e.configuration,I)}`,reason:"(no changes)"})});break;case"reuse":await C(async()=>{for(let{descriptor:L,locators:U}of(await H0e(t,{project:e,target:a})).values()){if(U.length===1&&U[0].locatorHash===r.anchoredLocator.locatorHash&&A.includes("keep"))continue;let J=`(originally used by ${W.prettyLocator(e.configuration,U[0])}`;J+=U.length>1?` and ${U.length-1} other${U.length>2?"s":""})`:")",v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:J})}});break;case"cache":await C(async()=>{for(let L of e.storedDescriptors.values())L.identHash===t.identHash&&v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await C(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let L=e.tryWorkspaceByIdent(t);if(L===null)return;let U=_0e(L,u);v.push({descriptor:U,name:`Attach ${W.prettyDescriptor(e.configuration,U)}`,reason:`(local workspace at ${de.pretty(e.configuration,L.relativeCwd,de.Type.PATH)})`})});break;case"latest":{let L=e.configuration.get("enableNetwork"),U=e.configuration.get("enableOfflineMode");await C(async()=>{if(a==="peerDependencies")v.push({descriptor:W.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!L&&!U)v.push({descriptor:null,name:"Resolve from latest",reason:de.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let J=await S8(t,E,{project:e,cache:o,workspace:r,modifier:u});J&&v.push({descriptor:J,name:`Use ${W.prettyDescriptor(e.configuration,J)}`,reason:`(resolved from ${U?"the cache":"latest"})`})}})}break}}return{suggestions:v.slice(0,p),rejections:b.slice(0,p)}}async function S8(t,e,{project:r,cache:o,workspace:a,preserveModifier:n=!0,modifier:u}){let A=r.configuration.normalizeDependency(W.makeDescriptor(t,e)),p=new Qi,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),I={project:r,fetcher:h,cache:o,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},v={...I,resolver:E,fetchOptions:I},b=E.bindDescriptor(A,a.anchoredLocator,v),C=await E.getCandidates(b,{},v);if(C.length===0)return null;let T=C[0],{protocol:L,source:U,params:J,selector:te}=W.parseRange(W.convertToManifestRange(T.reference));if(L===r.configuration.get("defaultProtocol")&&(L=null),v8.default.valid(te)){let le=te;if(typeof u<"u")te=u+te;else if(n!==!1){let ye=typeof n=="string"?n:A.range;te=O0e(ye,{project:r})+te}let pe=W.makeDescriptor(T,W.makeRange({protocol:L,source:U,params:J,selector:te}));(await E.getCandidates(r.configuration.normalizeDependency(pe),{},v)).length!==1&&(te=le)}return W.makeDescriptor(T,W.makeRange({protocol:L,source:U,params:J,selector:te}))}async function spt(t){return await oe.mktempPromise(async e=>{let r=Ve.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Lr(e,{configuration:r,check:!1,immutable:!1}))})}var bh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=ge.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=ge.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=ge.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=ge.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=ge.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=ge.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=A||r.get("preferReuse"),h=p2(this,o),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(U=>typeof U<"u"),I=A?1/0:1,v=await Promise.all(this.packages.map(async U=>{let J=U.match(/^\.{0,2}\//)?await P8(U,{cwd:this.context.cwd,workspace:a}):W.tryParseDescriptor(U),te=U.match(/^(https?:|git@github)/);if(te)throw new it(`It seems you are trying to add a package using a ${de.pretty(r,`${te[0]}...`,de.Type.RANGE)} url; we now require package names to be explicitly specified. -Try running the command again with the package name prefixed: ${de.pretty(r,"yarn add",de.Type.CODE)} ${de.pretty(r,W.makeDescriptor(W.makeIdent(null,"my-package"),`${te[0]}...`),de.Type.DESCRIPTOR)}`);if(!J)throw new it(`The ${de.pretty(r,U,de.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let le=opt(a,J,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(le.map(async Ae=>{let ye=await h2(J,{project:o,workspace:a,cache:n,fixed:u,target:Ae,modifier:h,strategies:E,maxResults:I});return{request:J,suggestedDescriptors:ye,target:Ae}}))})).then(U=>U.flat()),b=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async U=>{for(let{request:J,suggestedDescriptors:{suggestions:te,rejections:le}}of v)if(te.filter(Ae=>Ae.descriptor!==null).length===0){let[Ae]=le;if(typeof Ae>"u")throw new Error("Assertion failed: Expected an error to have been set");o.configuration.get("enableNetwork")?U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range`):U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),U.reportSeparator(),U.reportExceptionOnce(Ae)}});if(b.hasErrors())return b.exitCode();let C=!1,T=[],L=[];for(let{suggestedDescriptors:{suggestions:U},target:J}of v){let te,le=U.filter(ae=>ae.descriptor!==null),pe=le[0].descriptor,Ae=le.every(ae=>W.areDescriptorsEqual(ae.descriptor,pe));le.length===1||Ae?te=pe:(C=!0,{answer:te}=await(0,j0e.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:U.map(({descriptor:ae,name:we,reason:Pe})=>ae?{name:we,hint:Pe,descriptor:ae}:{name:we,hint:Pe,disabled:!0}),onCancel:()=>process.exit(130),result(ae){return this.find(ae,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let ye=a.manifest[J].get(te.identHash);(typeof ye>"u"||ye.descriptorHash!==te.descriptorHash)&&(a.manifest[J].set(te.identHash,te),this.optional&&(J==="dependencies"?a.manifest.ensureDependencyMeta({...te,range:"unknown"}).optional=!0:J==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...te,range:"unknown"}).optional=!0)),typeof ye>"u"?T.push([a,J,te,E]):L.push([a,J,ye,te]))}return await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyAddition,T),await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyReplacement,L),C&&this.context.stdout.write(` -`),await o.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};bh.paths=[["add"]],bh.usage=nt.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"]]});function opt(t,e,{dev:r,peer:o,preferDev:a,optional:n}){let u=t.manifest["dependencies"].has(e.identHash),A=t.manifest["devDependencies"].has(e.identHash),p=t.manifest["peerDependencies"].has(e.identHash);if((r||o)&&u)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(n&&A)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(n&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||a)&&n)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return o&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:A?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ye();Ye();qt();var kh=class extends ut{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=ge.String({required:!1})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);if(await o.restoreInstallState(),this.name){let A=(await un.getPackageAccessibleBinaries(a,{project:o})).get(this.name);if(!A)throw new it(`Couldn't find a binary named "${this.name}" for package "${W.prettyLocator(r,a)}"`);let[,p]=A;return this.context.stdout.write(`${p} -`),0}return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async u=>{let A=await un.getPackageAccessibleBinaries(a,{project:o}),h=Array.from(A.keys()).reduce((E,I)=>Math.max(E,I.length),0);for(let[E,[I,v]]of A)u.reportJson({name:E,source:W.stringifyIdent(I),path:v});if(this.verbose)for(let[E,[I]]of A)u.reportInfo(null,`${E.padEnd(h," ")} ${W.prettyLocator(r,I)}`);else for(let E of A.keys())u.reportInfo(null,E)})).exitCode()}};kh.paths=[["bin"]],kh.usage=nt.Usage({description:"get the path to a binary script",details:` + Found: ${A}`);v.code="EBADSIZE",v.found=A,v.expected=t.size,v.sri=e,p.emit("error",v)}else if(t.integrity&&!I){let v=new Error(`${e} integrity checksum failed when using ${o}: wanted ${a} but got ${E}. (${A} bytes)`);v.code="EINTEGRITY",v.found=E,v.expected=a,v.algorithm=o,v.sri=e,p.emit("error",v)}else p.emit("size",A),p.emit("integrity",E),I&&p.emit("verified",I)});return p}BA.exports.create=kvt;function kvt(t){t=ia(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",o=e.map(kv.createHash);return{update:function(a,n){return o.forEach(u=>u.update(a,n)),this},digest:function(a){return e.reduce((u,A)=>{let p=o.shift().digest("base64"),h=new _0(`${A}-${p}${r}`,t);if(h.algorithm&&h.digest){let E=h.algorithm;u[E]||(u[E]=[]),u[E].push(h)}return u},new Dm)}}}var Qvt=new Set(kv.getHashes()),fBe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>Qvt.has(t));function Fvt(t,e){return fBe.indexOf(t.toLowerCase())>=fBe.indexOf(e.toLowerCase())?t:e}});var qBe=_((lir,HBe)=>{var FDt=lL();function RDt(t){return FDt(t)?void 0:t}HBe.exports=RDt});var GBe=_((cir,jBe)=>{var TDt=Hb(),NDt=x8(),LDt=R8(),ODt=jd(),MDt=dd(),UDt=qBe(),_Dt=v_(),HDt=b8(),qDt=1,jDt=2,GDt=4,YDt=_Dt(function(t,e){var r={};if(t==null)return r;var o=!1;e=TDt(e,function(n){return n=ODt(n,t),o||(o=n.length>1),n}),MDt(t,HDt(t),r),o&&(r=NDt(r,qDt|jDt|GDt,UDt));for(var a=e.length;a--;)LDt(r,e[a]);return r});jBe.exports=YDt});St();Ye();St();var JBe=ve("child_process"),zBe=$e(td());qt();var AC=new Map([]);var a2={};Vt(a2,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>rr,getCli:()=>$pe,getDynamicLibs:()=>Zpe,getPluginConfiguration:()=>pC,openWorkspace:()=>fC,pluginCommands:()=>AC,runExit:()=>nk});qt();var ut=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new it("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ye();St();qt();var rr=class extends it{constructor(e,r){let o=V.relative(e,r),a=V.join(e,Ot.fileName);super(`This command can only be run from within a workspace of your project (${o} isn't a workspace of ${a}).`)}};Ye();St();nA();Nl();k1();qt();var RAt=$e(zn());Za();var Zpe=()=>new Map([["@yarnpkg/cli",a2],["@yarnpkg/core",o2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",rI],["@yarnpkg/shell",T1],["clipanion",hI],["semver",RAt],["typanion",Vo]]);Ye();async function fC(t,e){let{project:r,workspace:o}=await Pt.find(t,e);if(!o)throw new rr(r.cwd,e);return o}Ye();St();nA();Nl();k1();qt();var eSt=$e(zn());Za();var $8={};Vt($8,{AddCommand:()=>kh,BinCommand:()=>Qh,CacheCleanCommand:()=>Fh,ClipanionCommand:()=>Kd,ConfigCommand:()=>Lh,ConfigGetCommand:()=>Rh,ConfigSetCommand:()=>Th,ConfigUnsetCommand:()=>Nh,DedupeCommand:()=>Oh,EntryCommand:()=>mC,ExecCommand:()=>Mh,ExplainCommand:()=>Hh,ExplainPeerRequirementsCommand:()=>Uh,HelpCommand:()=>Vd,InfoCommand:()=>qh,LinkCommand:()=>Gh,NodeCommand:()=>Yh,PluginCheckCommand:()=>Wh,PluginImportCommand:()=>Jh,PluginImportSourcesCommand:()=>zh,PluginListCommand:()=>Kh,PluginRemoveCommand:()=>Xh,PluginRuntimeCommand:()=>Zh,RebuildCommand:()=>$h,RemoveCommand:()=>e0,RunCommand:()=>t0,RunIndexCommand:()=>Xd,SetResolutionCommand:()=>r0,SetVersionCommand:()=>_h,SetVersionSourcesCommand:()=>Vh,UnlinkCommand:()=>n0,UpCommand:()=>Jf,VersionCommand:()=>Jd,WhyCommand:()=>i0,WorkspaceCommand:()=>a0,WorkspacesListCommand:()=>o0,YarnCommand:()=>jh,dedupeUtils:()=>pk,default:()=>Sgt,suggestUtils:()=>zc});var kde=$e(td());Ye();Ye();Ye();qt();var _0e=$e(f2());Za();var zc={};Vt(zc,{Modifier:()=>B8,Strategy:()=>uk,Target:()=>p2,WorkspaceModifier:()=>N0e,applyModifier:()=>$ft,extractDescriptorFromPath:()=>v8,extractRangeModifier:()=>L0e,fetchDescriptorFrom:()=>D8,findProjectDescriptors:()=>U0e,getModifier:()=>h2,getSuggestedDescriptors:()=>g2,makeWorkspaceDescriptor:()=>M0e,toWorkspaceModifier:()=>O0e});Ye();Ye();St();var I8=$e(zn()),Xft="workspace:",p2=(o=>(o.REGULAR="dependencies",o.DEVELOPMENT="devDependencies",o.PEER="peerDependencies",o))(p2||{}),B8=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="",o))(B8||{}),N0e=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="*",o))(N0e||{}),uk=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(uk||{});function h2(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var Zft=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function L0e(t,{project:e}){let r=t.match(Zft);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function $ft(t,e){let{protocol:r,source:o,params:a,selector:n}=W.parseRange(t.range);return I8.default.valid(n)&&(n=`${e}${t.range}`),W.makeDescriptor(t,W.makeRange({protocol:r,source:o,params:a,selector:n}))}function O0e(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function M0e(t,e){return W.makeDescriptor(t.anchoredDescriptor,`${Xft}${O0e(e)}`)}async function U0e(t,{project:e,target:r}){let o=new Map,a=n=>{let u=o.get(n.descriptorHash);return u||o.set(n.descriptorHash,u={descriptor:n,locators:[]}),u};for(let n of e.workspaces)if(r==="peerDependencies"){let u=n.manifest.peerDependencies.get(t.identHash);u!==void 0&&a(u).locators.push(n.anchoredLocator)}else{let u=n.manifest.dependencies.get(t.identHash),A=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?A!==void 0?a(A).locators.push(n.anchoredLocator):u!==void 0&&a(u).locators.push(n.anchoredLocator):u!==void 0?a(u).locators.push(n.anchoredLocator):A!==void 0&&a(A).locators.push(n.anchoredLocator)}return o}async function v8(t,{cwd:e,workspace:r}){return await ept(async o=>{V.isAbsolute(t)||(t=V.relative(r.cwd,V.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await D8(W.makeIdent(null,"archive"),t,{project:r.project,cache:o,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let u=new Qi,A=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:o,fetcher:p,report:u,resolver:A},E=A.bindDescriptor(n,r.anchoredLocator,h),I=W.convertDescriptorToLocator(E),v=await p.fetch(I,h),x=await Ot.find(v.prefixPath,{baseFs:v.packageFs});if(!x.name)throw new Error("Target path doesn't have a name");return W.makeDescriptor(x.name,t)})}async function g2(t,{project:e,workspace:r,cache:o,target:a,fixed:n,modifier:u,strategies:A,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let[h,E]=t.range!=="unknown"?n||kr.validRange(t.range)||!t.range.match(/^[a-z0-9._-]+$/i)?[t.range,"latest"]:["unknown",t.range]:["unknown","latest"];if(h!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${W.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let I=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,v=[],x=[],C=async R=>{try{await R()}catch(L){x.push(L)}};for(let R of A){if(v.length>=p)break;switch(R){case"keep":await C(async()=>{I&&v.push({descriptor:I,name:`Keep ${W.prettyDescriptor(e.configuration,I)}`,reason:"(no changes)"})});break;case"reuse":await C(async()=>{for(let{descriptor:L,locators:U}of(await U0e(t,{project:e,target:a})).values()){if(U.length===1&&U[0].locatorHash===r.anchoredLocator.locatorHash&&A.includes("keep"))continue;let J=`(originally used by ${W.prettyLocator(e.configuration,U[0])}`;J+=U.length>1?` and ${U.length-1} other${U.length>2?"s":""})`:")",v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:J})}});break;case"cache":await C(async()=>{for(let L of e.storedDescriptors.values())L.identHash===t.identHash&&v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await C(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let L=e.tryWorkspaceByIdent(t);if(L===null)return;let U=M0e(L,u);v.push({descriptor:U,name:`Attach ${W.prettyDescriptor(e.configuration,U)}`,reason:`(local workspace at ${de.pretty(e.configuration,L.relativeCwd,de.Type.PATH)})`})});break;case"latest":{let L=e.configuration.get("enableNetwork"),U=e.configuration.get("enableOfflineMode");await C(async()=>{if(a==="peerDependencies")v.push({descriptor:W.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!L&&!U)v.push({descriptor:null,name:"Resolve from latest",reason:de.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let J=await D8(t,E,{project:e,cache:o,workspace:r,modifier:u});J&&v.push({descriptor:J,name:`Use ${W.prettyDescriptor(e.configuration,J)}`,reason:`(resolved from ${U?"the cache":"latest"})`})}})}break}}return{suggestions:v.slice(0,p),rejections:x.slice(0,p)}}async function D8(t,e,{project:r,cache:o,workspace:a,preserveModifier:n=!0,modifier:u}){let A=r.configuration.normalizeDependency(W.makeDescriptor(t,e)),p=new Qi,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),I={project:r,fetcher:h,cache:o,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},v={...I,resolver:E,fetchOptions:I},x=E.bindDescriptor(A,a.anchoredLocator,v),C=await E.getCandidates(x,{},v);if(C.length===0)return null;let R=C[0],{protocol:L,source:U,params:J,selector:te}=W.parseRange(W.convertToManifestRange(R.reference));if(L===r.configuration.get("defaultProtocol")&&(L=null),I8.default.valid(te)){let ae=te;if(typeof u<"u")te=u+te;else if(n!==!1){let me=typeof n=="string"?n:A.range;te=L0e(me,{project:r})+te}let fe=W.makeDescriptor(R,W.makeRange({protocol:L,source:U,params:J,selector:te}));(await E.getCandidates(r.configuration.normalizeDependency(fe),{},v)).length!==1&&(te=ae)}return W.makeDescriptor(R,W.makeRange({protocol:L,source:U,params:J,selector:te}))}async function ept(t){return await oe.mktempPromise(async e=>{let r=Ke.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Lr(e,{configuration:r,check:!1,immutable:!1}))})}var kh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=ge.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=ge.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=ge.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=ge.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=ge.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=ge.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=A||r.get("preferReuse"),h=h2(this,o),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(U=>typeof U<"u"),I=A?1/0:1,v=await Promise.all(this.packages.map(async U=>{let J=U.match(/^\.{0,2}\//)?await v8(U,{cwd:this.context.cwd,workspace:a}):W.tryParseDescriptor(U),te=U.match(/^(https?:|git@github)/);if(te)throw new it(`It seems you are trying to add a package using a ${de.pretty(r,`${te[0]}...`,de.Type.RANGE)} url; we now require package names to be explicitly specified. +Try running the command again with the package name prefixed: ${de.pretty(r,"yarn add",de.Type.CODE)} ${de.pretty(r,W.makeDescriptor(W.makeIdent(null,"my-package"),`${te[0]}...`),de.Type.DESCRIPTOR)}`);if(!J)throw new it(`The ${de.pretty(r,U,de.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let ae=tpt(a,J,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(ae.map(async ce=>{let me=await g2(J,{project:o,workspace:a,cache:n,fixed:u,target:ce,modifier:h,strategies:E,maxResults:I});return{request:J,suggestedDescriptors:me,target:ce}}))})).then(U=>U.flat()),x=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async U=>{for(let{request:J,suggestedDescriptors:{suggestions:te,rejections:ae}}of v)if(te.filter(ce=>ce.descriptor!==null).length===0){let[ce]=ae;if(typeof ce>"u")throw new Error("Assertion failed: Expected an error to have been set");o.configuration.get("enableNetwork")?U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range`):U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),U.reportSeparator(),U.reportExceptionOnce(ce)}});if(x.hasErrors())return x.exitCode();let C=!1,R=[],L=[];for(let{suggestedDescriptors:{suggestions:U},target:J}of v){let te,ae=U.filter(he=>he.descriptor!==null),fe=ae[0].descriptor,ce=ae.every(he=>W.areDescriptorsEqual(he.descriptor,fe));ae.length===1||ce?te=fe:(C=!0,{answer:te}=await(0,_0e.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:U.map(({descriptor:he,name:Be,reason:we})=>he?{name:Be,hint:we,descriptor:he}:{name:Be,hint:we,disabled:!0}),onCancel:()=>process.exit(130),result(he){return this.find(he,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let me=a.manifest[J].get(te.identHash);(typeof me>"u"||me.descriptorHash!==te.descriptorHash)&&(a.manifest[J].set(te.identHash,te),this.optional&&(J==="dependencies"?a.manifest.ensureDependencyMeta({...te,range:"unknown"}).optional=!0:J==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...te,range:"unknown"}).optional=!0)),typeof me>"u"?R.push([a,J,te,E]):L.push([a,J,me,te]))}return await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyAddition,R),await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyReplacement,L),C&&this.context.stdout.write(` +`),await o.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};kh.paths=[["add"]],kh.usage=nt.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"]]});function tpt(t,e,{dev:r,peer:o,preferDev:a,optional:n}){let u=t.manifest["dependencies"].has(e.identHash),A=t.manifest["devDependencies"].has(e.identHash),p=t.manifest["peerDependencies"].has(e.identHash);if((r||o)&&u)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(n&&A)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(n&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||a)&&n)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return o&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:A?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ye();Ye();qt();var Qh=class extends ut{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=ge.String({required:!1})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await Pt.find(r,this.context.cwd);if(await o.restoreInstallState(),this.name){let A=(await un.getPackageAccessibleBinaries(a,{project:o})).get(this.name);if(!A)throw new it(`Couldn't find a binary named "${this.name}" for package "${W.prettyLocator(r,a)}"`);let[,p]=A;return this.context.stdout.write(`${p} +`),0}return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async u=>{let A=await un.getPackageAccessibleBinaries(a,{project:o}),h=Array.from(A.keys()).reduce((E,I)=>Math.max(E,I.length),0);for(let[E,[I,v]]of A)u.reportJson({name:E,source:W.stringifyIdent(I),path:v});if(this.verbose)for(let[E,[I]]of A)u.reportInfo(null,`${E.padEnd(h," ")} ${W.prettyLocator(r,I)}`);else for(let E of A.keys())u.reportInfo(null,E)})).exitCode()}};Qh.paths=[["bin"]],Qh.usage=nt.Usage({description:"get the path to a binary script",details:` When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \`-v,--verbose\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary. When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive. - `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]});Ye();Pt();qt();var Qh=class extends ut{constructor(){super(...arguments);this.mirror=ge.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=ge.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await Lr.find(r);return(await Nt.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&o.mirrorCwd!==null,u=!this.mirror;n&&(await oe.removePromise(o.mirrorCwd),await r.triggerHook(A=>A.cleanGlobalArtifacts,r)),u&&await oe.removePromise(o.cwd)})).exitCode()}};Qh.paths=[["cache","clean"],["cache","clear"]],Qh.usage=nt.Usage({description:"remove the shared cache files",details:` + `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]});Ye();St();qt();var Fh=class extends ut{constructor(){super(...arguments);this.mirror=ge.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=ge.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await Lr.find(r);return(await Nt.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&o.mirrorCwd!==null,u=!this.mirror;n&&(await oe.removePromise(o.mirrorCwd),await r.triggerHook(A=>A.cleanGlobalArtifacts,r)),u&&await oe.removePromise(o.cwd)})).exitCode()}};Fh.paths=[["cache","clean"],["cache","clear"]],Fh.usage=nt.Usage({description:"remove the shared cache files",details:` This command will remove all the files from the cache. - `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]});Ye();qt();var G0e=$e(g2()),x8=Be("util"),Fh=class extends ut{constructor(){super(...arguments);this.why=ge.Boolean("--why",!1,{description:"Print the explanation for why a setting has its value"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=ge.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(o)>"u")throw new it(`Couldn't find a configuration settings named "${o}"`);let u=r.getSpecial(o,{hideSecrets:!this.unsafe,getNativePaths:!0}),A=je.convertMapsToIndexableObjects(u),p=a?(0,G0e.default)(A,a):A,h=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async E=>{E.reportJson(p)});if(!this.json){if(typeof p=="string")return this.context.stdout.write(`${p} -`),h.exitCode();x8.inspect.styles.name="cyan",this.context.stdout.write(`${(0,x8.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} -`)}return h.exitCode()}};Fh.paths=[["config","get"]],Fh.usage=nt.Usage({description:"read a configuration settings",details:` + `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]});Ye();qt();var q0e=$e(d2()),S8=ve("util"),Rh=class extends ut{constructor(){super(...arguments);this.why=ge.Boolean("--why",!1,{description:"Print the explanation for why a setting has its value"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=ge.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(o)>"u")throw new it(`Couldn't find a configuration settings named "${o}"`);let u=r.getSpecial(o,{hideSecrets:!this.unsafe,getNativePaths:!0}),A=_e.convertMapsToIndexableObjects(u),p=a?(0,q0e.default)(A,a):A,h=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async E=>{E.reportJson(p)});if(!this.json){if(typeof p=="string")return this.context.stdout.write(`${p} +`),h.exitCode();S8.inspect.styles.name="cyan",this.context.stdout.write(`${(0,S8.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} +`)}return h.exitCode()}};Rh.paths=[["config","get"]],Rh.usage=nt.Usage({description:"read a configuration settings",details:` This command will print a configuration setting. Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \`--no-redacted\` to get the untransformed value. - `,examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration",`yarn config get 'npmScopes["my-company"].npmRegistryServer'`],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]});Ye();qt();var Rge=$e(F8()),Nge=$e(g2()),Lge=$e(T8()),R8=Be("util"),Th=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String();this.value=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new it("This setting only affects the file it's in, and thus cannot be set from the CLI");let A=this.json?JSON.parse(this.value):this.value;await(this.home?C=>Ve.updateHomeConfiguration(C):C=>Ve.updateConfiguration(o(),C))(C=>{if(n){let T=(0,Rge.default)(C);return(0,Lge.default)(T,this.name,A),T}else return{...C,[a]:A}});let E=(await Ve.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),I=je.convertMapsToIndexableObjects(E),v=n?(0,Nge.default)(I,n):I;return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async C=>{R8.inspect.styles.name="cyan",C.reportInfo(0,`Successfully set ${this.name} to ${(0,R8.inspect)(v,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Th.paths=[["config","set"]],Th.usage=nt.Usage({description:"change a configuration settings",details:` + `,examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration",`yarn config get 'npmScopes["my-company"].npmRegistryServer'`],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]});Ye();qt();var Fge=$e(k8()),Rge=$e(d2()),Tge=$e(Q8()),F8=ve("util"),Th=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String();this.value=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new it("This setting only affects the file it's in, and thus cannot be set from the CLI");let A=this.json?JSON.parse(this.value):this.value;await(this.home?C=>Ke.updateHomeConfiguration(C):C=>Ke.updateConfiguration(o(),C))(C=>{if(n){let R=(0,Fge.default)(C);return(0,Tge.default)(R,this.name,A),R}else return{...C,[a]:A}});let E=(await Ke.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),I=_e.convertMapsToIndexableObjects(E),v=n?(0,Rge.default)(I,n):I;return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async C=>{F8.inspect.styles.name="cyan",C.reportInfo(0,`Successfully set ${this.name} to ${(0,F8.inspect)(v,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Th.paths=[["config","set"]],Th.usage=nt.Usage({description:"change a configuration settings",details:` This command will set a configuration setting. When used without the \`--json\` flag, it can only set a simple configuration setting (a string, a number, or a boolean). When used with the \`--json\` flag, it can set both simple and complex configuration settings, including Arrays and Objects. - `,examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",`yarn config set unsafeHttpWhitelist --json '["*.example.com", "example.com"]'`],["Set a complex configuration setting (an Object) using the `--json` flag",`yarn config set packageExtensions --json '{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }'`],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",`yarn config set 'npmRegistries["//npm.example.com"].npmAuthToken' "ffffffff-ffff-ffff-ffff-ffffffffffff"`]]});Ye();qt();var Vge=$e(F8()),Kge=$e(_ge()),Jge=$e(L8()),Rh=class extends ut{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);let A=this.home?h=>Ve.updateHomeConfiguration(h):h=>Ve.updateConfiguration(o(),h);return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await A(I=>{if(!(0,Kge.default)(I,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,I;let v=n?(0,Vge.default)(I):{...I};return(0,Jge.default)(v,this.name),v}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Rh.paths=[["config","unset"]],Rh.usage=nt.Usage({description:"unset a configuration setting",details:` + `,examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",`yarn config set unsafeHttpWhitelist --json '["*.example.com", "example.com"]'`],["Set a complex configuration setting (an Object) using the `--json` flag",`yarn config set packageExtensions --json '{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }'`],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",`yarn config set 'npmRegistries["//npm.example.com"].npmAuthToken' "ffffffff-ffff-ffff-ffff-ffffffffffff"`]]});Ye();qt();var Yge=$e(k8()),Wge=$e(Mge()),Kge=$e(T8()),Nh=class extends ut{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);let A=this.home?h=>Ke.updateHomeConfiguration(h):h=>Ke.updateConfiguration(o(),h);return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await A(I=>{if(!(0,Wge.default)(I,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,I;let v=n?(0,Yge.default)(I):{...I};return(0,Kge.default)(v,this.name),v}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Nh.paths=[["config","unset"]],Nh.usage=nt.Usage({description:"unset a configuration setting",details:` This command will unset a configuration setting. - `,examples:[["Unset a simple configuration setting","yarn config unset initScope"],["Unset a complex configuration setting","yarn config unset packageExtensions"],["Unset a nested configuration setting","yarn config unset npmScopes.company.npmRegistryServer"]]});Ye();Pt();qt();var hk=Be("util"),Nh=class extends ut{constructor(){super(...arguments);this.noDefaults=ge.Boolean("--no-defaults",!1,{description:"Omit the default values from the display"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.verbose=ge.Boolean("-v,--verbose",{hidden:!0});this.why=ge.Boolean("--why",{hidden:!0});this.names=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins,{strict:!1}),o=await NE({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(o!==null)return o;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async A=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)A.reportError(34,`Invalid configuration key "${p}" in ${h}`);A.reportSeparator()}if(this.json)for(let p of a){let h=r.settings.get(p);typeof h>"u"&&A.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),I=r.sources.get(p)??"",v=I&&I[0]!=="<"?ue.fromPortablePath(I):I;A.reportJson({key:p,effective:E,source:v,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let I of a){if(this.noDefaults&&!r.sources.has(I))continue;let v=r.settings.get(I),b=r.sources.get(I)??"",C=r.getSpecial(I,{hideSecrets:!0,getNativePaths:!0}),T={Description:{label:"Description",value:de.tuple(de.Type.MARKDOWN,{text:v.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:de.tuple(b[0]==="<"?de.Type.CODE:de.Type.PATH,b)}};h[I]={value:de.tuple(de.Type.CODE,I),children:T};let L=(U,J)=>{for(let[te,le]of J)if(le instanceof Map){let pe={};U[te]={children:pe},L(pe,le)}else U[te]={label:te,value:de.tuple(de.Type.NO_HINT,(0,hk.inspect)(le,p))}};C instanceof Map?L(T,C):T.Value={label:"Value",value:de.tuple(de.Type.NO_HINT,(0,hk.inspect)(C,p))}}a.length!==1&&(n=void 0),$s.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let A=a[0],p=(0,hk.inspect)(r.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` + `,examples:[["Unset a simple configuration setting","yarn config unset initScope"],["Unset a complex configuration setting","yarn config unset packageExtensions"],["Unset a nested configuration setting","yarn config unset npmScopes.company.npmRegistryServer"]]});Ye();St();qt();var fk=ve("util"),Lh=class extends ut{constructor(){super(...arguments);this.noDefaults=ge.Boolean("--no-defaults",!1,{description:"Omit the default values from the display"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.verbose=ge.Boolean("-v,--verbose",{hidden:!0});this.why=ge.Boolean("--why",{hidden:!0});this.names=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins,{strict:!1}),o=await LE({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(o!==null)return o;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async A=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)A.reportError(34,`Invalid configuration key "${p}" in ${h}`);A.reportSeparator()}if(this.json)for(let p of a){let h=r.settings.get(p);typeof h>"u"&&A.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),I=r.sources.get(p)??"",v=I&&I[0]!=="<"?ue.fromPortablePath(I):I;A.reportJson({key:p,effective:E,source:v,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let I of a){if(this.noDefaults&&!r.sources.has(I))continue;let v=r.settings.get(I),x=r.sources.get(I)??"",C=r.getSpecial(I,{hideSecrets:!0,getNativePaths:!0}),R={Description:{label:"Description",value:de.tuple(de.Type.MARKDOWN,{text:v.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:de.tuple(x[0]==="<"?de.Type.CODE:de.Type.PATH,x)}};h[I]={value:de.tuple(de.Type.CODE,I),children:R};let L=(U,J)=>{for(let[te,ae]of J)if(ae instanceof Map){let fe={};U[te]={children:fe},L(fe,ae)}else U[te]={label:te,value:de.tuple(de.Type.NO_HINT,(0,fk.inspect)(ae,p))}};C instanceof Map?L(R,C):R.Value={label:"Value",value:de.tuple(de.Type.NO_HINT,(0,fk.inspect)(C,p))}}a.length!==1&&(n=void 0),$s.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let A=a[0],p=(0,fk.inspect)(r.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` `),this.context.stdout.write(`${p} -`)}return u.exitCode()}};Nh.paths=[["config"]],Nh.usage=nt.Usage({description:"display the current configuration",details:` +`)}return u.exitCode()}};Lh.paths=[["config"]],Lh.usage=nt.Usage({description:"display the current configuration",details:` This command prints the current active configuration settings. - `,examples:[["Print the active configuration settings","$0 config"]]});Ye();qt();Za();var gk={};Kt(gk,{Strategy:()=>d2,acceptedStrategies:()=>j0t,dedupe:()=>M8});Ye();Ye();var zge=$e(Zo()),d2=(e=>(e.HIGHEST="highest",e))(d2||{}),j0t=new Set(Object.values(d2)),q0t={highest:async(t,e,{resolver:r,fetcher:o,resolveOptions:a,fetchOptions:n})=>{let u=new Map;for(let[p,h]of t.storedResolutions){let E=t.storedDescriptors.get(p);if(typeof E>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);je.getSetWithDefault(u,E.identHash).add(h)}let A=new Map(je.mapAndFilter(t.storedDescriptors.values(),p=>W.isVirtualDescriptor(p)?je.mapAndFilter.skip:[p.descriptorHash,je.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=A.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let E=t.storedResolutions.get(p.descriptorHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let I=t.originalPackages.get(E);if(typeof I>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let v=r.getResolutionDependencies(p,a),b=Object.fromEntries(await je.allSettledSafe(Object.entries(v).map(async([te,le])=>{let pe=A.get(le.descriptorHash);if(typeof pe>"u")throw new Error(`Assertion failed: The descriptor (${le.descriptorHash}) should have been registered`);let Ae=await pe.promise;if(!Ae)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,Ae.updatedPackage]})));if(e.length&&!zge.default.isMatch(W.stringifyIdent(p),e)||!r.shouldPersistResolution(I,a))return I;let C=u.get(p.identHash);if(typeof C>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(C.size===1)return I;let T=[...C].map(te=>{let le=t.originalPackages.get(te);if(typeof le>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return le}),L=await r.getSatisfying(p,b,T,a),U=L.locators?.[0];if(typeof U>"u"||!L.sorted)return I;let J=t.originalPackages.get(U.locatorHash);if(typeof J>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return J}).then(async v=>{let b=await t.preparePackage(v,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:I,updatedPackage:v,resolvedPackage:b})}).catch(v=>{h.reject(v)})}return[...A.values()].map(p=>p.promise)}};async function M8(t,{strategy:e,patterns:r,cache:o,report:a}){let{configuration:n}=t,u=new Qi,A=n.makeResolver(),p=n.makeFetcher(),h={cache:o,checksums:t.storedChecksums,fetcher:p,project:t,report:u,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:A,report:u,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let I=q0t[e],v=await I(t,r,{resolver:A,resolveOptions:E,fetcher:p,fetchOptions:h}),b=Xs.progressViaCounter(v.length);await a.reportProgress(b);let C=0;await Promise.all(v.map(U=>U.then(J=>{if(J===null||J.currentPackage.locatorHash===J.updatedPackage.locatorHash)return;C++;let{descriptor:te,currentPackage:le,updatedPackage:pe}=J;a.reportInfo(0,`${W.prettyDescriptor(n,te)} can be deduped from ${W.prettyLocator(n,le)} to ${W.prettyLocator(n,pe)}`),a.reportJson({descriptor:W.stringifyDescriptor(te),currentResolution:W.stringifyLocator(le),updatedResolution:W.stringifyLocator(pe)}),t.storedResolutions.set(te.descriptorHash,pe.locatorHash)}).finally(()=>b.tick())));let T;switch(C){case 0:T="No packages";break;case 1:T="One package";break;default:T=`${C} packages`}let L=de.pretty(n,e,de.Type.CODE);return a.reportInfo(0,`${T} can be deduped using the ${L} strategy`),C})}var Lh=class extends ut{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:Vs(d2)});this.check=ge.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let n=0,u=await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async A=>{n=await M8(o,{strategy:this.strategy,patterns:this.patterns,cache:a,report:A})});return u.hasErrors()?u.exitCode():this.check?n?1:0:await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Lh.paths=[["dedupe"]],Lh.usage=nt.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]});Ye();qt();var Wd=class extends ut{async execute(){let{plugins:e}=await Ve.find(this.context.cwd,this.context.plugins),r=[];for(let u of e){let{commands:A}=u[1];if(A){let h=as.from(A).definitions();r.push([u[0],h])}}let o=this.cli.definitions(),a=(u,A)=>u.split(" ").slice(1).join()===A.split(" ").slice(1).join(),n=Xge()["@yarnpkg/builder"].bundles.standard;for(let u of r){let A=u[1];for(let p of A)o.find(h=>a(h.path,p.path)).plugin={name:u[0],isDefault:n.includes(u[0])}}this.context.stdout.write(`${JSON.stringify(o,null,2)} -`)}};Wd.paths=[["--clipanion=definitions"]];var Vd=class extends ut{async execute(){this.context.stdout.write(this.cli.usage(null))}};Vd.paths=[["help"],["--help"],["-h"]];Ye();Pt();qt();var dC=class extends ut{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!W.tryParseIdent(this.leadingArgument)){let r=K.resolve(this.context.cwd,ue.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ye();var Kd=class extends ut{async execute(){this.context.stdout.write(`${tn||""} -`)}};Kd.paths=[["-v"],["--version"]];Ye();Ye();qt();var Mh=class extends ut{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);return await o.restoreInstallState(),await un.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:o})}};Mh.paths=[["exec"]],Mh.usage=nt.Usage({description:"execute a shell script",details:` + `,examples:[["Print the active configuration settings","$0 config"]]});Ye();qt();Za();var pk={};Vt(pk,{Strategy:()=>m2,acceptedStrategies:()=>O0t,dedupe:()=>N8});Ye();Ye();var Vge=$e(Zo()),m2=(e=>(e.HIGHEST="highest",e))(m2||{}),O0t=new Set(Object.values(m2)),M0t={highest:async(t,e,{resolver:r,fetcher:o,resolveOptions:a,fetchOptions:n})=>{let u=new Map;for(let[p,h]of t.storedResolutions){let E=t.storedDescriptors.get(p);if(typeof E>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);_e.getSetWithDefault(u,E.identHash).add(h)}let A=new Map(_e.mapAndFilter(t.storedDescriptors.values(),p=>W.isVirtualDescriptor(p)?_e.mapAndFilter.skip:[p.descriptorHash,_e.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=A.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let E=t.storedResolutions.get(p.descriptorHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let I=t.originalPackages.get(E);if(typeof I>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let v=r.getResolutionDependencies(p,a),x=Object.fromEntries(await _e.allSettledSafe(Object.entries(v).map(async([te,ae])=>{let fe=A.get(ae.descriptorHash);if(typeof fe>"u")throw new Error(`Assertion failed: The descriptor (${ae.descriptorHash}) should have been registered`);let ce=await fe.promise;if(!ce)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,ce.updatedPackage]})));if(e.length&&!Vge.default.isMatch(W.stringifyIdent(p),e)||!r.shouldPersistResolution(I,a))return I;let C=u.get(p.identHash);if(typeof C>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(C.size===1)return I;let R=[...C].map(te=>{let ae=t.originalPackages.get(te);if(typeof ae>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return ae}),L=await r.getSatisfying(p,x,R,a),U=L.locators?.[0];if(typeof U>"u"||!L.sorted)return I;let J=t.originalPackages.get(U.locatorHash);if(typeof J>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return J}).then(async v=>{let x=await t.preparePackage(v,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:I,updatedPackage:v,resolvedPackage:x})}).catch(v=>{h.reject(v)})}return[...A.values()].map(p=>p.promise)}};async function N8(t,{strategy:e,patterns:r,cache:o,report:a}){let{configuration:n}=t,u=new Qi,A=n.makeResolver(),p=n.makeFetcher(),h={cache:o,checksums:t.storedChecksums,fetcher:p,project:t,report:u,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:A,report:u,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let I=M0t[e],v=await I(t,r,{resolver:A,resolveOptions:E,fetcher:p,fetchOptions:h}),x=Xs.progressViaCounter(v.length);await a.reportProgress(x);let C=0;await Promise.all(v.map(U=>U.then(J=>{if(J===null||J.currentPackage.locatorHash===J.updatedPackage.locatorHash)return;C++;let{descriptor:te,currentPackage:ae,updatedPackage:fe}=J;a.reportInfo(0,`${W.prettyDescriptor(n,te)} can be deduped from ${W.prettyLocator(n,ae)} to ${W.prettyLocator(n,fe)}`),a.reportJson({descriptor:W.stringifyDescriptor(te),currentResolution:W.stringifyLocator(ae),updatedResolution:W.stringifyLocator(fe)}),t.storedResolutions.set(te.descriptorHash,fe.locatorHash)}).finally(()=>x.tick())));let R;switch(C){case 0:R="No packages";break;case 1:R="One package";break;default:R=`${C} packages`}let L=de.pretty(n,e,de.Type.CODE);return a.reportInfo(0,`${R} can be deduped using the ${L} strategy`),C})}var Oh=class extends ut{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:Ks(m2)});this.check=ge.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd),a=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let n=0,u=await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async A=>{n=await N8(o,{strategy:this.strategy,patterns:this.patterns,cache:a,report:A})});return u.hasErrors()?u.exitCode():this.check?n?1:0:await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Oh.paths=[["dedupe"]],Oh.usage=nt.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]});Ye();qt();var Kd=class extends ut{async execute(){let{plugins:e}=await Ke.find(this.context.cwd,this.context.plugins),r=[];for(let u of e){let{commands:A}=u[1];if(A){let h=as.from(A).definitions();r.push([u[0],h])}}let o=this.cli.definitions(),a=(u,A)=>u.split(" ").slice(1).join()===A.split(" ").slice(1).join(),n=Jge()["@yarnpkg/builder"].bundles.standard;for(let u of r){let A=u[1];for(let p of A)o.find(h=>a(h.path,p.path)).plugin={name:u[0],isDefault:n.includes(u[0])}}this.context.stdout.write(`${JSON.stringify(o,null,2)} +`)}};Kd.paths=[["--clipanion=definitions"]];var Vd=class extends ut{async execute(){this.context.stdout.write(this.cli.usage(null))}};Vd.paths=[["help"],["--help"],["-h"]];Ye();St();qt();var mC=class extends ut{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!W.tryParseIdent(this.leadingArgument)){let r=V.resolve(this.context.cwd,ue.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ye();var Jd=class extends ut{async execute(){this.context.stdout.write(`${rn||""} +`)}};Jd.paths=[["-v"],["--version"]];Ye();Ye();qt();var Mh=class extends ut{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await Pt.find(r,this.context.cwd);return await o.restoreInstallState(),await un.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:o})}};Mh.paths=[["exec"]],Mh.usage=nt.Usage({description:"execute a shell script",details:` This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). - `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]});Ye();qt();Za();var Oh=class extends ut{constructor(){super(...arguments);this.hash=ge.String({validator:aP(Ey(),[sI(/^p[0-9a-f]{5}$/)])})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return await o.restoreInstallState({restoreResolutions:!1}),await o.applyLightResolution(),await Y0t(this.hash,o,{stdout:this.context.stdout})}};Oh.paths=[["explain","peer-requirements"]],Oh.usage=nt.Usage({description:"explain a set of peer requirements",details:` + `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]});Ye();qt();Za();var Uh=class extends ut{constructor(){super(...arguments);this.hash=ge.String({validator:oS(Cy(),[oI(/^p[0-9a-f]{5}$/)])})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd);return await o.restoreInstallState({restoreResolutions:!1}),await o.applyLightResolution(),await _0t(this.hash,o,{stdout:this.context.stdout})}};Uh.paths=[["explain","peer-requirements"]],Uh.usage=nt.Usage({description:"explain a set of peer requirements",details:` A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants. When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not. @@ -430,9 +430,9 @@ Try running the command again with the package name prefixed: ${de.pretty(r,"yar When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set. **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\`yarn explain peer-requirements\`). - `,examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]});async function Y0t(t,e,r){let o=e.peerWarnings.find(n=>n.hash===t);if(typeof o>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);return(await Nt.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async n=>{let u=de.mark(e.configuration);switch(o.type){case 2:{n.reportInfo(0,`We have a problem with ${de.pretty(e.configuration,o.requested,de.Type.IDENT)}, which is provided with version ${W.prettyReference(e.configuration,o.version)}.`),n.reportInfo(0,"It is needed by the following direct dependencies of workspaces in your project:"),n.reportSeparator();for(let h of o.requesters.values()){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}let A=[...o.links.values()].filter(h=>!o.requesters.has(h.locatorHash));if(A.length>0){n.reportSeparator(),n.reportInfo(0,`However, those packages themselves have more dependencies listing ${W.prettyIdent(e.configuration,o.requested)} as peer dependency:`),n.reportSeparator();for(let h of A){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}}let p=Array.from(o.links.values(),h=>{let E=e.storedPackages.get(h.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: Expected the package to be registered");let I=E.peerDependencies.get(o.requested.identHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the ident to be registered");return I.range});if(p.length>1){let h=kr.simplifyRanges(p);n.reportSeparator(),h===null?(n.reportInfo(0,"Unfortunately, put together, we found no single range that can satisfy all those peer requirements."),n.reportInfo(0,`Your best option may be to try to upgrade some dependencies with ${de.pretty(e.configuration,"yarn up",de.Type.CODE)}, or silence the warning via ${de.pretty(e.configuration,"logFilters",de.Type.CODE)}.`)):n.reportInfo(0,`Put together, the final range we computed is ${de.pretty(e.configuration,h,de.Type.RANGE)}`)}}break;default:n.reportInfo(0,`The ${de.pretty(e.configuration,"yarn explain peer-requirements",de.Type.CODE)} command doesn't support this warning type yet.`);break}})).exitCode()}Ye();qt();Za();Ye();Ye();Pt();qt();var Zge=$e(zn()),Uh=class extends ut{constructor(){super(...arguments);this.useYarnPath=ge.Boolean("--yarn-path",{description:"Set the yarnPath setting even if the version can be accessed by Corepack"});this.onlyIfNeeded=ge.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let A=r.sources.get("yarnPath");if(!A)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(K.contains(p,A))return 0}let o=()=>{if(typeof tn>"u")throw new it("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(A,p)=>({version:p,url:A.replace(/\{\}/g,p)});if(this.version==="self")a={url:o(),version:tn??"self"};else if(this.version==="latest"||this.version==="berry"||this.version==="stable")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await m2(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await m2(r,"canary"));else if(this.version==="classic")a={url:"https://classic.yarnpkg.com/latest.js",version:"classic"};else if(this.version.match(/^https?:/))a={url:this.version,version:"remote"};else if(this.version.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.version))a={url:`file://${K.resolve(ue.toPortablePath(this.version))}`,version:"file"};else if(kr.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(kr.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(kr.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await W0t(r,this.version));else throw new it(`Invalid version descriptor "${this.version}"`);return(await Nt.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async A=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(A.reportInfo(0,`Retrieving ${de.pretty(r,a.url,de.Type.PATH)}`),await oe.readFilePromise(a.url.slice(h.length))):(A.reportInfo(0,`Downloading ${de.pretty(r,a.url,de.Type.URL)}`),await rn.get(a.url,{configuration:r}))};await O8(r,a.version,p,{report:A,useYarnPath:this.useYarnPath})})).exitCode()}};Uh.paths=[["set","version"]],Uh.usage=nt.Usage({description:"lock the Yarn version used by the project",details:"\n This command will set a specific release of Yarn to be used by Corepack: https://nodejs.org/api/corepack.html.\n\n By default it only will set the `packageManager` field at the root of your project, but if the referenced release cannot be represented this way, if you already have `yarnPath` configured, or if you set the `--yarn-path` command line flag, then the release will also be downloaded from the Yarn GitHub repository, stored inside your project, and referenced via the `yarnPath` settings from your project `.yarnrc.yml` file.\n\n A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\n\n The version specifier can be:\n\n - a tag:\n - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\n - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\n - `classic` -> the most recent classic (`^0.x || ^1.x`) release\n\n - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\n\n - a semver version (e.g. `2.4.1`, `1.22.1`)\n\n - a local file referenced through either a relative or absolute path\n\n - `self` -> the version used to invoke the command\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest canary release from the Yarn repository","$0 set version canary"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download the most recent Yarn 3 build","$0 set version 3.x"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"],["Use a release from the local filesystem","$0 set version ./yarn.cjs"],["Use a release from a URL","$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js"],["Download the version used to invoke the command","$0 set version self"]]});async function W0t(t,e){let o=(await rn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>kr.satisfiesWithPrereleases(a,e));if(o.length===0)throw new it(`No matching release found for range ${de.pretty(t,e,de.Type.RANGE)}.`);return o[0]}async function m2(t,e){let r=await rn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new it(`Tag ${de.pretty(t,e,de.Type.RANGE)} not found`);return r.latest[e]}async function O8(t,e,r,{report:o,useYarnPath:a}){let n,u=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await u();await oe.mktempPromise(async le=>{let pe=K.join(le,"yarn.cjs");await oe.writeFilePromise(pe,te);let{stdout:Ae}=await Ur.execvp(process.execPath,[ue.fromPortablePath(pe),"--version"],{cwd:le,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=Ae.trim(),!Zge.default.valid(e))throw new Error(`Invalid semver version. ${de.pretty(t,"yarn --version",de.Type.CODE)} returned: -${e}`)})}let A=t.projectCwd??t.startingCwd,p=K.resolve(A,".yarn/releases"),h=K.resolve(p,`yarn-${e}.cjs`),E=K.relative(t.startingCwd,h),I=je.isTaggedYarnVersion(e),v=t.get("yarnPath"),b=!I,C=b||!!v||!!a;if(a===!1){if(b)throw new zt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");C=!1}else!C&&!process.env.COREPACK_ROOT&&(o.reportWarning(0,`You don't seem to have ${de.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${de.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),C=!0);if(C){let te=await u();o.reportInfo(0,`Saving the new release in ${de.pretty(t,E,"magenta")}`),await oe.removePromise(K.dirname(h)),await oe.mkdirPromise(K.dirname(h),{recursive:!0}),await oe.writeFilePromise(h,te,{mode:493}),await Ve.updateConfiguration(A,{yarnPath:K.relative(A,h)})}else await oe.removePromise(K.dirname(h)),await Ve.updateConfiguration(A,{yarnPath:Ve.deleteProperty});let T=await Mt.tryFind(A)||new Mt;T.packageManager=`yarn@${I?e:await m2(t,"stable")}`;let L={};T.exportTo(L);let U=K.join(A,Mt.fileName),J=`${JSON.stringify(L,null,T.indent)} -`;return await oe.changeFilePromise(U,J,{automaticNewlines:!0}),{bundleVersion:e}}function $ge(t){return wr[fP(t)]}var V0t=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
(?:.(?!##))+)/gs;async function K0t(t){let r=`https://repo.yarnpkg.com/${je.isTaggedYarnVersion(tn)?tn:await m2(t,"canary")}/packages/gatsby/content/advanced/error-codes.md`,o=await rn.get(r,{configuration:t});return new Map(Array.from(o.toString().matchAll(V0t),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=$ge(a.code);if(a.name!==n)throw new Error(`Assertion failed: Invalid error code data: Expected "${a.name}" to be named "${n}"`);return[a.code,a.details]}))}var _h=class extends ut{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:oI(Ey(),[sI(/^YN[0-9]{4}$/)])});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let o=$ge(this.code),a=de.pretty(r,o,de.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),A=(await K0t(r)).get(this.code),p=typeof A<"u"?de.jsonOrPretty(this.json,r,de.tuple(de.Type.MARKDOWN,{text:A,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. + `,examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]});async function _0t(t,e,r){let o=e.peerWarnings.find(n=>n.hash===t);if(typeof o>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);return(await Nt.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async n=>{let u=de.mark(e.configuration);switch(o.type){case 2:{n.reportInfo(0,`We have a problem with ${de.pretty(e.configuration,o.requested,de.Type.IDENT)}, which is provided with version ${W.prettyReference(e.configuration,o.version)}.`),n.reportInfo(0,"It is needed by the following direct dependencies of workspaces in your project:"),n.reportSeparator();for(let h of o.requesters.values()){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}let A=[...o.links.values()].filter(h=>!o.requesters.has(h.locatorHash));if(A.length>0){n.reportSeparator(),n.reportInfo(0,`However, those packages themselves have more dependencies listing ${W.prettyIdent(e.configuration,o.requested)} as peer dependency:`),n.reportSeparator();for(let h of A){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}}let p=Array.from(o.links.values(),h=>{let E=e.storedPackages.get(h.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: Expected the package to be registered");let I=E.peerDependencies.get(o.requested.identHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the ident to be registered");return I.range});if(p.length>1){let h=kr.simplifyRanges(p);n.reportSeparator(),h===null?(n.reportInfo(0,"Unfortunately, put together, we found no single range that can satisfy all those peer requirements."),n.reportInfo(0,`Your best option may be to try to upgrade some dependencies with ${de.pretty(e.configuration,"yarn up",de.Type.CODE)}, or silence the warning via ${de.pretty(e.configuration,"logFilters",de.Type.CODE)}.`)):n.reportInfo(0,`Put together, the final range we computed is ${de.pretty(e.configuration,h,de.Type.RANGE)}`)}}break;default:n.reportInfo(0,`The ${de.pretty(e.configuration,"yarn explain peer-requirements",de.Type.CODE)} command doesn't support this warning type yet.`);break}})).exitCode()}Ye();qt();Za();Ye();Ye();St();qt();var zge=$e(zn()),_h=class extends ut{constructor(){super(...arguments);this.useYarnPath=ge.Boolean("--yarn-path",{description:"Set the yarnPath setting even if the version can be accessed by Corepack"});this.onlyIfNeeded=ge.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let A=r.sources.get("yarnPath");if(!A)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(V.contains(p,A))return 0}let o=()=>{if(typeof rn>"u")throw new it("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(A,p)=>({version:p,url:A.replace(/\{\}/g,p)});if(this.version==="self")a={url:o(),version:rn??"self"};else if(this.version==="latest"||this.version==="berry"||this.version==="stable")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await y2(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await y2(r,"canary"));else if(this.version==="classic")a={url:"https://classic.yarnpkg.com/latest.js",version:"classic"};else if(this.version.match(/^https?:/))a={url:this.version,version:"remote"};else if(this.version.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.version))a={url:`file://${V.resolve(ue.toPortablePath(this.version))}`,version:"file"};else if(kr.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(kr.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(kr.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await H0t(r,this.version));else throw new it(`Invalid version descriptor "${this.version}"`);return(await Nt.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async A=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(A.reportInfo(0,`Retrieving ${de.pretty(r,a.url,de.Type.PATH)}`),await oe.readFilePromise(a.url.slice(h.length))):(A.reportInfo(0,`Downloading ${de.pretty(r,a.url,de.Type.URL)}`),await nn.get(a.url,{configuration:r}))};await L8(r,a.version,p,{report:A,useYarnPath:this.useYarnPath})})).exitCode()}};_h.paths=[["set","version"]],_h.usage=nt.Usage({description:"lock the Yarn version used by the project",details:"\n This command will set a specific release of Yarn to be used by Corepack: https://nodejs.org/api/corepack.html.\n\n By default it only will set the `packageManager` field at the root of your project, but if the referenced release cannot be represented this way, if you already have `yarnPath` configured, or if you set the `--yarn-path` command line flag, then the release will also be downloaded from the Yarn GitHub repository, stored inside your project, and referenced via the `yarnPath` settings from your project `.yarnrc.yml` file.\n\n A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\n\n The version specifier can be:\n\n - a tag:\n - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\n - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\n - `classic` -> the most recent classic (`^0.x || ^1.x`) release\n\n - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\n\n - a semver version (e.g. `2.4.1`, `1.22.1`)\n\n - a local file referenced through either a relative or absolute path\n\n - `self` -> the version used to invoke the command\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest canary release from the Yarn repository","$0 set version canary"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download the most recent Yarn 3 build","$0 set version 3.x"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"],["Use a release from the local filesystem","$0 set version ./yarn.cjs"],["Use a release from a URL","$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js"],["Download the version used to invoke the command","$0 set version self"]]});async function H0t(t,e){let o=(await nn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>kr.satisfiesWithPrereleases(a,e));if(o.length===0)throw new it(`No matching release found for range ${de.pretty(t,e,de.Type.RANGE)}.`);return o[0]}async function y2(t,e){let r=await nn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new it(`Tag ${de.pretty(t,e,de.Type.RANGE)} not found`);return r.latest[e]}async function L8(t,e,r,{report:o,useYarnPath:a}){let n,u=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await u();await oe.mktempPromise(async ae=>{let fe=V.join(ae,"yarn.cjs");await oe.writeFilePromise(fe,te);let{stdout:ce}=await Ur.execvp(process.execPath,[ue.fromPortablePath(fe),"--version"],{cwd:ae,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=ce.trim(),!zge.default.valid(e))throw new Error(`Invalid semver version. ${de.pretty(t,"yarn --version",de.Type.CODE)} returned: +${e}`)})}let A=t.projectCwd??t.startingCwd,p=V.resolve(A,".yarn/releases"),h=V.resolve(p,`yarn-${e}.cjs`),E=V.relative(t.startingCwd,h),I=_e.isTaggedYarnVersion(e),v=t.get("yarnPath"),x=!I,C=x||!!v||!!a;if(a===!1){if(x)throw new zt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");C=!1}else!C&&!process.env.COREPACK_ROOT&&(o.reportWarning(0,`You don't seem to have ${de.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${de.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),C=!0);if(C){let te=await u();o.reportInfo(0,`Saving the new release in ${de.pretty(t,E,"magenta")}`),await oe.removePromise(V.dirname(h)),await oe.mkdirPromise(V.dirname(h),{recursive:!0}),await oe.writeFilePromise(h,te,{mode:493}),await Ke.updateConfiguration(A,{yarnPath:V.relative(A,h)})}else await oe.removePromise(V.dirname(h)),await Ke.updateConfiguration(A,{yarnPath:Ke.deleteProperty});let R=await Ot.tryFind(A)||new Ot;R.packageManager=`yarn@${I?e:await y2(t,"stable")}`;let L={};R.exportTo(L);let U=V.join(A,Ot.fileName),J=`${JSON.stringify(L,null,R.indent)} +`;return await oe.changeFilePromise(U,J,{automaticNewlines:!0}),{bundleVersion:e}}function Xge(t){return wr[AS(t)]}var q0t=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
(?:.(?!##))+)/gs;async function j0t(t){let r=`https://repo.yarnpkg.com/${_e.isTaggedYarnVersion(rn)?rn:await y2(t,"canary")}/packages/gatsby/content/advanced/error-codes.md`,o=await nn.get(r,{configuration:t});return new Map(Array.from(o.toString().matchAll(q0t),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=Xge(a.code);if(a.name!==n)throw new Error(`Assertion failed: Invalid error code data: Expected "${a.name}" to be named "${n}"`);return[a.code,a.details]}))}var Hh=class extends ut{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:aI(Cy(),[oI(/^YN[0-9]{4}$/)])});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let o=Xge(this.code),a=de.pretty(r,o,de.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),A=(await j0t(r)).get(this.code),p=typeof A<"u"?de.jsonOrPretty(this.json,r,de.tuple(de.Type.MARKDOWN,{text:A,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. You can help us by editing this page on GitHub \u{1F642}: ${de.jsonOrPretty(this.json,r,de.tuple(de.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md"))} @@ -440,25 +440,25 @@ ${de.jsonOrPretty(this.json,r,de.tuple(de.Type.URL,"https://github.com/yarnpkg/b `):this.context.stdout.write(`${n} ${p} -`)}else{let o={children:je.mapAndFilter(Object.entries(wr),([a,n])=>Number.isNaN(Number(a))?je.mapAndFilter.skip:{label:Wu(Number(a)),value:de.tuple(de.Type.CODE,n)})};$s.emitTree(o,{configuration:r,stdout:this.context.stdout,json:this.json})}}};_h.paths=[["explain"]],_h.usage=nt.Usage({description:"explain an error code",details:` +`)}else{let o={children:_e.mapAndFilter(Object.entries(wr),([a,n])=>Number.isNaN(Number(a))?_e.mapAndFilter.skip:{label:Wu(Number(a)),value:de.tuple(de.Type.CODE,n)})};$s.emitTree(o,{configuration:r,stdout:this.context.stdout,json:this.json})}}};Hh.paths=[["explain"]],Hh.usage=nt.Usage({description:"explain an error code",details:` When the code argument is specified, this command prints its name and its details. When used without arguments, this command lists all error codes and their names. - `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]});Ye();Pt();qt();var ede=$e(Zo()),Hh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=ge.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=ge.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=ge.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=ge.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=ge.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=ge.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a&&!this.all)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=new Set(this.extra);this.cache&&u.add("cache"),this.dependents&&u.add("dependents"),this.manifest&&u.add("manifest");let A=(le,{recursive:pe})=>{let Ae=le.anchoredLocator.locatorHash,ye=new Map,ae=[Ae];for(;ae.length>0;){let we=ae.shift();if(ye.has(we))continue;let Pe=o.storedPackages.get(we);if(typeof Pe>"u")throw new Error("Assertion failed: Expected the package to be registered");if(ye.set(we,Pe),W.isVirtualLocator(Pe)&&ae.push(W.devirtualizeLocator(Pe).locatorHash),!(!pe&&we!==Ae))for(let g of Pe.dependencies.values()){let Ee=o.storedResolutions.get(g.descriptorHash);if(typeof Ee>"u")throw new Error("Assertion failed: Expected the resolution to be registered");ae.push(Ee)}}return ye.values()},p=({recursive:le})=>{let pe=new Map;for(let Ae of o.workspaces)for(let ye of A(Ae,{recursive:le}))pe.set(ye.locatorHash,ye);return pe.values()},h=({all:le,recursive:pe})=>le&&pe?o.storedPackages.values():le?p({recursive:pe}):A(a,{recursive:pe}),E=({all:le,recursive:pe})=>{let Ae=h({all:le,recursive:pe}),ye=this.patterns.map(Pe=>{let g=W.parseLocator(Pe),Ee=ede.default.makeRe(W.stringifyIdent(g)),De=W.isVirtualLocator(g),ce=De?W.devirtualizeLocator(g):g;return ne=>{let ee=W.stringifyIdent(ne);if(!Ee.test(ee))return!1;if(g.reference==="unknown")return!0;let Ie=W.isVirtualLocator(ne),ke=Ie?W.devirtualizeLocator(ne):ne;return!(De&&Ie&&g.reference!==ne.reference||ce.reference!==ke.reference)}}),ae=je.sortMap([...Ae],Pe=>W.stringifyLocator(Pe));return{selection:ae.filter(Pe=>ye.length===0||ye.some(g=>g(Pe))),sortedLookup:ae}},{selection:I,sortedLookup:v}=E({all:this.all,recursive:this.recursive});if(I.length===0)throw new it("No package matched your request");let b=new Map;if(this.dependents)for(let le of v)for(let pe of le.dependencies.values()){let Ae=o.storedResolutions.get(pe.descriptorHash);if(typeof Ae>"u")throw new Error("Assertion failed: Expected the resolution to be registered");je.getArrayWithDefault(b,Ae).push(le)}let C=new Map;for(let le of v){if(!W.isVirtualLocator(le))continue;let pe=W.devirtualizeLocator(le);je.getArrayWithDefault(C,pe.locatorHash).push(le)}let T={},L={children:T},U=r.makeFetcher(),J={project:o,fetcher:U,cache:n,checksums:o.storedChecksums,report:new Qi,cacheOptions:{skipIntegrityCheck:!0}},te=[async(le,pe,Ae)=>{if(!pe.has("manifest"))return;let ye=await U.fetch(le,J),ae;try{ae=await Mt.find(ye.prefixPath,{baseFs:ye.packageFs})}finally{ye.releaseFs?.()}Ae("Manifest",{License:de.tuple(de.Type.NO_HINT,ae.license),Homepage:de.tuple(de.Type.URL,ae.raw.homepage??null)})},async(le,pe,Ae)=>{if(!pe.has("cache"))return;let ye=o.storedChecksums.get(le.locatorHash)??null,ae=n.getLocatorPath(le,ye),we;if(ae!==null)try{we=await oe.statPromise(ae)}catch{}let Pe=typeof we<"u"?[we.size,de.Type.SIZE]:void 0;Ae("Cache",{Checksum:de.tuple(de.Type.NO_HINT,ye),Path:de.tuple(de.Type.PATH,ae),Size:Pe})}];for(let le of I){let pe=W.isVirtualLocator(le);if(!this.virtuals&&pe)continue;let Ae={},ye={value:[le,de.Type.LOCATOR],children:Ae};if(T[W.stringifyLocator(le)]=ye,this.nameOnly){delete ye.children;continue}let ae=C.get(le.locatorHash);typeof ae<"u"&&(Ae.Instances={label:"Instances",value:de.tuple(de.Type.NUMBER,ae.length)}),Ae.Version={label:"Version",value:de.tuple(de.Type.NO_HINT,le.version)};let we=(g,Ee)=>{let De={};if(Ae[g]=De,Array.isArray(Ee))De.children=Ee.map(ce=>({value:ce}));else{let ce={};De.children=ce;for(let[ne,ee]of Object.entries(Ee))typeof ee>"u"||(ce[ne]={label:ne,value:ee})}};if(!pe){for(let g of te)await g(le,u,we);await r.triggerHook(g=>g.fetchPackageInfo,le,u,we)}le.bin.size>0&&!pe&&we("Exported Binaries",[...le.bin.keys()].map(g=>de.tuple(de.Type.PATH,g)));let Pe=b.get(le.locatorHash);typeof Pe<"u"&&Pe.length>0&&we("Dependents",Pe.map(g=>de.tuple(de.Type.LOCATOR,g))),le.dependencies.size>0&&!pe&&we("Dependencies",[...le.dependencies.values()].map(g=>{let Ee=o.storedResolutions.get(g.descriptorHash),De=typeof Ee<"u"?o.storedPackages.get(Ee)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:De})})),le.peerDependencies.size>0&&pe&&we("Peer dependencies",[...le.peerDependencies.values()].map(g=>{let Ee=le.dependencies.get(g.identHash),De=typeof Ee<"u"?o.storedResolutions.get(Ee.descriptorHash)??null:null,ce=De!==null?o.storedPackages.get(De)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:ce})}))}$s.emitTree(L,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Hh.paths=[["info"]],Hh.usage=nt.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]});Ye();Pt();Nl();var dk=$e(ed());qt();var U8=$e(zn());Za();var J0t=[{selector:t=>t===-1,name:"nodeLinker",value:"node-modules"},{selector:t=>t!==-1&&t<8,name:"enableGlobalCache",value:!1},{selector:t=>t!==-1&&t<8,name:"compressionLevel",value:"mixed"}],jh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=ge.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=ge.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.refreshLockfile=ge.Boolean("--refresh-lockfile",{description:"Refresh the package metadata stored in the lockfile"});this.checkCache=ge.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"});this.checkResolutions=ge.Boolean("--check-resolutions",{description:"Validates that the package resolutions are coherent"});this.inlineBuilds=ge.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.cacheFolder=ge.String("--cache-folder",{hidden:!0});this.frozenLockfile=ge.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=ge.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=ge.Boolean("--non-interactive",{hidden:!0});this.preferOffline=ge.Boolean("--prefer-offline",{hidden:!0});this.production=ge.Boolean("--production",{hidden:!0});this.registry=ge.String("--registry",{hidden:!0});this.silent=ge.Boolean("--silent",{hidden:!0});this.networkTimeout=ge.String("--network-timeout",{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let o=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await NE({configuration:r,stdout:this.context.stdout},[{option:this.ignoreEngines,message:"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",error:!dk.default.VERCEL},{option:this.registry,message:"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file"},{option:this.preferOffline,message:"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",error:!dk.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!o},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!dk.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new it(`${de.pretty(r,"--immutable",de.Type.CODE)} and ${de.pretty(r,"--immutable-cache",de.Type.CODE)} cannot be used with ${de.pretty(r,"--mode=update-lockfile",de.Type.CODE)}`);let u=(this.immutable??r.get("enableImmutableInstalls"))&&!n,A=this.immutableCache&&!n;if(r.projectCwd!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U=!1;await Z0t(r,u)&&(L.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await X0t(r,u)&&(L.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),U=!0),U&&L.reportSeparator()});if(T.hasErrors())return T.exitCode()}if(r.projectCwd!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{if(Ve.telemetry?.isNew)Ve.telemetry.commitTips(),L.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),L.reportInfo(65,`Run ${de.pretty(r,"yarn config set --home enableTelemetry 0",de.Type.CODE)} to disable`),L.reportSeparator();else if(Ve.telemetry?.shouldShowTips){let U=await rn.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let J=null;if(tn!==null){let le=U8.default.prerelease(tn)?"canary":"stable",pe=U.latest[le];U8.default.gt(pe,tn)&&(J=[le,pe])}if(J)Ve.telemetry.commitTips(),L.reportInfo(88,`${de.applyStyle(r,`A new ${J[0]} version of Yarn is available:`,de.Style.BOLD)} ${W.prettyReference(r,J[1])}!`),L.reportInfo(88,`Upgrade now by running ${de.pretty(r,`yarn set version ${J[1]}`,de.Type.CODE)}`),L.reportSeparator();else{let te=Ve.telemetry.selectTip(U.tips);te&&(L.reportInfo(89,de.pretty(r,te.message,de.Type.MARKDOWN_INLINE)),te.url&&L.reportInfo(89,`Learn more at ${te.url}`),L.reportSeparator())}}}});if(T.hasErrors())return T.exitCode()}let{project:p,workspace:h}=await St.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U={};for(let J of J0t)J.selector(E)&&typeof r.sources.get(J.name)>"u"&&(r.use("",{[J.name]:J.value},p.cwd,{overwrite:!0}),U[J.name]=J.value);Object.keys(U).length>0&&(await Ve.updateConfiguration(p.cwd,U),L.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),L.reportSeparator())});if(T.hasErrors())return T.exitCode()}let I=await Lr.find(r,{immutable:A,check:this.checkCache});if(!h)throw new rr(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let v=r.get("enableHardenedMode");v&&typeof r.sources.get("enableHardenedMode")>"u"&&await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async T=>{T.reportWarning(0,"Yarn detected that the current workflow is executed from a public pull request. For safety the hardened mode has been enabled."),T.reportWarning(0,`It will prevent malicious lockfile manipulations, in exchange for a slower install time. You can opt-out if necessary; check our ${de.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),T.reportSeparator()}),(this.refreshLockfile??v)&&(p.lockfileNeedsRefresh=!0);let b=this.checkResolutions??v;return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async T=>{await p.install({cache:I,report:T,immutable:u,checkResolutions:b,mode:this.mode})})).exitCode()}};jh.paths=[["install"],nt.Default],jh.usage=nt.Usage({description:"install the project dependencies",details:"\n This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of `cacheFolder` in `yarn config` to see where the cache files are stored).\n\n - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n If the `--immutable` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the `immutablePatterns` configuration setting). For backward compatibility we offer an alias under the name of `--frozen-lockfile`, but it will be removed in a later release.\n\n If the `--immutable-cache` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n If the `--refresh-lockfile` option is set, Yarn will keep the same resolution for the packages currently in the lockfile but will refresh their metadata. If used together with `--immutable`, it can validate that the lockfile information are consistent. This flag is enabled by default when Yarn detects it runs within a pull request context.\n\n If the `--check-cache` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n If the `--inline-builds` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n ",examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]});var z0t="<<<<<<<";async function X0t(t,e){if(!t.projectCwd)return!1;let r=K.join(t.projectCwd,dr.lockfile);if(!await oe.existsPromise(r)||!(await oe.readFilePromise(r,"utf8")).includes(z0t))return!1;if(e)throw new zt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Ur.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Ur.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Ur.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new zt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async A=>{let p=await Ur.execvp("git",["show",`${A}:./${dr.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new zt(83,`Git returned an error when trying to access the lockfile content in ${A}`);try{return Vi(p.stdout)}catch{throw new zt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(A=>!!A.__metadata);for(let A of n){if(A.__metadata.version<7)for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=W.parseDescriptor(p,!0),E=t.normalizeDependency(h),I=W.stringifyDescriptor(E);I!==p&&(A[I]=A[p],delete A[p])}for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=A[p].checksum;typeof h=="string"&&h.includes("/")||(A[p].checksum=`${A.__metadata.cacheKey}/${h}`)}}let u=Object.assign({},...n);u.__metadata.version=`${Math.min(...n.map(A=>parseInt(A.__metadata.version??0)))}`,u.__metadata.cacheKey="merged";for(let[A,p]of Object.entries(u))typeof p=="string"&&delete u[A];return await oe.changeFilePromise(r,Ba(u),{automaticNewlines:!0}),!0}async function Z0t(t,e){if(!t.projectCwd)return!1;let r=[],o=K.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await Ve.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let u=n.filter(A=>{if(!A.path)return!0;let p=K.resolve(t.projectCwd,A.path),h=B1.has(A.spec)&&K.contains(o,p);return h&&r.push(p),!h});return u.length===0?Ve.deleteProperty:u.length===n.length?n:u}},{immutable:e})?(await Promise.all(r.map(async n=>{await oe.removePromise(n)})),!0):!1}Ye();Pt();qt();var qh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target projects to the current one"});this.private=ge.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target projects to the current one"});this.relative=ge.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destinations=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=o.topLevelWorkspace,A=[];for(let p of this.destinations){let h=K.resolve(this.context.cwd,ue.toPortablePath(p)),E=await Ve.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(o.cwd===I.cwd)throw new it(`Invalid destination '${p}'; Can't link the project to itself`);if(!v)throw new rr(I.cwd,h);if(this.all){let b=!1;for(let C of I.workspaces)C.manifest.name&&(!C.manifest.private||this.private)&&(A.push(C),b=!0);if(!b)throw new it(`No workspace found to be linked in the target project: ${p}`)}else{if(!v.manifest.name)throw new it(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(v.manifest.private&&!this.private)throw new it(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);A.push(v)}}for(let p of A){let h=W.stringifyIdent(p.anchoredLocator),E=this.relative?K.relative(o.cwd,p.cwd):p.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};qh.paths=[["link"]],qh.usage=nt.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register one or more remote workspaces for use in the current project","$0 link ~/ts-loader ~/jest"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]});qt();var Gh=class extends ut{constructor(){super(...arguments);this.args=ge.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};Gh.paths=[["node"]],Gh.usage=nt.Usage({description:"run node with the hook already setup",details:` + `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]});Ye();St();qt();var Zge=$e(Zo()),qh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=ge.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=ge.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=ge.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=ge.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=ge.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=ge.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a&&!this.all)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=new Set(this.extra);this.cache&&u.add("cache"),this.dependents&&u.add("dependents"),this.manifest&&u.add("manifest");let A=(ae,{recursive:fe})=>{let ce=ae.anchoredLocator.locatorHash,me=new Map,he=[ce];for(;he.length>0;){let Be=he.shift();if(me.has(Be))continue;let we=o.storedPackages.get(Be);if(typeof we>"u")throw new Error("Assertion failed: Expected the package to be registered");if(me.set(Be,we),W.isVirtualLocator(we)&&he.push(W.devirtualizeLocator(we).locatorHash),!(!fe&&Be!==ce))for(let g of we.dependencies.values()){let Ee=o.storedResolutions.get(g.descriptorHash);if(typeof Ee>"u")throw new Error("Assertion failed: Expected the resolution to be registered");he.push(Ee)}}return me.values()},p=({recursive:ae})=>{let fe=new Map;for(let ce of o.workspaces)for(let me of A(ce,{recursive:ae}))fe.set(me.locatorHash,me);return fe.values()},h=({all:ae,recursive:fe})=>ae&&fe?o.storedPackages.values():ae?p({recursive:fe}):A(a,{recursive:fe}),E=({all:ae,recursive:fe})=>{let ce=h({all:ae,recursive:fe}),me=this.patterns.map(we=>{let g=W.parseLocator(we),Ee=Zge.default.makeRe(W.stringifyIdent(g)),Se=W.isVirtualLocator(g),le=Se?W.devirtualizeLocator(g):g;return ne=>{let ee=W.stringifyIdent(ne);if(!Ee.test(ee))return!1;if(g.reference==="unknown")return!0;let Ie=W.isVirtualLocator(ne),Fe=Ie?W.devirtualizeLocator(ne):ne;return!(Se&&Ie&&g.reference!==ne.reference||le.reference!==Fe.reference)}}),he=_e.sortMap([...ce],we=>W.stringifyLocator(we));return{selection:he.filter(we=>me.length===0||me.some(g=>g(we))),sortedLookup:he}},{selection:I,sortedLookup:v}=E({all:this.all,recursive:this.recursive});if(I.length===0)throw new it("No package matched your request");let x=new Map;if(this.dependents)for(let ae of v)for(let fe of ae.dependencies.values()){let ce=o.storedResolutions.get(fe.descriptorHash);if(typeof ce>"u")throw new Error("Assertion failed: Expected the resolution to be registered");_e.getArrayWithDefault(x,ce).push(ae)}let C=new Map;for(let ae of v){if(!W.isVirtualLocator(ae))continue;let fe=W.devirtualizeLocator(ae);_e.getArrayWithDefault(C,fe.locatorHash).push(ae)}let R={},L={children:R},U=r.makeFetcher(),J={project:o,fetcher:U,cache:n,checksums:o.storedChecksums,report:new Qi,cacheOptions:{skipIntegrityCheck:!0}},te=[async(ae,fe,ce)=>{if(!fe.has("manifest"))return;let me=await U.fetch(ae,J),he;try{he=await Ot.find(me.prefixPath,{baseFs:me.packageFs})}finally{me.releaseFs?.()}ce("Manifest",{License:de.tuple(de.Type.NO_HINT,he.license),Homepage:de.tuple(de.Type.URL,he.raw.homepage??null)})},async(ae,fe,ce)=>{if(!fe.has("cache"))return;let me=o.storedChecksums.get(ae.locatorHash)??null,he=n.getLocatorPath(ae,me),Be;if(he!==null)try{Be=await oe.statPromise(he)}catch{}let we=typeof Be<"u"?[Be.size,de.Type.SIZE]:void 0;ce("Cache",{Checksum:de.tuple(de.Type.NO_HINT,me),Path:de.tuple(de.Type.PATH,he),Size:we})}];for(let ae of I){let fe=W.isVirtualLocator(ae);if(!this.virtuals&&fe)continue;let ce={},me={value:[ae,de.Type.LOCATOR],children:ce};if(R[W.stringifyLocator(ae)]=me,this.nameOnly){delete me.children;continue}let he=C.get(ae.locatorHash);typeof he<"u"&&(ce.Instances={label:"Instances",value:de.tuple(de.Type.NUMBER,he.length)}),ce.Version={label:"Version",value:de.tuple(de.Type.NO_HINT,ae.version)};let Be=(g,Ee)=>{let Se={};if(ce[g]=Se,Array.isArray(Ee))Se.children=Ee.map(le=>({value:le}));else{let le={};Se.children=le;for(let[ne,ee]of Object.entries(Ee))typeof ee>"u"||(le[ne]={label:ne,value:ee})}};if(!fe){for(let g of te)await g(ae,u,Be);await r.triggerHook(g=>g.fetchPackageInfo,ae,u,Be)}ae.bin.size>0&&!fe&&Be("Exported Binaries",[...ae.bin.keys()].map(g=>de.tuple(de.Type.PATH,g)));let we=x.get(ae.locatorHash);typeof we<"u"&&we.length>0&&Be("Dependents",we.map(g=>de.tuple(de.Type.LOCATOR,g))),ae.dependencies.size>0&&!fe&&Be("Dependencies",[...ae.dependencies.values()].map(g=>{let Ee=o.storedResolutions.get(g.descriptorHash),Se=typeof Ee<"u"?o.storedPackages.get(Ee)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:Se})})),ae.peerDependencies.size>0&&fe&&Be("Peer dependencies",[...ae.peerDependencies.values()].map(g=>{let Ee=ae.dependencies.get(g.identHash),Se=typeof Ee<"u"?o.storedResolutions.get(Ee.descriptorHash)??null:null,le=Se!==null?o.storedPackages.get(Se)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:le})}))}$s.emitTree(L,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};qh.paths=[["info"]],qh.usage=nt.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]});Ye();St();Nl();var hk=$e(td());qt();var O8=$e(zn());Za();var G0t=[{selector:t=>t===-1,name:"nodeLinker",value:"node-modules"},{selector:t=>t!==-1&&t<8,name:"enableGlobalCache",value:!1},{selector:t=>t!==-1&&t<8,name:"compressionLevel",value:"mixed"}],jh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=ge.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=ge.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.refreshLockfile=ge.Boolean("--refresh-lockfile",{description:"Refresh the package metadata stored in the lockfile"});this.checkCache=ge.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"});this.checkResolutions=ge.Boolean("--check-resolutions",{description:"Validates that the package resolutions are coherent"});this.inlineBuilds=ge.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.cacheFolder=ge.String("--cache-folder",{hidden:!0});this.frozenLockfile=ge.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=ge.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=ge.Boolean("--non-interactive",{hidden:!0});this.preferOffline=ge.Boolean("--prefer-offline",{hidden:!0});this.production=ge.Boolean("--production",{hidden:!0});this.registry=ge.String("--registry",{hidden:!0});this.silent=ge.Boolean("--silent",{hidden:!0});this.networkTimeout=ge.String("--network-timeout",{hidden:!0})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let o=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await LE({configuration:r,stdout:this.context.stdout},[{option:this.ignoreEngines,message:"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",error:!hk.default.VERCEL},{option:this.registry,message:"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file"},{option:this.preferOffline,message:"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",error:!hk.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!o},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!hk.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new it(`${de.pretty(r,"--immutable",de.Type.CODE)} and ${de.pretty(r,"--immutable-cache",de.Type.CODE)} cannot be used with ${de.pretty(r,"--mode=update-lockfile",de.Type.CODE)}`);let u=(this.immutable??r.get("enableImmutableInstalls"))&&!n,A=this.immutableCache&&!n;if(r.projectCwd!==null){let R=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U=!1;await K0t(r,u)&&(L.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await W0t(r,u)&&(L.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),U=!0),U&&L.reportSeparator()});if(R.hasErrors())return R.exitCode()}if(r.projectCwd!==null){let R=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{if(Ke.telemetry?.isNew)Ke.telemetry.commitTips(),L.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),L.reportInfo(65,`Run ${de.pretty(r,"yarn config set --home enableTelemetry 0",de.Type.CODE)} to disable`),L.reportSeparator();else if(Ke.telemetry?.shouldShowTips){let U=await nn.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let J=null;if(rn!==null){let ae=O8.default.prerelease(rn)?"canary":"stable",fe=U.latest[ae];O8.default.gt(fe,rn)&&(J=[ae,fe])}if(J)Ke.telemetry.commitTips(),L.reportInfo(88,`${de.applyStyle(r,`A new ${J[0]} version of Yarn is available:`,de.Style.BOLD)} ${W.prettyReference(r,J[1])}!`),L.reportInfo(88,`Upgrade now by running ${de.pretty(r,`yarn set version ${J[1]}`,de.Type.CODE)}`),L.reportSeparator();else{let te=Ke.telemetry.selectTip(U.tips);te&&(L.reportInfo(89,de.pretty(r,te.message,de.Type.MARKDOWN_INLINE)),te.url&&L.reportInfo(89,`Learn more at ${te.url}`),L.reportSeparator())}}}});if(R.hasErrors())return R.exitCode()}let{project:p,workspace:h}=await Pt.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let R=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U={};for(let J of G0t)J.selector(E)&&typeof r.sources.get(J.name)>"u"&&(r.use("",{[J.name]:J.value},p.cwd,{overwrite:!0}),U[J.name]=J.value);Object.keys(U).length>0&&(await Ke.updateConfiguration(p.cwd,U),L.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),L.reportSeparator())});if(R.hasErrors())return R.exitCode()}let I=await Lr.find(r,{immutable:A,check:this.checkCache});if(!h)throw new rr(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let v=r.get("enableHardenedMode");v&&typeof r.sources.get("enableHardenedMode")>"u"&&await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async R=>{R.reportWarning(0,"Yarn detected that the current workflow is executed from a public pull request. For safety the hardened mode has been enabled."),R.reportWarning(0,`It will prevent malicious lockfile manipulations, in exchange for a slower install time. You can opt-out if necessary; check our ${de.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),R.reportSeparator()}),(this.refreshLockfile??v)&&(p.lockfileNeedsRefresh=!0);let x=this.checkResolutions??v;return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async R=>{await p.install({cache:I,report:R,immutable:u,checkResolutions:x,mode:this.mode})})).exitCode()}};jh.paths=[["install"],nt.Default],jh.usage=nt.Usage({description:"install the project dependencies",details:"\n This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of `cacheFolder` in `yarn config` to see where the cache files are stored).\n\n - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the `.pnp.cjs` file you might know).\n\n - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your `.pnp.cjs` file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n If the `--immutable` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the `immutablePatterns` configuration setting). For backward compatibility we offer an alias under the name of `--frozen-lockfile`, but it will be removed in a later release.\n\n If the `--immutable-cache` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n If the `--refresh-lockfile` option is set, Yarn will keep the same resolution for the packages currently in the lockfile but will refresh their metadata. If used together with `--immutable`, it can validate that the lockfile information are consistent. This flag is enabled by default when Yarn detects it runs within a pull request context.\n\n If the `--check-cache` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n If the `--inline-builds` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n ",examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]});var Y0t="<<<<<<<";async function W0t(t,e){if(!t.projectCwd)return!1;let r=V.join(t.projectCwd,dr.lockfile);if(!await oe.existsPromise(r)||!(await oe.readFilePromise(r,"utf8")).includes(Y0t))return!1;if(e)throw new zt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Ur.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Ur.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Ur.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new zt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async A=>{let p=await Ur.execvp("git",["show",`${A}:./${dr.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new zt(83,`Git returned an error when trying to access the lockfile content in ${A}`);try{return Ki(p.stdout)}catch{throw new zt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(A=>!!A.__metadata);for(let A of n){if(A.__metadata.version<7)for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=W.parseDescriptor(p,!0),E=t.normalizeDependency(h),I=W.stringifyDescriptor(E);I!==p&&(A[I]=A[p],delete A[p])}for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=A[p].checksum;typeof h=="string"&&h.includes("/")||(A[p].checksum=`${A.__metadata.cacheKey}/${h}`)}}let u=Object.assign({},...n);u.__metadata.version=`${Math.min(...n.map(A=>parseInt(A.__metadata.version??0)))}`,u.__metadata.cacheKey="merged";for(let[A,p]of Object.entries(u))typeof p=="string"&&delete u[A];return await oe.changeFilePromise(r,Ba(u),{automaticNewlines:!0}),!0}async function K0t(t,e){if(!t.projectCwd)return!1;let r=[],o=V.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await Ke.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let u=n.filter(A=>{if(!A.path)return!0;let p=V.resolve(t.projectCwd,A.path),h=v1.has(A.spec)&&V.contains(o,p);return h&&r.push(p),!h});return u.length===0?Ke.deleteProperty:u.length===n.length?n:u}},{immutable:e})?(await Promise.all(r.map(async n=>{await oe.removePromise(n)})),!0):!1}Ye();St();qt();var Gh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target projects to the current one"});this.private=ge.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target projects to the current one"});this.relative=ge.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destinations=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=o.topLevelWorkspace,A=[];for(let p of this.destinations){let h=V.resolve(this.context.cwd,ue.toPortablePath(p)),E=await Ke.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await Pt.find(E,h);if(o.cwd===I.cwd)throw new it(`Invalid destination '${p}'; Can't link the project to itself`);if(!v)throw new rr(I.cwd,h);if(this.all){let x=!1;for(let C of I.workspaces)C.manifest.name&&(!C.manifest.private||this.private)&&(A.push(C),x=!0);if(!x)throw new it(`No workspace found to be linked in the target project: ${p}`)}else{if(!v.manifest.name)throw new it(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(v.manifest.private&&!this.private)throw new it(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);A.push(v)}}for(let p of A){let h=W.stringifyIdent(p.anchoredLocator),E=this.relative?V.relative(o.cwd,p.cwd):p.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};Gh.paths=[["link"]],Gh.usage=nt.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register one or more remote workspaces for use in the current project","$0 link ~/ts-loader ~/jest"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]});qt();var Yh=class extends ut{constructor(){super(...arguments);this.args=ge.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};Yh.paths=[["node"]],Yh.usage=nt.Usage({description:"run node with the hook already setup",details:` This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version. - `,examples:[["Run a Node script","$0 node ./my-script.js"]]});Ye();qt();var Yh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await Ve.findRcFiles(this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let u of o)if(!!u.data?.plugins)for(let A of u.data.plugins){if(!A.checksum||!A.spec.match(/^https?:/))continue;let p=await rn.get(A.spec,{configuration:r}),h=wn.makeHash(p);if(A.checksum===h)continue;let E=de.pretty(r,A.path,de.Type.PATH),I=de.pretty(r,A.spec,de.Type.URL),v=`${E} is different from the file provided by ${I}`;n.reportJson({...A,newChecksum:h}),n.reportError(0,v)}})).exitCode()}};Yh.paths=[["plugin","check"]],Yh.usage=nt.Usage({category:"Plugin-related commands",description:"find all third-party plugins that differ from their own spec",details:` + `,examples:[["Run a Node script","$0 node ./my-script.js"]]});Ye();qt();var Wh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await Ke.findRcFiles(this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let u of o)if(!!u.data?.plugins)for(let A of u.data.plugins){if(!A.checksum||!A.spec.match(/^https?:/))continue;let p=await nn.get(A.spec,{configuration:r}),h=wn.makeHash(p);if(A.checksum===h)continue;let E=de.pretty(r,A.path,de.Type.PATH),I=de.pretty(r,A.spec,de.Type.URL),v=`${E} is different from the file provided by ${I}`;n.reportJson({...A,newChecksum:h}),n.reportError(0,v)}})).exitCode()}};Wh.paths=[["plugin","check"]],Wh.usage=nt.Usage({category:"Plugin-related commands",description:"find all third-party plugins that differ from their own spec",details:` Check only the plugins from https. If this command detects any plugin differences in the CI environment, it will throw an error. - `,examples:[["find all third-party plugins that differ from their own spec","$0 plugin check"]]});Ye();Ye();Pt();qt();var ode=Be("os");Ye();Pt();qt();var tde=Be("os");Ye();Nl();qt();var $0t="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function Jd(t,e){let r=await rn.get($0t,{configuration:t}),o=Vi(r.toString());return Object.fromEntries(Object.entries(o).filter(([a,n])=>!e||kr.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var Wh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await Jd(r,tn);for(let[u,{experimental:A,...p}]of Object.entries(n)){let h=u;A&&(h+=" [experimental]"),a.reportJson({name:u,experimental:A,...p}),a.reportInfo(null,h)}})).exitCode()}};Wh.paths=[["plugin","list"]],Wh.usage=nt.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var egt=/^[0-9]+$/,tgt=process.platform==="win32";function rde(t){return egt.test(t)?`pull/${t}/head`:t}var rgt=({repository:t,branch:e},r)=>[["git","init",ue.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",rde(e)],["git","reset","--hard","FETCH_HEAD"]],ngt=({branch:t})=>[["git","fetch","origin","--depth=1",rde(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],igt=({plugins:t,noMinify:e},r,o)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",K.resolve(o,a)])),...e?["--no-minify"]:[],"|"],[tgt?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",ue.fromPortablePath(r),"|"]],Vh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=ge.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"If set, the bundle will be built but not added to the project"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=ge.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.installPath<"u"?K.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):K.resolve(ue.toPortablePath((0,tde.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{await _8(this,{configuration:r,report:u,target:a}),u.reportSeparator(),u.reportInfo(0,"Building a fresh bundle"),u.reportSeparator();let A=await Ur.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=K.join(a,`packages/yarnpkg-cli/bundles/yarn-${A.stdout.trim()}.js`);oe.existsSync(p)||(await y2(igt(this,p,a),{configuration:r,context:this.context,target:a}),u.reportSeparator());let h=await oe.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await O8(r,null,async()=>h,{report:u});this.skipPlugins||await sgt(this,E,{project:o,report:u,target:a})}})).exitCode()}};Vh.paths=[["set","version","from","sources"]],Vh.usage=nt.Usage({description:"build Yarn from master",details:` + `,examples:[["find all third-party plugins that differ from their own spec","$0 plugin check"]]});Ye();Ye();St();qt();var nde=ve("os");Ye();St();qt();var $ge=ve("os");Ye();Nl();qt();var V0t="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function zd(t,e){let r=await nn.get(V0t,{configuration:t}),o=Ki(r.toString());return Object.fromEntries(Object.entries(o).filter(([a,n])=>!e||kr.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var Kh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await zd(r,rn);for(let[u,{experimental:A,...p}]of Object.entries(n)){let h=u;A&&(h+=" [experimental]"),a.reportJson({name:u,experimental:A,...p}),a.reportInfo(null,h)}})).exitCode()}};Kh.paths=[["plugin","list"]],Kh.usage=nt.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var J0t=/^[0-9]+$/,z0t=process.platform==="win32";function ede(t){return J0t.test(t)?`pull/${t}/head`:t}var X0t=({repository:t,branch:e},r)=>[["git","init",ue.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",ede(e)],["git","reset","--hard","FETCH_HEAD"]],Z0t=({branch:t})=>[["git","fetch","origin","--depth=1",ede(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],$0t=({plugins:t,noMinify:e},r,o)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",V.resolve(o,a)])),...e?["--no-minify"]:[],"|"],[z0t?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",ue.fromPortablePath(r),"|"]],Vh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=ge.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"If set, the bundle will be built but not added to the project"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=ge.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd),a=typeof this.installPath<"u"?V.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):V.resolve(ue.toPortablePath((0,$ge.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{await M8(this,{configuration:r,report:u,target:a}),u.reportSeparator(),u.reportInfo(0,"Building a fresh bundle"),u.reportSeparator();let A=await Ur.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=V.join(a,`packages/yarnpkg-cli/bundles/yarn-${A.stdout.trim()}.js`);oe.existsSync(p)||(await E2($0t(this,p,a),{configuration:r,context:this.context,target:a}),u.reportSeparator());let h=await oe.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await L8(r,null,async()=>h,{report:u});this.skipPlugins||await egt(this,E,{project:o,report:u,target:a})}})).exitCode()}};Vh.paths=[["set","version","from","sources"]],Vh.usage=nt.Usage({description:"build Yarn from master",details:` This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project. By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \`--skip-plugins\` flag. - `,examples:[["Build Yarn from master","$0 set version from sources"]]});async function y2(t,{configuration:e,context:r,target:o}){for(let[a,...n]of t){let u=n[n.length-1]==="|";if(u&&n.pop(),u)await Ur.pipevp(a,n,{cwd:o,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${de.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} -`);try{await Ur.execvp(a,n,{cwd:o,strict:!0})}catch(A){throw r.stdout.write(A.stdout||A.stack),A}}}}async function _8(t,{configuration:e,report:r,target:o}){let a=!1;if(!t.force&&oe.existsSync(K.join(o,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await y2(ngt(t),{configuration:e,context:t.context,target:o}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await oe.removePromise(o),await oe.mkdirPromise(o,{recursive:!0}),await y2(rgt(t,o),{configuration:e,context:t.context,target:o}))}async function sgt(t,e,{project:r,report:o,target:a}){let n=await Jd(r.configuration,e),u=new Set(Object.keys(n));for(let A of r.configuration.plugins.keys())!u.has(A)||await H8(A,t,{project:r,report:o,target:a})}Ye();Ye();Pt();qt();var nde=$e(zn()),ide=Be("url"),sde=Be("vm");var Kh=class extends ut{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await St.find(r,this.context.cwd),u,A;if(this.name.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.name)){let p=K.resolve(this.context.cwd,ue.toPortablePath(this.name));a.reportInfo(0,`Reading ${de.pretty(r,p,de.Type.PATH)}`),u=K.relative(n.cwd,p),A=await oe.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new ide.URL(this.name)}catch{throw new zt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}u=this.name,p=this.name}else{let h=W.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!nde.default.valid(h.reference))throw new zt(0,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let E=W.stringifyIdent(h),I=await Jd(r,tn);if(!Object.hasOwn(I,E)){let v=`Couldn't find a plugin named ${W.prettyIdent(r,h)} on the remote registry. -`;throw r.plugins.has(E)?v+=`A plugin named ${W.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:v+=`Note that only the plugins referenced on our website (${de.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",de.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${de.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",de.Type.URL)}).`,new zt(51,v)}u=E,p=I[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):tn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${tn}/`))}a.reportInfo(0,`Downloading ${de.pretty(r,p,"green")}`),A=await rn.get(p,{configuration:r})}await j8(u,A,{checksum:this.checksum,project:n,report:a})})).exitCode()}};Kh.paths=[["plugin","import"]],Kh.usage=nt.Usage({category:"Plugin-related commands",description:"download a plugin",details:` + `,examples:[["Build Yarn from master","$0 set version from sources"]]});async function E2(t,{configuration:e,context:r,target:o}){for(let[a,...n]of t){let u=n[n.length-1]==="|";if(u&&n.pop(),u)await Ur.pipevp(a,n,{cwd:o,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${de.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} +`);try{await Ur.execvp(a,n,{cwd:o,strict:!0})}catch(A){throw r.stdout.write(A.stdout||A.stack),A}}}}async function M8(t,{configuration:e,report:r,target:o}){let a=!1;if(!t.force&&oe.existsSync(V.join(o,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await E2(Z0t(t),{configuration:e,context:t.context,target:o}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await oe.removePromise(o),await oe.mkdirPromise(o,{recursive:!0}),await E2(X0t(t,o),{configuration:e,context:t.context,target:o}))}async function egt(t,e,{project:r,report:o,target:a}){let n=await zd(r.configuration,e),u=new Set(Object.keys(n));for(let A of r.configuration.plugins.keys())!u.has(A)||await U8(A,t,{project:r,report:o,target:a})}Ye();Ye();St();qt();var tde=$e(zn()),rde=ve("vm");var Jh=class extends ut{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await Pt.find(r,this.context.cwd),u,A;if(this.name.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.name)){let p=V.resolve(this.context.cwd,ue.toPortablePath(this.name));a.reportInfo(0,`Reading ${de.pretty(r,p,de.Type.PATH)}`),u=V.relative(n.cwd,p),A=await oe.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new URL(this.name)}catch{throw new zt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}u=this.name,p=this.name}else{let h=W.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!tde.default.valid(h.reference))throw new zt(0,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let E=W.stringifyIdent(h),I=await zd(r,rn);if(!Object.hasOwn(I,E)){let v=`Couldn't find a plugin named ${W.prettyIdent(r,h)} on the remote registry. +`;throw r.plugins.has(E)?v+=`A plugin named ${W.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:v+=`Note that only the plugins referenced on our website (${de.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",de.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${de.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",de.Type.URL)}).`,new zt(51,v)}u=E,p=I[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):rn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${rn}/`))}a.reportInfo(0,`Downloading ${de.pretty(r,p,"green")}`),A=await nn.get(p,{configuration:r})}await _8(u,A,{checksum:this.checksum,project:n,report:a})})).exitCode()}};Jh.paths=[["plugin","import"]],Jh.usage=nt.Usage({category:"Plugin-related commands",description:"download a plugin",details:` This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations. Three types of plugin references are accepted: @@ -470,23 +470,23 @@ ${p} If the \`--no-checksum\` option is set, Yarn will no longer care if the plugin is modified. Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \`@yarnpkg/builder\` package). - `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]});async function j8(t,e,{checksum:r=!0,project:o,report:a}){let{configuration:n}=o,u={},A={exports:u};(0,sde.runInNewContext)(e.toString(),{module:A,exports:u});let h=`.yarn/plugins/${A.exports.name}.cjs`,E=K.resolve(o.cwd,h);a.reportInfo(0,`Saving the new plugin in ${de.pretty(n,h,"magenta")}`),await oe.mkdirPromise(K.dirname(E),{recursive:!0}),await oe.writeFilePromise(E,e);let I={path:h,spec:t};r&&(I.checksum=wn.makeHash(e)),await Ve.addPlugin(o.cwd,[I])}var ogt=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],Jh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=typeof this.installPath<"u"?K.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):K.resolve(ue.toPortablePath((0,ode.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:u}=await St.find(r,this.context.cwd),A=W.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=W.stringifyIdent(A),h=await Jd(r,tn);if(!Object.hasOwn(h,p))throw new zt(51,`Couldn't find a plugin named "${p}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let E=p;await _8(this,{configuration:r,report:n,target:o}),await H8(E,this,{project:u,report:n,target:o})})).exitCode()}};Jh.paths=[["plugin","import","from","sources"]],Jh.usage=nt.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` + `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]});async function _8(t,e,{checksum:r=!0,project:o,report:a}){let{configuration:n}=o,u={},A={exports:u};(0,rde.runInNewContext)(e.toString(),{module:A,exports:u});let h=`.yarn/plugins/${A.exports.name}.cjs`,E=V.resolve(o.cwd,h);a.reportInfo(0,`Saving the new plugin in ${de.pretty(n,h,"magenta")}`),await oe.mkdirPromise(V.dirname(E),{recursive:!0}),await oe.writeFilePromise(E,e);let I={path:h,spec:t};r&&(I.checksum=wn.makeHash(e)),await Ke.addPlugin(o.cwd,[I])}var tgt=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],zh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=typeof this.installPath<"u"?V.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):V.resolve(ue.toPortablePath((0,nde.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:u}=await Pt.find(r,this.context.cwd),A=W.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=W.stringifyIdent(A),h=await zd(r,rn);if(!Object.hasOwn(h,p))throw new zt(51,`Couldn't find a plugin named "${p}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let E=p;await M8(this,{configuration:r,report:n,target:o}),await U8(E,this,{project:u,report:n,target:o})})).exitCode()}};zh.paths=[["plugin","import","from","sources"]],zh.usage=nt.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations. The plugins can be referenced by their short name if sourced from the official Yarn repository. - `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]});async function H8(t,{context:e,noMinify:r},{project:o,report:a,target:n}){let u=t.replace(/@yarnpkg\//,""),{configuration:A}=o;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${u}`),a.reportSeparator(),await y2(ogt({pluginName:u,noMinify:r},n),{configuration:A,context:e,target:n}),a.reportSeparator();let p=K.resolve(n,`packages/${u}/bundles/${t}.js`),h=await oe.readFilePromise(p);await j8(t,h,{project:o,report:a})}Ye();Pt();qt();var zh=class extends ut{constructor(){super(...arguments);this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u=this.name,A=W.parseIdent(u);if(!r.plugins.has(u))throw new it(`${W.prettyIdent(r,A)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${u}.cjs`,h=K.resolve(o.cwd,p);oe.existsSync(h)&&(n.reportInfo(0,`Removing ${de.pretty(r,p,de.Type.PATH)}...`),await oe.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await Ve.updateConfiguration(o.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let I=E.filter(v=>v.path!==p);return I.length===0?Ve.deleteProperty:I.length===E.length?E:I}})})).exitCode()}};zh.paths=[["plugin","remove"]],zh.usage=nt.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` + `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]});async function U8(t,{context:e,noMinify:r},{project:o,report:a,target:n}){let u=t.replace(/@yarnpkg\//,""),{configuration:A}=o;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${u}`),a.reportSeparator(),await E2(tgt({pluginName:u,noMinify:r},n),{configuration:A,context:e,target:n}),a.reportSeparator();let p=V.resolve(n,`packages/${u}/bundles/${t}.js`),h=await oe.readFilePromise(p);await _8(t,h,{project:o,report:a})}Ye();St();qt();var Xh=class extends ut{constructor(){super(...arguments);this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd);return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u=this.name,A=W.parseIdent(u);if(!r.plugins.has(u))throw new it(`${W.prettyIdent(r,A)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${u}.cjs`,h=V.resolve(o.cwd,p);oe.existsSync(h)&&(n.reportInfo(0,`Removing ${de.pretty(r,p,de.Type.PATH)}...`),await oe.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await Ke.updateConfiguration(o.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let I=E.filter(v=>v.path!==p);return I.length===0?Ke.deleteProperty:I.length===E.length?E:I}})})).exitCode()}};Xh.paths=[["plugin","remove"]],Xh.usage=nt.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration. **Note:** The plugins have to be referenced by their name property, which can be obtained using the \`yarn plugin runtime\` command. Shorthands are not allowed. - `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]});Ye();qt();var Xh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let u=this.context.plugins.plugins.has(n),A=n;u&&(A+=" [builtin]"),a.reportJson({name:n,builtin:u}),a.reportInfo(null,`${A}`)}})).exitCode()}};Xh.paths=[["plugin","runtime"]],Xh.usage=nt.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` + `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]});Ye();qt();var Zh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let u=this.context.plugins.plugins.has(n),A=n;u&&(A+=" [builtin]"),a.reportJson({name:n,builtin:u}),a.reportInfo(null,`${A}`)}})).exitCode()}};Zh.paths=[["plugin","runtime"]],Zh.usage=nt.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins. - `,examples:[["List the currently active plugins","$0 plugin runtime"]]});Ye();Ye();qt();var Zh=class extends ut{constructor(){super(...arguments);this.idents=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=new Set;for(let A of this.idents)u.add(W.parseIdent(A).identHash);if(await o.restoreInstallState({restoreResolutions:!1}),await o.resolveEverything({cache:n,report:new Qi}),u.size>0)for(let A of o.storedPackages.values())u.has(A.identHash)&&(o.storedBuildState.delete(A.locatorHash),o.skippedBuilds.delete(A.locatorHash));else o.storedBuildState.clear(),o.skippedBuilds.clear();return await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};Zh.paths=[["rebuild"]],Zh.usage=nt.Usage({description:"rebuild the project's native packages",details:` + `,examples:[["List the currently active plugins","$0 plugin runtime"]]});Ye();Ye();qt();var $h=class extends ut{constructor(){super(...arguments);this.idents=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=new Set;for(let A of this.idents)u.add(W.parseIdent(A).identHash);if(await o.restoreInstallState({restoreResolutions:!1}),await o.resolveEverything({cache:n,report:new Qi}),u.size>0)for(let A of o.storedPackages.values())u.has(A.identHash)&&(o.storedBuildState.delete(A.locatorHash),o.skippedBuilds.delete(A.locatorHash));else o.storedBuildState.clear(),o.skippedBuilds.clear();return await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};$h.paths=[["rebuild"]],$h.usage=nt.Usage({description:"rebuild the project's native packages",details:` This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again. Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future). By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory. - `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});Ye();Ye();Ye();qt();var q8=$e(Zo());Za();var $h=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.all?o.workspaces:[a],A=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let C of this.patterns){let T=!1,L=W.parseIdent(C);for(let U of u){let J=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,q8.default)(J,C))U.manifest.peerDependenciesMeta.delete(te),h=!0,T=!0;for(let te of A){let le=U.manifest.getForScope(te),pe=[...le.values()].map(Ae=>W.stringifyIdent(Ae));for(let Ae of(0,q8.default)(pe,W.stringifyIdent(L))){let{identHash:ye}=W.parseIdent(Ae),ae=le.get(ye);if(typeof ae>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(ye),E.push([U,te,ae]),h=!0,T=!0}}}T||p.push(C)}let I=p.length>1?"Patterns":"Pattern",v=p.length>1?"don't":"doesn't",b=this.all?"any":"this";if(p.length>0)throw new it(`${I} ${de.prettyList(r,p,de.Type.CODE)} ${v} match any packages referenced by ${b} workspace`);return h?(await r.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,E),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};$h.paths=[["remove"]],$h.usage=nt.Usage({description:"remove dependencies from the project",details:` + `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});Ye();Ye();Ye();qt();var H8=$e(Zo());Za();var e0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.all?o.workspaces:[a],A=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let C of this.patterns){let R=!1,L=W.parseIdent(C);for(let U of u){let J=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,H8.default)(J,C))U.manifest.peerDependenciesMeta.delete(te),h=!0,R=!0;for(let te of A){let ae=U.manifest.getForScope(te),fe=[...ae.values()].map(ce=>W.stringifyIdent(ce));for(let ce of(0,H8.default)(fe,W.stringifyIdent(L))){let{identHash:me}=W.parseIdent(ce),he=ae.get(me);if(typeof he>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(me),E.push([U,te,he]),h=!0,R=!0}}}R||p.push(C)}let I=p.length>1?"Patterns":"Pattern",v=p.length>1?"don't":"doesn't",x=this.all?"any":"this";if(p.length>0)throw new it(`${I} ${de.prettyList(r,p,de.Type.CODE)} ${v} match any packages referenced by ${x} workspace`);return h?(await r.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,E),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};e0.paths=[["remove"]],e0.usage=nt.Usage({description:"remove dependencies from the project",details:` This command will remove the packages matching the specified patterns from the current workspace. If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: @@ -496,7 +496,7 @@ ${p} - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them. - `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]});Ye();Ye();var ade=Be("util"),zd=class extends ut{async execute(){let e=await Ve.find(this.context.cwd,this.context.plugins),{project:r,workspace:o}=await St.find(e,this.context.cwd);if(!o)throw new rr(r.cwd,this.context.cwd);return(await Nt.start({configuration:e,stdout:this.context.stdout},async n=>{let u=o.manifest.scripts,A=je.sortMap(u.keys(),E=>E),p={breakLength:1/0,colors:e.get("enableColors"),maxArrayLength:2},h=A.reduce((E,I)=>Math.max(E,I.length),0);for(let[E,I]of u.entries())n.reportInfo(null,`${E.padEnd(h," ")} ${(0,ade.inspect)(I,p)}`)})).exitCode()}};zd.paths=[["run"]];Ye();Ye();qt();var e0=class extends ut{constructor(){super(...arguments);this.inspect=ge.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=ge.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=ge.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=ge.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.require=ge.String("--require",{description:"Forwarded to the underlying Node process when executing a binary"});this.silent=ge.Boolean("--silent",{hidden:!0});this.scriptName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a,locator:n}=await St.find(r,this.context.cwd);await o.restoreInstallState();let u=this.topLevel?o.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await un.hasPackageScript(u,this.scriptName,{project:o}))return await un.executePackageScript(u,this.scriptName,this.args,{project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let A=await un.getPackageAccessibleBinaries(u,{project:o});if(A.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await un.executePackageAccessibleBinary(u,this.scriptName,this.args,{cwd:this.context.cwd,project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:A})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(o.workspaces.map(async I=>I.manifest.scripts.has(this.scriptName)?I:null))).filter(I=>I!==null);if(E.length===1)return await un.executeWorkspaceScript(E[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new it("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[E,I]of uC)for(let v of I)if(h.length>=v.length&&JSON.stringify(h.slice(0,v.length))===JSON.stringify(v))throw new it(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${E} plugin. You can install it with "yarn plugin import ${E}".`);throw new it(`Couldn't find a script named "${this.scriptName}".`)}}};e0.paths=[["run"]],e0.usage=nt.Usage({description:"run a script defined in the package.json",details:` + `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]});Ye();Ye();qt();var ide=ve("util"),Xd=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);return(await Nt.start({configuration:r,stdout:this.context.stdout,json:this.json},async u=>{let A=a.manifest.scripts,p=_e.sortMap(A.keys(),I=>I),h={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},E=p.reduce((I,v)=>Math.max(I,v.length),0);for(let[I,v]of A.entries())u.reportInfo(null,`${I.padEnd(E," ")} ${(0,ide.inspect)(v,h)}`),u.reportJson({name:I,script:v})})).exitCode()}};Xd.paths=[["run"]];Ye();Ye();qt();var t0=class extends ut{constructor(){super(...arguments);this.inspect=ge.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=ge.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=ge.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=ge.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.require=ge.String("--require",{description:"Forwarded to the underlying Node process when executing a binary"});this.silent=ge.Boolean("--silent",{hidden:!0});this.scriptName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a,locator:n}=await Pt.find(r,this.context.cwd);await o.restoreInstallState();let u=this.topLevel?o.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await un.hasPackageScript(u,this.scriptName,{project:o}))return await un.executePackageScript(u,this.scriptName,this.args,{project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let A=await un.getPackageAccessibleBinaries(u,{project:o});if(A.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await un.executePackageAccessibleBinary(u,this.scriptName,this.args,{cwd:this.context.cwd,project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:A})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(o.workspaces.map(async I=>I.manifest.scripts.has(this.scriptName)?I:null))).filter(I=>I!==null);if(E.length===1)return await un.executeWorkspaceScript(E[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new it("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[E,I]of AC)for(let v of I)if(h.length>=v.length&&JSON.stringify(h.slice(0,v.length))===JSON.stringify(v))throw new it(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${E} plugin. You can install it with "yarn plugin import ${E}".`);throw new it(`Couldn't find a script named "${this.scriptName}".`)}}};t0.paths=[["run"]],t0.usage=nt.Usage({description:"run a script defined in the package.json",details:` This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace: - If the \`scripts\` field from your local package.json contains a matching script name, its definition will get executed. @@ -506,32 +506,32 @@ ${p} - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed. Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax). - `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]});Ye();Ye();qt();var t0=class extends ut{constructor(){super(...arguments);this.descriptor=ge.String();this.resolution=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(await o.restoreInstallState({restoreResolutions:!1}),!a)throw new rr(o.cwd,this.context.cwd);let u=W.parseDescriptor(this.descriptor,!0),A=W.makeDescriptor(u,this.resolution);return o.storedDescriptors.set(u.descriptorHash,u),o.storedDescriptors.set(A.descriptorHash,A),o.resolutionAliases.set(u.descriptorHash,A.descriptorHash),await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};t0.paths=[["set","resolution"]],t0.usage=nt.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, edit the `resolutions` field in your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});Ye();Pt();qt();var lde=$e(Zo()),r0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=o.topLevelWorkspace,A=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of u.manifest.resolutions)h.startsWith("portal:")&&A.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=K.resolve(this.context.cwd,ue.toPortablePath(p));if(je.isPathLike(p)){let E=await Ve.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(!v)throw new rr(I.cwd,h);if(this.all){for(let b of I.workspaces)b.manifest.name&&A.add(W.stringifyIdent(b.anchoredLocator));if(A.size===0)throw new it("No workspace found to be unlinked in the target project")}else{if(!v.manifest.name)throw new it("The target workspace doesn't have a name and thus cannot be unlinked");A.add(W.stringifyIdent(v.anchoredLocator))}}else{let E=[...u.manifest.resolutions.map(({pattern:I})=>I.descriptor.fullName)];for(let I of(0,lde.default)(E,p))A.add(I)}}return u.manifest.resolutions=u.manifest.resolutions.filter(({pattern:p})=>!A.has(p.descriptor.fullName)),await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};r0.paths=[["unlink"]],r0.usage=nt.Usage({description:"disconnect the local project from another one",details:` + `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]});Ye();Ye();qt();var r0=class extends ut{constructor(){super(...arguments);this.descriptor=ge.String();this.resolution=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(await o.restoreInstallState({restoreResolutions:!1}),!a)throw new rr(o.cwd,this.context.cwd);let u=W.parseDescriptor(this.descriptor,!0),A=W.makeDescriptor(u,this.resolution);return o.storedDescriptors.set(u.descriptorHash,u),o.storedDescriptors.set(A.descriptorHash,A),o.resolutionAliases.set(u.descriptorHash,A.descriptorHash),await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};r0.paths=[["set","resolution"]],r0.usage=nt.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, edit the `resolutions` field in your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});Ye();St();qt();var sde=$e(Zo()),n0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=o.topLevelWorkspace,A=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of u.manifest.resolutions)h.startsWith("portal:")&&A.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=V.resolve(this.context.cwd,ue.toPortablePath(p));if(_e.isPathLike(p)){let E=await Ke.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await Pt.find(E,h);if(!v)throw new rr(I.cwd,h);if(this.all){for(let x of I.workspaces)x.manifest.name&&A.add(W.stringifyIdent(x.anchoredLocator));if(A.size===0)throw new it("No workspace found to be unlinked in the target project")}else{if(!v.manifest.name)throw new it("The target workspace doesn't have a name and thus cannot be unlinked");A.add(W.stringifyIdent(v.anchoredLocator))}}else{let E=[...u.manifest.resolutions.map(({pattern:I})=>I.descriptor.fullName)];for(let I of(0,sde.default)(E,p))A.add(I)}}return u.manifest.resolutions=u.manifest.resolutions.filter(({pattern:p})=>!A.has(p.descriptor.fullName)),await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};n0.paths=[["unlink"]],n0.usage=nt.Usage({description:"disconnect the local project from another one",details:` This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments. - `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]});Ye();Ye();Ye();qt();var cde=$e(A2()),G8=$e(Zo());Za();var Kf=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=[...o.storedDescriptors.values()],A=u.map(E=>W.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(W.parseDescriptor(E).range!=="unknown")throw new it("Ranges aren't allowed when using --recursive");for(let I of(0,G8.default)(A,E)){let v=W.parseIdent(I);p.add(v.identHash)}}let h=u.filter(E=>p.has(E.identHash));for(let E of h)o.storedDescriptors.delete(E.descriptorHash),o.storedResolutions.delete(E.descriptorHash);return await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=p2(this,o),h=A?["keep","reuse","project","latest"]:["project","latest"],E=[],I=[];for(let L of this.patterns){let U=!1,J=W.parseDescriptor(L),te=W.stringifyIdent(J);for(let le of o.workspaces)for(let pe of["dependencies","devDependencies"]){let ye=[...le.manifest.getForScope(pe).values()].map(we=>W.stringifyIdent(we)),ae=te==="*"?ye:(0,G8.default)(ye,te);for(let we of ae){let Pe=W.parseIdent(we),g=le.manifest[pe].get(Pe.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let Ee=W.makeDescriptor(Pe,J.range);E.push(Promise.resolve().then(async()=>[le,pe,g,await h2(Ee,{project:o,workspace:le,cache:n,target:pe,fixed:u,modifier:p,strategies:h})])),U=!0}}U||I.push(L)}if(I.length>1)throw new it(`Patterns ${de.prettyList(r,I,de.Type.CODE)} don't match any packages referenced by any workspace`);if(I.length>0)throw new it(`Pattern ${de.prettyList(r,I,de.Type.CODE)} doesn't match any packages referenced by any workspace`);let v=await Promise.all(E),b=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async L=>{for(let[,,U,{suggestions:J,rejections:te}]of v){let le=J.filter(pe=>pe.descriptor!==null);if(le.length===0){let[pe]=te;if(typeof pe>"u")throw new Error("Assertion failed: Expected an error to have been set");let Ae=this.cli.error(pe);o.configuration.get("enableNetwork")?L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range + `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]});Ye();Ye();Ye();qt();var ode=$e(f2()),q8=$e(Zo());Za();var Jf=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.patterns=ge.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=[...o.storedDescriptors.values()],A=u.map(E=>W.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(W.parseDescriptor(E).range!=="unknown")throw new it("Ranges aren't allowed when using --recursive");for(let I of(0,q8.default)(A,E)){let v=W.parseIdent(I);p.add(v.identHash)}}let h=u.filter(E=>p.has(E.identHash));for(let E of h)o.storedDescriptors.delete(E.descriptorHash),o.storedResolutions.delete(E.descriptorHash);return await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=h2(this,o),h=A?["keep","reuse","project","latest"]:["project","latest"],E=[],I=[];for(let L of this.patterns){let U=!1,J=W.parseDescriptor(L),te=W.stringifyIdent(J);for(let ae of o.workspaces)for(let fe of["dependencies","devDependencies"]){let me=[...ae.manifest.getForScope(fe).values()].map(Be=>W.stringifyIdent(Be)),he=te==="*"?me:(0,q8.default)(me,te);for(let Be of he){let we=W.parseIdent(Be),g=ae.manifest[fe].get(we.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let Ee=W.makeDescriptor(we,J.range);E.push(Promise.resolve().then(async()=>[ae,fe,g,await g2(Ee,{project:o,workspace:ae,cache:n,target:fe,fixed:u,modifier:p,strategies:h})])),U=!0}}U||I.push(L)}if(I.length>1)throw new it(`Patterns ${de.prettyList(r,I,de.Type.CODE)} don't match any packages referenced by any workspace`);if(I.length>0)throw new it(`Pattern ${de.prettyList(r,I,de.Type.CODE)} doesn't match any packages referenced by any workspace`);let v=await Promise.all(E),x=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async L=>{for(let[,,U,{suggestions:J,rejections:te}]of v){let ae=J.filter(fe=>fe.descriptor!==null);if(ae.length===0){let[fe]=te;if(typeof fe>"u")throw new Error("Assertion failed: Expected an error to have been set");let ce=this.cli.error(fe);o.configuration.get("enableNetwork")?L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range -${Ae}`):L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) +${ce}`):L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) -${Ae}`)}else le.length>1&&!A&&L.reportError(27,`${W.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(b.hasErrors())return b.exitCode();let C=!1,T=[];for(let[L,U,,{suggestions:J}]of v){let te,le=J.filter(ae=>ae.descriptor!==null),pe=le[0].descriptor,Ae=le.every(ae=>W.areDescriptorsEqual(ae.descriptor,pe));le.length===1||Ae?te=pe:(C=!0,{answer:te}=await(0,cde.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${W.prettyWorkspace(r,L)} \u276F ${U}?`,choices:J.map(({descriptor:ae,name:we,reason:Pe})=>ae?{name:we,hint:Pe,descriptor:ae}:{name:we,hint:Pe,disabled:!0}),onCancel:()=>process.exit(130),result(ae){return this.find(ae,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let ye=L.manifest[U].get(te.identHash);if(typeof ye>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(ye.descriptorHash!==te.descriptorHash)L.manifest[U].set(te.identHash,te),T.push([L,U,ye,te]);else{let ae=r.makeResolver(),we={project:o,resolver:ae},Pe=r.normalizeDependency(ye),g=ae.bindDescriptor(Pe,L.anchoredLocator,we);o.forgetResolution(g)}}return await r.triggerMultipleHooks(L=>L.afterWorkspaceDependencyReplacement,T),C&&this.context.stdout.write(` -`),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Kf.paths=[["up"]],Kf.usage=nt.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),Kf.schema=[lI("recursive",Gu.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];Ye();Ye();Ye();qt();var n0=class extends ut{constructor(){super(...arguments);this.recursive=ge.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=ge.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=W.parseIdent(this.package).identHash,u=this.recursive?lgt(o,n,{configuration:r,peers:this.peers}):agt(o,n,{configuration:r,peers:this.peers});$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};n0.paths=[["why"]],n0.usage=nt.Usage({description:"display the reason why a package is needed",details:` +${ce}`)}else ae.length>1&&!A&&L.reportError(27,`${W.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(x.hasErrors())return x.exitCode();let C=!1,R=[];for(let[L,U,,{suggestions:J}]of v){let te,ae=J.filter(he=>he.descriptor!==null),fe=ae[0].descriptor,ce=ae.every(he=>W.areDescriptorsEqual(he.descriptor,fe));ae.length===1||ce?te=fe:(C=!0,{answer:te}=await(0,ode.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${W.prettyWorkspace(r,L)} \u276F ${U}?`,choices:J.map(({descriptor:he,name:Be,reason:we})=>he?{name:Be,hint:we,descriptor:he}:{name:Be,hint:we,disabled:!0}),onCancel:()=>process.exit(130),result(he){return this.find(he,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let me=L.manifest[U].get(te.identHash);if(typeof me>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(me.descriptorHash!==te.descriptorHash)L.manifest[U].set(te.identHash,te),R.push([L,U,me,te]);else{let he=r.makeResolver(),Be={project:o,resolver:he},we=r.normalizeDependency(me),g=he.bindDescriptor(we,L.anchoredLocator,Be);o.forgetResolution(g)}}return await r.triggerMultipleHooks(L=>L.afterWorkspaceDependencyReplacement,R),C&&this.context.stdout.write(` +`),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Jf.paths=[["up"]],Jf.usage=nt.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),Jf.schema=[cI("recursive",Gu.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];Ye();Ye();Ye();qt();var i0=class extends ut{constructor(){super(...arguments);this.recursive=ge.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=ge.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=W.parseIdent(this.package).identHash,u=this.recursive?ngt(o,n,{configuration:r,peers:this.peers}):rgt(o,n,{configuration:r,peers:this.peers});$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};i0.paths=[["why"]],i0.usage=nt.Usage({description:"display the reason why a package is needed",details:` This command prints the exact reasons why a package appears in the dependency tree. If \`-R,--recursive\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree. - `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});function agt(t,e,{configuration:r,peers:o}){let a=je.sortMap(t.storedPackages.values(),A=>W.stringifyLocator(A)),n={},u={children:n};for(let A of a){let p={};for(let E of A.dependencies.values()){if(!o&&A.peerDependencies.has(E.identHash))continue;let I=t.storedResolutions.get(E.descriptorHash);if(!I)throw new Error("Assertion failed: The resolution should have been registered");let v=t.storedPackages.get(I);if(!v)throw new Error("Assertion failed: The package should have been registered");if(v.identHash!==e)continue;{let C=W.stringifyLocator(A);n[C]={value:[A,de.Type.LOCATOR],children:p}}let b=W.stringifyLocator(v);p[b]={value:[{descriptor:E,locator:v},de.Type.DEPENDENT]}}}return u}function lgt(t,e,{configuration:r,peers:o}){let a=je.sortMap(t.workspaces,v=>W.stringifyLocator(v.anchoredLocator)),n=new Set,u=new Set,A=v=>{if(n.has(v.locatorHash))return u.has(v.locatorHash);if(n.add(v.locatorHash),v.identHash===e)return u.add(v.locatorHash),!0;let b=!1;v.identHash===e&&(b=!0);for(let C of v.dependencies.values()){if(!o&&v.peerDependencies.has(C.identHash))continue;let T=t.storedResolutions.get(C.descriptorHash);if(!T)throw new Error("Assertion failed: The resolution should have been registered");let L=t.storedPackages.get(T);if(!L)throw new Error("Assertion failed: The package should have been registered");A(L)&&(b=!0)}return b&&u.add(v.locatorHash),b};for(let v of a)A(v.anchoredPackage);let p=new Set,h={},E={children:h},I=(v,b,C)=>{if(!u.has(v.locatorHash))return;let T=C!==null?de.tuple(de.Type.DEPENDENT,{locator:v,descriptor:C}):de.tuple(de.Type.LOCATOR,v),L={},U={value:T,children:L},J=W.stringifyLocator(v);if(b[J]=U,!p.has(v.locatorHash)&&(p.add(v.locatorHash),!(C!==null&&t.tryWorkspaceByLocator(v))))for(let te of v.dependencies.values()){if(!o&&v.peerDependencies.has(te.identHash))continue;let le=t.storedResolutions.get(te.descriptorHash);if(!le)throw new Error("Assertion failed: The resolution should have been registered");let pe=t.storedPackages.get(le);if(!pe)throw new Error("Assertion failed: The package should have been registered");I(pe,L,te)}};for(let v of a)I(v.anchoredPackage,h,null);return E}Ye();var eH={};Kt(eH,{GitFetcher:()=>C2,GitResolver:()=>w2,default:()=>bgt,gitUtils:()=>ra});Ye();Pt();var ra={};Kt(ra,{TreeishProtocols:()=>E2,clone:()=>$8,fetchBase:()=>Qde,fetchChangedFiles:()=>Fde,fetchChangedWorkspaces:()=>Sgt,fetchRoot:()=>kde,isGitUrl:()=>EC,lsRemote:()=>bde,normalizeLocator:()=>Pgt,normalizeRepoUrl:()=>mC,resolveUrl:()=>Z8,splitRepoUrl:()=>i0,validateRepoUrl:()=>X8});Ye();Pt();qt();var Pde=$e(Bde()),Sde=$e(EU()),yC=$e(Be("querystring")),J8=$e(zn());function K8(t,e,r){let o=t.indexOf(r);return t.lastIndexOf(e,o>-1?o:1/0)}function vde(t){try{return new URL(t)}catch{return}}function vgt(t){let e=K8(t,"@","#"),r=K8(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),K8(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function Dde(t){return vde(t)||vde(vgt(t))}function mC(t,{git:e=!1}={}){if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/|git:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){let r=Dde(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function xde(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var Dgt=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],E2=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(E2||{});function EC(t){return t?Dgt.some(e=>!!t.match(e)):!1}function i0(t){t=mC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),o=t.slice(e+1);if(o.match(/^[a-z]+=/)){let a=yC.default.parse(o);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(E2).find(p=>Object.hasOwn(a,p)),[u,A]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(E2))delete a[p];return{repo:r,treeish:{protocol:u,request:A},extra:a}}else{let a=o.indexOf(":"),[n,u]=a===-1?[null,o]:[o.slice(0,a),o.slice(a+1)];return{repo:r,treeish:{protocol:n,request:u},extra:{}}}}function Pgt(t){return W.makeLocator(t,mC(t.reference))}function X8(t,{configuration:e}){let r=mC(t,{git:!0});if(!rn.getNetworkSettings(`https://${(0,Pde.default)(r).resource}`,{configuration:e}).enableNetwork)throw new zt(80,`Request to '${r}' has been blocked because of your configuration settings`);return r}async function bde(t,e){let r=X8(t,{configuration:e}),o=await z8("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:xde()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,u;for(;(u=n.exec(o.stdout))!==null;)a.set(u[2],u[1]);return a}async function Z8(t,e){let{repo:r,treeish:{protocol:o,request:a},extra:n}=i0(t),u=await bde(r,e),A=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return yC.default.stringify({...n,commit:E})}case"head":{let I=u.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof I>"u")throw new Error(`Unknown head ("${E}")`);return yC.default.stringify({...n,commit:I})}case"tag":{let I=u.get(`refs/tags/${E}`);if(typeof I>"u")throw new Error(`Unknown tag ("${E}")`);return yC.default.stringify({...n,commit:I})}case"semver":{let I=kr.validRange(E);if(!I)throw new Error(`Invalid range ("${E}")`);let v=new Map([...u.entries()].filter(([C])=>C.startsWith("refs/tags/")).map(([C,T])=>[J8.default.parse(C.slice(10)),T]).filter(C=>C[0]!==null)),b=J8.default.maxSatisfying([...v.keys()],I);if(b===null)throw new Error(`No matching range ("${E}")`);return yC.default.stringify({...n,commit:v.get(b)})}case null:{let I;if((I=p("commit",E))!==null||(I=p("tag",E))!==null||(I=p("head",E))!==null)return I;throw E.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,E)=>{try{return A(h,E)}catch{return null}};return mC(`${r}#${A(o,a)}`)}async function $8(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:o,request:a}}=i0(t);if(o!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=X8(r,{configuration:e}),u=await oe.mktempPromise(),A={cwd:u,env:xde()};return await z8("cloning the repository",["clone","-c core.autocrlf=false",n,ue.fromPortablePath(u)],A,{configuration:e,normalizedRepoUrl:n}),await z8("switching branch",["checkout",`${a}`],A,{configuration:e,normalizedRepoUrl:n}),u})}async function kde(t){let e,r=t;do{if(e=r,await oe.existsPromise(K.join(e,".git")))return e;r=K.dirname(e)}while(r!==e);return null}async function Qde(t,{baseRefs:e}){if(e.length===0)throw new it("Can't run this command with zero base refs specified.");let r=[];for(let A of e){let{code:p}=await Ur.execvp("git",["merge-base",A,"HEAD"],{cwd:t});p===0&&r.push(A)}if(r.length===0)throw new it(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:o}=await Ur.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=o.trim(),{stdout:n}=await Ur.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),u=n.trim();return{hash:a,title:u}}async function Fde(t,{base:e,project:r}){let o=je.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Ur.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>K.resolve(t,ue.toPortablePath(h))),{stdout:u}=await Ur.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),A=u.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>K.resolve(t,ue.toPortablePath(h))),p=[...new Set([...n,...A].sort())];return o?p.filter(h=>!K.relative(r.cwd,h).match(o)):p}async function Sgt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let r=[K.resolve(e.cwd,dr.lockfile),K.resolve(e.cwd,e.configuration.get("cacheFolder")),K.resolve(e.cwd,e.configuration.get("installStatePath")),K.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(u=>u.populateYarnPaths,e,u=>{u!=null&&r.push(u)});let o=await kde(e.configuration.projectCwd);if(o==null)throw new it("This command can only be run on Git repositories");let a=await Qde(o,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await Fde(o,{base:a.hash,project:e});return new Set(je.mapAndFilter(n,u=>{let A=e.tryWorkspaceByFilePath(u);return A===null?je.mapAndFilter.skip:r.some(p=>u.startsWith(p))?je.mapAndFilter.skip:A}))}async function z8(t,e,r,{configuration:o,normalizedRepoUrl:a}){try{return await Ur.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Ur.ExecError))throw n;let u=n.reportExtra,A=n.stderr.toString();throw new zt(1,`Failed ${t}`,p=>{p.reportError(1,` ${de.prettyField(o,{label:"Repository URL",value:de.tuple(de.Type.URL,a)})}`);for(let h of A.matchAll(/^(.+?): (.*)$/gm)){let[,E,I]=h;E=E.toLowerCase();let v=E==="error"?"Error":`${(0,Sde.default)(E)} Error`;p.reportError(1,` ${de.prettyField(o,{label:v,value:de.tuple(de.Type.NO_HINT,I)})}`)}u?.(p)})}}var C2=class{supports(e,r){return EC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,o);let n={...r,checksums:a},u=await this.downloadHosted(e,n);if(u!==null)return u;let[A,p,h]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:A,releaseFs:p,prefixPath:W.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(o=>o.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let o=await $8(e.reference,r.project.configuration),a=i0(e.reference),n=K.join(o,"package.tgz");await un.prepareExternalProject(o,n,{configuration:r.project.configuration,report:r.report,workspace:a.extra.workspace,locator:e});let u=await oe.readFilePromise(n);return await je.releaseAfterUseAsync(async()=>await Xi.convertToZip(u,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1}))}};Ye();Ye();var w2=class{supportsDescriptor(e,r){return EC(e.range)}supportsLocator(e,r){return EC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=await Z8(e.range,o.project.configuration);return[W.makeLocator(e,a)]}async getSatisfying(e,r,o,a){let n=i0(e.range);return{locators:o.filter(A=>{if(A.identHash!==e.identHash)return!1;let p=i0(A.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var xgt={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:"STRING",isArray:!0,isNullable:!1,default:["master","origin/master","upstream/master","main","origin/main","upstream/main"]},changesetIgnorePatterns:{description:"Array of glob patterns; files matching them will be ignored when fetching the changed files",type:"STRING",default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:"NUMBER",default:2}},fetchers:[C2],resolvers:[w2]};var bgt=xgt;qt();var s0=class extends ut{constructor(){super(...arguments);this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.noPrivate=ge.Boolean("--no-private",{description:"Exclude workspaces that have the private field set to true"});this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let u=this.since?await ra.fetchChangedWorkspaces({ref:this.since,project:o}):o.workspaces,A=new Set(u);if(this.recursive)for(let p of[...u].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)A.add(h);for(let p of A){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let I=new Set,v=new Set;for(let b of Mt.hardDependencies)for(let[C,T]of h.getForScope(b)){let L=o.tryWorkspaceByDescriptor(T);L===null?o.workspacesByIdent.has(C)&&v.add(T):I.add(L)}E={workspaceDependencies:Array.from(I).map(b=>b.relativeCwd),mismatchedWorkspaceDependencies:Array.from(v).map(b=>W.stringifyDescriptor(b))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?W.stringifyIdent(h.name):null,...E})}})).exitCode()}};s0.paths=[["workspaces","list"]],s0.usage=nt.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project.\n\n - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\n\n - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "});Ye();Ye();qt();var o0=class extends ut{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=o.workspaces,u=new Map(n.map(p=>[W.stringifyIdent(p.anchoredLocator),p])),A=u.get(this.workspaceName);if(A===void 0){let p=Array.from(u.keys()).sort();throw new it(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: + `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});function rgt(t,e,{configuration:r,peers:o}){let a=_e.sortMap(t.storedPackages.values(),A=>W.stringifyLocator(A)),n={},u={children:n};for(let A of a){let p={};for(let E of A.dependencies.values()){if(!o&&A.peerDependencies.has(E.identHash))continue;let I=t.storedResolutions.get(E.descriptorHash);if(!I)throw new Error("Assertion failed: The resolution should have been registered");let v=t.storedPackages.get(I);if(!v)throw new Error("Assertion failed: The package should have been registered");if(v.identHash!==e)continue;{let C=W.stringifyLocator(A);n[C]={value:[A,de.Type.LOCATOR],children:p}}let x=W.stringifyLocator(v);p[x]={value:[{descriptor:E,locator:v},de.Type.DEPENDENT]}}}return u}function ngt(t,e,{configuration:r,peers:o}){let a=_e.sortMap(t.workspaces,v=>W.stringifyLocator(v.anchoredLocator)),n=new Set,u=new Set,A=v=>{if(n.has(v.locatorHash))return u.has(v.locatorHash);if(n.add(v.locatorHash),v.identHash===e)return u.add(v.locatorHash),!0;let x=!1;v.identHash===e&&(x=!0);for(let C of v.dependencies.values()){if(!o&&v.peerDependencies.has(C.identHash))continue;let R=t.storedResolutions.get(C.descriptorHash);if(!R)throw new Error("Assertion failed: The resolution should have been registered");let L=t.storedPackages.get(R);if(!L)throw new Error("Assertion failed: The package should have been registered");A(L)&&(x=!0)}return x&&u.add(v.locatorHash),x};for(let v of a)A(v.anchoredPackage);let p=new Set,h={},E={children:h},I=(v,x,C)=>{if(!u.has(v.locatorHash))return;let R=C!==null?de.tuple(de.Type.DEPENDENT,{locator:v,descriptor:C}):de.tuple(de.Type.LOCATOR,v),L={},U={value:R,children:L},J=W.stringifyLocator(v);if(x[J]=U,!p.has(v.locatorHash)&&(p.add(v.locatorHash),!(C!==null&&t.tryWorkspaceByLocator(v))))for(let te of v.dependencies.values()){if(!o&&v.peerDependencies.has(te.identHash))continue;let ae=t.storedResolutions.get(te.descriptorHash);if(!ae)throw new Error("Assertion failed: The resolution should have been registered");let fe=t.storedPackages.get(ae);if(!fe)throw new Error("Assertion failed: The package should have been registered");I(fe,L,te)}};for(let v of a)I(v.anchoredPackage,h,null);return E}Ye();var Z8={};Vt(Z8,{GitFetcher:()=>w2,GitResolver:()=>I2,default:()=>vgt,gitUtils:()=>ra});Ye();St();var ra={};Vt(ra,{TreeishProtocols:()=>C2,clone:()=>X8,fetchBase:()=>bde,fetchChangedFiles:()=>xde,fetchChangedWorkspaces:()=>Igt,fetchRoot:()=>Pde,isGitUrl:()=>CC,lsRemote:()=>Sde,normalizeLocator:()=>wgt,normalizeRepoUrl:()=>yC,resolveUrl:()=>z8,splitRepoUrl:()=>s0,validateRepoUrl:()=>J8});Ye();St();qt();var Bde=$e(Cde()),vde=$e(mU()),EC=$e(ve("querystring")),K8=$e(zn());function W8(t,e,r){let o=t.indexOf(r);return t.lastIndexOf(e,o>-1?o:1/0)}function wde(t){try{return new URL(t)}catch{return}}function Egt(t){let e=W8(t,"@","#"),r=W8(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),W8(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function Ide(t){return wde(t)||wde(Egt(t))}function yC(t,{git:e=!1}={}){if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/|git:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){let r=Ide(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function Dde(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var Cgt=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],C2=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(C2||{});function CC(t){return t?Cgt.some(e=>!!t.match(e)):!1}function s0(t){t=yC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),o=t.slice(e+1);if(o.match(/^[a-z]+=/)){let a=EC.default.parse(o);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(C2).find(p=>Object.hasOwn(a,p)),[u,A]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(C2))delete a[p];return{repo:r,treeish:{protocol:u,request:A},extra:a}}else{let a=o.indexOf(":"),[n,u]=a===-1?[null,o]:[o.slice(0,a),o.slice(a+1)];return{repo:r,treeish:{protocol:n,request:u},extra:{}}}}function wgt(t){return W.makeLocator(t,yC(t.reference))}function J8(t,{configuration:e}){let r=yC(t,{git:!0});if(!nn.getNetworkSettings(`https://${(0,Bde.default)(r).resource}`,{configuration:e}).enableNetwork)throw new zt(80,`Request to '${r}' has been blocked because of your configuration settings`);return r}async function Sde(t,e){let r=J8(t,{configuration:e}),o=await V8("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:Dde()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,u;for(;(u=n.exec(o.stdout))!==null;)a.set(u[2],u[1]);return a}async function z8(t,e){let{repo:r,treeish:{protocol:o,request:a},extra:n}=s0(t),u=await Sde(r,e),A=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return EC.default.stringify({...n,commit:E})}case"head":{let I=u.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof I>"u")throw new Error(`Unknown head ("${E}")`);return EC.default.stringify({...n,commit:I})}case"tag":{let I=u.get(`refs/tags/${E}`);if(typeof I>"u")throw new Error(`Unknown tag ("${E}")`);return EC.default.stringify({...n,commit:I})}case"semver":{let I=kr.validRange(E);if(!I)throw new Error(`Invalid range ("${E}")`);let v=new Map([...u.entries()].filter(([C])=>C.startsWith("refs/tags/")).map(([C,R])=>[K8.default.parse(C.slice(10)),R]).filter(C=>C[0]!==null)),x=K8.default.maxSatisfying([...v.keys()],I);if(x===null)throw new Error(`No matching range ("${E}")`);return EC.default.stringify({...n,commit:v.get(x)})}case null:{let I;if((I=p("commit",E))!==null||(I=p("tag",E))!==null||(I=p("head",E))!==null)return I;throw E.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,E)=>{try{return A(h,E)}catch{return null}};return yC(`${r}#${A(o,a)}`)}async function X8(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:o,request:a}}=s0(t);if(o!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=J8(r,{configuration:e}),u=await oe.mktempPromise(),A={cwd:u,env:Dde()};return await V8("cloning the repository",["clone","-c core.autocrlf=false",n,ue.fromPortablePath(u)],A,{configuration:e,normalizedRepoUrl:n}),await V8("switching branch",["checkout",`${a}`],A,{configuration:e,normalizedRepoUrl:n}),u})}async function Pde(t){let e,r=t;do{if(e=r,await oe.existsPromise(V.join(e,".git")))return e;r=V.dirname(e)}while(r!==e);return null}async function bde(t,{baseRefs:e}){if(e.length===0)throw new it("Can't run this command with zero base refs specified.");let r=[];for(let A of e){let{code:p}=await Ur.execvp("git",["merge-base",A,"HEAD"],{cwd:t});p===0&&r.push(A)}if(r.length===0)throw new it(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:o}=await Ur.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=o.trim(),{stdout:n}=await Ur.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),u=n.trim();return{hash:a,title:u}}async function xde(t,{base:e,project:r}){let o=_e.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Ur.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>V.resolve(t,ue.toPortablePath(h))),{stdout:u}=await Ur.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),A=u.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>V.resolve(t,ue.toPortablePath(h))),p=[...new Set([...n,...A].sort())];return o?p.filter(h=>!V.relative(r.cwd,h).match(o)):p}async function Igt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let r=[V.resolve(e.cwd,dr.lockfile),V.resolve(e.cwd,e.configuration.get("cacheFolder")),V.resolve(e.cwd,e.configuration.get("installStatePath")),V.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(u=>u.populateYarnPaths,e,u=>{u!=null&&r.push(u)});let o=await Pde(e.configuration.projectCwd);if(o==null)throw new it("This command can only be run on Git repositories");let a=await bde(o,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await xde(o,{base:a.hash,project:e});return new Set(_e.mapAndFilter(n,u=>{let A=e.tryWorkspaceByFilePath(u);return A===null?_e.mapAndFilter.skip:r.some(p=>u.startsWith(p))?_e.mapAndFilter.skip:A}))}async function V8(t,e,r,{configuration:o,normalizedRepoUrl:a}){try{return await Ur.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Ur.ExecError))throw n;let u=n.reportExtra,A=n.stderr.toString();throw new zt(1,`Failed ${t}`,p=>{p.reportError(1,` ${de.prettyField(o,{label:"Repository URL",value:de.tuple(de.Type.URL,a)})}`);for(let h of A.matchAll(/^(.+?): (.*)$/gm)){let[,E,I]=h;E=E.toLowerCase();let v=E==="error"?"Error":`${(0,vde.default)(E)} Error`;p.reportError(1,` ${de.prettyField(o,{label:v,value:de.tuple(de.Type.NO_HINT,I)})}`)}u?.(p)})}}var w2=class{supports(e,r){return CC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,o);let n={...r,checksums:a},u=await this.downloadHosted(e,n);if(u!==null)return u;let[A,p,h]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:A,releaseFs:p,prefixPath:W.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(o=>o.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let o=await X8(e.reference,r.project.configuration),a=s0(e.reference),n=V.join(o,"package.tgz");await un.prepareExternalProject(o,n,{configuration:r.project.configuration,report:r.report,workspace:a.extra.workspace,locator:e});let u=await oe.readFilePromise(n);return await _e.releaseAfterUseAsync(async()=>await Xi.convertToZip(u,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1}))}};Ye();Ye();var I2=class{supportsDescriptor(e,r){return CC(e.range)}supportsLocator(e,r){return CC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=await z8(e.range,o.project.configuration);return[W.makeLocator(e,a)]}async getSatisfying(e,r,o,a){let n=s0(e.range);return{locators:o.filter(A=>{if(A.identHash!==e.identHash)return!1;let p=s0(A.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var Bgt={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:"STRING",isArray:!0,isNullable:!1,default:["master","origin/master","upstream/master","main","origin/main","upstream/main"]},changesetIgnorePatterns:{description:"Array of glob patterns; files matching them will be ignored when fetching the changed files",type:"STRING",default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:"NUMBER",default:2}},fetchers:[w2],resolvers:[I2]};var vgt=Bgt;qt();var o0=class extends ut{constructor(){super(...arguments);this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.noPrivate=ge.Boolean("--no-private",{description:"Exclude workspaces that have the private field set to true"});this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let u=this.since?await ra.fetchChangedWorkspaces({ref:this.since,project:o}):o.workspaces,A=new Set(u);if(this.recursive)for(let p of[...u].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)A.add(h);for(let p of A){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let I=new Set,v=new Set;for(let x of Ot.hardDependencies)for(let[C,R]of h.getForScope(x)){let L=o.tryWorkspaceByDescriptor(R);L===null?o.workspacesByIdent.has(C)&&v.add(R):I.add(L)}E={workspaceDependencies:Array.from(I).map(x=>x.relativeCwd),mismatchedWorkspaceDependencies:Array.from(v).map(x=>W.stringifyDescriptor(x))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?W.stringifyIdent(h.name):null,...E})}})).exitCode()}};o0.paths=[["workspaces","list"]],o0.usage=nt.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project.\n\n - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\n\n - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "});Ye();Ye();qt();var a0=class extends ut{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=o.workspaces,u=new Map(n.map(p=>[W.stringifyIdent(p.anchoredLocator),p])),A=u.get(this.workspaceName);if(A===void 0){let p=Array.from(u.keys()).sort();throw new it(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: - ${p.join(` - - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:A.cwd})}};o0.paths=[["workspace"]],o0.usage=nt.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` + - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:A.cwd})}};a0.paths=[["workspace"]],a0.usage=nt.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` This command will run a given sub-command on a single workspace. - `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]});var kgt={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:"BOOLEAN",default:Tde.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:"STRING",values:["^","~",""],default:"^"},preferReuse:{description:"If true, `yarn add` will attempt to reuse the most common dependency range in other workspaces.",type:"BOOLEAN",default:!1}},commands:[Qh,Fh,Th,Rh,t0,Vh,Uh,s0,Wd,Vd,dC,Kd,bh,kh,Nh,Lh,Mh,Oh,_h,Hh,jh,qh,r0,Gh,Yh,Jh,Kh,zh,Wh,Xh,Zh,$h,zd,e0,Kf,n0,o0]},Qgt=kgt;var oH={};Kt(oH,{default:()=>Tgt});Ye();var kt={optional:!0},rH=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:kt}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:kt,["postcss-jsx"]:kt,["postcss-less"]:kt,["postcss-markdown"]:kt,["postcss-scss"]:kt}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:kt}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:kt}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@<=0.5.2",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:kt,"vue-template-compiler":kt}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:kt,"utf-8-validate":kt}}],["react-portal@<4.2.2",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt,"vuetify-loader":kt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":kt}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":kt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:kt}}],["consolidate@<=0.16.0",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:kt,tinyliquid:kt,"liquid-node":kt,jade:kt,"then-jade":kt,dust:kt,"dustjs-helpers":kt,"dustjs-linkedin":kt,swig:kt,"swig-templates":kt,"razor-tmpl":kt,atpl:kt,liquor:kt,twig:kt,ejs:kt,eco:kt,jazz:kt,jqtpl:kt,hamljs:kt,hamlet:kt,whiskers:kt,"haml-coffee":kt,"hogan.js":kt,templayed:kt,handlebars:kt,underscore:kt,lodash:kt,pug:kt,"then-pug":kt,qejs:kt,walrus:kt,mustache:kt,just:kt,ect:kt,mote:kt,toffee:kt,dot:kt,"bracket-template":kt,ractive:kt,nunjucks:kt,htmling:kt,"babel-core":kt,plates:kt,"react-dom":kt,react:kt,"arc-templates":kt,vash:kt,slm:kt,marko:kt,teacup:kt,"coffee-script":kt,squirrelly:kt,twing:kt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":kt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":kt,vue:kt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:kt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:kt}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":kt,"webpack-command":kt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":kt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":kt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:kt,jimp:kt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":kt,"eslint-import-resolver-typescript":kt,"eslint-import-resolver-webpack":kt,"@typescript-eslint/parser":kt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":kt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":kt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.0"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:kt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:kt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{["vue-template-compiler"]:"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["parcel@*",{peerDependenciesMeta:{["@parcel/core"]:kt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@*",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:kt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:kt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:kt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":kt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}]];var nH;function Rde(){return typeof nH>"u"&&(nH=Be("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),nH}var iH;function Nde(){return typeof iH>"u"&&(iH=Be("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),iH}var sH;function Lde(){return typeof sH>"u"&&(sH=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),sH}var Mde=new Map([[W.makeIdent(null,"fsevents").identHash,Rde],[W.makeIdent(null,"resolve").identHash,Nde],[W.makeIdent(null,"typescript").identHash,Lde]]),Fgt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,o]of rH)e(W.parseDescriptor(r,!0),o)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let o=W.parseIdent(e.slice(r.length)),a=Mde.get(o.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,o)=>typeof Mde.get(t.identHash)>"u"?t:W.makeDescriptor(t,W.makeRange({protocol:"patch:",source:W.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},Tgt=Fgt;var BH={};Kt(BH,{ConstraintsCheckCommand:()=>p0,ConstraintsQueryCommand:()=>A0,ConstraintsSourceCommand:()=>f0,default:()=>odt});Ye();Ye();B2();var wC=class{constructor(e){this.project=e}createEnvironment(){let e=new CC(["cwd","ident"]),r=new CC(["workspace","type","ident"]),o=new CC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,u=new Map;for(let A of this.project.storedPackages.values()){let p=Array.from(A.peerDependencies.values(),h=>[W.stringifyIdent(h),h.range]);n.set(A.locatorHash,{workspace:null,ident:W.stringifyIdent(A),version:A.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional===!0))})}for(let A of this.project.storedPackages.values()){let p=n.get(A.locatorHash);p.dependencies=new Map(Array.from(A.dependencies.values(),h=>{let E=this.project.storedResolutions.get(h.descriptorHash);if(typeof E>"u")throw new Error("Assertion failed: The resolution should have been registered");let I=n.get(E);if(typeof I>"u")throw new Error("Assertion failed: The package should have been registered");return[W.stringifyIdent(h),I]})),p.dependencies.delete(p.ident)}for(let A of this.project.workspaces){let p=W.stringifyIdent(A.anchoredLocator),h=A.manifest.exportTo({}),E=n.get(A.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let I=(T,L,{caller:U=Ji.getCaller()}={})=>{let J=I2(T),te=je.getMapWithDefault(a.manifestUpdates,A.cwd),le=je.getMapWithDefault(te,J),pe=je.getSetWithDefault(le,L);U!==null&&pe.add(U)},v=T=>I(T,void 0,{caller:Ji.getCaller()}),b=T=>{je.getArrayWithDefault(a.reportedErrors,A.cwd).push(T)},C=e.insert({cwd:A.relativeCwd,ident:p,manifest:h,pkg:E,set:I,unset:v,error:b});u.set(A,C);for(let T of Mt.allDependencies)for(let L of A.manifest[T].values()){let U=W.stringifyIdent(L),J=()=>{I([T,U],void 0,{caller:Ji.getCaller()})},te=pe=>{I([T,U],pe,{caller:Ji.getCaller()})},le=null;if(T!=="peerDependencies"&&(T!=="dependencies"||!A.manifest.devDependencies.has(L.identHash))){let pe=A.anchoredPackage.dependencies.get(L.identHash);if(pe){if(typeof pe>"u")throw new Error("Assertion failed: The dependency should have been registered");let Ae=this.project.storedResolutions.get(pe.descriptorHash);if(typeof Ae>"u")throw new Error("Assertion failed: The resolution should have been registered");let ye=n.get(Ae);if(typeof ye>"u")throw new Error("Assertion failed: The package should have been registered");le=ye}}r.insert({workspace:C,ident:U,range:L.range,type:T,resolution:le,update:te,delete:J,error:b})}}for(let A of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(A);if(!p)continue;let h=u.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(A.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");E.workspace=h}return{workspaces:e,dependencies:r,packages:o,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},o=await this.project.loadUserConfig();return o?.constraints?(await o.constraints(r),e.result):null}};Ye();Ye();qt();var A0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.String()}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(x2(),S2)),o=await Ve.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a),u=this.query;return u.endsWith(".")||(u=`${u}.`),(await Nt.start({configuration:o,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(u)){let E=Array.from(Object.entries(h)),I=E.length,v=E.reduce((b,[C])=>Math.max(b,C.length),0);for(let b=0;bbgt});Ye();var kt={optional:!0},eH=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:kt}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:kt,["postcss-jsx"]:kt,["postcss-less"]:kt,["postcss-markdown"]:kt,["postcss-scss"]:kt}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:kt}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:kt}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@<=0.5.2",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:kt,"vue-template-compiler":kt}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:kt,"utf-8-validate":kt}}],["react-portal@<4.2.2",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt,"vuetify-loader":kt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":kt}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":kt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:kt}}],["consolidate@<=0.16.0",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:kt,tinyliquid:kt,"liquid-node":kt,jade:kt,"then-jade":kt,dust:kt,"dustjs-helpers":kt,"dustjs-linkedin":kt,swig:kt,"swig-templates":kt,"razor-tmpl":kt,atpl:kt,liquor:kt,twig:kt,ejs:kt,eco:kt,jazz:kt,jqtpl:kt,hamljs:kt,hamlet:kt,whiskers:kt,"haml-coffee":kt,"hogan.js":kt,templayed:kt,handlebars:kt,underscore:kt,lodash:kt,pug:kt,"then-pug":kt,qejs:kt,walrus:kt,mustache:kt,just:kt,ect:kt,mote:kt,toffee:kt,dot:kt,"bracket-template":kt,ractive:kt,nunjucks:kt,htmling:kt,"babel-core":kt,plates:kt,"react-dom":kt,react:kt,"arc-templates":kt,vash:kt,slm:kt,marko:kt,teacup:kt,"coffee-script":kt,squirrelly:kt,twing:kt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":kt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":kt,vue:kt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:kt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:kt}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":kt,"webpack-command":kt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":kt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":kt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:kt,jimp:kt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":kt,"eslint-import-resolver-typescript":kt,"eslint-import-resolver-webpack":kt,"@typescript-eslint/parser":kt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":kt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":kt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x <10.0.2",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.7"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:kt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:kt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{["vue-template-compiler"]:"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["parcel@*",{peerDependenciesMeta:{["@parcel/core"]:kt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@<5.0.0",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:kt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:kt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:kt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":kt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}],["vite-plugin-vuetify@<=1.0.2",{peerDependencies:{vue:"^3.0.0"}}],["webpack-plugin-vuetify@<=2.0.1",{peerDependencies:{vue:"^3.2.6"}}]];var tH;function Qde(){return typeof tH>"u"&&(tH=ve("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),tH}var rH;function Fde(){return typeof rH>"u"&&(rH=ve("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),rH}var nH;function Rde(){return typeof nH>"u"&&(nH=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),nH}var Tde=new Map([[W.makeIdent(null,"fsevents").identHash,Qde],[W.makeIdent(null,"resolve").identHash,Fde],[W.makeIdent(null,"typescript").identHash,Rde]]),Pgt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,o]of eH)e(W.parseDescriptor(r,!0),o)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let o=W.parseIdent(e.slice(r.length)),a=Tde.get(o.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,o)=>typeof Tde.get(t.identHash)>"u"?t:W.makeDescriptor(t,W.makeRange({protocol:"patch:",source:W.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},bgt=Pgt;var wH={};Vt(wH,{ConstraintsCheckCommand:()=>h0,ConstraintsQueryCommand:()=>f0,ConstraintsSourceCommand:()=>p0,default:()=>tdt});Ye();Ye();v2();var IC=class{constructor(e){this.project=e}createEnvironment(){let e=new wC(["cwd","ident"]),r=new wC(["workspace","type","ident"]),o=new wC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,u=new Map;for(let A of this.project.storedPackages.values()){let p=Array.from(A.peerDependencies.values(),h=>[W.stringifyIdent(h),h.range]);n.set(A.locatorHash,{workspace:null,ident:W.stringifyIdent(A),version:A.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional===!0))})}for(let A of this.project.storedPackages.values()){let p=n.get(A.locatorHash);p.dependencies=new Map(Array.from(A.dependencies.values(),h=>{let E=this.project.storedResolutions.get(h.descriptorHash);if(typeof E>"u")throw new Error("Assertion failed: The resolution should have been registered");let I=n.get(E);if(typeof I>"u")throw new Error("Assertion failed: The package should have been registered");return[W.stringifyIdent(h),I]})),p.dependencies.delete(p.ident)}for(let A of this.project.workspaces){let p=W.stringifyIdent(A.anchoredLocator),h=A.manifest.exportTo({}),E=n.get(A.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let I=(R,L,{caller:U=Ji.getCaller()}={})=>{let J=B2(R),te=_e.getMapWithDefault(a.manifestUpdates,A.cwd),ae=_e.getMapWithDefault(te,J),fe=_e.getSetWithDefault(ae,L);U!==null&&fe.add(U)},v=R=>I(R,void 0,{caller:Ji.getCaller()}),x=R=>{_e.getArrayWithDefault(a.reportedErrors,A.cwd).push(R)},C=e.insert({cwd:A.relativeCwd,ident:p,manifest:h,pkg:E,set:I,unset:v,error:x});u.set(A,C);for(let R of Ot.allDependencies)for(let L of A.manifest[R].values()){let U=W.stringifyIdent(L),J=()=>{I([R,U],void 0,{caller:Ji.getCaller()})},te=fe=>{I([R,U],fe,{caller:Ji.getCaller()})},ae=null;if(R!=="peerDependencies"&&(R!=="dependencies"||!A.manifest.devDependencies.has(L.identHash))){let fe=A.anchoredPackage.dependencies.get(L.identHash);if(fe){if(typeof fe>"u")throw new Error("Assertion failed: The dependency should have been registered");let ce=this.project.storedResolutions.get(fe.descriptorHash);if(typeof ce>"u")throw new Error("Assertion failed: The resolution should have been registered");let me=n.get(ce);if(typeof me>"u")throw new Error("Assertion failed: The package should have been registered");ae=me}}r.insert({workspace:C,ident:U,range:L.range,type:R,resolution:ae,update:te,delete:J,error:x})}}for(let A of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(A);if(!p)continue;let h=u.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(A.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");E.workspace=h}return{workspaces:e,dependencies:r,packages:o,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},o=await this.project.loadUserConfig();return o?.constraints?(await o.constraints(r),e.result):null}};Ye();Ye();qt();var f0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.String()}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(x2(),b2)),o=await Ke.find(this.context.cwd,this.context.plugins),{project:a}=await Pt.find(o,this.context.cwd),n=await r.find(a),u=this.query;return u.endsWith(".")||(u=`${u}.`),(await Nt.start({configuration:o,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(u)){let E=Array.from(Object.entries(h)),I=E.length,v=E.reduce((x,[C])=>Math.max(x,C.length),0);for(let x=0;x(x2(),S2)),o=await Ve.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};f0.paths=[["constraints","source"]],f0.usage=nt.Usage({category:"Constraints-related commands",description:"print the source code for the constraints",details:"\n This command will print the Prolog source code used by the constraints engine. Adding the `-v,--verbose` flag will print the *full* source code, including the fact database automatically compiled from the workspace manifests.\n ",examples:[["Prints the source code","yarn constraints source"],["Print the source code and the fact database","yarn constraints source -v"]]});Ye();Ye();qt();B2();var p0=class extends ut{constructor(){super(...arguments);this.fix=ge.Boolean("--fix",!1,{description:"Attempt to automatically fix unambiguous issues, following a multi-pass process"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);await o.restoreInstallState();let a=await o.loadUserConfig(),n;if(a?.constraints)n=new wC(o);else{let{Constraints:h}=await Promise.resolve().then(()=>(x2(),S2));n=await h.find(o)}let u,A=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:I,remainingErrors:v}=mk(o,E,{fix:this.fix}),b=[];for(let[C,T]of I){let L=C.manifest.indent;C.manifest=new Mt,C.manifest.indent=L,C.manifest.load(T),b.push(C.persistManifest())}if(await Promise.all(b),!(I.size>0&&h>1)){u=Gde(v,{configuration:r}),A=!1,p=!0;for(let[,C]of v)for(let T of C)T.fixable?A=!0:p=!1}}if(u.children.length===0)return 0;if(A){let h=p?`Those errors can all be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`;await Nt.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return u.children=je.sortMap(u.children,h=>h.value[1]),$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};p0.paths=[["constraints"]],p0.usage=nt.Usage({category:"Constraints-related commands",description:"check that the project constraints are met",details:` + `,examples:[["List all dependencies throughout the workspace","yarn constraints query 'workspace_has_dependency(_, DependencyName, _, _).'"]]});function Zgt(t){return typeof t!="string"?`${t}`:t.match(/^[a-zA-Z][a-zA-Z0-9_]+$/)?t:`'${t}'`}function $gt(t,e){let r=t===0,o=t===e-1;return r&&o?"":r?"\u250C ":o?"\u2514 ":"\u2502 "}Ye();qt();var p0=class extends ut{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also print the fact database automatically compiled from the workspace manifests"})}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(x2(),b2)),o=await Ke.find(this.context.cwd,this.context.plugins),{project:a}=await Pt.find(o,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};p0.paths=[["constraints","source"]],p0.usage=nt.Usage({category:"Constraints-related commands",description:"print the source code for the constraints",details:"\n This command will print the Prolog source code used by the constraints engine. Adding the `-v,--verbose` flag will print the *full* source code, including the fact database automatically compiled from the workspace manifests.\n ",examples:[["Prints the source code","yarn constraints source"],["Print the source code and the fact database","yarn constraints source -v"]]});Ye();Ye();qt();v2();var h0=class extends ut{constructor(){super(...arguments);this.fix=ge.Boolean("--fix",!1,{description:"Attempt to automatically fix unambiguous issues, following a multi-pass process"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd);await o.restoreInstallState();let a=await o.loadUserConfig(),n;if(a?.constraints)n=new IC(o);else{let{Constraints:h}=await Promise.resolve().then(()=>(x2(),b2));n=await h.find(o)}let u,A=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:I,remainingErrors:v}=gk(o,E,{fix:this.fix}),x=[];for(let[C,R]of I){let L=C.manifest.indent;C.manifest=new Ot,C.manifest.indent=L,C.manifest.load(R),x.push(C.persistManifest())}if(await Promise.all(x),!(I.size>0&&h>1)){u=Hde(v,{configuration:r}),A=!1,p=!0;for(let[,C]of v)for(let R of C)R.fixable?A=!0:p=!1}}if(u.children.length===0)return 0;if(A){let h=p?`Those errors can all be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`;await Nt.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return u.children=_e.sortMap(u.children,h=>h.value[1]),$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};h0.paths=[["constraints"]],h0.usage=nt.Usage({category:"Constraints-related commands",description:"check that the project constraints are met",details:` This command will run constraints on your project and emit errors for each one that is found but isn't met. If any error is emitted the process will exit with a non-zero exit code. If the \`--fix\` flag is used, Yarn will attempt to automatically fix the issues the best it can, following a multi-pass process (with a maximum of 10 iterations). Some ambiguous patterns cannot be autofixed, in which case you'll have to manually specify the right resolution. For more information as to how to write constraints, please consult our dedicated page on our website: https://yarnpkg.com/features/constraints. - `,examples:[["Check that all constraints are satisfied","yarn constraints"],["Autofix all unmet constraints","yarn constraints --fix"]]});B2();var sdt={configuration:{enableConstraintsChecks:{description:"If true, constraints will run during installs",type:"BOOLEAN",default:!1},constraintsPath:{description:"The path of the constraints file.",type:"ABSOLUTE_PATH",default:"./constraints.pro"}},commands:[A0,f0,p0],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),o;if(r?.constraints)o=new wC(t);else{let{Constraints:u}=await Promise.resolve().then(()=>(x2(),S2));o=await u.find(t)}let a=await o.process();if(!a)return;let{remainingErrors:n}=mk(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[u,A]of n)for(let p of A)e(84,`${de.pretty(t.configuration,u.anchoredLocator,de.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${de.pretty(t.configuration,"yarn constraints",de.Type.CODE)} for more details`)}}},odt=sdt;var vH={};Kt(vH,{CreateCommand:()=>em,DlxCommand:()=>h0,default:()=>ldt});Ye();qt();var em=class extends ut{constructor(){super(...arguments);this.pkg=ge.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let o=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=W.parseDescriptor(o),n=a.name.match(/^create(-|$)/)?a:a.scope?W.makeIdent(a.scope,`create-${a.name}`):W.makeIdent(null,`create-${a.name}`),u=W.stringifyIdent(n);return a.range!=="unknown"&&(u+=`@${a.range}`),this.cli.run(["dlx",...r,u,...this.args])}};em.paths=[["create"]];Ye();Ye();Pt();qt();var h0=class extends ut{constructor(){super(...arguments);this.packages=ge.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){return Ve.telemetry=null,await oe.mktempPromise(async r=>{let o=K.join(r,`dlx-${process.pid}`);await oe.mkdirPromise(o),await oe.writeFilePromise(K.join(o,"package.json"),`{} -`),await oe.writeFilePromise(K.join(o,"yarn.lock"),"");let a=K.join(o,".yarnrc.yml"),n=await Ve.findProjectCwd(this.context.cwd),A={enableGlobalCache:!(await Ve.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Wu(68),level:de.LogLevel.Discard}]},p=n!==null?K.join(n,".yarnrc.yml"):null;p!==null&&oe.existsSync(p)?(await oe.copyFilePromise(p,a),await Ve.updateConfiguration(o,L=>{let U=je.toMerged(L,A);return Array.isArray(L.plugins)&&(U.plugins=L.plugins.map(J=>{let te=typeof J=="string"?J:J.path,le=ue.isAbsolute(te)?te:ue.resolve(ue.fromPortablePath(n),te);return typeof J=="string"?le:{path:le,spec:J.spec}})),U})):await oe.writeJsonPromise(a,A);let h=this.packages??[this.command],E=W.parseDescriptor(this.command).name,I=await this.cli.run(["add","--fixed","--",...h],{cwd:o,quiet:this.quiet});if(I!==0)return I;this.quiet||this.context.stdout.write(` -`);let v=await Ve.find(o,this.context.plugins),{project:b,workspace:C}=await St.find(v,o);if(C===null)throw new rr(b.cwd,o);await b.restoreInstallState();let T=await un.getWorkspaceAccessibleBinaries(C);return T.has(E)===!1&&T.size===1&&typeof this.packages>"u"&&(E=Array.from(T)[0][0]),await un.executeWorkspaceAccessibleBinary(C,E,this.args,{packageAccessibleBinaries:T,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};h0.paths=[["dlx"]],h0.usage=nt.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var adt={commands:[em,h0]},ldt=adt;var SH={};Kt(SH,{ExecFetcher:()=>k2,ExecResolver:()=>Q2,default:()=>Adt,execUtils:()=>wk});Ye();Ye();Pt();var fA="exec:";var wk={};Kt(wk,{loadGeneratorFile:()=>b2,makeLocator:()=>PH,makeSpec:()=>dme,parseSpec:()=>DH});Ye();Pt();function DH(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function dme({parentLocator:t,path:e,generatorHash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PH(t,{parentLocator:e,path:r,generatorHash:o,protocol:a}){return W.makeLocator(t,dme({parentLocator:e,path:r,generatorHash:o,protocol:a}))}async function b2(t,e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(t,{protocol:e}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath)}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.join(u.prefixPath,a);return await A.readFilePromise(p,"utf8")}var k2=class{supports(e,r){return!!e.reference.startsWith(fA)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:fA});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){let o=await b2(e.reference,fA,r);return oe.mktempPromise(async a=>{let n=K.join(a,"generator.js");return await oe.writeFilePromise(n,o),oe.mktempPromise(async u=>{if(await this.generatePackage(u,e,n,r),!oe.existsSync(K.join(u,"build")))throw new Error("The script should have generated a build directory");return await Xi.makeArchiveFromDirectory(K.join(u,"build"),{prefixPath:W.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,o,a){return await oe.mktempPromise(async n=>{let u=await un.makeScriptEnv({project:a.project,binFolder:n}),A=K.join(e,"runtime.js");return await oe.mktempPromise(async p=>{let h=K.join(p,"buildfile.log"),E=K.join(e,"generator"),I=K.join(e,"build");await oe.mkdirPromise(E),await oe.mkdirPromise(I);let v={tempDir:ue.fromPortablePath(E),buildDir:ue.fromPortablePath(I),locator:W.stringifyLocator(r)};await oe.writeFilePromise(A,` + `,examples:[["Check that all constraints are satisfied","yarn constraints"],["Autofix all unmet constraints","yarn constraints --fix"]]});v2();var edt={configuration:{enableConstraintsChecks:{description:"If true, constraints will run during installs",type:"BOOLEAN",default:!1},constraintsPath:{description:"The path of the constraints file.",type:"ABSOLUTE_PATH",default:"./constraints.pro"}},commands:[f0,p0,h0],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),o;if(r?.constraints)o=new IC(t);else{let{Constraints:u}=await Promise.resolve().then(()=>(x2(),b2));o=await u.find(t)}let a=await o.process();if(!a)return;let{remainingErrors:n}=gk(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[u,A]of n)for(let p of A)e(84,`${de.pretty(t.configuration,u.anchoredLocator,de.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${de.pretty(t.configuration,"yarn constraints",de.Type.CODE)} for more details`)}}},tdt=edt;var IH={};Vt(IH,{CreateCommand:()=>tm,DlxCommand:()=>g0,default:()=>ndt});Ye();qt();var tm=class extends ut{constructor(){super(...arguments);this.pkg=ge.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let o=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=W.parseDescriptor(o),n=a.name.match(/^create(-|$)/)?a:a.scope?W.makeIdent(a.scope,`create-${a.name}`):W.makeIdent(null,`create-${a.name}`),u=W.stringifyIdent(n);return a.range!=="unknown"&&(u+=`@${a.range}`),this.cli.run(["dlx",...r,u,...this.args])}};tm.paths=[["create"]];Ye();Ye();St();qt();var g0=class extends ut{constructor(){super(...arguments);this.packages=ge.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){return Ke.telemetry=null,await oe.mktempPromise(async r=>{let o=V.join(r,`dlx-${process.pid}`);await oe.mkdirPromise(o),await oe.writeFilePromise(V.join(o,"package.json"),`{} +`),await oe.writeFilePromise(V.join(o,"yarn.lock"),"");let a=V.join(o,".yarnrc.yml"),n=await Ke.findProjectCwd(this.context.cwd),A={enableGlobalCache:!(await Ke.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Wu(68),level:de.LogLevel.Discard}]},p=n!==null?V.join(n,".yarnrc.yml"):null;p!==null&&oe.existsSync(p)?(await oe.copyFilePromise(p,a),await Ke.updateConfiguration(o,L=>{let U=_e.toMerged(L,A);return Array.isArray(L.plugins)&&(U.plugins=L.plugins.map(J=>{let te=typeof J=="string"?J:J.path,ae=ue.isAbsolute(te)?te:ue.resolve(ue.fromPortablePath(n),te);return typeof J=="string"?ae:{path:ae,spec:J.spec}})),U})):await oe.writeJsonPromise(a,A);let h=this.packages??[this.command],E=W.parseDescriptor(this.command).name,I=await this.cli.run(["add","--fixed","--",...h],{cwd:o,quiet:this.quiet});if(I!==0)return I;this.quiet||this.context.stdout.write(` +`);let v=await Ke.find(o,this.context.plugins),{project:x,workspace:C}=await Pt.find(v,o);if(C===null)throw new rr(x.cwd,o);await x.restoreInstallState();let R=await un.getWorkspaceAccessibleBinaries(C);return R.has(E)===!1&&R.size===1&&typeof this.packages>"u"&&(E=Array.from(R)[0][0]),await un.executeWorkspaceAccessibleBinary(C,E,this.args,{packageAccessibleBinaries:R,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};g0.paths=[["dlx"]],g0.usage=nt.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var rdt={commands:[tm,g0]},ndt=rdt;var DH={};Vt(DH,{ExecFetcher:()=>Q2,ExecResolver:()=>F2,default:()=>odt,execUtils:()=>Ek});Ye();Ye();St();var fA="exec:";var Ek={};Vt(Ek,{loadGeneratorFile:()=>k2,makeLocator:()=>vH,makeSpec:()=>pme,parseSpec:()=>BH});Ye();St();function BH(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function pme({parentLocator:t,path:e,generatorHash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function vH(t,{parentLocator:e,path:r,generatorHash:o,protocol:a}){return W.makeLocator(t,pme({parentLocator:e,path:r,generatorHash:o,protocol:a}))}async function k2(t,e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(t,{protocol:e}),n=V.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,n.localPath)}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.join(u.prefixPath,a);return await A.readFilePromise(p,"utf8")}var Q2=class{supports(e,r){return!!e.reference.startsWith(fA)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:fA});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){let o=await k2(e.reference,fA,r);return oe.mktempPromise(async a=>{let n=V.join(a,"generator.js");return await oe.writeFilePromise(n,o),oe.mktempPromise(async u=>{if(await this.generatePackage(u,e,n,r),!oe.existsSync(V.join(u,"build")))throw new Error("The script should have generated a build directory");return await Xi.makeArchiveFromDirectory(V.join(u,"build"),{prefixPath:W.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,o,a){return await oe.mktempPromise(async n=>{let u=await un.makeScriptEnv({project:a.project,binFolder:n}),A=V.join(e,"runtime.js");return await oe.mktempPromise(async p=>{let h=V.join(p,"buildfile.log"),E=V.join(e,"generator"),I=V.join(e,"build");await oe.mkdirPromise(E),await oe.mkdirPromise(I);let v={tempDir:ue.fromPortablePath(E),buildDir:ue.fromPortablePath(I),locator:W.stringifyLocator(r)};await oe.writeFilePromise(A,` // Expose 'Module' as a global variable Object.defineProperty(global, 'Module', { get: () => require('module'), @@ -555,133 +555,133 @@ ${Ae}`)}else le.length>1&&!A&&L.reportError(27,`${W.prettyDescriptor(r,U)} has m }, enumerable: true, }); - `);let b=u.NODE_OPTIONS||"",C=/\s*--require\s+\S*\.pnp\.c?js\s*/g;b=b.replace(C," ").trim(),u.NODE_OPTIONS=b;let{stdout:T,stderr:L}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${W.stringifyLocator(r)}) -`,prefix:W.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Ur.pipevp(process.execPath,["--require",ue.fromPortablePath(A),ue.fromPortablePath(o),W.stringifyIdent(r)],{cwd:e,env:u,stdin:null,stdout:T,stderr:L});if(U!==0)throw oe.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${de.pretty(a.project.configuration,h,de.Type.PATH)})`)})})}};Ye();Ye();var cdt=2,Q2=class{supportsDescriptor(e,r){return!!e.range.startsWith(fA)}supportsLocator(e,r){return!!e.reference.startsWith(fA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=DH(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await b2(W.makeRange({protocol:fA,source:a,selector:a,params:{locator:W.stringifyLocator(n)}}),fA,o.fetchOptions),A=wn.makeHash(`${cdt}`,u).slice(0,6);return[PH(e,{parentLocator:n,path:a,generatorHash:A,protocol:fA})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var udt={fetchers:[k2],resolvers:[Q2]},Adt=udt;var bH={};Kt(bH,{FileFetcher:()=>N2,FileResolver:()=>L2,TarballFileFetcher:()=>M2,TarballFileResolver:()=>O2,default:()=>hdt,fileUtils:()=>tm});Ye();Pt();var DC=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,F2=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Ui="file:";var tm={};Kt(tm,{fetchArchiveFromLocator:()=>R2,makeArchiveFromLocator:()=>Ik,makeBufferFromLocator:()=>xH,makeLocator:()=>PC,makeSpec:()=>mme,parseSpec:()=>T2});Ye();Pt();function T2(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function mme({parentLocator:t,path:e,hash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PC(t,{parentLocator:e,path:r,hash:o,protocol:a}){return W.makeLocator(t,mme({parentLocator:e,path:r,hash:o,protocol:a}))}async function R2(t,e){let{parentLocator:r,path:o}=W.parseFileStyleRange(t.reference,{protocol:Ui}),a=K.isAbsolute(o)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let u=n.packageFs,A=K.join(n.prefixPath,o);return await je.releaseAfterUseAsync(async()=>await u.readFilePromise(A),n.releaseFs)}async function Ik(t,{protocol:e,fetchOptions:r,inMemory:o=!1}){let{parentLocator:a,path:n}=W.parseFileStyleRange(t.reference,{protocol:e}),u=K.isAbsolute(n)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(a,r),A=u.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,u.localPath)}:u;u!==A&&u.releaseFs&&u.releaseFs();let p=A.packageFs,h=K.join(A.prefixPath,n);return await je.releaseAfterUseAsync(async()=>await Xi.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:W.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:o}),A.releaseFs)}async function xH(t,{protocol:e,fetchOptions:r}){return(await Ik(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var N2=class{supports(e,r){return!!e.reference.startsWith(Ui)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:Ui});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){return Ik(e,{protocol:Ui,fetchOptions:r})}};Ye();Ye();var fdt=2,L2=class{supportsDescriptor(e,r){return e.range.match(DC)?!0:!!e.range.startsWith(Ui)}supportsLocator(e,r){return!!e.reference.startsWith(Ui)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return DC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await xH(W.makeLocator(e,W.makeRange({protocol:Ui,source:a,selector:a,params:{locator:W.stringifyLocator(n)}})),{protocol:Ui,fetchOptions:o.fetchOptions}),A=wn.makeHash(`${fdt}`,u).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:A,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ye();var M2=class{supports(e,r){return F2.test(e.reference)?!!e.reference.startsWith(Ui):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromDisk(e,r){let o=await R2(e,r);return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();Ye();var O2=class{supportsDescriptor(e,r){return F2.test(e.range)?!!(e.range.startsWith(Ui)||DC.test(e.range)):!1}supportsLocator(e,r){return F2.test(e.reference)?!!e.reference.startsWith(Ui):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return DC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=PC(e,{parentLocator:n,path:a,hash:"",protocol:Ui}),A=await R2(u,o.fetchOptions),p=wn.makeHash(A).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:p,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var pdt={fetchers:[M2,N2],resolvers:[O2,L2]},hdt=pdt;var FH={};Kt(FH,{GithubFetcher:()=>U2,default:()=>ddt,githubUtils:()=>Bk});Ye();Pt();var Bk={};Kt(Bk,{invalidGithubUrlMessage:()=>Cme,isGithubUrl:()=>kH,parseGithubUrl:()=>QH});var yme=$e(Be("querystring")),Eme=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function kH(t){return t?Eme.some(e=>!!t.match(e)):!1}function QH(t){let e;for(let A of Eme)if(e=t.match(A),e)break;if(!e)throw new Error(Cme(t));let[,r,o,a,n="master"]=e,{commit:u}=yme.default.parse(n);return n=u||n.replace(/[^:]*:/,""),{auth:r,username:o,reponame:a,treeish:n}}function Cme(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var U2=class{supports(e,r){return!!kH(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await rn.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await oe.mktempPromise(async a=>{let n=new gn(a);await Xi.extractArchiveTo(o,n,{stripComponents:1});let u=ra.splitRepoUrl(e.reference),A=K.join(a,"package.tgz");await un.prepareExternalProject(a,A,{configuration:r.project.configuration,report:r.report,workspace:u.extra.workspace,locator:e});let p=await oe.readFilePromise(A);return await Xi.convertToZip(p,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:o,username:a,reponame:n,treeish:u}=QH(e.reference);return`https://${o?`${o}@`:""}github.com/${a}/${n}/archive/${u}.tar.gz`}};var gdt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let o=new U2;if(!o.supports(e,r))return null;try{return await o.fetch(e,r)}catch{return null}}}},ddt=gdt;var TH={};Kt(TH,{TarballHttpFetcher:()=>H2,TarballHttpResolver:()=>j2,default:()=>ydt});Ye();function _2(t){let e;try{e=new URL(t)}catch{return!1}return!(e.protocol!=="http:"&&e.protocol!=="https:"||!e.pathname.match(/(\.tar\.gz|\.tgz|\/[^.]+)$/))}var H2=class{supports(e,r){return _2(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await rn.get(e.reference,{configuration:r.project.configuration});return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();var j2=class{supportsDescriptor(e,r){return _2(e.range)}supportsLocator(e,r){return _2(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[W.convertDescriptorToLocator(e)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var mdt={fetchers:[H2],resolvers:[j2]},ydt=mdt;var RH={};Kt(RH,{InitCommand:()=>g0,default:()=>Cdt});Ye();Ye();Pt();qt();var g0=class extends ut{constructor(){super(...arguments);this.private=ge.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=ge.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=ge.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.name=ge.String("-n,--name",{description:"Initialize a package with the given name"});this.usev2=ge.Boolean("-2",!1,{hidden:!0});this.yes=ge.Boolean("-y,--yes",{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return o!==null?await this.executeProxy(r,o):await this.executeRegular(r)}async executeProxy(r,o){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new it("Cannot use the --install flag from within a project subdirectory");oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=K.join(this.context.cwd,dr.lockfile);oe.existsSync(a)||await oe.writeFilePromise(a,"");let n=await this.cli.run(["set","version",o],{quiet:!0});if(n!==0)return n;let u=[];return this.private&&u.push("-p"),this.workspace&&u.push("-w"),this.name&&u.push(`-n=${this.name}`),this.yes&&u.push("-y"),await oe.mktempPromise(async A=>{let{code:p}=await Ur.pipevp("yarn",["init",...u],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await un.makeScriptEnv({binFolder:A})});return p})}async executeRegular(r){let o=null;try{o=(await St.find(r,this.context.cwd)).project}catch{o=null}oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Mt.tryFind(this.context.cwd),n=a??new Mt,u=Object.fromEntries(r.get("initFields").entries());n.load(u),n.name=n.name??W.makeIdent(r.get("initScope"),this.name??K.basename(this.context.cwd)),n.packageManager=tn&&je.isTaggedYarnVersion(tn)?`yarn@${tn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await oe.mkdirPromise(K.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let A={};n.exportTo(A);let p=K.join(this.context.cwd,Mt.fileName);await oe.changeFilePromise(p,`${JSON.stringify(A,null,2)} -`,{automaticNewlines:!0});let h=[p],E=K.join(this.context.cwd,"README.md");if(oe.existsSync(E)||(await oe.writeFilePromise(E,`# ${W.stringifyIdent(n.name)} -`),h.push(E)),!o||o.cwd===this.context.cwd){let I=K.join(this.context.cwd,dr.lockfile);oe.existsSync(I)||(await oe.writeFilePromise(I,""),h.push(I));let b=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# Swap the comments on the following lines if you wish to use zero-installs","# In that case, don't forget to run `yarn config set enableGlobalCache false`!","# Documentation here: https://yarnpkg.com/features/caching#zero-installs","","#!.yarn/cache",".pnp.*"].map(pe=>`${pe} -`).join(""),C=K.join(this.context.cwd,".gitignore");oe.existsSync(C)||(await oe.writeFilePromise(C,b),h.push(C));let L=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(pe=>`${pe} -`).join(""),U=K.join(this.context.cwd,".gitattributes");oe.existsSync(U)||(await oe.writeFilePromise(U,L),h.push(U));let J={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};je.mergeIntoTarget(J,r.get("initEditorConfig"));let te=`root = true -`;for(let[pe,Ae]of Object.entries(J)){te+=` -[${pe}] -`;for(let[ye,ae]of Object.entries(Ae)){let we=ye.replace(/[A-Z]/g,Pe=>`_${Pe.toLowerCase()}`);te+=`${we} = ${ae} -`}}let le=K.join(this.context.cwd,".editorconfig");oe.existsSync(le)||(await oe.writeFilePromise(le,te),h.push(le)),await this.cli.run(["install"],{quiet:!0}),oe.existsSync(K.join(this.context.cwd,".git"))||(await Ur.execvp("git",["init"],{cwd:this.context.cwd}),await Ur.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Ur.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};g0.paths=[["init"]],g0.usage=nt.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var Edt={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:"STRING",default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:"MAP",valueDefinition:{description:"",type:"ANY"}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:"MAP",valueDefinition:{description:"",type:"ANY"}}},commands:[g0]},Cdt=Edt;var Lj={};Kt(Lj,{SearchCommand:()=>C0,UpgradeInteractiveCommand:()=>I0,default:()=>lIt});Ye();var Ime=$e(Be("os"));function SC({stdout:t}){if(Ime.default.endianness()==="BE")throw new Error("Interactive commands cannot be used on big-endian systems because ink depends on yoga-layout-prebuilt which only supports little-endian architectures");if(!t.isTTY)throw new Error("Interactive commands can only be used inside a TTY environment")}qt();var Rye=$e(ZH()),$H={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},myt=(0,Rye.default)($H.appId,$H.apiKey).initIndex($H.indexName),e6=async(t,e=0)=>await myt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var HB=["regular","dev","peer"],C0=class extends ut{async execute(){SC(this.context);let{Gem:e}=await Promise.resolve().then(()=>(AQ(),Dj)),{ScrollableItems:r}=await Promise.resolve().then(()=>(gQ(),hQ)),{useKeypress:o}=await Promise.resolve().then(()=>(OB(),Jwe)),{useMinistore:a}=await Promise.resolve().then(()=>(Qj(),kj)),{renderForm:n}=await Promise.resolve().then(()=>(EQ(),yQ)),{default:u}=await Promise.resolve().then(()=>$e(sIe())),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useEffect:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),b=()=>h.createElement(A,{flexDirection:"row"},h.createElement(A,{flexDirection:"column",width:48},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),C=()=>h.createElement(h.Fragment,null,h.createElement(A,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(A,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(A,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),T=()=>h.createElement(A,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),L=({hit:ae,active:we})=>{let[Pe,g]=a(ae.name,null);o({active:we},(ce,ne)=>{if(ne.name!=="space")return;if(!Pe){g(HB[0]);return}let ee=HB.indexOf(Pe)+1;ee===HB.length?g(null):g(HB[ee])},[Pe,g]);let Ee=W.parseIdent(ae.name),De=W.prettyIdent(v,Ee);return h.createElement(A,null,h.createElement(A,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},De)),h.createElement(A,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},ae.owner.name)),h.createElement(A,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},ae.version)),h.createElement(A,{width:16,marginLeft:1},h.createElement(p,null,ae.humanDownloadsLast30Days)))},U=({name:ae,active:we})=>{let[Pe]=a(ae,null),g=W.parseIdent(ae);return h.createElement(A,null,h.createElement(A,{width:47},h.createElement(p,{bold:!0}," - ",W.prettyIdent(v,g))),HB.map(Ee=>h.createElement(A,{key:Ee,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:Pe===Ee})," ",h.createElement(p,{bold:!0},Ee)))))},J=()=>h.createElement(A,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),le=await n(({useSubmit:ae})=>{let we=a();ae(we);let Pe=Array.from(we.keys()).filter(H=>we.get(H)!==null),[g,Ee]=I(""),[De,ce]=I(0),[ne,ee]=I([]),Ie=H=>{H.match(/\t| /)||Ee(H)},ke=async()=>{ce(0);let H=await e6(g);H.query===g&&ee(H.hits)},ht=async()=>{let H=await e6(g,De+1);H.query===g&&H.page-1===De&&(ce(H.page),ee([...ne,...H.hits]))};return E(()=>{g?ke():ee([])},[g]),h.createElement(A,{flexDirection:"column"},h.createElement(b,null),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(A,{width:41},h.createElement(u,{value:g,onChange:Ie,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(C,null)),ne.length?h.createElement(r,{radius:2,loop:!1,children:ne.map(H=>h.createElement(L,{key:H.name,hit:H,active:!1})),willReachEnd:ht}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(A,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(T,null)),Pe.length?Pe.map(H=>h.createElement(U,{key:H,name:H,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(J,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof le>"u")return 1;let pe=Array.from(le.keys()).filter(ae=>le.get(ae)==="regular"),Ae=Array.from(le.keys()).filter(ae=>le.get(ae)==="dev"),ye=Array.from(le.keys()).filter(ae=>le.get(ae)==="peer");return pe.length&&await this.cli.run(["add",...pe]),Ae.length&&await this.cli.run(["add","--dev",...Ae]),ye&&await this.cli.run(["add","--peer",...ye]),0}};C0.paths=[["search"]],C0.usage=nt.Usage({category:"Interactive commands",description:"open the search interface",details:` + `);let x=u.NODE_OPTIONS||"",C=/\s*--require\s+\S*\.pnp\.c?js\s*/g;x=x.replace(C," ").trim(),u.NODE_OPTIONS=x;let{stdout:R,stderr:L}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${W.stringifyLocator(r)}) +`,prefix:W.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Ur.pipevp(process.execPath,["--require",ue.fromPortablePath(A),ue.fromPortablePath(o),W.stringifyIdent(r)],{cwd:e,env:u,stdin:null,stdout:R,stderr:L});if(U!==0)throw oe.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${de.pretty(a.project.configuration,h,de.Type.PATH)})`)})})}};Ye();Ye();var idt=2,F2=class{supportsDescriptor(e,r){return!!e.range.startsWith(fA)}supportsLocator(e,r){return!!e.reference.startsWith(fA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=BH(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await k2(W.makeRange({protocol:fA,source:a,selector:a,params:{locator:W.stringifyLocator(n)}}),fA,o.fetchOptions),A=wn.makeHash(`${idt}`,u).slice(0,6);return[vH(e,{parentLocator:n,path:a,generatorHash:A,protocol:fA})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var sdt={fetchers:[Q2],resolvers:[F2]},odt=sdt;var PH={};Vt(PH,{FileFetcher:()=>L2,FileResolver:()=>O2,TarballFileFetcher:()=>M2,TarballFileResolver:()=>U2,default:()=>cdt,fileUtils:()=>rm});Ye();St();var SC=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,R2=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Ui="file:";var rm={};Vt(rm,{fetchArchiveFromLocator:()=>N2,makeArchiveFromLocator:()=>Ck,makeBufferFromLocator:()=>SH,makeLocator:()=>PC,makeSpec:()=>hme,parseSpec:()=>T2});Ye();St();function T2(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function hme({parentLocator:t,path:e,hash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PC(t,{parentLocator:e,path:r,hash:o,protocol:a}){return W.makeLocator(t,hme({parentLocator:e,path:r,hash:o,protocol:a}))}async function N2(t,e){let{parentLocator:r,path:o}=W.parseFileStyleRange(t.reference,{protocol:Ui}),a=V.isAbsolute(o)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let u=n.packageFs,A=V.join(n.prefixPath,o);return await _e.releaseAfterUseAsync(async()=>await u.readFilePromise(A),n.releaseFs)}async function Ck(t,{protocol:e,fetchOptions:r,inMemory:o=!1}){let{parentLocator:a,path:n}=W.parseFileStyleRange(t.reference,{protocol:e}),u=V.isAbsolute(n)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(a,r),A=u.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,u.localPath)}:u;u!==A&&u.releaseFs&&u.releaseFs();let p=A.packageFs,h=V.join(A.prefixPath,n);return await _e.releaseAfterUseAsync(async()=>await Xi.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:W.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:o}),A.releaseFs)}async function SH(t,{protocol:e,fetchOptions:r}){return(await Ck(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var L2=class{supports(e,r){return!!e.reference.startsWith(Ui)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:Ui});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){return Ck(e,{protocol:Ui,fetchOptions:r})}};Ye();Ye();var adt=2,O2=class{supportsDescriptor(e,r){return e.range.match(SC)?!0:!!e.range.startsWith(Ui)}supportsLocator(e,r){return!!e.reference.startsWith(Ui)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return SC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await SH(W.makeLocator(e,W.makeRange({protocol:Ui,source:a,selector:a,params:{locator:W.stringifyLocator(n)}})),{protocol:Ui,fetchOptions:o.fetchOptions}),A=wn.makeHash(`${adt}`,u).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:A,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ye();var M2=class{supports(e,r){return R2.test(e.reference)?!!e.reference.startsWith(Ui):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromDisk(e,r){let o=await N2(e,r);return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();Ye();var U2=class{supportsDescriptor(e,r){return R2.test(e.range)?!!(e.range.startsWith(Ui)||SC.test(e.range)):!1}supportsLocator(e,r){return R2.test(e.reference)?!!e.reference.startsWith(Ui):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return SC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=PC(e,{parentLocator:n,path:a,hash:"",protocol:Ui}),A=await N2(u,o.fetchOptions),p=wn.makeHash(A).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:p,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var ldt={fetchers:[M2,L2],resolvers:[U2,O2]},cdt=ldt;var kH={};Vt(kH,{GithubFetcher:()=>_2,default:()=>Adt,githubUtils:()=>wk});Ye();St();var wk={};Vt(wk,{invalidGithubUrlMessage:()=>mme,isGithubUrl:()=>bH,parseGithubUrl:()=>xH});var gme=$e(ve("querystring")),dme=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function bH(t){return t?dme.some(e=>!!t.match(e)):!1}function xH(t){let e;for(let A of dme)if(e=t.match(A),e)break;if(!e)throw new Error(mme(t));let[,r,o,a,n="master"]=e,{commit:u}=gme.default.parse(n);return n=u||n.replace(/[^:]*:/,""),{auth:r,username:o,reponame:a,treeish:n}}function mme(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var _2=class{supports(e,r){return!!bH(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await nn.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await oe.mktempPromise(async a=>{let n=new gn(a);await Xi.extractArchiveTo(o,n,{stripComponents:1});let u=ra.splitRepoUrl(e.reference),A=V.join(a,"package.tgz");await un.prepareExternalProject(a,A,{configuration:r.project.configuration,report:r.report,workspace:u.extra.workspace,locator:e});let p=await oe.readFilePromise(A);return await Xi.convertToZip(p,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:o,username:a,reponame:n,treeish:u}=xH(e.reference);return`https://${o?`${o}@`:""}github.com/${a}/${n}/archive/${u}.tar.gz`}};var udt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let o=new _2;if(!o.supports(e,r))return null;try{return await o.fetch(e,r)}catch{return null}}}},Adt=udt;var QH={};Vt(QH,{TarballHttpFetcher:()=>q2,TarballHttpResolver:()=>j2,default:()=>pdt});Ye();function H2(t){let e;try{e=new URL(t)}catch{return!1}return!(e.protocol!=="http:"&&e.protocol!=="https:"||!e.pathname.match(/(\.tar\.gz|\.tgz|\/[^.]+)$/))}var q2=class{supports(e,r){return H2(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await nn.get(e.reference,{configuration:r.project.configuration});return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();var j2=class{supportsDescriptor(e,r){return H2(e.range)}supportsLocator(e,r){return H2(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[W.convertDescriptorToLocator(e)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var fdt={fetchers:[q2],resolvers:[j2]},pdt=fdt;var FH={};Vt(FH,{InitCommand:()=>d0,default:()=>gdt});Ye();Ye();St();qt();var d0=class extends ut{constructor(){super(...arguments);this.private=ge.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=ge.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=ge.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.name=ge.String("-n,--name",{description:"Initialize a package with the given name"});this.usev2=ge.Boolean("-2",!1,{hidden:!0});this.yes=ge.Boolean("-y,--yes",{hidden:!0})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return o!==null?await this.executeProxy(r,o):await this.executeRegular(r)}async executeProxy(r,o){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new it("Cannot use the --install flag from within a project subdirectory");oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=V.join(this.context.cwd,dr.lockfile);oe.existsSync(a)||await oe.writeFilePromise(a,"");let n=await this.cli.run(["set","version",o],{quiet:!0});if(n!==0)return n;let u=[];return this.private&&u.push("-p"),this.workspace&&u.push("-w"),this.name&&u.push(`-n=${this.name}`),this.yes&&u.push("-y"),await oe.mktempPromise(async A=>{let{code:p}=await Ur.pipevp("yarn",["init",...u],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await un.makeScriptEnv({binFolder:A})});return p})}async executeRegular(r){let o=null;try{o=(await Pt.find(r,this.context.cwd)).project}catch{o=null}oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Ot.tryFind(this.context.cwd),n=a??new Ot,u=Object.fromEntries(r.get("initFields").entries());n.load(u),n.name=n.name??W.makeIdent(r.get("initScope"),this.name??V.basename(this.context.cwd)),n.packageManager=rn&&_e.isTaggedYarnVersion(rn)?`yarn@${rn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await oe.mkdirPromise(V.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let A={};n.exportTo(A);let p=V.join(this.context.cwd,Ot.fileName);await oe.changeFilePromise(p,`${JSON.stringify(A,null,2)} +`,{automaticNewlines:!0});let h=[p],E=V.join(this.context.cwd,"README.md");if(oe.existsSync(E)||(await oe.writeFilePromise(E,`# ${W.stringifyIdent(n.name)} +`),h.push(E)),!o||o.cwd===this.context.cwd){let I=V.join(this.context.cwd,dr.lockfile);oe.existsSync(I)||(await oe.writeFilePromise(I,""),h.push(I));let x=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# Swap the comments on the following lines if you wish to use zero-installs","# In that case, don't forget to run `yarn config set enableGlobalCache false`!","# Documentation here: https://yarnpkg.com/features/caching#zero-installs","","#!.yarn/cache",".pnp.*"].map(fe=>`${fe} +`).join(""),C=V.join(this.context.cwd,".gitignore");oe.existsSync(C)||(await oe.writeFilePromise(C,x),h.push(C));let L=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(fe=>`${fe} +`).join(""),U=V.join(this.context.cwd,".gitattributes");oe.existsSync(U)||(await oe.writeFilePromise(U,L),h.push(U));let J={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};_e.mergeIntoTarget(J,r.get("initEditorConfig"));let te=`root = true +`;for(let[fe,ce]of Object.entries(J)){te+=` +[${fe}] +`;for(let[me,he]of Object.entries(ce)){let Be=me.replace(/[A-Z]/g,we=>`_${we.toLowerCase()}`);te+=`${Be} = ${he} +`}}let ae=V.join(this.context.cwd,".editorconfig");oe.existsSync(ae)||(await oe.writeFilePromise(ae,te),h.push(ae)),await this.cli.run(["install"],{quiet:!0}),oe.existsSync(V.join(this.context.cwd,".git"))||(await Ur.execvp("git",["init"],{cwd:this.context.cwd}),await Ur.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Ur.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};d0.paths=[["init"]],d0.usage=nt.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var hdt={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:"STRING",default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:"MAP",valueDefinition:{description:"",type:"ANY"}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:"MAP",valueDefinition:{description:"",type:"ANY"}}},commands:[d0]},gdt=hdt;var Tq={};Vt(Tq,{SearchCommand:()=>w0,UpgradeInteractiveCommand:()=>B0,default:()=>nIt});Ye();var Eme=$e(ve("os"));function bC({stdout:t}){if(Eme.default.endianness()==="BE")throw new Error("Interactive commands cannot be used on big-endian systems because ink depends on yoga-layout-prebuilt which only supports little-endian architectures");if(!t.isTTY)throw new Error("Interactive commands can only be used inside a TTY environment")}qt();var Qye=$e(zH()),XH={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},fyt=(0,Qye.default)(XH.appId,XH.apiKey).initIndex(XH.indexName),ZH=async(t,e=0)=>await fyt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var qB=["regular","dev","peer"],w0=class extends ut{async execute(){bC(this.context);let{Gem:e}=await Promise.resolve().then(()=>(cQ(),Bq)),{ScrollableItems:r}=await Promise.resolve().then(()=>(pQ(),fQ)),{useKeypress:o}=await Promise.resolve().then(()=>(UB(),Wwe)),{useMinistore:a}=await Promise.resolve().then(()=>(xq(),bq)),{renderForm:n}=await Promise.resolve().then(()=>(mQ(),dQ)),{default:u}=await Promise.resolve().then(()=>$e(rIe())),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useEffect:E,useState:I}=await Promise.resolve().then(()=>$e(on())),v=await Ke.find(this.context.cwd,this.context.plugins),x=()=>h.createElement(A,{flexDirection:"row"},h.createElement(A,{flexDirection:"column",width:48},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),C=()=>h.createElement(h.Fragment,null,h.createElement(A,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(A,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(A,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),R=()=>h.createElement(A,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),L=({hit:he,active:Be})=>{let[we,g]=a(he.name,null);o({active:Be},(le,ne)=>{if(ne.name!=="space")return;if(!we){g(qB[0]);return}let ee=qB.indexOf(we)+1;ee===qB.length?g(null):g(qB[ee])},[we,g]);let Ee=W.parseIdent(he.name),Se=W.prettyIdent(v,Ee);return h.createElement(A,null,h.createElement(A,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},Se)),h.createElement(A,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},he.owner.name)),h.createElement(A,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},he.version)),h.createElement(A,{width:16,marginLeft:1},h.createElement(p,null,he.humanDownloadsLast30Days)))},U=({name:he,active:Be})=>{let[we]=a(he,null),g=W.parseIdent(he);return h.createElement(A,null,h.createElement(A,{width:47},h.createElement(p,{bold:!0}," - ",W.prettyIdent(v,g))),qB.map(Ee=>h.createElement(A,{key:Ee,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:we===Ee})," ",h.createElement(p,{bold:!0},Ee)))))},J=()=>h.createElement(A,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),ae=await n(({useSubmit:he})=>{let Be=a();he(Be);let we=Array.from(Be.keys()).filter(H=>Be.get(H)!==null),[g,Ee]=I(""),[Se,le]=I(0),[ne,ee]=I([]),Ie=H=>{H.match(/\t| /)||Ee(H)},Fe=async()=>{le(0);let H=await ZH(g);H.query===g&&ee(H.hits)},At=async()=>{let H=await ZH(g,Se+1);H.query===g&&H.page-1===Se&&(le(H.page),ee([...ne,...H.hits]))};return E(()=>{g?Fe():ee([])},[g]),h.createElement(A,{flexDirection:"column"},h.createElement(x,null),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(A,{width:41},h.createElement(u,{value:g,onChange:Ie,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(C,null)),ne.length?h.createElement(r,{radius:2,loop:!1,children:ne.map(H=>h.createElement(L,{key:H.name,hit:H,active:!1})),willReachEnd:At}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(A,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(R,null)),we.length?we.map(H=>h.createElement(U,{key:H,name:H,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(J,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ae>"u")return 1;let fe=Array.from(ae.keys()).filter(he=>ae.get(he)==="regular"),ce=Array.from(ae.keys()).filter(he=>ae.get(he)==="dev"),me=Array.from(ae.keys()).filter(he=>ae.get(he)==="peer");return fe.length&&await this.cli.run(["add",...fe]),ce.length&&await this.cli.run(["add","--dev",...ce]),me&&await this.cli.run(["add","--peer",...me]),0}};w0.paths=[["search"]],w0.usage=nt.Usage({category:"Interactive commands",description:"open the search interface",details:` This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. - `,examples:[["Open the search window","yarn search"]]});Ye();qt();w_();var fIe=$e(zn()),AIe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,pIe=(t,e)=>t.length>0?[t.slice(0,e)].concat(pIe(t.slice(e),e)):[],I0=class extends ut{async execute(){SC(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(uIe(),cIe)),{Pad:r}=await Promise.resolve().then(()=>(Nj(),lIe)),{ScrollableItems:o}=await Promise.resolve().then(()=>(gQ(),hQ)),{useMinistore:a}=await Promise.resolve().then(()=>(Qj(),kj)),{renderForm:n}=await Promise.resolve().then(()=>(EQ(),yQ)),{Box:u,Text:A}=await Promise.resolve().then(()=>$e(ic())),{default:p,useEffect:h,useRef:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),{project:b,workspace:C}=await St.find(v,this.context.cwd),T=await Lr.find(v);if(!C)throw new rr(b.cwd,this.context.cwd);await b.restoreInstallState({restoreResolutions:!1});let L=this.context.stdout.rows-7,U=(Ee,De)=>{let ce=fpe(Ee,De),ne="";for(let ee of ce)ee.added?ne+=de.pretty(v,ee.value,"green"):ee.removed||(ne+=ee.value);return ne},J=(Ee,De)=>{if(Ee===De)return De;let ce=W.parseRange(Ee),ne=W.parseRange(De),ee=ce.selector.match(AIe),Ie=ne.selector.match(AIe);if(!ee||!Ie)return U(Ee,De);let ke=["gray","red","yellow","green","magenta"],ht=null,H="";for(let lt=1;lt{let ne=await zc.fetchDescriptorFrom(Ee,ce,{project:b,cache:T,preserveModifier:De,workspace:C});return ne!==null?ne.range:Ee.range},le=async Ee=>{let De=fIe.default.valid(Ee.range)?`^${Ee.range}`:Ee.range,[ce,ne]=await Promise.all([te(Ee,Ee.range,De).catch(()=>null),te(Ee,Ee.range,"latest").catch(()=>null)]),ee=[{value:null,label:Ee.range}];return ce&&ce!==Ee.range?ee.push({value:ce,label:J(Ee.range,ce)}):ee.push({value:null,label:""}),ne&&ne!==ce&&ne!==Ee.range?ee.push({value:ne,label:J(Ee.range,ne)}):ee.push({value:null,label:""}),ee},pe=()=>p.createElement(u,{flexDirection:"row"},p.createElement(u,{flexDirection:"column",width:49},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(u,{flexDirection:"column"},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to abort.")))),Ae=()=>p.createElement(u,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(u,{width:50},p.createElement(A,{bold:!0},p.createElement(A,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Latest"))),ye=({active:Ee,descriptor:De,suggestions:ce})=>{let[ne,ee]=a(De.descriptorHash,null),Ie=W.stringifyIdent(De),ke=Math.max(0,45-Ie.length);return p.createElement(p.Fragment,null,p.createElement(u,null,p.createElement(u,{width:45},p.createElement(A,{bold:!0},W.prettyIdent(v,De)),p.createElement(r,{active:Ee,length:ke})),p.createElement(e,{active:Ee,options:ce,value:ne,skewer:!0,onChange:ee,sizes:[17,17,17]})))},ae=({dependencies:Ee})=>{let[De,ce]=I(Ee.map(()=>null)),ne=E(!0),ee=async Ie=>{let ke=await le(Ie);return ke.filter(ht=>ht.label!=="").length<=1?null:{descriptor:Ie,suggestions:ke}};return h(()=>()=>{ne.current=!1},[]),h(()=>{let Ie=Math.trunc(L*1.75),ke=Ee.slice(0,Ie),ht=Ee.slice(Ie),H=pIe(ht,L),lt=ke.map(ee).reduce(async(Re,Qe)=>{await Re;let be=await Qe;be!==null&&(!ne.current||ce(_e=>{let Te=_e.findIndex(He=>He===null),Je=[..._e];return Je[Te]=be,Je}))},Promise.resolve());H.reduce((Re,Qe)=>Promise.all(Qe.map(be=>Promise.resolve().then(()=>ee(be)))).then(async be=>{be=be.filter(_e=>_e!==null),await Re,ne.current&&ce(_e=>{let Te=_e.findIndex(Je=>Je===null);return _e.slice(0,Te).concat(be).concat(_e.slice(Te+be.length))})}),lt).then(()=>{ne.current&&ce(Re=>Re.filter(Qe=>Qe!==null))})},[]),De.length?p.createElement(o,{radius:L>>1,children:De.map((Ie,ke)=>Ie!==null?p.createElement(ye,{key:ke,active:!1,descriptor:Ie.descriptor,suggestions:Ie.suggestions}):p.createElement(A,{key:ke},"Loading..."))}):p.createElement(A,null,"No upgrades found")},Pe=await n(({useSubmit:Ee})=>{Ee(a());let De=new Map;for(let ne of b.workspaces)for(let ee of["dependencies","devDependencies"])for(let Ie of ne.manifest[ee].values())b.tryWorkspaceByDescriptor(Ie)===null&&(Ie.range.startsWith("link:")||De.set(Ie.descriptorHash,Ie));let ce=je.sortMap(De.values(),ne=>W.stringifyDescriptor(ne));return p.createElement(u,{flexDirection:"column"},p.createElement(pe,null),p.createElement(Ae,null),p.createElement(ae,{dependencies:ce}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Pe>"u")return 1;let g=!1;for(let Ee of b.workspaces)for(let De of["dependencies","devDependencies"]){let ce=Ee.manifest[De];for(let ne of ce.values()){let ee=Pe.get(ne.descriptorHash);typeof ee<"u"&&ee!==null&&(ce.set(ne.identHash,W.makeDescriptor(ne,ee)),g=!0)}}return g?await b.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:T}):0}};I0.paths=[["upgrade-interactive"]],I0.usage=nt.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` + `,examples:[["Open the search window","yarn search"]]});Ye();qt();E_();var cIe=$e(zn()),lIe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,uIe=(t,e)=>t.length>0?[t.slice(0,e)].concat(uIe(t.slice(e),e)):[],B0=class extends ut{async execute(){bC(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(aIe(),oIe)),{Pad:r}=await Promise.resolve().then(()=>(Rq(),sIe)),{ScrollableItems:o}=await Promise.resolve().then(()=>(pQ(),fQ)),{useMinistore:a}=await Promise.resolve().then(()=>(xq(),bq)),{renderForm:n}=await Promise.resolve().then(()=>(mQ(),dQ)),{Box:u,Text:A}=await Promise.resolve().then(()=>$e(ic())),{default:p,useEffect:h,useRef:E,useState:I}=await Promise.resolve().then(()=>$e(on())),v=await Ke.find(this.context.cwd,this.context.plugins),{project:x,workspace:C}=await Pt.find(v,this.context.cwd),R=await Lr.find(v);if(!C)throw new rr(x.cwd,this.context.cwd);await x.restoreInstallState({restoreResolutions:!1});let L=this.context.stdout.rows-7,U=(Ee,Se)=>{let le=upe(Ee,Se),ne="";for(let ee of le)ee.added?ne+=de.pretty(v,ee.value,"green"):ee.removed||(ne+=ee.value);return ne},J=(Ee,Se)=>{if(Ee===Se)return Se;let le=W.parseRange(Ee),ne=W.parseRange(Se),ee=le.selector.match(lIe),Ie=ne.selector.match(lIe);if(!ee||!Ie)return U(Ee,Se);let Fe=["gray","red","yellow","green","magenta"],At=null,H="";for(let at=1;at{let ne=await zc.fetchDescriptorFrom(Ee,le,{project:x,cache:R,preserveModifier:Se,workspace:C});return ne!==null?ne.range:Ee.range},ae=async Ee=>{let Se=cIe.default.valid(Ee.range)?`^${Ee.range}`:Ee.range,[le,ne]=await Promise.all([te(Ee,Ee.range,Se).catch(()=>null),te(Ee,Ee.range,"latest").catch(()=>null)]),ee=[{value:null,label:Ee.range}];return le&&le!==Ee.range?ee.push({value:le,label:J(Ee.range,le)}):ee.push({value:null,label:""}),ne&&ne!==le&&ne!==Ee.range?ee.push({value:ne,label:J(Ee.range,ne)}):ee.push({value:null,label:""}),ee},fe=()=>p.createElement(u,{flexDirection:"row"},p.createElement(u,{flexDirection:"column",width:49},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(u,{flexDirection:"column"},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to abort.")))),ce=()=>p.createElement(u,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(u,{width:50},p.createElement(A,{bold:!0},p.createElement(A,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Latest"))),me=({active:Ee,descriptor:Se,suggestions:le})=>{let[ne,ee]=a(Se.descriptorHash,null),Ie=W.stringifyIdent(Se),Fe=Math.max(0,45-Ie.length);return p.createElement(p.Fragment,null,p.createElement(u,null,p.createElement(u,{width:45},p.createElement(A,{bold:!0},W.prettyIdent(v,Se)),p.createElement(r,{active:Ee,length:Fe})),p.createElement(e,{active:Ee,options:le,value:ne,skewer:!0,onChange:ee,sizes:[17,17,17]})))},he=({dependencies:Ee})=>{let[Se,le]=I(Ee.map(()=>null)),ne=E(!0),ee=async Ie=>{let Fe=await ae(Ie);return Fe.filter(At=>At.label!=="").length<=1?null:{descriptor:Ie,suggestions:Fe}};return h(()=>()=>{ne.current=!1},[]),h(()=>{let Ie=Math.trunc(L*1.75),Fe=Ee.slice(0,Ie),At=Ee.slice(Ie),H=uIe(At,L),at=Fe.map(ee).reduce(async(Re,ke)=>{await Re;let xe=await ke;xe!==null&&(!ne.current||le(He=>{let Te=He.findIndex(qe=>qe===null),Je=[...He];return Je[Te]=xe,Je}))},Promise.resolve());H.reduce((Re,ke)=>Promise.all(ke.map(xe=>Promise.resolve().then(()=>ee(xe)))).then(async xe=>{xe=xe.filter(He=>He!==null),await Re,ne.current&&le(He=>{let Te=He.findIndex(Je=>Je===null);return He.slice(0,Te).concat(xe).concat(He.slice(Te+xe.length))})}),at).then(()=>{ne.current&&le(Re=>Re.filter(ke=>ke!==null))})},[]),Se.length?p.createElement(o,{radius:L>>1,children:Se.map((Ie,Fe)=>Ie!==null?p.createElement(me,{key:Fe,active:!1,descriptor:Ie.descriptor,suggestions:Ie.suggestions}):p.createElement(A,{key:Fe},"Loading..."))}):p.createElement(A,null,"No upgrades found")},we=await n(({useSubmit:Ee})=>{Ee(a());let Se=new Map;for(let ne of x.workspaces)for(let ee of["dependencies","devDependencies"])for(let Ie of ne.manifest[ee].values())x.tryWorkspaceByDescriptor(Ie)===null&&(Ie.range.startsWith("link:")||Se.set(Ie.descriptorHash,Ie));let le=_e.sortMap(Se.values(),ne=>W.stringifyDescriptor(ne));return p.createElement(u,{flexDirection:"column"},p.createElement(fe,null),p.createElement(ce,null),p.createElement(he,{dependencies:le}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof we>"u")return 1;let g=!1;for(let Ee of x.workspaces)for(let Se of["dependencies","devDependencies"]){let le=Ee.manifest[Se];for(let ne of le.values()){let ee=we.get(ne.descriptorHash);typeof ee<"u"&&ee!==null&&(le.set(ne.identHash,W.makeDescriptor(ne,ee)),g=!0)}}return g?await x.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:R}):0}};B0.paths=[["upgrade-interactive"]],B0.usage=nt.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. - `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var aIt={commands:[C0,I0]},lIt=aIt;var Mj={};Kt(Mj,{LinkFetcher:()=>qB,LinkResolver:()=>GB,PortalFetcher:()=>YB,PortalResolver:()=>WB,default:()=>uIt});Ye();Pt();var ep="portal:",tp="link:";var qB=class{supports(e,r){return!!e.reference.startsWith(tp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0}}};Ye();Pt();var GB=class{supportsDescriptor(e,r){return!!e.range.startsWith(tp)}supportsLocator(e,r){return!!e.reference.startsWith(tp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(tp.length);return[W.makeLocator(e,`${tp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ye();Pt();var YB=class{supports(e,r){return!!e.reference.startsWith(ep)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:ep});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:ep}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot}}};Ye();Ye();Pt();var WB=class{supportsDescriptor(e,r){return!!e.range.startsWith(ep)}supportsLocator(e,r){return!!e.reference.startsWith(ep)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(ep.length);return[W.makeLocator(e,`${ep}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var cIt={fetchers:[qB,YB],resolvers:[GB,WB]},uIt=cIt;var Cq={};Kt(Cq,{NodeModulesLinker:()=>lv,NodeModulesMode:()=>dq,PnpLooseLinker:()=>cv,default:()=>P1t});Pt();Ye();Pt();Pt();var Uj=(t,e)=>`${t}@${e}`,hIe=(t,e)=>{let r=e.indexOf("#"),o=r>=0?e.substring(r+1):e;return Uj(t,o)};var mIe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),o=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:o,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},u;n.debugLevel>=0&&(u=Date.now());let A=mIt(t,n),p=!1,h=0;do p=_j(A,[A],new Set([A.locator]),new Map,n).anotherRoundNeeded,n.fastLookupPossible=!1,h++;while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-u}ms, rounds: ${h}`),n.debugLevel>=1){let E=VB(A);if(_j(A,[A],new Set([A.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: + `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var rIt={commands:[w0,B0]},nIt=rIt;var Nq={};Vt(Nq,{LinkFetcher:()=>GB,LinkResolver:()=>YB,PortalFetcher:()=>WB,PortalResolver:()=>KB,default:()=>sIt});Ye();St();var tp="portal:",rp="link:";var GB=class{supports(e,r){return!!e.reference.startsWith(rp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:rp});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:rp}),n=V.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0}}};Ye();St();var YB=class{supportsDescriptor(e,r){return!!e.range.startsWith(rp)}supportsLocator(e,r){return!!e.reference.startsWith(rp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(rp.length);return[W.makeLocator(e,`${rp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ye();St();var WB=class{supports(e,r){return!!e.reference.startsWith(tp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp}),n=V.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot}}};Ye();Ye();St();var KB=class{supportsDescriptor(e,r){return!!e.range.startsWith(tp)}supportsLocator(e,r){return!!e.reference.startsWith(tp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(tp.length);return[W.makeLocator(e,`${tp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var iIt={fetchers:[GB,WB],resolvers:[YB,KB]},sIt=iIt;var yj={};Vt(yj,{NodeModulesLinker:()=>lv,NodeModulesMode:()=>hj,PnpLooseLinker:()=>cv,default:()=>w1t});St();Ye();St();St();var Oq=(t,e)=>`${t}@${e}`,AIe=(t,e)=>{let r=e.indexOf("#"),o=r>=0?e.substring(r+1):e;return Oq(t,o)};var hIe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),o=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:o,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},u;n.debugLevel>=0&&(u=Date.now());let A=fIt(t,n),p=!1,h=0;do p=Mq(A,[A],new Set([A.locator]),new Map,n).anotherRoundNeeded,n.fastLookupPossible=!1,h++;while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-u}ms, rounds: ${h}`),n.debugLevel>=1){let E=VB(A);if(Mq(A,[A],new Set([A.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: ${E}, next tree: -${VB(A)}`);let v=yIe(A);if(v)throw new Error(`${v}, after hoisting finished: -${VB(A)}`)}return n.debugLevel>=2&&console.log(VB(A)),yIt(A)},AIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=n=>{if(!o.has(n)){o.add(n);for(let u of n.hoistedDependencies.values())r.set(u.name,u);for(let u of n.dependencies.values())n.peerNames.has(u.name)||a(u)}};return a(e),r},fIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=new Set,n=(u,A)=>{if(o.has(u))return;o.add(u);for(let h of u.hoistedDependencies.values())if(!A.has(h.name)){let E;for(let I of t)E=I.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of u.dependencies.values())p.add(h.name);for(let h of u.dependencies.values())u.peerNames.has(h.name)||n(h,p)};return n(e,a),r},gIe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:o,ident:a,locator:n,dependencies:u,originalDependencies:A,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:I,hoistPriority:v,dependencyKind:b,hoistedFrom:C,hoistedTo:T}=e,L={name:r,references:new Set(o),ident:a,locator:n,dependencies:new Map(u),originalDependencies:new Map(A),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:I,hoistPriority:v,dependencyKind:b,hoistedFrom:new Map(C),hoistedTo:new Map(T)},U=L.dependencies.get(r);return U&&U.ident==L.ident&&L.dependencies.set(r,L),t.dependencies.set(L.name,L),L},pIt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let o=Array.from(e.keys());o.sort((a,n)=>{let u=e.get(a),A=e.get(n);return A.hoistPriority!==u.hoistPriority?A.hoistPriority-u.hoistPriority:A.peerDependents.size!==u.peerDependents.size?A.peerDependents.size-u.peerDependents.size:A.dependents.size-u.dependents.size});for(let a of o){let n=a.substring(0,a.indexOf("@",1)),u=a.substring(n.length+1);if(!t.peerNames.has(n)){let A=r.get(n);A||(A=[],r.set(n,A)),A.indexOf(u)<0&&A.push(u)}}return r},Oj=t=>{let e=new Set,r=(o,a=new Set)=>{if(!a.has(o)){a.add(o);for(let n of o.peerNames)if(!t.peerNames.has(n)){let u=t.dependencies.get(n);u&&!e.has(u)&&r(u,a)}e.add(o)}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||r(o);return e},_j=(t,e,r,o,a,n=new Set)=>{let u=e[e.length-1];if(n.has(u))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(u);let A=EIt(u),p=pIt(u,A),h=t==u?new Map:a.fastLookupPossible?AIt(e):fIt(e),E,I=!1,v=!1,b=new Map(Array.from(p.entries()).map(([T,L])=>[T,L[0]])),C=new Map;do{let T=dIt(t,e,r,h,b,p,o,C,a);T.isGraphChanged&&(v=!0),T.anotherRoundNeeded&&(I=!0),E=!1;for(let[L,U]of p)U.length>1&&!u.dependencies.has(L)&&(b.delete(L),U.shift(),b.set(L,U[0]),E=!0)}while(E);for(let T of u.dependencies.values())if(!u.peerNames.has(T.name)&&!r.has(T.locator)){r.add(T.locator);let L=_j(t,[...e,T],r,C,a);L.isGraphChanged&&(v=!0),L.anotherRoundNeeded&&(I=!0),r.delete(T.locator)}return{anotherRoundNeeded:I,isGraphChanged:v}},hIt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},gIt=(t,e,r,o,a,n,u,A,{outputReason:p,fastLookupPossible:h})=>{let E,I=null,v=new Set;p&&(E=`${Array.from(e).map(L=>no(L)).join("\u2192")}`);let b=r[r.length-1],T=!(o.ident===b.ident);if(p&&!T&&(I="- self-reference"),T&&(T=o.dependencyKind!==1,p&&!T&&(I="- workspace")),T&&o.dependencyKind===2&&(T=!hIt(o),p&&!T&&(I="- external soft link with unhoisted dependencies")),T&&(T=b.dependencyKind!==1||b.hoistedFrom.has(o.name)||e.size===1,p&&!T&&(I=b.reasons.get(o.name))),T&&(T=!t.peerNames.has(o.name),p&&!T&&(I=`- cannot shadow peer: ${no(t.originalDependencies.get(o.name).locator)} at ${E}`)),T){let L=!1,U=a.get(o.name);if(L=!U||U.ident===o.ident,p&&!L&&(I=`- filled by: ${no(U.locator)} at ${E}`),L)for(let J=r.length-1;J>=1;J--){let le=r[J].dependencies.get(o.name);if(le&&le.ident!==o.ident){L=!1;let pe=A.get(b);pe||(pe=new Set,A.set(b,pe)),pe.add(o.name),p&&(I=`- filled by ${no(le.locator)} at ${r.slice(0,J).map(Ae=>no(Ae.locator)).join("\u2192")}`);break}}T=L}if(T&&(T=n.get(o.name)===o.ident,p&&!T&&(I=`- filled by: ${no(u.get(o.name)[0])} at ${E}`)),T){let L=!0,U=new Set(o.peerNames);for(let J=r.length-1;J>=1;J--){let te=r[J];for(let le of U){if(te.peerNames.has(le)&&te.originalDependencies.has(le))continue;let pe=te.dependencies.get(le);pe&&t.dependencies.get(le)!==pe&&(J===r.length-1?v.add(pe):(v=null,L=!1,p&&(I=`- peer dependency ${no(pe.locator)} from parent ${no(te.locator)} was not hoisted to ${E}`))),U.delete(le)}if(!L)break}T=L}if(T&&!h)for(let L of o.hoistedDependencies.values()){let U=a.get(L.name)||t.dependencies.get(L.name);if(!U||L.ident!==U.ident){T=!1,p&&(I=`- previously hoisted dependency mismatch, needed: ${no(L.locator)}, available: ${no(U?.locator)}`);break}}return v!==null&&v.size>0?{isHoistable:2,dependsOn:v,reason:I}:{isHoistable:T?0:1,reason:I}},CQ=t=>`${t.name}@${t.locator}`,dIt=(t,e,r,o,a,n,u,A,p)=>{let h=e[e.length-1],E=new Set,I=!1,v=!1,b=(U,J,te,le,pe)=>{if(E.has(le))return;let Ae=[...J,CQ(le)],ye=[...te,CQ(le)],ae=new Map,we=new Map;for(let ce of Oj(le)){let ne=gIt(h,r,[h,...U,le],ce,o,a,n,A,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(we.set(ce,ne),ne.isHoistable===2)for(let ee of ne.dependsOn){let Ie=ae.get(ee.name)||new Set;Ie.add(ce.name),ae.set(ee.name,Ie)}}let Pe=new Set,g=(ce,ne,ee)=>{if(!Pe.has(ce)){Pe.add(ce),we.set(ce,{isHoistable:1,reason:ee});for(let Ie of ae.get(ce.name)||[])g(le.dependencies.get(Ie),ne,p.debugLevel>=2?`- peer dependency ${no(ce.locator)} from parent ${no(le.locator)} was not hoisted`:"")}};for(let[ce,ne]of we)ne.isHoistable===1&&g(ce,ne,ne.reason);let Ee=!1;for(let ce of we.keys())if(!Pe.has(ce)){v=!0;let ne=u.get(le);ne&&ne.has(ce.name)&&(I=!0),Ee=!0,le.dependencies.delete(ce.name),le.hoistedDependencies.set(ce.name,ce),le.reasons.delete(ce.name);let ee=h.dependencies.get(ce.name);if(p.debugLevel>=2){let Ie=Array.from(J).concat([le.locator]).map(ht=>no(ht)).join("\u2192"),ke=h.hoistedFrom.get(ce.name);ke||(ke=[],h.hoistedFrom.set(ce.name,ke)),ke.push(Ie),le.hoistedTo.set(ce.name,Array.from(e).map(ht=>no(ht.locator)).join("\u2192"))}if(!ee)h.ident!==ce.ident&&(h.dependencies.set(ce.name,ce),pe.add(ce));else for(let Ie of ce.references)ee.references.add(Ie)}if(le.dependencyKind===2&&Ee&&(I=!0),p.check){let ce=yIe(t);if(ce)throw new Error(`${ce}, after hoisting dependencies of ${[h,...U,le].map(ne=>no(ne.locator)).join("\u2192")}: -${VB(t)}`)}let De=Oj(le);for(let ce of De)if(Pe.has(ce)){let ne=we.get(ce);if((a.get(ce.name)===ce.ident||!le.reasons.has(ce.name))&&ne.isHoistable!==0&&le.reasons.set(ce.name,ne.reason),!ce.isHoistBorder&&ye.indexOf(CQ(ce))<0){E.add(le);let Ie=gIe(le,ce);b([...U,le],Ae,ye,Ie,T),E.delete(le)}}},C,T=new Set(Oj(h)),L=Array.from(e).map(U=>CQ(U));do{C=T,T=new Set;for(let U of C){if(U.locator===h.locator||U.isHoistBorder)continue;let J=gIe(h,U);b([],Array.from(r),L,J,T)}}while(T.size>0);return{anotherRoundNeeded:I,isGraphChanged:v}},yIe=t=>{let e=[],r=new Set,o=new Set,a=(n,u,A)=>{if(r.has(n)||(r.add(n),o.has(n)))return;let p=new Map(u);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let E=p.get(h.name),I=()=>`${Array.from(o).concat([n]).map(v=>no(v.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let v=u.get(h.name);(v!==E||!v||v.ident!==h.ident)&&e.push(`${I()} - broken peer promise: expected ${h.ident} but found ${v&&v.ident}`)}else{let v=A.hoistedFrom.get(n.name),b=n.hoistedTo.get(h.name),C=`${v?` hoisted from ${v.join(", ")}`:""}`,T=`${b?` hoisted to ${b}`:""}`,L=`${I()}${C}`;E?E.ident!==h.ident&&e.push(`${L} - broken require promise for ${h.name}${T}: expected ${h.ident}, but found: ${E.ident}`):e.push(`${L} - broken require promise: no required dependency ${h.name}${T} found`)}}o.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);o.delete(n)};return a(t,t.dependencies,t),e.join(` -`)},mIt=(t,e)=>{let{identName:r,name:o,reference:a,peerNames:n}=t,u={name:o,references:new Set([a]),locator:Uj(r,a),ident:hIe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},A=new Map([[t,u]]),p=(h,E)=>{let I=A.get(h),v=!!I;if(!I){let{name:b,identName:C,reference:T,peerNames:L,hoistPriority:U,dependencyKind:J}=h,te=e.hoistingLimits.get(E.locator);I={name:b,references:new Set([T]),locator:Uj(C,T),ident:hIe(C,T),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(L),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(b):!1,hoistPriority:U||0,dependencyKind:J||0,hoistedFrom:new Map,hoistedTo:new Map},A.set(h,I)}if(E.dependencies.set(h.name,I),E.originalDependencies.set(h.name,I),v){let b=new Set,C=T=>{if(!b.has(T)){b.add(T),T.decoupled=!1;for(let L of T.dependencies.values())T.peerNames.has(L.name)||C(L)}};C(I)}else for(let b of h.dependencies)p(b,I)};for(let h of t.dependencies)p(h,u);return u},Hj=t=>t.substring(0,t.indexOf("@",1)),yIt=t=>{let e={name:t.name,identName:Hj(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),o=(a,n,u)=>{let A=r.has(a),p;if(n===a)p=u;else{let{name:h,references:E,locator:I}=a;p={name:h,identName:Hj(I),references:E,dependencies:new Set}}if(u.dependencies.add(p),!A){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||o(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())o(a,t,e);return e},EIt=t=>{let e=new Map,r=new Set([t]),o=u=>`${u.name}@${u.ident}`,a=u=>{let A=o(u),p=e.get(A);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(A,p)),p},n=(u,A)=>{let p=!!r.has(A);if(a(A).dependents.add(u.ident),!p){r.add(A);for(let E of A.dependencies.values()){let I=a(E);I.hoistPriority=Math.max(I.hoistPriority,E.hoistPriority),A.peerNames.has(E.name)?I.peerDependents.add(A.ident):n(A,E)}}};for(let u of t.dependencies.values())t.peerNames.has(u.name)||n(t,u);return e},no=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let o=t.substring(e+1);if(o==="workspace:.")return".";if(o){let a=(o.indexOf("#")>0?o.split("#")[1]:o).replace("npm:","");return o.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`},dIe=5e4,VB=t=>{let e=0,r=(a,n,u="")=>{if(e>dIe||n.has(a))return"";e++;let A=Array.from(a.dependencies.values()).sort((h,E)=>h.name===E.name?0:h.name>E.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(v!==E.name?`a:${E.name}:`:"")+no(E.locator)+(I?` ${I}`:"")} -`,p+=r(E,n,`${u}${hdIe?` +${VB(A)}`);let v=gIe(A);if(v)throw new Error(`${v}, after hoisting finished: +${VB(A)}`)}return n.debugLevel>=2&&console.log(VB(A)),pIt(A)},oIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=n=>{if(!o.has(n)){o.add(n);for(let u of n.hoistedDependencies.values())r.set(u.name,u);for(let u of n.dependencies.values())n.peerNames.has(u.name)||a(u)}};return a(e),r},aIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=new Set,n=(u,A)=>{if(o.has(u))return;o.add(u);for(let h of u.hoistedDependencies.values())if(!A.has(h.name)){let E;for(let I of t)E=I.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of u.dependencies.values())p.add(h.name);for(let h of u.dependencies.values())u.peerNames.has(h.name)||n(h,p)};return n(e,a),r},fIe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:o,ident:a,locator:n,dependencies:u,originalDependencies:A,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:I,hoistPriority:v,dependencyKind:x,hoistedFrom:C,hoistedTo:R}=e,L={name:r,references:new Set(o),ident:a,locator:n,dependencies:new Map(u),originalDependencies:new Map(A),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:I,hoistPriority:v,dependencyKind:x,hoistedFrom:new Map(C),hoistedTo:new Map(R)},U=L.dependencies.get(r);return U&&U.ident==L.ident&&L.dependencies.set(r,L),t.dependencies.set(L.name,L),L},lIt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let o=Array.from(e.keys());o.sort((a,n)=>{let u=e.get(a),A=e.get(n);return A.hoistPriority!==u.hoistPriority?A.hoistPriority-u.hoistPriority:A.peerDependents.size!==u.peerDependents.size?A.peerDependents.size-u.peerDependents.size:A.dependents.size-u.dependents.size});for(let a of o){let n=a.substring(0,a.indexOf("@",1)),u=a.substring(n.length+1);if(!t.peerNames.has(n)){let A=r.get(n);A||(A=[],r.set(n,A)),A.indexOf(u)<0&&A.push(u)}}return r},Lq=t=>{let e=new Set,r=(o,a=new Set)=>{if(!a.has(o)){a.add(o);for(let n of o.peerNames)if(!t.peerNames.has(n)){let u=t.dependencies.get(n);u&&!e.has(u)&&r(u,a)}e.add(o)}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||r(o);return e},Mq=(t,e,r,o,a,n=new Set)=>{let u=e[e.length-1];if(n.has(u))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(u);let A=hIt(u),p=lIt(u,A),h=t==u?new Map:a.fastLookupPossible?oIt(e):aIt(e),E,I=!1,v=!1,x=new Map(Array.from(p.entries()).map(([R,L])=>[R,L[0]])),C=new Map;do{let R=AIt(t,e,r,h,x,p,o,C,a);R.isGraphChanged&&(v=!0),R.anotherRoundNeeded&&(I=!0),E=!1;for(let[L,U]of p)U.length>1&&!u.dependencies.has(L)&&(x.delete(L),U.shift(),x.set(L,U[0]),E=!0)}while(E);for(let R of u.dependencies.values())if(!u.peerNames.has(R.name)&&!r.has(R.locator)){r.add(R.locator);let L=Mq(t,[...e,R],r,C,a);L.isGraphChanged&&(v=!0),L.anotherRoundNeeded&&(I=!0),r.delete(R.locator)}return{anotherRoundNeeded:I,isGraphChanged:v}},cIt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},uIt=(t,e,r,o,a,n,u,A,{outputReason:p,fastLookupPossible:h})=>{let E,I=null,v=new Set;p&&(E=`${Array.from(e).map(L=>no(L)).join("\u2192")}`);let x=r[r.length-1],R=!(o.ident===x.ident);if(p&&!R&&(I="- self-reference"),R&&(R=o.dependencyKind!==1,p&&!R&&(I="- workspace")),R&&o.dependencyKind===2&&(R=!cIt(o),p&&!R&&(I="- external soft link with unhoisted dependencies")),R&&(R=x.dependencyKind!==1||x.hoistedFrom.has(o.name)||e.size===1,p&&!R&&(I=x.reasons.get(o.name))),R&&(R=!t.peerNames.has(o.name),p&&!R&&(I=`- cannot shadow peer: ${no(t.originalDependencies.get(o.name).locator)} at ${E}`)),R){let L=!1,U=a.get(o.name);if(L=!U||U.ident===o.ident,p&&!L&&(I=`- filled by: ${no(U.locator)} at ${E}`),L)for(let J=r.length-1;J>=1;J--){let ae=r[J].dependencies.get(o.name);if(ae&&ae.ident!==o.ident){L=!1;let fe=A.get(x);fe||(fe=new Set,A.set(x,fe)),fe.add(o.name),p&&(I=`- filled by ${no(ae.locator)} at ${r.slice(0,J).map(ce=>no(ce.locator)).join("\u2192")}`);break}}R=L}if(R&&(R=n.get(o.name)===o.ident,p&&!R&&(I=`- filled by: ${no(u.get(o.name)[0])} at ${E}`)),R){let L=!0,U=new Set(o.peerNames);for(let J=r.length-1;J>=1;J--){let te=r[J];for(let ae of U){if(te.peerNames.has(ae)&&te.originalDependencies.has(ae))continue;let fe=te.dependencies.get(ae);fe&&t.dependencies.get(ae)!==fe&&(J===r.length-1?v.add(fe):(v=null,L=!1,p&&(I=`- peer dependency ${no(fe.locator)} from parent ${no(te.locator)} was not hoisted to ${E}`))),U.delete(ae)}if(!L)break}R=L}if(R&&!h)for(let L of o.hoistedDependencies.values()){let U=a.get(L.name)||t.dependencies.get(L.name);if(!U||L.ident!==U.ident){R=!1,p&&(I=`- previously hoisted dependency mismatch, needed: ${no(L.locator)}, available: ${no(U?.locator)}`);break}}return v!==null&&v.size>0?{isHoistable:2,dependsOn:v,reason:I}:{isHoistable:R?0:1,reason:I}},yQ=t=>`${t.name}@${t.locator}`,AIt=(t,e,r,o,a,n,u,A,p)=>{let h=e[e.length-1],E=new Set,I=!1,v=!1,x=(U,J,te,ae,fe)=>{if(E.has(ae))return;let ce=[...J,yQ(ae)],me=[...te,yQ(ae)],he=new Map,Be=new Map;for(let le of Lq(ae)){let ne=uIt(h,r,[h,...U,ae],le,o,a,n,A,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(Be.set(le,ne),ne.isHoistable===2)for(let ee of ne.dependsOn){let Ie=he.get(ee.name)||new Set;Ie.add(le.name),he.set(ee.name,Ie)}}let we=new Set,g=(le,ne,ee)=>{if(!we.has(le)){we.add(le),Be.set(le,{isHoistable:1,reason:ee});for(let Ie of he.get(le.name)||[])g(ae.dependencies.get(Ie),ne,p.debugLevel>=2?`- peer dependency ${no(le.locator)} from parent ${no(ae.locator)} was not hoisted`:"")}};for(let[le,ne]of Be)ne.isHoistable===1&&g(le,ne,ne.reason);let Ee=!1;for(let le of Be.keys())if(!we.has(le)){v=!0;let ne=u.get(ae);ne&&ne.has(le.name)&&(I=!0),Ee=!0,ae.dependencies.delete(le.name),ae.hoistedDependencies.set(le.name,le),ae.reasons.delete(le.name);let ee=h.dependencies.get(le.name);if(p.debugLevel>=2){let Ie=Array.from(J).concat([ae.locator]).map(At=>no(At)).join("\u2192"),Fe=h.hoistedFrom.get(le.name);Fe||(Fe=[],h.hoistedFrom.set(le.name,Fe)),Fe.push(Ie),ae.hoistedTo.set(le.name,Array.from(e).map(At=>no(At.locator)).join("\u2192"))}if(!ee)h.ident!==le.ident&&(h.dependencies.set(le.name,le),fe.add(le));else for(let Ie of le.references)ee.references.add(Ie)}if(ae.dependencyKind===2&&Ee&&(I=!0),p.check){let le=gIe(t);if(le)throw new Error(`${le}, after hoisting dependencies of ${[h,...U,ae].map(ne=>no(ne.locator)).join("\u2192")}: +${VB(t)}`)}let Se=Lq(ae);for(let le of Se)if(we.has(le)){let ne=Be.get(le);if((a.get(le.name)===le.ident||!ae.reasons.has(le.name))&&ne.isHoistable!==0&&ae.reasons.set(le.name,ne.reason),!le.isHoistBorder&&me.indexOf(yQ(le))<0){E.add(ae);let Ie=fIe(ae,le);x([...U,ae],ce,me,Ie,R),E.delete(ae)}}},C,R=new Set(Lq(h)),L=Array.from(e).map(U=>yQ(U));do{C=R,R=new Set;for(let U of C){if(U.locator===h.locator||U.isHoistBorder)continue;let J=fIe(h,U);x([],Array.from(r),L,J,R)}}while(R.size>0);return{anotherRoundNeeded:I,isGraphChanged:v}},gIe=t=>{let e=[],r=new Set,o=new Set,a=(n,u,A)=>{if(r.has(n)||(r.add(n),o.has(n)))return;let p=new Map(u);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let E=p.get(h.name),I=()=>`${Array.from(o).concat([n]).map(v=>no(v.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let v=u.get(h.name);(v!==E||!v||v.ident!==h.ident)&&e.push(`${I()} - broken peer promise: expected ${h.ident} but found ${v&&v.ident}`)}else{let v=A.hoistedFrom.get(n.name),x=n.hoistedTo.get(h.name),C=`${v?` hoisted from ${v.join(", ")}`:""}`,R=`${x?` hoisted to ${x}`:""}`,L=`${I()}${C}`;E?E.ident!==h.ident&&e.push(`${L} - broken require promise for ${h.name}${R}: expected ${h.ident}, but found: ${E.ident}`):e.push(`${L} - broken require promise: no required dependency ${h.name}${R} found`)}}o.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);o.delete(n)};return a(t,t.dependencies,t),e.join(` +`)},fIt=(t,e)=>{let{identName:r,name:o,reference:a,peerNames:n}=t,u={name:o,references:new Set([a]),locator:Oq(r,a),ident:AIe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},A=new Map([[t,u]]),p=(h,E)=>{let I=A.get(h),v=!!I;if(!I){let{name:x,identName:C,reference:R,peerNames:L,hoistPriority:U,dependencyKind:J}=h,te=e.hoistingLimits.get(E.locator);I={name:x,references:new Set([R]),locator:Oq(C,R),ident:AIe(C,R),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(L),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(x):!1,hoistPriority:U||0,dependencyKind:J||0,hoistedFrom:new Map,hoistedTo:new Map},A.set(h,I)}if(E.dependencies.set(h.name,I),E.originalDependencies.set(h.name,I),v){let x=new Set,C=R=>{if(!x.has(R)){x.add(R),R.decoupled=!1;for(let L of R.dependencies.values())R.peerNames.has(L.name)||C(L)}};C(I)}else for(let x of h.dependencies)p(x,I)};for(let h of t.dependencies)p(h,u);return u},Uq=t=>t.substring(0,t.indexOf("@",1)),pIt=t=>{let e={name:t.name,identName:Uq(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),o=(a,n,u)=>{let A=r.has(a),p;if(n===a)p=u;else{let{name:h,references:E,locator:I}=a;p={name:h,identName:Uq(I),references:E,dependencies:new Set}}if(u.dependencies.add(p),!A){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||o(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())o(a,t,e);return e},hIt=t=>{let e=new Map,r=new Set([t]),o=u=>`${u.name}@${u.ident}`,a=u=>{let A=o(u),p=e.get(A);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(A,p)),p},n=(u,A)=>{let p=!!r.has(A);if(a(A).dependents.add(u.ident),!p){r.add(A);for(let E of A.dependencies.values()){let I=a(E);I.hoistPriority=Math.max(I.hoistPriority,E.hoistPriority),A.peerNames.has(E.name)?I.peerDependents.add(A.ident):n(A,E)}}};for(let u of t.dependencies.values())t.peerNames.has(u.name)||n(t,u);return e},no=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let o=t.substring(e+1);if(o==="workspace:.")return".";if(o){let a=(o.indexOf("#")>0?o.split("#")[1]:o).replace("npm:","");return o.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`},pIe=5e4,VB=t=>{let e=0,r=(a,n,u="")=>{if(e>pIe||n.has(a))return"";e++;let A=Array.from(a.dependencies.values()).sort((h,E)=>h.name===E.name?0:h.name>E.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(v!==E.name?`a:${E.name}:`:"")+no(E.locator)+(I?` ${I}`:"")} +`,p+=r(E,n,`${u}${hpIe?` Tree is too large, part of the tree has been dunped -`:"")};var KB=(o=>(o.WORKSPACES="workspaces",o.DEPENDENCIES="dependencies",o.NONE="none",o))(KB||{}),EIe="node_modules",B0="$wsroot$";var JB=(t,e)=>{let{packageTree:r,hoistingLimits:o,errors:a,preserveSymlinksRequired:n}=wIt(t,e),u=null;if(a.length===0){let A=mIe(r,{hoistingLimits:o});u=BIt(t,A,e)}return{tree:u,errors:a,preserveSymlinksRequired:n}},gA=t=>`${t.name}@${t.reference}`,qj=t=>{let e=new Map;for(let[r,o]of t.entries())if(!o.dirList){let a=e.get(o.locator);a||(a={target:o.target,linkType:o.linkType,locations:[],aliases:o.aliases},e.set(o.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((o,a)=>{let n=o.split(K.delimiter).length,u=a.split(K.delimiter).length;return a===o?0:n!==u?u-n:a>o?1:-1});return e},CIe=(t,e)=>{let r=W.isVirtualLocator(t)?W.devirtualizeLocator(t):t,o=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e;return W.areLocatorsEqual(r,o)},jj=(t,e,r,o)=>{if(t.linkType!=="SOFT")return!1;let a=ue.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return K.contains(o,a)===null},CIt=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let o=ue.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},u=t.getDependencyTreeRoots(),A=new Map,p=new Set,h=(v,b)=>{let C=gA(v);if(p.has(C))return;p.add(C);let T=t.getPackageInformation(v);if(T){let L=b?gA(b):"";if(gA(v)!==L&&T.linkType==="SOFT"&&!jj(T,v,t,o)){let U=wIe(T,v,t);(!A.get(U)||v.reference.startsWith("workspace:"))&&A.set(U,v)}for(let[U,J]of T.packageDependencies)J!==null&&(T.packagePeers.has(U)||h(t.getLocator(U,J),v))}};for(let v of u)h(v,null);let E=o.split(K.sep);for(let v of A.values()){let b=t.getPackageInformation(v),T=ue.toPortablePath(b.packageLocation.slice(0,-1)).split(K.sep).slice(E.length),L=n;for(let U of T){let J=L.children.get(U);J||(J={children:new Map},L.children.set(U,J)),L=J}L.workspaceLocator=v}let I=(v,b)=>{if(v.workspaceLocator){let C=gA(b),T=a.get(C);T||(T=new Set,a.set(C,T)),T.add(v.workspaceLocator)}for(let C of v.children.values())I(C,v.workspaceLocator||b)};for(let v of n.children.values())I(v,n.workspaceLocator);return a},wIt=(t,e)=>{let r=[],o=!1,a=new Map,n=CIt(t),u=t.getPackageInformation(t.topLevel);if(u===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let A=t.findPackageLocator(u.packageLocation);if(A===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=ue.toPortablePath(u.packageLocation.slice(0,-1)),h={name:A.name,identName:A.name,reference:A.reference,peerNames:u.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,I=(b,C)=>`${gA(C)}:${b}`,v=(b,C,T,L,U,J,te,le)=>{let pe=I(b,T),Ae=E.get(pe),ye=!!Ae;!ye&&T.name===A.name&&T.reference===A.reference&&(Ae=h,E.set(pe,h));let ae=jj(C,T,t,p);if(!Ae){let ce=0;ae?ce=2:C.linkType==="SOFT"&&T.name.endsWith(B0)&&(ce=1),Ae={name:b,identName:T.name,reference:T.reference,dependencies:new Set,peerNames:ce===1?new Set:C.packagePeers,dependencyKind:ce},E.set(pe,Ae)}let we;if(ae?we=2:U.linkType==="SOFT"?we=1:we=0,Ae.hoistPriority=Math.max(Ae.hoistPriority||0,we),le&&!ae){let ce=gA({name:L.identName,reference:L.reference}),ne=a.get(ce)||new Set;a.set(ce,ne),ne.add(Ae.name)}let Pe=new Map(C.packageDependencies);if(e.project){let ce=e.project.workspacesByCwd.get(ue.toPortablePath(C.packageLocation.slice(0,-1)));if(ce){let ne=new Set([...Array.from(ce.manifest.peerDependencies.values(),ee=>W.stringifyIdent(ee)),...Array.from(ce.manifest.peerDependenciesMeta.keys())]);for(let ee of ne)Pe.has(ee)||(Pe.set(ee,J.get(ee)||null),Ae.peerNames.add(ee))}}let g=gA({name:T.name.replace(B0,""),reference:T.reference}),Ee=n.get(g);if(Ee)for(let ce of Ee)Pe.set(`${ce.name}${B0}`,ce.reference);(C!==U||C.linkType!=="SOFT"||!ae&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&L.dependencies.add(Ae);let De=T!==A&&C.linkType==="SOFT"&&!T.name.endsWith(B0)&&!ae;if(!ye&&!De){let ce=new Map;for(let[ne,ee]of Pe)if(ee!==null){let Ie=t.getLocator(ne,ee),ke=t.getLocator(ne.replace(B0,""),ee),ht=t.getPackageInformation(ke);if(ht===null)throw new Error("Assertion failed: Expected the package to have been registered");let H=jj(ht,Ie,t,p);if(e.validateExternalSoftLinks&&e.project&&H){ht.packageDependencies.size>0&&(o=!0);for(let[_e,Te]of ht.packageDependencies)if(Te!==null){let Je=W.parseLocator(Array.isArray(Te)?`${Te[0]}@${Te[1]}`:`${_e}@${Te}`);if(gA(Je)!==gA(Ie)){let He=Pe.get(_e);if(He){let x=W.parseLocator(Array.isArray(He)?`${He[0]}@${He[1]}`:`${_e}@${He}`);CIe(x,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${T.name}@${T.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with parent dependency ${W.prettyLocator(e.project.configuration,x)}`})}else{let x=ce.get(_e);if(x){let w=x.target,S=W.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${_e}@${w}`);CIe(S,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${T.name}@${T.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with dependency ${W.prettyLocator(e.project.configuration,S)} from sibling portal ${W.prettyIdent(e.project.configuration,W.parseIdent(x.portal.name))}`})}else ce.set(_e,{target:Je.reference,portal:Ie})}}}}let lt=e.hoistingLimitsByCwd?.get(te),Re=H?te:K.relative(p,ue.toPortablePath(ht.packageLocation))||Bt.dot,Qe=e.hoistingLimitsByCwd?.get(Re);v(ne,ht,Ie,Ae,C,Pe,Re,lt==="dependencies"||Qe==="dependencies"||Qe==="workspaces")}}};return v(A.name,u,A,h,u,u.packageDependencies,Bt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:o}};function wIe(t,e,r){let o=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return ue.toPortablePath(o||t.packageLocation)}function IIt(t,e,r){let o=e.getLocator(t.name.replace(B0,""),t.reference),a=e.getPackageInformation(o);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:ue.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:wIe(a,t,e)}}var BIt=(t,e,r)=>{let o=new Map,a=(E,I,v)=>{let{linkType:b,target:C}=IIt(E,t,r);return{locator:gA(E),nodePath:I,target:C,linkType:b,aliases:v}},n=E=>{let[I,v]=E.split("/");return v?{scope:I,name:v}:{scope:null,name:I}},u=new Set,A=(E,I,v)=>{if(u.has(E))return;u.add(E);let b=Array.from(E.references).sort().join("#");for(let C of E.dependencies){let T=Array.from(C.references).sort().join("#");if(C.identName===E.identName.replace(B0,"")&&T===b)continue;let L=Array.from(C.references).sort(),U={name:C.identName,reference:L[0]},{name:J,scope:te}=n(C.name),le=te?[te,J]:[J],pe=K.join(I,EIe),Ae=K.join(pe,...le),ye=`${v}/${U.name}`,ae=a(U,v,L.slice(1)),we=!1;if(ae.linkType==="SOFT"&&r.project){let Pe=r.project.workspacesByCwd.get(ae.target.slice(0,-1));we=!!(Pe&&!Pe.manifest.name)}if(!C.name.endsWith(B0)&&!we){let Pe=o.get(Ae);if(Pe){if(Pe.dirList)throw new Error(`Assertion failed: ${Ae} cannot merge dir node with leaf node`);{let De=W.parseLocator(Pe.locator),ce=W.parseLocator(ae.locator);if(Pe.linkType!==ae.linkType)throw new Error(`Assertion failed: ${Ae} cannot merge nodes with different link types ${Pe.nodePath}/${W.stringifyLocator(De)} and ${v}/${W.stringifyLocator(ce)}`);if(De.identHash!==ce.identHash)throw new Error(`Assertion failed: ${Ae} cannot merge nodes with different idents ${Pe.nodePath}/${W.stringifyLocator(De)} and ${v}/s${W.stringifyLocator(ce)}`);ae.aliases=[...ae.aliases,...Pe.aliases,W.parseLocator(Pe.locator).reference]}}o.set(Ae,ae);let g=Ae.split("/"),Ee=g.indexOf(EIe);for(let De=g.length-1;Ee>=0&&De>Ee;De--){let ce=ue.toPortablePath(g.slice(0,De).join(K.sep)),ne=g[De],ee=o.get(ce);if(!ee)o.set(ce,{dirList:new Set([ne])});else if(ee.dirList){if(ee.dirList.has(ne))break;ee.dirList.add(ne)}}}A(C,ae.linkType==="SOFT"?ae.target:Ae,ye)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return o.set(h,p),A(e,h,""),o};Ye();Ye();Pt();Pt();nA();Nl();var lq={};Kt(lq,{PnpInstaller:()=>dm,PnpLinker:()=>P0,UnplugCommand:()=>x0,default:()=>$It,getPnpPath:()=>S0,jsInstallUtils:()=>mA,pnpUtils:()=>av,quotePathIfNeeded:()=>s1e});Pt();var i1e=Be("url");Ye();Ye();Pt();Pt();var IIe={["DEFAULT"]:{collapsed:!1,next:{["*"]:"DEFAULT"}},["TOP_LEVEL"]:{collapsed:!1,next:{fallbackExclusionList:"FALLBACK_EXCLUSION_LIST",packageRegistryData:"PACKAGE_REGISTRY_DATA",["*"]:"DEFAULT"}},["FALLBACK_EXCLUSION_LIST"]:{collapsed:!1,next:{["*"]:"FALLBACK_EXCLUSION_ENTRIES"}},["FALLBACK_EXCLUSION_ENTRIES"]:{collapsed:!0,next:{["*"]:"FALLBACK_EXCLUSION_DATA"}},["FALLBACK_EXCLUSION_DATA"]:{collapsed:!0,next:{["*"]:"DEFAULT"}},["PACKAGE_REGISTRY_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_REGISTRY_ENTRIES"}},["PACKAGE_REGISTRY_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_STORE_DATA"}},["PACKAGE_STORE_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_STORE_ENTRIES"}},["PACKAGE_STORE_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_INFORMATION_DATA"}},["PACKAGE_INFORMATION_DATA"]:{collapsed:!1,next:{packageDependencies:"PACKAGE_DEPENDENCIES",["*"]:"DEFAULT"}},["PACKAGE_DEPENDENCIES"]:{collapsed:!1,next:{["*"]:"PACKAGE_DEPENDENCY"}},["PACKAGE_DEPENDENCY"]:{collapsed:!0,next:{["*"]:"DEFAULT"}}};function vIt(t,e,r){let o="";o+="[";for(let a=0,n=t.length;a"u"||(A!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=wQ(p,h,e,r).replace(/^ +/g,""),A+=1)}return a+="}",a}function SIt(t,e,r){let o=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ +`:"")};var JB=(o=>(o.WORKSPACES="workspaces",o.DEPENDENCIES="dependencies",o.NONE="none",o))(JB||{}),dIe="node_modules",v0="$wsroot$";var zB=(t,e)=>{let{packageTree:r,hoistingLimits:o,errors:a,preserveSymlinksRequired:n}=dIt(t,e),u=null;if(a.length===0){let A=hIe(r,{hoistingLimits:o});u=yIt(t,A,e)}return{tree:u,errors:a,preserveSymlinksRequired:n}},gA=t=>`${t.name}@${t.reference}`,Hq=t=>{let e=new Map;for(let[r,o]of t.entries())if(!o.dirList){let a=e.get(o.locator);a||(a={target:o.target,linkType:o.linkType,locations:[],aliases:o.aliases},e.set(o.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((o,a)=>{let n=o.split(V.delimiter).length,u=a.split(V.delimiter).length;return a===o?0:n!==u?u-n:a>o?1:-1});return e},mIe=(t,e)=>{let r=W.isVirtualLocator(t)?W.devirtualizeLocator(t):t,o=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e;return W.areLocatorsEqual(r,o)},_q=(t,e,r,o)=>{if(t.linkType!=="SOFT")return!1;let a=ue.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return V.contains(o,a)===null},gIt=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let o=ue.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},u=t.getDependencyTreeRoots(),A=new Map,p=new Set,h=(v,x)=>{let C=gA(v);if(p.has(C))return;p.add(C);let R=t.getPackageInformation(v);if(R){let L=x?gA(x):"";if(gA(v)!==L&&R.linkType==="SOFT"&&!v.reference.startsWith("link:")&&!_q(R,v,t,o)){let U=yIe(R,v,t);(!A.get(U)||v.reference.startsWith("workspace:"))&&A.set(U,v)}for(let[U,J]of R.packageDependencies)J!==null&&(R.packagePeers.has(U)||h(t.getLocator(U,J),v))}};for(let v of u)h(v,null);let E=o.split(V.sep);for(let v of A.values()){let x=t.getPackageInformation(v),R=ue.toPortablePath(x.packageLocation.slice(0,-1)).split(V.sep).slice(E.length),L=n;for(let U of R){let J=L.children.get(U);J||(J={children:new Map},L.children.set(U,J)),L=J}L.workspaceLocator=v}let I=(v,x)=>{if(v.workspaceLocator){let C=gA(x),R=a.get(C);R||(R=new Set,a.set(C,R)),R.add(v.workspaceLocator)}for(let C of v.children.values())I(C,v.workspaceLocator||x)};for(let v of n.children.values())I(v,n.workspaceLocator);return a},dIt=(t,e)=>{let r=[],o=!1,a=new Map,n=gIt(t),u=t.getPackageInformation(t.topLevel);if(u===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let A=t.findPackageLocator(u.packageLocation);if(A===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=ue.toPortablePath(u.packageLocation.slice(0,-1)),h={name:A.name,identName:A.name,reference:A.reference,peerNames:u.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,I=(x,C)=>`${gA(C)}:${x}`,v=(x,C,R,L,U,J,te,ae)=>{let fe=I(x,R),ce=E.get(fe),me=!!ce;!me&&R.name===A.name&&R.reference===A.reference&&(ce=h,E.set(fe,h));let he=_q(C,R,t,p);if(!ce){let le=0;he?le=2:C.linkType==="SOFT"&&R.name.endsWith(v0)&&(le=1),ce={name:x,identName:R.name,reference:R.reference,dependencies:new Set,peerNames:le===1?new Set:C.packagePeers,dependencyKind:le},E.set(fe,ce)}let Be;if(he?Be=2:U.linkType==="SOFT"?Be=1:Be=0,ce.hoistPriority=Math.max(ce.hoistPriority||0,Be),ae&&!he){let le=gA({name:L.identName,reference:L.reference}),ne=a.get(le)||new Set;a.set(le,ne),ne.add(ce.name)}let we=new Map(C.packageDependencies);if(e.project){let le=e.project.workspacesByCwd.get(ue.toPortablePath(C.packageLocation.slice(0,-1)));if(le){let ne=new Set([...Array.from(le.manifest.peerDependencies.values(),ee=>W.stringifyIdent(ee)),...Array.from(le.manifest.peerDependenciesMeta.keys())]);for(let ee of ne)we.has(ee)||(we.set(ee,J.get(ee)||null),ce.peerNames.add(ee))}}let g=gA({name:R.name.replace(v0,""),reference:R.reference}),Ee=n.get(g);if(Ee)for(let le of Ee)we.set(`${le.name}${v0}`,le.reference);(C!==U||C.linkType!=="SOFT"||!he&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&L.dependencies.add(ce);let Se=R!==A&&C.linkType==="SOFT"&&!R.name.endsWith(v0)&&!he;if(!me&&!Se){let le=new Map;for(let[ne,ee]of we)if(ee!==null){let Ie=t.getLocator(ne,ee),Fe=t.getLocator(ne.replace(v0,""),ee),At=t.getPackageInformation(Fe);if(At===null)throw new Error("Assertion failed: Expected the package to have been registered");let H=_q(At,Ie,t,p);if(e.validateExternalSoftLinks&&e.project&&H){At.packageDependencies.size>0&&(o=!0);for(let[He,Te]of At.packageDependencies)if(Te!==null){let Je=W.parseLocator(Array.isArray(Te)?`${Te[0]}@${Te[1]}`:`${He}@${Te}`);if(gA(Je)!==gA(Ie)){let qe=we.get(He);if(qe){let b=W.parseLocator(Array.isArray(qe)?`${qe[0]}@${qe[1]}`:`${He}@${qe}`);mIe(b,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${R.name}@${R.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with parent dependency ${W.prettyLocator(e.project.configuration,b)}`})}else{let b=le.get(He);if(b){let w=b.target,P=W.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${He}@${w}`);mIe(P,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${R.name}@${R.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with dependency ${W.prettyLocator(e.project.configuration,P)} from sibling portal ${W.prettyIdent(e.project.configuration,W.parseIdent(b.portal.name))}`})}else le.set(He,{target:Je.reference,portal:Ie})}}}}let at=e.hoistingLimitsByCwd?.get(te),Re=H?te:V.relative(p,ue.toPortablePath(At.packageLocation))||Bt.dot,ke=e.hoistingLimitsByCwd?.get(Re);v(ne,At,Ie,ce,C,we,Re,at==="dependencies"||ke==="dependencies"||ke==="workspaces")}}};return v(A.name,u,A,h,u,u.packageDependencies,Bt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:o}};function yIe(t,e,r){let o=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return ue.toPortablePath(o||t.packageLocation)}function mIt(t,e,r){let o=e.getLocator(t.name.replace(v0,""),t.reference),a=e.getPackageInformation(o);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:ue.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:yIe(a,t,e)}}var yIt=(t,e,r)=>{let o=new Map,a=(E,I,v)=>{let{linkType:x,target:C}=mIt(E,t,r);return{locator:gA(E),nodePath:I,target:C,linkType:x,aliases:v}},n=E=>{let[I,v]=E.split("/");return v?{scope:I,name:v}:{scope:null,name:I}},u=new Set,A=(E,I,v)=>{if(u.has(E))return;u.add(E);let x=Array.from(E.references).sort().join("#");for(let C of E.dependencies){let R=Array.from(C.references).sort().join("#");if(C.identName===E.identName.replace(v0,"")&&R===x)continue;let L=Array.from(C.references).sort(),U={name:C.identName,reference:L[0]},{name:J,scope:te}=n(C.name),ae=te?[te,J]:[J],fe=V.join(I,dIe),ce=V.join(fe,...ae),me=`${v}/${U.name}`,he=a(U,v,L.slice(1)),Be=!1;if(he.linkType==="SOFT"&&r.project){let we=r.project.workspacesByCwd.get(he.target.slice(0,-1));Be=!!(we&&!we.manifest.name)}if(!C.name.endsWith(v0)&&!Be){let we=o.get(ce);if(we){if(we.dirList)throw new Error(`Assertion failed: ${ce} cannot merge dir node with leaf node`);{let Se=W.parseLocator(we.locator),le=W.parseLocator(he.locator);if(we.linkType!==he.linkType)throw new Error(`Assertion failed: ${ce} cannot merge nodes with different link types ${we.nodePath}/${W.stringifyLocator(Se)} and ${v}/${W.stringifyLocator(le)}`);if(Se.identHash!==le.identHash)throw new Error(`Assertion failed: ${ce} cannot merge nodes with different idents ${we.nodePath}/${W.stringifyLocator(Se)} and ${v}/s${W.stringifyLocator(le)}`);he.aliases=[...he.aliases,...we.aliases,W.parseLocator(we.locator).reference]}}o.set(ce,he);let g=ce.split("/"),Ee=g.indexOf(dIe);for(let Se=g.length-1;Ee>=0&&Se>Ee;Se--){let le=ue.toPortablePath(g.slice(0,Se).join(V.sep)),ne=g[Se],ee=o.get(le);if(!ee)o.set(le,{dirList:new Set([ne])});else if(ee.dirList){if(ee.dirList.has(ne))break;ee.dirList.add(ne)}}}A(C,he.linkType==="SOFT"?he.target:ce,me)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return o.set(h,p),A(e,h,""),o};Ye();Ye();St();St();nA();Nl();var oj={};Vt(oj,{PnpInstaller:()=>mm,PnpLinker:()=>P0,UnplugCommand:()=>x0,default:()=>VIt,getPnpPath:()=>b0,jsInstallUtils:()=>yA,pnpUtils:()=>av,quotePathIfNeeded:()=>r1e});St();var t1e=ve("url");Ye();Ye();St();St();var EIe={["DEFAULT"]:{collapsed:!1,next:{["*"]:"DEFAULT"}},["TOP_LEVEL"]:{collapsed:!1,next:{fallbackExclusionList:"FALLBACK_EXCLUSION_LIST",packageRegistryData:"PACKAGE_REGISTRY_DATA",["*"]:"DEFAULT"}},["FALLBACK_EXCLUSION_LIST"]:{collapsed:!1,next:{["*"]:"FALLBACK_EXCLUSION_ENTRIES"}},["FALLBACK_EXCLUSION_ENTRIES"]:{collapsed:!0,next:{["*"]:"FALLBACK_EXCLUSION_DATA"}},["FALLBACK_EXCLUSION_DATA"]:{collapsed:!0,next:{["*"]:"DEFAULT"}},["PACKAGE_REGISTRY_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_REGISTRY_ENTRIES"}},["PACKAGE_REGISTRY_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_STORE_DATA"}},["PACKAGE_STORE_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_STORE_ENTRIES"}},["PACKAGE_STORE_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_INFORMATION_DATA"}},["PACKAGE_INFORMATION_DATA"]:{collapsed:!1,next:{packageDependencies:"PACKAGE_DEPENDENCIES",["*"]:"DEFAULT"}},["PACKAGE_DEPENDENCIES"]:{collapsed:!1,next:{["*"]:"PACKAGE_DEPENDENCY"}},["PACKAGE_DEPENDENCY"]:{collapsed:!0,next:{["*"]:"DEFAULT"}}};function EIt(t,e,r){let o="";o+="[";for(let a=0,n=t.length;a"u"||(A!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=EQ(p,h,e,r).replace(/^ +/g,""),A+=1)}return a+="}",a}function IIt(t,e,r){let o=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ `;let u=0;for(let A=0,p=o.length;A"u"||(u!==0&&(n+=",",n+=` -`),n+=a,n+=JSON.stringify(h),n+=": ",n+=wQ(h,E,e,a).replace(/^ +/g,""),u+=1)}return u!==0&&(n+=` -`),n+=r,n+="}",n}function wQ(t,e,r,o){let{next:a}=IIe[r],n=a[t]||a["*"];return BIe(e,n,o)}function BIe(t,e,r){let{collapsed:o}=IIe[e];return Array.isArray(t)?o?vIt(t,e,r):DIt(t,e,r):typeof t=="object"&&t!==null?o?PIt(t,e,r):SIt(t,e,r):JSON.stringify(t)}function vIe(t){return BIe(t,"TOP_LEVEL","")}function zB(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function xIt(t){let e=new Map,r=zB(t.fallbackExclusionList||[],[({name:o,reference:a})=>o,({name:o,reference:a})=>a]);for(let{name:o,reference:a}of r){let n=e.get(o);typeof n>"u"&&e.set(o,n=new Set),n.add(a)}return Array.from(e).map(([o,a])=>[o,Array.from(a)])}function bIt(t){return zB(t.fallbackPool||[],([e])=>e)}function kIt(t){let e=[];for(let[r,o]of zB(t.packageRegistry,([a])=>a===null?"0":`1${a}`)){let a=[];e.push([r,a]);for(let[n,{packageLocation:u,packageDependencies:A,packagePeers:p,linkType:h,discardFromLookup:E}]of zB(o,([I])=>I===null?"0":`1${I}`)){let I=[];r!==null&&n!==null&&!A.has(r)&&I.push([r,n]);for(let[C,T]of zB(A.entries(),([L])=>L))I.push([C,T]);let v=p&&p.size>0?Array.from(p):void 0,b=E||void 0;a.push([n,{packageLocation:u,packageDependencies:I,packagePeers:v,linkType:h,discardFromLookup:b}])}}return e}function XB(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:xIt(t),fallbackPool:bIt(t),packageRegistryData:kIt(t)}}var SIe=$e(PIe());function xIe(t,e){return[t?`${t} +`),n+=a,n+=JSON.stringify(h),n+=": ",n+=EQ(h,E,e,a).replace(/^ +/g,""),u+=1)}return u!==0&&(n+=` +`),n+=r,n+="}",n}function EQ(t,e,r,o){let{next:a}=EIe[r],n=a[t]||a["*"];return CIe(e,n,o)}function CIe(t,e,r){let{collapsed:o}=EIe[e];return Array.isArray(t)?o?EIt(t,e,r):CIt(t,e,r):typeof t=="object"&&t!==null?o?wIt(t,e,r):IIt(t,e,r):JSON.stringify(t)}function wIe(t){return CIe(t,"TOP_LEVEL","")}function XB(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function BIt(t){let e=new Map,r=XB(t.fallbackExclusionList||[],[({name:o,reference:a})=>o,({name:o,reference:a})=>a]);for(let{name:o,reference:a}of r){let n=e.get(o);typeof n>"u"&&e.set(o,n=new Set),n.add(a)}return Array.from(e).map(([o,a])=>[o,Array.from(a)])}function vIt(t){return XB(t.fallbackPool||[],([e])=>e)}function DIt(t){let e=[];for(let[r,o]of XB(t.packageRegistry,([a])=>a===null?"0":`1${a}`)){let a=[];e.push([r,a]);for(let[n,{packageLocation:u,packageDependencies:A,packagePeers:p,linkType:h,discardFromLookup:E}]of XB(o,([I])=>I===null?"0":`1${I}`)){let I=[];r!==null&&n!==null&&!A.has(r)&&I.push([r,n]);for(let[C,R]of XB(A.entries(),([L])=>L))I.push([C,R]);let v=p&&p.size>0?Array.from(p):void 0,x=E||void 0;a.push([n,{packageLocation:u,packageDependencies:I,packagePeers:v,linkType:h,discardFromLookup:x}])}}return e}function ZB(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:BIt(t),fallbackPool:vIt(t),packageRegistryData:DIt(t)}}var vIe=$e(BIe());function DIe(t,e){return[t?`${t} `:"",`/* eslint-disable */ `,`"use strict"; `,` `,e,` -`,(0,SIe.default)()].join("")}function QIt(t){return JSON.stringify(t,null,2)}function FIt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ -`)}'`}function TIt(t){return[`const RAW_RUNTIME_STATE = -`,`${FIt(vIe(t))}; +`,(0,vIe.default)()].join("")}function SIt(t){return JSON.stringify(t,null,2)}function PIt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ +`)}'`}function bIt(t){return[`const RAW_RUNTIME_STATE = +`,`${PIt(wIe(t))}; `,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { `,` return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); `,`} -`].join("")}function RIt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`].join("")}function xIt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { `,` const fs = require('fs'); `,` const path = require('path'); `,` const pnpDataFilepath = path.resolve(__dirname, ${JSON.stringify(dr.pnpData)}); `,` return hydrateRuntimeState(JSON.parse(fs.readFileSync(pnpDataFilepath, 'utf8')), {basePath: basePath || __dirname}); `,`} -`].join("")}function bIe(t){let e=XB(t),r=TIt(e);return xIe(t.shebang,r)}function kIe(t){let e=XB(t),r=RIt(),o=xIe(t.shebang,r);return{dataFile:QIt(e),loaderFile:o}}Pt();function Yj(t,{basePath:e}){let r=ue.toPortablePath(e),o=K.resolve(r),a=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,n=new Map,u=new Map(t.packageRegistryData.map(([I,v])=>[I,new Map(v.map(([b,C])=>{if(I===null!=(b===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let T=C.discardFromLookup??!1,L={name:I,reference:b},U=n.get(C.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&T,T||(U.locator=L)):n.set(C.packageLocation,{locator:L,discardFromLookup:T});let J=null;return[b,{packageDependencies:new Map(C.packageDependencies),packagePeers:new Set(C.packagePeers),linkType:C.linkType,discardFromLookup:T,get packageLocation(){return J||(J=K.join(o,C.packageLocation))}}]}))])),A=new Map(t.fallbackExclusionList.map(([I,v])=>[I,new Set(v)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:A,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:u}}Pt();Pt();var rp=Be("module"),gm=Be("url"),tq=Be("util");var Oo=Be("url");var RIe=$e(Be("assert"));var Wj=Array.isArray,ZB=JSON.stringify,$B=Object.getOwnPropertyNames,pm=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Vj=(t,e)=>RegExp.prototype.exec.call(t,e),Kj=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),v0=(t,...e)=>String.prototype.endsWith.apply(t,e),Jj=(t,...e)=>String.prototype.includes.apply(t,e),zj=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),ev=(t,...e)=>String.prototype.indexOf.apply(t,e),QIe=(t,...e)=>String.prototype.replace.apply(t,e),D0=(t,...e)=>String.prototype.slice.apply(t,e),dA=(t,...e)=>String.prototype.startsWith.apply(t,e),FIe=Map,TIe=JSON.parse;function tv(t,e,r){return class extends r{constructor(...o){super(e(...o)),this.code=t,this.name=`${r.name} [${t}]`}}}var NIe=tv("ERR_PACKAGE_IMPORT_NOT_DEFINED",(t,e,r)=>`Package import specifier "${t}" is not defined${e?` in package ${e}package.json`:""} imported from ${r}`,TypeError),Xj=tv("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),LIe=tv("ERR_INVALID_PACKAGE_TARGET",(t,e,r,o=!1,a=void 0)=>{let n=typeof r=="string"&&!o&&r.length&&!dA(r,"./");return e==="."?((0,RIe.default)(o===!1),`Invalid "exports" main target ${ZB(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${o?"imports":"exports"}" target ${ZB(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),rv=tv("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),MIe=tv("ERR_PACKAGE_PATH_NOT_EXPORTED",(t,e,r=void 0)=>e==="."?`No "exports" main defined in ${t}package.json${r?` imported from ${r}`:""}`:`Package subpath '${e}' is not defined by "exports" in ${t}package.json${r?` imported from ${r}`:""}`,Error);var BQ=Be("url");function OIe(t,e){let r=Object.create(null);for(let o=0;oe):t+e}nv(r,t,o,u,a)}Vj(_Ie,D0(t,2))!==null&&nv(r,t,o,u,a);let p=new URL(t,o),h=p.pathname,E=new URL(".",o).pathname;if(dA(h,E)||nv(r,t,o,u,a),e==="")return p;if(Vj(_Ie,e)!==null){let I=n?QIe(r,"*",()=>e):r+e;MIt(I,o,u,a)}return n?new URL(Kj(HIe,p.href,()=>e)):new URL(e,p)}function UIt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function qC(t,e,r,o,a,n,u,A){if(typeof e=="string")return OIt(e,r,o,t,a,n,u,A);if(Wj(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:o===-1||t.length>e.length?-1:e.length>t.length?1:0}function _It(t,e,r){if(typeof t=="string"||Wj(t))return!0;if(typeof t!="object"||t===null)return!1;let o=$B(t),a=!1,n=0;for(let u=0;u=h.length&&v0(e,I)&&qIe(n,h)===1&&zj(h,"*")===E&&(n=h,u=D0(e,E,e.length-I.length))}}if(n){let p=r[n],h=qC(t,p,u,n,o,!0,!1,a);return h==null&&Zj(e,t,o),h}Zj(e,t,o)}function YIe({name:t,base:e,conditions:r,readFileSyncFn:o}){if(t==="#"||dA(t,"#/")||v0(t,"/")){let u="is not a valid internal imports specifier name";throw new Xj(t,u,(0,Oo.fileURLToPath)(e))}let a,n=UIe(e,o);if(n.exists){a=(0,Oo.pathToFileURL)(n.pjsonPath);let u=n.imports;if(u)if(pm(u,t)&&!Jj(t,"*")){let A=qC(a,u[t],"",t,e,!1,!0,r);if(A!=null)return A}else{let A="",p,h=$B(u);for(let E=0;E=I.length&&v0(t,b)&&qIe(A,I)===1&&zj(I,"*")===v&&(A=I,p=D0(t,v,t.length-b.length))}}if(A){let E=u[A],I=qC(a,E,p,A,e,!0,!0,r);if(I!=null)return I}}}LIt(t,a,e)}Pt();var jIt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function $i(t,e,r={},o){o??=jIt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:o},pnpCode:{...a,value:t},data:{...a,value:r}})}function au(t){return ue.normalize(ue.fromPortablePath(t))}var JIe=$e(VIe());function zIe(t){return qIt(),eq[t]}var eq;function qIt(){eq||(eq={"--conditions":[],...KIe(GIt()),...KIe(process.execArgv)})}function KIe(t){return(0,JIe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function GIt(){let t=[],e=YIt(process.env.NODE_OPTIONS||"",t);return t.length,e}function YIt(t,e){let r=[],o=!1,a=!0;for(let n=0;n[I,new Map(v.map(([x,C])=>{if(I===null!=(x===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let R=C.discardFromLookup??!1,L={name:I,reference:x},U=n.get(C.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&R,R||(U.locator=L)):n.set(C.packageLocation,{locator:L,discardFromLookup:R});let J=null;return[x,{packageDependencies:new Map(C.packageDependencies),packagePeers:new Set(C.packagePeers),linkType:C.linkType,discardFromLookup:R,get packageLocation(){return J||(J=V.join(o,C.packageLocation))}}]}))])),A=new Map(t.fallbackExclusionList.map(([I,v])=>[I,new Set(v)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:A,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:u}}St();St();var np=ve("module"),dm=ve("url"),$q=ve("util");var Mo=ve("url");var QIe=$e(ve("assert"));var Gq=Array.isArray,$B=JSON.stringify,ev=Object.getOwnPropertyNames,hm=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Yq=(t,e)=>RegExp.prototype.exec.call(t,e),Wq=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),D0=(t,...e)=>String.prototype.endsWith.apply(t,e),Kq=(t,...e)=>String.prototype.includes.apply(t,e),Vq=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),tv=(t,...e)=>String.prototype.indexOf.apply(t,e),bIe=(t,...e)=>String.prototype.replace.apply(t,e),S0=(t,...e)=>String.prototype.slice.apply(t,e),dA=(t,...e)=>String.prototype.startsWith.apply(t,e),xIe=Map,kIe=JSON.parse;function rv(t,e,r){return class extends r{constructor(...o){super(e(...o)),this.code=t,this.name=`${r.name} [${t}]`}}}var FIe=rv("ERR_PACKAGE_IMPORT_NOT_DEFINED",(t,e,r)=>`Package import specifier "${t}" is not defined${e?` in package ${e}package.json`:""} imported from ${r}`,TypeError),Jq=rv("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),RIe=rv("ERR_INVALID_PACKAGE_TARGET",(t,e,r,o=!1,a=void 0)=>{let n=typeof r=="string"&&!o&&r.length&&!dA(r,"./");return e==="."?((0,QIe.default)(o===!1),`Invalid "exports" main target ${$B(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${o?"imports":"exports"}" target ${$B(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),nv=rv("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),TIe=rv("ERR_PACKAGE_PATH_NOT_EXPORTED",(t,e,r=void 0)=>e==="."?`No "exports" main defined in ${t}package.json${r?` imported from ${r}`:""}`:`Package subpath '${e}' is not defined by "exports" in ${t}package.json${r?` imported from ${r}`:""}`,Error);var wQ=ve("url");function NIe(t,e){let r=Object.create(null);for(let o=0;oe):t+e}iv(r,t,o,u,a)}Yq(OIe,S0(t,2))!==null&&iv(r,t,o,u,a);let p=new URL(t,o),h=p.pathname,E=new URL(".",o).pathname;if(dA(h,E)||iv(r,t,o,u,a),e==="")return p;if(Yq(OIe,e)!==null){let I=n?bIe(r,"*",()=>e):r+e;FIt(I,o,u,a)}return n?new URL(Wq(MIe,p.href,()=>e)):new URL(e,p)}function TIt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function GC(t,e,r,o,a,n,u,A){if(typeof e=="string")return RIt(e,r,o,t,a,n,u,A);if(Gq(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:o===-1||t.length>e.length?-1:e.length>t.length?1:0}function NIt(t,e,r){if(typeof t=="string"||Gq(t))return!0;if(typeof t!="object"||t===null)return!1;let o=ev(t),a=!1,n=0;for(let u=0;u=h.length&&D0(e,I)&&_Ie(n,h)===1&&Vq(h,"*")===E&&(n=h,u=S0(e,E,e.length-I.length))}}if(n){let p=r[n],h=GC(t,p,u,n,o,!0,!1,a);return h==null&&zq(e,t,o),h}zq(e,t,o)}function qIe({name:t,base:e,conditions:r,readFileSyncFn:o}){if(t==="#"||dA(t,"#/")||D0(t,"/")){let u="is not a valid internal imports specifier name";throw new Jq(t,u,(0,Mo.fileURLToPath)(e))}let a,n=LIe(e,o);if(n.exists){a=(0,Mo.pathToFileURL)(n.pjsonPath);let u=n.imports;if(u)if(hm(u,t)&&!Kq(t,"*")){let A=GC(a,u[t],"",t,e,!1,!0,r);if(A!=null)return A}else{let A="",p,h=ev(u);for(let E=0;E=I.length&&D0(t,x)&&_Ie(A,I)===1&&Vq(I,"*")===v&&(A=I,p=S0(t,v,t.length-x.length))}}if(A){let E=u[A],I=GC(a,E,p,A,e,!0,!0,r);if(I!=null)return I}}}QIt(t,a,e)}St();var OIt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function $i(t,e,r={},o){o??=OIt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:o},pnpCode:{...a,value:t},data:{...a,value:r}})}function au(t){return ue.normalize(ue.fromPortablePath(t))}var WIe=$e(GIe());function KIe(t){return MIt(),Zq[t]}var Zq;function MIt(){Zq||(Zq={"--conditions":[],...YIe(UIt()),...YIe(process.execArgv)})}function YIe(t){return(0,WIe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function UIt(){let t=[],e=_It(process.env.NODE_OPTIONS||"",t);return t.length,e}function _It(t,e){let r=[],o=!1,a=!0;for(let n=0;nparseInt(t,10)),XIe=hm>19||hm===19&&sv>=2||hm===18&&sv>=13,Bzt=hm===20&&sv<6||hm===19&&sv>=3,vzt=hm>19||hm===19&&sv>=6;function ZIe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(e)))),XIe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function rq(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,o=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,u=/\/$/,A=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Re of["react-scripts","gatsby"]){let Qe=t.packageRegistry.get(Re);if(Qe)for(let be of Qe.keys()){if(be===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Re,reference:be})}}let{ignorePattern:I,packageRegistry:v,packageLocatorsByLocations:b}=t;function C(Re,Qe){return{fn:Re,args:Qe,error:null,result:null}}function T(Re){let Qe=process.stderr?.hasColors?.()??process.stdout.isTTY,be=(Je,He)=>`\x1B[${Je}m${He}\x1B[0m`,_e=Re.error;console.error(_e?be("31;1",`\u2716 ${Re.error?.message.replace(/\n.*/s,"")}`):be("33;1","\u203C Resolution")),Re.args.length>0&&console.error();for(let Je of Re.args)console.error(` ${be("37;1","In \u2190")} ${(0,tq.inspect)(Je,{colors:Qe,compact:!0})}`);Re.result&&(console.error(),console.error(` ${be("37;1","Out \u2192")} ${(0,tq.inspect)(Re.result,{colors:Qe,compact:!0})}`));let Te=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(Te.length>0){console.error();for(let Je of Te)console.error(` ${be("38;5;244",Je)}`)}console.error()}function L(Re,Qe){if(e.allowDebug===!1)return Qe;if(Number.isFinite(o)){if(o>=2)return(...be)=>{let _e=C(Re,be);try{return _e.result=Qe(...be)}catch(Te){throw _e.error=Te}finally{T(_e)}};if(o>=1)return(...be)=>{try{return Qe(...be)}catch(_e){let Te=C(Re,be);throw Te.error=_e,T(Te),_e}}}return Qe}function U(Re){let Qe=g(Re);if(!Qe)throw $i("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return Qe}function J(Re){if(Re.name===null)return!0;for(let Qe of t.dependencyTreeRoots)if(Qe.name===Re.name&&Qe.reference===Re.reference)return!0;return!1}let te=new Set(["node","require",...zIe("--conditions")]);function le(Re,Qe=te,be){let _e=ce(K.join(Re,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(_e===null)throw $i("INTERNAL",`The locator that owns the "${Re}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:Te}=U(_e),Je=K.join(Te,dr.manifest);if(!e.fakeFs.existsSync(Je))return null;let He=JSON.parse(e.fakeFs.readFileSync(Je,"utf8"));if(He.exports==null)return null;let x=K.contains(Te,Re);if(x===null)throw $i("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");x!=="."&&!A.test(x)&&(x=`./${x}`);try{let w=GIe({packageJSONUrl:(0,gm.pathToFileURL)(ue.fromPortablePath(Je)),packageSubpath:x,exports:He.exports,base:be?(0,gm.pathToFileURL)(ue.fromPortablePath(be)):null,conditions:Qe});return ue.toPortablePath((0,gm.fileURLToPath)(w))}catch(w){throw $i("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:au(Re),locator:_e,pkgJson:He,subpath:au(x),conditions:Qe},w.code)}}function pe(Re,Qe,{extensions:be}){let _e;try{Qe.push(Re),_e=e.fakeFs.statSync(Re)}catch{}if(_e&&!_e.isDirectory())return e.fakeFs.realpathSync(Re);if(_e&&_e.isDirectory()){let Te;try{Te=JSON.parse(e.fakeFs.readFileSync(K.join(Re,dr.manifest),"utf8"))}catch{}let Je;if(Te&&Te.main&&(Je=K.resolve(Re,Te.main)),Je&&Je!==Re){let He=pe(Je,Qe,{extensions:be});if(He!==null)return He}}for(let Te=0,Je=be.length;Te{let x=JSON.stringify(He.name);if(_e.has(x))return;_e.add(x);let w=Ee(He);for(let S of w)if(U(S).packagePeers.has(Re))Te(S);else{let F=be.get(S.name);typeof F>"u"&&be.set(S.name,F=new Set),F.add(S.reference)}};Te(Qe);let Je=[];for(let He of[...be.keys()].sort())for(let x of[...be.get(He)].sort())Je.push({name:He,reference:x});return Je}function ce(Re,{resolveIgnored:Qe=!1,includeDiscardFromLookup:be=!1}={}){if(ae(Re)&&!Qe)return null;let _e=K.relative(t.basePath,Re);_e.match(n)||(_e=`./${_e}`),_e.endsWith("/")||(_e=`${_e}/`);do{let Te=b.get(_e);if(typeof Te>"u"||Te.discardFromLookup&&!be){_e=_e.substring(0,_e.lastIndexOf("/",_e.length-2)+1);continue}return Te.locator}while(_e!=="");return null}function ne(Re){try{return e.fakeFs.readFileSync(ue.toPortablePath(Re),"utf8")}catch(Qe){if(Qe.code==="ENOENT")return;throw Qe}}function ee(Re,Qe,{considerBuiltins:be=!0}={}){if(Re.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Re==="pnpapi")return ue.toPortablePath(e.pnpapiResolution);if(be&&(0,rp.isBuiltin)(Re))return null;let _e=au(Re),Te=Qe&&au(Qe);if(Qe&&ae(Qe)&&(!K.isAbsolute(Re)||ce(Re)===null)){let x=ye(Re,Qe);if(x===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) +`),r}St();var[mA,gm]=process.versions.node.split(".").map(t=>parseInt(t,10)),VIe=mA>19||mA===19&&gm>=2||mA===18&&gm>=13,Bzt=mA===20&&gm<6||mA===19&&gm>=3,vzt=mA>19||mA===19&&gm>=6,Dzt=mA>=21||mA===20&&gm>=10||mA===18&&gm>=19;function JIe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(e)))),VIe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function ej(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,o=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,u=/\/$/,A=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Re of["react-scripts","gatsby"]){let ke=t.packageRegistry.get(Re);if(ke)for(let xe of ke.keys()){if(xe===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Re,reference:xe})}}let{ignorePattern:I,packageRegistry:v,packageLocatorsByLocations:x}=t;function C(Re,ke){return{fn:Re,args:ke,error:null,result:null}}function R(Re){let ke=process.stderr?.hasColors?.()??process.stdout.isTTY,xe=(Je,qe)=>`\x1B[${Je}m${qe}\x1B[0m`,He=Re.error;console.error(He?xe("31;1",`\u2716 ${Re.error?.message.replace(/\n.*/s,"")}`):xe("33;1","\u203C Resolution")),Re.args.length>0&&console.error();for(let Je of Re.args)console.error(` ${xe("37;1","In \u2190")} ${(0,$q.inspect)(Je,{colors:ke,compact:!0})}`);Re.result&&(console.error(),console.error(` ${xe("37;1","Out \u2192")} ${(0,$q.inspect)(Re.result,{colors:ke,compact:!0})}`));let Te=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(Te.length>0){console.error();for(let Je of Te)console.error(` ${xe("38;5;244",Je)}`)}console.error()}function L(Re,ke){if(e.allowDebug===!1)return ke;if(Number.isFinite(o)){if(o>=2)return(...xe)=>{let He=C(Re,xe);try{return He.result=ke(...xe)}catch(Te){throw He.error=Te}finally{R(He)}};if(o>=1)return(...xe)=>{try{return ke(...xe)}catch(He){let Te=C(Re,xe);throw Te.error=He,R(Te),He}}}return ke}function U(Re){let ke=g(Re);if(!ke)throw $i("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return ke}function J(Re){if(Re.name===null)return!0;for(let ke of t.dependencyTreeRoots)if(ke.name===Re.name&&ke.reference===Re.reference)return!0;return!1}let te=new Set(["node","require",...KIe("--conditions")]);function ae(Re,ke=te,xe){let He=le(V.join(Re,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(He===null)throw $i("INTERNAL",`The locator that owns the "${Re}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:Te}=U(He),Je=V.join(Te,dr.manifest);if(!e.fakeFs.existsSync(Je))return null;let qe=JSON.parse(e.fakeFs.readFileSync(Je,"utf8"));if(qe.exports==null)return null;let b=V.contains(Te,Re);if(b===null)throw $i("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");b!=="."&&!A.test(b)&&(b=`./${b}`);try{let w=HIe({packageJSONUrl:(0,dm.pathToFileURL)(ue.fromPortablePath(Je)),packageSubpath:b,exports:qe.exports,base:xe?(0,dm.pathToFileURL)(ue.fromPortablePath(xe)):null,conditions:ke});return ue.toPortablePath((0,dm.fileURLToPath)(w))}catch(w){throw $i("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:au(Re),locator:He,pkgJson:qe,subpath:au(b),conditions:ke},w.code)}}function fe(Re,ke,{extensions:xe}){let He;try{ke.push(Re),He=e.fakeFs.statSync(Re)}catch{}if(He&&!He.isDirectory())return e.fakeFs.realpathSync(Re);if(He&&He.isDirectory()){let Te;try{Te=JSON.parse(e.fakeFs.readFileSync(V.join(Re,dr.manifest),"utf8"))}catch{}let Je;if(Te&&Te.main&&(Je=V.resolve(Re,Te.main)),Je&&Je!==Re){let qe=fe(Je,ke,{extensions:xe});if(qe!==null)return qe}}for(let Te=0,Je=xe.length;Te{let b=JSON.stringify(qe.name);if(He.has(b))return;He.add(b);let w=Ee(qe);for(let P of w)if(U(P).packagePeers.has(Re))Te(P);else{let F=xe.get(P.name);typeof F>"u"&&xe.set(P.name,F=new Set),F.add(P.reference)}};Te(ke);let Je=[];for(let qe of[...xe.keys()].sort())for(let b of[...xe.get(qe)].sort())Je.push({name:qe,reference:b});return Je}function le(Re,{resolveIgnored:ke=!1,includeDiscardFromLookup:xe=!1}={}){if(he(Re)&&!ke)return null;let He=V.relative(t.basePath,Re);He.match(n)||(He=`./${He}`),He.endsWith("/")||(He=`${He}/`);do{let Te=x.get(He);if(typeof Te>"u"||Te.discardFromLookup&&!xe){He=He.substring(0,He.lastIndexOf("/",He.length-2)+1);continue}return Te.locator}while(He!=="");return null}function ne(Re){try{return e.fakeFs.readFileSync(ue.toPortablePath(Re),"utf8")}catch(ke){if(ke.code==="ENOENT")return;throw ke}}function ee(Re,ke,{considerBuiltins:xe=!0}={}){if(Re.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Re==="pnpapi")return ue.toPortablePath(e.pnpapiResolution);if(xe&&(0,np.isBuiltin)(Re))return null;let He=au(Re),Te=ke&&au(ke);if(ke&&he(ke)&&(!V.isAbsolute(Re)||le(Re)===null)){let b=me(Re,ke);if(b===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) -Require request: "${_e}" +Require request: "${He}" Required by: ${Te} -`,{request:_e,issuer:Te});return ue.toPortablePath(x)}let Je,He=Re.match(a);if(He){if(!Qe)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:_e,issuer:Te});let[,x,w]=He,S=ce(Qe);if(!S){let Ne=ye(Re,Qe);if(Ne===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). +`,{request:He,issuer:Te});return ue.toPortablePath(b)}let Je,qe=Re.match(a);if(qe){if(!ke)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:He,issuer:Te});let[,b,w]=qe,P=le(ke);if(!P){let Ne=me(Re,ke);if(Ne===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). -Require path: "${_e}" +Require path: "${He}" Required by: ${Te} -`,{request:_e,issuer:Te});return ue.toPortablePath(Ne)}let F=U(S).packageDependencies.get(x),z=null;if(F==null&&S.name!==null){let Ne=t.fallbackExclusionList.get(S.name);if(!Ne||!Ne.has(S.reference)){for(let dt=0,jt=h.length;dtJ(ot))?X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${x} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. +`,{request:He,issuer:Te,dependencyName:b});else{let Ne=Se(b,P);Ne.every(ot=>J(ot))?X=$i("MISSING_PEER_DEPENDENCY",`${P.name} tried to access ${b} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. -Required package: ${x}${x!==_e?` (via "${_e}")`:""} -Required by: ${S.name}@${S.reference} (via ${Te}) +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${P.name}@${P.reference} (via ${Te}) ${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} `).join("")} -`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x,brokenAncestors:Ne}):X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${x} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. +`,{request:He,issuer:Te,issuerLocator:Object.assign({},P),dependencyName:b,brokenAncestors:Ne}):X=$i("MISSING_PEER_DEPENDENCY",`${P.name} tried to access ${b} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. -Required package: ${x}${x!==_e?` (via "${_e}")`:""} -Required by: ${S.name}@${S.reference} (via ${Te}) +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${P.name}@${P.reference} (via ${Te}) ${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} `).join("")} -`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x,brokenAncestors:Ne})}else F===void 0&&(!be&&(0,rp.isBuiltin)(Re)?J(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. +`,{request:He,issuer:Te,issuerLocator:Object.assign({},P),dependencyName:b,brokenAncestors:Ne})}else F===void 0&&(!xe&&(0,np.isBuiltin)(Re)?J(P)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${b}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${b} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. -Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required package: ${b}${b!==He?` (via "${He}")`:""} Required by: ${Te} -`,{request:_e,issuer:Te,dependencyName:x}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in ${S.name}'s dependencies, this makes the require call ambiguous and unsound. +`,{request:He,issuer:Te,dependencyName:b}):X=$i("UNDECLARED_DEPENDENCY",`${P.name} tried to access ${b}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${b} isn't otherwise declared in ${P.name}'s dependencies, this makes the require call ambiguous and unsound. -Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required package: ${b}${b!==He?` (via "${He}")`:""} Required by: ${Te} -`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x}):J(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. +`,{request:He,issuer:Te,issuerLocator:Object.assign({},P),dependencyName:b}):J(P)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${b}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. -Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required package: ${b}${b!==He?` (via "${He}")`:""} Required by: ${Te} -`,{request:_e,issuer:Te,dependencyName:x}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${x}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. +`,{request:He,issuer:Te,dependencyName:b}):X=$i("UNDECLARED_DEPENDENCY",`${P.name} tried to access ${b}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. -Required package: ${x}${x!==_e?` (via "${_e}")`:""} -Required by: ${S.name}@${S.reference} (via ${Te}) -`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x}));if(F==null){if(z===null||X===null)throw X||new Error("Assertion failed: Expected an error to have been set");F=z;let Ne=X.message.replace(/\n.*/g,"");X.message=Ne,!E.has(Ne)&&o!==0&&(E.add(Ne),process.emitWarning(X))}let Z=Array.isArray(F)?{name:F[0],reference:F[1]}:{name:x,reference:F},ie=U(Z);if(!ie.packageLocation)throw $i("MISSING_DEPENDENCY",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${P.name}@${P.reference} (via ${Te}) +`,{request:He,issuer:Te,issuerLocator:Object.assign({},P),dependencyName:b}));if(F==null){if(z===null||X===null)throw X||new Error("Assertion failed: Expected an error to have been set");F=z;let Ne=X.message.replace(/\n.*/g,"");X.message=Ne,!E.has(Ne)&&o!==0&&(E.add(Ne),process.emitWarning(X))}let Z=Array.isArray(F)?{name:F[0],reference:F[1]}:{name:b,reference:F},ie=U(Z);if(!ie.packageLocation)throw $i("MISSING_DEPENDENCY",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. -Required package: ${Z.name}@${Z.reference}${Z.name!==_e?` (via "${_e}")`:""} -Required by: ${S.name}@${S.reference} (via ${Te}) -`,{request:_e,issuer:Te,dependencyLocator:Object.assign({},Z)});let Se=ie.packageLocation;w?Je=K.join(Se,w):Je=Se}else if(K.isAbsolute(Re))Je=K.normalize(Re);else{if(!Qe)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:_e,issuer:Te});let x=K.resolve(Qe);Qe.match(u)?Je=K.normalize(K.join(x,Re)):Je=K.normalize(K.join(K.dirname(x),Re))}return K.normalize(Je)}function Ie(Re,Qe,be=te,_e){if(n.test(Re))return Qe;let Te=le(Qe,be,_e);return Te?K.normalize(Te):Qe}function ke(Re,{extensions:Qe=Object.keys(rp.Module._extensions)}={}){let be=[],_e=pe(Re,be,{extensions:Qe});if(_e)return K.normalize(_e);{ZIe(be.map(He=>ue.fromPortablePath(He)));let Te=au(Re),Je=ce(Re);if(Je){let{packageLocation:He}=U(Je),x=!0;try{e.fakeFs.accessSync(He)}catch(w){if(w?.code==="ENOENT")x=!1;else{let S=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${S}). +Required package: ${Z.name}@${Z.reference}${Z.name!==He?` (via "${He}")`:""} +Required by: ${P.name}@${P.reference} (via ${Te}) +`,{request:He,issuer:Te,dependencyLocator:Object.assign({},Z)});let Pe=ie.packageLocation;w?Je=V.join(Pe,w):Je=Pe}else if(V.isAbsolute(Re))Je=V.normalize(Re);else{if(!ke)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:He,issuer:Te});let b=V.resolve(ke);ke.match(u)?Je=V.normalize(V.join(b,Re)):Je=V.normalize(V.join(V.dirname(b),Re))}return V.normalize(Je)}function Ie(Re,ke,xe=te,He){if(n.test(Re))return ke;let Te=ae(ke,xe,He);return Te?V.normalize(Te):ke}function Fe(Re,{extensions:ke=Object.keys(np.Module._extensions)}={}){let xe=[],He=fe(Re,xe,{extensions:ke});if(He)return V.normalize(He);{JIe(xe.map(qe=>ue.fromPortablePath(qe)));let Te=au(Re),Je=le(Re);if(Je){let{packageLocation:qe}=U(Je),b=!0;try{e.fakeFs.accessSync(qe)}catch(w){if(w?.code==="ENOENT")b=!1;else{let P=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${P}). Missing package: ${Je.name}@${Je.reference} -Expected package location: ${au(He)} -`,{unqualifiedPath:Te,extensions:Qe})}}if(!x){let w=He.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} +Expected package location: ${au(qe)} +`,{unqualifiedPath:Te,extensions:ke})}}if(!b){let w=qe.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} Missing package: ${Je.name}@${Je.reference} -Expected package location: ${au(He)} -`,{unqualifiedPath:Te,extensions:Qe})}}throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. +Expected package location: ${au(qe)} +`,{unqualifiedPath:Te,extensions:ke})}}throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. Source path: ${Te} -${be.map(He=>`Not found: ${au(He)} -`).join("")}`,{unqualifiedPath:Te,extensions:Qe})}}function ht(Re,Qe,be){if(!Qe)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let _e=YIe({name:Re,base:(0,gm.pathToFileURL)(ue.fromPortablePath(Qe)),conditions:be.conditions??te,readFileSyncFn:ne});if(_e instanceof URL)return ke(ue.toPortablePath((0,gm.fileURLToPath)(_e)),{extensions:be.extensions});if(_e.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return H(_e,Qe,be)}function H(Re,Qe,be={}){try{if(Re.startsWith("#"))return ht(Re,Qe,be);let{considerBuiltins:_e,extensions:Te,conditions:Je}=be,He=ee(Re,Qe,{considerBuiltins:_e});if(Re==="pnpapi")return He;if(He===null)return null;let x=()=>Qe!==null?ae(Qe):!1,w=(!_e||!(0,rp.isBuiltin)(Re))&&!x()?Ie(Re,He,Je,Qe):He;return ke(w,{extensions:Te})}catch(_e){throw Object.hasOwn(_e,"pnpCode")&&Object.assign(_e.data,{request:au(Re),issuer:Qe&&au(Qe)}),_e}}function lt(Re){let Qe=K.normalize(Re),be=mi.resolveVirtual(Qe);return be!==Qe?be:null}return{VERSIONS:we,topLevel:Pe,getLocator:(Re,Qe)=>Array.isArray(Qe)?{name:Qe[0],reference:Qe[1]}:{name:Re,reference:Qe},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Re=[];for(let[Qe,be]of v)for(let _e of be.keys())Qe!==null&&_e!==null&&Re.push({name:Qe,reference:_e});return Re},getPackageInformation:Re=>{let Qe=g(Re);if(Qe===null)return null;let be=ue.fromPortablePath(Qe.packageLocation);return{...Qe,packageLocation:be}},findPackageLocator:Re=>ce(ue.toPortablePath(Re)),resolveToUnqualified:L("resolveToUnqualified",(Re,Qe,be)=>{let _e=Qe!==null?ue.toPortablePath(Qe):null,Te=ee(ue.toPortablePath(Re),_e,be);return Te===null?null:ue.fromPortablePath(Te)}),resolveUnqualified:L("resolveUnqualified",(Re,Qe)=>ue.fromPortablePath(ke(ue.toPortablePath(Re),Qe))),resolveRequest:L("resolveRequest",(Re,Qe,be)=>{let _e=Qe!==null?ue.toPortablePath(Qe):null,Te=H(ue.toPortablePath(Re),_e,be);return Te===null?null:ue.fromPortablePath(Te)}),resolveVirtual:L("resolveVirtual",Re=>{let Qe=lt(ue.toPortablePath(Re));return Qe!==null?ue.fromPortablePath(Qe):null})}}Pt();var $Ie=(t,e,r)=>{let o=XB(t),a=Yj(o,{basePath:e}),n=ue.join(e,dr.pnpCjs);return rq(a,{fakeFs:r,pnpapiResolution:n})};var iq=$e(t1e());qt();var mA={};Kt(mA,{checkManifestCompatibility:()=>r1e,extractBuildRequest:()=>vQ,getExtractHint:()=>sq,hasBindingGyp:()=>oq});Ye();Pt();function r1e(t){return W.isPackageCompatible(t,Ji.getArchitectureSet())}function vQ(t,e,r,{configuration:o}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${W.prettyLocator(o,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`)}:r&&r.built===!1?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${W.prettyLocator(o,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!o.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${W.prettyLocator(o,t)} lists build scripts, but all build scripts have been disabled.`)}:r1e(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${W.prettyLocator(o,t)} The ${Ji.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var VIt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function sq(t){return t.packageFs.getExtractHint({relevantExtensions:VIt})}function oq(t){let e=K.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var av={};Kt(av,{getUnpluggedPath:()=>ov});Ye();Pt();function ov(t,{configuration:e}){return K.resolve(e.get("pnpUnpluggedFolder"),W.slugifyLocator(t))}var KIt=new Set([W.makeIdent(null,"open").identHash,W.makeIdent(null,"opn").identHash]),P0=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let o=S0(r.project).cjs;if(!oe.existsSync(o))throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=je.getFactoryWithDefault(this.pnpCache,o,()=>je.dynamicRequire(o,{cachingStrategy:je.CachingStrategy.FsTime})),n={name:W.stringifyIdent(e),reference:e.reference},u=a.getPackageInformation(n);if(!u)throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return ue.toPortablePath(u.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=S0(r.project).cjs;if(!oe.existsSync(o))return null;let n=je.getFactoryWithDefault(this.pnpCache,o,()=>je.dynamicRequire(o,{cachingStrategy:je.CachingStrategy.FsTime})).findPackageLocator(ue.fromPortablePath(e));return n?W.makeLocator(W.parseIdent(n.name),n.reference):null}makeInstaller(e){return new dm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},dm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new je.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,o){let a=W.stringifyIdent(e),n=e.reference,u=!!this.opts.project.tryWorkspaceByLocator(e),A=W.isVirtualLocator(e),p=e.peerDependencies.size>0&&!A,h=!p&&!u,E=!p&&e.linkType!=="SOFT",I,v;if(h||E){let te=A?W.devirtualizeLocator(e):e;I=this.customData.store.get(te.locatorHash),typeof I>"u"&&(I=await JIt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,I)),I.manifest.type==="module"&&(this.isESMLoaderRequired=!0),v=this.opts.project.getDependencyMeta(te,e.version)}let b=h?vQ(e,I,v,{configuration:this.opts.project.configuration}):null,C=E?await this.unplugPackageIfNeeded(e,I,r,v,o):r.packageFs;if(K.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let T=K.resolve(C.getRealPath(),r.prefixPath),L=aq(this.opts.project.cwd,T),U=new Map,J=new Set;if(A){for(let te of e.peerDependencies.values())U.set(W.stringifyIdent(te),null),J.add(W.stringifyIdent(te));if(!u){let te=W.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:aq(this.opts.project.cwd,mi.resolveVirtual(T)),locator:te})}}return je.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:L,packageDependencies:U,packagePeers:J,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:T,buildRequest:b}}async attachInternalDependencies(e,r){let o=this.getPackageInformation(e);for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){for(let o of r)this.getDiskInformation(o).packageDependencies.set(W.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=S0(this.opts.project);if(this.isEsmEnabled()||await oe.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await oe.removePromise(e.cjs),await oe.removePromise(e.data),await oe.removePromise(e.esmLoader),await oe.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:E,location:I}of this.virtualTemplates.values())je.getMapWithDefault(this.packageRegistry,W.stringifyIdent(E)).set(E.reference,{packageLocation:I,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),o=this.opts.project.workspaces.map(({anchoredLocator:E})=>({name:W.stringifyIdent(E),reference:E.reference})),a=r!=="none",n=[],u=new Map,A=je.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let E of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(E)&&n.push({name:W.stringifyIdent(E),reference:E.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:o,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:u,ignorePattern:A,packageRegistry:p,shebang:h}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=S0(this.opts.project),o=await this.locateNodeModules(e.ignorePattern);if(o.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of o)await oe.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=bIe(e);await oe.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await oe.removePromise(r.data)}else{let{dataFile:n,loaderFile:u}=kIe(e);await oe.changeFilePromise(r.cjs,u,{automaticNewlines:!0,mode:493}),await oe.changeFilePromise(r.data,n,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await oe.changeFilePromise(r.esmLoader,(0,iq.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await oe.removePromise(a);else for(let n of await oe.readdirPromise(a)){let u=K.resolve(a,n);this.unpluggedPaths.has(u)||await oe.removePromise(u)}}async locateNodeModules(e){let r=[],o=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=K.join(a.cwd,"node_modules");if(o&&o.test(K.relative(this.opts.project.cwd,a.cwd))||!oe.existsSync(n))continue;let u=await oe.readdirPromise(n,{withFileTypes:!0}),A=u.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(A.length===u.length)r.push(n);else for(let p of A)r.push(K.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,o,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,o,n):o.packageFs}shouldBeUnplugged(e,r,o){return typeof o.unplugged<"u"?o.unplugged:KIt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(vQ(e,r,o,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,o){let a=ov(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new Uu(a,{baseFs:r.packageFs,pathUtils:K}):(this.unpluggedPaths.add(a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=K.join(a,r.prefixPath,".ready");await oe.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await oe.mkdirPromise(a,{recursive:!0}),await oe.copyPromise(a,Bt.dot,{baseFs:r.packageFs,overwrite:!1}),await oe.writeFilePromise(n,""))})),new gn(a))}getPackageInformation(e){let r=W.stringifyIdent(e),o=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${W.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(o);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${W.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=je.getMapWithDefault(this.packageRegistry,"@@disk"),o=aq(this.opts.project.cwd,e);return je.getFactoryWithDefault(r,o,()=>({packageLocation:o,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function aq(t,e){let r=K.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function JIt(t){let e=await Mt.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Mt,r=new Set(["preinstall","install","postinstall"]);for(let o of e.scripts.keys())r.has(o)||e.scripts.delete(o);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:sq(t),hasBindingGyp:oq(t)}}}Ye();Ye();qt();var n1e=$e(Zo());var x0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new it("This command can only be used if the `nodeLinker` option is set to `pnp`");await o.restoreInstallState();let u=new Set(this.patterns),A=this.patterns.map(b=>{let C=W.parseDescriptor(b),T=C.range!=="unknown"?C:W.makeDescriptor(C,"*");if(!kr.validRange(T.range))throw new it(`The range of the descriptor patterns must be a valid semver range (${W.prettyDescriptor(r,T)})`);return L=>{let U=W.stringifyIdent(L);return!n1e.default.isMatch(U,W.stringifyIdent(T))||L.version&&!kr.satisfiesWithPrereleases(L.version,T.range)?!1:(u.delete(b),!0)}}),p=()=>{let b=[];for(let C of o.storedPackages.values())!o.tryWorkspaceByLocator(C)&&!W.isVirtualLocator(C)&&A.some(T=>T(C))&&b.push(C);return b},h=b=>{let C=new Set,T=[],L=(U,J)=>{if(C.has(U.locatorHash))return;let te=!!o.tryWorkspaceByLocator(U);if(!(J>0&&!this.recursive&&te)&&(C.add(U.locatorHash),!o.tryWorkspaceByLocator(U)&&A.some(le=>le(U))&&T.push(U),!(J>0&&!this.recursive)))for(let le of U.dependencies.values()){let pe=o.storedResolutions.get(le.descriptorHash);if(!pe)throw new Error("Assertion failed: The resolution should have been registered");let Ae=o.storedPackages.get(pe);if(!Ae)throw new Error("Assertion failed: The package should have been registered");L(Ae,J+1)}};for(let U of b)L(U.anchoredPackage,0);return T},E,I;if(this.all&&this.recursive?(E=p(),I="the project"):this.all?(E=h(o.workspaces),I="any workspace"):(E=h([a]),I="this workspace"),u.size>1)throw new it(`Patterns ${de.prettyList(r,u,de.Type.CODE)} don't match any packages referenced by ${I}`);if(u.size>0)throw new it(`Pattern ${de.prettyList(r,u,de.Type.CODE)} doesn't match any packages referenced by ${I}`);E=je.sortMap(E,b=>W.stringifyLocator(b));let v=await Nt.start({configuration:r,stdout:this.context.stdout,json:this.json},async b=>{for(let C of E){let T=C.version??"unknown",L=o.topLevelWorkspace.manifest.ensureDependencyMeta(W.makeDescriptor(C,T));L.unplugged=!0,b.reportInfo(0,`Will unpack ${W.prettyLocator(r,C)} to ${de.pretty(r,ov(C,{configuration:r}),de.Type.PATH)}`),b.reportJson({locator:W.stringifyLocator(C),version:T})}await o.topLevelWorkspace.persistManifest(),this.json||b.reportSeparator()});return v.hasErrors()?v.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};x0.paths=[["unplug"]],x0.usage=nt.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var S0=t=>({cjs:K.join(t.cwd,dr.pnpCjs),data:K.join(t.cwd,dr.pnpData),esmLoader:K.join(t.cwd,dr.pnpEsmLoader)}),s1e=t=>/\s/.test(t)?JSON.stringify(t):t;async function zIt(t,e,r){let o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(o," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n;return}let u=S0(t),A=`--require ${s1e(ue.fromPortablePath(u.cjs))}`;oe.existsSync(u.esmLoader)&&(A=`${A} --experimental-loader ${(0,i1e.pathToFileURL)(ue.fromPortablePath(u.esmLoader)).href}`),oe.existsSync(u.cjs)&&(e.NODE_OPTIONS=n?`${A} ${n}`:A)}async function XIt(t,e){let r=S0(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var ZIt={hooks:{populateYarnPaths:XIt,setupScriptEnvironment:zIt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"STRING",default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[P0],commands:[x0]},$It=ZIt;var p1e=$e(u1e());qt();var gq=$e(Be("crypto")),h1e=$e(Be("fs")),g1e=1,Pi="node_modules",DQ=".bin",d1e=".yarn-state.yml",d1t=1e3,dq=(o=>(o.CLASSIC="classic",o.HARDLINKS_LOCAL="hardlinks-local",o.HARDLINKS_GLOBAL="hardlinks-global",o))(dq||{}),lv=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let o=r.project.tryWorkspaceByLocator(e);if(o)return o.cwd;let a=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await hq(r.project,{unrollAliases:!0}));if(a===null)throw new it("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(W.stringifyLocator(e));if(!n){let p=new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let u=n.locations.sort((p,h)=>p.split(K.sep).length-h.split(K.sep).length),A=K.join(r.project.configuration.startingCwd,Pi);return u.find(p=>K.contains(A,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await hq(r.project,{unrollAliases:!0}));if(o===null)return null;let{locationRoot:a,segments:n}=PQ(K.resolve(e),{skipPrefix:r.project.cwd}),u=o.locationTree.get(a);if(!u)return null;let A=u.locator;for(let p of n){if(u=u.children.get(p),!u)break;A=u.locator||A}return W.parseLocator(A)}makeInstaller(e){return new pq(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},pq=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let o=K.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await m1t(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!W.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,u=new Set;n.has(W.stringifyIdent(e))||n.set(W.stringifyIdent(e),e.reference);let A=e;if(W.isVirtualLocator(e)){A=W.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(W.stringifyIdent(E),null),u.add(W.stringifyIdent(E))}let p={packageLocation:`${ue.fromPortablePath(o)}/`,packageDependencies:n,packagePeers:u,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(A.locatorHash,h),{packageLocation:o,buildRequest:null}}async attachInternalDependencies(e,r){let o=this.localStore.get(e.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.pnpNode.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),r=await hq(this.opts.project),o=this.opts.project.configuration.get("nmMode");(r===null||o!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:o,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(v=>{let b=this.opts.project.configuration.get("nmHoistingLimits");try{b=je.validateEnum(KB,v.manifest.installConfig?.hoistingLimits??b)}catch{let T=W.prettyWorkspace(this.opts.project.configuration,v);this.opts.report.reportWarning(57,`${T}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(KB).join(", ")}, using default: "${b}"`)}return[v.relativeCwd,b]})),n=new Map(this.opts.project.workspaces.map(v=>{let b=this.opts.project.configuration.get("nmSelfReferences");return b=v.manifest.installConfig?.selfReferences??b,[v.relativeCwd,b]})),u={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(v,b)=>Array.isArray(b)?{name:b[0],reference:b[1]}:{name:v,reference:b},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(v=>{let b=v.anchoredLocator;return{name:W.stringifyIdent(b),reference:b.reference}}),getPackageInformation:v=>{let b=v.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:W.makeLocator(W.parseIdent(v.name),v.reference),C=this.localStore.get(b.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return C.pnpNode},findPackageLocator:v=>{let b=this.opts.project.tryWorkspaceByCwd(ue.toPortablePath(v));if(b!==null){let C=b.anchoredLocator;return{name:W.stringifyIdent(C),reference:C.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:v=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(v)))},{tree:A,errors:p,preserveSymlinksRequired:h}=JB(u,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!A){for(let{messageName:v,text:b}of p)this.opts.report.reportError(v,b);return}let E=qj(A);await B1t(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async v=>{let b=W.parseLocator(v),C=this.localStore.get(b.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the slot to exist");return C.customPackageData.manifest}});let I=[];for(let[v,b]of E.entries()){if(C1e(v))continue;let C=W.parseLocator(v),T=this.localStore.get(C.locatorHash);if(typeof T>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(T.pkg))continue;let L=mA.extractBuildRequest(T.pkg,T.customPackageData,T.dependencyMeta,{configuration:this.opts.project.configuration});!L||I.push({buildLocations:b.locations,locator:C,buildRequest:L})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${de.pretty(this.opts.project.configuration,"--preserve-symlinks",de.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:I}}};async function m1t(t,e){let r=await Mt.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Mt,o=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())o.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:mA.hasBindingGyp(e)}}}async function y1t(t,e,r,o,{installChangedByUser:a}){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will +${xe.map(qe=>`Not found: ${au(qe)} +`).join("")}`,{unqualifiedPath:Te,extensions:ke})}}function At(Re,ke,xe){if(!ke)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let He=qIe({name:Re,base:(0,dm.pathToFileURL)(ue.fromPortablePath(ke)),conditions:xe.conditions??te,readFileSyncFn:ne});if(He instanceof URL)return Fe(ue.toPortablePath((0,dm.fileURLToPath)(He)),{extensions:xe.extensions});if(He.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return H(He,ke,xe)}function H(Re,ke,xe={}){try{if(Re.startsWith("#"))return At(Re,ke,xe);let{considerBuiltins:He,extensions:Te,conditions:Je}=xe,qe=ee(Re,ke,{considerBuiltins:He});if(Re==="pnpapi")return qe;if(qe===null)return null;let b=()=>ke!==null?he(ke):!1,w=(!He||!(0,np.isBuiltin)(Re))&&!b()?Ie(Re,qe,Je,ke):qe;return Fe(w,{extensions:Te})}catch(He){throw Object.hasOwn(He,"pnpCode")&&Object.assign(He.data,{request:au(Re),issuer:ke&&au(ke)}),He}}function at(Re){let ke=V.normalize(Re),xe=mi.resolveVirtual(ke);return xe!==ke?xe:null}return{VERSIONS:Be,topLevel:we,getLocator:(Re,ke)=>Array.isArray(ke)?{name:ke[0],reference:ke[1]}:{name:Re,reference:ke},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Re=[];for(let[ke,xe]of v)for(let He of xe.keys())ke!==null&&He!==null&&Re.push({name:ke,reference:He});return Re},getPackageInformation:Re=>{let ke=g(Re);if(ke===null)return null;let xe=ue.fromPortablePath(ke.packageLocation);return{...ke,packageLocation:xe}},findPackageLocator:Re=>le(ue.toPortablePath(Re)),resolveToUnqualified:L("resolveToUnqualified",(Re,ke,xe)=>{let He=ke!==null?ue.toPortablePath(ke):null,Te=ee(ue.toPortablePath(Re),He,xe);return Te===null?null:ue.fromPortablePath(Te)}),resolveUnqualified:L("resolveUnqualified",(Re,ke)=>ue.fromPortablePath(Fe(ue.toPortablePath(Re),ke))),resolveRequest:L("resolveRequest",(Re,ke,xe)=>{let He=ke!==null?ue.toPortablePath(ke):null,Te=H(ue.toPortablePath(Re),He,xe);return Te===null?null:ue.fromPortablePath(Te)}),resolveVirtual:L("resolveVirtual",Re=>{let ke=at(ue.toPortablePath(Re));return ke!==null?ue.fromPortablePath(ke):null})}}St();var zIe=(t,e,r)=>{let o=ZB(t),a=jq(o,{basePath:e}),n=ue.join(e,dr.pnpCjs);return ej(a,{fakeFs:r,pnpapiResolution:n})};var rj=$e(ZIe());qt();var yA={};Vt(yA,{checkManifestCompatibility:()=>$Ie,extractBuildRequest:()=>IQ,getExtractHint:()=>nj,hasBindingGyp:()=>ij});Ye();St();function $Ie(t){return W.isPackageCompatible(t,Ji.getArchitectureSet())}function IQ(t,e,r,{configuration:o}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${W.prettyLocator(o,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`)}:r&&r.built===!1?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${W.prettyLocator(o,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!o.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${W.prettyLocator(o,t)} lists build scripts, but all build scripts have been disabled.`)}:$Ie(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${W.prettyLocator(o,t)} The ${Ji.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var qIt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function nj(t){return t.packageFs.getExtractHint({relevantExtensions:qIt})}function ij(t){let e=V.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var av={};Vt(av,{getUnpluggedPath:()=>ov});Ye();St();function ov(t,{configuration:e}){return V.resolve(e.get("pnpUnpluggedFolder"),W.slugifyLocator(t))}var jIt=new Set([W.makeIdent(null,"open").identHash,W.makeIdent(null,"opn").identHash]),P0=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let o=b0(r.project).cjs;if(!oe.existsSync(o))throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=_e.getFactoryWithDefault(this.pnpCache,o,()=>_e.dynamicRequire(o,{cachingStrategy:_e.CachingStrategy.FsTime})),n={name:W.stringifyIdent(e),reference:e.reference},u=a.getPackageInformation(n);if(!u)throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return ue.toPortablePath(u.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=b0(r.project).cjs;if(!oe.existsSync(o))return null;let n=_e.getFactoryWithDefault(this.pnpCache,o,()=>_e.dynamicRequire(o,{cachingStrategy:_e.CachingStrategy.FsTime})).findPackageLocator(ue.fromPortablePath(e));return n?W.makeLocator(W.parseIdent(n.name),n.reference):null}makeInstaller(e){return new mm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},mm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new _e.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,o){let a=W.stringifyIdent(e),n=e.reference,u=!!this.opts.project.tryWorkspaceByLocator(e),A=W.isVirtualLocator(e),p=e.peerDependencies.size>0&&!A,h=!p&&!u,E=!p&&e.linkType!=="SOFT",I,v;if(h||E){let te=A?W.devirtualizeLocator(e):e;I=this.customData.store.get(te.locatorHash),typeof I>"u"&&(I=await GIt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,I)),I.manifest.type==="module"&&(this.isESMLoaderRequired=!0),v=this.opts.project.getDependencyMeta(te,e.version)}let x=h?IQ(e,I,v,{configuration:this.opts.project.configuration}):null,C=E?await this.unplugPackageIfNeeded(e,I,r,v,o):r.packageFs;if(V.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let R=V.resolve(C.getRealPath(),r.prefixPath),L=sj(this.opts.project.cwd,R),U=new Map,J=new Set;if(A){for(let te of e.peerDependencies.values())U.set(W.stringifyIdent(te),null),J.add(W.stringifyIdent(te));if(!u){let te=W.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:sj(this.opts.project.cwd,mi.resolveVirtual(R)),locator:te})}}return _e.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:L,packageDependencies:U,packagePeers:J,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:R,buildRequest:x}}async attachInternalDependencies(e,r){let o=this.getPackageInformation(e);for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){for(let o of r)this.getDiskInformation(o).packageDependencies.set(W.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=b0(this.opts.project);if(this.isEsmEnabled()||await oe.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await oe.removePromise(e.cjs),await oe.removePromise(e.data),await oe.removePromise(e.esmLoader),await oe.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:E,location:I}of this.virtualTemplates.values())_e.getMapWithDefault(this.packageRegistry,W.stringifyIdent(E)).set(E.reference,{packageLocation:I,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),o=this.opts.project.workspaces.map(({anchoredLocator:E})=>({name:W.stringifyIdent(E),reference:E.reference})),a=r!=="none",n=[],u=new Map,A=_e.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let E of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(E)&&n.push({name:W.stringifyIdent(E),reference:E.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:o,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:u,ignorePattern:A,packageRegistry:p,shebang:h}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=b0(this.opts.project),o=await this.locateNodeModules(e.ignorePattern);if(o.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of o)await oe.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=SIe(e);await oe.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await oe.removePromise(r.data)}else{let{dataFile:n,loaderFile:u}=PIe(e);await oe.changeFilePromise(r.cjs,u,{automaticNewlines:!0,mode:493}),await oe.changeFilePromise(r.data,n,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await oe.changeFilePromise(r.esmLoader,(0,rj.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await oe.removePromise(a);else for(let n of await oe.readdirPromise(a)){let u=V.resolve(a,n);this.unpluggedPaths.has(u)||await oe.removePromise(u)}}async locateNodeModules(e){let r=[],o=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=V.join(a.cwd,"node_modules");if(o&&o.test(V.relative(this.opts.project.cwd,a.cwd))||!oe.existsSync(n))continue;let u=await oe.readdirPromise(n,{withFileTypes:!0}),A=u.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(A.length===u.length)r.push(n);else for(let p of A)r.push(V.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,o,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,o,n):o.packageFs}shouldBeUnplugged(e,r,o){return typeof o.unplugged<"u"?o.unplugged:jIt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(IQ(e,r,o,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,o){let a=ov(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new Uu(a,{baseFs:r.packageFs,pathUtils:V}):(this.unpluggedPaths.add(a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=V.join(a,r.prefixPath,".ready");await oe.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await oe.mkdirPromise(a,{recursive:!0}),await oe.copyPromise(a,Bt.dot,{baseFs:r.packageFs,overwrite:!1}),await oe.writeFilePromise(n,""))})),new gn(a))}getPackageInformation(e){let r=W.stringifyIdent(e),o=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${W.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(o);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${W.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=_e.getMapWithDefault(this.packageRegistry,"@@disk"),o=sj(this.opts.project.cwd,e);return _e.getFactoryWithDefault(r,o,()=>({packageLocation:o,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function sj(t,e){let r=V.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function GIt(t){let e=await Ot.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Ot,r=new Set(["preinstall","install","postinstall"]);for(let o of e.scripts.keys())r.has(o)||e.scripts.delete(o);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:nj(t),hasBindingGyp:ij(t)}}}Ye();Ye();qt();var e1e=$e(Zo());var x0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new it("This command can only be used if the `nodeLinker` option is set to `pnp`");await o.restoreInstallState();let u=new Set(this.patterns),A=this.patterns.map(x=>{let C=W.parseDescriptor(x),R=C.range!=="unknown"?C:W.makeDescriptor(C,"*");if(!kr.validRange(R.range))throw new it(`The range of the descriptor patterns must be a valid semver range (${W.prettyDescriptor(r,R)})`);return L=>{let U=W.stringifyIdent(L);return!e1e.default.isMatch(U,W.stringifyIdent(R))||L.version&&!kr.satisfiesWithPrereleases(L.version,R.range)?!1:(u.delete(x),!0)}}),p=()=>{let x=[];for(let C of o.storedPackages.values())!o.tryWorkspaceByLocator(C)&&!W.isVirtualLocator(C)&&A.some(R=>R(C))&&x.push(C);return x},h=x=>{let C=new Set,R=[],L=(U,J)=>{if(C.has(U.locatorHash))return;let te=!!o.tryWorkspaceByLocator(U);if(!(J>0&&!this.recursive&&te)&&(C.add(U.locatorHash),!o.tryWorkspaceByLocator(U)&&A.some(ae=>ae(U))&&R.push(U),!(J>0&&!this.recursive)))for(let ae of U.dependencies.values()){let fe=o.storedResolutions.get(ae.descriptorHash);if(!fe)throw new Error("Assertion failed: The resolution should have been registered");let ce=o.storedPackages.get(fe);if(!ce)throw new Error("Assertion failed: The package should have been registered");L(ce,J+1)}};for(let U of x)L(U.anchoredPackage,0);return R},E,I;if(this.all&&this.recursive?(E=p(),I="the project"):this.all?(E=h(o.workspaces),I="any workspace"):(E=h([a]),I="this workspace"),u.size>1)throw new it(`Patterns ${de.prettyList(r,u,de.Type.CODE)} don't match any packages referenced by ${I}`);if(u.size>0)throw new it(`Pattern ${de.prettyList(r,u,de.Type.CODE)} doesn't match any packages referenced by ${I}`);E=_e.sortMap(E,x=>W.stringifyLocator(x));let v=await Nt.start({configuration:r,stdout:this.context.stdout,json:this.json},async x=>{for(let C of E){let R=C.version??"unknown",L=o.topLevelWorkspace.manifest.ensureDependencyMeta(W.makeDescriptor(C,R));L.unplugged=!0,x.reportInfo(0,`Will unpack ${W.prettyLocator(r,C)} to ${de.pretty(r,ov(C,{configuration:r}),de.Type.PATH)}`),x.reportJson({locator:W.stringifyLocator(C),version:R})}await o.topLevelWorkspace.persistManifest(),this.json||x.reportSeparator()});return v.hasErrors()?v.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};x0.paths=[["unplug"]],x0.usage=nt.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var b0=t=>({cjs:V.join(t.cwd,dr.pnpCjs),data:V.join(t.cwd,dr.pnpData),esmLoader:V.join(t.cwd,dr.pnpEsmLoader)}),r1e=t=>/\s/.test(t)?JSON.stringify(t):t;async function YIt(t,e,r){let o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(o," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n;return}let u=b0(t),A=`--require ${r1e(ue.fromPortablePath(u.cjs))}`;oe.existsSync(u.esmLoader)&&(A=`${A} --experimental-loader ${(0,t1e.pathToFileURL)(ue.fromPortablePath(u.esmLoader)).href}`),oe.existsSync(u.cjs)&&(e.NODE_OPTIONS=n?`${A} ${n}`:A)}async function WIt(t,e){let r=b0(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var KIt={hooks:{populateYarnPaths:WIt,setupScriptEnvironment:YIt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"STRING",default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[P0],commands:[x0]},VIt=KIt;var u1e=$e(a1e());qt();var pj=$e(ve("crypto")),A1e=$e(ve("fs")),f1e=1,Si="node_modules",BQ=".bin",p1e=".yarn-state.yml",A1t=1e3,hj=(o=>(o.CLASSIC="classic",o.HARDLINKS_LOCAL="hardlinks-local",o.HARDLINKS_GLOBAL="hardlinks-global",o))(hj||{}),lv=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let o=r.project.tryWorkspaceByLocator(e);if(o)return o.cwd;let a=await _e.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await fj(r.project,{unrollAliases:!0}));if(a===null)throw new it("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(W.stringifyLocator(e));if(!n){let p=new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let u=n.locations.sort((p,h)=>p.split(V.sep).length-h.split(V.sep).length),A=V.join(r.project.configuration.startingCwd,Si);return u.find(p=>V.contains(A,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=await _e.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await fj(r.project,{unrollAliases:!0}));if(o===null)return null;let{locationRoot:a,segments:n}=vQ(V.resolve(e),{skipPrefix:r.project.cwd}),u=o.locationTree.get(a);if(!u)return null;let A=u.locator;for(let p of n){if(u=u.children.get(p),!u)break;A=u.locator||A}return W.parseLocator(A)}makeInstaller(e){return new Aj(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},Aj=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let o=V.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await f1t(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!W.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,u=new Set;n.has(W.stringifyIdent(e))||n.set(W.stringifyIdent(e),e.reference);let A=e;if(W.isVirtualLocator(e)){A=W.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(W.stringifyIdent(E),null),u.add(W.stringifyIdent(E))}let p={packageLocation:`${ue.fromPortablePath(o)}/`,packageDependencies:n,packagePeers:u,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(A.locatorHash,h),{packageLocation:o,buildRequest:null}}async attachInternalDependencies(e,r){let o=this.localStore.get(e.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.pnpNode.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),r=await fj(this.opts.project),o=this.opts.project.configuration.get("nmMode");(r===null||o!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:o,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(v=>{let x=this.opts.project.configuration.get("nmHoistingLimits");try{x=_e.validateEnum(JB,v.manifest.installConfig?.hoistingLimits??x)}catch{let R=W.prettyWorkspace(this.opts.project.configuration,v);this.opts.report.reportWarning(57,`${R}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(JB).join(", ")}, using default: "${x}"`)}return[v.relativeCwd,x]})),n=new Map(this.opts.project.workspaces.map(v=>{let x=this.opts.project.configuration.get("nmSelfReferences");return x=v.manifest.installConfig?.selfReferences??x,[v.relativeCwd,x]})),u={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(v,x)=>Array.isArray(x)?{name:x[0],reference:x[1]}:{name:v,reference:x},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(v=>{let x=v.anchoredLocator;return{name:W.stringifyIdent(x),reference:x.reference}}),getPackageInformation:v=>{let x=v.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:W.makeLocator(W.parseIdent(v.name),v.reference),C=this.localStore.get(x.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return C.pnpNode},findPackageLocator:v=>{let x=this.opts.project.tryWorkspaceByCwd(ue.toPortablePath(v));if(x!==null){let C=x.anchoredLocator;return{name:W.stringifyIdent(C),reference:C.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:v=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(v)))},{tree:A,errors:p,preserveSymlinksRequired:h}=zB(u,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!A){for(let{messageName:v,text:x}of p)this.opts.report.reportError(v,x);return}let E=Hq(A);await y1t(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async v=>{let x=W.parseLocator(v),C=this.localStore.get(x.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the slot to exist");return C.customPackageData.manifest}});let I=[];for(let[v,x]of E.entries()){if(m1e(v))continue;let C=W.parseLocator(v),R=this.localStore.get(C.locatorHash);if(typeof R>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(R.pkg))continue;let L=yA.extractBuildRequest(R.pkg,R.customPackageData,R.dependencyMeta,{configuration:this.opts.project.configuration});!L||I.push({buildLocations:x.locations,locator:C,buildRequest:L})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${de.pretty(this.opts.project.configuration,"--preserve-symlinks",de.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:I}}};async function f1t(t,e){let r=await Ot.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Ot,o=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())o.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:yA.hasBindingGyp(e)}}}async function p1t(t,e,r,o,{installChangedByUser:a}){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will `,n+=`# cause your node_modules installation to become invalidated. `,n+=` `,n+=`__metadata: -`,n+=` version: ${g1e} +`,n+=` version: ${f1e} `,n+=` nmMode: ${o.value} `;let u=Array.from(e.keys()).sort(),A=W.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let E of u){let I=e.get(E);n+=` `,n+=`${JSON.stringify(E)}: `,n+=` locations: -`;for(let v of I.locations){let b=K.contains(t.cwd,v);if(b===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` - ${JSON.stringify(b)} +`;for(let v of I.locations){let x=V.contains(t.cwd,v);if(x===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` - ${JSON.stringify(x)} `}if(I.aliases.length>0){n+=` aliases: `;for(let v of I.aliases)n+=` - ${JSON.stringify(v)} `}if(E===A&&r.size>0){n+=` bin: -`;for(let[v,b]of r){let C=K.contains(t.cwd,v);if(C===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` ${JSON.stringify(C)}: -`;for(let[T,L]of b){let U=K.relative(K.join(v,Pi),L);n+=` ${JSON.stringify(T)}: ${JSON.stringify(U)} -`}}}}let p=t.cwd,h=K.join(p,Pi,d1e);a&&await oe.removePromise(h),await oe.changeFilePromise(h,n,{automaticNewlines:!0})}async function hq(t,{unrollAliases:e=!1}={}){let r=t.cwd,o=K.join(r,Pi,d1e),a;try{a=await oe.statPromise(o)}catch{}if(!a)return null;let n=Vi(await oe.readFilePromise(o,"utf8"));if(n.__metadata.version>g1e)return null;let u=n.__metadata.nmMode||"classic",A=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let I=E.locations.map(b=>K.join(r,b)),v=E.bin;if(v)for(let[b,C]of Object.entries(v)){let T=K.join(r,ue.toPortablePath(b)),L=je.getMapWithDefault(p,T);for(let[U,J]of Object.entries(C))L.set(U,ue.toPortablePath([T,Pi,J].join(K.sep)))}if(A.set(h,{target:Bt.dot,linkType:"HARD",locations:I,aliases:E.aliases||[]}),e&&E.aliases)for(let b of E.aliases){let{scope:C,name:T}=W.parseLocator(h),L=W.makeLocator(W.makeIdent(C,T),b),U=W.stringifyLocator(L);A.set(U,{target:Bt.dot,linkType:"HARD",locations:I,aliases:[]})}}return{locatorMap:A,binSymlinks:p,locationTree:m1e(A,{skipPrefix:t.cwd}),nmMode:u,mtimeMs:a.mtimeMs}}var YC=async(t,e)=>{if(t.split(K.sep).indexOf(Pi)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop){let o=e.allowSymlink?await oe.statPromise(t):await oe.lstatPromise(t);if(e.allowSymlink&&!o.isDirectory()||!e.allowSymlink&&o.isSymbolicLink()){await oe.unlinkPromise(t);return}}let r=await oe.readdirPromise(t,{withFileTypes:!0});for(let o of r){let a=K.join(t,o.name);o.isDirectory()?(o.name!==Pi||e&&e.innerLoop)&&await YC(a,{innerLoop:!0,contentsOnly:!1}):await oe.unlinkPromise(a)}e.contentsOnly||await oe.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},A1e=4,PQ=(t,{skipPrefix:e})=>{let r=K.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let o=r.split(K.sep).filter(p=>p!==""),a=o.indexOf(Pi),n=o.slice(0,a).join(K.sep),u=K.join(e,n),A=o.slice(a);return{locationRoot:u,segments:A}},m1e=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let o=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&K.contains(e,n.target)!==null){let A=je.getFactoryWithDefault(r,n.target,o);A.locator=a,A.linkType=n.linkType}for(let u of n.locations){let{locationRoot:A,segments:p}=PQ(u,{skipPrefix:e}),h=je.getFactoryWithDefault(r,A,o);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let o;try{o=await oe.lstatPromise(t)}catch{}if(!o||o.isDirectory()){await oe.symlinkPromise(t,e,"junction");return}}await oe.symlinkPromise(K.relative(K.dirname(e),t),e)};async function y1e(t,e,r){let o=K.join(t,`${gq.default.randomBytes(16).toString("hex")}.tmp`);try{await oe.writeFilePromise(o,r);try{await oe.linkPromise(o,e)}catch{}}finally{await oe.unlinkPromise(o)}}async function E1t({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:o,baseFs:a,nmMode:n}){if(r.kind===E1e.FILE){if(n.value==="hardlinks-global"&&o&&r.digest){let A=K.join(o,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await oe.statPromise(A);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs(o.FILE="file",o.DIRECTORY="directory",o.SYMLINK="symlink",o))(E1e||{}),C1t=async(t,e,{baseFs:r,globalHardlinksStore:o,nmMode:a,windowsLinkType:n,packageChecksum:u})=>{await oe.mkdirPromise(t,{recursive:!0});let A=async(E=Bt.dot)=>{let I=K.join(e,E),v=await r.readdirPromise(I,{withFileTypes:!0}),b=new Map;for(let C of v){let T=K.join(E,C.name),L,U=K.join(I,C.name);if(C.isFile()){if(L={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let J=await wn.checksumFile(U,{baseFs:r,algorithm:"sha1"});L.digest=J}}else if(C.isDirectory())L={kind:"directory"};else if(C.isSymbolicLink())L={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(b.set(T,L),C.isDirectory()&&T!==Pi){let J=await A(T);for(let[te,le]of J)b.set(te,le)}}return b},p;if(a.value==="hardlinks-global"&&o&&u){let E=K.join(o,u.substring(0,2),`${u.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await oe.readFilePromise(E,"utf8"))))}catch{p=await A()}}else p=await A();let h=!1;for(let[E,I]of p){let v=K.join(e,E),b=K.join(t,E);if(I.kind==="directory")await oe.mkdirPromise(b,{recursive:!0});else if(I.kind==="file"){let C=I.mtimeMs;await E1t({srcPath:v,dstPath:b,entry:I,nmMode:a,baseFs:r,globalHardlinksStore:o}),I.mtimeMs!==C&&(h=!0)}else I.kind==="symlink"&&await mq(K.resolve(K.dirname(b),I.symlinkTo),b,n)}if(a.value==="hardlinks-global"&&o&&h&&u){let E=K.join(o,u.substring(0,2),`${u.substring(2)}.json`);await oe.removePromise(E),await y1e(o,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function w1t(t,e,r,o){let a=new Map,n=new Map,u=new Map,A=!1,p=(h,E,I,v,b)=>{let C=!0,T=K.join(h,E),L=new Set;if(E===Pi||E.startsWith("@")){let J;try{J=oe.statSync(T)}catch{}C=!!J,J?J.mtimeMs>r?(A=!0,L=new Set(oe.readdirSync(T))):L=new Set(I.children.get(E).children.keys()):A=!0;let te=e.get(h);if(te){let le=K.join(h,Pi,DQ),pe;try{pe=oe.statSync(le)}catch{}if(!pe)A=!0;else if(pe.mtimeMs>r){A=!0;let Ae=new Set(oe.readdirSync(le)),ye=new Map;n.set(h,ye);for(let[ae,we]of te)Ae.has(ae)&&ye.set(ae,we)}else n.set(h,te)}}else C=b.has(E);let U=I.children.get(E);if(C){let{linkType:J,locator:te}=U,le={children:new Map,linkType:J,locator:te};if(v.children.set(E,le),te){let pe=je.getSetWithDefault(u,te);pe.add(T),u.set(te,pe)}for(let pe of U.children.keys())p(T,pe,U,le,L)}else U.locator&&o.storedBuildState.delete(W.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:I,locator:v}=E,b={children:new Map,linkType:I,locator:v};if(a.set(h,b),v){let C=je.getSetWithDefault(u,E.locator);C.add(h),u.set(E.locator,C)}E.children.has(Pi)&&p(h,Pi,E,b,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:u,installChangedByUser:A}}function C1e(t){let e=W.parseDescriptor(t);return W.isVirtualDescriptor(e)&&(e=W.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function I1t(t,e,r,{loadManifest:o}){let a=new Map;for(let[A,{locations:p}]of t){let h=C1e(A)?null:await o(A,p[0]),E=new Map;if(h)for(let[I,v]of h.bin){let b=K.join(p[0],v);v!==""&&oe.existsSync(b)&&E.set(I,v)}a.set(A,E)}let n=new Map,u=(A,p,h)=>{let E=new Map,I=K.contains(r,A);if(h.locator&&I!==null){let v=a.get(h.locator);for(let[b,C]of v){let T=K.join(A,ue.toPortablePath(C));E.set(b,T)}for(let[b,C]of h.children){let T=K.join(A,b),L=u(T,T,C);L.size>0&&n.set(A,new Map([...n.get(A)||new Map,...L]))}}else for(let[v,b]of h.children){let C=u(K.join(A,v),p,b);for(let[T,L]of C)E.set(T,L)}return E};for(let[A,p]of e){let h=u(A,A,p);h.size>0&&n.set(A,new Map([...n.get(A)||new Map,...h]))}return n}var f1e=(t,e)=>{if(!t||!e)return t===e;let r=W.parseLocator(t);W.isVirtualLocator(r)&&(r=W.devirtualizeLocator(r));let o=W.parseLocator(e);return W.isVirtualLocator(o)&&(o=W.devirtualizeLocator(o)),W.areLocatorsEqual(r,o)};function yq(t){return K.join(t.get("globalFolder"),"store")}async function B1t(t,e,{baseFs:r,project:o,report:a,loadManifest:n,realLocatorChecksums:u}){let A=K.join(o.cwd,Pi),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:I}=w1t(t.locationTree,t.binSymlinks,t.mtimeMs,o),v=m1e(e,{skipPrefix:o.cwd}),b=[],C=async({srcDir:we,dstDir:Pe,linkType:g,globalHardlinksStore:Ee,nmMode:De,windowsLinkType:ce,packageChecksum:ne})=>{let ee=(async()=>{try{g==="SOFT"?(await oe.mkdirPromise(K.dirname(Pe),{recursive:!0}),await mq(K.resolve(we),Pe,ce)):await C1t(Pe,we,{baseFs:r,globalHardlinksStore:Ee,nmMode:De,windowsLinkType:ce,packageChecksum:ne})}catch(Ie){throw Ie.message=`While persisting ${we} -> ${Pe} ${Ie.message}`,Ie}finally{le.tick()}})().then(()=>b.splice(b.indexOf(ee),1));b.push(ee),b.length>A1e&&await Promise.race(b)},T=async(we,Pe,g)=>{let Ee=(async()=>{let De=async(ce,ne,ee)=>{try{ee.innerLoop||await oe.mkdirPromise(ne,{recursive:!0});let Ie=await oe.readdirPromise(ce,{withFileTypes:!0});for(let ke of Ie){if(!ee.innerLoop&&ke.name===DQ)continue;let ht=K.join(ce,ke.name),H=K.join(ne,ke.name);ke.isDirectory()?(ke.name!==Pi||ee&&ee.innerLoop)&&(await oe.mkdirPromise(H,{recursive:!0}),await De(ht,H,{...ee,innerLoop:!0})):ye.value==="hardlinks-local"||ye.value==="hardlinks-global"?await oe.linkPromise(ht,H):await oe.copyFilePromise(ht,H,h1e.default.constants.COPYFILE_FICLONE)}}catch(Ie){throw ee.innerLoop||(Ie.message=`While cloning ${ce} -> ${ne} ${Ie.message}`),Ie}finally{ee.innerLoop||le.tick()}};await De(we,Pe,g)})().then(()=>b.splice(b.indexOf(Ee),1));b.push(Ee),b.length>A1e&&await Promise.race(b)},L=async(we,Pe,g)=>{if(g)for(let[Ee,De]of Pe.children){let ce=g.children.get(Ee);await L(K.join(we,Ee),De,ce)}else{Pe.children.has(Pi)&&await YC(K.join(we,Pi),{contentsOnly:!1});let Ee=K.basename(we)===Pi&&v.has(K.join(K.dirname(we),K.sep));await YC(we,{contentsOnly:we===A,allowSymlink:Ee})}};for(let[we,Pe]of p){let g=v.get(we);for(let[Ee,De]of Pe.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee),ne=K.join(we,Ee);await L(ne,De,ce)}}let U=async(we,Pe,g)=>{if(g){f1e(Pe.locator,g.locator)||await YC(we,{contentsOnly:Pe.linkType==="HARD"});for(let[Ee,De]of Pe.children){let ce=g.children.get(Ee);await U(K.join(we,Ee),De,ce)}}else{Pe.children.has(Pi)&&await YC(K.join(we,Pi),{contentsOnly:!0});let Ee=K.basename(we)===Pi&&v.has(K.join(K.dirname(we),K.sep));await YC(we,{contentsOnly:Pe.linkType==="HARD",allowSymlink:Ee})}};for(let[we,Pe]of v){let g=p.get(we);for(let[Ee,De]of Pe.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee);await U(K.join(we,Ee),De,ce)}}let J=new Map,te=[];for(let[we,Pe]of E)for(let g of Pe){let{locationRoot:Ee,segments:De}=PQ(g,{skipPrefix:o.cwd}),ce=v.get(Ee),ne=Ee;if(ce){for(let ee of De)if(ne=K.join(ne,ee),ce=ce.children.get(ee),!ce)break;if(ce){let ee=f1e(ce.locator,we),Ie=e.get(ce.locator),ke=Ie.target,ht=ne,H=Ie.linkType;if(ee)J.has(ke)||J.set(ke,ht);else if(ke!==ht){let lt=W.parseLocator(ce.locator);W.isVirtualLocator(lt)&&(lt=W.devirtualizeLocator(lt)),te.push({srcDir:ke,dstDir:ht,linkType:H,realLocatorHash:lt.locatorHash})}}}}for(let[we,{locations:Pe}]of e.entries())for(let g of Pe){let{locationRoot:Ee,segments:De}=PQ(g,{skipPrefix:o.cwd}),ce=p.get(Ee),ne=v.get(Ee),ee=Ee,Ie=e.get(we),ke=W.parseLocator(we);W.isVirtualLocator(ke)&&(ke=W.devirtualizeLocator(ke));let ht=ke.locatorHash,H=Ie.target,lt=g;if(H===lt)continue;let Re=Ie.linkType;for(let Qe of De)ne=ne.children.get(Qe);if(!ce)te.push({srcDir:H,dstDir:lt,linkType:Re,realLocatorHash:ht});else for(let Qe of De)if(ee=K.join(ee,Qe),ce=ce.children.get(Qe),!ce){te.push({srcDir:H,dstDir:lt,linkType:Re,realLocatorHash:ht});break}}let le=Xs.progressViaCounter(te.length),pe=a.reportProgress(le),Ae=o.configuration.get("nmMode"),ye={value:Ae},ae=o.configuration.get("winLinkType");try{let we=ye.value==="hardlinks-global"?`${yq(o.configuration)}/v1`:null;if(we&&!await oe.existsPromise(we)){await oe.mkdirpPromise(we);for(let g=0;g<256;g++)await oe.mkdirPromise(K.join(we,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!J.has(g.srcDir))&&(J.set(g.srcDir,g.dstDir),await C({...g,globalHardlinksStore:we,nmMode:ye,windowsLinkType:ae,packageChecksum:u.get(g.realLocatorHash)||null}));await Promise.all(b),b.length=0;for(let g of te){let Ee=J.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==Ee&&await T(Ee,g.dstDir,{nmMode:ye})}await Promise.all(b),await oe.mkdirPromise(A,{recursive:!0});let Pe=await I1t(e,v,o.cwd,{loadManifest:n});await v1t(h,Pe,o.cwd,ae),await y1t(o,e,Pe,ye,{installChangedByUser:I}),Ae=="hardlinks-global"&&ye.value=="hardlinks-local"&&a.reportWarningOnce(74,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{pe.stop()}}async function v1t(t,e,r,o){for(let a of t.keys()){if(K.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);if(!e.has(a)){let n=K.join(a,Pi,DQ);await oe.removePromise(n)}}for(let[a,n]of e){if(K.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let u=K.join(a,Pi,DQ),A=t.get(a)||new Map;await oe.mkdirPromise(u,{recursive:!0});for(let p of A.keys())n.has(p)||(await oe.removePromise(K.join(u,p)),process.platform==="win32"&&await oe.removePromise(K.join(u,`${p}.cmd`)));for(let[p,h]of n){let E=A.get(p),I=K.join(u,p);E!==h&&(process.platform==="win32"?await(0,p1e.default)(ue.fromPortablePath(h),ue.fromPortablePath(I),{createPwshFile:!1}):(await oe.removePromise(I),await mq(h,I,o),K.contains(r,await oe.realpathPromise(h))!==null&&await oe.chmodPromise(h,493)))}}}Ye();Pt();nA();var cv=class extends P0{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new Eq(r)}},Eq=class extends dm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let o=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),a=$Ie(r,this.opts.project.cwd,o),{tree:n,errors:u}=JB(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:I,text:v}of u)this.opts.report.reportError(I,v);return}let A=new Map;r.fallbackPool=A;let p=(I,v)=>{let b=W.parseLocator(v.locator),C=W.stringifyIdent(b);C===I?A.set(I,b.reference):A.set(I,[C,b.reference])},h=K.join(this.opts.project.cwd,dr.nodeModules),E=n.get(h);if(!(typeof E>"u")){if("target"in E)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let I of E.dirList){let v=K.join(h,I),b=n.get(v);if(typeof b>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in b)p(I,b);else for(let C of b.dirList){let T=K.join(v,C),L=n.get(T);if(typeof L>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in L)p(`${I}/${C}`,L);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var D1t={hooks:{cleanGlobalArtifacts:async t=>{let e=yq(t);await oe.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevents packages to be hoisted past specific levels",type:"STRING",values:["workspaces","dependencies","none"],default:"none"},nmMode:{description:"Defines in which measure Yarn must use hardlinks and symlinks when generated `node_modules` directories.",type:"STRING",values:["classic","hardlinks-local","hardlinks-global"],default:"classic"},nmSelfReferences:{description:"Defines whether the linker should generate self-referencing symlinks for workspaces.",type:"BOOLEAN",default:!0}},linkers:[lv,cv]},P1t=D1t;var EG={};Kt(EG,{NpmHttpFetcher:()=>fv,NpmRemapResolver:()=>pv,NpmSemverFetcher:()=>dl,NpmSemverResolver:()=>hv,NpmTagResolver:()=>gv,default:()=>Ovt,npmConfigUtils:()=>Zn,npmHttpUtils:()=>on,npmPublishUtils:()=>sw});Ye();var x1e=$e(zn());var Wn="npm:";var on={};Kt(on,{AuthType:()=>P1e,customPackageError:()=>mm,del:()=>N1t,get:()=>ym,getIdentUrl:()=>SQ,getPackageMetadata:()=>KC,handleInvalidAuthenticationError:()=>b0,post:()=>T1t,put:()=>R1t});Ye();Ye();Pt();var Bq=$e(A2()),v1e=$e(S_()),D1e=$e(zn()),vq=Be("url");var Zn={};Kt(Zn,{RegistryType:()=>w1e,getAuditRegistry:()=>S1t,getAuthConfiguration:()=>Iq,getDefaultRegistry:()=>uv,getPublishRegistry:()=>x1t,getRegistryConfiguration:()=>I1e,getScopeConfiguration:()=>wq,getScopeRegistry:()=>WC,normalizeRegistry:()=>oc});var w1e=(o=>(o.AUDIT_REGISTRY="npmAuditRegistry",o.FETCH_REGISTRY="npmRegistryServer",o.PUBLISH_REGISTRY="npmPublishRegistry",o))(w1e||{});function oc(t){return t.replace(/\/$/,"")}function S1t({configuration:t}){return uv({configuration:t,type:"npmAuditRegistry"})}function x1t(t,{configuration:e}){return t.publishConfig?.registry?oc(t.publishConfig.registry):t.name?WC(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):uv({configuration:e,type:"npmPublishRegistry"})}function WC(t,{configuration:e,type:r="npmRegistryServer"}){let o=wq(t,{configuration:e});if(o===null)return uv({configuration:e,type:r});let a=o.get(r);return a===null?uv({configuration:e,type:r}):oc(a)}function uv({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return oc(r!==null?r:t.get("npmRegistryServer"))}function I1e(t,{configuration:e}){let r=e.get("npmRegistries"),o=oc(t),a=r.get(o);if(typeof a<"u")return a;let n=r.get(o.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}function wq(t,{configuration:e}){if(t===null)return null;let o=e.get("npmScopes").get(t);return o||null}function Iq(t,{configuration:e,ident:r}){let o=r&&wq(r.scope,{configuration:e});return o?.get("npmAuthIdent")||o?.get("npmAuthToken")?o:I1e(t,{configuration:e})||e}var P1e=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(P1e||{});async function b0(t,{attemptedAs:e,registry:r,headers:o,configuration:a}){if(bQ(t))throw new zt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new zt(41,`Invalid authentication (${typeof e!="string"?`as ${await M1t(r,o,{configuration:a})}`:`attempted as ${e}`})`)}function mm(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${de.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function SQ(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var B1e=new Map;async function KC(t,{cache:e,project:r,registry:o,headers:a,version:n,...u}){return await je.getFactoryWithDefault(B1e,t.identHash,async()=>{let{configuration:A}=r;o=Av(A,{ident:t,registry:o});let p=Q1t(A,o),h=K.join(p,`${W.slugifyIdent(t)}.json`),E=null;if(!r.lockfileNeedsRefresh){try{E=await oe.readJsonPromise(h)}catch{}if(E){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(A.get("enableOfflineMode")){let I=structuredClone(E.metadata),v=new Set;if(e){for(let C of Object.keys(I.versions)){let T=W.makeLocator(t,`npm:${C}`),L=e.getLocatorMirrorPath(T);(!L||!oe.existsSync(L))&&(delete I.versions[C],v.add(C))}let b=I["dist-tags"].latest;if(v.has(b)){let C=Object.keys(E.metadata.versions).sort(D1e.default.compare),T=C.indexOf(b);for(;v.has(C[T])&&T>=0;)T-=1;T>=0?I["dist-tags"].latest=C[T]:delete I["dist-tags"].latest}}return I}}}return await ym(SQ(t),{...u,customErrorMessage:mm,configuration:A,registry:o,ident:t,headers:{...a,["If-None-Match"]:E?.etag,["If-Modified-Since"]:E?.lastModified},wrapNetworkRequest:async I=>async()=>{let v=await I();if(v.statusCode===304){if(E===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...v,body:E.metadata}}let b=b1t(JSON.parse(v.body.toString()));B1e.set(t.identHash,b);let C={metadata:b,etag:v.headers.etag,lastModified:v.headers["last-modified"]},T=`${h}-${process.pid}.tmp`;return await oe.mkdirPromise(p,{recursive:!0}),await oe.writeJsonPromise(T,C,{compact:!0}),await oe.renamePromise(T,h),{...v,body:b}}})})}var S1e=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function b1t(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,v1e.default)(r,S1e)]))}}var k1t=wn.makeHash(...S1e).slice(0,6);function Q1t(t,e){let r=F1t(t),o=new vq.URL(e);return K.join(r,k1t,o.hostname)}function F1t(t){return K.join(t.get("globalFolder"),"metadata/npm")}async function ym(t,{configuration:e,headers:r,ident:o,authType:a,registry:n,...u}){n=Av(e,{ident:o,registry:n}),o&&o.scope&&typeof a>"u"&&(a=1);let A=await xQ(n,{authType:a,configuration:e,ident:o});A&&(r={...r,authorization:A});try{return await rn.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...u})}catch(p){throw await b0(p,{registry:n,configuration:e,headers:r}),p}}async function T1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await xQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await rn.post(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!bQ(I)||p)throw await b0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Dq(I,{configuration:o});let v={...a,...VC(p)};try{return await rn.post(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(b){throw await b0(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function R1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await xQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await rn.put(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!bQ(I))throw await b0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Dq(I,{configuration:o});let v={...a,...VC(p)};try{return await rn.put(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(b){throw await b0(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function N1t(t,{attemptedAs:e,configuration:r,headers:o,ident:a,authType:n=3,registry:u,otp:A,...p}){u=Av(r,{ident:a,registry:u});let h=await xQ(u,{authType:n,configuration:r,ident:a});h&&(o={...o,authorization:h}),A&&(o={...o,...VC(A)});try{return await rn.del(u+t,{configuration:r,headers:o,...p})}catch(E){if(!bQ(E)||A)throw await b0(E,{attemptedAs:e,registry:u,configuration:r,headers:o}),E;A=await Dq(E,{configuration:r});let I={...o,...VC(A)};try{return await rn.del(`${u}${t}`,{configuration:r,headers:I,...p})}catch(v){throw await b0(v,{attemptedAs:e,registry:u,configuration:r,headers:o}),v}}}function Av(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return WC(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return oc(r)}async function xQ(t,{authType:e=2,configuration:r,ident:o}){let a=Iq(t,{configuration:r,ident:o}),n=L1t(a,e);if(!n)return null;let u=await r.reduceHook(A=>A.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:o});if(u)return u;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let A=a.get("npmAuthIdent");return A.includes(":")?`Basic ${Buffer.from(A).toString("base64")}`:`Basic ${A}`}if(n&&e!==1)throw new zt(33,"No authentication configured for request");return null}function L1t(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function M1t(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await rn.get(new vq.URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function Dq(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Nt.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,de.pretty(e,"$1",de.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&Ji.openUrl){let{openNow:u}=await(0,Bq.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});u&&(await Ji.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(` -`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:o}=await(0,Bq.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` -`),o}function bQ(t){if(t.originalError?.name!=="HTTPError")return!1;try{return(t.originalError?.response.headers["www-authenticate"].split(/,\s*/).map(r=>r.toLowerCase())).includes("otp")}catch{return!1}}function VC(t){return{["npm-otp"]:t}}var fv=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o,params:a}=W.parseRange(e.reference);return!(!x1e.default.valid(o)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let{params:o}=W.parseRange(e.reference);if(o===null||typeof o.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await ym(o.__archiveUrl,{customErrorMessage:mm,configuration:r.project.configuration,ident:e});return await Xi.convertToZip(a,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();var pv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!W.tryParseDescriptor(e.range.slice(Wn.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){let o=r.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return r.resolver.getResolutionDependencies(o,r)}async getCandidates(e,r,o){let a=o.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return await o.resolver.getCandidates(a,r,o)}async getSatisfying(e,r,o,a){let n=a.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return a.resolver.getSatisfying(n,r,o,a)}resolve(e,r){throw new Error("Unreachable")}};Ye();Ye();var b1e=$e(zn()),k1e=Be("url");var dl=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let o=new k1e.URL(e.reference);return!(!b1e.default.valid(o.pathname)||o.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o;try{o=await ym(dl.getLocatorUrl(e),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}catch{o=await ym(dl.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:o}){let a=WC(e.scope,{configuration:o}),n=dl.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),a=a.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===a+n||r===a+n.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=kr.clean(e.reference.slice(Wn.length));if(r===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");return`${SQ(e)}/-/${e.name}-${r}.tgz`}};Ye();Ye();Ye();var Pq=$e(zn());var kQ=W.makeIdent(null,"node-gyp"),O1t=/\b(node-gyp|prebuild-install)\b/,hv=class{supportsDescriptor(e,r){return e.range.startsWith(Wn)?!!kr.validRange(e.range.slice(Wn.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o}=W.parseRange(e.reference);return!!Pq.default.valid(o)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=kr.validRange(e.range.slice(Wn.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);let n=await KC(e,{cache:o.fetchOptions?.cache,project:o.project,version:Pq.default.valid(a.raw)?a.raw:void 0}),u=je.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new kr.SemVer(h);if(a.test(E))return E}catch{}return je.mapAndFilter.skip}),A=u.filter(h=>!n.versions[h.raw].deprecated),p=A.length>0?A:u;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=W.makeLocator(e,`${Wn}${h.raw}`),I=n.versions[h.raw].dist.tarball;return dl.isConventionalTarballUrl(E,I,{configuration:o.project.configuration})?E:W.bindLocator(E,{__archiveUrl:I})})}async getSatisfying(e,r,o,a){let n=kr.validRange(e.range.slice(Wn.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);return{locators:je.mapAndFilter(o,p=>{if(p.identHash!==e.identHash)return je.mapAndFilter.skip;let h=W.tryParseRange(p.reference,{requireProtocol:Wn});if(!h)return je.mapAndFilter.skip;let E=new kr.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:je.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:o}=W.parseRange(e.reference),a=kr.clean(o);if(a===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await KC(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new zt(16,`Registry failed to return reference "${a}"`);let u=new Mt;if(u.load(n.versions[a]),!u.dependencies.has(kQ.identHash)&&!u.peerDependencies.has(kQ.identHash)){for(let A of u.scripts.values())if(A.match(O1t)){u.dependencies.set(kQ.identHash,W.makeDescriptor(kQ,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:u.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(u.dependencies),peerDependencies:u.peerDependencies,dependenciesMeta:u.dependenciesMeta,peerDependenciesMeta:u.peerDependenciesMeta,bin:u.bin}}};Ye();Ye();var Q1e=$e(zn());var gv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!QE.test(e.range.slice(Wn.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Wn.length),n=await KC(e,{cache:o.fetchOptions?.cache,project:o.project});if(!Object.hasOwn(n,"dist-tags"))throw new zt(15,'Registry returned invalid data - missing "dist-tags" field');let u=n["dist-tags"];if(!Object.hasOwn(u,a))throw new zt(16,`Registry failed to return tag "${a}"`);let A=u[a],p=W.makeLocator(e,`${Wn}${A}`),h=n.versions[A].dist.tarball;return dl.isConventionalTarballUrl(p,h,{configuration:o.project.configuration})?[p]:[W.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,o,a){let n=[];for(let u of o){if(u.identHash!==e.identHash)continue;let A=W.tryParseRange(u.reference,{requireProtocol:Wn});if(!(!A||!Q1e.default.valid(A.selector))){if(A.params?.__archiveUrl){let p=W.makeRange({protocol:Wn,selector:A.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(W.makeDescriptor(e,p),r,a);if(u.reference!==h.reference)continue}n.push(u)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var sw={};Kt(sw,{getGitHead:()=>Lvt,getPublishAccess:()=>wBe,getReadmeContent:()=>IBe,makePublishBody:()=>Nvt});Ye();Ye();Pt();var hG={};Kt(hG,{PackCommand:()=>O0,default:()=>mvt,packUtils:()=>CA});Ye();Ye();Ye();Pt();qt();var CA={};Kt(CA,{genPackList:()=>$Q,genPackStream:()=>pG,genPackageManifest:()=>lBe,hasPackScripts:()=>AG,prepareForPack:()=>fG});Ye();Pt();var uG=$e(Zo()),oBe=$e(rBe()),aBe=Be("zlib"),ovt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],avt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function AG(t){return!!(un.hasWorkspaceScript(t,"prepack")||un.hasWorkspaceScript(t,"postpack"))}async function fG(t,{report:e},r){await un.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let o=K.join(t.cwd,Mt.fileName);await oe.existsPromise(o)&&await t.manifest.loadFile(o,{baseFs:oe}),await r()}finally{await un.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function pG(t,e){typeof e>"u"&&(e=await $Q(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(K.normalize(n));for(let n of t.manifest.bin.values())r.add(K.normalize(n));let o=oBe.default.pack();process.nextTick(async()=>{for(let n of e){let u=K.normalize(n),A=K.resolve(t.cwd,u),p=K.join("package",u),h=await oe.lstatPromise(A),E={name:p,mtime:new Date(vi.SAFE_TIME*1e3)},I=r.has(u)?493:420,v,b,C=new Promise((L,U)=>{v=L,b=U}),T=L=>{L?b(L):v()};if(h.isFile()){let L;u==="package.json"?L=Buffer.from(JSON.stringify(await lBe(t),null,2)):L=await oe.readFilePromise(A),o.entry({...E,mode:I,type:"file"},L,T)}else h.isSymbolicLink()?o.entry({...E,mode:I,type:"symlink",linkname:await oe.readlinkPromise(A)},T):T(new Error(`Unsupported file type ${h.mode} for ${ue.fromPortablePath(u)}`));await C}o.finalize()});let a=(0,aBe.createGzip)();return o.pipe(a),a}async function lBe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function $Q(t){let e=t.project,r=e.configuration,o={accept:[],reject:[]};for(let I of avt)o.reject.push(I);for(let I of ovt)o.accept.push(I);o.reject.push(r.get("rcFilename"));let a=I=>{if(I===null||!I.startsWith(`${t.cwd}/`))return;let v=K.relative(t.cwd,I),b=K.resolve(Bt.root,v);o.reject.push(b)};a(K.resolve(e.cwd,dr.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(I=>I.populateYarnPaths,e,I=>{a(I)});for(let I of e.workspaces){let v=K.relative(t.cwd,I.cwd);v!==""&&!v.match(/^(\.\.)?\//)&&o.reject.push(`/${v}`)}let n={accept:[],reject:[]},u=t.manifest.publishConfig?.main??t.manifest.main,A=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;u!=null&&n.accept.push(K.resolve(Bt.root,u)),A!=null&&n.accept.push(K.resolve(Bt.root,A)),typeof p=="string"&&n.accept.push(K.resolve(Bt.root,p));for(let I of h.values())n.accept.push(K.resolve(Bt.root,I));if(p instanceof Map)for(let[I,v]of p.entries())n.accept.push(K.resolve(Bt.root,I)),typeof v=="string"&&n.accept.push(K.resolve(Bt.root,v));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let I of t.manifest.files)cBe(n.accept,I,{cwd:Bt.root})}return await lvt(t.cwd,{hasExplicitFileList:E,globalList:o,ignoreList:n})}async function lvt(t,{hasExplicitFileList:e,globalList:r,ignoreList:o}){let a=[],n=new _u(t),u=[[Bt.root,[o]]];for(;u.length>0;){let[A,p]=u.pop(),h=await n.lstatPromise(A);if(!iBe(A,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(A),I=!1,v=!1;if(!e||A!==Bt.root)for(let T of E)I=I||T===".gitignore",v=v||T===".npmignore";let b=v?await nBe(n,A,".npmignore"):I?await nBe(n,A,".gitignore"):null,C=b!==null?[b].concat(p):p;iBe(A,{globalList:r,ignoreLists:p})&&(C=[...p,{accept:[],reject:["**/*"]}]);for(let T of E)u.push([K.resolve(A,T),C])}else(h.isFile()||h.isSymbolicLink())&&a.push(K.relative(Bt.root,A))}return a.sort()}async function nBe(t,e,r){let o={accept:[],reject:[]},a=await t.readFilePromise(K.join(e,r),"utf8");for(let n of a.split(/\n/g))cBe(o.reject,n,{cwd:e});return o}function cvt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=K.resolve(e,t)),r&&(t=`!${t}`),t}function cBe(t,e,{cwd:r}){let o=e.trim();o===""||o[0]==="#"||t.push(cvt(o,{cwd:r}))}function iBe(t,{globalList:e,ignoreLists:r}){let o=ZQ(t,e.accept);if(o!==0)return o===2;let a=ZQ(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let u=ZQ(t,n.accept);if(u!==0)return u===2;let A=ZQ(t,n.reject);if(A!==0)return A===1}return!1}function ZQ(t,e){let r=e,o=[];for(let a=0;a{await fG(a,{report:p},async()=>{p.reportJson({base:ue.fromPortablePath(a.cwd)});let h=await $Q(a);for(let E of h)p.reportInfo(null,ue.fromPortablePath(E)),p.reportJson({location:ue.fromPortablePath(E)});if(!this.dryRun){let E=await pG(a,h),I=oe.createWriteStream(u);E.pipe(I),await new Promise(v=>{I.on("finish",v)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${de.pretty(r,u,de.Type.PATH)}`),p.reportJson({output:ue.fromPortablePath(u)}))})).exitCode()}};O0.paths=[["pack"]],O0.usage=nt.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});function uvt(t,{workspace:e}){let r=t.replace("%s",Avt(e)).replace("%v",fvt(e));return ue.toPortablePath(r)}function Avt(t){return t.manifest.name!==null?W.slugifyIdent(t.manifest.name):"package"}function fvt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var pvt=["dependencies","devDependencies","peerDependencies"],hvt="workspace:",gvt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let o of pvt)for(let a of t.manifest.getForScope(o).values()){let n=r.tryWorkspaceByDescriptor(a),u=W.parseRange(a.range);if(u.protocol===hvt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new zt(21,`${W.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let A;W.areDescriptorsEqual(a,n.anchoredDescriptor)||u.selector==="*"?A=n.manifest.version??"0.0.0":u.selector==="~"||u.selector==="^"?A=`${u.selector}${n.manifest.version??"0.0.0"}`:A=u.selector;let p=o==="dependencies"?W.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":o;e[h][W.stringifyIdent(a)]=A}}},dvt={hooks:{beforeWorkspacePacking:gvt},commands:[O0]},mvt=dvt;var yBe=Be("crypto"),EBe=$e(mBe()),CBe=Be("url");async function Nvt(t,e,{access:r,tag:o,registry:a,gitHead:n}){let u=t.manifest.name,A=t.manifest.version,p=W.stringifyIdent(u),h=(0,yBe.createHash)("sha1").update(e).digest("hex"),E=EBe.default.fromData(e).toString(),I=r??wBe(t,u),v=await IBe(t),b=await CA.genPackageManifest(t),C=`${p}-${A}.tgz`,T=new CBe.URL(`${oc(a)}/${p}/-/${C}`);return{_id:p,_attachments:{[C]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:p,access:I,["dist-tags"]:{[o]:A},versions:{[A]:{...b,_id:`${p}@${A}`,name:p,version:A,gitHead:n,dist:{shasum:h,integrity:E,tarball:T.toString()}}},readme:v}}async function Lvt(t){try{let{stdout:e}=await Ur.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function wBe(t,e){let r=t.project.configuration;return t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?t.manifest.publishConfig.access:r.get("npmPublishAccess")!==null?r.get("npmPublishAccess"):e.scope?"restricted":"public"}async function IBe(t){let e=ue.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${W.stringifyIdent(r)} -`;try{a=await oe.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var yG={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"BOOLEAN",default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:"SECRET",default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:"SECRET",default:null}},BBe={npmAuditRegistry:{description:"Registry to query for audit reports",type:"STRING",default:null},npmPublishRegistry:{description:"Registry to push packages to",type:"STRING",default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"STRING",default:"https://registry.yarnpkg.com"}},Mvt={configuration:{...yG,...BBe,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...yG,...BBe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:oc,valueDefinition:{description:"",type:"SHAPE",properties:{...yG}}}},fetchers:[fv,dl],resolvers:[pv,hv,gv]},Ovt=Mvt;var xG={};Kt(xG,{NpmAuditCommand:()=>_0,NpmInfoCommand:()=>H0,NpmLoginCommand:()=>j0,NpmLogoutCommand:()=>q0,NpmPublishCommand:()=>G0,NpmTagAddCommand:()=>W0,NpmTagListCommand:()=>Y0,NpmTagRemoveCommand:()=>V0,NpmWhoamiCommand:()=>K0,default:()=>Gvt,npmAuditTypes:()=>Tv,npmAuditUtils:()=>eF});Ye();Ye();qt();var vG=$e(Zo());Za();var Tv={};Kt(Tv,{Environment:()=>Qv,Severity:()=>Fv});var Qv=(o=>(o.All="all",o.Production="production",o.Development="development",o))(Qv||{}),Fv=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(Fv||{});var eF={};Kt(eF,{allSeverities:()=>ow,getPackages:()=>BG,getReportTree:()=>wG,getSeverityInclusions:()=>CG,getTopLevelDependencies:()=>IG});Ye();var vBe=$e(zn());var ow=["info","low","moderate","high","critical"];function CG(t){if(typeof t>"u")return new Set(ow);let e=ow.indexOf(t),r=ow.slice(e);return new Set(r)}function wG(t){let e={},r={children:e};for(let[o,a]of je.sortMap(Object.entries(t),n=>n[0]))for(let n of je.sortMap(a,u=>`${u.id}`))e[`${o}/${n.id}`]={value:de.tuple(de.Type.IDENT,W.parseIdent(o)),children:{ID:typeof n.id<"u"&&{label:"ID",value:de.tuple(de.Type.ID,n.id)},Issue:{label:"Issue",value:de.tuple(de.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:de.tuple(de.Type.URL,n.url)},Severity:{label:"Severity",value:de.tuple(de.Type.NO_HINT,n.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:de.tuple(de.Type.RANGE,n.vulnerable_versions)},["Tree Versions"]:{label:"Tree Versions",children:[...n.versions].sort(vBe.default.compare).map(u=>({value:de.tuple(de.Type.REFERENCE,u)}))},Dependents:{label:"Dependents",children:je.sortMap(n.dependents,u=>W.stringifyLocator(u)).map(u=>({value:de.tuple(de.Type.LOCATOR,u)}))}}};return r}function IG(t,e,{all:r,environment:o}){let a=[],n=r?t.workspaces:[e],u=["all","production"].includes(o),A=["all","development"].includes(o);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!A:!u)||a.push({workspace:p,dependency:h});return a}function BG(t,e,{recursive:r}){let o=new Map,a=new Set,n=[],u=(A,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let E=t.storedPackages.get(h);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");if(W.ensureDevirtualizedLocator(E).reference.startsWith("npm:")&&E.version!==null){let v=W.stringifyIdent(E),b=je.getMapWithDefault(o,v);je.getArrayWithDefault(b,E.version).push(A)}if(r)for(let v of E.dependencies.values())n.push([E,v])};for(let{workspace:A,dependency:p}of e)n.push([A.anchoredLocator,p]);for(;n.length>0;){let[A,p]=n.shift();u(A,p)}return o}var _0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=ge.String("--environment","all",{description:"Which environments to cover",validator:Vs(Qv)});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.noDeprecations=ge.Boolean("--no-deprecations",!1,{description:"Don't warn about deprecated packages"});this.severity=ge.String("--severity","info",{description:"Minimal severity requested for packages to be displayed",validator:Vs(Fv)});this.excludes=ge.Array("--exclude",[],{description:"Array of glob patterns of packages to exclude from audit"});this.ignores=ge.Array("--ignore",[],{description:"Array of glob patterns of advisory ID's to ignore in the audit report"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=IG(o,a,{all:this.all,environment:this.environment}),u=BG(o,n,{recursive:this.recursive}),A=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[L,U]of u)A.some(J=>vG.default.isMatch(L,J))||(p[L]=[...U.keys()]);let h=Zn.getAuditRegistry({configuration:r}),E,I=await AA.start({configuration:r,stdout:this.context.stdout},async()=>{let L=on.post("/-/npm/v1/security/advisories/bulk",p,{authType:on.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([te,le])=>{let pe=await on.getPackageMetadata(W.parseIdent(te),{project:o});return je.mapAndFilter(le,Ae=>{let{deprecated:ye}=pe.versions[Ae];return ye?[te,Ae,ye]:je.mapAndFilter.skip})})),J=await L;for(let[te,le,pe]of U.flat(1))Object.hasOwn(J,te)&&J[te].some(Ae=>kr.satisfiesWithPrereleases(le,Ae.vulnerable_versions))||(J[te]??=[],J[te].push({id:`${te} (deprecation)`,title:pe.trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:le}));E=J});if(I.hasErrors())return I.exitCode();let v=CG(this.severity),b=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),C=Object.create(null);for(let[L,U]of Object.entries(E)){let J=U.filter(te=>!vG.default.isMatch(`${te.id}`,b)&&v.has(te.severity));J.length>0&&(C[L]=J.map(te=>{let le=u.get(L);if(typeof le>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let pe=[...le.keys()].filter(ye=>kr.satisfiesWithPrereleases(ye,te.vulnerable_versions)),Ae=new Map;for(let ye of pe)for(let ae of le.get(ye))Ae.set(ae.locatorHash,ae);return{...te,versions:pe,dependents:[...Ae.values()]}}))}let T=Object.keys(C).length>0;return T?($s.emitTree(wG(C),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async L=>{L.reportInfo(1,"No audit suggestions")}),T?1:0)}};_0.paths=[["npm","audit"]],_0.usage=nt.Usage({description:"perform a vulnerability audit against the installed packages",details:` +`;for(let[v,x]of r){let C=V.contains(t.cwd,v);if(C===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` ${JSON.stringify(C)}: +`;for(let[R,L]of x){let U=V.relative(V.join(v,Si),L);n+=` ${JSON.stringify(R)}: ${JSON.stringify(U)} +`}}}}let p=t.cwd,h=V.join(p,Si,p1e);a&&await oe.removePromise(h),await oe.changeFilePromise(h,n,{automaticNewlines:!0})}async function fj(t,{unrollAliases:e=!1}={}){let r=t.cwd,o=V.join(r,Si,p1e),a;try{a=await oe.statPromise(o)}catch{}if(!a)return null;let n=Ki(await oe.readFilePromise(o,"utf8"));if(n.__metadata.version>f1e)return null;let u=n.__metadata.nmMode||"classic",A=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let I=E.locations.map(x=>V.join(r,x)),v=E.bin;if(v)for(let[x,C]of Object.entries(v)){let R=V.join(r,ue.toPortablePath(x)),L=_e.getMapWithDefault(p,R);for(let[U,J]of Object.entries(C))L.set(U,ue.toPortablePath([R,Si,J].join(V.sep)))}if(A.set(h,{target:Bt.dot,linkType:"HARD",locations:I,aliases:E.aliases||[]}),e&&E.aliases)for(let x of E.aliases){let{scope:C,name:R}=W.parseLocator(h),L=W.makeLocator(W.makeIdent(C,R),x),U=W.stringifyLocator(L);A.set(U,{target:Bt.dot,linkType:"HARD",locations:I,aliases:[]})}}return{locatorMap:A,binSymlinks:p,locationTree:h1e(A,{skipPrefix:t.cwd}),nmMode:u,mtimeMs:a.mtimeMs}}var WC=async(t,e)=>{if(t.split(V.sep).indexOf(Si)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop){let o=e.allowSymlink?await oe.statPromise(t):await oe.lstatPromise(t);if(e.allowSymlink&&!o.isDirectory()||!e.allowSymlink&&o.isSymbolicLink()){await oe.unlinkPromise(t);return}}let r=await oe.readdirPromise(t,{withFileTypes:!0});for(let o of r){let a=V.join(t,o.name);o.isDirectory()?(o.name!==Si||e&&e.innerLoop)&&await WC(a,{innerLoop:!0,contentsOnly:!1}):await oe.unlinkPromise(a)}e.contentsOnly||await oe.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},l1e=4,vQ=(t,{skipPrefix:e})=>{let r=V.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let o=r.split(V.sep).filter(p=>p!==""),a=o.indexOf(Si),n=o.slice(0,a).join(V.sep),u=V.join(e,n),A=o.slice(a);return{locationRoot:u,segments:A}},h1e=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let o=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&V.contains(e,n.target)!==null){let A=_e.getFactoryWithDefault(r,n.target,o);A.locator=a,A.linkType=n.linkType}for(let u of n.locations){let{locationRoot:A,segments:p}=vQ(u,{skipPrefix:e}),h=_e.getFactoryWithDefault(r,A,o);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let o;try{o=await oe.lstatPromise(t)}catch{}if(!o||o.isDirectory()){await oe.symlinkPromise(t,e,"junction");return}}await oe.symlinkPromise(V.relative(V.dirname(e),t),e)};async function g1e(t,e,r){let o=V.join(t,`${pj.default.randomBytes(16).toString("hex")}.tmp`);try{await oe.writeFilePromise(o,r);try{await oe.linkPromise(o,e)}catch{}}finally{await oe.unlinkPromise(o)}}async function h1t({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:o,baseFs:a,nmMode:n}){if(r.kind===d1e.FILE){if(n.value==="hardlinks-global"&&o&&r.digest){let A=V.join(o,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await oe.statPromise(A);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs(o.FILE="file",o.DIRECTORY="directory",o.SYMLINK="symlink",o))(d1e||{}),g1t=async(t,e,{baseFs:r,globalHardlinksStore:o,nmMode:a,windowsLinkType:n,packageChecksum:u})=>{await oe.mkdirPromise(t,{recursive:!0});let A=async(E=Bt.dot)=>{let I=V.join(e,E),v=await r.readdirPromise(I,{withFileTypes:!0}),x=new Map;for(let C of v){let R=V.join(E,C.name),L,U=V.join(I,C.name);if(C.isFile()){if(L={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let J=await wn.checksumFile(U,{baseFs:r,algorithm:"sha1"});L.digest=J}}else if(C.isDirectory())L={kind:"directory"};else if(C.isSymbolicLink())L={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(x.set(R,L),C.isDirectory()&&R!==Si){let J=await A(R);for(let[te,ae]of J)x.set(te,ae)}}return x},p;if(a.value==="hardlinks-global"&&o&&u){let E=V.join(o,u.substring(0,2),`${u.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await oe.readFilePromise(E,"utf8"))))}catch{p=await A()}}else p=await A();let h=!1;for(let[E,I]of p){let v=V.join(e,E),x=V.join(t,E);if(I.kind==="directory")await oe.mkdirPromise(x,{recursive:!0});else if(I.kind==="file"){let C=I.mtimeMs;await h1t({srcPath:v,dstPath:x,entry:I,nmMode:a,baseFs:r,globalHardlinksStore:o}),I.mtimeMs!==C&&(h=!0)}else I.kind==="symlink"&&await gj(V.resolve(V.dirname(x),I.symlinkTo),x,n)}if(a.value==="hardlinks-global"&&o&&h&&u){let E=V.join(o,u.substring(0,2),`${u.substring(2)}.json`);await oe.removePromise(E),await g1e(o,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function d1t(t,e,r,o){let a=new Map,n=new Map,u=new Map,A=!1,p=(h,E,I,v,x)=>{let C=!0,R=V.join(h,E),L=new Set;if(E===Si||E.startsWith("@")){let J;try{J=oe.statSync(R)}catch{}C=!!J,J?J.mtimeMs>r?(A=!0,L=new Set(oe.readdirSync(R))):L=new Set(I.children.get(E).children.keys()):A=!0;let te=e.get(h);if(te){let ae=V.join(h,Si,BQ),fe;try{fe=oe.statSync(ae)}catch{}if(!fe)A=!0;else if(fe.mtimeMs>r){A=!0;let ce=new Set(oe.readdirSync(ae)),me=new Map;n.set(h,me);for(let[he,Be]of te)ce.has(he)&&me.set(he,Be)}else n.set(h,te)}}else C=x.has(E);let U=I.children.get(E);if(C){let{linkType:J,locator:te}=U,ae={children:new Map,linkType:J,locator:te};if(v.children.set(E,ae),te){let fe=_e.getSetWithDefault(u,te);fe.add(R),u.set(te,fe)}for(let fe of U.children.keys())p(R,fe,U,ae,L)}else U.locator&&o.storedBuildState.delete(W.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:I,locator:v}=E,x={children:new Map,linkType:I,locator:v};if(a.set(h,x),v){let C=_e.getSetWithDefault(u,E.locator);C.add(h),u.set(E.locator,C)}E.children.has(Si)&&p(h,Si,E,x,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:u,installChangedByUser:A}}function m1e(t){let e=W.parseDescriptor(t);return W.isVirtualDescriptor(e)&&(e=W.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function m1t(t,e,r,{loadManifest:o}){let a=new Map;for(let[A,{locations:p}]of t){let h=m1e(A)?null:await o(A,p[0]),E=new Map;if(h)for(let[I,v]of h.bin){let x=V.join(p[0],v);v!==""&&oe.existsSync(x)&&E.set(I,v)}a.set(A,E)}let n=new Map,u=(A,p,h)=>{let E=new Map,I=V.contains(r,A);if(h.locator&&I!==null){let v=a.get(h.locator);for(let[x,C]of v){let R=V.join(A,ue.toPortablePath(C));E.set(x,R)}for(let[x,C]of h.children){let R=V.join(A,x),L=u(R,R,C);L.size>0&&n.set(A,new Map([...n.get(A)||new Map,...L]))}}else for(let[v,x]of h.children){let C=u(V.join(A,v),p,x);for(let[R,L]of C)E.set(R,L)}return E};for(let[A,p]of e){let h=u(A,A,p);h.size>0&&n.set(A,new Map([...n.get(A)||new Map,...h]))}return n}var c1e=(t,e)=>{if(!t||!e)return t===e;let r=W.parseLocator(t);W.isVirtualLocator(r)&&(r=W.devirtualizeLocator(r));let o=W.parseLocator(e);return W.isVirtualLocator(o)&&(o=W.devirtualizeLocator(o)),W.areLocatorsEqual(r,o)};function dj(t){return V.join(t.get("globalFolder"),"store")}async function y1t(t,e,{baseFs:r,project:o,report:a,loadManifest:n,realLocatorChecksums:u}){let A=V.join(o.cwd,Si),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:I}=d1t(t.locationTree,t.binSymlinks,t.mtimeMs,o),v=h1e(e,{skipPrefix:o.cwd}),x=[],C=async({srcDir:Be,dstDir:we,linkType:g,globalHardlinksStore:Ee,nmMode:Se,windowsLinkType:le,packageChecksum:ne})=>{let ee=(async()=>{try{g==="SOFT"?(await oe.mkdirPromise(V.dirname(we),{recursive:!0}),await gj(V.resolve(Be),we,le)):await g1t(we,Be,{baseFs:r,globalHardlinksStore:Ee,nmMode:Se,windowsLinkType:le,packageChecksum:ne})}catch(Ie){throw Ie.message=`While persisting ${Be} -> ${we} ${Ie.message}`,Ie}finally{ae.tick()}})().then(()=>x.splice(x.indexOf(ee),1));x.push(ee),x.length>l1e&&await Promise.race(x)},R=async(Be,we,g)=>{let Ee=(async()=>{let Se=async(le,ne,ee)=>{try{ee.innerLoop||await oe.mkdirPromise(ne,{recursive:!0});let Ie=await oe.readdirPromise(le,{withFileTypes:!0});for(let Fe of Ie){if(!ee.innerLoop&&Fe.name===BQ)continue;let At=V.join(le,Fe.name),H=V.join(ne,Fe.name);Fe.isDirectory()?(Fe.name!==Si||ee&&ee.innerLoop)&&(await oe.mkdirPromise(H,{recursive:!0}),await Se(At,H,{...ee,innerLoop:!0})):me.value==="hardlinks-local"||me.value==="hardlinks-global"?await oe.linkPromise(At,H):await oe.copyFilePromise(At,H,A1e.default.constants.COPYFILE_FICLONE)}}catch(Ie){throw ee.innerLoop||(Ie.message=`While cloning ${le} -> ${ne} ${Ie.message}`),Ie}finally{ee.innerLoop||ae.tick()}};await Se(Be,we,g)})().then(()=>x.splice(x.indexOf(Ee),1));x.push(Ee),x.length>l1e&&await Promise.race(x)},L=async(Be,we,g)=>{if(g)for(let[Ee,Se]of we.children){let le=g.children.get(Ee);await L(V.join(Be,Ee),Se,le)}else{we.children.has(Si)&&await WC(V.join(Be,Si),{contentsOnly:!1});let Ee=V.basename(Be)===Si&&v.has(V.join(V.dirname(Be),V.sep));await WC(Be,{contentsOnly:Be===A,allowSymlink:Ee})}};for(let[Be,we]of p){let g=v.get(Be);for(let[Ee,Se]of we.children){if(Ee===".")continue;let le=g&&g.children.get(Ee),ne=V.join(Be,Ee);await L(ne,Se,le)}}let U=async(Be,we,g)=>{if(g){c1e(we.locator,g.locator)||await WC(Be,{contentsOnly:we.linkType==="HARD"});for(let[Ee,Se]of we.children){let le=g.children.get(Ee);await U(V.join(Be,Ee),Se,le)}}else{we.children.has(Si)&&await WC(V.join(Be,Si),{contentsOnly:!0});let Ee=V.basename(Be)===Si&&v.has(V.join(V.dirname(Be),V.sep));await WC(Be,{contentsOnly:we.linkType==="HARD",allowSymlink:Ee})}};for(let[Be,we]of v){let g=p.get(Be);for(let[Ee,Se]of we.children){if(Ee===".")continue;let le=g&&g.children.get(Ee);await U(V.join(Be,Ee),Se,le)}}let J=new Map,te=[];for(let[Be,we]of E)for(let g of we){let{locationRoot:Ee,segments:Se}=vQ(g,{skipPrefix:o.cwd}),le=v.get(Ee),ne=Ee;if(le){for(let ee of Se)if(ne=V.join(ne,ee),le=le.children.get(ee),!le)break;if(le){let ee=c1e(le.locator,Be),Ie=e.get(le.locator),Fe=Ie.target,At=ne,H=Ie.linkType;if(ee)J.has(Fe)||J.set(Fe,At);else if(Fe!==At){let at=W.parseLocator(le.locator);W.isVirtualLocator(at)&&(at=W.devirtualizeLocator(at)),te.push({srcDir:Fe,dstDir:At,linkType:H,realLocatorHash:at.locatorHash})}}}}for(let[Be,{locations:we}]of e.entries())for(let g of we){let{locationRoot:Ee,segments:Se}=vQ(g,{skipPrefix:o.cwd}),le=p.get(Ee),ne=v.get(Ee),ee=Ee,Ie=e.get(Be),Fe=W.parseLocator(Be);W.isVirtualLocator(Fe)&&(Fe=W.devirtualizeLocator(Fe));let At=Fe.locatorHash,H=Ie.target,at=g;if(H===at)continue;let Re=Ie.linkType;for(let ke of Se)ne=ne.children.get(ke);if(!le)te.push({srcDir:H,dstDir:at,linkType:Re,realLocatorHash:At});else for(let ke of Se)if(ee=V.join(ee,ke),le=le.children.get(ke),!le){te.push({srcDir:H,dstDir:at,linkType:Re,realLocatorHash:At});break}}let ae=Xs.progressViaCounter(te.length),fe=a.reportProgress(ae),ce=o.configuration.get("nmMode"),me={value:ce},he=o.configuration.get("winLinkType");try{let Be=me.value==="hardlinks-global"?`${dj(o.configuration)}/v1`:null;if(Be&&!await oe.existsPromise(Be)){await oe.mkdirpPromise(Be);for(let g=0;g<256;g++)await oe.mkdirPromise(V.join(Be,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!J.has(g.srcDir))&&(J.set(g.srcDir,g.dstDir),await C({...g,globalHardlinksStore:Be,nmMode:me,windowsLinkType:he,packageChecksum:u.get(g.realLocatorHash)||null}));await Promise.all(x),x.length=0;for(let g of te){let Ee=J.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==Ee&&await R(Ee,g.dstDir,{nmMode:me})}await Promise.all(x),await oe.mkdirPromise(A,{recursive:!0});let we=await m1t(e,v,o.cwd,{loadManifest:n});await E1t(h,we,o.cwd,he),await p1t(o,e,we,me,{installChangedByUser:I}),ce=="hardlinks-global"&&me.value=="hardlinks-local"&&a.reportWarningOnce(74,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{fe.stop()}}async function E1t(t,e,r,o){for(let a of t.keys()){if(V.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);if(!e.has(a)){let n=V.join(a,Si,BQ);await oe.removePromise(n)}}for(let[a,n]of e){if(V.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let u=V.join(a,Si,BQ),A=t.get(a)||new Map;await oe.mkdirPromise(u,{recursive:!0});for(let p of A.keys())n.has(p)||(await oe.removePromise(V.join(u,p)),process.platform==="win32"&&await oe.removePromise(V.join(u,`${p}.cmd`)));for(let[p,h]of n){let E=A.get(p),I=V.join(u,p);E!==h&&(process.platform==="win32"?await(0,u1e.default)(ue.fromPortablePath(h),ue.fromPortablePath(I),{createPwshFile:!1}):(await oe.removePromise(I),await gj(h,I,o),V.contains(r,await oe.realpathPromise(h))!==null&&await oe.chmodPromise(h,493)))}}}Ye();St();nA();var cv=class extends P0{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new mj(r)}},mj=class extends mm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let o=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),a=zIe(r,this.opts.project.cwd,o),{tree:n,errors:u}=zB(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:I,text:v}of u)this.opts.report.reportError(I,v);return}let A=new Map;r.fallbackPool=A;let p=(I,v)=>{let x=W.parseLocator(v.locator),C=W.stringifyIdent(x);C===I?A.set(I,x.reference):A.set(I,[C,x.reference])},h=V.join(this.opts.project.cwd,dr.nodeModules),E=n.get(h);if(!(typeof E>"u")){if("target"in E)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let I of E.dirList){let v=V.join(h,I),x=n.get(v);if(typeof x>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in x)p(I,x);else for(let C of x.dirList){let R=V.join(v,C),L=n.get(R);if(typeof L>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in L)p(`${I}/${C}`,L);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var C1t={hooks:{cleanGlobalArtifacts:async t=>{let e=dj(t);await oe.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevents packages to be hoisted past specific levels",type:"STRING",values:["workspaces","dependencies","none"],default:"none"},nmMode:{description:"Defines in which measure Yarn must use hardlinks and symlinks when generated `node_modules` directories.",type:"STRING",values:["classic","hardlinks-local","hardlinks-global"],default:"classic"},nmSelfReferences:{description:"Defines whether the linker should generate self-referencing symlinks for workspaces.",type:"BOOLEAN",default:!0}},linkers:[lv,cv]},w1t=C1t;var dG={};Vt(dG,{NpmHttpFetcher:()=>fv,NpmRemapResolver:()=>pv,NpmSemverFetcher:()=>dl,NpmSemverResolver:()=>hv,NpmTagResolver:()=>gv,default:()=>Lvt,npmConfigUtils:()=>Zn,npmHttpUtils:()=>Zr,npmPublishUtils:()=>ow});Ye();var D1e=$e(zn());var Wn="npm:";var Zr={};Vt(Zr,{AuthType:()=>I1e,customPackageError:()=>ym,del:()=>R1t,get:()=>Em,getIdentUrl:()=>DQ,getPackageMetadata:()=>JC,handleInvalidAuthenticationError:()=>k0,post:()=>Q1t,put:()=>F1t});Ye();Ye();St();var wj=$e(f2()),C1e=$e(D_()),w1e=$e(zn());var Zn={};Vt(Zn,{RegistryType:()=>y1e,getAuditRegistry:()=>I1t,getAuthConfiguration:()=>Cj,getDefaultRegistry:()=>uv,getPublishRegistry:()=>B1t,getRegistryConfiguration:()=>E1e,getScopeConfiguration:()=>Ej,getScopeRegistry:()=>KC,normalizeRegistry:()=>oc});var y1e=(o=>(o.AUDIT_REGISTRY="npmAuditRegistry",o.FETCH_REGISTRY="npmRegistryServer",o.PUBLISH_REGISTRY="npmPublishRegistry",o))(y1e||{});function oc(t){return t.replace(/\/$/,"")}function I1t({configuration:t}){return uv({configuration:t,type:"npmAuditRegistry"})}function B1t(t,{configuration:e}){return t.publishConfig?.registry?oc(t.publishConfig.registry):t.name?KC(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):uv({configuration:e,type:"npmPublishRegistry"})}function KC(t,{configuration:e,type:r="npmRegistryServer"}){let o=Ej(t,{configuration:e});if(o===null)return uv({configuration:e,type:r});let a=o.get(r);return a===null?uv({configuration:e,type:r}):oc(a)}function uv({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return oc(r!==null?r:t.get("npmRegistryServer"))}function E1e(t,{configuration:e}){let r=e.get("npmRegistries"),o=oc(t),a=r.get(o);if(typeof a<"u")return a;let n=r.get(o.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}function Ej(t,{configuration:e}){if(t===null)return null;let o=e.get("npmScopes").get(t);return o||null}function Cj(t,{configuration:e,ident:r}){let o=r&&Ej(r.scope,{configuration:e});return o?.get("npmAuthIdent")||o?.get("npmAuthToken")?o:E1e(t,{configuration:e})||e}var I1e=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(I1e||{});async function k0(t,{attemptedAs:e,registry:r,headers:o,configuration:a}){if(PQ(t))throw new zt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new zt(41,`Invalid authentication (${typeof e!="string"?`as ${await N1t(r,o,{configuration:a})}`:`attempted as ${e}`})`)}function ym(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${de.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function DQ(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var B1e=new Map,v1t=new Map;async function D1t(t){return await _e.getFactoryWithDefault(B1e,t,async()=>{let e=null;try{e=await oe.readJsonPromise(t)}catch{}return e})}async function S1t(t,e,{configuration:r,cached:o,registry:a,headers:n,version:u,...A}){return await _e.getFactoryWithDefault(v1t,t,async()=>await Em(DQ(e),{...A,customErrorMessage:ym,configuration:r,registry:a,ident:e,headers:{...n,["If-None-Match"]:o?.etag,["If-Modified-Since"]:o?.lastModified},wrapNetworkRequest:async p=>async()=>{let h=await p();if(h.statusCode===304){if(o===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...h,body:o.metadata}}let E=P1t(JSON.parse(h.body.toString())),I={metadata:E,etag:h.headers.etag,lastModified:h.headers["last-modified"]};return B1e.set(t,Promise.resolve(I)),Promise.resolve().then(async()=>{let v=`${t}-${process.pid}.tmp`;await oe.mkdirPromise(V.dirname(v),{recursive:!0}),await oe.writeJsonPromise(v,I,{compact:!0}),await oe.renamePromise(v,t)}).catch(()=>{}),{...h,body:E}}}))}async function JC(t,{cache:e,project:r,registry:o,headers:a,version:n,...u}){let{configuration:A}=r;o=Av(A,{ident:t,registry:o});let p=x1t(A,o),h=V.join(p,`${W.slugifyIdent(t)}.json`),E=null;if(!r.lockfileNeedsRefresh&&(E=await D1t(h),E)){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(A.get("enableOfflineMode")){let I=structuredClone(E.metadata),v=new Set;if(e){for(let C of Object.keys(I.versions)){let R=W.makeLocator(t,`npm:${C}`),L=e.getLocatorMirrorPath(R);(!L||!oe.existsSync(L))&&(delete I.versions[C],v.add(C))}let x=I["dist-tags"].latest;if(v.has(x)){let C=Object.keys(E.metadata.versions).sort(w1e.default.compare),R=C.indexOf(x);for(;v.has(C[R])&&R>=0;)R-=1;R>=0?I["dist-tags"].latest=C[R]:delete I["dist-tags"].latest}}return I}}return await S1t(h,t,{...u,configuration:A,cached:E,registry:o,headers:a,version:n})}var v1e=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function P1t(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,C1e.default)(r,v1e)]))}}var b1t=wn.makeHash(...v1e).slice(0,6);function x1t(t,e){let r=k1t(t),o=new URL(e);return V.join(r,b1t,o.hostname)}function k1t(t){return V.join(t.get("globalFolder"),"metadata/npm")}async function Em(t,{configuration:e,headers:r,ident:o,authType:a,registry:n,...u}){n=Av(e,{ident:o,registry:n}),o&&o.scope&&typeof a>"u"&&(a=1);let A=await SQ(n,{authType:a,configuration:e,ident:o});A&&(r={...r,authorization:A});try{return await nn.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...u})}catch(p){throw await k0(p,{registry:n,configuration:e,headers:r}),p}}async function Q1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await SQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await nn.post(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!PQ(I)||p)throw await k0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Ij(I,{configuration:o});let v={...a,...VC(p)};try{return await nn.post(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(x){throw await k0(x,{attemptedAs:r,registry:A,configuration:o,headers:a}),x}}}async function F1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await SQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await nn.put(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!PQ(I))throw await k0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Ij(I,{configuration:o});let v={...a,...VC(p)};try{return await nn.put(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(x){throw await k0(x,{attemptedAs:r,registry:A,configuration:o,headers:a}),x}}}async function R1t(t,{attemptedAs:e,configuration:r,headers:o,ident:a,authType:n=3,registry:u,otp:A,...p}){u=Av(r,{ident:a,registry:u});let h=await SQ(u,{authType:n,configuration:r,ident:a});h&&(o={...o,authorization:h}),A&&(o={...o,...VC(A)});try{return await nn.del(u+t,{configuration:r,headers:o,...p})}catch(E){if(!PQ(E)||A)throw await k0(E,{attemptedAs:e,registry:u,configuration:r,headers:o}),E;A=await Ij(E,{configuration:r});let I={...o,...VC(A)};try{return await nn.del(`${u}${t}`,{configuration:r,headers:I,...p})}catch(v){throw await k0(v,{attemptedAs:e,registry:u,configuration:r,headers:o}),v}}}function Av(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return KC(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return oc(r)}async function SQ(t,{authType:e=2,configuration:r,ident:o}){let a=Cj(t,{configuration:r,ident:o}),n=T1t(a,e);if(!n)return null;let u=await r.reduceHook(A=>A.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:o});if(u)return u;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let A=a.get("npmAuthIdent");return A.includes(":")?`Basic ${Buffer.from(A).toString("base64")}`:`Basic ${A}`}if(n&&e!==1)throw new zt(33,"No authentication configured for request");return null}function T1t(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function N1t(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await nn.get(new URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function Ij(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Nt.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,de.pretty(e,"$1",de.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&Ji.openUrl){let{openNow:u}=await(0,wj.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});u&&(await Ji.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(` +`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:o}=await(0,wj.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` +`),o}function PQ(t){if(t.originalError?.name!=="HTTPError")return!1;try{return(t.originalError?.response.headers["www-authenticate"].split(/,\s*/).map(r=>r.toLowerCase())).includes("otp")}catch{return!1}}function VC(t){return{["npm-otp"]:t}}var fv=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o,params:a}=W.parseRange(e.reference);return!(!D1e.default.valid(o)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let{params:o}=W.parseRange(e.reference);if(o===null||typeof o.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await Em(o.__archiveUrl,{customErrorMessage:ym,configuration:r.project.configuration,ident:e});return await Xi.convertToZip(a,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();var pv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!W.tryParseDescriptor(e.range.slice(Wn.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){let o=r.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return r.resolver.getResolutionDependencies(o,r)}async getCandidates(e,r,o){let a=o.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return await o.resolver.getCandidates(a,r,o)}async getSatisfying(e,r,o,a){let n=a.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return a.resolver.getSatisfying(n,r,o,a)}resolve(e,r){throw new Error("Unreachable")}};Ye();Ye();var S1e=$e(zn());var dl=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let o=new URL(e.reference);return!(!S1e.default.valid(o.pathname)||o.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o;try{o=await Em(dl.getLocatorUrl(e),{customErrorMessage:ym,configuration:r.project.configuration,ident:e})}catch{o=await Em(dl.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:ym,configuration:r.project.configuration,ident:e})}return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:o}){let a=KC(e.scope,{configuration:o}),n=dl.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),a=a.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===a+n||r===a+n.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=kr.clean(e.reference.slice(Wn.length));if(r===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");return`${DQ(e)}/-/${e.name}-${r}.tgz`}};Ye();Ye();Ye();var Bj=$e(zn());var bQ=W.makeIdent(null,"node-gyp"),L1t=/\b(node-gyp|prebuild-install)\b/,hv=class{supportsDescriptor(e,r){return e.range.startsWith(Wn)?!!kr.validRange(e.range.slice(Wn.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o}=W.parseRange(e.reference);return!!Bj.default.valid(o)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=kr.validRange(e.range.slice(Wn.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);let n=await JC(e,{cache:o.fetchOptions?.cache,project:o.project,version:Bj.default.valid(a.raw)?a.raw:void 0}),u=_e.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new kr.SemVer(h);if(a.test(E))return E}catch{}return _e.mapAndFilter.skip}),A=u.filter(h=>!n.versions[h.raw].deprecated),p=A.length>0?A:u;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=W.makeLocator(e,`${Wn}${h.raw}`),I=n.versions[h.raw].dist.tarball;return dl.isConventionalTarballUrl(E,I,{configuration:o.project.configuration})?E:W.bindLocator(E,{__archiveUrl:I})})}async getSatisfying(e,r,o,a){let n=kr.validRange(e.range.slice(Wn.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);return{locators:_e.mapAndFilter(o,p=>{if(p.identHash!==e.identHash)return _e.mapAndFilter.skip;let h=W.tryParseRange(p.reference,{requireProtocol:Wn});if(!h)return _e.mapAndFilter.skip;let E=new kr.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:_e.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:o}=W.parseRange(e.reference),a=kr.clean(o);if(a===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await JC(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new zt(16,`Registry failed to return reference "${a}"`);let u=new Ot;if(u.load(n.versions[a]),!u.dependencies.has(bQ.identHash)&&!u.peerDependencies.has(bQ.identHash)){for(let A of u.scripts.values())if(A.match(L1t)){u.dependencies.set(bQ.identHash,W.makeDescriptor(bQ,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:u.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(u.dependencies),peerDependencies:u.peerDependencies,dependenciesMeta:u.dependenciesMeta,peerDependenciesMeta:u.peerDependenciesMeta,bin:u.bin}}};Ye();Ye();var P1e=$e(zn());var gv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!FE.test(e.range.slice(Wn.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Wn.length),n=await JC(e,{cache:o.fetchOptions?.cache,project:o.project});if(!Object.hasOwn(n,"dist-tags"))throw new zt(15,'Registry returned invalid data - missing "dist-tags" field');let u=n["dist-tags"];if(!Object.hasOwn(u,a))throw new zt(16,`Registry failed to return tag "${a}"`);let A=u[a],p=W.makeLocator(e,`${Wn}${A}`),h=n.versions[A].dist.tarball;return dl.isConventionalTarballUrl(p,h,{configuration:o.project.configuration})?[p]:[W.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,o,a){let n=[];for(let u of o){if(u.identHash!==e.identHash)continue;let A=W.tryParseRange(u.reference,{requireProtocol:Wn});if(!(!A||!P1e.default.valid(A.selector))){if(A.params?.__archiveUrl){let p=W.makeRange({protocol:Wn,selector:A.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(W.makeDescriptor(e,p),r,a);if(u.reference!==h.reference)continue}n.push(u)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var ow={};Vt(ow,{getGitHead:()=>Tvt,getPublishAccess:()=>dBe,getReadmeContent:()=>mBe,makePublishBody:()=>Rvt});Ye();Ye();St();var AG={};Vt(AG,{PackCommand:()=>U0,default:()=>gvt,packUtils:()=>wA});Ye();Ye();Ye();St();qt();var wA={};Vt(wA,{genPackList:()=>XQ,genPackStream:()=>uG,genPackageManifest:()=>iBe,hasPackScripts:()=>lG,prepareForPack:()=>cG});Ye();St();var aG=$e(Zo()),rBe=$e(Z2e()),nBe=ve("zlib"),ivt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],svt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function lG(t){return!!(un.hasWorkspaceScript(t,"prepack")||un.hasWorkspaceScript(t,"postpack"))}async function cG(t,{report:e},r){await un.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let o=V.join(t.cwd,Ot.fileName);await oe.existsPromise(o)&&await t.manifest.loadFile(o,{baseFs:oe}),await r()}finally{await un.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function uG(t,e){typeof e>"u"&&(e=await XQ(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(V.normalize(n));for(let n of t.manifest.bin.values())r.add(V.normalize(n));let o=rBe.default.pack();process.nextTick(async()=>{for(let n of e){let u=V.normalize(n),A=V.resolve(t.cwd,u),p=V.join("package",u),h=await oe.lstatPromise(A),E={name:p,mtime:new Date(vi.SAFE_TIME*1e3)},I=r.has(u)?493:420,v,x,C=new Promise((L,U)=>{v=L,x=U}),R=L=>{L?x(L):v()};if(h.isFile()){let L;u==="package.json"?L=Buffer.from(JSON.stringify(await iBe(t),null,2)):L=await oe.readFilePromise(A),o.entry({...E,mode:I,type:"file"},L,R)}else h.isSymbolicLink()?o.entry({...E,mode:I,type:"symlink",linkname:await oe.readlinkPromise(A)},R):R(new Error(`Unsupported file type ${h.mode} for ${ue.fromPortablePath(u)}`));await C}o.finalize()});let a=(0,nBe.createGzip)();return o.pipe(a),a}async function iBe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function XQ(t){let e=t.project,r=e.configuration,o={accept:[],reject:[]};for(let I of svt)o.reject.push(I);for(let I of ivt)o.accept.push(I);o.reject.push(r.get("rcFilename"));let a=I=>{if(I===null||!I.startsWith(`${t.cwd}/`))return;let v=V.relative(t.cwd,I),x=V.resolve(Bt.root,v);o.reject.push(x)};a(V.resolve(e.cwd,dr.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(I=>I.populateYarnPaths,e,I=>{a(I)});for(let I of e.workspaces){let v=V.relative(t.cwd,I.cwd);v!==""&&!v.match(/^(\.\.)?\//)&&o.reject.push(`/${v}`)}let n={accept:[],reject:[]},u=t.manifest.publishConfig?.main??t.manifest.main,A=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;u!=null&&n.accept.push(V.resolve(Bt.root,u)),A!=null&&n.accept.push(V.resolve(Bt.root,A)),typeof p=="string"&&n.accept.push(V.resolve(Bt.root,p));for(let I of h.values())n.accept.push(V.resolve(Bt.root,I));if(p instanceof Map)for(let[I,v]of p.entries())n.accept.push(V.resolve(Bt.root,I)),typeof v=="string"&&n.accept.push(V.resolve(Bt.root,v));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let I of t.manifest.files)sBe(n.accept,I,{cwd:Bt.root})}return await ovt(t.cwd,{hasExplicitFileList:E,globalList:o,ignoreList:n})}async function ovt(t,{hasExplicitFileList:e,globalList:r,ignoreList:o}){let a=[],n=new _u(t),u=[[Bt.root,[o]]];for(;u.length>0;){let[A,p]=u.pop(),h=await n.lstatPromise(A);if(!eBe(A,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(A),I=!1,v=!1;if(!e||A!==Bt.root)for(let R of E)I=I||R===".gitignore",v=v||R===".npmignore";let x=v?await $2e(n,A,".npmignore"):I?await $2e(n,A,".gitignore"):null,C=x!==null?[x].concat(p):p;eBe(A,{globalList:r,ignoreLists:p})&&(C=[...p,{accept:[],reject:["**/*"]}]);for(let R of E)u.push([V.resolve(A,R),C])}else(h.isFile()||h.isSymbolicLink())&&a.push(V.relative(Bt.root,A))}return a.sort()}async function $2e(t,e,r){let o={accept:[],reject:[]},a=await t.readFilePromise(V.join(e,r),"utf8");for(let n of a.split(/\n/g))sBe(o.reject,n,{cwd:e});return o}function avt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=V.resolve(e,t)),r&&(t=`!${t}`),t}function sBe(t,e,{cwd:r}){let o=e.trim();o===""||o[0]==="#"||t.push(avt(o,{cwd:r}))}function eBe(t,{globalList:e,ignoreLists:r}){let o=zQ(t,e.accept);if(o!==0)return o===2;let a=zQ(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let u=zQ(t,n.accept);if(u!==0)return u===2;let A=zQ(t,n.reject);if(A!==0)return A===1}return!1}function zQ(t,e){let r=e,o=[];for(let a=0;a{await cG(a,{report:p},async()=>{p.reportJson({base:ue.fromPortablePath(a.cwd)});let h=await XQ(a);for(let E of h)p.reportInfo(null,ue.fromPortablePath(E)),p.reportJson({location:ue.fromPortablePath(E)});if(!this.dryRun){let E=await uG(a,h),I=oe.createWriteStream(u);E.pipe(I),await new Promise(v=>{I.on("finish",v)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${de.pretty(r,u,de.Type.PATH)}`),p.reportJson({output:ue.fromPortablePath(u)}))})).exitCode()}};U0.paths=[["pack"]],U0.usage=nt.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});function lvt(t,{workspace:e}){let r=t.replace("%s",cvt(e)).replace("%v",uvt(e));return ue.toPortablePath(r)}function cvt(t){return t.manifest.name!==null?W.slugifyIdent(t.manifest.name):"package"}function uvt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var Avt=["dependencies","devDependencies","peerDependencies"],fvt="workspace:",pvt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let o of Avt)for(let a of t.manifest.getForScope(o).values()){let n=r.tryWorkspaceByDescriptor(a),u=W.parseRange(a.range);if(u.protocol===fvt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new zt(21,`${W.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let A;W.areDescriptorsEqual(a,n.anchoredDescriptor)||u.selector==="*"?A=n.manifest.version??"0.0.0":u.selector==="~"||u.selector==="^"?A=`${u.selector}${n.manifest.version??"0.0.0"}`:A=u.selector;let p=o==="dependencies"?W.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":o;e[h][W.stringifyIdent(a)]=A}}},hvt={hooks:{beforeWorkspacePacking:pvt},commands:[U0]},gvt=hvt;var hBe=ve("crypto"),gBe=$e(pBe());async function Rvt(t,e,{access:r,tag:o,registry:a,gitHead:n}){let u=t.manifest.name,A=t.manifest.version,p=W.stringifyIdent(u),h=(0,hBe.createHash)("sha1").update(e).digest("hex"),E=gBe.default.fromData(e).toString(),I=r??dBe(t,u),v=await mBe(t),x=await wA.genPackageManifest(t),C=`${p}-${A}.tgz`,R=new URL(`${oc(a)}/${p}/-/${C}`);return{_id:p,_attachments:{[C]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:p,access:I,["dist-tags"]:{[o]:A},versions:{[A]:{...x,_id:`${p}@${A}`,name:p,version:A,gitHead:n,dist:{shasum:h,integrity:E,tarball:R.toString()}}},readme:v}}async function Tvt(t){try{let{stdout:e}=await Ur.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function dBe(t,e){let r=t.project.configuration;return t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?t.manifest.publishConfig.access:r.get("npmPublishAccess")!==null?r.get("npmPublishAccess"):e.scope?"restricted":"public"}async function mBe(t){let e=ue.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${W.stringifyIdent(r)} +`;try{a=await oe.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var gG={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"BOOLEAN",default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:"SECRET",default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:"SECRET",default:null}},yBe={npmAuditRegistry:{description:"Registry to query for audit reports",type:"STRING",default:null},npmPublishRegistry:{description:"Registry to push packages to",type:"STRING",default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"STRING",default:"https://registry.yarnpkg.com"}},Nvt={configuration:{...gG,...yBe,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...gG,...yBe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:oc,valueDefinition:{description:"",type:"SHAPE",properties:{...gG}}}},fetchers:[fv,dl],resolvers:[pv,hv,gv]},Lvt=Nvt;var DG={};Vt(DG,{NpmAuditCommand:()=>H0,NpmInfoCommand:()=>q0,NpmLoginCommand:()=>j0,NpmLogoutCommand:()=>G0,NpmPublishCommand:()=>Y0,NpmTagAddCommand:()=>K0,NpmTagListCommand:()=>W0,NpmTagRemoveCommand:()=>V0,NpmWhoamiCommand:()=>J0,default:()=>jvt,npmAuditTypes:()=>Rv,npmAuditUtils:()=>ZQ});Ye();Ye();qt();var wG=$e(Zo());Za();var Rv={};Vt(Rv,{Environment:()=>Qv,Severity:()=>Fv});var Qv=(o=>(o.All="all",o.Production="production",o.Development="development",o))(Qv||{}),Fv=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(Fv||{});var ZQ={};Vt(ZQ,{allSeverities:()=>aw,getPackages:()=>CG,getReportTree:()=>yG,getSeverityInclusions:()=>mG,getTopLevelDependencies:()=>EG});Ye();var EBe=$e(zn());var aw=["info","low","moderate","high","critical"];function mG(t){if(typeof t>"u")return new Set(aw);let e=aw.indexOf(t),r=aw.slice(e);return new Set(r)}function yG(t){let e={},r={children:e};for(let[o,a]of _e.sortMap(Object.entries(t),n=>n[0]))for(let n of _e.sortMap(a,u=>`${u.id}`))e[`${o}/${n.id}`]={value:de.tuple(de.Type.IDENT,W.parseIdent(o)),children:{ID:typeof n.id<"u"&&{label:"ID",value:de.tuple(de.Type.ID,n.id)},Issue:{label:"Issue",value:de.tuple(de.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:de.tuple(de.Type.URL,n.url)},Severity:{label:"Severity",value:de.tuple(de.Type.NO_HINT,n.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:de.tuple(de.Type.RANGE,n.vulnerable_versions)},["Tree Versions"]:{label:"Tree Versions",children:[...n.versions].sort(EBe.default.compare).map(u=>({value:de.tuple(de.Type.REFERENCE,u)}))},Dependents:{label:"Dependents",children:_e.sortMap(n.dependents,u=>W.stringifyLocator(u)).map(u=>({value:de.tuple(de.Type.LOCATOR,u)}))}}};return r}function EG(t,e,{all:r,environment:o}){let a=[],n=r?t.workspaces:[e],u=["all","production"].includes(o),A=["all","development"].includes(o);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!A:!u)||a.push({workspace:p,dependency:h});return a}function CG(t,e,{recursive:r}){let o=new Map,a=new Set,n=[],u=(A,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let E=t.storedPackages.get(h);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");if(W.ensureDevirtualizedLocator(E).reference.startsWith("npm:")&&E.version!==null){let v=W.stringifyIdent(E),x=_e.getMapWithDefault(o,v);_e.getArrayWithDefault(x,E.version).push(A)}if(r)for(let v of E.dependencies.values())n.push([E,v])};for(let{workspace:A,dependency:p}of e)n.push([A.anchoredLocator,p]);for(;n.length>0;){let[A,p]=n.shift();u(A,p)}return o}var H0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=ge.String("--environment","all",{description:"Which environments to cover",validator:Ks(Qv)});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.noDeprecations=ge.Boolean("--no-deprecations",!1,{description:"Don't warn about deprecated packages"});this.severity=ge.String("--severity","info",{description:"Minimal severity requested for packages to be displayed",validator:Ks(Fv)});this.excludes=ge.Array("--exclude",[],{description:"Array of glob patterns of packages to exclude from audit"});this.ignores=ge.Array("--ignore",[],{description:"Array of glob patterns of advisory ID's to ignore in the audit report"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=EG(o,a,{all:this.all,environment:this.environment}),u=CG(o,n,{recursive:this.recursive}),A=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[L,U]of u)A.some(J=>wG.default.isMatch(L,J))||(p[L]=[...U.keys()]);let h=Zn.getAuditRegistry({configuration:r}),E,I=await AA.start({configuration:r,stdout:this.context.stdout},async()=>{let L=Zr.post("/-/npm/v1/security/advisories/bulk",p,{authType:Zr.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([te,ae])=>{let fe=await Zr.getPackageMetadata(W.parseIdent(te),{project:o});return _e.mapAndFilter(ae,ce=>{let{deprecated:me}=fe.versions[ce];return me?[te,ce,me]:_e.mapAndFilter.skip})})),J=await L;for(let[te,ae,fe]of U.flat(1))Object.hasOwn(J,te)&&J[te].some(ce=>kr.satisfiesWithPrereleases(ae,ce.vulnerable_versions))||(J[te]??=[],J[te].push({id:`${te} (deprecation)`,title:fe.trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:ae}));E=J});if(I.hasErrors())return I.exitCode();let v=mG(this.severity),x=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),C=Object.create(null);for(let[L,U]of Object.entries(E)){let J=U.filter(te=>!wG.default.isMatch(`${te.id}`,x)&&v.has(te.severity));J.length>0&&(C[L]=J.map(te=>{let ae=u.get(L);if(typeof ae>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let fe=[...ae.keys()].filter(me=>kr.satisfiesWithPrereleases(me,te.vulnerable_versions)),ce=new Map;for(let me of fe)for(let he of ae.get(me))ce.set(he.locatorHash,he);return{...te,versions:fe,dependents:[...ce.values()]}}))}let R=Object.keys(C).length>0;return R?($s.emitTree(yG(C),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async L=>{L.reportInfo(1,"No audit suggestions")}),R?1:0)}};H0.paths=[["npm","audit"]],H0.usage=nt.Usage({description:"perform a vulnerability audit against the installed packages",details:` This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths). For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`. - Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${ow.map(r=>`\`${r}\``).join(", ")}. + Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${aw.map(r=>`\`${r}\``).join(", ")}. If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages. @@ -690,32 +690,32 @@ ${be.map(He=>`Not found: ${au(He)} If particular advisories are needed to be ignored, the \`--ignore\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \`npmAuditIgnoreAdvisories\` option. To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why package\` to get more information as to who depends on them. - `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"],["Exclude certain packages","yarn npm audit --exclude package1 --exclude package2"],["Ignore specific advisories","yarn npm audit --ignore 1234567 --ignore 7654321"]]});Ye();Ye();Pt();qt();var DG=$e(zn()),PG=Be("util"),H0=class extends ut{constructor(){super(...arguments);this.fields=ge.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],u=!1,A=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let E;if(h==="."){let le=o.topLevelWorkspace;if(!le.manifest.name)throw new it(`Missing ${de.pretty(r,"name",de.Type.CODE)} field in ${ue.fromPortablePath(K.join(le.cwd,dr.manifest))}`);E=W.makeDescriptor(le.manifest.name,"unknown")}else E=W.parseDescriptor(h);let I=on.getIdentUrl(E),v=SG(await on.get(I,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:on.customPackageError})),b=Object.keys(v.versions).sort(DG.default.compareLoose),T=v["dist-tags"].latest||b[b.length-1],L=kr.validRange(E.range);if(L){let le=DG.default.maxSatisfying(b,L);le!==null?T=le:(p.reportWarning(0,`Unmet range ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0)}else Object.hasOwn(v["dist-tags"],E.range)?T=v["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0);let U=v.versions[T],J={...v,...U,version:T,versions:b},te;if(a!==null){te={};for(let le of a){let pe=J[le];if(typeof pe<"u")te[le]=pe;else{p.reportWarning(1,`The ${de.pretty(r,le,de.Type.CODE)} field doesn't exist inside ${W.prettyIdent(r,E)}'s information`),u=!0;continue}}}else this.json||(delete J.dist,delete J.readme,delete J.users),te=J;p.reportJson(te),this.json||n.push(te)}});PG.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||u)&&this.context.stdout.write(` -`),this.context.stdout.write(`${(0,PG.inspect)(p,{depth:1/0,colors:!0,compact:!1})} -`);return A.exitCode()}};H0.paths=[["npm","info"]],H0.usage=nt.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command fetches information about a package from the npm registry and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react@16.12.0","yarn npm info react@16.12.0"],["Show all available information about react@next","yarn npm info react@next"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]});function SG(t){if(Array.isArray(t)){let e=[];for(let r of t)r=SG(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let o=SG(t[r]);o&&(e[r]=o)}return e}else return t||null}Ye();Ye();qt();var DBe=$e(A2()),j0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Login to the publish registry"});this.alwaysAuth=ge.Boolean("--always-auth",{description:"Set the npmAlwaysAuth configuration"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Nt.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=await _vt({configuration:r,registry:o,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),A=`/-/user/org.couchdb.user:${encodeURIComponent(u.name)}`,p=await on.put(A,u,{attemptedAs:u.name,configuration:r,registry:o,jsonResponse:!0,authType:on.AuthType.NO_AUTH});return await Uvt(o,p.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};j0.paths=[["npm","login"]],j0.usage=nt.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]});async function tF({scope:t,publish:e,configuration:r,cwd:o}){return t&&e?Zn.getScopeRegistry(t,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):t?Zn.getScopeRegistry(t,{configuration:r}):e?Zn.getPublishRegistry((await AC(r,o)).manifest,{configuration:r}):Zn.getDefaultRegistry({configuration:r})}async function Uvt(t,e,{alwaysAuth:r,scope:o}){let a=u=>A=>{let p=je.isIndexableObject(A)?A:{},h=p[u],E=je.isIndexableObject(h)?h:{};return{...p,[u]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=o?{npmScopes:a(o)}:{npmRegistries:a(t)};return await Ve.updateHomeConfiguration(n)}async function _vt({configuration:t,registry:e,report:r,stdin:o,stdout:a}){r.reportInfo(0,`Logging in to ${de.pretty(t,e,de.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let{username:u,password:A}=await(0,DBe.prompt)([{type:"input",name:"username",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a}]);return r.reportSeparator(),{name:u,password:A}}Ye();Ye();qt();var aw=new Set(["npmAuthIdent","npmAuthToken"]),q0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=ge.Boolean("-A,--all",!1,{description:"Logout of all registries"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=async()=>{let n=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),u=await Ve.find(this.context.cwd,this.context.plugins),A=W.makeIdent(this.scope??null,"pkg");return!Zn.getAuthConfiguration(n,{configuration:u,ident:A}).get("npmAuthToken")};return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await jvt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await PBe("npmScopes",this.scope),await o()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let u=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish});await PBe("npmRegistries",u),await o()?n.reportInfo(0,`Successfully logged out from ${u}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};q0.paths=[["npm","logout"]],q0.usage=nt.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]});function Hvt(t,e){let r=t[e];if(!je.isIndexableObject(r))return!1;let o=new Set(Object.keys(r));if([...aw].every(n=>!o.has(n)))return!1;for(let n of aw)o.delete(n);if(o.size===0)return t[e]=void 0,!0;let a={...r};for(let n of aw)delete a[n];return t[e]=a,!0}async function jvt(){let t=e=>{let r=!1,o=je.isIndexableObject(e)?{...e}:{};o.npmAuthToken&&(delete o.npmAuthToken,r=!0);for(let a of Object.keys(o))Hvt(o,a)&&(r=!0);if(Object.keys(o).length!==0)return r?o:e};return await Ve.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function PBe(t,e){return await Ve.updateHomeConfiguration({[t]:r=>{let o=je.isIndexableObject(r)?r:{};if(!Object.hasOwn(o,e))return r;let a=o[e],n=je.isIndexableObject(a)?a:{},u=new Set(Object.keys(n));if([...aw].every(p=>!u.has(p)))return r;for(let p of aw)u.delete(p);if(u.size===0)return Object.keys(o).length===1?void 0:{...o,[e]:void 0};let A={};for(let p of aw)A[p]=void 0;return{...o,[e]:{...n,...A}}}})}Ye();qt();var G0=class extends ut{constructor(){super(...arguments);this.access=ge.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=ge.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=ge.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=ge.String("--otp",{description:"The OTP token to use with the command"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);if(a.manifest.private)throw new it("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new it("Workspaces must have valid names and versions to be published on an external registry");await o.restoreInstallState();let n=a.manifest.name,u=a.manifest.version,A=Zn.getPublishRegistry(a.manifest,{configuration:r});return(await Nt.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let E=await on.get(on.getIdentUrl(n),{configuration:r,registry:A,ident:n,jsonResponse:!0});if(!Object.hasOwn(E,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(E.versions,u)){h.reportWarning(0,`Registry already knows about version ${u}; skipping.`);return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await un.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await CA.prepareForPack(a,{report:h},async()=>{let E=await CA.genPackList(a);for(let T of E)h.reportInfo(null,T);let I=await CA.genPackStream(a,E),v=await je.bufferStream(I),b=await sw.getGitHead(a.cwd),C=await sw.makePublishBody(a,v,{access:this.access,tag:this.tag,registry:A,gitHead:b});await on.put(on.getIdentUrl(n),C,{configuration:r,registry:A,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};G0.paths=[["npm","publish"]],G0.usage=nt.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]});Ye();qt();var SBe=$e(zn());Ye();Pt();qt();var Y0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String({required:!1})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n;if(typeof this.package<"u")n=W.parseIdent(this.package);else{if(!a)throw new rr(o.cwd,this.context.cwd);if(!a.manifest.name)throw new it(`Missing 'name' field in ${ue.fromPortablePath(K.join(a.cwd,dr.manifest))}`);n=a.manifest.name}let u=await Rv(n,r),p={children:je.sortMap(Object.entries(u),([h])=>h).map(([h,E])=>({value:de.tuple(de.Type.RESOLUTION,{descriptor:W.makeDescriptor(n,h),locator:W.makeLocator(n,E)})}))};return $s.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};Y0.paths=[["npm","tag","list"]],Y0.usage=nt.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` + `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"],["Exclude certain packages","yarn npm audit --exclude package1 --exclude package2"],["Ignore specific advisories","yarn npm audit --ignore 1234567 --ignore 7654321"]]});Ye();Ye();St();qt();var IG=$e(zn()),BG=ve("util"),q0=class extends ut{constructor(){super(...arguments);this.fields=ge.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],u=!1,A=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let E;if(h==="."){let ae=o.topLevelWorkspace;if(!ae.manifest.name)throw new it(`Missing ${de.pretty(r,"name",de.Type.CODE)} field in ${ue.fromPortablePath(V.join(ae.cwd,dr.manifest))}`);E=W.makeDescriptor(ae.manifest.name,"unknown")}else E=W.parseDescriptor(h);let I=Zr.getIdentUrl(E),v=vG(await Zr.get(I,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:Zr.customPackageError})),x=Object.keys(v.versions).sort(IG.default.compareLoose),R=v["dist-tags"].latest||x[x.length-1],L=kr.validRange(E.range);if(L){let ae=IG.default.maxSatisfying(x,L);ae!==null?R=ae:(p.reportWarning(0,`Unmet range ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0)}else Object.hasOwn(v["dist-tags"],E.range)?R=v["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0);let U=v.versions[R],J={...v,...U,version:R,versions:x},te;if(a!==null){te={};for(let ae of a){let fe=J[ae];if(typeof fe<"u")te[ae]=fe;else{p.reportWarning(1,`The ${de.pretty(r,ae,de.Type.CODE)} field doesn't exist inside ${W.prettyIdent(r,E)}'s information`),u=!0;continue}}}else this.json||(delete J.dist,delete J.readme,delete J.users),te=J;p.reportJson(te),this.json||n.push(te)}});BG.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||u)&&this.context.stdout.write(` +`),this.context.stdout.write(`${(0,BG.inspect)(p,{depth:1/0,colors:!0,compact:!1})} +`);return A.exitCode()}};q0.paths=[["npm","info"]],q0.usage=nt.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command fetches information about a package from the npm registry and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react@16.12.0","yarn npm info react@16.12.0"],["Show all available information about react@next","yarn npm info react@next"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]});function vG(t){if(Array.isArray(t)){let e=[];for(let r of t)r=vG(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let o=vG(t[r]);o&&(e[r]=o)}return e}else return t||null}Ye();Ye();qt();var CBe=$e(f2()),j0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Login to the publish registry"});this.alwaysAuth=ge.Boolean("--always-auth",{description:"Set the npmAlwaysAuth configuration"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Nt.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=await Uvt({configuration:r,registry:o,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),A=await Ovt(o,u,r);return await Mvt(o,A,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};j0.paths=[["npm","login"]],j0.usage=nt.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]});async function $Q({scope:t,publish:e,configuration:r,cwd:o}){return t&&e?Zn.getScopeRegistry(t,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):t?Zn.getScopeRegistry(t,{configuration:r}):e?Zn.getPublishRegistry((await fC(r,o)).manifest,{configuration:r}):Zn.getDefaultRegistry({configuration:r})}async function Ovt(t,e,r){let o=`/-/user/org.couchdb.user:${encodeURIComponent(e.name)}`,a={_id:`org.couchdb.user:${e.name}`,name:e.name,password:e.password,type:"user",roles:[],date:new Date().toISOString()},n={attemptedAs:e.name,configuration:r,registry:t,jsonResponse:!0,authType:Zr.AuthType.NO_AUTH};try{return(await Zr.put(o,a,n)).token}catch(E){if(!(E.originalError?.name==="HTTPError"&&E.originalError?.response.statusCode===409))throw E}let u={...n,authType:Zr.AuthType.NO_AUTH,headers:{authorization:`Basic ${Buffer.from(`${e.name}:${e.password}`).toString("base64")}`}},A=await Zr.get(o,u);for(let[E,I]of Object.entries(A))(!a[E]||E==="roles")&&(a[E]=I);let p=`${o}/-rev/${a._rev}`;return(await Zr.put(p,a,u)).token}async function Mvt(t,e,{alwaysAuth:r,scope:o}){let a=u=>A=>{let p=_e.isIndexableObject(A)?A:{},h=p[u],E=_e.isIndexableObject(h)?h:{};return{...p,[u]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=o?{npmScopes:a(o)}:{npmRegistries:a(t)};return await Ke.updateHomeConfiguration(n)}async function Uvt({configuration:t,registry:e,report:r,stdin:o,stdout:a}){r.reportInfo(0,`Logging in to ${de.pretty(t,e,de.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let u=await(0,CBe.prompt)([{type:"input",name:"name",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a}]);return r.reportSeparator(),u}Ye();Ye();qt();var lw=new Set(["npmAuthIdent","npmAuthToken"]),G0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=ge.Boolean("-A,--all",!1,{description:"Logout of all registries"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=async()=>{let n=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),u=await Ke.find(this.context.cwd,this.context.plugins),A=W.makeIdent(this.scope??null,"pkg");return!Zn.getAuthConfiguration(n,{configuration:u,ident:A}).get("npmAuthToken")};return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await Hvt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await wBe("npmScopes",this.scope),await o()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let u=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish});await wBe("npmRegistries",u),await o()?n.reportInfo(0,`Successfully logged out from ${u}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};G0.paths=[["npm","logout"]],G0.usage=nt.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]});function _vt(t,e){let r=t[e];if(!_e.isIndexableObject(r))return!1;let o=new Set(Object.keys(r));if([...lw].every(n=>!o.has(n)))return!1;for(let n of lw)o.delete(n);if(o.size===0)return t[e]=void 0,!0;let a={...r};for(let n of lw)delete a[n];return t[e]=a,!0}async function Hvt(){let t=e=>{let r=!1,o=_e.isIndexableObject(e)?{...e}:{};o.npmAuthToken&&(delete o.npmAuthToken,r=!0);for(let a of Object.keys(o))_vt(o,a)&&(r=!0);if(Object.keys(o).length!==0)return r?o:e};return await Ke.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function wBe(t,e){return await Ke.updateHomeConfiguration({[t]:r=>{let o=_e.isIndexableObject(r)?r:{};if(!Object.hasOwn(o,e))return r;let a=o[e],n=_e.isIndexableObject(a)?a:{},u=new Set(Object.keys(n));if([...lw].every(p=>!u.has(p)))return r;for(let p of lw)u.delete(p);if(u.size===0)return Object.keys(o).length===1?void 0:{...o,[e]:void 0};let A={};for(let p of lw)A[p]=void 0;return{...o,[e]:{...n,...A}}}})}Ye();qt();var Y0=class extends ut{constructor(){super(...arguments);this.access=ge.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=ge.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=ge.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=ge.String("--otp",{description:"The OTP token to use with the command"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);if(a.manifest.private)throw new it("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new it("Workspaces must have valid names and versions to be published on an external registry");await o.restoreInstallState();let n=a.manifest.name,u=a.manifest.version,A=Zn.getPublishRegistry(a.manifest,{configuration:r});return(await Nt.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let E=await Zr.get(Zr.getIdentUrl(n),{configuration:r,registry:A,ident:n,jsonResponse:!0});if(!Object.hasOwn(E,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(E.versions,u)){h.reportWarning(0,`Registry already knows about version ${u}; skipping.`);return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await un.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await wA.prepareForPack(a,{report:h},async()=>{let E=await wA.genPackList(a);for(let R of E)h.reportInfo(null,R);let I=await wA.genPackStream(a,E),v=await _e.bufferStream(I),x=await ow.getGitHead(a.cwd),C=await ow.makePublishBody(a,v,{access:this.access,tag:this.tag,registry:A,gitHead:x});await Zr.put(Zr.getIdentUrl(n),C,{configuration:r,registry:A,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};Y0.paths=[["npm","publish"]],Y0.usage=nt.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]});Ye();qt();var IBe=$e(zn());Ye();St();qt();var W0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String({required:!1})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n;if(typeof this.package<"u")n=W.parseIdent(this.package);else{if(!a)throw new rr(o.cwd,this.context.cwd);if(!a.manifest.name)throw new it(`Missing 'name' field in ${ue.fromPortablePath(V.join(a.cwd,dr.manifest))}`);n=a.manifest.name}let u=await Tv(n,r),p={children:_e.sortMap(Object.entries(u),([h])=>h).map(([h,E])=>({value:de.tuple(de.Type.RESOLUTION,{descriptor:W.makeDescriptor(n,h),locator:W.makeLocator(n,E)})}))};return $s.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};W0.paths=[["npm","tag","list"]],W0.usage=nt.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` This command will list all tags of a package from the npm registry. If the package is not specified, Yarn will default to the current workspace. - `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});async function Rv(t,e){let r=`/-/package${on.getIdentUrl(t)}/dist-tags`;return on.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:on.customPackageError})}var W0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseDescriptor(this.package,!0),u=n.range;if(!SBe.default.valid(u))throw new it(`The range ${de.pretty(r,n.range,de.Type.RANGE)} must be a valid semver version`);let A=Zn.getPublishRegistry(a.manifest,{configuration:r}),p=de.pretty(r,n,de.Type.IDENT),h=de.pretty(r,u,de.Type.RANGE),E=de.pretty(r,this.tag,de.Type.CODE);return(await Nt.start({configuration:r,stdout:this.context.stdout},async v=>{let b=await Rv(n,r);Object.hasOwn(b,this.tag)&&b[this.tag]===u&&v.reportWarning(0,`Tag ${E} is already set to version ${h}`);let C=`/-/package${on.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await on.put(C,u,{configuration:r,registry:A,ident:n,jsonRequest:!0,jsonResponse:!0}),v.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};W0.paths=[["npm","tag","add"]],W0.usage=nt.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` + `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});async function Tv(t,e){let r=`/-/package${Zr.getIdentUrl(t)}/dist-tags`;return Zr.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:Zr.customPackageError})}var K0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseDescriptor(this.package,!0),u=n.range;if(!IBe.default.valid(u))throw new it(`The range ${de.pretty(r,n.range,de.Type.RANGE)} must be a valid semver version`);let A=Zn.getPublishRegistry(a.manifest,{configuration:r}),p=de.pretty(r,n,de.Type.IDENT),h=de.pretty(r,u,de.Type.RANGE),E=de.pretty(r,this.tag,de.Type.CODE);return(await Nt.start({configuration:r,stdout:this.context.stdout},async v=>{let x=await Tv(n,r);Object.hasOwn(x,this.tag)&&x[this.tag]===u&&v.reportWarning(0,`Tag ${E} is already set to version ${h}`);let C=`/-/package${Zr.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Zr.put(C,u,{configuration:r,registry:A,ident:n,jsonRequest:!0,jsonResponse:!0}),v.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};K0.paths=[["npm","tag","add"]],K0.usage=nt.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten. - `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]});Ye();qt();var V0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){if(this.tag==="latest")throw new it("The 'latest' tag cannot be removed.");let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseIdent(this.package),u=Zn.getPublishRegistry(a.manifest,{configuration:r}),A=de.pretty(r,this.tag,de.Type.CODE),p=de.pretty(r,n,de.Type.IDENT),h=await Rv(n,r);if(!Object.hasOwn(h,this.tag))throw new it(`${A} is not a tag of package ${p}`);return(await Nt.start({configuration:r,stdout:this.context.stdout},async I=>{let v=`/-/package${on.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await on.del(v,{configuration:r,registry:u,ident:n,jsonResponse:!0}),I.reportInfo(0,`Tag ${A} removed from package ${p}`)})).exitCode()}};V0.paths=[["npm","tag","remove"]],V0.usage=nt.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` + `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]});Ye();qt();var V0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){if(this.tag==="latest")throw new it("The 'latest' tag cannot be removed.");let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseIdent(this.package),u=Zn.getPublishRegistry(a.manifest,{configuration:r}),A=de.pretty(r,this.tag,de.Type.CODE),p=de.pretty(r,n,de.Type.IDENT),h=await Tv(n,r);if(!Object.hasOwn(h,this.tag))throw new it(`${A} is not a tag of package ${p}`);return(await Nt.start({configuration:r,stdout:this.context.stdout},async I=>{let v=`/-/package${Zr.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Zr.del(v,{configuration:r,registry:u,ident:n,jsonResponse:!0}),I.reportInfo(0,`Tag ${A} removed from package ${p}`)})).exitCode()}};V0.paths=[["npm","tag","remove"]],V0.usage=nt.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` This command will remove a tag from a package from the npm registry. - `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});Ye();Ye();qt();var K0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Print username for the publish registry"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o;return this.scope&&this.publish?o=Zn.getScopeRegistry(this.scope,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):this.scope?o=Zn.getScopeRegistry(this.scope,{configuration:r}):this.publish?o=Zn.getPublishRegistry((await AC(r,this.context.cwd)).manifest,{configuration:r}):o=Zn.getDefaultRegistry({configuration:r}),(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u;try{u=await on.get("/-/whoami",{configuration:r,registry:o,authType:on.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?W.makeIdent(this.scope,""):void 0})}catch(A){if(A.response?.statusCode===401||A.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw A}n.reportInfo(0,u.username)})).exitCode()}};K0.paths=[["npm","whoami"]],K0.usage=nt.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var qvt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[_0,H0,j0,q0,G0,W0,Y0,V0,K0]},Gvt=qvt;var NG={};Kt(NG,{PatchCommand:()=>X0,PatchCommitCommand:()=>z0,PatchFetcher:()=>Uv,PatchResolver:()=>_v,default:()=>lDt,patchUtils:()=>Dm});Ye();Ye();Pt();nA();var Dm={};Kt(Dm,{applyPatchFile:()=>nF,diffFolders:()=>TG,ensureUnpatchedDescriptor:()=>bG,ensureUnpatchedLocator:()=>sF,extractPackageToDisk:()=>FG,extractPatchFlags:()=>RBe,isParentRequired:()=>QG,isPatchDescriptor:()=>iF,isPatchLocator:()=>J0,loadPatchFiles:()=>Ov,makeDescriptor:()=>oF,makeLocator:()=>kG,makePatchHash:()=>RG,parseDescriptor:()=>Lv,parseLocator:()=>Mv,parsePatchFile:()=>Nv,unpatchDescriptor:()=>sDt,unpatchLocator:()=>oDt});Ye();Pt();Ye();Pt();var Yvt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function lw(t){return K.relative(Bt.root,K.resolve(Bt.root,ue.toPortablePath(t)))}function Wvt(t){let e=t.trim().match(Yvt);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var Vvt=420,Kvt=493;var xBe=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),Jvt=t=>({header:Wvt(t),parts:[]}),zvt={["@"]:"header",["-"]:"deletion",["+"]:"insertion",[" "]:"context",["\\"]:"pragma",undefined:"context"};function Xvt(t){let e=[],r=xBe(),o="parsing header",a=null,n=null;function u(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function A(){u(),e.push(r),r=xBe()}for(let p=0;p0?"patch":"mode change",J=null;switch(U){case"rename":{if(!E||!I)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:o,fromPath:lw(E),toPath:lw(I)}),J=I}break;case"file deletion":{let te=a||C;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:o,hunk:L&&L[0]||null,path:lw(te),mode:rF(p),hash:v})}break;case"file creation":{let te=n||T;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:o,hunk:L&&L[0]||null,path:lw(te),mode:rF(h),hash:b})}break;case"patch":case"mode change":J=T||n;break;default:je.assertNever(U);break}J&&u&&A&&u!==A&&e.push({type:"mode change",semverExclusivity:o,path:lw(J),oldMode:rF(u),newMode:rF(A)}),J&&L&&L.length&&e.push({type:"patch",semverExclusivity:o,path:lw(J),hunks:L,beforeHash:v,afterHash:b})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function rF(t){let e=parseInt(t,8)&511;if(e!==Vvt&&e!==Kvt)throw new Error(`Unexpected file mode string: ${t}`);return e}function Nv(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),Zvt(Xvt(e))}function $vt(t){let e=0,r=0;for(let{type:o,lines:a}of t.parts)switch(o){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:je.assertNever(o);break}if(e!==t.header.original.length||r!==t.header.patched.length){let o=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${o(t.header.original.length)} ${o(t.header.patched.length)} @@, got @@ ${o(e)} ${o(r)} @@)`)}}Ye();Pt();var cw=class extends Error{constructor(r,o){super(`Cannot apply hunk #${r+1}`);this.hunk=o}};async function uw(t,e,r){let o=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,o.atime,o.mtime)}async function nF(t,{baseFs:e=new Rn,dryRun:r=!1,version:o=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&o!==null&&!kr.satisfiesWithPrereleases(o,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await uw(e,K.dirname(a.path),async()=>{await e.unlinkPromise(a.path)});break;case"rename":if(r){if(!e.existsSync(a.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${a.fromPath}`)}else await uw(e,K.dirname(a.fromPath),async()=>{await uw(e,K.dirname(a.toPath),async()=>{await uw(e,a.fromPath,async()=>(await e.movePromise(a.fromPath,a.toPath),a.toPath))})});break;case"file creation":if(r){if(e.existsSync(a.path))throw new Error(`Trying to create a file that already exists: ${a.path}`)}else{let n=a.hunk?a.hunk.parts[0].lines.join(` + `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});Ye();Ye();qt();var J0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Print username for the publish registry"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o;return this.scope&&this.publish?o=Zn.getScopeRegistry(this.scope,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):this.scope?o=Zn.getScopeRegistry(this.scope,{configuration:r}):this.publish?o=Zn.getPublishRegistry((await fC(r,this.context.cwd)).manifest,{configuration:r}):o=Zn.getDefaultRegistry({configuration:r}),(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u;try{u=await Zr.get("/-/whoami",{configuration:r,registry:o,authType:Zr.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?W.makeIdent(this.scope,""):void 0})}catch(A){if(A.response?.statusCode===401||A.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw A}n.reportInfo(0,u.username)})).exitCode()}};J0.paths=[["npm","whoami"]],J0.usage=nt.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var qvt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[H0,q0,j0,G0,Y0,K0,W0,V0,J0]},jvt=qvt;var FG={};Vt(FG,{PatchCommand:()=>Z0,PatchCommitCommand:()=>X0,PatchFetcher:()=>Uv,PatchResolver:()=>_v,default:()=>aDt,patchUtils:()=>Sm});Ye();Ye();St();nA();var Sm={};Vt(Sm,{applyPatchFile:()=>tF,diffFolders:()=>kG,ensureUnpatchedDescriptor:()=>SG,ensureUnpatchedLocator:()=>nF,extractPackageToDisk:()=>xG,extractPatchFlags:()=>xBe,isParentRequired:()=>bG,isPatchDescriptor:()=>rF,isPatchLocator:()=>z0,loadPatchFiles:()=>Mv,makeDescriptor:()=>iF,makeLocator:()=>PG,makePatchHash:()=>QG,parseDescriptor:()=>Lv,parseLocator:()=>Ov,parsePatchFile:()=>Nv,unpatchDescriptor:()=>iDt,unpatchLocator:()=>sDt});Ye();St();Ye();St();var Gvt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function cw(t){return V.relative(Bt.root,V.resolve(Bt.root,ue.toPortablePath(t)))}function Yvt(t){let e=t.trim().match(Gvt);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var Wvt=420,Kvt=493;var BBe=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),Vvt=t=>({header:Yvt(t),parts:[]}),Jvt={["@"]:"header",["-"]:"deletion",["+"]:"insertion",[" "]:"context",["\\"]:"pragma",undefined:"context"};function zvt(t){let e=[],r=BBe(),o="parsing header",a=null,n=null;function u(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function A(){u(),e.push(r),r=BBe()}for(let p=0;p0?"patch":"mode change",J=null;switch(U){case"rename":{if(!E||!I)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:o,fromPath:cw(E),toPath:cw(I)}),J=I}break;case"file deletion":{let te=a||C;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:o,hunk:L&&L[0]||null,path:cw(te),mode:eF(p),hash:v})}break;case"file creation":{let te=n||R;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:o,hunk:L&&L[0]||null,path:cw(te),mode:eF(h),hash:x})}break;case"patch":case"mode change":J=R||n;break;default:_e.assertNever(U);break}J&&u&&A&&u!==A&&e.push({type:"mode change",semverExclusivity:o,path:cw(J),oldMode:eF(u),newMode:eF(A)}),J&&L&&L.length&&e.push({type:"patch",semverExclusivity:o,path:cw(J),hunks:L,beforeHash:v,afterHash:x})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function eF(t){let e=parseInt(t,8)&511;if(e!==Wvt&&e!==Kvt)throw new Error(`Unexpected file mode string: ${t}`);return e}function Nv(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),Xvt(zvt(e))}function Zvt(t){let e=0,r=0;for(let{type:o,lines:a}of t.parts)switch(o){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:_e.assertNever(o);break}if(e!==t.header.original.length||r!==t.header.patched.length){let o=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${o(t.header.original.length)} ${o(t.header.patched.length)} @@, got @@ ${o(e)} ${o(r)} @@)`)}}Ye();St();var uw=class extends Error{constructor(r,o){super(`Cannot apply hunk #${r+1}`);this.hunk=o}};async function Aw(t,e,r){let o=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,o.atime,o.mtime)}async function tF(t,{baseFs:e=new Tn,dryRun:r=!1,version:o=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&o!==null&&!kr.satisfiesWithPrereleases(o,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await Aw(e,V.dirname(a.path),async()=>{await e.unlinkPromise(a.path)});break;case"rename":if(r){if(!e.existsSync(a.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${a.fromPath}`)}else await Aw(e,V.dirname(a.fromPath),async()=>{await Aw(e,V.dirname(a.toPath),async()=>{await Aw(e,a.fromPath,async()=>(await e.movePromise(a.fromPath,a.toPath),a.toPath))})});break;case"file creation":if(r){if(e.existsSync(a.path))throw new Error(`Trying to create a file that already exists: ${a.path}`)}else{let n=a.hunk?a.hunk.parts[0].lines.join(` `)+(a.hunk.parts[0].noNewlineAtEndOfFile?"":` -`):"";await e.mkdirpPromise(K.dirname(a.path),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,vi.SAFE_TIME,vi.SAFE_TIME)}break;case"patch":await uw(e,a.path,async()=>{await rDt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let u=(await e.statPromise(a.path)).mode;if(bBe(a.newMode)!==bBe(u))continue;await uw(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:je.assertNever(a);break}}function bBe(t){return(t&64)>0}function kBe(t){return t.replace(/\s+$/,"")}function tDt(t,e){return kBe(t)===kBe(e)}async function rDt({hunks:t,path:e},{baseFs:r,dryRun:o=!1}){let a=await r.statSync(e).mode,u=(await r.readFileSync(e,"utf8")).split(/\n/),A=[],p=0,h=0;for(let I of t){let v=Math.max(h,I.header.patched.start+p),b=Math.max(0,v-h),C=Math.max(0,u.length-v-I.header.original.length),T=Math.max(b,C),L=0,U=0,J=null;for(;L<=T;){if(L<=b&&(U=v-L,J=QBe(I,u,U),J!==null)){L=-L;break}if(L<=C&&(U=v+L,J=QBe(I,u,U),J!==null))break;L+=1}if(J===null)throw new cw(t.indexOf(I),I);A.push(J),p+=L,h=U+I.header.original.length}if(o)return;let E=0;for(let I of A)for(let v of I)switch(v.type){case"splice":{let b=v.index+E;u.splice(b,v.numToDelete,...v.linesToInsert),E+=v.linesToInsert.length-v.numToDelete}break;case"pop":u.pop();break;case"push":u.push(v.line);break;default:je.assertNever(v);break}await r.writeFilePromise(e,u.join(` -`),{mode:a})}function QBe(t,e,r){let o=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let u=e[r];if(u==null||!tDt(u,n))return null;r+=1}a.type==="deletion"&&(o.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&o.push({type:"push",line:""}))}break;case"insertion":o.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&o.push({type:"pop"});break;default:je.assertNever(a.type);break}return o}var iDt=/^builtin<([^>]+)>$/;function Aw(t,e){let{protocol:r,source:o,selector:a,params:n}=W.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(o===null)throw new Error("Patch locators must explicitly define their source");let u=a?a.split(/&/).map(E=>ue.toPortablePath(E)):[],A=n&&typeof n.locator=="string"?W.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(o);return{parentLocator:A,sourceItem:h,patchPaths:u,sourceVersion:p}}function iF(t){return t.range.startsWith("patch:")}function J0(t){return t.reference.startsWith("patch:")}function Lv(t){let{sourceItem:e,...r}=Aw(t.range,W.parseDescriptor);return{...r,sourceDescriptor:e}}function Mv(t){let{sourceItem:e,...r}=Aw(t.reference,W.parseLocator);return{...r,sourceLocator:e}}function sDt(t){let{sourceItem:e}=Aw(t.range,W.parseDescriptor);return e}function oDt(t){let{sourceItem:e}=Aw(t.reference,W.parseLocator);return e}function bG(t){if(!iF(t))return t;let{sourceItem:e}=Aw(t.range,W.parseDescriptor);return e}function sF(t){if(!J0(t))return t;let{sourceItem:e}=Aw(t.reference,W.parseLocator);return e}function FBe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:o,patchHash:a},n){let u=t!==null?{locator:W.stringifyLocator(t)}:{},A=typeof o<"u"?{version:o}:{},p=typeof a<"u"?{hash:a}:{};return W.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...A,...p,...u}})}function oF(t,{parentLocator:e,sourceDescriptor:r,patchPaths:o}){return W.makeDescriptor(t,FBe({parentLocator:e,sourceItem:r,patchPaths:o},W.stringifyDescriptor))}function kG(t,{parentLocator:e,sourcePackage:r,patchPaths:o,patchHash:a}){return W.makeLocator(t,FBe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:o,patchHash:a},W.stringifyLocator))}function TBe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:o},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let u=a.match(iDt);return u!==null?o(u[1]):a.startsWith("~/")?r(a.slice(2)):K.isAbsolute(a)?t(a):e(a)}function RBe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function QG(t){return TBe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function Ov(t,e,r){let o=t!==null?await r.fetcher.fetch(t,r):null,a=o&&o.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,o.localPath)}:o;o&&o!==a&&o.releaseFs&&o.releaseFs();let n=await je.releaseAfterUseAsync(async()=>await Promise.all(e.map(async u=>{let A=RBe(u),p=await TBe({onAbsolute:async h=>await oe.readFilePromise(h,"utf8"),onRelative:async h=>{if(a===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await a.packageFs.readFilePromise(K.join(a.prefixPath,h),"utf8")},onProject:async h=>await oe.readFilePromise(K.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},u);return{...A,source:p}})));for(let u of n)typeof u.source=="string"&&(u.source=u.source.replace(/\r\n?/g,` -`));return n}async function FG(t,{cache:e,project:r}){let o=r.storedPackages.get(t.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=sF(t),n=r.storedChecksums,u=new Qi,A=await oe.mktempPromise(),p=K.join(A,"source"),h=K.join(A,"user"),E=K.join(A,".yarn-patch.json"),I=r.configuration.makeFetcher(),v=[];try{let b,C;if(t.locatorHash===a.locatorHash){let T=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u});v.push(()=>T.releaseFs?.()),b=T,C=T}else b=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>b.releaseFs?.()),C=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>C.releaseFs?.());await Promise.all([oe.copyPromise(p,b.prefixPath,{baseFs:b.packageFs}),oe.copyPromise(h,C.prefixPath,{baseFs:C.packageFs}),oe.writeJsonPromise(E,{locator:W.stringifyLocator(t),version:o.version})])}finally{for(let b of v)b()}return oe.detachTemp(A),h}async function TG(t,e){let r=ue.fromPortablePath(t).replace(/\\/g,"/"),o=ue.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Ur.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,o],{cwd:ue.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""}});if(n.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. +`):"";await e.mkdirpPromise(V.dirname(a.path),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,vi.SAFE_TIME,vi.SAFE_TIME)}break;case"patch":await Aw(e,a.path,async()=>{await tDt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let u=(await e.statPromise(a.path)).mode;if(vBe(a.newMode)!==vBe(u))continue;await Aw(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:_e.assertNever(a);break}}function vBe(t){return(t&64)>0}function DBe(t){return t.replace(/\s+$/,"")}function eDt(t,e){return DBe(t)===DBe(e)}async function tDt({hunks:t,path:e},{baseFs:r,dryRun:o=!1}){let a=await r.statSync(e).mode,u=(await r.readFileSync(e,"utf8")).split(/\n/),A=[],p=0,h=0;for(let I of t){let v=Math.max(h,I.header.patched.start+p),x=Math.max(0,v-h),C=Math.max(0,u.length-v-I.header.original.length),R=Math.max(x,C),L=0,U=0,J=null;for(;L<=R;){if(L<=x&&(U=v-L,J=SBe(I,u,U),J!==null)){L=-L;break}if(L<=C&&(U=v+L,J=SBe(I,u,U),J!==null))break;L+=1}if(J===null)throw new uw(t.indexOf(I),I);A.push(J),p+=L,h=U+I.header.original.length}if(o)return;let E=0;for(let I of A)for(let v of I)switch(v.type){case"splice":{let x=v.index+E;u.splice(x,v.numToDelete,...v.linesToInsert),E+=v.linesToInsert.length-v.numToDelete}break;case"pop":u.pop();break;case"push":u.push(v.line);break;default:_e.assertNever(v);break}await r.writeFilePromise(e,u.join(` +`),{mode:a})}function SBe(t,e,r){let o=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let u=e[r];if(u==null||!eDt(u,n))return null;r+=1}a.type==="deletion"&&(o.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&o.push({type:"push",line:""}))}break;case"insertion":o.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&o.push({type:"pop"});break;default:_e.assertNever(a.type);break}return o}var nDt=/^builtin<([^>]+)>$/;function fw(t,e){let{protocol:r,source:o,selector:a,params:n}=W.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(o===null)throw new Error("Patch locators must explicitly define their source");let u=a?a.split(/&/).map(E=>ue.toPortablePath(E)):[],A=n&&typeof n.locator=="string"?W.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(o);return{parentLocator:A,sourceItem:h,patchPaths:u,sourceVersion:p}}function rF(t){return t.range.startsWith("patch:")}function z0(t){return t.reference.startsWith("patch:")}function Lv(t){let{sourceItem:e,...r}=fw(t.range,W.parseDescriptor);return{...r,sourceDescriptor:e}}function Ov(t){let{sourceItem:e,...r}=fw(t.reference,W.parseLocator);return{...r,sourceLocator:e}}function iDt(t){let{sourceItem:e}=fw(t.range,W.parseDescriptor);return e}function sDt(t){let{sourceItem:e}=fw(t.reference,W.parseLocator);return e}function SG(t){if(!rF(t))return t;let{sourceItem:e}=fw(t.range,W.parseDescriptor);return e}function nF(t){if(!z0(t))return t;let{sourceItem:e}=fw(t.reference,W.parseLocator);return e}function PBe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:o,patchHash:a},n){let u=t!==null?{locator:W.stringifyLocator(t)}:{},A=typeof o<"u"?{version:o}:{},p=typeof a<"u"?{hash:a}:{};return W.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...A,...p,...u}})}function iF(t,{parentLocator:e,sourceDescriptor:r,patchPaths:o}){return W.makeDescriptor(t,PBe({parentLocator:e,sourceItem:r,patchPaths:o},W.stringifyDescriptor))}function PG(t,{parentLocator:e,sourcePackage:r,patchPaths:o,patchHash:a}){return W.makeLocator(t,PBe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:o,patchHash:a},W.stringifyLocator))}function bBe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:o},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let u=a.match(nDt);return u!==null?o(u[1]):a.startsWith("~/")?r(a.slice(2)):V.isAbsolute(a)?t(a):e(a)}function xBe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function bG(t){return bBe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function Mv(t,e,r){let o=t!==null?await r.fetcher.fetch(t,r):null,a=o&&o.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,o.localPath)}:o;o&&o!==a&&o.releaseFs&&o.releaseFs();let n=await _e.releaseAfterUseAsync(async()=>await Promise.all(e.map(async u=>{let A=xBe(u),p=await bBe({onAbsolute:async h=>await oe.readFilePromise(h,"utf8"),onRelative:async h=>{if(a===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await a.packageFs.readFilePromise(V.join(a.prefixPath,h),"utf8")},onProject:async h=>await oe.readFilePromise(V.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},u);return{...A,source:p}})));for(let u of n)typeof u.source=="string"&&(u.source=u.source.replace(/\r\n?/g,` +`));return n}async function xG(t,{cache:e,project:r}){let o=r.storedPackages.get(t.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=nF(t),n=r.storedChecksums,u=new Qi,A=await oe.mktempPromise(),p=V.join(A,"source"),h=V.join(A,"user"),E=V.join(A,".yarn-patch.json"),I=r.configuration.makeFetcher(),v=[];try{let x,C;if(t.locatorHash===a.locatorHash){let R=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u});v.push(()=>R.releaseFs?.()),x=R,C=R}else x=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>x.releaseFs?.()),C=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>C.releaseFs?.());await Promise.all([oe.copyPromise(p,x.prefixPath,{baseFs:x.packageFs}),oe.copyPromise(h,C.prefixPath,{baseFs:C.packageFs}),oe.writeJsonPromise(E,{locator:W.stringifyLocator(t),version:o.version})])}finally{for(let x of v)x()}return oe.detachTemp(A),h}async function kG(t,e){let r=ue.fromPortablePath(t).replace(/\\/g,"/"),o=ue.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Ur.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,o],{cwd:ue.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""}});if(n.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. The following error was reported by 'git': -${n}`);let u=r.startsWith("/")?A=>A.slice(1):A=>A;return a.replace(new RegExp(`(a|b)(${je.escapeRegExp(`/${u(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${je.escapeRegExp(`/${u(o)}/`)}`,"g"),"$1/").replace(new RegExp(je.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(je.escapeRegExp(`${o}/`),"g"),"")}function RG(t,e){let r=[];for(let{source:o}of t){if(o===null)continue;let a=Nv(o);for(let n of a){let{semverExclusivity:u,...A}=n;u!==null&&e!==null&&!kr.satisfiesWithPrereleases(e,u)||r.push(JSON.stringify(A))}}return wn.makeHash(`${3}`,...r).slice(0,6)}Ye();function NBe(t,{configuration:e,report:r}){for(let o of t.parts)for(let a of o.lines)switch(o.type){case"context":r.reportInfo(null,` ${de.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${de.pretty(e,a,de.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${de.pretty(e,a,de.Type.ADDED)}`);break;default:je.assertNever(o.type)}}var Uv=class{supports(e,r){return!!J0(e)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async patchPackage(e,r){let{parentLocator:o,sourceLocator:a,sourceVersion:n,patchPaths:u}=Mv(e),A=await Ov(o,u,r),p=await oe.mktempPromise(),h=K.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),I=W.getIdentVendorPath(e),v=new zi(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await je.releaseAfterUseAsync(async()=>{await v.copyPromise(I,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),v.saveAndClose();for(let{source:b,optional:C}of A){if(b===null)continue;let T=new zi(h,{level:r.project.configuration.get("compressionLevel")}),L=new gn(K.resolve(Bt.root,I),{baseFs:T});try{await nF(Nv(b),{baseFs:L,version:n})}catch(U){if(!(U instanceof cw))throw U;let J=r.project.configuration.get("enableInlineHunks"),te=!J&&!C?" (set enableInlineHunks for details)":"",le=`${W.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,pe=Ae=>{!J||NBe(U.hunk,{configuration:r.project.configuration,report:Ae})};if(T.discardAndClose(),C){r.report.reportWarningOnce(66,le,{reportExtra:pe});continue}else throw new zt(66,le,pe)}T.saveAndClose()}return new zi(h,{level:r.project.configuration.get("compressionLevel")})}};Ye();var _v=class{supportsDescriptor(e,r){return!!iF(e)}supportsLocator(e,r){return!!J0(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){let{patchPaths:a}=Lv(e);return a.every(n=>!QG(n))?e:W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:o}=Lv(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(o)}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=Lv(e),u=await Ov(a,n,o.fetchOptions),A=r.sourceDescriptor;if(typeof A>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=RG(u,A.version);return[kG(e,{parentLocator:a,sourcePackage:A,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:o}=Mv(e);return{...await r.resolver.resolve(o,r),...e}}};Ye();Pt();qt();var z0=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=K.resolve(this.context.cwd,ue.toPortablePath(this.patchFolder)),u=K.join(n,"../source"),A=K.join(n,"../.yarn-patch.json");if(!oe.existsSync(u))throw new it("The argument folder didn't get created by 'yarn patch'");let p=await TG(u,n),h=await oe.readJsonPromise(A),E=W.parseLocator(h.locator,!0);if(!o.storedPackages.has(E.locatorHash))throw new it("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let I=r.get("patchFolder"),v=K.join(I,`${W.slugifyLocator(E)}.patch`);await oe.mkdirPromise(I,{recursive:!0}),await oe.writeFilePromise(v,p);let b=[],C=new Map;for(let T of o.storedPackages.values()){if(W.isVirtualLocator(T))continue;let L=T.dependencies.get(E.identHash);if(!L)continue;let U=W.ensureDevirtualizedDescriptor(L),J=bG(U),te=o.storedResolutions.get(J.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!o.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let pe=o.tryWorkspaceByLocator(T);if(pe)b.push(pe);else{let Ae=o.originalPackages.get(T.locatorHash);if(!Ae)throw new Error("Assertion failed: Expected the original package to have been registered");let ye=Ae.dependencies.get(L.identHash);if(!ye)throw new Error("Assertion failed: Expected the original dependency to have been registered");C.set(ye.descriptorHash,ye)}}for(let T of b)for(let L of Mt.hardDependencies){let U=T.manifest[L].get(E.identHash);if(!U)continue;let J=oF(U,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[K.join(dr.home,K.relative(o.cwd,v))]});T.manifest[L].set(U.identHash,J)}for(let T of C.values()){let L=oF(T,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[K.join(dr.home,K.relative(o.cwd,v))]});o.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:W.stringifyIdent(L),description:T.range}},reference:L.range})}await o.persist()}};z0.paths=[["patch-commit"]],z0.usage=nt.Usage({description:"generate a patch out of a directory",details:"\n By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\n\n Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "});Ye();Pt();qt();var X0=class extends ut{constructor(){super(...arguments);this.update=ge.Boolean("-u,--update",!1,{description:"Reapply local patches that already apply to this packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=W.parseLocator(this.package);if(u.reference==="unknown"){let A=je.mapAndFilter([...o.storedPackages.values()],p=>p.identHash!==u.identHash?je.mapAndFilter.skip:W.isVirtualLocator(p)?je.mapAndFilter.skip:J0(p)!==this.update?je.mapAndFilter.skip:p);if(A.length===0)throw new it("No package found in the project for the given locator");if(A.length>1)throw new it(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): +${n}`);let u=r.startsWith("/")?A=>A.slice(1):A=>A;return a.replace(new RegExp(`(a|b)(${_e.escapeRegExp(`/${u(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${_e.escapeRegExp(`/${u(o)}/`)}`,"g"),"$1/").replace(new RegExp(_e.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(_e.escapeRegExp(`${o}/`),"g"),"")}function QG(t,e){let r=[];for(let{source:o}of t){if(o===null)continue;let a=Nv(o);for(let n of a){let{semverExclusivity:u,...A}=n;u!==null&&e!==null&&!kr.satisfiesWithPrereleases(e,u)||r.push(JSON.stringify(A))}}return wn.makeHash(`${3}`,...r).slice(0,6)}Ye();function kBe(t,{configuration:e,report:r}){for(let o of t.parts)for(let a of o.lines)switch(o.type){case"context":r.reportInfo(null,` ${de.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${de.pretty(e,a,de.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${de.pretty(e,a,de.Type.ADDED)}`);break;default:_e.assertNever(o.type)}}var Uv=class{supports(e,r){return!!z0(e)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async patchPackage(e,r){let{parentLocator:o,sourceLocator:a,sourceVersion:n,patchPaths:u}=Ov(e),A=await Mv(o,u,r),p=await oe.mktempPromise(),h=V.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),I=W.getIdentVendorPath(e),v=new zi(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await _e.releaseAfterUseAsync(async()=>{await v.copyPromise(I,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),v.saveAndClose();for(let{source:x,optional:C}of A){if(x===null)continue;let R=new zi(h,{level:r.project.configuration.get("compressionLevel")}),L=new gn(V.resolve(Bt.root,I),{baseFs:R});try{await tF(Nv(x),{baseFs:L,version:n})}catch(U){if(!(U instanceof uw))throw U;let J=r.project.configuration.get("enableInlineHunks"),te=!J&&!C?" (set enableInlineHunks for details)":"",ae=`${W.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,fe=ce=>{!J||kBe(U.hunk,{configuration:r.project.configuration,report:ce})};if(R.discardAndClose(),C){r.report.reportWarningOnce(66,ae,{reportExtra:fe});continue}else throw new zt(66,ae,fe)}R.saveAndClose()}return new zi(h,{level:r.project.configuration.get("compressionLevel")})}};Ye();var _v=class{supportsDescriptor(e,r){return!!rF(e)}supportsLocator(e,r){return!!z0(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){let{patchPaths:a}=Lv(e);return a.every(n=>!bG(n))?e:W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:o}=Lv(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(o)}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=Lv(e),u=await Mv(a,n,o.fetchOptions),A=r.sourceDescriptor;if(typeof A>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=QG(u,A.version);return[PG(e,{parentLocator:a,sourcePackage:A,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:o}=Ov(e);return{...await r.resolver.resolve(o,r),...e}}};Ye();St();qt();var X0=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=V.resolve(this.context.cwd,ue.toPortablePath(this.patchFolder)),u=V.join(n,"../source"),A=V.join(n,"../.yarn-patch.json");if(!oe.existsSync(u))throw new it("The argument folder didn't get created by 'yarn patch'");let p=await kG(u,n),h=await oe.readJsonPromise(A),E=W.parseLocator(h.locator,!0);if(!o.storedPackages.has(E.locatorHash))throw new it("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let I=r.get("patchFolder"),v=V.join(I,`${W.slugifyLocator(E)}.patch`);await oe.mkdirPromise(I,{recursive:!0}),await oe.writeFilePromise(v,p);let x=[],C=new Map;for(let R of o.storedPackages.values()){if(W.isVirtualLocator(R))continue;let L=R.dependencies.get(E.identHash);if(!L)continue;let U=W.ensureDevirtualizedDescriptor(L),J=SG(U),te=o.storedResolutions.get(J.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!o.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let fe=o.tryWorkspaceByLocator(R);if(fe)x.push(fe);else{let ce=o.originalPackages.get(R.locatorHash);if(!ce)throw new Error("Assertion failed: Expected the original package to have been registered");let me=ce.dependencies.get(L.identHash);if(!me)throw new Error("Assertion failed: Expected the original dependency to have been registered");C.set(me.descriptorHash,me)}}for(let R of x)for(let L of Ot.hardDependencies){let U=R.manifest[L].get(E.identHash);if(!U)continue;let J=iF(U,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[V.join(dr.home,V.relative(o.cwd,v))]});R.manifest[L].set(U.identHash,J)}for(let R of C.values()){let L=iF(R,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[V.join(dr.home,V.relative(o.cwd,v))]});o.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:W.stringifyIdent(L),description:R.range}},reference:L.range})}await o.persist()}};X0.paths=[["patch-commit"]],X0.usage=nt.Usage({description:"generate a patch out of a directory",details:"\n By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\n\n Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "});Ye();St();qt();var Z0=class extends ut{constructor(){super(...arguments);this.update=ge.Boolean("-u,--update",!1,{description:"Reapply local patches that already apply to this packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=W.parseLocator(this.package);if(u.reference==="unknown"){let A=_e.mapAndFilter([...o.storedPackages.values()],p=>p.identHash!==u.identHash?_e.mapAndFilter.skip:W.isVirtualLocator(p)?_e.mapAndFilter.skip:z0(p)!==this.update?_e.mapAndFilter.skip:p);if(A.length===0)throw new it("No package found in the project for the given locator");if(A.length>1)throw new it(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): ${A.map(p=>` -- ${W.prettyLocator(r,p)}`).join("")}`);u=A[0]}if(!o.storedPackages.has(u.locatorHash))throw new it("No package found in the project for the given locator");await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=sF(u),h=await FG(u,{cache:n,project:o});A.reportJson({locator:W.stringifyLocator(p),path:ue.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";A.reportInfo(0,`Package ${W.prettyLocator(r,p)} got extracted with success${E}!`),A.reportInfo(0,`You can now edit the following folder: ${de.pretty(r,ue.fromPortablePath(h),"magenta")}`),A.reportInfo(0,`Once you are done run ${de.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${ue.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};X0.paths=[["patch"]],X0.usage=nt.Usage({description:"prepare a package for patching",details:"\n This command will cause a package to be extracted in a temporary directory intended to be editable at will.\n\n Once you're done with your changes, run `yarn patch-commit -s path` (with `path` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\n\n Calling the command when you already have a patch won't import it by default (in other words, the default behavior is to reset existing patches). However, adding the `-u,--update` flag will import any current patch.\n "});var aDt={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:"BOOLEAN",default:!1},patchFolder:{description:"Folder where the patch files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/patches"}},commands:[z0,X0],fetchers:[Uv],resolvers:[_v]},lDt=aDt;var OG={};Kt(OG,{PnpmLinker:()=>Hv,default:()=>pDt});Ye();Pt();qt();var Hv=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let u=e,A=e;do{A=u,u=K.dirname(A);let p=a.locatorByPath.get(A);if(p)return p}while(u!==A);return null}makeInstaller(e){return new LG(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},LG=class{constructor(e){this.opts=e;this.asyncActions=new je.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=PD(oe,{indexPath:K.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,o){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,o);case"HARD":return this.installPackageHard(e,r,o)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,o){let a=K.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?K.join(a,dr.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,o){let a=cDt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,W.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await oe.mkdirPromise(n,{recursive:!0}),await oe.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let A=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e,p={manifest:await Mt.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Mt,misc:{hasBindingGyp:mA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(A,e.version),E=mA.extractBuildRequest(e,p,h,{configuration:this.opts.project.configuration});return{packageLocation:n,buildRequest:E}}async attachInternalDependencies(e,r){if(this.opts.project.configuration.get("nodeLinker")!=="pnpm"||!LBe(e,{project:this.opts.project}))return;let o=this.customData.pathsByLocator.get(e.locatorHash);if(typeof o>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(e)})`);let{dependenciesLocation:a}=o;!a||this.asyncActions.reduce(e.locatorHash,async n=>{await oe.mkdirPromise(a,{recursive:!0});let u=await uDt(a),A=new Map(u),p=[n],h=(I,v)=>{let b=v;LBe(v,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),b=W.devirtualizeLocator(v));let C=this.customData.pathsByLocator.get(b.locatorHash);if(typeof C>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(v)})`);let T=W.stringifyIdent(I),L=K.join(a,T),U=K.relative(K.dirname(L),C.packageLocation),J=A.get(T);A.delete(T),p.push(Promise.resolve().then(async()=>{if(J){if(J.isSymbolicLink()&&await oe.readlinkPromise(L)===U)return;await oe.removePromise(L)}await oe.mkdirpPromise(K.dirname(L)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await oe.symlinkPromise(C.packageLocation,L,"junction"):await oe.symlinkPromise(U,L)}))},E=!1;for(let[I,v]of r)I.identHash===e.identHash&&(E=!0),h(I,v);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(W.convertLocatorToDescriptor(e),e),p.push(ADt(a,A)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=OBe(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await oe.removePromise(e);else{let r;try{r=new Set(await oe.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:o}of this.customData.pathsByLocator.values()){if(!o)continue;let a=K.contains(e,o);if(a===null)continue;let[n]=a.split(K.sep);r.delete(n)}await Promise.all([...r].map(async o=>{await oe.removePromise(K.join(e,o))}))}return await this.asyncActions.wait(),await MG(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await MG(MBe(this.opts.project)),{customData:this.customData}}};function MBe(t){return K.join(t.cwd,dr.nodeModules)}function OBe(t){return K.join(MBe(t),".store")}function cDt(t,{project:e}){let r=W.slugifyLocator(t),o=OBe(e),a=K.join(o,r,"package"),n=K.join(o,r,dr.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function LBe(t,{project:e}){return!W.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function uDt(t){let e=new Map,r=[];try{r=await oe.readdirPromise(t,{withFileTypes:!0})}catch(o){if(o.code!=="ENOENT")throw o}try{for(let o of r)if(!o.name.startsWith("."))if(o.name.startsWith("@")){let a=await oe.readdirPromise(K.join(t,o.name),{withFileTypes:!0});if(a.length===0)e.set(o.name,o);else for(let n of a)e.set(`${o.name}/${n.name}`,n)}else e.set(o.name,o)}catch(o){if(o.code!=="ENOENT")throw o}return e}async function ADt(t,e){let r=[],o=new Set;for(let a of e.keys()){r.push(oe.removePromise(K.join(t,a)));let n=W.tryParseIdent(a)?.scope;n&&o.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...o].map(a=>MG(K.join(t,a)))))}async function MG(t){try{await oe.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var fDt={linkers:[Hv]},pDt=fDt;var YG={};Kt(YG,{StageCommand:()=>Z0,default:()=>vDt,stageUtils:()=>lF});Ye();Pt();qt();Ye();Pt();var lF={};Kt(lF,{ActionType:()=>UG,checkConsensus:()=>aF,expandDirectory:()=>jG,findConsensus:()=>qG,findVcsRoot:()=>_G,genCommitMessage:()=>GG,getCommitPrefix:()=>UBe,isYarnFile:()=>HG});Pt();var UG=(n=>(n[n.CREATE=0]="CREATE",n[n.DELETE=1]="DELETE",n[n.ADD=2]="ADD",n[n.REMOVE=3]="REMOVE",n[n.MODIFY=4]="MODIFY",n))(UG||{});async function _G(t,{marker:e}){do if(!oe.existsSync(K.join(t,e)))t=K.dirname(t);else return t;while(t!=="/");return null}function HG(t,{roots:e,names:r}){if(r.has(K.basename(t)))return!0;do if(!e.has(t))t=K.dirname(t);else return!0;while(t!=="/");return!1}function jG(t){let e=[],r=[t];for(;r.length>0;){let o=r.pop(),a=oe.readdirSync(o);for(let n of a){let u=K.resolve(o,n);oe.lstatSync(u).isDirectory()?r.push(u):e.push(u)}}return e}function aF(t,e){let r=0,o=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:o+=1);return r>=o}function qG(t){let e=aF(t,/^(\w\(\w+\):\s*)?\w+s/),r=aF(t,/^(\w\(\w+\):\s*)?[A-Z]/),o=aF(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:o}}function UBe(t){return t.useComponent?"chore(yarn): ":""}var hDt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function GG(t,e){let r=UBe(t),o=[],a=e.slice().sort((n,u)=>n[0]-u[0]);for(;a.length>0;){let[n,u]=a.shift(),A=hDt.get(n);t.useUpperCase&&o.length===0&&(A=`${A[0].toUpperCase()}${A.slice(1)}`),t.useThirdPerson&&(A+="s");let p=[u];for(;a.length>0&&a[0][0]===n;){let[,E]=a.shift();p.push(E)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),o.push(`${A} ${h}`)}return`${r}${o.join(", ")}`}var gDt="Commit generated via `yarn stage`",dDt=11;async function _Be(t){let{code:e,stdout:r}=await Ur.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function mDt(t,e){let r=[],o=e.filter(h=>K.basename(h.path)==="package.json");for(let{action:h,path:E}of o){let I=K.relative(t,E);if(h===4){let v=await _Be(t),{stdout:b}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Mt.fromText(b),T=await Mt.fromFile(E),L=new Map([...T.dependencies,...T.devDependencies]),U=new Map([...C.dependencies,...C.devDependencies]);for(let[J,te]of U){let le=W.stringifyIdent(te),pe=L.get(J);pe?pe.range!==te.range&&r.push([4,`${le} to ${pe.range}`]):r.push([3,le])}for(let[J,te]of L)U.has(J)||r.push([2,W.stringifyIdent(te)])}else if(h===0){let v=await Mt.fromFile(E);v.name?r.push([0,W.stringifyIdent(v.name)]):r.push([0,"a package"])}else if(h===1){let v=await _Be(t),{stdout:b}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Mt.fromText(b);C.name?r.push([1,W.stringifyIdent(C.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Ur.execvp("git",["log",`-${dDt}`,"--pretty=format:%s"],{cwd:t}),u=a===0?n.split(/\n/g).filter(h=>h!==""):[],A=qG(u);return GG(A,r)}var yDt={[0]:[" A ","?? "],[4]:[" M "],[1]:[" D "]},EDt={[0]:["A "],[4]:["M "],[1]:["D "]},HBe={async findRoot(t){return await _G(t,{marker:".git"})},async filterChanges(t,e,r,o){let{stdout:a}=await Ur.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),u=o?.staged?EDt:yDt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=K.resolve(t,p.slice(3));if(!o?.staged&&h==="?? "&&p.endsWith("/"))return jG(E).map(I=>({action:0,path:I}));{let v=[0,4,1].find(b=>u[b].includes(h));return v!==void 0?[{action:v,path:E}]:[]}})).filter(p=>HG(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await mDt(t,e)},async makeStage(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let o=e.map(a=>ue.fromPortablePath(a.path));await Ur.execvp("git",["add","-N","--",...o],{cwd:t,strict:!0}),await Ur.execvp("git",["commit","-m",`${r} +- ${W.prettyLocator(r,p)}`).join("")}`);u=A[0]}if(!o.storedPackages.has(u.locatorHash))throw new it("No package found in the project for the given locator");await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=nF(u),h=await xG(u,{cache:n,project:o});A.reportJson({locator:W.stringifyLocator(p),path:ue.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";A.reportInfo(0,`Package ${W.prettyLocator(r,p)} got extracted with success${E}!`),A.reportInfo(0,`You can now edit the following folder: ${de.pretty(r,ue.fromPortablePath(h),"magenta")}`),A.reportInfo(0,`Once you are done run ${de.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${ue.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};Z0.paths=[["patch"]],Z0.usage=nt.Usage({description:"prepare a package for patching",details:"\n This command will cause a package to be extracted in a temporary directory intended to be editable at will.\n\n Once you're done with your changes, run `yarn patch-commit -s path` (with `path` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\n\n Calling the command when you already have a patch won't import it by default (in other words, the default behavior is to reset existing patches). However, adding the `-u,--update` flag will import any current patch.\n "});var oDt={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:"BOOLEAN",default:!1},patchFolder:{description:"Folder where the patch files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/patches"}},commands:[X0,Z0],fetchers:[Uv],resolvers:[_v]},aDt=oDt;var NG={};Vt(NG,{PnpmLinker:()=>Hv,default:()=>fDt});Ye();St();qt();var Hv=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let u=e,A=e;do{A=u,u=V.dirname(A);let p=a.locatorByPath.get(A);if(p)return p}while(u!==A);return null}makeInstaller(e){return new RG(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},RG=class{constructor(e){this.opts=e;this.asyncActions=new _e.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=SD(oe,{indexPath:V.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,o){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,o);case"HARD":return this.installPackageHard(e,r,o)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,o){let a=V.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?V.join(a,dr.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,o){let a=lDt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,W.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await oe.mkdirPromise(n,{recursive:!0}),await oe.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let A=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e,p={manifest:await Ot.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Ot,misc:{hasBindingGyp:yA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(A,e.version),E=yA.extractBuildRequest(e,p,h,{configuration:this.opts.project.configuration});return{packageLocation:n,buildRequest:E}}async attachInternalDependencies(e,r){if(this.opts.project.configuration.get("nodeLinker")!=="pnpm"||!QBe(e,{project:this.opts.project}))return;let o=this.customData.pathsByLocator.get(e.locatorHash);if(typeof o>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(e)})`);let{dependenciesLocation:a}=o;!a||this.asyncActions.reduce(e.locatorHash,async n=>{await oe.mkdirPromise(a,{recursive:!0});let u=await cDt(a),A=new Map(u),p=[n],h=(I,v)=>{let x=v;QBe(v,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),x=W.devirtualizeLocator(v));let C=this.customData.pathsByLocator.get(x.locatorHash);if(typeof C>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(v)})`);let R=W.stringifyIdent(I),L=V.join(a,R),U=V.relative(V.dirname(L),C.packageLocation),J=A.get(R);A.delete(R),p.push(Promise.resolve().then(async()=>{if(J){if(J.isSymbolicLink()&&await oe.readlinkPromise(L)===U)return;await oe.removePromise(L)}await oe.mkdirpPromise(V.dirname(L)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await oe.symlinkPromise(C.packageLocation,L,"junction"):await oe.symlinkPromise(U,L)}))},E=!1;for(let[I,v]of r)I.identHash===e.identHash&&(E=!0),h(I,v);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(W.convertLocatorToDescriptor(e),e),p.push(uDt(a,A)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=RBe(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await oe.removePromise(e);else{let r;try{r=new Set(await oe.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:o}of this.customData.pathsByLocator.values()){if(!o)continue;let a=V.contains(e,o);if(a===null)continue;let[n]=a.split(V.sep);r.delete(n)}await Promise.all([...r].map(async o=>{await oe.removePromise(V.join(e,o))}))}return await this.asyncActions.wait(),await TG(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await TG(FBe(this.opts.project)),{customData:this.customData}}};function FBe(t){return V.join(t.cwd,dr.nodeModules)}function RBe(t){return V.join(FBe(t),".store")}function lDt(t,{project:e}){let r=W.slugifyLocator(t),o=RBe(e),a=V.join(o,r,"package"),n=V.join(o,r,dr.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function QBe(t,{project:e}){return!W.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function cDt(t){let e=new Map,r=[];try{r=await oe.readdirPromise(t,{withFileTypes:!0})}catch(o){if(o.code!=="ENOENT")throw o}try{for(let o of r)if(!o.name.startsWith("."))if(o.name.startsWith("@")){let a=await oe.readdirPromise(V.join(t,o.name),{withFileTypes:!0});if(a.length===0)e.set(o.name,o);else for(let n of a)e.set(`${o.name}/${n.name}`,n)}else e.set(o.name,o)}catch(o){if(o.code!=="ENOENT")throw o}return e}async function uDt(t,e){let r=[],o=new Set;for(let a of e.keys()){r.push(oe.removePromise(V.join(t,a)));let n=W.tryParseIdent(a)?.scope;n&&o.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...o].map(a=>TG(V.join(t,a)))))}async function TG(t){try{await oe.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var ADt={linkers:[Hv]},fDt=ADt;var qG={};Vt(qG,{StageCommand:()=>$0,default:()=>BDt,stageUtils:()=>oF});Ye();St();qt();Ye();St();var oF={};Vt(oF,{ActionType:()=>LG,checkConsensus:()=>sF,expandDirectory:()=>UG,findConsensus:()=>_G,findVcsRoot:()=>OG,genCommitMessage:()=>HG,getCommitPrefix:()=>TBe,isYarnFile:()=>MG});St();var LG=(n=>(n[n.CREATE=0]="CREATE",n[n.DELETE=1]="DELETE",n[n.ADD=2]="ADD",n[n.REMOVE=3]="REMOVE",n[n.MODIFY=4]="MODIFY",n))(LG||{});async function OG(t,{marker:e}){do if(!oe.existsSync(V.join(t,e)))t=V.dirname(t);else return t;while(t!=="/");return null}function MG(t,{roots:e,names:r}){if(r.has(V.basename(t)))return!0;do if(!e.has(t))t=V.dirname(t);else return!0;while(t!=="/");return!1}function UG(t){let e=[],r=[t];for(;r.length>0;){let o=r.pop(),a=oe.readdirSync(o);for(let n of a){let u=V.resolve(o,n);oe.lstatSync(u).isDirectory()?r.push(u):e.push(u)}}return e}function sF(t,e){let r=0,o=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:o+=1);return r>=o}function _G(t){let e=sF(t,/^(\w\(\w+\):\s*)?\w+s/),r=sF(t,/^(\w\(\w+\):\s*)?[A-Z]/),o=sF(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:o}}function TBe(t){return t.useComponent?"chore(yarn): ":""}var pDt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function HG(t,e){let r=TBe(t),o=[],a=e.slice().sort((n,u)=>n[0]-u[0]);for(;a.length>0;){let[n,u]=a.shift(),A=pDt.get(n);t.useUpperCase&&o.length===0&&(A=`${A[0].toUpperCase()}${A.slice(1)}`),t.useThirdPerson&&(A+="s");let p=[u];for(;a.length>0&&a[0][0]===n;){let[,E]=a.shift();p.push(E)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),o.push(`${A} ${h}`)}return`${r}${o.join(", ")}`}var hDt="Commit generated via `yarn stage`",gDt=11;async function NBe(t){let{code:e,stdout:r}=await Ur.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function dDt(t,e){let r=[],o=e.filter(h=>V.basename(h.path)==="package.json");for(let{action:h,path:E}of o){let I=V.relative(t,E);if(h===4){let v=await NBe(t),{stdout:x}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Ot.fromText(x),R=await Ot.fromFile(E),L=new Map([...R.dependencies,...R.devDependencies]),U=new Map([...C.dependencies,...C.devDependencies]);for(let[J,te]of U){let ae=W.stringifyIdent(te),fe=L.get(J);fe?fe.range!==te.range&&r.push([4,`${ae} to ${fe.range}`]):r.push([3,ae])}for(let[J,te]of L)U.has(J)||r.push([2,W.stringifyIdent(te)])}else if(h===0){let v=await Ot.fromFile(E);v.name?r.push([0,W.stringifyIdent(v.name)]):r.push([0,"a package"])}else if(h===1){let v=await NBe(t),{stdout:x}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Ot.fromText(x);C.name?r.push([1,W.stringifyIdent(C.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Ur.execvp("git",["log",`-${gDt}`,"--pretty=format:%s"],{cwd:t}),u=a===0?n.split(/\n/g).filter(h=>h!==""):[],A=_G(u);return HG(A,r)}var mDt={[0]:[" A ","?? "],[4]:[" M "],[1]:[" D "]},yDt={[0]:["A "],[4]:["M "],[1]:["D "]},LBe={async findRoot(t){return await OG(t,{marker:".git"})},async filterChanges(t,e,r,o){let{stdout:a}=await Ur.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),u=o?.staged?yDt:mDt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=V.resolve(t,p.slice(3));if(!o?.staged&&h==="?? "&&p.endsWith("/"))return UG(E).map(I=>({action:0,path:I}));{let v=[0,4,1].find(x=>u[x].includes(h));return v!==void 0?[{action:v,path:E}]:[]}})).filter(p=>MG(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await dDt(t,e)},async makeStage(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let o=e.map(a=>ue.fromPortablePath(a.path));await Ur.execvp("git",["add","-N","--",...o],{cwd:t,strict:!0}),await Ur.execvp("git",["commit","-m",`${r} -${gDt} -`,"--",...o],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var CDt=[HBe],Z0=class extends ut{constructor(){super(...arguments);this.commit=ge.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=ge.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=ge.Boolean("-u,--update",!1,{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),{driver:a,root:n}=await wDt(o.cwd),u=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(I=>I.populateYarnPaths,o,I=>{u.push(I)});let A=new Set;for(let I of u)for(let v of IDt(n,I))A.add(v);let p=new Set([r.get("rcFilename"),dr.lockfile,dr.manifest]),h=await a.filterChanges(n,A,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} +${hDt} +`,"--",...o],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var EDt=[LBe],$0=class extends ut{constructor(){super(...arguments);this.commit=ge.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=ge.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=ge.Boolean("-u,--update",!1,{hidden:!0})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd),{driver:a,root:n}=await CDt(o.cwd),u=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(I=>I.populateYarnPaths,o,I=>{u.push(I)});let A=new Set;for(let I of u)for(let v of wDt(n,I))A.add(v);let p=new Set([r.get("rcFilename"),dr.lockfile,dr.manifest]),h=await a.filterChanges(n,A,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} `);else for(let I of h)this.context.stdout.write(`${ue.fromPortablePath(I.path)} -`);else if(this.reset){let I=await a.filterChanges(n,A,p,{staged:!0});I.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,I)}else h.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,h,E):(await a.makeStage(n,h),this.context.stdout.write(E))}};Z0.paths=[["stage"]],Z0.usage=nt.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]});async function wDt(t){let e=null,r=null;for(let o of CDt)if((r=await o.findRoot(t))!==null){e=o;break}if(e===null||r===null)throw new it("No stage driver has been found for your current project");return{driver:e,root:r}}function IDt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let o;try{o=oe.statSync(e)}catch{break}if(o.isSymbolicLink())e=K.resolve(K.dirname(e),oe.readlinkSync(e));else break}return r}var BDt={commands:[Z0]},vDt=BDt;var WG={};Kt(WG,{default:()=>FDt});Ye();Ye();Pt();var GBe=$e(zn());Ye();var jBe=$e(ZH()),DDt="e8e1bd300d860104bb8c58453ffa1eb4",PDt="OFCNCOG2CU",qBe=async(t,e)=>{let r=W.stringifyIdent(t),a=SDt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},SDt=t=>(0,jBe.default)(PDt,DDt,{requester:{async send(r){try{let o=await rn.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:o.body,isTimedOut:!1,status:o.statusCode}}catch(o){return{content:o.response.body,isTimedOut:!1,status:o.response.statusCode}}}}});var YBe=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,xDt=async(t,e,r,o)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??oe.existsSync(K.join(a.cwd,"tsconfig.json"))))return;let A=n.makeResolver(),p={project:a,resolver:A,report:new Qi};if(!await qBe(r,n))return;let E=YBe(r),I=W.parseRange(r.range).selector;if(!kr.validRange(I)){let L=n.normalizeDependency(r),U=await A.getCandidates(L,{},p);I=W.parseRange(U[0].reference).selector}let v=GBe.default.coerce(I);if(v===null)return;let b=`${zc.Modifier.CARET}${v.major}`,C=W.makeDescriptor(W.makeIdent("types",E),b),T=je.mapAndFind(a.workspaces,L=>{let U=L.manifest.dependencies.get(r.identHash)?.descriptorHash,J=L.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&J!==r.descriptorHash)return je.mapAndFind.skip;let te=[];for(let le of Mt.allDependencies){let pe=L.manifest[le].get(C.identHash);typeof pe>"u"||te.push([le,pe])}return te.length===0?je.mapAndFind.skip:te});if(typeof T<"u")for(let[L,U]of T)t.manifest[L].set(U.identHash,U);else{try{let L=n.normalizeDependency(C);if((await A.getCandidates(L,{},p)).length===0)return}catch{return}t.manifest[zc.Target.DEVELOPMENT].set(C.identHash,C)}},bDt=async(t,e,r)=>{if(r.scope==="types")return;let{project:o}=t,{configuration:a}=o;if(!(a.get("tsEnableAutoTypes")??oe.existsSync(K.join(o.cwd,"tsconfig.json"))))return;let u=YBe(r),A=W.makeIdent("types",u);for(let p of Mt.allDependencies)typeof t.manifest[p].get(A.identHash)>"u"||t.manifest[p].delete(A.identHash)},kDt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},QDt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:xDt,afterWorkspaceDependencyRemoval:bDt,beforeWorkspacePacking:kDt}},FDt=QDt;var XG={};Kt(XG,{VersionApplyCommand:()=>$0,VersionCheckCommand:()=>eg,VersionCommand:()=>tg,default:()=>XDt,versionUtils:()=>gw});Ye();Ye();qt();var gw={};Kt(gw,{Decision:()=>pw,applyPrerelease:()=>XBe,applyReleases:()=>zG,applyStrategy:()=>uF,clearVersionFiles:()=>VG,getUndecidedDependentWorkspaces:()=>qv,getUndecidedWorkspaces:()=>cF,openVersionFile:()=>hw,requireMoreDecisions:()=>KDt,resolveVersionFiles:()=>jv,suggestStrategy:()=>JG,updateVersionFiles:()=>KG,validateReleaseDecision:()=>fw});Ye();Pt();Nl();qt();var zBe=$e(JBe()),BA=$e(zn()),VDt=/^(>=|[~^]|)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/,pw=(u=>(u.UNDECIDED="undecided",u.DECLINE="decline",u.MAJOR="major",u.MINOR="minor",u.PATCH="patch",u.PRERELEASE="prerelease",u))(pw||{});function fw(t){let e=BA.default.valid(t);return e||je.validateEnum((0,zBe.default)(pw,"UNDECIDED"),t)}async function jv(t,{prerelease:e=null}={}){let r=new Map,o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return r;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=K.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Vi(A);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let I=W.parseIdent(h),v=t.tryWorkspaceByIdent(I);if(v===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${K.basename(u)} references ${h})`);if(v.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${W.prettyLocator(t.configuration,v.anchoredLocator)})`);let b=v.manifest.raw.stableVersion??v.manifest.version,C=r.get(v),T=uF(b,fw(E));if(T===null)throw new Error(`Assertion failed: Expected ${b} to support being bumped via strategy ${E}`);let L=typeof C<"u"?BA.default.gt(T,C)?T:C:T;r.set(v,L)}}return e&&(r=new Map([...r].map(([n,u])=>[n,XBe(u,{current:n.manifest.version,prerelease:e})]))),r}async function VG(t){let e=t.configuration.get("deferredVersionFolder");!oe.existsSync(e)||await oe.removePromise(e)}async function KG(t,e){let r=new Set(e),o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=K.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Vi(A),h=p?.releases;if(!!h){for(let E of Object.keys(h)){let I=W.parseIdent(E),v=t.tryWorkspaceByIdent(I);(v===null||r.has(v))&&delete p.releases[E]}Object.keys(p.releases).length>0?await oe.changeFilePromise(u,Ba(new Ba.PreserveOrdering(p))):await oe.unlinkPromise(u)}}}async function hw(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let o=await ra.fetchRoot(r.projectCwd),a=o!==null?await ra.fetchBase(o,{baseRefs:r.get("changesetBaseRefs")}):null,n=o!==null?await ra.fetchChangedFiles(o,{base:a.hash,project:t}):[],u=r.get("deferredVersionFolder"),A=n.filter(b=>K.contains(u,b)!==null);if(A.length>1)throw new it(`Your current branch contains multiple versioning files; this isn't supported: -- ${A.map(b=>ue.fromPortablePath(b)).join(` -- `)}`);let p=new Set(je.mapAndFilter(n,b=>{let C=t.tryWorkspaceByFilePath(b);return C===null?je.mapAndFilter.skip:C}));if(A.length===0&&p.size===0&&!e)return null;let h=A.length===1?A[0]:K.join(u,`${wn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=oe.existsSync(h)?await oe.readFilePromise(h,"utf8"):"{}",I=Vi(E),v=new Map;for(let b of I.declined||[]){let C=W.parseIdent(b),T=t.getWorkspaceByIdent(C);v.set(T,"decline")}for(let[b,C]of Object.entries(I.releases||{})){let T=W.parseIdent(b),L=t.getWorkspaceByIdent(T);v.set(L,fw(C))}return{project:t,root:o,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(b=>b.manifest.version!==null)),releases:v,async saveAll(){let b={},C=[],T=[];for(let L of t.workspaces){if(L.manifest.version===null)continue;let U=W.stringifyIdent(L.anchoredLocator),J=v.get(L);J==="decline"?C.push(U):typeof J<"u"?b[U]=fw(J):p.has(L)&&T.push(U)}await oe.mkdirPromise(K.dirname(h),{recursive:!0}),await oe.changeFilePromise(h,Ba(new Ba.PreserveOrdering({releases:Object.keys(b).length>0?b:void 0,declined:C.length>0?C:void 0,undecided:T.length>0?T:void 0})))}}}function KDt(t){return cF(t).size>0||qv(t).length>0}function cF(t){let e=new Set;for(let r of t.changedWorkspaces)r.manifest.version!==null&&(t.releases.has(r)||e.add(r));return e}function qv(t,{include:e=new Set}={}){let r=[],o=new Map(je.mapAndFilter([...t.releases],([n,u])=>u==="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(je.mapAndFilter([...t.releases],([n,u])=>u!=="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||o.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let u of Mt.hardDependencies)for(let A of n.manifest.getForScope(u).values()){let p=t.project.tryWorkspaceByDescriptor(A);p!==null&&o.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function JG(t,e){let r=BA.default.clean(e);for(let o of Object.values(pw))if(o!=="undecided"&&o!=="decline"&&BA.default.inc(t,o)===r)return o;return null}function uF(t,e){if(BA.default.valid(e))return e;if(t===null)throw new it(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!BA.default.valid(t))throw new it(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=BA.default.inc(t,e);if(r===null)throw new it(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function zG(t,e,{report:r}){let o=new Map;for(let a of t.workspaces)for(let n of Mt.allDependencies)for(let u of a.manifest[n].values()){let A=t.tryWorkspaceByDescriptor(u);if(A===null||!e.has(A))continue;je.getArrayWithDefault(o,A).push([a,n,u.identHash])}for(let[a,n]of e){let u=a.manifest.version;a.manifest.version=n,BA.default.prerelease(n)===null?delete a.manifest.raw.stableVersion:a.manifest.raw.stableVersion||(a.manifest.raw.stableVersion=u);let A=a.manifest.name!==null?W.stringifyIdent(a.manifest.name):null;r.reportInfo(0,`${W.prettyLocator(t.configuration,a.anchoredLocator)}: Bumped to ${n}`),r.reportJson({cwd:ue.fromPortablePath(a.cwd),ident:A,oldVersion:u,newVersion:n});let p=o.get(a);if(!(typeof p>"u"))for(let[h,E,I]of p){let v=h.manifest[E].get(I);if(typeof v>"u")throw new Error("Assertion failed: The dependency should have existed");let b=v.range,C=!1;if(b.startsWith(Xn.protocol)&&(b=b.slice(Xn.protocol.length),C=!0,b===a.relativeCwd))continue;let T=b.match(VDt);if(!T){r.reportWarning(0,`Couldn't auto-upgrade range ${b} (in ${W.prettyLocator(t.configuration,h.anchoredLocator)})`);continue}let L=`${T[1]}${n}`;C&&(L=`${Xn.protocol}${L}`);let U=W.makeDescriptor(v,L);h.manifest[E].set(I,U)}}}var JDt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function XBe(t,{current:e,prerelease:r}){let o=new BA.default.SemVer(e),a=o.prerelease.slice(),n=[];o.prerelease=[],o.format()!==t&&(a.length=0);let u=!0,A=r.split(/\./g);for(let p of A){let h=JDt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():u=!1;else{let E=u?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),u=!1)}}return o.prerelease&&(o.prerelease=[]),`${t}-${n.join(".")}`}var $0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=ge.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=ge.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await jv(o,{prerelease:p}),E=new Map;if(this.all)E=h;else{let I=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let v of I){let b=h.get(v);typeof b<"u"&&E.set(v,b)}}if(E.size===0){let I=h.size>0?" Did you want to add --all?":"";A.reportWarning(0,`The current workspace doesn't seem to require a version bump.${I}`);return}zG(o,E,{report:A}),this.dryRun||(p||(this.all?await VG(o):await KG(o,[...E.keys()])),A.reportSeparator())});return u.hasErrors()?u.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};$0.paths=[["version","apply"]],$0.usage=nt.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` +`);else if(this.reset){let I=await a.filterChanges(n,A,p,{staged:!0});I.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,I)}else h.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,h,E):(await a.makeStage(n,h),this.context.stdout.write(E))}};$0.paths=[["stage"]],$0.usage=nt.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]});async function CDt(t){let e=null,r=null;for(let o of EDt)if((r=await o.findRoot(t))!==null){e=o;break}if(e===null||r===null)throw new it("No stage driver has been found for your current project");return{driver:e,root:r}}function wDt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let o;try{o=oe.statSync(e)}catch{break}if(o.isSymbolicLink())e=V.resolve(V.dirname(e),oe.readlinkSync(e));else break}return r}var IDt={commands:[$0]},BDt=IDt;var jG={};Vt(jG,{default:()=>QDt});Ye();Ye();St();var UBe=$e(zn());Ye();var OBe=$e(zH()),vDt="e8e1bd300d860104bb8c58453ffa1eb4",DDt="OFCNCOG2CU",MBe=async(t,e)=>{let r=W.stringifyIdent(t),a=SDt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},SDt=t=>(0,OBe.default)(DDt,vDt,{requester:{async send(r){try{let o=await nn.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:o.body,isTimedOut:!1,status:o.statusCode}}catch(o){return{content:o.response.body,isTimedOut:!1,status:o.response.statusCode}}}}});var _Be=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,PDt=async(t,e,r,o)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??oe.existsSync(V.join(a.cwd,"tsconfig.json"))))return;let A=n.makeResolver(),p={project:a,resolver:A,report:new Qi};if(!await MBe(r,n))return;let E=_Be(r),I=W.parseRange(r.range).selector;if(!kr.validRange(I)){let L=n.normalizeDependency(r),U=await A.getCandidates(L,{},p);I=W.parseRange(U[0].reference).selector}let v=UBe.default.coerce(I);if(v===null)return;let x=`${zc.Modifier.CARET}${v.major}`,C=W.makeDescriptor(W.makeIdent("types",E),x),R=_e.mapAndFind(a.workspaces,L=>{let U=L.manifest.dependencies.get(r.identHash)?.descriptorHash,J=L.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&J!==r.descriptorHash)return _e.mapAndFind.skip;let te=[];for(let ae of Ot.allDependencies){let fe=L.manifest[ae].get(C.identHash);typeof fe>"u"||te.push([ae,fe])}return te.length===0?_e.mapAndFind.skip:te});if(typeof R<"u")for(let[L,U]of R)t.manifest[L].set(U.identHash,U);else{try{let L=n.normalizeDependency(C);if((await A.getCandidates(L,{},p)).length===0)return}catch{return}t.manifest[zc.Target.DEVELOPMENT].set(C.identHash,C)}},bDt=async(t,e,r)=>{if(r.scope==="types")return;let{project:o}=t,{configuration:a}=o;if(!(a.get("tsEnableAutoTypes")??oe.existsSync(V.join(o.cwd,"tsconfig.json"))))return;let u=_Be(r),A=W.makeIdent("types",u);for(let p of Ot.allDependencies)typeof t.manifest[p].get(A.identHash)>"u"||t.manifest[p].delete(A.identHash)},xDt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},kDt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:PDt,afterWorkspaceDependencyRemoval:bDt,beforeWorkspacePacking:xDt}},QDt=kDt;var VG={};Vt(VG,{VersionApplyCommand:()=>eg,VersionCheckCommand:()=>tg,VersionCommand:()=>rg,default:()=>zDt,versionUtils:()=>dw});Ye();Ye();qt();var dw={};Vt(dw,{Decision:()=>hw,applyPrerelease:()=>WBe,applyReleases:()=>KG,applyStrategy:()=>lF,clearVersionFiles:()=>GG,getUndecidedDependentWorkspaces:()=>jv,getUndecidedWorkspaces:()=>aF,openVersionFile:()=>gw,requireMoreDecisions:()=>KDt,resolveVersionFiles:()=>qv,suggestStrategy:()=>WG,updateVersionFiles:()=>YG,validateReleaseDecision:()=>pw});Ye();St();Nl();qt();var YBe=$e(GBe()),vA=$e(zn()),WDt=/^(>=|[~^]|)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/,hw=(u=>(u.UNDECIDED="undecided",u.DECLINE="decline",u.MAJOR="major",u.MINOR="minor",u.PATCH="patch",u.PRERELEASE="prerelease",u))(hw||{});function pw(t){let e=vA.default.valid(t);return e||_e.validateEnum((0,YBe.default)(hw,"UNDECIDED"),t)}async function qv(t,{prerelease:e=null}={}){let r=new Map,o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return r;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=V.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Ki(A);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let I=W.parseIdent(h),v=t.tryWorkspaceByIdent(I);if(v===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${V.basename(u)} references ${h})`);if(v.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${W.prettyLocator(t.configuration,v.anchoredLocator)})`);let x=v.manifest.raw.stableVersion??v.manifest.version,C=r.get(v),R=lF(x,pw(E));if(R===null)throw new Error(`Assertion failed: Expected ${x} to support being bumped via strategy ${E}`);let L=typeof C<"u"?vA.default.gt(R,C)?R:C:R;r.set(v,L)}}return e&&(r=new Map([...r].map(([n,u])=>[n,WBe(u,{current:n.manifest.version,prerelease:e})]))),r}async function GG(t){let e=t.configuration.get("deferredVersionFolder");!oe.existsSync(e)||await oe.removePromise(e)}async function YG(t,e){let r=new Set(e),o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=V.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Ki(A),h=p?.releases;if(!!h){for(let E of Object.keys(h)){let I=W.parseIdent(E),v=t.tryWorkspaceByIdent(I);(v===null||r.has(v))&&delete p.releases[E]}Object.keys(p.releases).length>0?await oe.changeFilePromise(u,Ba(new Ba.PreserveOrdering(p))):await oe.unlinkPromise(u)}}}async function gw(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let o=await ra.fetchRoot(r.projectCwd),a=o!==null?await ra.fetchBase(o,{baseRefs:r.get("changesetBaseRefs")}):null,n=o!==null?await ra.fetchChangedFiles(o,{base:a.hash,project:t}):[],u=r.get("deferredVersionFolder"),A=n.filter(x=>V.contains(u,x)!==null);if(A.length>1)throw new it(`Your current branch contains multiple versioning files; this isn't supported: +- ${A.map(x=>ue.fromPortablePath(x)).join(` +- `)}`);let p=new Set(_e.mapAndFilter(n,x=>{let C=t.tryWorkspaceByFilePath(x);return C===null?_e.mapAndFilter.skip:C}));if(A.length===0&&p.size===0&&!e)return null;let h=A.length===1?A[0]:V.join(u,`${wn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=oe.existsSync(h)?await oe.readFilePromise(h,"utf8"):"{}",I=Ki(E),v=new Map;for(let x of I.declined||[]){let C=W.parseIdent(x),R=t.getWorkspaceByIdent(C);v.set(R,"decline")}for(let[x,C]of Object.entries(I.releases||{})){let R=W.parseIdent(x),L=t.getWorkspaceByIdent(R);v.set(L,pw(C))}return{project:t,root:o,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(x=>x.manifest.version!==null)),releases:v,async saveAll(){let x={},C=[],R=[];for(let L of t.workspaces){if(L.manifest.version===null)continue;let U=W.stringifyIdent(L.anchoredLocator),J=v.get(L);J==="decline"?C.push(U):typeof J<"u"?x[U]=pw(J):p.has(L)&&R.push(U)}await oe.mkdirPromise(V.dirname(h),{recursive:!0}),await oe.changeFilePromise(h,Ba(new Ba.PreserveOrdering({releases:Object.keys(x).length>0?x:void 0,declined:C.length>0?C:void 0,undecided:R.length>0?R:void 0})))}}}function KDt(t){return aF(t).size>0||jv(t).length>0}function aF(t){let e=new Set;for(let r of t.changedWorkspaces)r.manifest.version!==null&&(t.releases.has(r)||e.add(r));return e}function jv(t,{include:e=new Set}={}){let r=[],o=new Map(_e.mapAndFilter([...t.releases],([n,u])=>u==="decline"?_e.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(_e.mapAndFilter([...t.releases],([n,u])=>u!=="decline"?_e.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||o.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let u of Ot.hardDependencies)for(let A of n.manifest.getForScope(u).values()){let p=t.project.tryWorkspaceByDescriptor(A);p!==null&&o.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function WG(t,e){let r=vA.default.clean(e);for(let o of Object.values(hw))if(o!=="undecided"&&o!=="decline"&&vA.default.inc(t,o)===r)return o;return null}function lF(t,e){if(vA.default.valid(e))return e;if(t===null)throw new it(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!vA.default.valid(t))throw new it(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=vA.default.inc(t,e);if(r===null)throw new it(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function KG(t,e,{report:r}){let o=new Map;for(let a of t.workspaces)for(let n of Ot.allDependencies)for(let u of a.manifest[n].values()){let A=t.tryWorkspaceByDescriptor(u);if(A===null||!e.has(A))continue;_e.getArrayWithDefault(o,A).push([a,n,u.identHash])}for(let[a,n]of e){let u=a.manifest.version;a.manifest.version=n,vA.default.prerelease(n)===null?delete a.manifest.raw.stableVersion:a.manifest.raw.stableVersion||(a.manifest.raw.stableVersion=u);let A=a.manifest.name!==null?W.stringifyIdent(a.manifest.name):null;r.reportInfo(0,`${W.prettyLocator(t.configuration,a.anchoredLocator)}: Bumped to ${n}`),r.reportJson({cwd:ue.fromPortablePath(a.cwd),ident:A,oldVersion:u,newVersion:n});let p=o.get(a);if(!(typeof p>"u"))for(let[h,E,I]of p){let v=h.manifest[E].get(I);if(typeof v>"u")throw new Error("Assertion failed: The dependency should have existed");let x=v.range,C=!1;if(x.startsWith(Xn.protocol)&&(x=x.slice(Xn.protocol.length),C=!0,x===a.relativeCwd))continue;let R=x.match(WDt);if(!R){r.reportWarning(0,`Couldn't auto-upgrade range ${x} (in ${W.prettyLocator(t.configuration,h.anchoredLocator)})`);continue}let L=`${R[1]}${n}`;C&&(L=`${Xn.protocol}${L}`);let U=W.makeDescriptor(v,L);h.manifest[E].set(I,U)}}}var VDt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function WBe(t,{current:e,prerelease:r}){let o=new vA.default.SemVer(e),a=o.prerelease.slice(),n=[];o.prerelease=[],o.format()!==t&&(a.length=0);let u=!0,A=r.split(/\./g);for(let p of A){let h=VDt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():u=!1;else{let E=u?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),u=!1)}}return o.prerelease&&(o.prerelease=[]),`${t}-${n.join(".")}`}var eg=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=ge.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=ge.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await qv(o,{prerelease:p}),E=new Map;if(this.all)E=h;else{let I=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let v of I){let x=h.get(v);typeof x<"u"&&E.set(v,x)}}if(E.size===0){let I=h.size>0?" Did you want to add --all?":"";A.reportWarning(0,`The current workspace doesn't seem to require a version bump.${I}`);return}KG(o,E,{report:A}),this.dryRun||(p||(this.all?await GG(o):await YG(o,[...E.keys()])),A.reportSeparator())});return this.dryRun||u.hasErrors()?u.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};eg.paths=[["version","apply"]],eg.usage=nt.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` This command will apply the deferred version changes and remove their definitions from the repository. Note that if \`--prerelease\` is set, the given prerelease identifier (by default \`rc.%d\`) will be used on all new versions and the version definitions will be kept as-is. @@ -726,12 +726,12 @@ ${gDt} - \`--all\` to apply the version bump on all packages in the repository Note that this command will also update the \`workspace:\` references across all your local workspaces, thus ensuring that they keep referring to the same workspaces even after the version bump. - `,examples:[["Apply the version change to the local workspace","yarn version apply"],["Apply the version change to all the workspaces in the local workspace","yarn version apply --all"]]});Ye();Pt();qt();var AF=$e(zn());var eg=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){SC(this.context);let{Gem:r}=await Promise.resolve().then(()=>(AQ(),Dj)),{ScrollableItems:o}=await Promise.resolve().then(()=>(gQ(),hQ)),{FocusRequest:a}=await Promise.resolve().then(()=>(Sj(),Xwe)),{useListInput:n}=await Promise.resolve().then(()=>(pQ(),Zwe)),{renderForm:u}=await Promise.resolve().then(()=>(EQ(),yQ)),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useCallback:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),{project:b,workspace:C}=await St.find(v,this.context.cwd);if(!C)throw new rr(b.cwd,this.context.cwd);await b.restoreInstallState();let T=await hw(b);if(T===null||T.releaseRoots.size===0)return 0;if(T.root===null)throw new it("This command can only be run on Git repositories");let L=()=>h.createElement(A,{flexDirection:"row",paddingBottom:1},h.createElement(A,{flexDirection:"column",width:60},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:ye,active:ae,decision:we,setDecision:Pe})=>{let g=ye.manifest.raw.stableVersion??ye.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${W.prettyLocator(v,ye.anchoredLocator)})`);if(AF.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let Ee=["undecided","decline","patch","minor","major"];n(we,Ee,{active:ae,minus:"left",plus:"right",set:Pe});let De=we==="undecided"?h.createElement(p,{color:"yellow"},g):we==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},AF.default.valid(we)?we:AF.default.inc(g,we)));return h.createElement(A,{flexDirection:"column"},h.createElement(A,null,h.createElement(p,null,W.prettyLocator(v,ye.anchoredLocator)," - ",De)),h.createElement(A,null,Ee.map(ce=>h.createElement(A,{key:ce,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:ce===we})," ",ce)))))},J=ye=>{let ae=new Set(T.releaseRoots),we=new Map([...ye].filter(([Pe])=>ae.has(Pe)));for(;;){let Pe=qv({project:T.project,releases:we}),g=!1;if(Pe.length>0){for(let[Ee]of Pe)if(!ae.has(Ee)){ae.add(Ee),g=!0;let De=ye.get(Ee);typeof De<"u"&&we.set(Ee,De)}}if(!g)break}return{relevantWorkspaces:ae,relevantReleases:we}},te=()=>{let[ye,ae]=I(()=>new Map(T.releases)),we=E((Pe,g)=>{let Ee=new Map(ye);g!=="undecided"?Ee.set(Pe,g):Ee.delete(Pe);let{relevantReleases:De}=J(Ee);ae(De)},[ye,ae]);return[ye,we]},le=({workspaces:ye,releases:ae})=>{let we=[];we.push(`${ye.size} total`);let Pe=0,g=0;for(let Ee of ye){let De=ae.get(Ee);typeof De>"u"?g+=1:De!=="decline"&&(Pe+=1)}return we.push(`${Pe} release${Pe===1?"":"s"}`),we.push(`${g} remaining`),h.createElement(p,{color:"yellow"},we.join(", "))},Ae=await u(({useSubmit:ye})=>{let[ae,we]=te();ye(ae);let{relevantWorkspaces:Pe}=J(ae),g=new Set([...Pe].filter(ne=>!T.releaseRoots.has(ne))),[Ee,De]=I(0),ce=E(ne=>{switch(ne){case a.BEFORE:De(Ee-1);break;case a.AFTER:De(Ee+1);break}},[Ee,De]);return h.createElement(A,{flexDirection:"column"},h.createElement(L,null),h.createElement(A,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(A,{flexDirection:"column",marginTop:1,paddingLeft:2},[...T.changedFiles].map(ne=>h.createElement(A,{key:ne},h.createElement(p,null,h.createElement(p,{color:"grey"},ue.fromPortablePath(T.root)),ue.sep,ue.relative(ue.fromPortablePath(T.root),ue.fromPortablePath(ne)))))),T.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:T.releaseRoots,releases:ae})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===0,radius:1,size:2,onFocusRequest:ce},[...T.releaseRoots].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:ae.get(ne)||"undecided",setDecision:ee=>we(ne,ee)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(A,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:g,releases:ae})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===1,radius:2,size:2,onFocusRequest:ce},[...g].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:ae.get(ne)||"undecided",setDecision:ee=>we(ne,ee)}))))):null)},{versionFile:T},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Ae>"u")return 1;T.releases.clear();for(let[ye,ae]of Ae)T.releases.set(ye,ae);await T.saveAll()}async executeStandard(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);return await o.restoreInstallState(),(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{let A=await hw(o);if(A===null||A.releaseRoots.size===0)return;if(A.root===null)throw new it("This command can only be run on Git repositories");if(u.reportInfo(0,`Your PR was started right after ${de.pretty(r,A.baseHash.slice(0,7),"yellow")} ${de.pretty(r,A.baseTitle,"magenta")}`),A.changedFiles.size>0){u.reportInfo(0,"You have changed the following files since then:"),u.reportSeparator();for(let v of A.changedFiles)u.reportInfo(null,`${de.pretty(r,ue.fromPortablePath(A.root),"gray")}${ue.sep}${ue.relative(ue.fromPortablePath(A.root),ue.fromPortablePath(v))}`)}let p=!1,h=!1,E=cF(A);if(E.size>0){p||u.reportSeparator();for(let v of E)u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let I=qv(A);for(let[v,b]of I)h||u.reportSeparator(),u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} doesn't have a release strategy attached, but depends on ${W.prettyWorkspace(r,b)} which is planned for release.`),h=!0;(p||h)&&(u.reportSeparator(),u.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),u.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};eg.paths=[["version","check"]],eg.usage=nt.Usage({category:"Release-related commands",description:"check that all the relevant packages have been bumped",details:"\n **Warning:** This command currently requires Git.\n\n This command will check that all the packages covered by the files listed in argument have been properly bumped or declined to bump.\n\n In the case of a bump, the check will also cover transitive packages - meaning that should `Foo` be bumped, a package `Bar` depending on `Foo` will require a decision as to whether `Bar` will need to be bumped. This check doesn't cross packages that have declined to bump.\n\n In case no arguments are passed to the function, the list of modified files will be generated by comparing the HEAD against `master`.\n ",examples:[["Check whether the modified packages need a bump","yarn version check"]]});Ye();qt();var fF=$e(zn());var tg=class extends ut{constructor(){super(...arguments);this.deferred=ge.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=ge.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let u=fF.default.valid(this.strategy),A=this.strategy==="decline",p;if(u)if(a.manifest.version!==null){let E=JG(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!A){if(E===null)throw new it("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof E!="string"||!fF.default.valid(E))throw new it(`Can't bump the version (${E}) if it's not valid semver`)}p=fw(this.strategy)}if(!n){let I=(await jv(o)).get(a);if(typeof I<"u"&&p!=="decline"){let v=uF(a.manifest.version,p);if(fF.default.lt(v,I))throw new it(`Can't bump the version to one that would be lower than the current deferred one (${I})`)}}let h=await hw(o,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};tg.paths=[["version"]],tg.usage=nt.Usage({category:"Release-related commands",description:"apply a new version to the current package",details:"\n This command will bump the version number for the given package, following the specified strategy:\n\n - If `major`, the first number from the semver range will be increased (`X.0.0`).\n - If `minor`, the second number from the semver range will be increased (`0.X.0`).\n - If `patch`, the third number from the semver range will be increased (`0.0.X`).\n - If prefixed by `pre` (`premajor`, ...), a `-0` suffix will be set (`0.0.0-0`).\n - If `prerelease`, the suffix will be increased (`0.0.0-X`); the third number from the semver range will also be increased if there was no suffix in the previous version.\n - If `decline`, the nonce will be increased for `yarn version check` to pass without version bump.\n - If a valid semver range, it will be used as new version.\n - If unspecified, Yarn will ask you for guidance.\n\n For more information about the `--deferred` flag, consult our documentation (https://yarnpkg.com/features/release-workflow#deferred-versioning).\n ",examples:[["Immediately bump the version to the next major","yarn version major"],["Prepare the version to be bumped to the next major","yarn version major --deferred"]]});var zDt={configuration:{deferredVersionFolder:{description:"Folder where are stored the versioning files",type:"ABSOLUTE_PATH",default:"./.yarn/versions"},preferDeferredVersions:{description:"If true, running `yarn version` will assume the `--deferred` flag unless `--immediate` is set",type:"BOOLEAN",default:!1}},commands:[$0,eg,tg]},XDt=zDt;var ZG={};Kt(ZG,{WorkspacesFocusCommand:()=>rg,WorkspacesForeachCommand:()=>op,default:()=>ePt});Ye();Ye();qt();var rg=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=ge.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=ge.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let u;if(this.all)u=new Set(o.workspaces);else if(this.workspaces.length===0){if(!a)throw new rr(o.cwd,this.context.cwd);u=new Set([a])}else u=new Set(this.workspaces.map(A=>o.getWorkspaceByIdent(W.parseIdent(A))));for(let A of u)for(let p of this.production?["dependencies"]:Mt.hardDependencies)for(let h of A.manifest.getForScope(p).values()){let E=o.tryWorkspaceByDescriptor(h);E!==null&&u.add(E)}for(let A of o.workspaces)u.has(A)?this.production&&A.manifest.devDependencies.clear():(A.manifest.installConfig=A.manifest.installConfig||{},A.manifest.installConfig.selfReferences=!1,A.manifest.dependencies.clear(),A.manifest.devDependencies.clear(),A.manifest.peerDependencies.clear(),A.manifest.scripts.clear());return await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};rg.paths=[["workspaces","focus"]],rg.usage=nt.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "});Ye();Ye();Ye();qt();var dw=$e(Zo()),$Be=$e(nd());Za();var op=class extends ut{constructor(){super(...arguments);this.from=ge.Array("--from",{description:"An array of glob pattern idents or paths from which to base any recursion"});this.all=ge.Boolean("-A,--all",{description:"Run the command on all workspaces of a project"});this.recursive=ge.Boolean("-R,--recursive",{description:"Run the command on the current workspace and all of its recursive dependencies"});this.worktree=ge.Boolean("-W,--worktree",{description:"Run the command on all workspaces of the current worktree"});this.verbose=ge.Boolean("-v,--verbose",{description:"Prefix each output line with the name of the originating workspace"});this.parallel=ge.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=ge.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=ge.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:LR([Vs(["unlimited"]),oI(NR(),[OR(),MR(1)])])});this.topological=ge.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=ge.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=ge.Array("--include",[],{description:"An array of glob pattern idents or paths; only matching workspaces will be traversed"});this.exclude=ge.Array("--exclude",[],{description:"An array of glob pattern idents or paths; matching workspaces won't be traversed"});this.publicOnly=ge.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.dryRun=ge.Boolean("-n,--dry-run",{description:"Print the commands that would be run, without actually running them"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!this.all&&!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),u=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new it("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let A=ae=>{!this.dryRun||this.context.stdout.write(`${ae} -`)},p=()=>{let ae=this.from.map(we=>dw.default.matcher(we));return o.workspaces.filter(we=>{let Pe=W.stringifyIdent(we.anchoredLocator),g=we.relativeCwd;return ae.some(Ee=>Ee(Pe)||Ee(g))})},h=[];if(this.since?(A("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ra.fetchChangedWorkspaces({ref:this.since,project:o}))):this.from?(A("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(A("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(A("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(A("Option --all is set; selecting all workspaces"),h=[...o.workspaces]),this.dryRun&&!this.all){for(let ae of h)A(` -- ${ae.relativeCwd} - ${W.prettyLocator(r,ae.anchoredLocator)}`);h.length>0&&A("")}let E;if(this.recursive?this.since?(A("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceDependents()]).flat())):(A("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(A("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let ae of E)A(` -- ${ae.relativeCwd} - ${W.prettyLocator(r,ae.anchoredLocator)}`);let I=[],v=!1;if(u?.includes(":")){for(let ae of o.workspaces)if(ae.manifest.scripts.has(u)&&(v=!v,v===!1))break}for(let ae of h){if(u&&!ae.manifest.scripts.has(u)&&!v&&!(await un.getWorkspaceAccessibleBinaries(ae)).has(u)){A(`Excluding ${ae.relativeCwd} because it doesn't have a "${u}" script`);continue}if(!(u===r.env.npm_lifecycle_event&&ae.cwd===a.cwd)){if(this.include.length>0&&!dw.default.isMatch(W.stringifyIdent(ae.anchoredLocator),this.include)&&!dw.default.isMatch(ae.relativeCwd,this.include)){A(`Excluding ${ae.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(dw.default.isMatch(W.stringifyIdent(ae.anchoredLocator),this.exclude)||dw.default.isMatch(ae.relativeCwd,this.exclude))){A(`Excluding ${ae.relativeCwd} because it matches the --include filter`);continue}if(this.publicOnly&&ae.manifest.private===!0){A(`Excluding ${ae.relativeCwd} because it's a private workspace and --no-private was set`);continue}I.push(ae)}}if(this.dryRun)return 0;let b=this.verbose??this.context.stdout.isTTY,C=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(Ji.availableParallelism()/2):1,T=C===1?!1:this.parallel,L=T?this.interlaced:!0,U=(0,$Be.default)(C),J=new Map,te=new Set,le=0,pe=null,Ae=!1,ye=await Nt.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async ae=>{let we=async(Pe,{commandIndex:g})=>{if(Ae)return-1;!T&&b&&g>1&&ae.reportSeparator();let Ee=ZDt(Pe,{configuration:r,verbose:b,commandIndex:g}),[De,ce]=ZBe(ae,{prefix:Ee,interlaced:L}),[ne,ee]=ZBe(ae,{prefix:Ee,interlaced:L});try{b&&ae.reportInfo(null,`${Ee} Process started`);let Ie=Date.now(),ke=await this.cli.run([this.commandName,...this.args],{cwd:Pe.cwd,stdout:De,stderr:ne})||0;De.end(),ne.end(),await ce,await ee;let ht=Date.now();if(b){let H=r.get("enableTimers")?`, completed in ${de.pretty(r,ht-Ie,de.Type.DURATION)}`:"";ae.reportInfo(null,`${Ee} Process exited (exit code ${ke})${H}`)}return ke===130&&(Ae=!0,pe=ke),ke}catch(Ie){throw De.end(),ne.end(),await ce,await ee,Ie}};for(let Pe of I)J.set(Pe.anchoredLocator.locatorHash,Pe);for(;J.size>0&&!ae.hasErrors();){let Pe=[];for(let[De,ce]of J){if(te.has(ce.anchoredDescriptor.descriptorHash))continue;let ne=!0;if(this.topological||this.topologicalDev){let ee=this.topologicalDev?new Map([...ce.manifest.dependencies,...ce.manifest.devDependencies]):ce.manifest.dependencies;for(let Ie of ee.values()){let ke=o.tryWorkspaceByDescriptor(Ie);if(ne=ke===null||!J.has(ke.anchoredLocator.locatorHash),!ne)break}}if(!!ne&&(te.add(ce.anchoredDescriptor.descriptorHash),Pe.push(U(async()=>{let ee=await we(ce,{commandIndex:++le});return J.delete(De),te.delete(ce.anchoredDescriptor.descriptorHash),ee})),!T))break}if(Pe.length===0){let De=Array.from(J.values()).map(ce=>W.prettyLocator(r,ce.anchoredLocator)).join(", ");ae.reportError(3,`Dependency cycle detected (${De})`);return}let Ee=(await Promise.all(Pe)).find(De=>De!==0);pe===null&&(pe=typeof Ee<"u"?1:pe),(this.topological||this.topologicalDev)&&typeof Ee<"u"&&ae.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return pe!==null?pe:ye.exitCode()}};op.paths=[["workspaces","foreach"]],op.usage=nt.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n Adding the `-v,--verbose` flag (automatically enabled in interactive terminal environments) will cause Yarn to print more information; in particular the name of the workspace that generated the output will be printed at the front of each line.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish all packages","yarn workspaces foreach -A npm publish --tolerate-republish"],["Run the build script on all descendant packages","yarn workspaces foreach -A run build"],["Run the build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -Apt run build"],["Run the build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -Rpt --from '{workspace-a,workspace-b}' run build"]]}),op.schema=[lI("all",Gu.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),UR(["all","recursive","since","worktree"],{missingIf:"undefined"})];function ZBe(t,{prefix:e,interlaced:r}){let o=t.createStreamReporter(e),a=new je.DefaultStream;a.pipe(o,{end:!1}),a.on("finish",()=>{o.end()});let n=new Promise(A=>{o.on("finish",()=>{A(a.active)})});if(r)return[a,n];let u=new je.BufferStream;return u.pipe(a,{end:!1}),u.on("finish",()=>{a.end()}),[u,n]}function ZDt(t,{configuration:e,commandIndex:r,verbose:o}){if(!o)return null;let n=`[${W.stringifyIdent(t.anchoredLocator)}]:`,u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[r%u.length];return de.pretty(e,n,A)}var $Dt={commands:[rg,op]},ePt=$Dt;var fC=()=>({modules:new Map([["@yarnpkg/cli",o2],["@yarnpkg/core",s2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",tI],["@yarnpkg/shell",T1],["clipanion",pI],["semver",tPt],["typanion",Ko],["@yarnpkg/plugin-essentials",tH],["@yarnpkg/plugin-compat",oH],["@yarnpkg/plugin-constraints",BH],["@yarnpkg/plugin-dlx",vH],["@yarnpkg/plugin-exec",SH],["@yarnpkg/plugin-file",bH],["@yarnpkg/plugin-git",eH],["@yarnpkg/plugin-github",FH],["@yarnpkg/plugin-http",TH],["@yarnpkg/plugin-init",RH],["@yarnpkg/plugin-interactive-tools",Lj],["@yarnpkg/plugin-link",Mj],["@yarnpkg/plugin-nm",Cq],["@yarnpkg/plugin-npm",EG],["@yarnpkg/plugin-npm-cli",xG],["@yarnpkg/plugin-pack",hG],["@yarnpkg/plugin-patch",NG],["@yarnpkg/plugin-pnp",lq],["@yarnpkg/plugin-pnpm",OG],["@yarnpkg/plugin-stage",YG],["@yarnpkg/plugin-typescript",WG],["@yarnpkg/plugin-version",XG],["@yarnpkg/plugin-workspace-tools",ZG]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function rve({cwd:t,pluginConfiguration:e}){let r=new as({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:tn??""});return Object.assign(r,{defaultContext:{...as.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function rPt(t){if(je.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,o=">=18.12.0";if(kr.satisfiesWithPrereleases(r,o))return!0;let a=new it(`This tool requires a Node version compatible with ${o} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return as.defaultContext.stdout.write(t.error(a)),!1}async function nve({selfPath:t,pluginConfiguration:e}){return await Ve.find(ue.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function nPt(t,e,{yarnPath:r}){if(!oe.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let o={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,eve.execFileSync)(process.execPath,[ue.fromPortablePath(r),...e],o)}catch(a){return a.status??1}return 0}function iPt(t,e){let r=null,o=e;return e.length>=2&&e[0]==="--cwd"?(r=ue.toPortablePath(e[1]),o=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=ue.toPortablePath(e[0].slice(6)),o=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=ue.toPortablePath(e[e.length-1]),o=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?K.resolve(r):K.cwd(),o}function sPt(t,{configuration:e}){if(!e.get("enableTelemetry")||tve.isCI||!process.stdout.isTTY)return;Ve.telemetry=new cC(e,"puba9cdc10ec5790a2cf4969dd413a47270");let o=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())uC.has(a.match(o)?.[1]??"")&&Ve.telemetry?.reportPluginName(a);t.binaryVersion&&Ve.telemetry.reportVersion(t.binaryVersion)}function ive(t,{configuration:e}){for(let r of e.plugins.values())for(let o of r.commands||[])t.register(o)}async function oPt(t,e,{selfPath:r,pluginConfiguration:o}){if(!rPt(t))return 1;let a=await nve({selfPath:r,pluginConfiguration:o}),n=a.get("yarnPath"),u=a.get("ignorePath");if(n&&!u)return nPt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let A=iPt(t,e);sPt(t,{configuration:a}),ive(t,{configuration:a});let p=t.process(A,t.defaultContext);return p.help||Ve.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function the({cwd:t=K.cwd(),pluginConfiguration:e=fC()}={}){let r=rve({cwd:t,pluginConfiguration:e}),o=await nve({pluginConfiguration:e,selfPath:null});return ive(r,{configuration:o}),r}async function sk(t,{cwd:e=K.cwd(),selfPath:r,pluginConfiguration:o}){let a=rve({cwd:e,pluginConfiguration:o});try{process.exitCode=await oPt(a,t,{selfPath:r,pluginConfiguration:o})}catch(n){as.defaultContext.stdout.write(a.error(n)),process.exitCode=1}finally{await oe.rmtempPromise()}}sk(process.argv.slice(2),{cwd:K.cwd(),selfPath:ue.toPortablePath(ue.resolve(process.argv[1])),pluginConfiguration:fC()});})(); + `,examples:[["Apply the version change to the local workspace","yarn version apply"],["Apply the version change to all the workspaces in the local workspace","yarn version apply --all"]]});Ye();St();qt();var cF=$e(zn());var tg=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){bC(this.context);let{Gem:r}=await Promise.resolve().then(()=>(cQ(),Bq)),{ScrollableItems:o}=await Promise.resolve().then(()=>(pQ(),fQ)),{FocusRequest:a}=await Promise.resolve().then(()=>(Dq(),Vwe)),{useListInput:n}=await Promise.resolve().then(()=>(AQ(),Jwe)),{renderForm:u}=await Promise.resolve().then(()=>(mQ(),dQ)),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useCallback:E,useState:I}=await Promise.resolve().then(()=>$e(on())),v=await Ke.find(this.context.cwd,this.context.plugins),{project:x,workspace:C}=await Pt.find(v,this.context.cwd);if(!C)throw new rr(x.cwd,this.context.cwd);await x.restoreInstallState();let R=await gw(x);if(R===null||R.releaseRoots.size===0)return 0;if(R.root===null)throw new it("This command can only be run on Git repositories");let L=()=>h.createElement(A,{flexDirection:"row",paddingBottom:1},h.createElement(A,{flexDirection:"column",width:60},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:me,active:he,decision:Be,setDecision:we})=>{let g=me.manifest.raw.stableVersion??me.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${W.prettyLocator(v,me.anchoredLocator)})`);if(cF.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let Ee=["undecided","decline","patch","minor","major"];n(Be,Ee,{active:he,minus:"left",plus:"right",set:we});let Se=Be==="undecided"?h.createElement(p,{color:"yellow"},g):Be==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},cF.default.valid(Be)?Be:cF.default.inc(g,Be)));return h.createElement(A,{flexDirection:"column"},h.createElement(A,null,h.createElement(p,null,W.prettyLocator(v,me.anchoredLocator)," - ",Se)),h.createElement(A,null,Ee.map(le=>h.createElement(A,{key:le,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:le===Be})," ",le)))))},J=me=>{let he=new Set(R.releaseRoots),Be=new Map([...me].filter(([we])=>he.has(we)));for(;;){let we=jv({project:R.project,releases:Be}),g=!1;if(we.length>0){for(let[Ee]of we)if(!he.has(Ee)){he.add(Ee),g=!0;let Se=me.get(Ee);typeof Se<"u"&&Be.set(Ee,Se)}}if(!g)break}return{relevantWorkspaces:he,relevantReleases:Be}},te=()=>{let[me,he]=I(()=>new Map(R.releases)),Be=E((we,g)=>{let Ee=new Map(me);g!=="undecided"?Ee.set(we,g):Ee.delete(we);let{relevantReleases:Se}=J(Ee);he(Se)},[me,he]);return[me,Be]},ae=({workspaces:me,releases:he})=>{let Be=[];Be.push(`${me.size} total`);let we=0,g=0;for(let Ee of me){let Se=he.get(Ee);typeof Se>"u"?g+=1:Se!=="decline"&&(we+=1)}return Be.push(`${we} release${we===1?"":"s"}`),Be.push(`${g} remaining`),h.createElement(p,{color:"yellow"},Be.join(", "))},ce=await u(({useSubmit:me})=>{let[he,Be]=te();me(he);let{relevantWorkspaces:we}=J(he),g=new Set([...we].filter(ne=>!R.releaseRoots.has(ne))),[Ee,Se]=I(0),le=E(ne=>{switch(ne){case a.BEFORE:Se(Ee-1);break;case a.AFTER:Se(Ee+1);break}},[Ee,Se]);return h.createElement(A,{flexDirection:"column"},h.createElement(L,null),h.createElement(A,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(A,{flexDirection:"column",marginTop:1,paddingLeft:2},[...R.changedFiles].map(ne=>h.createElement(A,{key:ne},h.createElement(p,null,h.createElement(p,{color:"grey"},ue.fromPortablePath(R.root)),ue.sep,ue.relative(ue.fromPortablePath(R.root),ue.fromPortablePath(ne)))))),R.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(A,{marginTop:1},h.createElement(ae,{workspaces:R.releaseRoots,releases:he})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===0,radius:1,size:2,onFocusRequest:le},[...R.releaseRoots].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:he.get(ne)||"undecided",setDecision:ee=>Be(ne,ee)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(A,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(A,{marginTop:1},h.createElement(ae,{workspaces:g,releases:he})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===1,radius:2,size:2,onFocusRequest:le},[...g].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:he.get(ne)||"undecided",setDecision:ee=>Be(ne,ee)}))))):null)},{versionFile:R},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ce>"u")return 1;R.releases.clear();for(let[me,he]of ce)R.releases.set(me,he);await R.saveAll()}async executeStandard(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);return await o.restoreInstallState(),(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{let A=await gw(o);if(A===null||A.releaseRoots.size===0)return;if(A.root===null)throw new it("This command can only be run on Git repositories");if(u.reportInfo(0,`Your PR was started right after ${de.pretty(r,A.baseHash.slice(0,7),"yellow")} ${de.pretty(r,A.baseTitle,"magenta")}`),A.changedFiles.size>0){u.reportInfo(0,"You have changed the following files since then:"),u.reportSeparator();for(let v of A.changedFiles)u.reportInfo(null,`${de.pretty(r,ue.fromPortablePath(A.root),"gray")}${ue.sep}${ue.relative(ue.fromPortablePath(A.root),ue.fromPortablePath(v))}`)}let p=!1,h=!1,E=aF(A);if(E.size>0){p||u.reportSeparator();for(let v of E)u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let I=jv(A);for(let[v,x]of I)h||u.reportSeparator(),u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} doesn't have a release strategy attached, but depends on ${W.prettyWorkspace(r,x)} which is planned for release.`),h=!0;(p||h)&&(u.reportSeparator(),u.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),u.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};tg.paths=[["version","check"]],tg.usage=nt.Usage({category:"Release-related commands",description:"check that all the relevant packages have been bumped",details:"\n **Warning:** This command currently requires Git.\n\n This command will check that all the packages covered by the files listed in argument have been properly bumped or declined to bump.\n\n In the case of a bump, the check will also cover transitive packages - meaning that should `Foo` be bumped, a package `Bar` depending on `Foo` will require a decision as to whether `Bar` will need to be bumped. This check doesn't cross packages that have declined to bump.\n\n In case no arguments are passed to the function, the list of modified files will be generated by comparing the HEAD against `master`.\n ",examples:[["Check whether the modified packages need a bump","yarn version check"]]});Ye();qt();var uF=$e(zn());var rg=class extends ut{constructor(){super(...arguments);this.deferred=ge.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=ge.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let u=uF.default.valid(this.strategy),A=this.strategy==="decline",p;if(u)if(a.manifest.version!==null){let E=WG(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!A){if(E===null)throw new it("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof E!="string"||!uF.default.valid(E))throw new it(`Can't bump the version (${E}) if it's not valid semver`)}p=pw(this.strategy)}if(!n){let I=(await qv(o)).get(a);if(typeof I<"u"&&p!=="decline"){let v=lF(a.manifest.version,p);if(uF.default.lt(v,I))throw new it(`Can't bump the version to one that would be lower than the current deferred one (${I})`)}}let h=await gw(o,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};rg.paths=[["version"]],rg.usage=nt.Usage({category:"Release-related commands",description:"apply a new version to the current package",details:"\n This command will bump the version number for the given package, following the specified strategy:\n\n - If `major`, the first number from the semver range will be increased (`X.0.0`).\n - If `minor`, the second number from the semver range will be increased (`0.X.0`).\n - If `patch`, the third number from the semver range will be increased (`0.0.X`).\n - If prefixed by `pre` (`premajor`, ...), a `-0` suffix will be set (`0.0.0-0`).\n - If `prerelease`, the suffix will be increased (`0.0.0-X`); the third number from the semver range will also be increased if there was no suffix in the previous version.\n - If `decline`, the nonce will be increased for `yarn version check` to pass without version bump.\n - If a valid semver range, it will be used as new version.\n - If unspecified, Yarn will ask you for guidance.\n\n For more information about the `--deferred` flag, consult our documentation (https://yarnpkg.com/features/release-workflow#deferred-versioning).\n ",examples:[["Immediately bump the version to the next major","yarn version major"],["Prepare the version to be bumped to the next major","yarn version major --deferred"]]});var JDt={configuration:{deferredVersionFolder:{description:"Folder where are stored the versioning files",type:"ABSOLUTE_PATH",default:"./.yarn/versions"},preferDeferredVersions:{description:"If true, running `yarn version` will assume the `--deferred` flag unless `--immediate` is set",type:"BOOLEAN",default:!1}},commands:[eg,tg,rg]},zDt=JDt;var JG={};Vt(JG,{WorkspacesFocusCommand:()=>ng,WorkspacesForeachCommand:()=>ap,default:()=>$Dt});Ye();Ye();qt();var ng=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=ge.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=ge.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let u;if(this.all)u=new Set(o.workspaces);else if(this.workspaces.length===0){if(!a)throw new rr(o.cwd,this.context.cwd);u=new Set([a])}else u=new Set(this.workspaces.map(A=>o.getWorkspaceByIdent(W.parseIdent(A))));for(let A of u)for(let p of this.production?["dependencies"]:Ot.hardDependencies)for(let h of A.manifest.getForScope(p).values()){let E=o.tryWorkspaceByDescriptor(h);E!==null&&u.add(E)}for(let A of o.workspaces)u.has(A)?this.production&&A.manifest.devDependencies.clear():(A.manifest.installConfig=A.manifest.installConfig||{},A.manifest.installConfig.selfReferences=!1,A.manifest.dependencies.clear(),A.manifest.devDependencies.clear(),A.manifest.peerDependencies.clear(),A.manifest.scripts.clear());return await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};ng.paths=[["workspaces","focus"]],ng.usage=nt.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "});Ye();Ye();Ye();qt();var mw=$e(Zo()),VBe=$e(id());Za();var ap=class extends ut{constructor(){super(...arguments);this.from=ge.Array("--from",{description:"An array of glob pattern idents or paths from which to base any recursion"});this.all=ge.Boolean("-A,--all",{description:"Run the command on all workspaces of a project"});this.recursive=ge.Boolean("-R,--recursive",{description:"Run the command on the current workspace and all of its recursive dependencies"});this.worktree=ge.Boolean("-W,--worktree",{description:"Run the command on all workspaces of the current worktree"});this.verbose=ge.Counter("-v,--verbose",{description:"Increase level of logging verbosity up to 2 times"});this.parallel=ge.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=ge.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=ge.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:TT([Ks(["unlimited"]),aI(RT(),[LT(),NT(1)])])});this.topological=ge.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=ge.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=ge.Array("--include",[],{description:"An array of glob pattern idents or paths; only matching workspaces will be traversed"});this.exclude=ge.Array("--exclude",[],{description:"An array of glob pattern idents or paths; matching workspaces won't be traversed"});this.publicOnly=ge.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.dryRun=ge.Boolean("-n,--dry-run",{description:"Print the commands that would be run, without actually running them"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!this.all&&!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),u=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new it("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let A=we=>{!this.dryRun||this.context.stdout.write(`${we} +`)},p=()=>{let we=this.from.map(g=>mw.default.matcher(g));return o.workspaces.filter(g=>{let Ee=W.stringifyIdent(g.anchoredLocator),Se=g.relativeCwd;return we.some(le=>le(Ee)||le(Se))})},h=[];if(this.since?(A("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ra.fetchChangedWorkspaces({ref:this.since,project:o}))):this.from?(A("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(A("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(A("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(A("Option --all is set; selecting all workspaces"),h=[...o.workspaces]),this.dryRun&&!this.all){for(let we of h)A(` +- ${we.relativeCwd} + ${W.prettyLocator(r,we.anchoredLocator)}`);h.length>0&&A("")}let E;if(this.recursive?this.since?(A("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(we=>[...we.getRecursiveWorkspaceDependents()]).flat())):(A("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(we=>[...we.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(A("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(we=>[...we.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let we of E)A(` +- ${we.relativeCwd} + ${W.prettyLocator(r,we.anchoredLocator)}`);let I=[],v=!1;if(u?.includes(":")){for(let we of o.workspaces)if(we.manifest.scripts.has(u)&&(v=!v,v===!1))break}for(let we of h){if(u&&!we.manifest.scripts.has(u)&&!v&&!(await un.getWorkspaceAccessibleBinaries(we)).has(u)){A(`Excluding ${we.relativeCwd} because it doesn't have a "${u}" script`);continue}if(!(u===r.env.npm_lifecycle_event&&we.cwd===a.cwd)){if(this.include.length>0&&!mw.default.isMatch(W.stringifyIdent(we.anchoredLocator),this.include)&&!mw.default.isMatch(we.relativeCwd,this.include)){A(`Excluding ${we.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(mw.default.isMatch(W.stringifyIdent(we.anchoredLocator),this.exclude)||mw.default.isMatch(we.relativeCwd,this.exclude))){A(`Excluding ${we.relativeCwd} because it matches the --include filter`);continue}if(this.publicOnly&&we.manifest.private===!0){A(`Excluding ${we.relativeCwd} because it's a private workspace and --no-private was set`);continue}I.push(we)}}if(this.dryRun)return 0;let x=this.verbose??(this.context.stdout.isTTY?1/0:0),C=x>0,R=x>1,L=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(Ji.availableParallelism()/2):1,U=L===1?!1:this.parallel,J=U?this.interlaced:!0,te=(0,VBe.default)(L),ae=new Map,fe=new Set,ce=0,me=null,he=!1,Be=await Nt.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async we=>{let g=async(Ee,{commandIndex:Se})=>{if(he)return-1;!U&&R&&Se>1&&we.reportSeparator();let le=XDt(Ee,{configuration:r,label:C,commandIndex:Se}),[ne,ee]=KBe(we,{prefix:le,interlaced:J}),[Ie,Fe]=KBe(we,{prefix:le,interlaced:J});try{R&&we.reportInfo(null,`${le?`${le} `:""}Process started`);let At=Date.now(),H=await this.cli.run([this.commandName,...this.args],{cwd:Ee.cwd,stdout:ne,stderr:Ie})||0;ne.end(),Ie.end(),await ee,await Fe;let at=Date.now();if(R){let Re=r.get("enableTimers")?`, completed in ${de.pretty(r,at-At,de.Type.DURATION)}`:"";we.reportInfo(null,`${le?`${le} `:""}Process exited (exit code ${H})${Re}`)}return H===130&&(he=!0,me=H),H}catch(At){throw ne.end(),Ie.end(),await ee,await Fe,At}};for(let Ee of I)ae.set(Ee.anchoredLocator.locatorHash,Ee);for(;ae.size>0&&!we.hasErrors();){let Ee=[];for(let[ne,ee]of ae){if(fe.has(ee.anchoredDescriptor.descriptorHash))continue;let Ie=!0;if(this.topological||this.topologicalDev){let Fe=this.topologicalDev?new Map([...ee.manifest.dependencies,...ee.manifest.devDependencies]):ee.manifest.dependencies;for(let At of Fe.values()){let H=o.tryWorkspaceByDescriptor(At);if(Ie=H===null||!ae.has(H.anchoredLocator.locatorHash),!Ie)break}}if(!!Ie&&(fe.add(ee.anchoredDescriptor.descriptorHash),Ee.push(te(async()=>{let Fe=await g(ee,{commandIndex:++ce});return ae.delete(ne),fe.delete(ee.anchoredDescriptor.descriptorHash),Fe})),!U))break}if(Ee.length===0){let ne=Array.from(ae.values()).map(ee=>W.prettyLocator(r,ee.anchoredLocator)).join(", ");we.reportError(3,`Dependency cycle detected (${ne})`);return}let le=(await Promise.all(Ee)).find(ne=>ne!==0);me===null&&(me=typeof le<"u"?1:me),(this.topological||this.topologicalDev)&&typeof le<"u"&&we.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return me!==null?me:Be.exitCode()}};ap.paths=[["workspaces","foreach"]],ap.usage=nt.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n The `-v,--verbose` flag can be passed up to twice: once to prefix output lines with the originating workspace's name, and again to include start/finish/timing log lines. Maximum verbosity is enabled by default in terminal environments.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish all packages","yarn workspaces foreach -A npm publish --tolerate-republish"],["Run the build script on all descendant packages","yarn workspaces foreach -A run build"],["Run the build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -Apt run build"],["Run the build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -Rpt --from '{workspace-a,workspace-b}' run build"]]}),ap.schema=[cI("all",Gu.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),OT(["all","recursive","since","worktree"],{missingIf:"undefined"})];function KBe(t,{prefix:e,interlaced:r}){let o=t.createStreamReporter(e),a=new _e.DefaultStream;a.pipe(o,{end:!1}),a.on("finish",()=>{o.end()});let n=new Promise(A=>{o.on("finish",()=>{A(a.active)})});if(r)return[a,n];let u=new _e.BufferStream;return u.pipe(a,{end:!1}),u.on("finish",()=>{a.end()}),[u,n]}function XDt(t,{configuration:e,commandIndex:r,label:o}){if(!o)return null;let n=`[${W.stringifyIdent(t.anchoredLocator)}]:`,u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[r%u.length];return de.pretty(e,n,A)}var ZDt={commands:[ng,ap]},$Dt=ZDt;var pC=()=>({modules:new Map([["@yarnpkg/cli",a2],["@yarnpkg/core",o2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",rI],["@yarnpkg/shell",T1],["clipanion",hI],["semver",eSt],["typanion",Vo],["@yarnpkg/plugin-essentials",$8],["@yarnpkg/plugin-compat",iH],["@yarnpkg/plugin-constraints",wH],["@yarnpkg/plugin-dlx",IH],["@yarnpkg/plugin-exec",DH],["@yarnpkg/plugin-file",PH],["@yarnpkg/plugin-git",Z8],["@yarnpkg/plugin-github",kH],["@yarnpkg/plugin-http",QH],["@yarnpkg/plugin-init",FH],["@yarnpkg/plugin-interactive-tools",Tq],["@yarnpkg/plugin-link",Nq],["@yarnpkg/plugin-nm",yj],["@yarnpkg/plugin-npm",dG],["@yarnpkg/plugin-npm-cli",DG],["@yarnpkg/plugin-pack",AG],["@yarnpkg/plugin-patch",FG],["@yarnpkg/plugin-pnp",oj],["@yarnpkg/plugin-pnpm",NG],["@yarnpkg/plugin-stage",qG],["@yarnpkg/plugin-typescript",jG],["@yarnpkg/plugin-version",VG],["@yarnpkg/plugin-workspace-tools",JG]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function XBe({cwd:t,pluginConfiguration:e}){let r=new as({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:rn??""});return Object.assign(r,{defaultContext:{...as.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function tSt(t){if(_e.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,o=">=18.12.0";if(kr.satisfiesWithPrereleases(r,o))return!0;let a=new it(`This tool requires a Node version compatible with ${o} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return as.defaultContext.stdout.write(t.error(a)),!1}async function ZBe({selfPath:t,pluginConfiguration:e}){return await Ke.find(ue.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function rSt(t,e,{yarnPath:r}){if(!oe.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let o={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,JBe.execFileSync)(process.execPath,[ue.fromPortablePath(r),...e],o)}catch(a){return a.status??1}return 0}function nSt(t,e){let r=null,o=e;return e.length>=2&&e[0]==="--cwd"?(r=ue.toPortablePath(e[1]),o=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=ue.toPortablePath(e[0].slice(6)),o=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=ue.toPortablePath(e[e.length-1]),o=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?V.resolve(r):V.cwd(),o}function iSt(t,{configuration:e}){if(!e.get("enableTelemetry")||zBe.isCI||!process.stdout.isTTY)return;Ke.telemetry=new uC(e,"puba9cdc10ec5790a2cf4969dd413a47270");let o=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())AC.has(a.match(o)?.[1]??"")&&Ke.telemetry?.reportPluginName(a);t.binaryVersion&&Ke.telemetry.reportVersion(t.binaryVersion)}function $Be(t,{configuration:e}){for(let r of e.plugins.values())for(let o of r.commands||[])t.register(o)}async function sSt(t,e,{selfPath:r,pluginConfiguration:o}){if(!tSt(t))return 1;let a=await ZBe({selfPath:r,pluginConfiguration:o}),n=a.get("yarnPath"),u=a.get("ignorePath");if(n&&!u)return rSt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let A=nSt(t,e);iSt(t,{configuration:a}),$Be(t,{configuration:a});let p=t.process(A,t.defaultContext);return p.help||Ke.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function $pe({cwd:t=V.cwd(),pluginConfiguration:e=pC()}={}){let r=XBe({cwd:t,pluginConfiguration:e}),o=await ZBe({pluginConfiguration:e,selfPath:null});return $Be(r,{configuration:o}),r}async function nk(t,{cwd:e=V.cwd(),selfPath:r,pluginConfiguration:o}){let a=XBe({cwd:e,pluginConfiguration:o});try{process.exitCode=await sSt(a,t,{selfPath:r,pluginConfiguration:o})}catch(n){as.defaultContext.stdout.write(a.error(n)),process.exitCode=1}finally{await oe.rmtempPromise()}}nk(process.argv.slice(2),{cwd:V.cwd(),selfPath:ue.toPortablePath(ue.resolve(process.argv[1])),pluginConfiguration:pC()});})(); /* object-assign (c) Sindre Sorhus diff --git a/.yarnrc.yml b/.yarnrc.yml index c95fb969c..98e638bd8 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -13,4 +13,4 @@ supportedArchitectures: - darwin - win32 -yarnPath: .yarn/releases/yarn-4.0.2.cjs +yarnPath: .yarn/releases/yarn-4.1.1.cjs diff --git a/package.json b/package.json index f8f7e1f05..68372cdb2 100644 --- a/package.json +++ b/package.json @@ -766,7 +766,7 @@ "ts-loader": "^9.5.1", "ts-node": "^10.9.2", "typescript": "^5.3.3", - "vscode-extension-tester": "^7.0.0", + "vscode-extension-tester": "^7.2.0", "warnings-to-errors-webpack-plugin": "^2.3.0", "webpack": "^5.90.0", "webpack-cli": "^5.1.4", @@ -830,7 +830,7 @@ "coverage-all": "TEST_LIGHTSPEED_URL='http://127.0.0.1:3000' yarn _coverage-all" }, "version": "2.13.0", - "packageManager": "yarn@4.0.2", + "packageManager": "yarn@4.1.1", "vsce": { "dependencies": false, "yarn": false diff --git a/yarn.lock b/yarn.lock index 3ff935d89..6ea9f2e1c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8,7 +8,7 @@ __metadata: "@aashutoshrathi/word-wrap@npm:^1.2.3": version: 1.2.6 resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" - checksum: 6eebd12a5cd03cee38fcb915ef9f4ea557df6a06f642dfc7fe8eb4839eb5c9ca55a382f3604d52c14200b0c214c12af5e1f23d2a6d8e23ef2d016b105a9d6c0a + checksum: 10/6eebd12a5cd03cee38fcb915ef9f4ea557df6a06f642dfc7fe8eb4839eb5c9ca55a382f3604d52c14200b0c214c12af5e1f23d2a6d8e23ef2d016b105a9d6c0a languageName: node linkType: hard @@ -18,7 +18,7 @@ __metadata: dependencies: "@jridgewell/gen-mapping": "npm:^0.3.0" "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: e15fecbf3b54c988c8b4fdea8ef514ab482537e8a080b2978cc4b47ccca7140577ca7b65ad3322dcce65bc73ee6e5b90cbfe0bbd8c766dad04d5c62ec9634c42 + checksum: 10/e15fecbf3b54c988c8b4fdea8ef514ab482537e8a080b2978cc4b47ccca7140577ca7b65ad3322dcce65bc73ee6e5b90cbfe0bbd8c766dad04d5c62ec9634c42 languageName: node linkType: hard @@ -69,14 +69,14 @@ __metadata: dependencies: "@babel/highlight": "npm:^7.23.4" chalk: "npm:^2.4.2" - checksum: 44e58529c9d93083288dc9e649c553c5ba997475a7b0758cc3ddc4d77b8a7d985dbe78cc39c9bbc61f26d50af6da1ddf0a3427eae8cc222a9370619b671ed8f5 + checksum: 10/44e58529c9d93083288dc9e649c553c5ba997475a7b0758cc3ddc4d77b8a7d985dbe78cc39c9bbc61f26d50af6da1ddf0a3427eae8cc222a9370619b671ed8f5 languageName: node linkType: hard "@babel/compat-data@npm:^7.23.5": version: 7.23.5 resolution: "@babel/compat-data@npm:7.23.5" - checksum: 088f14f646ecbddd5ef89f120a60a1b3389a50a9705d44603dca77662707d0175a5e0e0da3943c3298f1907a4ab871468656fbbf74bb7842cd8b0686b2c19736 + checksum: 10/088f14f646ecbddd5ef89f120a60a1b3389a50a9705d44603dca77662707d0175a5e0e0da3943c3298f1907a4ab871468656fbbf74bb7842cd8b0686b2c19736 languageName: node linkType: hard @@ -99,7 +99,7 @@ __metadata: gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 956841695ea801c8b4196d01072e6c1062335960715a6fcfd4009831003b526b00627c78b373ed49b1658c3622c71142f7ff04235fe839cac4a1a25ed51b90aa + checksum: 10/956841695ea801c8b4196d01072e6c1062335960715a6fcfd4009831003b526b00627c78b373ed49b1658c3622c71142f7ff04235fe839cac4a1a25ed51b90aa languageName: node linkType: hard @@ -111,7 +111,7 @@ __metadata: "@jridgewell/gen-mapping": "npm:^0.3.2" "@jridgewell/trace-mapping": "npm:^0.3.17" jsesc: "npm:^2.5.1" - checksum: 864090d5122c0aa3074471fd7b79d8a880c1468480cbd28925020a3dcc7eb6e98bedcdb38983df299c12b44b166e30915b8085a7bc126e68fa7e2aadc7bd1ac5 + checksum: 10/864090d5122c0aa3074471fd7b79d8a880c1468480cbd28925020a3dcc7eb6e98bedcdb38983df299c12b44b166e30915b8085a7bc126e68fa7e2aadc7bd1ac5 languageName: node linkType: hard @@ -124,14 +124,14 @@ __metadata: browserslist: "npm:^4.22.2" lru-cache: "npm:^5.1.1" semver: "npm:^6.3.1" - checksum: 05595cd73087ddcd81b82d2f3297aac0c0422858dfdded43d304786cf680ec33e846e2317e6992d2c964ee61d93945cbf1fa8ec80b55aee5bfb159227fb02cb9 + checksum: 10/05595cd73087ddcd81b82d2f3297aac0c0422858dfdded43d304786cf680ec33e846e2317e6992d2c964ee61d93945cbf1fa8ec80b55aee5bfb159227fb02cb9 languageName: node linkType: hard "@babel/helper-environment-visitor@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-environment-visitor@npm:7.22.20" - checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 + checksum: 10/d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 languageName: node linkType: hard @@ -141,7 +141,7 @@ __metadata: dependencies: "@babel/template": "npm:^7.22.15" "@babel/types": "npm:^7.23.0" - checksum: 7b2ae024cd7a09f19817daf99e0153b3bf2bc4ab344e197e8d13623d5e36117ed0b110914bc248faa64e8ccd3e97971ec7b41cc6fd6163a2b980220c58dcdf6d + checksum: 10/7b2ae024cd7a09f19817daf99e0153b3bf2bc4ab344e197e8d13623d5e36117ed0b110914bc248faa64e8ccd3e97971ec7b41cc6fd6163a2b980220c58dcdf6d languageName: node linkType: hard @@ -150,7 +150,7 @@ __metadata: resolution: "@babel/helper-hoist-variables@npm:7.22.5" dependencies: "@babel/types": "npm:^7.22.5" - checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc + checksum: 10/394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc languageName: node linkType: hard @@ -159,7 +159,7 @@ __metadata: resolution: "@babel/helper-module-imports@npm:7.22.15" dependencies: "@babel/types": "npm:^7.22.15" - checksum: 5ecf9345a73b80c28677cfbe674b9f567bb0d079e37dcba9055e36cb337db24ae71992a58e1affa9d14a60d3c69907d30fe1f80aea105184501750a58d15c81c + checksum: 10/5ecf9345a73b80c28677cfbe674b9f567bb0d079e37dcba9055e36cb337db24ae71992a58e1affa9d14a60d3c69907d30fe1f80aea105184501750a58d15c81c languageName: node linkType: hard @@ -174,7 +174,7 @@ __metadata: "@babel/helper-validator-identifier": "npm:^7.22.20" peerDependencies: "@babel/core": ^7.0.0 - checksum: 583fa580f8e50e6f45c4f46aa76a8e49c2528deb84e25f634d66461b9a0e2420e13979b0a607b67aef67eaf8db8668eb9edc038b4514b16e3879fe09e8fd294b + checksum: 10/583fa580f8e50e6f45c4f46aa76a8e49c2528deb84e25f634d66461b9a0e2420e13979b0a607b67aef67eaf8db8668eb9edc038b4514b16e3879fe09e8fd294b languageName: node linkType: hard @@ -183,7 +183,7 @@ __metadata: resolution: "@babel/helper-simple-access@npm:7.22.5" dependencies: "@babel/types": "npm:^7.22.5" - checksum: 7d5430eecf880937c27d1aed14245003bd1c7383ae07d652b3932f450f60bfcf8f2c1270c593ab063add185108d26198c69d1aca0e6fb7c6fdada4bcf72ab5b7 + checksum: 10/7d5430eecf880937c27d1aed14245003bd1c7383ae07d652b3932f450f60bfcf8f2c1270c593ab063add185108d26198c69d1aca0e6fb7c6fdada4bcf72ab5b7 languageName: node linkType: hard @@ -192,28 +192,28 @@ __metadata: resolution: "@babel/helper-split-export-declaration@npm:7.22.6" dependencies: "@babel/types": "npm:^7.22.5" - checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 + checksum: 10/e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 languageName: node linkType: hard "@babel/helper-string-parser@npm:^7.23.4": version: 7.23.4 resolution: "@babel/helper-string-parser@npm:7.23.4" - checksum: c352082474a2ee1d2b812bd116a56b2e8b38065df9678a32a535f151ec6f58e54633cc778778374f10544b930703cca6ddf998803888a636afa27e2658068a9c + checksum: 10/c352082474a2ee1d2b812bd116a56b2e8b38065df9678a32a535f151ec6f58e54633cc778778374f10544b930703cca6ddf998803888a636afa27e2658068a9c languageName: node linkType: hard "@babel/helper-validator-identifier@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-validator-identifier@npm:7.22.20" - checksum: df882d2675101df2d507b95b195ca2f86a3ef28cb711c84f37e79ca23178e13b9f0d8b522774211f51e40168bf5142be4c1c9776a150cddb61a0d5bf3e95750b + checksum: 10/df882d2675101df2d507b95b195ca2f86a3ef28cb711c84f37e79ca23178e13b9f0d8b522774211f51e40168bf5142be4c1c9776a150cddb61a0d5bf3e95750b languageName: node linkType: hard "@babel/helper-validator-option@npm:^7.23.5": version: 7.23.5 resolution: "@babel/helper-validator-option@npm:7.23.5" - checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e + checksum: 10/537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e languageName: node linkType: hard @@ -224,7 +224,7 @@ __metadata: "@babel/template": "npm:^7.22.15" "@babel/traverse": "npm:^7.23.7" "@babel/types": "npm:^7.23.6" - checksum: ec07061dc871d406ed82c8757c4d7a510aaf15145799fb0a2c3bd3c72ca101fe82a02dd5f83ca604fbbba5de5408dd731bb1452150562bed4f3b0a2846f81f61 + checksum: 10/ec07061dc871d406ed82c8757c4d7a510aaf15145799fb0a2c3bd3c72ca101fe82a02dd5f83ca604fbbba5de5408dd731bb1452150562bed4f3b0a2846f81f61 languageName: node linkType: hard @@ -235,7 +235,7 @@ __metadata: "@babel/helper-validator-identifier": "npm:^7.22.20" chalk: "npm:^2.4.2" js-tokens: "npm:^4.0.0" - checksum: 62fef9b5bcea7131df4626d009029b1ae85332042f4648a4ce6e740c3fd23112603c740c45575caec62f260c96b11054d3be5987f4981a5479793579c3aac71f + checksum: 10/62fef9b5bcea7131df4626d009029b1ae85332042f4648a4ce6e740c3fd23112603c740c45575caec62f260c96b11054d3be5987f4981a5479793579c3aac71f languageName: node linkType: hard @@ -244,7 +244,7 @@ __metadata: resolution: "@babel/parser@npm:7.23.6" bin: parser: ./bin/babel-parser.js - checksum: 6be3a63d3c9d07b035b5a79c022327cb7e16cbd530140ecb731f19a650c794c315a72c699a22413ebeafaff14aa8f53435111898d59e01a393d741b85629fa7d + checksum: 10/6be3a63d3c9d07b035b5a79c022327cb7e16cbd530140ecb731f19a650c794c315a72c699a22413ebeafaff14aa8f53435111898d59e01a393d741b85629fa7d languageName: node linkType: hard @@ -255,7 +255,7 @@ __metadata: "@babel/code-frame": "npm:^7.22.13" "@babel/parser": "npm:^7.22.15" "@babel/types": "npm:^7.22.15" - checksum: 21e768e4eed4d1da2ce5d30aa51db0f4d6d8700bc1821fec6292587df7bba2fe1a96451230de8c64b989740731888ebf1141138bfffb14cacccf4d05c66ad93f + checksum: 10/21e768e4eed4d1da2ce5d30aa51db0f4d6d8700bc1821fec6292587df7bba2fe1a96451230de8c64b989740731888ebf1141138bfffb14cacccf4d05c66ad93f languageName: node linkType: hard @@ -273,7 +273,7 @@ __metadata: "@babel/types": "npm:^7.23.6" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 3215e59429963c8dac85c26933372cdd322952aa9930e4bc5ef2d0e4bd7a1510d1ecf8f8fd860ace5d4d9fe496d23805a1ea019a86410aee4111de5f63ee84f9 + checksum: 10/3215e59429963c8dac85c26933372cdd322952aa9930e4bc5ef2d0e4bd7a1510d1ecf8f8fd860ace5d4d9fe496d23805a1ea019a86410aee4111de5f63ee84f9 languageName: node linkType: hard @@ -284,14 +284,14 @@ __metadata: "@babel/helper-string-parser": "npm:^7.23.4" "@babel/helper-validator-identifier": "npm:^7.22.20" to-fast-properties: "npm:^2.0.0" - checksum: 07e70bb94d30b0231396b5e9a7726e6d9227a0a62e0a6830c0bd3232f33b024092e3d5a7d1b096a65bbf2bb43a9ab4c721bf618e115bfbb87b454fa060f88cbf + checksum: 10/07e70bb94d30b0231396b5e9a7726e6d9227a0a62e0a6830c0bd3232f33b024092e3d5a7d1b096a65bbf2bb43a9ab4c721bf618e115bfbb87b454fa060f88cbf languageName: node linkType: hard "@colors/colors@npm:1.5.0": version: 1.5.0 resolution: "@colors/colors@npm:1.5.0" - checksum: 9d226461c1e91e95f067be2bdc5e6f99cfe55a721f45afb44122e23e4b8602eeac4ff7325af6b5a369f36396ee1514d3809af3f57769066d80d83790d8e53339 + checksum: 10/9d226461c1e91e95f067be2bdc5e6f99cfe55a721f45afb44122e23e4b8602eeac4ff7325af6b5a369f36396ee1514d3809af3f57769066d80d83790d8e53339 languageName: node linkType: hard @@ -300,14 +300,14 @@ __metadata: resolution: "@cspotcode/source-map-support@npm:0.8.1" dependencies: "@jridgewell/trace-mapping": "npm:0.3.9" - checksum: b6e38a1712fab242c86a241c229cf562195aad985d0564bd352ac404be583029e89e93028ffd2c251d2c407ecac5fb0cbdca94a2d5c10f29ac806ede0508b3ff + checksum: 10/b6e38a1712fab242c86a241c229cf562195aad985d0564bd352ac404be583029e89e93028ffd2c251d2c407ecac5fb0cbdca94a2d5c10f29ac806ede0508b3ff languageName: node linkType: hard "@discoveryjs/json-ext@npm:^0.5.0": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" - checksum: b95682a852448e8ef50d6f8e3b7ba288aab3fd98a2bafbe46881a3db0c6e7248a2debe9e1ee0d4137c521e4743ca5bbcb1c0765c9d7b3e0ef53231506fec42b4 + checksum: 10/b95682a852448e8ef50d6f8e3b7ba288aab3fd98a2bafbe46881a3db0c6e7248a2debe9e1ee0d4137c521e4743ca5bbcb1c0765c9d7b3e0ef53231506fec42b4 languageName: node linkType: hard @@ -318,14 +318,14 @@ __metadata: eslint-visitor-keys: "npm:^3.3.0" peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 8d70bcdcd8cd279049183aca747d6c2ed7092a5cf0cf5916faac1ef37ffa74f0c245c2a3a3d3b9979d9dfdd4ca59257b4c5621db699d637b847a2c5e02f491c2 + checksum: 10/8d70bcdcd8cd279049183aca747d6c2ed7092a5cf0cf5916faac1ef37ffa74f0c245c2a3a3d3b9979d9dfdd4ca59257b4c5621db699d637b847a2c5e02f491c2 languageName: node linkType: hard "@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": version: 4.10.0 resolution: "@eslint-community/regexpp@npm:4.10.0" - checksum: 8c36169c815fc5d726078e8c71a5b592957ee60d08c6470f9ce0187c8046af1a00afbda0a065cc40ff18d5d83f82aed9793c6818f7304a74a7488dc9f3ecbd42 + checksum: 10/8c36169c815fc5d726078e8c71a5b592957ee60d08c6470f9ce0187c8046af1a00afbda0a065cc40ff18d5d83f82aed9793c6818f7304a74a7488dc9f3ecbd42 languageName: node linkType: hard @@ -342,35 +342,35 @@ __metadata: js-yaml: "npm:^4.1.0" minimatch: "npm:^3.1.2" strip-json-comments: "npm:^3.1.1" - checksum: 7a3b14f4b40fc1a22624c3f84d9f467a3d9ea1ca6e9a372116cb92507e485260359465b58e25bcb6c9981b155416b98c9973ad9b796053fd7b3f776a6946bce8 + checksum: 10/7a3b14f4b40fc1a22624c3f84d9f467a3d9ea1ca6e9a372116cb92507e485260359465b58e25bcb6c9981b155416b98c9973ad9b796053fd7b3f776a6946bce8 languageName: node linkType: hard "@eslint/js@npm:8.56.0": version: 8.56.0 resolution: "@eslint/js@npm:8.56.0" - checksum: 97a4b5ccf7e24f4d205a1fb0f21cdcd610348ecf685f6798a48dd41ba443f2c1eedd3050ff5a0b8f30b8cf6501ab512aa9b76e531db15e59c9ebaa41f3162e37 + checksum: 10/97a4b5ccf7e24f4d205a1fb0f21cdcd610348ecf685f6798a48dd41ba443f2c1eedd3050ff5a0b8f30b8cf6501ab512aa9b76e531db15e59c9ebaa41f3162e37 languageName: node linkType: hard "@flatten-js/interval-tree@npm:^1.1.2": version: 1.1.2 resolution: "@flatten-js/interval-tree@npm:1.1.2" - checksum: 621fde63fbf6cd5c712df8c77a1cc1082b6c7274a68cba0430af7caf49d9ab17b3a63644336885a2e04d784b4dd1ebc286c0caa6d439e96ac02a0154daec15b1 + checksum: 10/621fde63fbf6cd5c712df8c77a1cc1082b6c7274a68cba0430af7caf49d9ab17b3a63644336885a2e04d784b4dd1ebc286c0caa6d439e96ac02a0154daec15b1 languageName: node linkType: hard "@gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" - checksum: 052dd232140fa60e81588000cbe729a40146579b361f1070bce63e2a761388a22a16d00beeffc504bd3601cb8e055c57b21a185448b3ed550cf50716f4fd442e + checksum: 10/052dd232140fa60e81588000cbe729a40146579b361f1070bce63e2a761388a22a16d00beeffc504bd3601cb8e055c57b21a185448b3ed550cf50716f4fd442e languageName: node linkType: hard "@hapi/hoek@npm:^9.0.0, @hapi/hoek@npm:^9.3.0": version: 9.3.0 resolution: "@hapi/hoek@npm:9.3.0" - checksum: ad83a223787749f3873bce42bd32a9a19673765bf3edece0a427e138859ff729469e68d5fdf9ff6bbee6fb0c8e21bab61415afa4584f527cfc40b59ea1957e70 + checksum: 10/ad83a223787749f3873bce42bd32a9a19673765bf3edece0a427e138859ff729469e68d5fdf9ff6bbee6fb0c8e21bab61415afa4584f527cfc40b59ea1957e70 languageName: node linkType: hard @@ -379,7 +379,7 @@ __metadata: resolution: "@hapi/topo@npm:5.1.0" dependencies: "@hapi/hoek": "npm:^9.0.0" - checksum: 084bfa647015f4fd3fdd51fadb2747d09ef2f5e1443d6cbada2988b0c88494f85edf257ec606c790db146ac4e34ff57f3fcb22e3299b8e06ed5c87ba7583495c + checksum: 10/084bfa647015f4fd3fdd51fadb2747d09ef2f5e1443d6cbada2988b0c88494f85edf257ec606c790db146ac4e34ff57f3fcb22e3299b8e06ed5c87ba7583495c languageName: node linkType: hard @@ -390,21 +390,21 @@ __metadata: "@humanwhocodes/object-schema": "npm:^2.0.1" debug: "npm:^4.1.1" minimatch: "npm:^3.0.5" - checksum: 9f655e1df7efa5a86822cd149ca5cef57240bb8ffd728f0c07cc682cc0a15c6bdce68425fbfd58f9b3e8b16f79b3fd8cb1e96b10c434c9a76f20b2a89f213272 + checksum: 10/9f655e1df7efa5a86822cd149ca5cef57240bb8ffd728f0c07cc682cc0a15c6bdce68425fbfd58f9b3e8b16f79b3fd8cb1e96b10c434c9a76f20b2a89f213272 languageName: node linkType: hard "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: e993950e346331e5a32eefb27948ecdee2a2c4ab3f072b8f566cd213ef485dd50a3ca497050608db91006f5479e43f91a439aef68d2a313bd3ded06909c7c5b3 + checksum: 10/e993950e346331e5a32eefb27948ecdee2a2c4ab3f072b8f566cd213ef485dd50a3ca497050608db91006f5479e43f91a439aef68d2a313bd3ded06909c7c5b3 languageName: node linkType: hard "@humanwhocodes/object-schema@npm:^2.0.1": version: 2.0.1 resolution: "@humanwhocodes/object-schema@npm:2.0.1" - checksum: dbddfd0465aecf92ed845ec30d06dba3f7bb2496d544b33b53dac7abc40370c0e46b8787b268d24a366730d5eeb5336ac88967232072a183905ee4abf7df4dab + checksum: 10/dbddfd0465aecf92ed845ec30d06dba3f7bb2496d544b33b53dac7abc40370c0e46b8787b268d24a366730d5eeb5336ac88967232072a183905ee4abf7df4dab languageName: node linkType: hard @@ -418,7 +418,7 @@ __metadata: strip-ansi-cjs: "npm:strip-ansi@^6.0.1" wrap-ansi: "npm:^8.1.0" wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: e9ed5fd27c3aec1095e3a16e0c0cf148d1fee55a38665c35f7b3f86a9b5d00d042ddaabc98e8a1cb7463b9378c15f22a94eb35e99469c201453eb8375191f243 + checksum: 10/e9ed5fd27c3aec1095e3a16e0c0cf148d1fee55a38665c35f7b3f86a9b5d00d042ddaabc98e8a1cb7463b9378c15f22a94eb35e99469c201453eb8375191f243 languageName: node linkType: hard @@ -431,14 +431,14 @@ __metadata: get-package-type: "npm:^0.1.0" js-yaml: "npm:^3.13.1" resolve-from: "npm:^5.0.0" - checksum: b000a5acd8d4fe6e34e25c399c8bdbb5d3a202b4e10416e17bfc25e12bab90bb56d33db6089ae30569b52686f4b35ff28ef26e88e21e69821d2b85884bd055b8 + checksum: 10/b000a5acd8d4fe6e34e25c399c8bdbb5d3a202b4e10416e17bfc25e12bab90bb56d33db6089ae30569b52686f4b35ff28ef26e88e21e69821d2b85884bd055b8 languageName: node linkType: hard "@istanbuljs/schema@npm:^0.1.2": version: 0.1.3 resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: a9b1e49acdf5efc2f5b2359f2df7f90c5c725f2656f16099e8b2cd3a000619ecca9fc48cf693ba789cf0fd989f6e0df6a22bc05574be4223ecdbb7997d04384b + checksum: 10/a9b1e49acdf5efc2f5b2359f2df7f90c5c725f2656f16099e8b2cd3a000619ecca9fc48cf693ba789cf0fd989f6e0df6a22bc05574be4223ecdbb7997d04384b languageName: node linkType: hard @@ -449,21 +449,21 @@ __metadata: "@jridgewell/set-array": "npm:^1.0.1" "@jridgewell/sourcemap-codec": "npm:^1.4.10" "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 072ace159c39ab85944bdabe017c3de15c5e046a4a4a772045b00ff05e2ebdcfa3840b88ae27e897d473eb4d4845b37be3c78e28910c779f5aeeeae2fb7f0cc2 + checksum: 10/072ace159c39ab85944bdabe017c3de15c5e046a4a4a772045b00ff05e2ebdcfa3840b88ae27e897d473eb4d4845b37be3c78e28910c779f5aeeeae2fb7f0cc2 languageName: node linkType: hard "@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.1 resolution: "@jridgewell/resolve-uri@npm:3.1.1" - checksum: 64d59df8ae1a4e74315eb1b61e012f1c7bc8aac47a3a1e683f6fe7008eab07bc512a742b7aa7c0405685d1421206de58c9c2e6adbfe23832f8bd69408ffc183e + checksum: 10/64d59df8ae1a4e74315eb1b61e012f1c7bc8aac47a3a1e683f6fe7008eab07bc512a742b7aa7c0405685d1421206de58c9c2e6adbfe23832f8bd69408ffc183e languageName: node linkType: hard "@jridgewell/set-array@npm:^1.0.1": version: 1.1.2 resolution: "@jridgewell/set-array@npm:1.1.2" - checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + checksum: 10/69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e languageName: node linkType: hard @@ -473,14 +473,14 @@ __metadata: dependencies: "@jridgewell/gen-mapping": "npm:^0.3.0" "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 73838ac43235edecff5efc850c0d759704008937a56b1711b28c261e270fe4bf2dc06d0b08663aeb1ab304f81f6de4f5fb844344403cf53ba7096967a9953cae + checksum: 10/73838ac43235edecff5efc850c0d759704008937a56b1711b28c261e270fe4bf2dc06d0b08663aeb1ab304f81f6de4f5fb844344403cf53ba7096967a9953cae languageName: node linkType: hard "@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: 89960ac087781b961ad918978975bcdf2051cd1741880469783c42de64239703eab9db5230d776d8e6a09d73bb5e4cb964e07d93ee6e2e7aea5a7d726e865c09 + checksum: 10/89960ac087781b961ad918978975bcdf2051cd1741880469783c42de64239703eab9db5230d776d8e6a09d73bb5e4cb964e07d93ee6e2e7aea5a7d726e865c09 languageName: node linkType: hard @@ -490,7 +490,7 @@ __metadata: dependencies: "@jridgewell/resolve-uri": "npm:^3.0.3" "@jridgewell/sourcemap-codec": "npm:^1.4.10" - checksum: 83deafb8e7a5ca98993c2c6eeaa93c270f6f647a4c0dc00deb38c9cf9b2d3b7bf15e8839540155247ef034a052c0ec4466f980bf0c9e2ab63b97d16c0cedd3ff + checksum: 10/83deafb8e7a5ca98993c2c6eeaa93c270f6f647a4c0dc00deb38c9cf9b2d3b7bf15e8839540155247ef034a052c0ec4466f980bf0c9e2ab63b97d16c0cedd3ff languageName: node linkType: hard @@ -500,14 +500,14 @@ __metadata: dependencies: "@jridgewell/resolve-uri": "npm:^3.1.0" "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 683117e4e6707ef50c725d6d0ec4234687ff751f36fa46c2b3068931eb6a86b49af374d3030200777666579a992b7470d1bd1c591e9bf64d764dda5295f33093 + checksum: 10/683117e4e6707ef50c725d6d0ec4234687ff751f36fa46c2b3068931eb6a86b49af374d3030200777666579a992b7470d1bd1c591e9bf64d764dda5295f33093 languageName: node linkType: hard "@lukeed/csprng@npm:^1.1.0": version: 1.1.0 resolution: "@lukeed/csprng@npm:1.1.0" - checksum: 926f5f7fc629470ca9a8af355bfcd0271d34535f7be3890f69902432bddc3262029bb5dbe9025542cf6c9883d878692eef2815fc2f3ba5b92e9da1f9eba2e51b + checksum: 10/926f5f7fc629470ca9a8af355bfcd0271d34535f7be3890f69902432bddc3262029bb5dbe9025542cf6c9883d878692eef2815fc2f3ba5b92e9da1f9eba2e51b languageName: node linkType: hard @@ -516,14 +516,14 @@ __metadata: resolution: "@lukeed/uuid@npm:2.0.1" dependencies: "@lukeed/csprng": "npm:^1.1.0" - checksum: f5e71e4da852dbff49b93cad27d5a2f61c2241e307bbe89b3b54b889ecb7927f2487246467f90ebb6cbdb7e0ac2a213e2e58b1182cb7990cef6e049aa7c39e7b + checksum: 10/f5e71e4da852dbff49b93cad27d5a2f61c2241e307bbe89b3b54b889ecb7927f2487246467f90ebb6cbdb7e0ac2a213e2e58b1182cb7990cef6e049aa7c39e7b languageName: node linkType: hard "@microsoft/fast-element@npm:^1.12.0": version: 1.12.0 resolution: "@microsoft/fast-element@npm:1.12.0" - checksum: 57ac8198a735b0f638f618019bfd0572f357bb80e2d5f1d7e07febe9d2f976c1fb5f069ba870c0f00b3312789455007e2691a72872ddf96c748adc522eb74878 + checksum: 10/57ac8198a735b0f638f618019bfd0572f357bb80e2d5f1d7e07febe9d2f976c1fb5f069ba870c0f00b3312789455007e2691a72872ddf96c748adc522eb74878 languageName: node linkType: hard @@ -535,7 +535,7 @@ __metadata: "@microsoft/fast-web-utilities": "npm:^5.4.1" tabbable: "npm:^5.2.0" tslib: "npm:^1.13.0" - checksum: 338e313c8e61f2c20634e9513fc80333be506873d5cbb7d152748175bb09f5aa1eb3584ed6d0c606598702021d8cda7e42b95e52ece3fae67b35a0aed4d60aa8 + checksum: 10/338e313c8e61f2c20634e9513fc80333be506873d5cbb7d152748175bb09f5aa1eb3584ed6d0c606598702021d8cda7e42b95e52ece3fae67b35a0aed4d60aa8 languageName: node linkType: hard @@ -547,7 +547,7 @@ __metadata: "@microsoft/fast-foundation": "npm:^2.49.4" peerDependencies: react: ">=16.9.0" - checksum: 5710431801ca4c427990b363fef5beb189483b212a1ad5df8f012b50a608a1996ba30bda420b0d69b61aac3e4147cc534345fcb70c4a57106a666acfe2f4b958 + checksum: 10/5710431801ca4c427990b363fef5beb189483b212a1ad5df8f012b50a608a1996ba30bda420b0d69b61aac3e4147cc534345fcb70c4a57106a666acfe2f4b958 languageName: node linkType: hard @@ -556,7 +556,7 @@ __metadata: resolution: "@microsoft/fast-web-utilities@npm:5.4.1" dependencies: exenv-es6: "npm:^1.1.1" - checksum: 5a64aa8d7adb471bde35c073d0e90846e66f4f6d51917ee3bd0267eaed61befedd3c16ecff1e591e83e9609a1b286ff0f5c3239f4700d92918e7a39bd05b8208 + checksum: 10/5a64aa8d7adb471bde35c073d0e90846e66f4f6d51917ee3bd0267eaed61befedd3c16ecff1e591e83e9609a1b286ff0f5c3239f4700d92918e7a39bd05b8208 languageName: node linkType: hard @@ -568,14 +568,14 @@ __metadata: ajv: "npm:~6.12.6" jju: "npm:~1.4.0" resolve: "npm:~1.19.0" - checksum: 37fc35d83dab66771502165fad6a8380ec6d47e0fdaadcb60c09792e5b8172feea42f327ebf4e6026c3b22448e5e73d9ee53948a2d877ee00257679b162f3490 + checksum: 10/37fc35d83dab66771502165fad6a8380ec6d47e0fdaadcb60c09792e5b8172feea42f327ebf4e6026c3b22448e5e73d9ee53948a2d877ee00257679b162f3490 languageName: node linkType: hard "@microsoft/tsdoc@npm:0.14.2": version: 0.14.2 resolution: "@microsoft/tsdoc@npm:0.14.2" - checksum: 00c3d4fc184e8e09e17aef57e4a990402bd9752607a5d50bd62a9e85bc4b8791c985a51e238affa6b9a2d23110f24d373becbfc84e1e6e9a84cf977822e3b00a + checksum: 10/00c3d4fc184e8e09e17aef57e4a990402bd9752607a5d50bd62a9e85bc4b8791c985a51e238affa6b9a2d23110f24d373becbfc84e1e6e9a84cf977822e3b00a languageName: node linkType: hard @@ -585,14 +585,14 @@ __metadata: dependencies: "@nodelib/fs.stat": "npm:2.0.5" run-parallel: "npm:^1.1.9" - checksum: 6ab2a9b8a1d67b067922c36f259e3b3dfd6b97b219c540877a4944549a4d49ea5ceba5663905ab5289682f1f3c15ff441d02f0447f620a42e1cb5e1937174d4b + checksum: 10/6ab2a9b8a1d67b067922c36f259e3b3dfd6b97b219c540877a4944549a4d49ea5ceba5663905ab5289682f1f3c15ff441d02f0447f620a42e1cb5e1937174d4b languageName: node linkType: hard "@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": version: 2.0.5 resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + checksum: 10/012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 languageName: node linkType: hard @@ -602,7 +602,7 @@ __metadata: dependencies: "@nodelib/fs.scandir": "npm:2.1.5" fastq: "npm:^1.6.0" - checksum: 40033e33e96e97d77fba5a238e4bba4487b8284678906a9f616b5579ddaf868a18874c0054a75402c9fbaaa033a25ceae093af58c9c30278e35c23c9479e79b0 + checksum: 10/40033e33e96e97d77fba5a238e4bba4487b8284678906a9f616b5579ddaf868a18874c0054a75402c9fbaaa033a25ceae093af58c9c30278e35c23c9479e79b0 languageName: node linkType: hard @@ -615,7 +615,7 @@ __metadata: https-proxy-agent: "npm:^7.0.1" lru-cache: "npm:^10.0.1" socks-proxy-agent: "npm:^8.0.1" - checksum: 822ea077553cd9cfc5cbd6d92380b0950fcb054a7027cd1b63a33bd0cbb16b0c6626ea75d95ec0e804643c8904472d3361d2da8c2444b1fb02a9b525d9c07c41 + checksum: 10/822ea077553cd9cfc5cbd6d92380b0950fcb054a7027cd1b63a33bd0cbb16b0c6626ea75d95ec0e804643c8904472d3361d2da8c2444b1fb02a9b525d9c07c41 languageName: node linkType: hard @@ -625,7 +625,7 @@ __metadata: dependencies: "@gar/promisify": "npm:^1.1.3" semver: "npm:^7.3.5" - checksum: c5d4dfee80de2236e1e4ed595d17e217aada72ebd8215183fc46096fa010f583dd2aaaa486758de7cc0b89440dbc31cfe8b276269d75d47af35c716e896f78ec + checksum: 10/c5d4dfee80de2236e1e4ed595d17e217aada72ebd8215183fc46096fa010f583dd2aaaa486758de7cc0b89440dbc31cfe8b276269d75d47af35c716e896f78ec languageName: node linkType: hard @@ -634,7 +634,7 @@ __metadata: resolution: "@npmcli/fs@npm:3.1.0" dependencies: semver: "npm:^7.3.5" - checksum: f3a7ab3a31de65e42aeb6ed03ed035ef123d2de7af4deb9d4a003d27acc8618b57d9fb9d259fe6c28ca538032a028f37337264388ba27d26d37fff7dde22476e + checksum: 10/f3a7ab3a31de65e42aeb6ed03ed035ef123d2de7af4deb9d4a003d27acc8618b57d9fb9d259fe6c28ca538032a028f37337264388ba27d26d37fff7dde22476e languageName: node linkType: hard @@ -650,7 +650,7 @@ __metadata: promise-retry: "npm:^2.0.1" semver: "npm:^7.3.5" which: "npm:^3.0.0" - checksum: 33512ce12758d67c0322eca25019c4d5ef03e83f5829e09a05389af485bab216cc4df408b8eba98f2d12c119c6dff84f0d8ff25a1ac5d8a46184e55ae8f53754 + checksum: 10/33512ce12758d67c0322eca25019c4d5ef03e83f5829e09a05389af485bab216cc4df408b8eba98f2d12c119c6dff84f0d8ff25a1ac5d8a46184e55ae8f53754 languageName: node linkType: hard @@ -662,7 +662,7 @@ __metadata: npm-normalize-package-bin: "npm:^3.0.0" bin: installed-package-contents: lib/index.js - checksum: 4598a97e3d6e4c8602157d9ac47723071f09662852add0f275af62d1038d8e44d0c5ff9afa05358ba3ca7e100c860d679964be0a163add6ea028dc72d31f0af1 + checksum: 10/4598a97e3d6e4c8602157d9ac47723071f09662852add0f275af62d1038d8e44d0c5ff9afa05358ba3ca7e100c860d679964be0a163add6ea028dc72d31f0af1 languageName: node linkType: hard @@ -672,14 +672,14 @@ __metadata: dependencies: mkdirp: "npm:^1.0.4" rimraf: "npm:^3.0.2" - checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 + checksum: 10/52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 languageName: node linkType: hard "@npmcli/node-gyp@npm:^3.0.0": version: 3.0.0 resolution: "@npmcli/node-gyp@npm:3.0.0" - checksum: dd9fed3e80df8fbb20443f28651a8ed7235f2c15286ecc010e2d3cd392c85912e59ef29218c0b02f098defb4cbc8cdf045aab1d32d5cef6ace289913196ed5df + checksum: 10/dd9fed3e80df8fbb20443f28651a8ed7235f2c15286ecc010e2d3cd392c85912e59ef29218c0b02f098defb4cbc8cdf045aab1d32d5cef6ace289913196ed5df languageName: node linkType: hard @@ -688,7 +688,7 @@ __metadata: resolution: "@npmcli/promise-spawn@npm:6.0.2" dependencies: which: "npm:^3.0.0" - checksum: cc94a83ff1626ad93d42c2ea583dba1fb2d24cdab49caf0af77a3a0ff9bdbba34e09048b6821d4060ea7a58d4a41d49bece4ae3716929e2077c2fff0f5e94d94 + checksum: 10/cc94a83ff1626ad93d42c2ea583dba1fb2d24cdab49caf0af77a3a0ff9bdbba34e09048b6821d4060ea7a58d4a41d49bece4ae3716929e2077c2fff0f5e94d94 languageName: node linkType: hard @@ -701,28 +701,28 @@ __metadata: node-gyp: "npm:^9.0.0" read-package-json-fast: "npm:^3.0.0" which: "npm:^3.0.0" - checksum: 9b22c4c53d4b2e014e7f990cf2e1d32d1830c5629d37a4ee56011bcdfb51424ca8dc3fb3fa550b4abe7e8f0efdd68468d733b754db371b06a5dd300663cf13a2 + checksum: 10/9b22c4c53d4b2e014e7f990cf2e1d32d1830c5629d37a4ee56011bcdfb51424ca8dc3fb3fa550b4abe7e8f0efdd68468d733b754db371b06a5dd300663cf13a2 languageName: node linkType: hard "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 115e8ceeec6bc69dff2048b35c0ab4f8bbee12d8bb6c1f4af758604586d802b6e669dcb02dda61d078de42c2b4ddce41b3d9e726d7daa6b4b850f4adbf7333ff + checksum: 10/115e8ceeec6bc69dff2048b35c0ab4f8bbee12d8bb6c1f4af758604586d802b6e669dcb02dda61d078de42c2b4ddce41b3d9e726d7daa6b4b850f4adbf7333ff languageName: node linkType: hard "@pkgr/core@npm:^0.1.0": version: 0.1.0 resolution: "@pkgr/core@npm:0.1.0" - checksum: eeff0e0e517b1ed10eb4c1a8971413a8349bbfdab727dbe7d4085fd94eab95f0c3beb51b9245fef30562849d2a7a119e07ca48c343c8c4ec4e64ee289f50fe5e + checksum: 10/eeff0e0e517b1ed10eb4c1a8971413a8349bbfdab727dbe7d4085fd94eab95f0c3beb51b9245fef30562849d2a7a119e07ca48c343c8c4ec4e64ee289f50fe5e languageName: node linkType: hard "@pnpm/config.env-replace@npm:^1.1.0": version: 1.1.0 resolution: "@pnpm/config.env-replace@npm:1.1.0" - checksum: fabe35cede1b72ad12877b8bed32f7c2fcd89e94408792c4d69009b886671db7988a2132bc18b7157489d2d0fd4266a06c9583be3d2e10c847bf06687420cb2a + checksum: 10/fabe35cede1b72ad12877b8bed32f7c2fcd89e94408792c4d69009b886671db7988a2132bc18b7157489d2d0fd4266a06c9583be3d2e10c847bf06687420cb2a languageName: node linkType: hard @@ -731,7 +731,7 @@ __metadata: resolution: "@pnpm/network.ca-file@npm:1.0.2" dependencies: graceful-fs: "npm:4.2.10" - checksum: d8d0884646500576bd5390464d13db1bb9a62e32a1069293e5bddb2ad8354b354b7e2d2a35e12850025651e795e6a80ce9e601c66312504667b7e3ee7b52becc + checksum: 10/d8d0884646500576bd5390464d13db1bb9a62e32a1069293e5bddb2ad8354b354b7e2d2a35e12850025651e795e6a80ce9e601c66312504667b7e3ee7b52becc languageName: node linkType: hard @@ -742,7 +742,7 @@ __metadata: "@pnpm/config.env-replace": "npm:^1.1.0" "@pnpm/network.ca-file": "npm:^1.0.1" config-chain: "npm:^1.1.11" - checksum: 45422fecc7ed49e5254eef744576625e27cdebccce930f42c66cf2fb70443fc24f506c3fcf4859e6371677ceb144feb45e925ec14774b54588b89806b32dea9a + checksum: 10/45422fecc7ed49e5254eef744576625e27cdebccce930f42c66cf2fb70443fc24f506c3fcf4859e6371677ceb144feb45e925ec14774b54588b89806b32dea9a languageName: node linkType: hard @@ -759,7 +759,7 @@ __metadata: picomatch: "npm:^2.3.1" ua-parser-js: "npm:1.0.33" uuid: "npm:^9.0.0" - checksum: b2e96f82d6b5db7bbe2020601cf8e2c1c1cc59ad4277d1329f8128dc00334f638ca3cdf696bf93eb030a982b6c964f0cb577be299cfdd3ac570e881d1f1ea6d7 + checksum: 10/b2e96f82d6b5db7bbe2020601cf8e2c1c1cc59ad4277d1329f8128dc00334f638ca3cdf696bf93eb030a982b6c964f0cb577be299cfdd3ac570e881d1f1ea6d7 languageName: node linkType: hard @@ -770,7 +770,7 @@ __metadata: "@lukeed/uuid": "npm:^2.0.0" dset: "npm:^3.1.2" tslib: "npm:^2.4.1" - checksum: 7d41c9a56b7a7b142e774e3295a972ea16a3340890742a4b927fa69ddd4de3283496b62a7de8d3f20d86d829ad246106f8fa9e81569a72b10ce3e4dfa79cf356 + checksum: 10/7d41c9a56b7a7b142e774e3295a972ea16a3340890742a4b927fa69ddd4de3283496b62a7de8d3f20d86d829ad246106f8fa9e81569a72b10ce3e4dfa79cf356 languageName: node linkType: hard @@ -782,7 +782,7 @@ __metadata: "@segment/analytics-core": "npm:1.2.1" node-fetch: "npm:^2.6.7" tslib: "npm:^2.4.1" - checksum: c2439a88c47ebd9162ab1406162b56ba38066d034f6731ea7c8c3ac4d7bb250abef645132fa38a0c1a50502a49aa16b0d668edb7b090fb98f36ebca00f22f83a + checksum: 10/c2439a88c47ebd9162ab1406162b56ba38066d034f6731ea7c8c3ac4d7bb250abef645132fa38a0c1a50502a49aa16b0d668edb7b090fb98f36ebca00f22f83a languageName: node linkType: hard @@ -791,21 +791,21 @@ __metadata: resolution: "@sideway/address@npm:4.1.5" dependencies: "@hapi/hoek": "npm:^9.0.0" - checksum: c4c73ac0339504f34e016d3a687118e7ddf197c1c968579572123b67b230be84caa705f0f634efdfdde7f2e07a6e0224b3c70665dc420d8bc95bf400cfc4c998 + checksum: 10/c4c73ac0339504f34e016d3a687118e7ddf197c1c968579572123b67b230be84caa705f0f634efdfdde7f2e07a6e0224b3c70665dc420d8bc95bf400cfc4c998 languageName: node linkType: hard "@sideway/formula@npm:^3.0.1": version: 3.0.1 resolution: "@sideway/formula@npm:3.0.1" - checksum: 8d3ee7f80df4e5204b2cbe92a2a711ca89684965a5c9eb3b316b7051212d3522e332a65a0bb2a07cc708fcd1d0b27fcb30f43ff0bcd5089d7006c7160a89eefe + checksum: 10/8d3ee7f80df4e5204b2cbe92a2a711ca89684965a5c9eb3b316b7051212d3522e332a65a0bb2a07cc708fcd1d0b27fcb30f43ff0bcd5089d7006c7160a89eefe languageName: node linkType: hard "@sideway/pinpoint@npm:^2.0.0": version: 2.0.0 resolution: "@sideway/pinpoint@npm:2.0.0" - checksum: 1ed21800128b2b23280ba4c9db26c8ff6142b97a8683f17639fd7f2128aa09046461574800b30fb407afc5b663c2331795ccf3b654d4b38fa096e41a5c786bf8 + checksum: 10/1ed21800128b2b23280ba4c9db26c8ff6142b97a8683f17639fd7f2128aa09046461574800b30fb407afc5b663c2331795ccf3b654d4b38fa096e41a5c786bf8 languageName: node linkType: hard @@ -814,14 +814,14 @@ __metadata: resolution: "@sigstore/bundle@npm:1.1.0" dependencies: "@sigstore/protobuf-specs": "npm:^0.2.0" - checksum: 79e6cc4cc1858bccbd852dee85d95c66c891b109ea415d5b7b00b6d73791c4f6064c40d09b5aa3f9ec6c19b3145c5cfeece02302f912c186ff0a769667bb9491 + checksum: 10/79e6cc4cc1858bccbd852dee85d95c66c891b109ea415d5b7b00b6d73791c4f6064c40d09b5aa3f9ec6c19b3145c5cfeece02302f912c186ff0a769667bb9491 languageName: node linkType: hard "@sigstore/protobuf-specs@npm:^0.2.0": version: 0.2.1 resolution: "@sigstore/protobuf-specs@npm:0.2.1" - checksum: cb0b9d9b3ef44a9f1729d85616c5d7c2ebccde303836a5a345ec33a500c7bd5205ffcc31332e0a90831cccc581dafbdf5b868f050c84270c8df6a4a6f2ce0bcb + checksum: 10/cb0b9d9b3ef44a9f1729d85616c5d7c2ebccde303836a5a345ec33a500c7bd5205ffcc31332e0a90831cccc581dafbdf5b868f050c84270c8df6a4a6f2ce0bcb languageName: node linkType: hard @@ -832,7 +832,7 @@ __metadata: "@sigstore/bundle": "npm:^1.1.0" "@sigstore/protobuf-specs": "npm:^0.2.0" make-fetch-happen: "npm:^11.0.1" - checksum: 44f23fc5eef5b160c0c36c6b19863039bbf375834eeca1ce7f711c82eb5a022174a475f0c06594f17732473c6878f2512f37e65949b7d33af3b2e2773f1bd34f + checksum: 10/44f23fc5eef5b160c0c36c6b19863039bbf375834eeca1ce7f711c82eb5a022174a475f0c06594f17732473c6878f2512f37e65949b7d33af3b2e2773f1bd34f languageName: node linkType: hard @@ -842,14 +842,14 @@ __metadata: dependencies: "@sigstore/protobuf-specs": "npm:^0.2.0" tuf-js: "npm:^1.1.7" - checksum: 5aa1cdea05fabb78232f802821f7e8ee9db3352719b325f2f703f940aac75fc2e71d89cfbd3623ef6b0429e125a5c6145c1fc8ede8d3d5af3affcb71c6453c7b + checksum: 10/5aa1cdea05fabb78232f802821f7e8ee9db3352719b325f2f703f940aac75fc2e71d89cfbd3623ef6b0429e125a5c6145c1fc8ede8d3d5af3affcb71c6453c7b languageName: node linkType: hard "@sindresorhus/is@npm:^5.2.0": version: 5.6.0 resolution: "@sindresorhus/is@npm:5.6.0" - checksum: b077c325acec98e30f7d86df158aaba2e7af2acb9bb6a00fda4b91578539fbff4ecebe9b934e24fec0e6950de3089d89d79ec02d9062476b20ce185be0e01bd6 + checksum: 10/b077c325acec98e30f7d86df158aaba2e7af2acb9bb6a00fda4b91578539fbff4ecebe9b934e24fec0e6950de3089d89d79ec02d9062476b20ce185be0e01bd6 languageName: node linkType: hard @@ -858,7 +858,7 @@ __metadata: resolution: "@sinonjs/commons@npm:2.0.0" dependencies: type-detect: "npm:4.0.8" - checksum: bd6b44957077cd99067dcf401e80ed5ea03ba930cba2066edbbfe302d5fc973a108db25c0ae4930ee53852716929e4c94fa3b8a1510a51ac6869443a139d1e3d + checksum: 10/bd6b44957077cd99067dcf401e80ed5ea03ba930cba2066edbbfe302d5fc973a108db25c0ae4930ee53852716929e4c94fa3b8a1510a51ac6869443a139d1e3d languageName: node linkType: hard @@ -867,7 +867,7 @@ __metadata: resolution: "@sinonjs/commons@npm:3.0.0" dependencies: type-detect: "npm:4.0.8" - checksum: 086720ae0bc370829322df32612205141cdd44e592a8a9ca97197571f8f970352ea39d3bda75b347c43789013ddab36b34b59e40380a49bdae1c2df3aa85fe4f + checksum: 10/086720ae0bc370829322df32612205141cdd44e592a8a9ca97197571f8f970352ea39d3bda75b347c43789013ddab36b34b59e40380a49bdae1c2df3aa85fe4f languageName: node linkType: hard @@ -876,7 +876,7 @@ __metadata: resolution: "@sinonjs/fake-timers@npm:10.3.0" dependencies: "@sinonjs/commons": "npm:^3.0.0" - checksum: 78155c7bd866a85df85e22028e046b8d46cf3e840f72260954f5e3ed5bd97d66c595524305a6841ffb3f681a08f6e5cef572a2cce5442a8a232dc29fb409b83e + checksum: 10/78155c7bd866a85df85e22028e046b8d46cf3e840f72260954f5e3ed5bd97d66c595524305a6841ffb3f681a08f6e5cef572a2cce5442a8a232dc29fb409b83e languageName: node linkType: hard @@ -885,7 +885,7 @@ __metadata: resolution: "@sinonjs/fake-timers@npm:11.2.2" dependencies: "@sinonjs/commons": "npm:^3.0.0" - checksum: da7dfa677b2362bc5a321fc1563184755b5c62fbb1a72457fb9e901cd187ba9dc834f9e8a0fb5a4e1d1e6e6ad4c5b54e90900faa44dd6c82d3c49c92ec23ecd4 + checksum: 10/da7dfa677b2362bc5a321fc1563184755b5c62fbb1a72457fb9e901cd187ba9dc834f9e8a0fb5a4e1d1e6e6ad4c5b54e90900faa44dd6c82d3c49c92ec23ecd4 languageName: node linkType: hard @@ -896,14 +896,14 @@ __metadata: "@sinonjs/commons": "npm:^2.0.0" lodash.get: "npm:^4.4.2" type-detect: "npm:^4.0.8" - checksum: 0c9928a7d16a2428ba561e410d9d637c08014d549cac4979c63a6580c56b69378dba80ea01b17e8e163f2ca5dd331376dae92eae8364857ef827ae59dbcfe0ce + checksum: 10/0c9928a7d16a2428ba561e410d9d637c08014d549cac4979c63a6580c56b69378dba80ea01b17e8e163f2ca5dd331376dae92eae8364857ef827ae59dbcfe0ce languageName: node linkType: hard "@sinonjs/text-encoding@npm:^0.7.1": version: 0.7.2 resolution: "@sinonjs/text-encoding@npm:0.7.2" - checksum: ec713fb44888c852d84ca54f6abf9c14d036c11a5d5bfab7825b8b9d2b22127dbe53412c68f4dbb0c05ea5ed61c64679bd2845c177d81462db41e0d3d7eca499 + checksum: 10/ec713fb44888c852d84ca54f6abf9c14d036c11a5d5bfab7825b8b9d2b22127dbe53412c68f4dbb0c05ea5ed61c64679bd2845c177d81462db41e0d3d7eca499 languageName: node linkType: hard @@ -912,56 +912,56 @@ __metadata: resolution: "@szmarczak/http-timer@npm:5.0.1" dependencies: defer-to-connect: "npm:^2.0.1" - checksum: fc9cb993e808806692e4a3337c90ece0ec00c89f4b67e3652a356b89730da98bc824273a6d67ca84d5f33cd85f317dcd5ce39d8cc0a2f060145a608a7cb8ce92 + checksum: 10/fc9cb993e808806692e4a3337c90ece0ec00c89f4b67e3652a356b89730da98bc824273a6d67ca84d5f33cd85f317dcd5ce39d8cc0a2f060145a608a7cb8ce92 languageName: node linkType: hard "@tootallnate/once@npm:1": version: 1.1.2 resolution: "@tootallnate/once@npm:1.1.2" - checksum: e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 + checksum: 10/e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 languageName: node linkType: hard "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" - checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + checksum: 10/ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 languageName: node linkType: hard "@tsconfig/node10@npm:^1.0.7": version: 1.0.9 resolution: "@tsconfig/node10@npm:1.0.9" - checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + checksum: 10/a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df languageName: node linkType: hard "@tsconfig/node12@npm:^1.0.7": version: 1.0.11 resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + checksum: 10/5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a languageName: node linkType: hard "@tsconfig/node14@npm:^1.0.0": version: 1.0.3 resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + checksum: 10/19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d languageName: node linkType: hard "@tsconfig/node16@npm:^1.0.2": version: 1.0.4 resolution: "@tsconfig/node16@npm:1.0.4" - checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + checksum: 10/202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff languageName: node linkType: hard "@tufjs/canonical-json@npm:1.0.0": version: 1.0.0 resolution: "@tufjs/canonical-json@npm:1.0.0" - checksum: 9ff3bcd12988fb23643690da3e009f9130b7b10974f8e7af4bd8ad230a228119de8609aa76d75264fe80f152b50872dea6ea53def69534436a4c24b4fcf6a447 + checksum: 10/9ff3bcd12988fb23643690da3e009f9130b7b10974f8e7af4bd8ad230a228119de8609aa76d75264fe80f152b50872dea6ea53def69534436a4c24b4fcf6a447 languageName: node linkType: hard @@ -971,7 +971,7 @@ __metadata: dependencies: "@tufjs/canonical-json": "npm:1.0.0" minimatch: "npm:^9.0.0" - checksum: 2c63e9cfc04a4ce8888e9cc9668a7207e3047d64c50dccc3d2c30057d8bd6c4e89256b6094d2109549278da72c75e20cd8717bb5f4b544dc2323288a2a96607f + checksum: 10/2c63e9cfc04a4ce8888e9cc9668a7207e3047d64c50dccc3d2c30057d8bd6c4e89256b6094d2109549278da72c75e20cd8717bb5f4b544dc2323288a2a96607f languageName: node linkType: hard @@ -981,14 +981,14 @@ __metadata: dependencies: "@types/connect": "npm:*" "@types/node": "npm:*" - checksum: 1e251118c4b2f61029cc43b0dc028495f2d1957fe8ee49a707fb940f86a9bd2f9754230805598278fe99958b49e9b7e66eec8ef6a50ab5c1f6b93e1ba2aaba82 + checksum: 10/1e251118c4b2f61029cc43b0dc028495f2d1957fe8ee49a707fb940f86a9bd2f9754230805598278fe99958b49e9b7e66eec8ef6a50ab5c1f6b93e1ba2aaba82 languageName: node linkType: hard "@types/chai@npm:^4.3.11": version: 4.3.11 resolution: "@types/chai@npm:4.3.11" - checksum: c83a00359684bf06114d5ad0ffa62c78b2fbfe09a985eda56e55cd3c191fe176052aef6e297a8c8a3608efb8ea7a44598cf7e0ae1a3a9311af892417e95b0b28 + checksum: 10/c83a00359684bf06114d5ad0ffa62c78b2fbfe09a985eda56e55cd3c191fe176052aef6e297a8c8a3608efb8ea7a44598cf7e0ae1a3a9311af892417e95b0b28 languageName: node linkType: hard @@ -997,7 +997,7 @@ __metadata: resolution: "@types/connect@npm:3.4.38" dependencies: "@types/node": "npm:*" - checksum: 7eb1bc5342a9604facd57598a6c62621e244822442976c443efb84ff745246b10d06e8b309b6e80130026a396f19bf6793b7cecd7380169f369dac3bfc46fb99 + checksum: 10/7eb1bc5342a9604facd57598a6c62621e244822442976c443efb84ff745246b10d06e8b309b6e80130026a396f19bf6793b7cecd7380169f369dac3bfc46fb99 languageName: node linkType: hard @@ -1007,7 +1007,7 @@ __metadata: dependencies: "@types/eslint": "npm:*" "@types/estree": "npm:*" - checksum: e2889a124aaab0b89af1bab5959847c5bec09809209255de0e63b9f54c629a94781daa04adb66bffcdd742f5e25a17614fb933965093c0eea64aacda4309380e + checksum: 10/e2889a124aaab0b89af1bab5959847c5bec09809209255de0e63b9f54c629a94781daa04adb66bffcdd742f5e25a17614fb933965093c0eea64aacda4309380e languageName: node linkType: hard @@ -1017,14 +1017,14 @@ __metadata: dependencies: "@types/estree": "npm:*" "@types/json-schema": "npm:*" - checksum: 985fd0293e454c459e672e73857920d0746f2eaae8b9aa13a4078c6d3d8fd0d2272f07f67b7fd9078a52d8fe7e1e61a498944129c0f4bc4c29c9cfa968168f5e + checksum: 10/985fd0293e454c459e672e73857920d0746f2eaae8b9aa13a4078c6d3d8fd0d2272f07f67b7fd9078a52d8fe7e1e61a498944129c0f4bc4c29c9cfa968168f5e languageName: node linkType: hard "@types/estree@npm:*, @types/estree@npm:^1.0.5": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" - checksum: 7de6d928dd4010b0e20c6919e1a6c27b61f8d4567befa89252055fad503d587ecb9a1e3eab1b1901f923964d7019796db810b7fd6430acb26c32866d126fd408 + checksum: 10/7de6d928dd4010b0e20c6919e1a6c27b61f8d4567befa89252055fad503d587ecb9a1e3eab1b1901f923964d7019796db810b7fd6430acb26c32866d126fd408 languageName: node linkType: hard @@ -1036,7 +1036,7 @@ __metadata: "@types/qs": "npm:*" "@types/range-parser": "npm:*" "@types/send": "npm:*" - checksum: 7647e19d9c3d57ddd18947d2b161b90ef0aedd15875140e5b824209be41c1084ae942d4fb43cd5f2051a6a5f8c044519ef6c9ac1b2ad86b9aa546b4f1f023303 + checksum: 10/7647e19d9c3d57ddd18947d2b161b90ef0aedd15875140e5b824209be41c1084ae942d4fb43cd5f2051a6a5f8c044519ef6c9ac1b2ad86b9aa546b4f1f023303 languageName: node linkType: hard @@ -1048,7 +1048,7 @@ __metadata: "@types/express-serve-static-core": "npm:^4.17.33" "@types/qs": "npm:*" "@types/serve-static": "npm:*" - checksum: 7a6d26cf6f43d3151caf4fec66ea11c9d23166e4f3102edfe45a94170654a54ea08cf3103d26b3928d7ebcc24162c90488e33986b7e3a5f8941225edd5eb18c7 + checksum: 10/7a6d26cf6f43d3151caf4fec66ea11c9d23166e4f3102edfe45a94170654a54ea08cf3103d26b3928d7ebcc24162c90488e33986b7e3a5f8941225edd5eb18c7 languageName: node linkType: hard @@ -1058,7 +1058,7 @@ __metadata: dependencies: "@types/jsonfile": "npm:*" "@types/node": "npm:*" - checksum: acc4c1eb0cde7b1f23f3fe6eb080a14832d8fa9dc1761aa444c5e2f0f6b6fa657ed46ebae32fb580a6700fc921b6165ce8ac3e3ba030c3dd15f10ad4dd4cae98 + checksum: 10/acc4c1eb0cde7b1f23f3fe6eb080a14832d8fa9dc1761aa444c5e2f0f6b6fa657ed46ebae32fb580a6700fc921b6165ce8ac3e3ba030c3dd15f10ad4dd4cae98 languageName: node linkType: hard @@ -1068,35 +1068,35 @@ __metadata: dependencies: "@types/minimatch": "npm:^5.1.2" "@types/node": "npm:*" - checksum: 9101f3a9061e40137190f70626aa0e202369b5ec4012c3fabe6f5d229cce04772db9a94fa5a0eb39655e2e4ad105c38afbb4af56a56c0996a8c7d4fc72350e3d + checksum: 10/9101f3a9061e40137190f70626aa0e202369b5ec4012c3fabe6f5d229cce04772db9a94fa5a0eb39655e2e4ad105c38afbb4af56a56c0996a8c7d4fc72350e3d languageName: node linkType: hard "@types/http-cache-semantics@npm:^4.0.2": version: 4.0.4 resolution: "@types/http-cache-semantics@npm:4.0.4" - checksum: a59566cff646025a5de396d6b3f44a39ab6a74f2ed8150692e0f31cc52f3661a68b04afe3166ebe0d566bd3259cb18522f46e949576d5204781cd6452b7fe0c5 + checksum: 10/a59566cff646025a5de396d6b3f44a39ab6a74f2ed8150692e0f31cc52f3661a68b04afe3166ebe0d566bd3259cb18522f46e949576d5204781cd6452b7fe0c5 languageName: node linkType: hard "@types/http-errors@npm:*": version: 2.0.4 resolution: "@types/http-errors@npm:2.0.4" - checksum: 1f3d7c3b32c7524811a45690881736b3ef741bf9849ae03d32ad1ab7062608454b150a4e7f1351f83d26a418b2d65af9bdc06198f1c079d75578282884c4e8e3 + checksum: 10/1f3d7c3b32c7524811a45690881736b3ef741bf9849ae03d32ad1ab7062608454b150a4e7f1351f83d26a418b2d65af9bdc06198f1c079d75578282884c4e8e3 languageName: node linkType: hard "@types/ini@npm:^4.1.0": version: 4.1.0 resolution: "@types/ini@npm:4.1.0" - checksum: 43dc756f60a4b2e828371baa0c5db006f3d31a2d58877f88ff15a58815aa804a612eea35adfc2c0e99ba09632b7a96bdf4a55ccaf5f164598f9ee314ad1171a1 + checksum: 10/43dc756f60a4b2e828371baa0c5db006f3d31a2d58877f88ff15a58815aa804a612eea35adfc2c0e99ba09632b7a96bdf4a55ccaf5f164598f9ee314ad1171a1 languageName: node linkType: hard "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.8": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" - checksum: 1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 + checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 languageName: node linkType: hard @@ -1105,7 +1105,7 @@ __metadata: resolution: "@types/jsonfile@npm:6.1.4" dependencies: "@types/node": "npm:*" - checksum: 309fda20eb5f1cf68f2df28931afdf189c5e7e6bec64ac783ce737bb98908d57f6f58757ad5da9be37b815645a6f914e2d4f3ac66c574b8fe1ba6616284d0e97 + checksum: 10/309fda20eb5f1cf68f2df28931afdf189c5e7e6bec64ac783ce737bb98908d57f6f58757ad5da9be37b815645a6f914e2d4f3ac66c574b8fe1ba6616284d0e97 languageName: node linkType: hard @@ -1114,49 +1114,49 @@ __metadata: resolution: "@types/lodash-es@npm:4.17.12" dependencies: "@types/lodash": "npm:*" - checksum: 56b9a433348b11c31051c6fa9028540a033a08fb80b400c589d740446c19444d73b217cf1471d4036448ef686a83e8cf2a35d1fadcb3f2105f26701f94aebb07 + checksum: 10/56b9a433348b11c31051c6fa9028540a033a08fb80b400c589d740446c19444d73b217cf1471d4036448ef686a83e8cf2a35d1fadcb3f2105f26701f94aebb07 languageName: node linkType: hard "@types/lodash@npm:*, @types/lodash@npm:^4.14.202": version: 4.14.202 resolution: "@types/lodash@npm:4.14.202" - checksum: 1bb9760a5b1dda120132c4b987330d67979c95dbc22612678682cd61b00302e190f4207228f3728580059cdab5582362262e3819aea59960c1017bd2b9fb26f6 + checksum: 10/1bb9760a5b1dda120132c4b987330d67979c95dbc22612678682cd61b00302e190f4207228f3728580059cdab5582362262e3819aea59960c1017bd2b9fb26f6 languageName: node linkType: hard "@types/mime@npm:*": version: 3.0.4 resolution: "@types/mime@npm:3.0.4" - checksum: a6139c8e1f705ef2b064d072f6edc01f3c099023ad7c4fce2afc6c2bf0231888202adadbdb48643e8e20da0ce409481a49922e737eca52871b3dc08017455843 + checksum: 10/a6139c8e1f705ef2b064d072f6edc01f3c099023ad7c4fce2afc6c2bf0231888202adadbdb48643e8e20da0ce409481a49922e737eca52871b3dc08017455843 languageName: node linkType: hard "@types/mime@npm:^1": version: 1.3.5 resolution: "@types/mime@npm:1.3.5" - checksum: e29a5f9c4776f5229d84e525b7cd7dd960b51c30a0fb9a028c0821790b82fca9f672dab56561e2acd9e8eed51d431bde52eafdfef30f643586c4162f1aecfc78 + checksum: 10/e29a5f9c4776f5229d84e525b7cd7dd960b51c30a0fb9a028c0821790b82fca9f672dab56561e2acd9e8eed51d431bde52eafdfef30f643586c4162f1aecfc78 languageName: node linkType: hard "@types/minimatch@npm:^3.0.3": version: 3.0.5 resolution: "@types/minimatch@npm:3.0.5" - checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 + checksum: 10/c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 languageName: node linkType: hard "@types/minimatch@npm:^5.1.2": version: 5.1.2 resolution: "@types/minimatch@npm:5.1.2" - checksum: 94db5060d20df2b80d77b74dd384df3115f01889b5b6c40fa2dfa27cfc03a68fb0ff7c1f2a0366070263eb2e9d6bfd8c87111d4bc3ae93c3f291297c1bf56c85 + checksum: 10/94db5060d20df2b80d77b74dd384df3115f01889b5b6c40fa2dfa27cfc03a68fb0ff7c1f2a0366070263eb2e9d6bfd8c87111d4bc3ae93c3f291297c1bf56c85 languageName: node linkType: hard "@types/mocha@npm:^10.0.6": version: 10.0.6 resolution: "@types/mocha@npm:10.0.6" - checksum: fc73626e81e89c32d06b7ff9b72c4177b46d579cdd932f796614adc026852d84cb849d743473ba572cb4d9ea6d8c04e3749552d326c26495ec1c4b46e6e0a0c0 + checksum: 10/fc73626e81e89c32d06b7ff9b72c4177b46d579cdd932f796614adc026852d84cb849d743473ba572cb4d9ea6d8c04e3749552d326c26495ec1c4b46e6e0a0c0 languageName: node linkType: hard @@ -1165,28 +1165,28 @@ __metadata: resolution: "@types/node@npm:20.11.7" dependencies: undici-types: "npm:~5.26.4" - checksum: ff0428c093987f1f6e3400b91450077cf006d7f0e4ff316e20636218562c53761565ceb06bd7a161badf46e6884d78b554c7b1c3a7717cf5cb8c97f461ecd754 + checksum: 10/ff0428c093987f1f6e3400b91450077cf006d7f0e4ff316e20636218562c53761565ceb06bd7a161badf46e6884d78b554c7b1c3a7717cf5cb8c97f461ecd754 languageName: node linkType: hard "@types/parse-json@npm:^4.0.0": version: 4.0.2 resolution: "@types/parse-json@npm:4.0.2" - checksum: 5bf62eec37c332ad10059252fc0dab7e7da730764869c980b0714777ad3d065e490627be9f40fc52f238ffa3ac4199b19de4127196910576c2fe34dd47c7a470 + checksum: 10/5bf62eec37c332ad10059252fc0dab7e7da730764869c980b0714777ad3d065e490627be9f40fc52f238ffa3ac4199b19de4127196910576c2fe34dd47c7a470 languageName: node linkType: hard "@types/qs@npm:*": version: 6.9.11 resolution: "@types/qs@npm:6.9.11" - checksum: 620ca1628bf3da65662c54ed6ebb120b18a3da477d0bfcc872b696685a9bb1893c3c92b53a1190a8f54d52eaddb6af8b2157755699ac83164604329935e8a7f2 + checksum: 10/620ca1628bf3da65662c54ed6ebb120b18a3da477d0bfcc872b696685a9bb1893c3c92b53a1190a8f54d52eaddb6af8b2157755699ac83164604329935e8a7f2 languageName: node linkType: hard "@types/range-parser@npm:*": version: 1.2.7 resolution: "@types/range-parser@npm:1.2.7" - checksum: 95640233b689dfbd85b8c6ee268812a732cf36d5affead89e806fe30da9a430767af8ef2cd661024fd97e19d61f3dec75af2df5e80ec3bea000019ab7028629a + checksum: 10/95640233b689dfbd85b8c6ee268812a732cf36d5affead89e806fe30da9a430767af8ef2cd661024fd97e19d61f3dec75af2df5e80ec3bea000019ab7028629a languageName: node linkType: hard @@ -1195,14 +1195,14 @@ __metadata: resolution: "@types/selenium-webdriver@npm:4.1.21" dependencies: "@types/ws": "npm:*" - checksum: dfeb47bfc72b23e48c6f19ac6bcf416915590b5bc67cad63edda1a726e900de5f31c36573568c4eb1e0060433308beb57fae608365c9290f0383923a0488380a + checksum: 10/dfeb47bfc72b23e48c6f19ac6bcf416915590b5bc67cad63edda1a726e900de5f31c36573568c4eb1e0060433308beb57fae608365c9290f0383923a0488380a languageName: node linkType: hard "@types/semver@npm:^7.5.0": version: 7.5.6 resolution: "@types/semver@npm:7.5.6" - checksum: e77282b17f74354e17e771c0035cccb54b94cc53d0433fa7e9ba9d23fd5d7edcd14b6c8b7327d58bbd89e83b1c5eda71dfe408e06b929007e2b89586e9b63459 + checksum: 10/e77282b17f74354e17e771c0035cccb54b94cc53d0433fa7e9ba9d23fd5d7edcd14b6c8b7327d58bbd89e83b1c5eda71dfe408e06b929007e2b89586e9b63459 languageName: node linkType: hard @@ -1212,7 +1212,7 @@ __metadata: dependencies: "@types/mime": "npm:^1" "@types/node": "npm:*" - checksum: 28320a2aa1eb704f7d96a65272a07c0bf3ae7ed5509c2c96ea5e33238980f71deeed51d3631927a77d5250e4091b3e66bce53b42d770873282c6a20bb8b0280d + checksum: 10/28320a2aa1eb704f7d96a65272a07c0bf3ae7ed5509c2c96ea5e33238980f71deeed51d3631927a77d5250e4091b3e66bce53b42d770873282c6a20bb8b0280d languageName: node linkType: hard @@ -1223,7 +1223,7 @@ __metadata: "@types/http-errors": "npm:*" "@types/mime": "npm:*" "@types/node": "npm:*" - checksum: 49aa21c367fffe4588fc8c57ea48af0ea7cbadde7418bc53cde85d8bd57fd2a09a293970d9ea86e79f17a87f8adeb3e20da76aab38e1c4d1567931fa15c8af38 + checksum: 10/49aa21c367fffe4588fc8c57ea48af0ea7cbadde7418bc53cde85d8bd57fd2a09a293970d9ea86e79f17a87f8adeb3e20da76aab38e1c4d1567931fa15c8af38 languageName: node linkType: hard @@ -1232,42 +1232,70 @@ __metadata: resolution: "@types/sinon@npm:17.0.3" dependencies: "@types/sinonjs__fake-timers": "npm:*" - checksum: 3f82b4a477c0c57fa4f4f4fb7585cb72c2a65a7e41e5271b54edca296c8dc242c2d8e709de7a8f16af8693c87cb3ad9d96981069ae683f7197a1134892035833 + checksum: 10/3f82b4a477c0c57fa4f4f4fb7585cb72c2a65a7e41e5271b54edca296c8dc242c2d8e709de7a8f16af8693c87cb3ad9d96981069ae683f7197a1134892035833 languageName: node linkType: hard "@types/sinonjs__fake-timers@npm:*": version: 8.1.5 resolution: "@types/sinonjs__fake-timers@npm:8.1.5" - checksum: 3a0b285fcb8e1eca435266faa27ffff206608b69041022a42857274e44d9305822e85af5e7a43a9fae78d2ab7dc0fcb49f3ae3bda1fa81f0203064dbf5afd4f6 + checksum: 10/3a0b285fcb8e1eca435266faa27ffff206608b69041022a42857274e44d9305822e85af5e7a43a9fae78d2ab7dc0fcb49f3ae3bda1fa81f0203064dbf5afd4f6 + languageName: node + linkType: hard + +"@types/tar-fs@npm:*": + version: 2.0.4 + resolution: "@types/tar-fs@npm:2.0.4" + dependencies: + "@types/node": "npm:*" + "@types/tar-stream": "npm:*" + checksum: 10/a5f8b3a494244c24ff6175aa512bf7e4429efd2b9577e2b96fdba8c5649aec8881eaf7e107082ab741eedf4da5928f7d3bf255ce05ea83e15268c18eac600f5e + languageName: node + linkType: hard + +"@types/tar-stream@npm:*": + version: 3.1.3 + resolution: "@types/tar-stream@npm:3.1.3" + dependencies: + "@types/node": "npm:*" + checksum: 10/187387748288b35924284afc26cf36b6b966377f5131398bf484c475f7191c50f5e5903c94a7391049b6cdfce174ae2e63f776dea9425d94ddc6bd31ebe386ee + languageName: node + linkType: hard + +"@types/targz@npm:^1.0.4": + version: 1.0.4 + resolution: "@types/targz@npm:1.0.4" + dependencies: + "@types/tar-fs": "npm:*" + checksum: 10/7c1043a8eea15238b39767f9ae9adddbfbdbc219c31ccc8c83de9fe3296376ec74116b0219e746bd65f65c45d2de141ee31b96f2bfe33b44ad8827ff95086ae0 languageName: node linkType: hard "@types/tmp@npm:^0.2.6": version: 0.2.6 resolution: "@types/tmp@npm:0.2.6" - checksum: e14a094c10569d3b56805552b21417860ef21060d969000d5d5b53604a78c2bdac216f064b03797d4b07a081e0141dd3ab22bc36923e75300eb1c023f7252cc7 + checksum: 10/e14a094c10569d3b56805552b21417860ef21060d969000d5d5b53604a78c2bdac216f064b03797d4b07a081e0141dd3ab22bc36923e75300eb1c023f7252cc7 languageName: node linkType: hard "@types/uuid@npm:^9.0.8": version: 9.0.8 resolution: "@types/uuid@npm:9.0.8" - checksum: b8c60b7ba8250356b5088302583d1704a4e1a13558d143c549c408bf8920535602ffc12394ede77f8a8083511b023704bc66d1345792714002bfa261b17c5275 + checksum: 10/b8c60b7ba8250356b5088302583d1704a4e1a13558d143c549c408bf8920535602ffc12394ede77f8a8083511b023704bc66d1345792714002bfa261b17c5275 languageName: node linkType: hard "@types/vscode-webview@npm:^1.57.4": version: 1.57.4 resolution: "@types/vscode-webview@npm:1.57.4" - checksum: c80854d67236a514f321d19da77d44d6c9d941c77fa9da474b09607c45e2c273f361d421838f7087ccb0d4ae0a41d541e9e844032c649190edf048fc4761ce9b + checksum: 10/c80854d67236a514f321d19da77d44d6c9d941c77fa9da474b09607c45e2c273f361d421838f7087ccb0d4ae0a41d541e9e844032c649190edf048fc4761ce9b languageName: node linkType: hard "@types/vscode@npm:^1.76.0, @types/vscode@npm:^1.85.0": version: 1.87.0 resolution: "@types/vscode@npm:1.87.0" - checksum: 6f10df10d9fbe305ccd69ad5432357f05de267c72100a5f5aa54341c454b4b3505a98580d0308a5dcd9562268a22701c46e70b744080c50955d44ac415f60cf1 + checksum: 10/6f10df10d9fbe305ccd69ad5432357f05de267c72100a5f5aa54341c454b4b3505a98580d0308a5dcd9562268a22701c46e70b744080c50955d44ac415f60cf1 languageName: node linkType: hard @@ -1276,14 +1304,14 @@ __metadata: resolution: "@types/ws@npm:8.5.10" dependencies: "@types/node": "npm:*" - checksum: 9b414dc5e0b6c6f1ea4b1635b3568c58707357f68076df9e7cd33194747b7d1716d5189c0dbdd68c8d2521b148e88184cf881bac7429eb0e5c989b001539ed31 + checksum: 10/9b414dc5e0b6c6f1ea4b1635b3568c58707357f68076df9e7cd33194747b7d1716d5189c0dbdd68c8d2521b148e88184cf881bac7429eb0e5c989b001539ed31 languageName: node linkType: hard "@types/yarnpkg__lockfile@npm:^1.1.6": version: 1.1.9 resolution: "@types/yarnpkg__lockfile@npm:1.1.9" - checksum: 8cad287732567efeab3da420115e4250d1b80ee6a6c1afa04db0bb18aa2bd71167f72b1ba9d782b7cbcdb1abaa02710a0dd48f0129eefdf939b58b08a61c7219 + checksum: 10/8cad287732567efeab3da420115e4250d1b80ee6a6c1afa04db0bb18aa2bd71167f72b1ba9d782b7cbcdb1abaa02710a0dd48f0129eefdf939b58b08a61c7219 languageName: node linkType: hard @@ -1308,7 +1336,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: e88a35527b066a42d0253d153183a360faedc1cd39867c541ce7cb1f7b22f8446bb913b998fcdeba269d5d4217888af42e6d64da5c0592b1f49ed5648d2e3e84 + checksum: 10/e88a35527b066a42d0253d153183a360faedc1cd39867c541ce7cb1f7b22f8446bb913b998fcdeba269d5d4217888af42e6d64da5c0592b1f49ed5648d2e3e84 languageName: node linkType: hard @@ -1326,7 +1354,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 63ff00a56586879a62e40b27b55c94501173fcf2fb5a620d01e7505851b4bb20feb1e7fbad36010af97aefc0a722267d9ce3aa004abab22cb7eb23eebb0102ce + checksum: 10/63ff00a56586879a62e40b27b55c94501173fcf2fb5a620d01e7505851b4bb20feb1e7fbad36010af97aefc0a722267d9ce3aa004abab22cb7eb23eebb0102ce languageName: node linkType: hard @@ -1336,7 +1364,7 @@ __metadata: dependencies: "@typescript-eslint/types": "npm:6.19.1" "@typescript-eslint/visitor-keys": "npm:6.19.1" - checksum: 2a17f68d3c41582bfac7ecd192e2c2539cf4d2c9728a7018d842da7a8a23986b8a1f8cfcb59862c909b483140a2d164a4ba44451905e0a141378e5dd0df056cc + checksum: 10/2a17f68d3c41582bfac7ecd192e2c2539cf4d2c9728a7018d842da7a8a23986b8a1f8cfcb59862c909b483140a2d164a4ba44451905e0a141378e5dd0df056cc languageName: node linkType: hard @@ -1353,14 +1381,14 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 5150b897d8b3778c549c6b964b031981da1039dfa0fb89a0eb92702735ca55793d2f840af14b340eccbca81669ba3dd02d7f09fb420fb66b18ec9f1f211b3243 + checksum: 10/5150b897d8b3778c549c6b964b031981da1039dfa0fb89a0eb92702735ca55793d2f840af14b340eccbca81669ba3dd02d7f09fb420fb66b18ec9f1f211b3243 languageName: node linkType: hard "@typescript-eslint/types@npm:6.19.1": version: 6.19.1 resolution: "@typescript-eslint/types@npm:6.19.1" - checksum: 93f3ded80b81a1b8686866b93e36ddf9bac04604d09e88d7ed1ec25b6b2f49ff64747d8d194ba1f3215e231fd0790b88fb5ecadcc6ed53ff584f8c0b87423216 + checksum: 10/93f3ded80b81a1b8686866b93e36ddf9bac04604d09e88d7ed1ec25b6b2f49ff64747d8d194ba1f3215e231fd0790b88fb5ecadcc6ed53ff584f8c0b87423216 languageName: node linkType: hard @@ -1379,7 +1407,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 3ce91dd477ccb2cc3cf5d07ac8d23792988f4fad78bfd39783292846f32daea5081d3790ba9cc795d9de89ea2e1d55dc9c3d2aeaa8597093b0f6ac3a206195e9 + checksum: 10/3ce91dd477ccb2cc3cf5d07ac8d23792988f4fad78bfd39783292846f32daea5081d3790ba9cc795d9de89ea2e1d55dc9c3d2aeaa8597093b0f6ac3a206195e9 languageName: node linkType: hard @@ -1396,7 +1424,7 @@ __metadata: semver: "npm:^7.5.4" peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: f8931df675defa84af373c81bbb13cc34c2fcf0803c687a38b982e85335dbf2fb8415667fbabaa043df0326ba3e98ed974104bbd21f09ec538304fc3adeed0c3 + checksum: 10/f8931df675defa84af373c81bbb13cc34c2fcf0803c687a38b982e85335dbf2fb8415667fbabaa043df0326ba3e98ed974104bbd21f09ec538304fc3adeed0c3 languageName: node linkType: hard @@ -1406,14 +1434,14 @@ __metadata: dependencies: "@typescript-eslint/types": "npm:6.19.1" eslint-visitor-keys: "npm:^3.4.1" - checksum: b41f3247520e1e4d3e43876843b03f0d887e544d4ac8a9e1f4b25d08568da36fedde883fa226488a595f688198859cd0290d0f1351c2ca6cbc30cca2c90adf21 + checksum: 10/b41f3247520e1e4d3e43876843b03f0d887e544d4ac8a9e1f4b25d08568da36fedde883fa226488a595f688198859cd0290d0f1351c2ca6cbc30cca2c90adf21 languageName: node linkType: hard "@ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" - checksum: c6fe89a505e513a7592e1438280db1c075764793a2397877ff1351721fe8792a966a5359769e30242b3cd023f2efb9e63ca2ca88019d73b564488cc20e3eab12 + checksum: 10/c6fe89a505e513a7592e1438280db1c075764793a2397877ff1351721fe8792a966a5359769e30242b3cd023f2efb9e63ca2ca88019d73b564488cc20e3eab12 languageName: node linkType: hard @@ -1425,11 +1453,11 @@ __metadata: https-proxy-agent: "npm:^5.0.0" jszip: "npm:^3.10.1" semver: "npm:^7.5.2" - checksum: 4cf5a02beef2cf4d99f6ef504176bff0f8f1ceae5c35dcdb7e9b6a3c94737a827ad7c5d574ceb75e2987231334a975a5b83844bae61d33a9d88b3dc9623728ec + checksum: 10/4cf5a02beef2cf4d99f6ef504176bff0f8f1ceae5c35dcdb7e9b6a3c94737a827ad7c5d574ceb75e2987231334a975a5b83844bae61d33a9d88b3dc9623728ec languageName: node linkType: hard -"@vscode/vsce@npm:^2.19.0, @vscode/vsce@npm:^2.22.0, @vscode/vsce@npm:^2.23.0": +"@vscode/vsce@npm:^2.19.0, @vscode/vsce@npm:^2.23.0": version: 2.23.0 resolution: "@vscode/vsce@npm:2.23.0" dependencies: @@ -1460,7 +1488,41 @@ __metadata: optional: true bin: vsce: vsce - checksum: 8c219a5359854c50be32b39852e95d98fed8d2e4bb07ee7f9e928593d0862702010c72f2660e46e9e8ec644e3cd59e1b174e6cef1bc6de3e853f4478bc931dad + checksum: 10/8c219a5359854c50be32b39852e95d98fed8d2e4bb07ee7f9e928593d0862702010c72f2660e46e9e8ec644e3cd59e1b174e6cef1bc6de3e853f4478bc931dad + languageName: node + linkType: hard + +"@vscode/vsce@npm:^2.24.0": + version: 2.24.0 + resolution: "@vscode/vsce@npm:2.24.0" + dependencies: + azure-devops-node-api: "npm:^11.0.1" + chalk: "npm:^2.4.2" + cheerio: "npm:^1.0.0-rc.9" + commander: "npm:^6.2.1" + glob: "npm:^7.0.6" + hosted-git-info: "npm:^4.0.2" + jsonc-parser: "npm:^3.2.0" + keytar: "npm:^7.7.0" + leven: "npm:^3.1.0" + markdown-it: "npm:^12.3.2" + mime: "npm:^1.3.4" + minimatch: "npm:^3.0.3" + parse-semver: "npm:^1.1.1" + read: "npm:^1.0.7" + semver: "npm:^7.5.2" + tmp: "npm:^0.2.1" + typed-rest-client: "npm:^1.8.4" + url-join: "npm:^4.0.1" + xml2js: "npm:^0.5.0" + yauzl: "npm:^2.3.1" + yazl: "npm:^2.2.2" + dependenciesMeta: + keytar: + optional: true + bin: + vsce: vsce + checksum: 10/74473cb6715effcdc41381851582a7c5f643d707be01913153c79cd2a5c84266ef68e2ed81c2f282a5c7127dfbcc4b16378b4a73526ababe59190cef867dafe4 languageName: node linkType: hard @@ -1474,7 +1536,7 @@ __metadata: tslib: "npm:^2.6.2" peerDependencies: react: ">=16.9.0" - checksum: d1b0e5fbf3db608573053ad498bf2f1fa6f728744200a58e93ca4c4b073a09aab41eea7f87c71749a09b2a0cec491223d198935ab5d4562d41b742abdc78ee59 + checksum: 10/d1b0e5fbf3db608573053ad498bf2f1fa6f728744200a58e93ca4c4b073a09aab41eea7f87c71749a09b2a0cec491223d198935ab5d4562d41b742abdc78ee59 languageName: node linkType: hard @@ -1487,7 +1549,7 @@ __metadata: entities: "npm:^4.5.0" estree-walker: "npm:^2.0.2" source-map-js: "npm:^1.0.2" - checksum: 32cf65fc1534c53a6e233984b2027fec56deee767f644d5cd7fa0c3b3f0b1d5fa9559fcde9e91fe205c6cdb269270427360a790e812249b845043bafab8fa97b + checksum: 10/32cf65fc1534c53a6e233984b2027fec56deee767f644d5cd7fa0c3b3f0b1d5fa9559fcde9e91fe205c6cdb269270427360a790e812249b845043bafab8fa97b languageName: node linkType: hard @@ -1497,7 +1559,7 @@ __metadata: dependencies: "@vue/compiler-core": "npm:3.4.5" "@vue/shared": "npm:3.4.5" - checksum: b743ba15c9b2776eef1c4d587e2af44e7a22fe34e1a68e7f4c79522dd4130ec4a7886f94381e2f903356b7386245fcea06a515185d1bd6b94f486611d25cdfc4 + checksum: 10/b743ba15c9b2776eef1c4d587e2af44e7a22fe34e1a68e7f4c79522dd4130ec4a7886f94381e2f903356b7386245fcea06a515185d1bd6b94f486611d25cdfc4 languageName: node linkType: hard @@ -1514,7 +1576,7 @@ __metadata: magic-string: "npm:^0.30.5" postcss: "npm:^8.4.32" source-map-js: "npm:^1.0.2" - checksum: 3299af6169c3b00a54418cb25dc064644ab0f8df8f41414975b8ed54c16477ee4952e6b276a3b539afe38ba8ccc66f226bda9041abd6f5228aabf25a1de65f2f + checksum: 10/3299af6169c3b00a54418cb25dc064644ab0f8df8f41414975b8ed54c16477ee4952e6b276a3b539afe38ba8ccc66f226bda9041abd6f5228aabf25a1de65f2f languageName: node linkType: hard @@ -1524,14 +1586,14 @@ __metadata: dependencies: "@vue/compiler-dom": "npm:3.4.5" "@vue/shared": "npm:3.4.5" - checksum: a898e71d7ae1caeeebf667bb3610c1994745a6e64e5741ebc4ad93424889bd9a84864a473a7e5d5652ac2b82c271afd2fb02c27c8c80ca5fe5b805529b8a643c + checksum: 10/a898e71d7ae1caeeebf667bb3610c1994745a6e64e5741ebc4ad93424889bd9a84864a473a7e5d5652ac2b82c271afd2fb02c27c8c80ca5fe5b805529b8a643c languageName: node linkType: hard "@vue/shared@npm:3.4.5": version: 3.4.5 resolution: "@vue/shared@npm:3.4.5" - checksum: e0a5d5cba9383b8035bac21ed937db5841370a6c40d9f4a5a88f9ee64e8cfdcc1cd089a78d29504a93d51fdb9353b2442e02336d19974c9e122b4eaa1925afdd + checksum: 10/e0a5d5cba9383b8035bac21ed937db5841370a6c40d9f4a5a88f9ee64e8cfdcc1cd089a78d29504a93d51fdb9353b2442e02336d19974c9e122b4eaa1925afdd languageName: node linkType: hard @@ -1541,28 +1603,28 @@ __metadata: dependencies: "@webassemblyjs/helper-numbers": "npm:1.11.6" "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - checksum: 4c1303971ccd5188731c9b01073d9738333f37b946a48c4e049f7b788706cdc66f473cd6f3e791423a94c52a3b2230d070007930d29bccbce238b23835839f3c + checksum: 10/4c1303971ccd5188731c9b01073d9738333f37b946a48c4e049f7b788706cdc66f473cd6f3e791423a94c52a3b2230d070007930d29bccbce238b23835839f3c languageName: node linkType: hard "@webassemblyjs/floating-point-hex-parser@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" - checksum: 29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2 + checksum: 10/29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2 languageName: node linkType: hard "@webassemblyjs/helper-api-error@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" - checksum: e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f + checksum: 10/e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f languageName: node linkType: hard "@webassemblyjs/helper-buffer@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-buffer@npm:1.11.6" - checksum: b14d0573bf680d22b2522e8a341ec451fddd645d1f9c6bd9012ccb7e587a2973b86ab7b89fe91e1c79939ba96095f503af04369a3b356c8023c13a5893221644 + checksum: 10/b14d0573bf680d22b2522e8a341ec451fddd645d1f9c6bd9012ccb7e587a2973b86ab7b89fe91e1c79939ba96095f503af04369a3b356c8023c13a5893221644 languageName: node linkType: hard @@ -1573,14 +1635,14 @@ __metadata: "@webassemblyjs/floating-point-hex-parser": "npm:1.11.6" "@webassemblyjs/helper-api-error": "npm:1.11.6" "@xtuc/long": "npm:4.2.2" - checksum: 9ffd258ad809402688a490fdef1fd02222f20cdfe191c895ac215a331343292164e5033dbc0347f0f76f2447865c0b5c2d2e3304ee948d44f7aa27857028fd08 + checksum: 10/9ffd258ad809402688a490fdef1fd02222f20cdfe191c895ac215a331343292164e5033dbc0347f0f76f2447865c0b5c2d2e3304ee948d44f7aa27857028fd08 languageName: node linkType: hard "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" - checksum: 4ebf03e9c1941288c10e94e0f813f413f972bfaa1f09be2cc2e5577f300430906b61aa24d52f5ef2f894e8e24e61c6f7c39871d7e3d98bc69460e1b8e00bb20b + checksum: 10/4ebf03e9c1941288c10e94e0f813f413f972bfaa1f09be2cc2e5577f300430906b61aa24d52f5ef2f894e8e24e61c6f7c39871d7e3d98bc69460e1b8e00bb20b languageName: node linkType: hard @@ -1592,7 +1654,7 @@ __metadata: "@webassemblyjs/helper-buffer": "npm:1.11.6" "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" "@webassemblyjs/wasm-gen": "npm:1.11.6" - checksum: 38a615ab3d55f953daaf78b69f145e2cc1ff5288ab71715d1a164408b735c643a87acd7e7ba3e9633c5dd965439a45bb580266b05a06b22ff678d6c013514108 + checksum: 10/38a615ab3d55f953daaf78b69f145e2cc1ff5288ab71715d1a164408b735c643a87acd7e7ba3e9633c5dd965439a45bb580266b05a06b22ff678d6c013514108 languageName: node linkType: hard @@ -1601,7 +1663,7 @@ __metadata: resolution: "@webassemblyjs/ieee754@npm:1.11.6" dependencies: "@xtuc/ieee754": "npm:^1.2.0" - checksum: 13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de + checksum: 10/13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de languageName: node linkType: hard @@ -1610,14 +1672,14 @@ __metadata: resolution: "@webassemblyjs/leb128@npm:1.11.6" dependencies: "@xtuc/long": "npm:4.2.2" - checksum: ec3b72db0e7ce7908fe08ec24395bfc97db486063824c0edc580f0973a4cfbadf30529569d9c7db663a56513e45b94299cca03be9e1992ea3308bb0744164f3d + checksum: 10/ec3b72db0e7ce7908fe08ec24395bfc97db486063824c0edc580f0973a4cfbadf30529569d9c7db663a56513e45b94299cca03be9e1992ea3308bb0744164f3d languageName: node linkType: hard "@webassemblyjs/utf8@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/utf8@npm:1.11.6" - checksum: 361a537bd604101b320a5604c3c96d1038d83166f1b9fb86cedadc7e81bae54c3785ae5d90bf5b1842f7da08194ccaf0f44a64fcca0cbbd6afe1a166196986d6 + checksum: 10/361a537bd604101b320a5604c3c96d1038d83166f1b9fb86cedadc7e81bae54c3785ae5d90bf5b1842f7da08194ccaf0f44a64fcca0cbbd6afe1a166196986d6 languageName: node linkType: hard @@ -1633,7 +1695,7 @@ __metadata: "@webassemblyjs/wasm-opt": "npm:1.11.6" "@webassemblyjs/wasm-parser": "npm:1.11.6" "@webassemblyjs/wast-printer": "npm:1.11.6" - checksum: c168bfc6d0cdd371345f36f95a4766d098a96ccc1257e6a6e3a74d987a5c4f2ddd2244a6aecfa5d032a47d74ed2c3b579e00a314d31e4a0b76ad35b31cdfa162 + checksum: 10/c168bfc6d0cdd371345f36f95a4766d098a96ccc1257e6a6e3a74d987a5c4f2ddd2244a6aecfa5d032a47d74ed2c3b579e00a314d31e4a0b76ad35b31cdfa162 languageName: node linkType: hard @@ -1646,7 +1708,7 @@ __metadata: "@webassemblyjs/ieee754": "npm:1.11.6" "@webassemblyjs/leb128": "npm:1.11.6" "@webassemblyjs/utf8": "npm:1.11.6" - checksum: f91903506ce50763592863df5d80ffee80f71a1994a882a64cdb83b5e44002c715f1ef1727d8ccb0692d066af34d3d4f5e59e8f7a4e2eeb2b7c32692ac44e363 + checksum: 10/f91903506ce50763592863df5d80ffee80f71a1994a882a64cdb83b5e44002c715f1ef1727d8ccb0692d066af34d3d4f5e59e8f7a4e2eeb2b7c32692ac44e363 languageName: node linkType: hard @@ -1658,7 +1720,7 @@ __metadata: "@webassemblyjs/helper-buffer": "npm:1.11.6" "@webassemblyjs/wasm-gen": "npm:1.11.6" "@webassemblyjs/wasm-parser": "npm:1.11.6" - checksum: e0cfeea381ecbbd0ca1616e9a08974acfe7fc81f8a16f9f2d39f565dc51784dd7043710b6e972f9968692d273e32486b9a8a82ca178d4bd520b2d5e2cf28234d + checksum: 10/e0cfeea381ecbbd0ca1616e9a08974acfe7fc81f8a16f9f2d39f565dc51784dd7043710b6e972f9968692d273e32486b9a8a82ca178d4bd520b2d5e2cf28234d languageName: node linkType: hard @@ -1672,7 +1734,7 @@ __metadata: "@webassemblyjs/ieee754": "npm:1.11.6" "@webassemblyjs/leb128": "npm:1.11.6" "@webassemblyjs/utf8": "npm:1.11.6" - checksum: 6995e0b7b8ebc52b381459c6a555f87763dcd3975c4a112407682551e1c73308db7af23385972a253dceb5af94e76f9c97cb861e8239b5ed1c3e79b95d8e2097 + checksum: 10/6995e0b7b8ebc52b381459c6a555f87763dcd3975c4a112407682551e1c73308db7af23385972a253dceb5af94e76f9c97cb861e8239b5ed1c3e79b95d8e2097 languageName: node linkType: hard @@ -1682,7 +1744,7 @@ __metadata: dependencies: "@webassemblyjs/ast": "npm:1.11.6" "@xtuc/long": "npm:4.2.2" - checksum: fd45fd0d693141d678cc2f6ff2d3a0d7a8884acb1c92fb0c63cf43b7978e9560be04118b12792638a39dd185640453510229e736f3049037d0c361f6435f2d5f + checksum: 10/fd45fd0d693141d678cc2f6ff2d3a0d7a8884acb1c92fb0c63cf43b7978e9560be04118b12792638a39dd185640453510229e736f3049037d0c361f6435f2d5f languageName: node linkType: hard @@ -1692,7 +1754,7 @@ __metadata: peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x - checksum: 9f9f9145c2d05471fc83d426db1df85cf49f329836b0c4b9f46b6948bed4b013464c00622b136d2a0a26993ce2306976682592245b08ee717500b1db45009a72 + checksum: 10/9f9f9145c2d05471fc83d426db1df85cf49f329836b0c4b9f46b6948bed4b013464c00622b136d2a0a26993ce2306976682592245b08ee717500b1db45009a72 languageName: node linkType: hard @@ -1702,7 +1764,7 @@ __metadata: peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x - checksum: 8f9a178afca5c82e113aed1efa552d64ee5ae4fdff63fe747c096a981ec74f18a5d07bd6e89bbe6715c3e57d96eea024a410e58977169489fe1df044c10dd94e + checksum: 10/8f9a178afca5c82e113aed1efa552d64ee5ae4fdff63fe747c096a981ec74f18a5d07bd6e89bbe6715c3e57d96eea024a410e58977169489fe1df044c10dd94e languageName: node linkType: hard @@ -1715,42 +1777,42 @@ __metadata: peerDependenciesMeta: webpack-dev-server: optional: true - checksum: 20424e5c1e664e4d7ab11facee7033bb729f6acd86493138069532934c1299c1426da72942822dedb00caca8fc60cc8aec1626e610ee0e8a9679e3614f555860 + checksum: 10/20424e5c1e664e4d7ab11facee7033bb729f6acd86493138069532934c1299c1426da72942822dedb00caca8fc60cc8aec1626e610ee0e8a9679e3614f555860 languageName: node linkType: hard "@xtuc/ieee754@npm:^1.2.0": version: 1.2.0 resolution: "@xtuc/ieee754@npm:1.2.0" - checksum: ab033b032927d77e2f9fa67accdf31b1ca7440974c21c9cfabc8349e10ca2817646171c4f23be98d0e31896d6c2c3462a074fe37752e523abc3e45c79254259c + checksum: 10/ab033b032927d77e2f9fa67accdf31b1ca7440974c21c9cfabc8349e10ca2817646171c4f23be98d0e31896d6c2c3462a074fe37752e523abc3e45c79254259c languageName: node linkType: hard "@xtuc/long@npm:4.2.2": version: 4.2.2 resolution: "@xtuc/long@npm:4.2.2" - checksum: 7217bae9fe240e0d804969e7b2af11cb04ec608837c78b56ca88831991b287e232a0b7fce8d548beaff42aaf0197ffa471d81be6ac4c4e53b0148025a2c076ec + checksum: 10/7217bae9fe240e0d804969e7b2af11cb04ec608837c78b56ca88831991b287e232a0b7fce8d548beaff42aaf0197ffa471d81be6ac4c4e53b0148025a2c076ec languageName: node linkType: hard "@yarnpkg/lockfile@npm:^1.1.0": version: 1.1.0 resolution: "@yarnpkg/lockfile@npm:1.1.0" - checksum: cd19e1114aaf10a05126aeea8833ef4ca8af8a46e88e12884f8359d19333fd19711036dbc2698dbe937f81f037070cf9a8da45c2e8c6ca19cafd7d15659094ed + checksum: 10/cd19e1114aaf10a05126aeea8833ef4ca8af8a46e88e12884f8359d19333fd19711036dbc2698dbe937f81f037070cf9a8da45c2e8c6ca19cafd7d15659094ed languageName: node linkType: hard "abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" - checksum: 2d882941183c66aa665118bafdab82b7a177e9add5eb2776c33e960a4f3c89cff88a1b38aba13a456de01d0dd9d66a8bea7c903268b21ea91dd1097e1e2e8243 + checksum: 10/2d882941183c66aa665118bafdab82b7a177e9add5eb2776c33e960a4f3c89cff88a1b38aba13a456de01d0dd9d66a8bea7c903268b21ea91dd1097e1e2e8243 languageName: node linkType: hard "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" - checksum: ca0a54e35bea4ece0ecb68a47b312e1a9a6f772408d5bcb9051230aaa94b0460671c5b5c9cb3240eb5b7bc94c52476550eb221f65a0bbd0145bdc9f3113a6707 + checksum: 10/ca0a54e35bea4ece0ecb68a47b312e1a9a6f772408d5bcb9051230aaa94b0460671c5b5c9cb3240eb5b7bc94c52476550eb221f65a0bbd0145bdc9f3113a6707 languageName: node linkType: hard @@ -1760,7 +1822,7 @@ __metadata: dependencies: mime-types: "npm:~2.1.34" negotiator: "npm:0.6.3" - checksum: 67eaaa90e2917c58418e7a9b89392002d2b1ccd69bcca4799135d0c632f3b082f23f4ae4ddeedbced5aa59bcc7bdf4699c69ebed4593696c922462b7bc5744d6 + checksum: 10/67eaaa90e2917c58418e7a9b89392002d2b1ccd69bcca4799135d0c632f3b082f23f4ae4ddeedbced5aa59bcc7bdf4699c69ebed4593696c922462b7bc5744d6 languageName: node linkType: hard @@ -1769,7 +1831,7 @@ __metadata: resolution: "acorn-import-assertions@npm:1.9.0" peerDependencies: acorn: ^8 - checksum: af8dd58f6b0c6a43e85849744534b99f2133835c6fcdabda9eea27d0a0da625a0d323c4793ba7cb25cf4507609d0f747c210ccc2fc9b5866de04b0e59c9c5617 + checksum: 10/af8dd58f6b0c6a43e85849744534b99f2133835c6fcdabda9eea27d0a0da625a0d323c4793ba7cb25cf4507609d0f747c210ccc2fc9b5866de04b0e59c9c5617 languageName: node linkType: hard @@ -1778,14 +1840,14 @@ __metadata: resolution: "acorn-jsx@npm:5.3.2" peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: d4371eaef7995530b5b5ca4183ff6f062ca17901a6d3f673c9ac011b01ede37e7a1f7f61f8f5cfe709e88054757bb8f3277dc4061087cdf4f2a1f90ccbcdb977 + checksum: 10/d4371eaef7995530b5b5ca4183ff6f062ca17901a6d3f673c9ac011b01ede37e7a1f7f61f8f5cfe709e88054757bb8f3277dc4061087cdf4f2a1f90ccbcdb977 languageName: node linkType: hard "acorn-walk@npm:^8.1.1": version: 8.3.1 resolution: "acorn-walk@npm:8.3.1" - checksum: 64187f1377afcba01ec6a57950e3f6a31fff50e429cdb9c9ab2c24343375e711f0d552e5fce5b6ecf21f754566e7526b6d79e4da80bd83c7ad15644d285b2ad5 + checksum: 10/64187f1377afcba01ec6a57950e3f6a31fff50e429cdb9c9ab2c24343375e711f0d552e5fce5b6ecf21f754566e7526b6d79e4da80bd83c7ad15644d285b2ad5 languageName: node linkType: hard @@ -1794,7 +1856,7 @@ __metadata: resolution: "acorn@npm:8.11.3" bin: acorn: bin/acorn - checksum: b688e7e3c64d9bfb17b596e1b35e4da9d50553713b3b3630cf5690f2b023a84eac90c56851e6912b483fe60e8b4ea28b254c07e92f17ef83d72d78745a8352dd + checksum: 10/b688e7e3c64d9bfb17b596e1b35e4da9d50553713b3b3630cf5690f2b023a84eac90c56851e6912b483fe60e8b4ea28b254c07e92f17ef83d72d78745a8352dd languageName: node linkType: hard @@ -1803,7 +1865,7 @@ __metadata: resolution: "agent-base@npm:6.0.2" dependencies: debug: "npm:4" - checksum: 21fb903e0917e5cb16591b4d0ef6a028a54b83ac30cd1fca58dece3d4e0990512a8723f9f83130d88a41e2af8b1f7be1386fda3ea2d181bb1a62155e75e95e23 + checksum: 10/21fb903e0917e5cb16591b4d0ef6a028a54b83ac30cd1fca58dece3d4e0990512a8723f9f83130d88a41e2af8b1f7be1386fda3ea2d181bb1a62155e75e95e23 languageName: node linkType: hard @@ -1812,7 +1874,7 @@ __metadata: resolution: "agent-base@npm:7.1.0" dependencies: debug: "npm:^4.3.4" - checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f + checksum: 10/f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f languageName: node linkType: hard @@ -1821,7 +1883,7 @@ __metadata: resolution: "agentkeepalive@npm:4.5.0" dependencies: humanize-ms: "npm:^1.2.1" - checksum: dd210ba2a2e2482028f027b1156789744aadbfd773a6c9dd8e4e8001930d5af82382abe19a69240307b1d8003222ce6b0542935038313434b900e351914fc15f + checksum: 10/dd210ba2a2e2482028f027b1156789744aadbfd773a6c9dd8e4e8001930d5af82382abe19a69240307b1d8003222ce6b0542935038313434b900e351914fc15f languageName: node linkType: hard @@ -1831,7 +1893,7 @@ __metadata: dependencies: clean-stack: "npm:^2.0.0" indent-string: "npm:^4.0.0" - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + checksum: 10/1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 languageName: node linkType: hard @@ -1840,7 +1902,7 @@ __metadata: resolution: "ajv-keywords@npm:3.5.2" peerDependencies: ajv: ^6.9.1 - checksum: d57c9d5bf8849bddcbd801b79bc3d2ddc736c2adb6b93a6a365429589dd7993ddbd5d37c6025ed6a7f89c27506b80131d5345c5b1fa6a97e40cd10a96bcd228c + checksum: 10/d57c9d5bf8849bddcbd801b79bc3d2ddc736c2adb6b93a6a365429589dd7993ddbd5d37c6025ed6a7f89c27506b80131d5345c5b1fa6a97e40cd10a96bcd228c languageName: node linkType: hard @@ -1852,7 +1914,7 @@ __metadata: fast-json-stable-stringify: "npm:^2.0.0" json-schema-traverse: "npm:^0.4.1" uri-js: "npm:^4.2.2" - checksum: 48d6ad21138d12eb4d16d878d630079a2bda25a04e745c07846a4ad768319533031e28872a9b3c5790fa1ec41aabdf2abed30a56e5a03ebc2cf92184b8ee306c + checksum: 10/48d6ad21138d12eb4d16d878d630079a2bda25a04e745c07846a4ad768319533031e28872a9b3c5790fa1ec41aabdf2abed30a56e5a03ebc2cf92184b8ee306c languageName: node linkType: hard @@ -1861,28 +1923,28 @@ __metadata: resolution: "ansi-align@npm:3.0.1" dependencies: string-width: "npm:^4.1.0" - checksum: 4c7e8b6a10eaf18874ecee964b5db62ac86d0b9266ad4987b3a1efcb5d11a9e12c881ee40d14951833135a8966f10a3efe43f9c78286a6e632f53d85ad28b9c0 + checksum: 10/4c7e8b6a10eaf18874ecee964b5db62ac86d0b9266ad4987b3a1efcb5d11a9e12c881ee40d14951833135a8966f10a3efe43f9c78286a6e632f53d85ad28b9c0 languageName: node linkType: hard "ansi-colors@npm:4.1.1": version: 4.1.1 resolution: "ansi-colors@npm:4.1.1" - checksum: e862fddd0a9ca88f1e7c9312ea70674cec3af360c994762309f6323730525e92c77d2715ee5f08aa8f438b7ca18efe378af647f501fc92b15b8e4b3b52d09db4 + checksum: 10/e862fddd0a9ca88f1e7c9312ea70674cec3af360c994762309f6323730525e92c77d2715ee5f08aa8f438b7ca18efe378af647f501fc92b15b8e4b3b52d09db4 languageName: node linkType: hard "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" - checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + checksum: 10/2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b languageName: node linkType: hard "ansi-regex@npm:^6.0.1": version: 6.0.1 resolution: "ansi-regex@npm:6.0.1" - checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + checksum: 10/1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 languageName: node linkType: hard @@ -1891,7 +1953,7 @@ __metadata: resolution: "ansi-styles@npm:3.2.1" dependencies: color-convert: "npm:^1.9.0" - checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + checksum: 10/d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 languageName: node linkType: hard @@ -1900,14 +1962,14 @@ __metadata: resolution: "ansi-styles@npm:4.3.0" dependencies: color-convert: "npm:^2.0.1" - checksum: b4494dfbfc7e4591b4711a396bd27e540f8153914123dccb4cdbbcb514015ada63a3809f362b9d8d4f6b17a706f1d7bea3c6f974b15fa5ae76b5b502070889ff + checksum: 10/b4494dfbfc7e4591b4711a396bd27e540f8153914123dccb4cdbbcb514015ada63a3809f362b9d8d4f6b17a706f1d7bea3c6f974b15fa5ae76b5b502070889ff languageName: node linkType: hard "ansi-styles@npm:^6.1.0": version: 6.2.1 resolution: "ansi-styles@npm:6.2.1" - checksum: 70fdf883b704d17a5dfc9cde206e698c16bcd74e7f196ab821511651aee4f9f76c9514bdfa6ca3a27b5e49138b89cb222a28caf3afe4567570139577f991df32 + checksum: 10/70fdf883b704d17a5dfc9cde206e698c16bcd74e7f196ab821511651aee4f9f76c9514bdfa6ca3a27b5e49138b89cb222a28caf3afe4567570139577f991df32 languageName: node linkType: hard @@ -1962,7 +2024,7 @@ __metadata: ts-node: "npm:^10.9.2" typescript: "npm:^5.3.3" uuid: "npm:^9.0.1" - vscode-extension-tester: "npm:^7.0.0" + vscode-extension-tester: "npm:^7.2.0" vscode-languageclient: "npm:^8.1.0" vscode-uri: "npm:^3.0.8" warnings-to-errors-webpack-plugin: "npm:^2.3.0" @@ -1976,7 +2038,7 @@ __metadata: "antsibull-docs@npm:^1.0.0": version: 1.0.0 resolution: "antsibull-docs@npm:1.0.0" - checksum: 87d6e78881155f9645f4ef944a8f62ade63e37311cc47380b8160296f294523f5ed9c77f93b6df0adcfffde27fa607a856e3965f8509922ff597aa5c8867cfdb + checksum: 10/87d6e78881155f9645f4ef944a8f62ade63e37311cc47380b8160296f294523f5ed9c77f93b6df0adcfffde27fa607a856e3965f8509922ff597aa5c8867cfdb languageName: node linkType: hard @@ -1986,7 +2048,7 @@ __metadata: dependencies: normalize-path: "npm:^3.0.0" picomatch: "npm:^2.0.4" - checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + checksum: 10/3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 languageName: node linkType: hard @@ -1995,21 +2057,21 @@ __metadata: resolution: "append-transform@npm:2.0.0" dependencies: default-require-extensions: "npm:^3.0.0" - checksum: f26f393bf7a428fd1bb18f2758a819830a582243310c5170edb3f98fdc5a535333d02b952f7c2d9b14522bd8ead5b132a0b15000eca18fa9f49172963ebbc231 + checksum: 10/f26f393bf7a428fd1bb18f2758a819830a582243310c5170edb3f98fdc5a535333d02b952f7c2d9b14522bd8ead5b132a0b15000eca18fa9f49172963ebbc231 languageName: node linkType: hard "aproba@npm:^1.0.3 || ^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" - checksum: c2b9a631298e8d6f3797547e866db642f68493808f5b37cd61da778d5f6ada890d16f668285f7d60bd4fc3b03889bd590ffe62cf81b700e9bb353431238a0a7b + checksum: 10/c2b9a631298e8d6f3797547e866db642f68493808f5b37cd61da778d5f6ada890d16f668285f7d60bd4fc3b03889bd590ffe62cf81b700e9bb353431238a0a7b languageName: node linkType: hard "archy@npm:^1.0.0": version: 1.0.0 resolution: "archy@npm:1.0.0" - checksum: d7928049a57988b86df3f4de75ca16a4252ccee591d085c627e649fc54c5ae5daa833f17aa656bd825bd00bc0a2756ae03d2b983050bdbda1046b6d832bf7303 + checksum: 10/d7928049a57988b86df3f4de75ca16a4252ccee591d085c627e649fc54c5ae5daa833f17aa656bd825bd00bc0a2756ae03d2b983050bdbda1046b6d832bf7303 languageName: node linkType: hard @@ -2019,21 +2081,21 @@ __metadata: dependencies: delegates: "npm:^1.0.0" readable-stream: "npm:^3.6.0" - checksum: 390731720e1bf9ed5d0efc635ea7df8cbc4c90308b0645a932f06e8495a0bf1ecc7987d3b97e805f62a17d6c4b634074b25200aa4d149be2a7b17250b9744bc4 + checksum: 10/390731720e1bf9ed5d0efc635ea7df8cbc4c90308b0645a932f06e8495a0bf1ecc7987d3b97e805f62a17d6c4b634074b25200aa4d149be2a7b17250b9744bc4 languageName: node linkType: hard "arg@npm:^4.1.0": version: 4.1.3 resolution: "arg@npm:4.1.3" - checksum: 969b491082f20cad166649fa4d2073ea9e974a4e5ac36247ca23d2e5a8b3cb12d60e9ff70a8acfe26d76566c71fd351ee5e6a9a6595157eb36f92b1fd64e1599 + checksum: 10/969b491082f20cad166649fa4d2073ea9e974a4e5ac36247ca23d2e5a8b3cb12d60e9ff70a8acfe26d76566c71fd351ee5e6a9a6595157eb36f92b1fd64e1599 languageName: node linkType: hard "arg@npm:^5.0.2": version: 5.0.2 resolution: "arg@npm:5.0.2" - checksum: 92fe7de222054a060fd2329e92e867410b3ea260328147ee3fb7855f78efae005f4087e698d4e688a856893c56bb09951588c40f2c901cf6996cd8cd7bcfef2c + checksum: 10/92fe7de222054a060fd2329e92e867410b3ea260328147ee3fb7855f78efae005f4087e698d4e688a856893c56bb09951588c40f2c901cf6996cd8cd7bcfef2c languageName: node linkType: hard @@ -2042,70 +2104,70 @@ __metadata: resolution: "argparse@npm:1.0.10" dependencies: sprintf-js: "npm:~1.0.2" - checksum: c6a621343a553ff3779390bb5ee9c2263d6643ebcd7843227bdde6cc7adbed796eb5540ca98db19e3fd7b4714e1faa51551f8849b268bb62df27ddb15cbcd91e + checksum: 10/c6a621343a553ff3779390bb5ee9c2263d6643ebcd7843227bdde6cc7adbed796eb5540ca98db19e3fd7b4714e1faa51551f8849b268bb62df27ddb15cbcd91e languageName: node linkType: hard "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" - checksum: 18640244e641a417ec75a9bd38b0b2b6b95af5199aa241b131d4b2fb206f334d7ecc600bd194861610a5579084978bfcbb02baa399dbe442d56d0ae5e60dbaef + checksum: 10/18640244e641a417ec75a9bd38b0b2b6b95af5199aa241b131d4b2fb206f334d7ecc600bd194861610a5579084978bfcbb02baa399dbe442d56d0ae5e60dbaef languageName: node linkType: hard "arr-union@npm:^3.1.0": version: 3.1.0 resolution: "arr-union@npm:3.1.0" - checksum: b5b0408c6eb7591143c394f3be082fee690ddd21f0fdde0a0a01106799e847f67fcae1b7e56b0a0c173290e29c6aca9562e82b300708a268bc8f88f3d6613cb9 + checksum: 10/b5b0408c6eb7591143c394f3be082fee690ddd21f0fdde0a0a01106799e847f67fcae1b7e56b0a0c173290e29c6aca9562e82b300708a268bc8f88f3d6613cb9 languageName: node linkType: hard "array-differ@npm:^3.0.0": version: 3.0.0 resolution: "array-differ@npm:3.0.0" - checksum: 117edd9df5c1530bd116c6e8eea891d4bd02850fd89b1b36e532b6540e47ca620a373b81feca1c62d1395d9ae601516ba538abe5e8172d41091da2c546b05fb7 + checksum: 10/117edd9df5c1530bd116c6e8eea891d4bd02850fd89b1b36e532b6540e47ca620a373b81feca1c62d1395d9ae601516ba538abe5e8172d41091da2c546b05fb7 languageName: node linkType: hard "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" - checksum: e13c9d247241be82f8b4ec71d035ed7204baa82fae820d4db6948d30d3c4a9f2b3905eb2eec2b937d4aa3565200bd3a1c500480114cff649fa748747d2a50feb + checksum: 10/e13c9d247241be82f8b4ec71d035ed7204baa82fae820d4db6948d30d3c4a9f2b3905eb2eec2b937d4aa3565200bd3a1c500480114cff649fa748747d2a50feb languageName: node linkType: hard "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" - checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + checksum: 10/5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d languageName: node linkType: hard "arrify@npm:^2.0.1": version: 2.0.1 resolution: "arrify@npm:2.0.1" - checksum: 067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209 + checksum: 10/067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209 languageName: node linkType: hard "assertion-error@npm:^1.1.0": version: 1.1.0 resolution: "assertion-error@npm:1.1.0" - checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf + checksum: 10/fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf languageName: node linkType: hard "async@npm:^3.2.0": version: 3.2.5 resolution: "async@npm:3.2.5" - checksum: 323c3615c3f0ab1ac25a6f953296bc0ac3213d5e0f1c0debdb12964e55963af288d570293c11e44f7967af58c06d2a88d0ea588c86ec0fbf62fa98037f604a0f + checksum: 10/323c3615c3f0ab1ac25a6f953296bc0ac3213d5e0f1c0debdb12964e55963af288d570293c11e44f7967af58c06d2a88d0ea588c86ec0fbf62fa98037f604a0f languageName: node linkType: hard "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" - checksum: 3ce727cbc78f69d6a4722517a58ee926c8c21083633b1d3fdf66fd688f6c127a53a592141bd4866f9b63240a86e9d8e974b13919450bd17fa33c2d22c4558ad8 + checksum: 10/3ce727cbc78f69d6a4722517a58ee926c8c21083633b1d3fdf66fd688f6c127a53a592141bd4866f9b63240a86e9d8e974b13919450bd17fa33c2d22c4558ad8 languageName: node linkType: hard @@ -2116,7 +2178,7 @@ __metadata: follow-redirects: "npm:^1.15.4" form-data: "npm:^4.0.0" proxy-from-env: "npm:^1.1.0" - checksum: a1932b089ece759cd261f175d9ebf4d41c8994cf0c0767cda86055c7a19bcfdade8ae3464bf4cec4c8b142f4a657dc664fb77a41855e8376cf38b86d7a86518f + checksum: 10/a1932b089ece759cd261f175d9ebf4d41c8994cf0c0767cda86055c7a19bcfdade8ae3464bf4cec4c8b142f4a657dc664fb77a41855e8376cf38b86d7a86518f languageName: node linkType: hard @@ -2126,21 +2188,21 @@ __metadata: dependencies: tunnel: "npm:0.0.6" typed-rest-client: "npm:^1.8.4" - checksum: a01ee699e2488a3dce7ec99994db97c8124f7b793a0d9affacdbdb30235009c4e2151ebc2ec75eadbe91c2ea849d2a591f3535945343eaf235d1943253045aee + checksum: 10/a01ee699e2488a3dce7ec99994db97c8124f7b793a0d9affacdbdb30235009c4e2151ebc2ec75eadbe91c2ea849d2a591f3535945343eaf235d1943253045aee languageName: node linkType: hard "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" - checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + checksum: 10/9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 languageName: node linkType: hard "base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" - checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + checksum: 10/669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 languageName: node linkType: hard @@ -2155,7 +2217,7 @@ __metadata: extend-shallow: "npm:^2.0.1" is-extglob: "npm:^2.1.1" is-glob: "npm:^4.0.0" - checksum: 8918231a996cb46d2d975af28e0a6471d6041896103311292a99f74082baaa406391f567b78db8c289517b2e1f3d5ab40cf1096cc45e33238c81fd04c28efc71 + checksum: 10/8918231a996cb46d2d975af28e0a6471d6041896103311292a99f74082baaa406391f567b78db8c289517b2e1f3d5ab40cf1096cc45e33238c81fd04c28efc71 languageName: node linkType: hard @@ -2165,31 +2227,14 @@ __metadata: dependencies: arr-union: "npm:^3.1.0" is-windows: "npm:^1.0.1" - checksum: ed273905a206da2a357de2848e82957ea9466910e9be2f6d630d0ef50343b80b620aec76c1f5c593d3103f1c310225ac7c158f2fd0745e9ef34d4dc0fd8979fd - languageName: node - linkType: hard - -"big-integer@npm:^1.6.17": - version: 1.6.52 - resolution: "big-integer@npm:1.6.52" - checksum: 4bc6ae152a96edc9f95020f5fc66b13d26a9ad9a021225a9f0213f7e3dc44269f423aa8c42e19d6ac4a63bb2b22140b95d10be8f9ca7a6d9aa1b22b330d1f514 + checksum: 10/ed273905a206da2a357de2848e82957ea9466910e9be2f6d630d0ef50343b80b620aec76c1f5c593d3103f1c310225ac7c158f2fd0745e9ef34d4dc0fd8979fd languageName: node linkType: hard "binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" - checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 - languageName: node - linkType: hard - -"binary@npm:~0.3.0": - version: 0.3.0 - resolution: "binary@npm:0.3.0" - dependencies: - buffers: "npm:~0.1.1" - chainsaw: "npm:~0.1.0" - checksum: 127591ebb7bfca242ec11be9ef874bcde17c520f249d764810045971b6617b659e8af4452f8a1586db7fd47e1b481a75d22c8f207fc1466c0f099b9435e51679 + checksum: 10/ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 languageName: node linkType: hard @@ -2199,7 +2244,7 @@ __metadata: dependencies: readable-stream: "npm:^2.3.5" safe-buffer: "npm:^5.1.1" - checksum: 11d775b09ebd7d8c0df1ed7efd03cc8a2b1283c804a55153c81a0b586728a085fa24240647cac9a60163eb6f36a28cf8c45b80bf460a46336d4c84c40205faff + checksum: 10/11d775b09ebd7d8c0df1ed7efd03cc8a2b1283c804a55153c81a0b586728a085fa24240647cac9a60163eb6f36a28cf8c45b80bf460a46336d4c84c40205faff languageName: node linkType: hard @@ -2210,21 +2255,14 @@ __metadata: buffer: "npm:^5.5.0" inherits: "npm:^2.0.4" readable-stream: "npm:^3.4.0" - checksum: b7904e66ed0bdfc813c06ea6c3e35eafecb104369dbf5356d0f416af90c1546de3b74e5b63506f0629acf5e16a6f87c3798f16233dcff086e9129383aa02ab55 + checksum: 10/b7904e66ed0bdfc813c06ea6c3e35eafecb104369dbf5356d0f416af90c1546de3b74e5b63506f0629acf5e16a6f87c3798f16233dcff086e9129383aa02ab55 languageName: node linkType: hard "bluebird@npm:3.7.2": version: 3.7.2 resolution: "bluebird@npm:3.7.2" - checksum: 007c7bad22c5d799c8dd49c85b47d012a1fe3045be57447721e6afbd1d5be43237af1db62e26cb9b0d9ba812d2e4ca3bac82f6d7e016b6b88de06ee25ceb96e7 - languageName: node - linkType: hard - -"bluebird@npm:~3.4.1": - version: 3.4.7 - resolution: "bluebird@npm:3.4.7" - checksum: 340e4d11d4b6a26d90371180effb4e500197c2943e5426472d6b6bffca0032a534226ad10255fc0e39c025bea197341c6b2a4258f8c0f18217c7b3a254c76c14 + checksum: 10/007c7bad22c5d799c8dd49c85b47d012a1fe3045be57447721e6afbd1d5be43237af1db62e26cb9b0d9ba812d2e4ca3bac82f6d7e016b6b88de06ee25ceb96e7 languageName: node linkType: hard @@ -2244,14 +2282,14 @@ __metadata: raw-body: "npm:2.5.1" type-is: "npm:~1.6.18" unpipe: "npm:1.0.0" - checksum: 5f8d128022a2fb8b6e7990d30878a0182f300b70e46b3f9d358a9433ad6275f0de46add6d63206da3637c01c3b38b6111a7480f7e7ac2e9f7b989f6133fe5510 + checksum: 10/5f8d128022a2fb8b6e7990d30878a0182f300b70e46b3f9d358a9433ad6275f0de46add6d63206da3637c01c3b38b6111a7480f7e7ac2e9f7b989f6133fe5510 languageName: node linkType: hard "boolbase@npm:^1.0.0": version: 1.0.0 resolution: "boolbase@npm:1.0.0" - checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 + checksum: 10/3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 languageName: node linkType: hard @@ -2267,7 +2305,7 @@ __metadata: type-fest: "npm:^2.13.0" widest-line: "npm:^4.0.1" wrap-ansi: "npm:^8.1.0" - checksum: a21d514435ccdd51f11088ad42e6298e3ff6be1bc2801699dcc1d3d79a2c5b005b5384dd03742e91a1ce2d9aedf99996efb36ed5fc7c5c392e19de2404bcfa37 + checksum: 10/a21d514435ccdd51f11088ad42e6298e3ff6be1bc2801699dcc1d3d79a2c5b005b5384dd03742e91a1ce2d9aedf99996efb36ed5fc7c5c392e19de2404bcfa37 languageName: node linkType: hard @@ -2277,7 +2315,7 @@ __metadata: dependencies: balanced-match: "npm:^1.0.0" concat-map: "npm:0.0.1" - checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + checksum: 10/faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 languageName: node linkType: hard @@ -2286,7 +2324,7 @@ __metadata: resolution: "brace-expansion@npm:2.0.1" dependencies: balanced-match: "npm:^1.0.0" - checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + checksum: 10/a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 languageName: node linkType: hard @@ -2295,14 +2333,14 @@ __metadata: resolution: "braces@npm:3.0.2" dependencies: fill-range: "npm:^7.0.1" - checksum: 966b1fb48d193b9d155f810e5efd1790962f2c4e0829f8440b8ad236ba009222c501f70185ef732fef17a4c490bb33a03b90dab0631feafbdf447da91e8165b1 + checksum: 10/966b1fb48d193b9d155f810e5efd1790962f2c4e0829f8440b8ad236ba009222c501f70185ef732fef17a4c490bb33a03b90dab0631feafbdf447da91e8165b1 languageName: node linkType: hard "browser-stdout@npm:1.3.1": version: 1.3.1 resolution: "browser-stdout@npm:1.3.1" - checksum: ac70a84e346bb7afc5045ec6f22f6a681b15a4057447d4cc1c48a25c6dedb302a49a46dd4ddfb5cdd9c96e0c905a8539be1b98ae7bc440512152967009ec7015 + checksum: 10/ac70a84e346bb7afc5045ec6f22f6a681b15a4057447d4cc1c48a25c6dedb302a49a46dd4ddfb5cdd9c96e0c905a8539be1b98ae7bc440512152967009ec7015 languageName: node linkType: hard @@ -2316,14 +2354,14 @@ __metadata: update-browserslist-db: "npm:^1.0.13" bin: browserslist: cli.js - checksum: d46a906c79dfe95d9702c020afbe5b7b4dbe2019b85432e7a020326adff27e63e3c0a52dc8d4e73247060bbe2c13f000714741903cf96a16baae9c216dc74c75 + checksum: 10/d46a906c79dfe95d9702c020afbe5b7b4dbe2019b85432e7a020326adff27e63e3c0a52dc8d4e73247060bbe2c13f000714741903cf96a16baae9c216dc74c75 languageName: node linkType: hard "buffer-alloc-unsafe@npm:^1.1.0": version: 1.1.0 resolution: "buffer-alloc-unsafe@npm:1.1.0" - checksum: c5e18bf51f67754ec843c9af3d4c005051aac5008a3992938dda1344e5cfec77c4b02b4ca303644d1e9a6e281765155ce6356d85c6f5ccc5cd21afc868def396 + checksum: 10/c5e18bf51f67754ec843c9af3d4c005051aac5008a3992938dda1344e5cfec77c4b02b4ca303644d1e9a6e281765155ce6356d85c6f5ccc5cd21afc868def396 languageName: node linkType: hard @@ -2333,35 +2371,28 @@ __metadata: dependencies: buffer-alloc-unsafe: "npm:^1.1.0" buffer-fill: "npm:^1.0.0" - checksum: 560cd27f3cbe73c614867da373407d4506309c62fe18de45a1ce191f3785ec6ca2488d802ff82065798542422980ca25f903db078c57822218182c37c3576df5 + checksum: 10/560cd27f3cbe73c614867da373407d4506309c62fe18de45a1ce191f3785ec6ca2488d802ff82065798542422980ca25f903db078c57822218182c37c3576df5 languageName: node linkType: hard "buffer-crc32@npm:~0.2.3": version: 0.2.13 resolution: "buffer-crc32@npm:0.2.13" - checksum: 06252347ae6daca3453b94e4b2f1d3754a3b146a111d81c68924c22d91889a40623264e95e67955b1cb4a68cbedf317abeabb5140a9766ed248973096db5ce1c + checksum: 10/06252347ae6daca3453b94e4b2f1d3754a3b146a111d81c68924c22d91889a40623264e95e67955b1cb4a68cbedf317abeabb5140a9766ed248973096db5ce1c languageName: node linkType: hard "buffer-fill@npm:^1.0.0": version: 1.0.0 resolution: "buffer-fill@npm:1.0.0" - checksum: c29b4723ddeab01e74b5d3b982a0c6828f2ded49cef049ddca3dac661c874ecdbcecb5dd8380cf0f4adbeb8cff90a7de724126750a1f1e5ebd4eb6c59a1315b1 + checksum: 10/c29b4723ddeab01e74b5d3b982a0c6828f2ded49cef049ddca3dac661c874ecdbcecb5dd8380cf0f4adbeb8cff90a7de724126750a1f1e5ebd4eb6c59a1315b1 languageName: node linkType: hard "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - -"buffer-indexof-polyfill@npm:~1.0.0": - version: 1.0.2 - resolution: "buffer-indexof-polyfill@npm:1.0.2" - checksum: 808c58a3f06cc6ee2231060959eaa31c490248465f2847e8cfebd3e62563521e67346391caad03ce7616fd765374eb53e941bdd22edb2336431171f46fddcd89 + checksum: 10/0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb languageName: node linkType: hard @@ -2371,14 +2402,7 @@ __metadata: dependencies: base64-js: "npm:^1.3.1" ieee754: "npm:^1.1.13" - checksum: 997434d3c6e3b39e0be479a80288875f71cd1c07d75a3855e6f08ef848a3c966023f79534e22e415ff3a5112708ce06127277ab20e527146d55c84566405c7c6 - languageName: node - linkType: hard - -"buffers@npm:~0.1.1": - version: 0.1.1 - resolution: "buffers@npm:0.1.1" - checksum: 9f0b64bbb8ac4783b1740219ab3532b03ef978fa38e70a0ba8c0695a2f6bc7e2af0ce42f0756b0c1a127070493055adbaf490fb68d95bebd7ccc310c6a483860 + checksum: 10/997434d3c6e3b39e0be479a80288875f71cd1c07d75a3855e6f08ef848a3c966023f79534e22e415ff3a5112708ce06127277ab20e527146d55c84566405c7c6 languageName: node linkType: hard @@ -2387,14 +2411,14 @@ __metadata: resolution: "builtins@npm:5.0.1" dependencies: semver: "npm:^7.0.0" - checksum: 90136fa0ba98b7a3aea33190b1262a5297164731efb6a323b0231acf60cc2ea0b2b1075dbf107038266b8b77d6045fa9631d1c3f90efc1c594ba61218fbfbb4c + checksum: 10/90136fa0ba98b7a3aea33190b1262a5297164731efb6a323b0231acf60cc2ea0b2b1075dbf107038266b8b77d6045fa9631d1c3f90efc1c594ba61218fbfbb4c languageName: node linkType: hard "bytes@npm:3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" - checksum: a10abf2ba70c784471d6b4f58778c0beeb2b5d405148e66affa91f23a9f13d07603d0a0354667310ae1d6dc141474ffd44e2a074be0f6e2254edb8fc21445388 + checksum: 10/a10abf2ba70c784471d6b4f58778c0beeb2b5d405148e66affa91f23a9f13d07603d0a0354667310ae1d6dc141474ffd44e2a074be0f6e2254edb8fc21445388 languageName: node linkType: hard @@ -2420,7 +2444,7 @@ __metadata: ssri: "npm:^9.0.0" tar: "npm:^6.1.11" unique-filename: "npm:^2.0.0" - checksum: a14524d90e377ee691d63a81173b33c473f8bc66eb299c64290b58e1d41b28842397f8d6c15a01b4c57ca340afcec019ae112a45c2f67a79f76130d326472e92 + checksum: 10/a14524d90e377ee691d63a81173b33c473f8bc66eb299c64290b58e1d41b28842397f8d6c15a01b4c57ca340afcec019ae112a45c2f67a79f76130d326472e92 languageName: node linkType: hard @@ -2440,7 +2464,7 @@ __metadata: ssri: "npm:^10.0.0" tar: "npm:^6.1.11" unique-filename: "npm:^3.0.0" - checksum: 6e26c788bc6a18ff42f4d4f97db30d5c60a5dfac8e7c10a03b0307a92cf1b647570547cf3cd96463976c051eb9c7258629863f156e224c82018862c1a8ad0e70 + checksum: 10/6e26c788bc6a18ff42f4d4f97db30d5c60a5dfac8e7c10a03b0307a92cf1b647570547cf3cd96463976c051eb9c7258629863f156e224c82018862c1a8ad0e70 languageName: node linkType: hard @@ -2460,14 +2484,14 @@ __metadata: ssri: "npm:^10.0.0" tar: "npm:^6.1.11" unique-filename: "npm:^3.0.0" - checksum: 5ca58464f785d4d64ac2019fcad95451c8c89bea25949f63acd8987fcc3493eaef1beccc0fa39e673506d879d3fc1ab420760f8a14f8ddf46ea2d121805a5e96 + checksum: 10/5ca58464f785d4d64ac2019fcad95451c8c89bea25949f63acd8987fcc3493eaef1beccc0fa39e673506d879d3fc1ab420760f8a14f8ddf46ea2d121805a5e96 languageName: node linkType: hard "cacheable-lookup@npm:^7.0.0": version: 7.0.0 resolution: "cacheable-lookup@npm:7.0.0" - checksum: 69ea78cd9f16ad38120372e71ba98b64acecd95bbcbcdad811f857dc192bad81ace021f8def012ce19178583db8d46afd1a00b3e8c88527e978e049edbc23252 + checksum: 10/69ea78cd9f16ad38120372e71ba98b64acecd95bbcbcdad811f857dc192bad81ace021f8def012ce19178583db8d46afd1a00b3e8c88527e978e049edbc23252 languageName: node linkType: hard @@ -2482,7 +2506,7 @@ __metadata: mimic-response: "npm:^4.0.0" normalize-url: "npm:^8.0.0" responselike: "npm:^3.0.0" - checksum: 102f454ac68eb66f99a709c5cf65e90ed89f1b9269752578d5a08590b3986c3ea47a5d9dff208fe7b65855a29da129a2f23321b88490106898e0ba70b807c912 + checksum: 10/102f454ac68eb66f99a709c5cf65e90ed89f1b9269752578d5a08590b3986c3ea47a5d9dff208fe7b65855a29da129a2f23321b88490106898e0ba70b807c912 languageName: node linkType: hard @@ -2494,7 +2518,7 @@ __metadata: make-dir: "npm:^3.0.0" package-hash: "npm:^4.0.0" write-file-atomic: "npm:^3.0.0" - checksum: 7e7ca628511ab18c86eea1231834d2591de29a13ae771a7d9ab85be8c6e53e45c5a5b0d0d95d4a3274fc4f26c16956a98162e40c191c131204b5d5aa949660b5 + checksum: 10/7e7ca628511ab18c86eea1231834d2591de29a13ae771a7d9ab85be8c6e53e45c5a5b0d0d95d4a3274fc4f26c16956a98162e40c191c131204b5d5aa949660b5 languageName: node linkType: hard @@ -2505,49 +2529,49 @@ __metadata: function-bind: "npm:^1.1.2" get-intrinsic: "npm:^1.2.1" set-function-length: "npm:^1.1.1" - checksum: 246d44db6ef9bbd418828dbd5337f80b46be4398d522eded015f31554cbb2ea33025b0203b75c7ab05a1a255b56ef218880cca1743e4121e306729f9e414da39 + checksum: 10/246d44db6ef9bbd418828dbd5337f80b46be4398d522eded015f31554cbb2ea33025b0203b75c7ab05a1a255b56ef218880cca1743e4121e306729f9e414da39 languageName: node linkType: hard "callsite@npm:^1.0.0": version: 1.0.0 resolution: "callsite@npm:1.0.0" - checksum: 39fc89ef9dbee7d5491bc69034fc16fbb8876a73456f831cc27060b5828e94357bb6705e0127a6d0182d79b03dbdb0ef88223d0b599c26667c871c89b30eb681 + checksum: 10/39fc89ef9dbee7d5491bc69034fc16fbb8876a73456f831cc27060b5828e94357bb6705e0127a6d0182d79b03dbdb0ef88223d0b599c26667c871c89b30eb681 languageName: node linkType: hard "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" - checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + checksum: 10/072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 languageName: node linkType: hard "camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" - checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + checksum: 10/e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b languageName: node linkType: hard "camelcase@npm:^6.0.0, camelcase@npm:^6.3.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" - checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + checksum: 10/8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d languageName: node linkType: hard "camelcase@npm:^7.0.1": version: 7.0.1 resolution: "camelcase@npm:7.0.1" - checksum: 86ab8f3ebf08bcdbe605a211a242f00ed30d8bfb77dab4ebb744dd36efbc84432d1c4adb28975ba87a1b8be40a80fbd1e60e2f06565315918fa7350011a26d3d + checksum: 10/86ab8f3ebf08bcdbe605a211a242f00ed30d8bfb77dab4ebb744dd36efbc84432d1c4adb28975ba87a1b8be40a80fbd1e60e2f06565315918fa7350011a26d3d languageName: node linkType: hard "caniuse-lite@npm:^1.0.30001580": version: 1.0.30001580 resolution: "caniuse-lite@npm:1.0.30001580" - checksum: b626d25d792c766383a47c9efe1384f7d3c3b23e0ee70bf121e8b3a628806a96a21def16a44e58b75f4a5e23b5e008f51c2cc1e8be477b8c8d9493dcc170dd0e + checksum: 10/b626d25d792c766383a47c9efe1384f7d3c3b23e0ee70bf121e8b3a628806a96a21def16a44e58b75f4a5e23b5e008f51c2cc1e8be477b8c8d9493dcc170dd0e languageName: node linkType: hard @@ -2562,16 +2586,7 @@ __metadata: loupe: "npm:^2.3.6" pathval: "npm:^1.1.1" type-detect: "npm:^4.0.8" - checksum: c6d7aba913a67529c68dbec3673f94eb9c586c5474cc5142bd0b587c9c9ec9e5fbaa937e038ecaa6475aea31433752d5fabdd033b9248bde6ae53befcde774ae - languageName: node - linkType: hard - -"chainsaw@npm:~0.1.0": - version: 0.1.0 - resolution: "chainsaw@npm:0.1.0" - dependencies: - traverse: "npm:>=0.3.0 <0.4" - checksum: d85627cd3440eb908b9cd72a1ddce4a36bb1ebc9d431a4a2f44b4435cbefdd83625c05114d870381ba765849c34ad05f236c3f590b1581ea03c22897fe6883d0 + checksum: 10/c6d7aba913a67529c68dbec3673f94eb9c586c5474cc5142bd0b587c9c9ec9e5fbaa937e038ecaa6475aea31433752d5fabdd033b9248bde6ae53befcde774ae languageName: node linkType: hard @@ -2582,7 +2597,7 @@ __metadata: ansi-styles: "npm:^3.2.1" escape-string-regexp: "npm:^1.0.5" supports-color: "npm:^5.3.0" - checksum: 3d1d103433166f6bfe82ac75724951b33769675252d8417317363ef9d54699b7c3b2d46671b772b893a8e50c3ece70c4b933c73c01e81bc60ea4df9b55afa303 + checksum: 10/3d1d103433166f6bfe82ac75724951b33769675252d8417317363ef9d54699b7c3b2d46671b772b893a8e50c3ece70c4b933c73c01e81bc60ea4df9b55afa303 languageName: node linkType: hard @@ -2592,14 +2607,14 @@ __metadata: dependencies: ansi-styles: "npm:^4.1.0" supports-color: "npm:^7.1.0" - checksum: cb3f3e594913d63b1814d7ca7c9bafbf895f75fbf93b92991980610dfd7b48500af4e3a5d4e3a8f337990a96b168d7eb84ee55efdce965e2ee8efc20f8c8f139 + checksum: 10/cb3f3e594913d63b1814d7ca7c9bafbf895f75fbf93b92991980610dfd7b48500af4e3a5d4e3a8f337990a96b168d7eb84ee55efdce965e2ee8efc20f8c8f139 languageName: node linkType: hard "chalk@npm:^5.0.1, chalk@npm:^5.2.0, chalk@npm:^5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" - checksum: 6373caaab21bd64c405bfc4bd9672b145647fc9482657b5ea1d549b3b2765054e9d3d928870cdf764fb4aad67555f5061538ff247b8310f110c5c888d92397ea + checksum: 10/6373caaab21bd64c405bfc4bd9672b145647fc9482657b5ea1d549b3b2765054e9d3d928870cdf764fb4aad67555f5061538ff247b8310f110c5c888d92397ea languageName: node linkType: hard @@ -2608,14 +2623,14 @@ __metadata: resolution: "check-error@npm:1.0.3" dependencies: get-func-name: "npm:^2.0.2" - checksum: e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 + checksum: 10/e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 languageName: node linkType: hard "check-more-types@npm:2.24.0": version: 2.24.0 resolution: "check-more-types@npm:2.24.0" - checksum: 67c5288443bd73a81638e1185f8c5410d0edf6458c086149ef1cda95c07535b5dd5c11c426dc3ee8f0de0f3244aa2d4f2ba1937aaa8a94995589cdcce0bbccb9 + checksum: 10/67c5288443bd73a81638e1185f8c5410d0edf6458c086149ef1cda95c07535b5dd5c11c426dc3ee8f0de0f3244aa2d4f2ba1937aaa8a94995589cdcce0bbccb9 languageName: node linkType: hard @@ -2629,7 +2644,7 @@ __metadata: domelementtype: "npm:^2.3.0" domhandler: "npm:^5.0.3" domutils: "npm:^3.0.1" - checksum: b5d89208c23468c3a32d1e04f88b9e8c6e332e3649650c5cd29255e2cebc215071ae18563f58c3dc3f6ef4c234488fc486035490fceb78755572288245e2931a + checksum: 10/b5d89208c23468c3a32d1e04f88b9e8c6e332e3649650c5cd29255e2cebc215071ae18563f58c3dc3f6ef4c234488fc486035490fceb78755572288245e2931a languageName: node linkType: hard @@ -2644,7 +2659,7 @@ __metadata: htmlparser2: "npm:^8.0.1" parse5: "npm:^7.0.0" parse5-htmlparser2-tree-adapter: "npm:^7.0.0" - checksum: 812fed61aa4b669bbbdd057d0d7f73ba4649cabfd4fc3a8f1d5c7499e4613b430636102716369cbd6bbed8f1bdcb06387ae8342289fb908b2743184775f94f18 + checksum: 10/812fed61aa4b669bbbdd057d0d7f73ba4649cabfd4fc3a8f1d5c7499e4613b430636102716369cbd6bbed8f1bdcb06387ae8342289fb908b2743184775f94f18 languageName: node linkType: hard @@ -2663,56 +2678,56 @@ __metadata: dependenciesMeta: fsevents: optional: true - checksum: 863e3ff78ee7a4a24513d2a416856e84c8e4f5e60efbe03e8ab791af1a183f569b62fc6f6b8044e2804966cb81277ddbbc1dc374fba3265bd609ea8efd62f5b3 + checksum: 10/863e3ff78ee7a4a24513d2a416856e84c8e4f5e60efbe03e8ab791af1a183f569b62fc6f6b8044e2804966cb81277ddbbc1dc374fba3265bd609ea8efd62f5b3 languageName: node linkType: hard "chownr@npm:^1.0.1, chownr@npm:^1.1.1": version: 1.1.4 resolution: "chownr@npm:1.1.4" - checksum: 115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d + checksum: 10/115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d languageName: node linkType: hard "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + checksum: 10/c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f languageName: node linkType: hard "chrome-trace-event@npm:^1.0.2": version: 1.0.3 resolution: "chrome-trace-event@npm:1.0.3" - checksum: b5fbdae5bf00c96fa3213de919f2b2617a942bfcb891cdf735fbad2a6f4f3c25d42e3f2b1703328619d352c718b46b9e18999fd3af7ef86c26c91db6fae1f0da + checksum: 10/b5fbdae5bf00c96fa3213de919f2b2617a942bfcb891cdf735fbad2a6f4f3c25d42e3f2b1703328619d352c718b46b9e18999fd3af7ef86c26c91db6fae1f0da languageName: node linkType: hard "ci-info@npm:^2.0.0": version: 2.0.0 resolution: "ci-info@npm:2.0.0" - checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 + checksum: 10/3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 languageName: node linkType: hard "ci-info@npm:^3.2.0": version: 3.9.0 resolution: "ci-info@npm:3.9.0" - checksum: 75bc67902b4d1c7b435497adeb91598f6d52a3389398e44294f6601b20cfef32cf2176f7be0eb961d9e085bb333a8a5cae121cb22f81cf238ae7f58eb80e9397 + checksum: 10/75bc67902b4d1c7b435497adeb91598f6d52a3389398e44294f6601b20cfef32cf2176f7be0eb961d9e085bb333a8a5cae121cb22f81cf238ae7f58eb80e9397 languageName: node linkType: hard "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + checksum: 10/2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 languageName: node linkType: hard "cli-boxes@npm:^3.0.0": version: 3.0.0 resolution: "cli-boxes@npm:3.0.0" - checksum: 637d84419d293a9eac40a1c8c96a2859e7d98b24a1a317788e13c8f441be052fc899480c6acab3acc82eaf1bccda6b7542d7cdcf5c9c3cc39227175dc098d5b2 + checksum: 10/637d84419d293a9eac40a1c8c96a2859e7d98b24a1a317788e13c8f441be052fc899480c6acab3acc82eaf1bccda6b7542d7cdcf5c9c3cc39227175dc098d5b2 languageName: node linkType: hard @@ -2725,7 +2740,7 @@ __metadata: dependenciesMeta: "@colors/colors": optional: true - checksum: 8d82b75be7edc7febb1283dc49582a521536527cba80af62a2e4522a0ee39c252886a1a2f02d05ae9d753204dbcffeb3a40d1358ee10dccd7fe8d935cfad3f85 + checksum: 10/8d82b75be7edc7febb1283dc49582a521536527cba80af62a2e4522a0ee39c252886a1a2f02d05ae9d753204dbcffeb3a40d1358ee10dccd7fe8d935cfad3f85 languageName: node linkType: hard @@ -2736,7 +2751,7 @@ __metadata: execa: "npm:^8.0.1" is-wsl: "npm:^3.1.0" is64bit: "npm:^2.0.0" - checksum: ec4ebe7e5c81d9c9cb994637e7b0e068c1c8fc272167ecd5519f967427271ec66e0e64da7268a2630b860eff42933aeabe25ba5e42bb80dbf1fae6362df059ed + checksum: 10/ec4ebe7e5c81d9c9cb994637e7b0e068c1c8fc272167ecd5519f967427271ec66e0e64da7268a2630b860eff42933aeabe25ba5e42bb80dbf1fae6362df059ed languageName: node linkType: hard @@ -2747,7 +2762,7 @@ __metadata: string-width: "npm:^4.2.0" strip-ansi: "npm:^6.0.0" wrap-ansi: "npm:^6.2.0" - checksum: 44afbcc29df0899e87595590792a871cd8c4bc7d6ce92832d9ae268d141a77022adafca1aeaeccff618b62a613b8354e57fe22a275c199ec04baf00d381ef6ab + checksum: 10/44afbcc29df0899e87595590792a871cd8c4bc7d6ce92832d9ae268d141a77022adafca1aeaeccff618b62a613b8354e57fe22a275c199ec04baf00d381ef6ab languageName: node linkType: hard @@ -2758,7 +2773,7 @@ __metadata: string-width: "npm:^4.2.0" strip-ansi: "npm:^6.0.0" wrap-ansi: "npm:^7.0.0" - checksum: db858c49af9d59a32d603987e6fddaca2ce716cd4602ba5a2bb3a5af1351eebe82aba8dff3ef3e1b331f7fa9d40ca66e67bdf8e7c327ce0ea959747ead65c0ef + checksum: 10/db858c49af9d59a32d603987e6fddaca2ce716cd4602ba5a2bb3a5af1351eebe82aba8dff3ef3e1b331f7fa9d40ca66e67bdf8e7c327ce0ea959747ead65c0ef languageName: node linkType: hard @@ -2769,7 +2784,7 @@ __metadata: string-width: "npm:^4.2.0" strip-ansi: "npm:^6.0.1" wrap-ansi: "npm:^7.0.0" - checksum: eaa5561aeb3135c2cddf7a3b3f562fc4238ff3b3fc666869ef2adf264be0f372136702f16add9299087fb1907c2e4ec5dbfe83bd24bce815c70a80c6c1a2e950 + checksum: 10/eaa5561aeb3135c2cddf7a3b3f562fc4238ff3b3fc666869ef2adf264be0f372136702f16add9299087fb1907c2e4ec5dbfe83bd24bce815c70a80c6c1a2e950 languageName: node linkType: hard @@ -2780,7 +2795,7 @@ __metadata: is-plain-object: "npm:^2.0.4" kind-of: "npm:^6.0.2" shallow-clone: "npm:^3.0.0" - checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + checksum: 10/770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 languageName: node linkType: hard @@ -2789,7 +2804,7 @@ __metadata: resolution: "color-convert@npm:1.9.3" dependencies: color-name: "npm:1.1.3" - checksum: ffa319025045f2973919d155f25e7c00d08836b6b33ea2d205418c59bd63a665d713c52d9737a9e0fe467fb194b40fbef1d849bae80d674568ee220a31ef3d10 + checksum: 10/ffa319025045f2973919d155f25e7c00d08836b6b33ea2d205418c59bd63a665d713c52d9737a9e0fe467fb194b40fbef1d849bae80d674568ee220a31ef3d10 languageName: node linkType: hard @@ -2798,21 +2813,21 @@ __metadata: resolution: "color-convert@npm:2.0.1" dependencies: color-name: "npm:~1.1.4" - checksum: fa00c91b4332b294de06b443923246bccebe9fab1b253f7fe1772d37b06a2269b4039a85e309abe1fe11b267b11c08d1d0473fda3badd6167f57313af2887a64 + checksum: 10/fa00c91b4332b294de06b443923246bccebe9fab1b253f7fe1772d37b06a2269b4039a85e309abe1fe11b267b11c08d1d0473fda3badd6167f57313af2887a64 languageName: node linkType: hard "color-name@npm:1.1.3": version: 1.1.3 resolution: "color-name@npm:1.1.3" - checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + checksum: 10/09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d languageName: node linkType: hard "color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" - checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + checksum: 10/b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 languageName: node linkType: hard @@ -2821,21 +2836,21 @@ __metadata: resolution: "color-support@npm:1.1.3" bin: color-support: bin.js - checksum: 4bcfe30eea1498fe1cabc852bbda6c9770f230ea0e4faf4611c5858b1b9e4dde3730ac485e65f54ca182f4c50b626c1bea7c8441ceda47367a54a818c248aa7a + checksum: 10/4bcfe30eea1498fe1cabc852bbda6c9770f230ea0e4faf4611c5858b1b9e4dde3730ac485e65f54ca182f4c50b626c1bea7c8441ceda47367a54a818c248aa7a languageName: node linkType: hard "colorette@npm:^2.0.14": version: 2.0.20 resolution: "colorette@npm:2.0.20" - checksum: 0b8de48bfa5d10afc160b8eaa2b9938f34a892530b2f7d7897e0458d9535a066e3998b49da9d21161c78225b272df19ae3a64d6df28b4c9734c0e55bbd02406f + checksum: 10/0b8de48bfa5d10afc160b8eaa2b9938f34a892530b2f7d7897e0458d9535a066e3998b49da9d21161c78225b272df19ae3a64d6df28b4c9734c0e55bbd02406f languageName: node linkType: hard "colors@npm:1.4.0": version: 1.4.0 resolution: "colors@npm:1.4.0" - checksum: 90b2d5465159813a3983ea72ca8cff75f784824ad70f2cc2b32c233e95bcfbcda101ebc6d6766bc50f57263792629bfb4f1f8a4dfbd1d240f229fc7f69b785fc + checksum: 10/90b2d5465159813a3983ea72ca8cff75f784824ad70f2cc2b32c233e95bcfbcda101ebc6d6766bc50f57263792629bfb4f1f8a4dfbd1d240f229fc7f69b785fc languageName: node linkType: hard @@ -2844,70 +2859,77 @@ __metadata: resolution: "combined-stream@npm:1.0.8" dependencies: delayed-stream: "npm:~1.0.0" - checksum: 2e969e637d05d09fa50b02d74c83a1186f6914aae89e6653b62595cc75a221464f884f55f231b8f4df7a49537fba60bdc0427acd2bf324c09a1dbb84837e36e4 + checksum: 10/2e969e637d05d09fa50b02d74c83a1186f6914aae89e6653b62595cc75a221464f884f55f231b8f4df7a49537fba60bdc0427acd2bf324c09a1dbb84837e36e4 languageName: node linkType: hard "commander@npm:^10.0.1": version: 10.0.1 resolution: "commander@npm:10.0.1" - checksum: 8799faa84a30da985802e661cc9856adfaee324d4b138413013ef7f087e8d7924b144c30a1f1405475f0909f467665cd9e1ce13270a2f41b141dab0b7a58f3fb + checksum: 10/8799faa84a30da985802e661cc9856adfaee324d4b138413013ef7f087e8d7924b144c30a1f1405475f0909f467665cd9e1ce13270a2f41b141dab0b7a58f3fb languageName: node linkType: hard -"commander@npm:^11.0.0, commander@npm:^11.1.0": +"commander@npm:^11.0.0": version: 11.1.0 resolution: "commander@npm:11.1.0" - checksum: 66bd2d8a0547f6cb1d34022efb25f348e433b0e04ad76a65279b1b09da108f59a4d3001ca539c60a7a46ea38bcf399fc17d91adad76a8cf43845d8dcbaf5cda1 + checksum: 10/66bd2d8a0547f6cb1d34022efb25f348e433b0e04ad76a65279b1b09da108f59a4d3001ca539c60a7a46ea38bcf399fc17d91adad76a8cf43845d8dcbaf5cda1 + languageName: node + linkType: hard + +"commander@npm:^12.0.0": + version: 12.0.0 + resolution: "commander@npm:12.0.0" + checksum: 10/62062e2ffe6abd5aa42a551e62fd5eb9b2620f6ac4299382b2aa9fb02f95cda0242d7e84acb890479bd6491edb805f7f91aecb5b4f5c70dc57df49ed7f02ef14 languageName: node linkType: hard "commander@npm:^2.11.0, commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" - checksum: 90c5b6898610cd075984c58c4f88418a4fb44af08c1b1415e9854c03171bec31b336b7f3e4cefe33de994b3f12b03c5e2d638da4316df83593b9e82554e7e95b + checksum: 10/90c5b6898610cd075984c58c4f88418a4fb44af08c1b1415e9854c03171bec31b336b7f3e4cefe33de994b3f12b03c5e2d638da4316df83593b9e82554e7e95b languageName: node linkType: hard "commander@npm:^6.1.0, commander@npm:^6.2.1": version: 6.2.1 resolution: "commander@npm:6.2.1" - checksum: 25b88c2efd0380c84f7844b39cf18510da7bfc5013692d68cdc65f764a1c34e6c8a36ea6d72b6620e3710a930cf8fab2695bdec2bf7107a0f4fa30a3ef3b7d0e + checksum: 10/25b88c2efd0380c84f7844b39cf18510da7bfc5013692d68cdc65f764a1c34e6c8a36ea6d72b6620e3710a930cf8fab2695bdec2bf7107a0f4fa30a3ef3b7d0e languageName: node linkType: hard "commander@npm:^7.2.0": version: 7.2.0 resolution: "commander@npm:7.2.0" - checksum: 9973af10727ad4b44f26703bf3e9fdc323528660a7590efe3aa9ad5042b4584c0deed84ba443f61c9d6f02dade54a5a5d3c95e306a1e1630f8374ae6db16c06d + checksum: 10/9973af10727ad4b44f26703bf3e9fdc323528660a7590efe3aa9ad5042b4584c0deed84ba443f61c9d6f02dade54a5a5d3c95e306a1e1630f8374ae6db16c06d languageName: node linkType: hard "commondir@npm:^1.0.1": version: 1.0.1 resolution: "commondir@npm:1.0.1" - checksum: 4620bc4936a4ef12ce7dfcd272bb23a99f2ad68889a4e4ad766c9f8ad21af982511934d6f7050d4a8bde90011b1c15d56e61a1b4576d9913efbf697a20172d6c + checksum: 10/4620bc4936a4ef12ce7dfcd272bb23a99f2ad68889a4e4ad766c9f8ad21af982511934d6f7050d4a8bde90011b1c15d56e61a1b4576d9913efbf697a20172d6c languageName: node linkType: hard "compare-versions@npm:^6.1.0": version: 6.1.0 resolution: "compare-versions@npm:6.1.0" - checksum: 20f349e7f8ad784704c68265f4e660e2abbe2c3d5c75793184fccb85f0c5c0263260e01fdd4488376f6b74b0f069e16c9684463f7316b075716fb1581eb36b77 + checksum: 10/20f349e7f8ad784704c68265f4e660e2abbe2c3d5c75793184fccb85f0c5c0263260e01fdd4488376f6b74b0f069e16c9684463f7316b075716fb1581eb36b77 languageName: node linkType: hard "component-emitter@npm:^1.2.1": version: 1.3.1 resolution: "component-emitter@npm:1.3.1" - checksum: 94550aa462c7bd5a61c1bc480e28554aa306066930152d1b1844a0dd3845d4e5db7e261ddec62ae184913b3e59b55a2ad84093b9d3596a8f17c341514d6c483d + checksum: 10/94550aa462c7bd5a61c1bc480e28554aa306066930152d1b1844a0dd3845d4e5db7e261ddec62ae184913b3e59b55a2ad84093b9d3596a8f17c341514d6c483d languageName: node linkType: hard "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" - checksum: 9680699c8e2b3af0ae22592cb764acaf973f292a7b71b8a06720233011853a58e256c89216a10cbe889727532fd77f8bcd49a760cedfde271b8e006c20e079f2 + checksum: 10/9680699c8e2b3af0ae22592cb764acaf973f292a7b71b8a06720233011853a58e256c89216a10cbe889727532fd77f8bcd49a760cedfde271b8e006c20e079f2 languageName: node linkType: hard @@ -2917,7 +2939,7 @@ __metadata: dependencies: ini: "npm:^1.3.4" proto-list: "npm:~1.2.1" - checksum: 83d22cabf709e7669f6870021c4d552e4fc02e9682702b726be94295f42ce76cfed00f70b2910ce3d6c9465d9758e191e28ad2e72ff4e3331768a90da6c1ef03 + checksum: 10/83d22cabf709e7669f6870021c4d552e4fc02e9682702b726be94295f42ce76cfed00f70b2910ce3d6c9465d9758e191e28ad2e72ff4e3331768a90da6c1ef03 languageName: node linkType: hard @@ -2930,14 +2952,14 @@ __metadata: unique-string: "npm:^3.0.0" write-file-atomic: "npm:^3.0.3" xdg-basedir: "npm:^5.0.1" - checksum: 81995351c10bc04c58507f17748477aeac6f47465109d20e3534cebc881d22e927cfd29e73dd852c46c55f62c2b7be4cd1fe6eb3a93ba51f7f9813c218f9bae0 + checksum: 10/81995351c10bc04c58507f17748477aeac6f47465109d20e3534cebc881d22e927cfd29e73dd852c46c55f62c2b7be4cd1fe6eb3a93ba51f7f9813c218f9bae0 languageName: node linkType: hard "console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" - checksum: 27b5fa302bc8e9ae9e98c03c66d76ca289ad0c61ce2fe20ab288d288bee875d217512d2edb2363fc83165e88f1c405180cf3f5413a46e51b4fe1a004840c6cdb + checksum: 10/27b5fa302bc8e9ae9e98c03c66d76ca289ad0c61ce2fe20ab288d288bee875d217512d2edb2363fc83165e88f1c405180cf3f5413a46e51b4fe1a004840c6cdb languageName: node linkType: hard @@ -2946,42 +2968,42 @@ __metadata: resolution: "content-disposition@npm:0.5.4" dependencies: safe-buffer: "npm:5.2.1" - checksum: b7f4ce176e324f19324be69b05bf6f6e411160ac94bc523b782248129eb1ef3be006f6cff431aaea5e337fe5d176ce8830b8c2a1b721626ead8933f0cbe78720 + checksum: 10/b7f4ce176e324f19324be69b05bf6f6e411160ac94bc523b782248129eb1ef3be006f6cff431aaea5e337fe5d176ce8830b8c2a1b721626ead8933f0cbe78720 languageName: node linkType: hard "content-type@npm:~1.0.4": version: 1.0.5 resolution: "content-type@npm:1.0.5" - checksum: 585847d98dc7fb8035c02ae2cb76c7a9bd7b25f84c447e5ed55c45c2175e83617c8813871b4ee22f368126af6b2b167df655829007b21aa10302873ea9c62662 + checksum: 10/585847d98dc7fb8035c02ae2cb76c7a9bd7b25f84c447e5ed55c45c2175e83617c8813871b4ee22f368126af6b2b167df655829007b21aa10302873ea9c62662 languageName: node linkType: hard "convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" - checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + checksum: 10/dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 languageName: node linkType: hard "convert-source-map@npm:^2.0.0": version: 2.0.0 resolution: "convert-source-map@npm:2.0.0" - checksum: c987be3ec061348cdb3c2bfb924bec86dea1eacad10550a85ca23edb0fe3556c3a61c7399114f3331ccb3499d7fd0285ab24566e5745929412983494c3926e15 + checksum: 10/c987be3ec061348cdb3c2bfb924bec86dea1eacad10550a85ca23edb0fe3556c3a61c7399114f3331ccb3499d7fd0285ab24566e5745929412983494c3926e15 languageName: node linkType: hard "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" - checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a + checksum: 10/f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a languageName: node linkType: hard "cookie@npm:0.5.0": version: 0.5.0 resolution: "cookie@npm:0.5.0" - checksum: aae7911ddc5f444a9025fbd979ad1b5d60191011339bce48e555cb83343d0f98b865ff5c4d71fecdfb8555a5cafdc65632f6fce172f32aaf6936830a883a0380 + checksum: 10/aae7911ddc5f444a9025fbd979ad1b5d60191011339bce48e555cb83343d0f98b865ff5c4d71fecdfb8555a5cafdc65632f6fce172f32aaf6936830a883a0380 languageName: node linkType: hard @@ -2999,14 +3021,14 @@ __metadata: bin: copyfiles: copyfiles copyup: copyfiles - checksum: 17070f88cbeaf62a9355341cb2521bacd48069e1ac8e7f95a3f69c848c53646f16ff0f94807a789e0f3eedc11407ec8d3980a13ab62e2add6ef81d0a5900fd85 + checksum: 10/17070f88cbeaf62a9355341cb2521bacd48069e1ac8e7f95a3f69c848c53646f16ff0f94807a789e0f3eedc11407ec8d3980a13ab62e2add6ef81d0a5900fd85 languageName: node linkType: hard "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" - checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + checksum: 10/9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 languageName: node linkType: hard @@ -3019,21 +3041,21 @@ __metadata: parse-json: "npm:^5.0.0" path-type: "npm:^4.0.0" yaml: "npm:^1.10.0" - checksum: 03600bb3870c80ed151b7b706b99a1f6d78df8f4bdad9c95485072ea13358ef294b13dd99f9e7bf4cc0b43bcd3599d40df7e648750d21c2f6817ca2cd687e071 + checksum: 10/03600bb3870c80ed151b7b706b99a1f6d78df8f4bdad9c95485072ea13358ef294b13dd99f9e7bf4cc0b43bcd3599d40df7e648750d21c2f6817ca2cd687e071 languageName: node linkType: hard "countries-and-timezones@npm:^3.4.1": version: 3.6.0 resolution: "countries-and-timezones@npm:3.6.0" - checksum: 4cbea29a877cfddbd16fccc4a95cba63a76e535d49923c729343672238c9bcb9433d9f23467f8d734e8e8d4cef9d67daad9baad04c266c2697438b322d01de27 + checksum: 10/4cbea29a877cfddbd16fccc4a95cba63a76e535d49923c729343672238c9bcb9433d9f23467f8d734e8e8d4cef9d67daad9baad04c266c2697438b322d01de27 languageName: node linkType: hard "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" - checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + checksum: 10/a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff languageName: node linkType: hard @@ -3044,7 +3066,7 @@ __metadata: lru-cache: "npm:^4.0.1" shebang-command: "npm:^1.2.0" which: "npm:^1.2.9" - checksum: 726939c9954fc70c20e538923feaaa33bebc253247d13021737c3c7f68cdc3e0a57f720c0fe75057c0387995349f3f12e20e9bfdbf12274db28019c7ea4ec166 + checksum: 10/726939c9954fc70c20e538923feaaa33bebc253247d13021737c3c7f68cdc3e0a57f720c0fe75057c0387995349f3f12e20e9bfdbf12274db28019c7ea4ec166 languageName: node linkType: hard @@ -3055,7 +3077,7 @@ __metadata: path-key: "npm:^3.1.0" shebang-command: "npm:^2.0.0" which: "npm:^2.0.1" - checksum: e1a13869d2f57d974de0d9ef7acbf69dc6937db20b918525a01dacb5032129bd552d290d886d981e99f1b624cb03657084cc87bd40f115c07ecf376821c729ce + checksum: 10/e1a13869d2f57d974de0d9ef7acbf69dc6937db20b918525a01dacb5032129bd552d290d886d981e99f1b624cb03657084cc87bd40f115c07ecf376821c729ce languageName: node linkType: hard @@ -3064,7 +3086,7 @@ __metadata: resolution: "crypto-random-string@npm:4.0.0" dependencies: type-fest: "npm:^1.0.1" - checksum: cd5d7ae13803de53680aaed4c732f67209af5988cbeec5f6b29082020347c2d8849ca921b2008be7d6bd1d9d198c3c3697e7441d6d0d3da1bf51e9e4d2032149 + checksum: 10/cd5d7ae13803de53680aaed4c732f67209af5988cbeec5f6b29082020347c2d8849ca921b2008be7d6bd1d9d198c3c3697e7441d6d0d3da1bf51e9e4d2032149 languageName: node linkType: hard @@ -3077,21 +3099,21 @@ __metadata: domhandler: "npm:^5.0.2" domutils: "npm:^3.0.1" nth-check: "npm:^2.0.1" - checksum: d486b1e7eb140468218a5ab5af53257e01f937d2173ac46981f6b7de9c5283d55427a36715dc8decfc0c079cf89259ac5b41ef58f6e1a422eee44ab8bfdc78da + checksum: 10/d486b1e7eb140468218a5ab5af53257e01f937d2173ac46981f6b7de9c5283d55427a36715dc8decfc0c079cf89259ac5b41ef58f6e1a422eee44ab8bfdc78da languageName: node linkType: hard "css-what@npm:^6.1.0": version: 6.1.0 resolution: "css-what@npm:6.1.0" - checksum: c67a3a2d0d81843af87f8bf0a4d0845b0f952377714abbb2884e48942409d57a2110eabee003609d02ee487b054614bdfcfc59ee265728ff105bd5aa221c1d0e + checksum: 10/c67a3a2d0d81843af87f8bf0a4d0845b0f952377714abbb2884e48942409d57a2110eabee003609d02ee487b054614bdfcfc59ee265728ff105bd5aa221c1d0e languageName: node linkType: hard "dateformat@npm:^4.5.1": version: 4.6.3 resolution: "dateformat@npm:4.6.3" - checksum: 5c149c91bf9ce2142c89f84eee4c585f0cb1f6faf2536b1af89873f862666a28529d1ccafc44750aa01384da2197c4f76f4e149a3cc0c1cb2c46f5cc45f2bcb5 + checksum: 10/5c149c91bf9ce2142c89f84eee4c585f0cb1f6faf2536b1af89873f862666a28529d1ccafc44750aa01384da2197c4f76f4e149a3cc0c1cb2c46f5cc45f2bcb5 languageName: node linkType: hard @@ -3100,7 +3122,7 @@ __metadata: resolution: "debug@npm:2.6.9" dependencies: ms: "npm:2.0.0" - checksum: e07005f2b40e04f1bd14a3dd20520e9c4f25f60224cb006ce9d6781732c917964e9ec029fc7f1a151083cd929025ad5133814d4dc624a9aaf020effe4914ed14 + checksum: 10/e07005f2b40e04f1bd14a3dd20520e9c4f25f60224cb006ce9d6781732c917964e9ec029fc7f1a151083cd929025ad5133814d4dc624a9aaf020effe4914ed14 languageName: node linkType: hard @@ -3112,21 +3134,21 @@ __metadata: peerDependenciesMeta: supports-color: optional: true - checksum: 0073c3bcbd9cb7d71dd5f6b55be8701af42df3e56e911186dfa46fac3a5b9eb7ce7f377dd1d3be6db8977221f8eb333d945216f645cf56f6b688cd484837d255 + checksum: 10/0073c3bcbd9cb7d71dd5f6b55be8701af42df3e56e911186dfa46fac3a5b9eb7ce7f377dd1d3be6db8977221f8eb333d945216f645cf56f6b688cd484837d255 languageName: node linkType: hard "decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" - checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + checksum: 10/ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa languageName: node linkType: hard "decamelize@npm:^4.0.0": version: 4.0.0 resolution: "decamelize@npm:4.0.0" - checksum: b7d09b82652c39eead4d6678bb578e3bebd848add894b76d0f6b395bc45b2d692fb88d977e7cfb93c4ed6c119b05a1347cef261174916c2e75c0a8ca57da1809 + checksum: 10/b7d09b82652c39eead4d6678bb578e3bebd848add894b76d0f6b395bc45b2d692fb88d977e7cfb93c4ed6c119b05a1347cef261174916c2e75c0a8ca57da1809 languageName: node linkType: hard @@ -3135,7 +3157,7 @@ __metadata: resolution: "decompress-response@npm:6.0.0" dependencies: mimic-response: "npm:^3.1.0" - checksum: d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 + checksum: 10/d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 languageName: node linkType: hard @@ -3144,21 +3166,21 @@ __metadata: resolution: "deep-eql@npm:4.1.3" dependencies: type-detect: "npm:^4.0.0" - checksum: 12ce93ae63de187e77b076d3d51bfc28b11f98910a22c18714cce112791195e86a94f97788180994614b14562a86c9763f67c69f785e4586f806b5df39bf9301 + checksum: 10/12ce93ae63de187e77b076d3d51bfc28b11f98910a22c18714cce112791195e86a94f97788180994614b14562a86c9763f67c69f785e4586f806b5df39bf9301 languageName: node linkType: hard "deep-extend@npm:^0.6.0": version: 0.6.0 resolution: "deep-extend@npm:0.6.0" - checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 + checksum: 10/7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 languageName: node linkType: hard "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" - checksum: ec12d074aef5ae5e81fa470b9317c313142c9e8e2afe3f8efa124db309720db96d1d222b82b84c834e5f87e7a614b44a4684b6683583118b87c833b3be40d4d8 + checksum: 10/ec12d074aef5ae5e81fa470b9317c313142c9e8e2afe3f8efa124db309720db96d1d222b82b84c834e5f87e7a614b44a4684b6683583118b87c833b3be40d4d8 languageName: node linkType: hard @@ -3167,14 +3189,14 @@ __metadata: resolution: "default-require-extensions@npm:3.0.1" dependencies: strip-bom: "npm:^4.0.0" - checksum: 45882fc971dd157faf6716ced04c15cf252c0a2d6f5c5844b66ca49f46ed03396a26cd940771aa569927aee22923a961bab789e74b25aabc94d90742c9dd1217 + checksum: 10/45882fc971dd157faf6716ced04c15cf252c0a2d6f5c5844b66ca49f46ed03396a26cd940771aa569927aee22923a961bab789e74b25aabc94d90742c9dd1217 languageName: node linkType: hard "defer-to-connect@npm:^2.0.1": version: 2.0.1 resolution: "defer-to-connect@npm:2.0.1" - checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b + checksum: 10/8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b languageName: node linkType: hard @@ -3185,21 +3207,21 @@ __metadata: get-intrinsic: "npm:^1.2.1" gopd: "npm:^1.0.1" has-property-descriptors: "npm:^1.0.0" - checksum: 5573c8df96b5857408cad64d9b91b69152e305ce4b06218e5f49b59c6cafdbb90a8bd8a0bb83c7bc67a8d479c04aa697063c9bc28d849b7282f9327586d6bc7b + checksum: 10/5573c8df96b5857408cad64d9b91b69152e305ce4b06218e5f49b59c6cafdbb90a8bd8a0bb83c7bc67a8d479c04aa697063c9bc28d849b7282f9327586d6bc7b languageName: node linkType: hard "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" - checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + checksum: 10/46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 languageName: node linkType: hard "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + checksum: 10/a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd languageName: node linkType: hard @@ -3232,63 +3254,63 @@ __metadata: yargs: "npm:^16.2.0" bin: depcheck: bin/depcheck.js - checksum: e35e87517348a3fd678f9ed7324cb96aff350c65cd0ede7da5be303f03144ad66a18d03ff2b52531cd7900b2ca83f8c2a4fac3295e00db8f701f92fb33744b78 + checksum: 10/e35e87517348a3fd678f9ed7324cb96aff350c65cd0ede7da5be303f03144ad66a18d03ff2b52531cd7900b2ca83f8c2a4fac3295e00db8f701f92fb33744b78 languageName: node linkType: hard "depd@npm:2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" - checksum: c0c8ff36079ce5ada64f46cc9d6fd47ebcf38241105b6e0c98f412e8ad91f084bcf906ff644cc3a4bd876ca27a62accb8b0fff72ea6ed1a414b89d8506f4a5ca + checksum: 10/c0c8ff36079ce5ada64f46cc9d6fd47ebcf38241105b6e0c98f412e8ad91f084bcf906ff644cc3a4bd876ca27a62accb8b0fff72ea6ed1a414b89d8506f4a5ca languageName: node linkType: hard "deps-regex@npm:^0.2.0": version: 0.2.0 resolution: "deps-regex@npm:0.2.0" - checksum: d8eeb89727037f2ae680a619f8eefbc8475d21c3d5273e2bbcb9838aabd1c93fd9e011f51bcda5bd65f042921c1bc156119d9a8a2f3539aa4009950b8f9c79b3 + checksum: 10/d8eeb89727037f2ae680a619f8eefbc8475d21c3d5273e2bbcb9838aabd1c93fd9e011f51bcda5bd65f042921c1bc156119d9a8a2f3539aa4009950b8f9c79b3 languageName: node linkType: hard "destroy@npm:1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" - checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 + checksum: 10/0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 languageName: node linkType: hard "detect-file@npm:^1.0.0": version: 1.0.0 resolution: "detect-file@npm:1.0.0" - checksum: 1861e4146128622e847abe0e1ed80fef01e78532665858a792267adf89032b7a9c698436137707fcc6f02956c2a6a0052d6a0cef5be3d4b76b1ff0da88e2158a + checksum: 10/1861e4146128622e847abe0e1ed80fef01e78532665858a792267adf89032b7a9c698436137707fcc6f02956c2a6a0052d6a0cef5be3d4b76b1ff0da88e2158a languageName: node linkType: hard "detect-libc@npm:^2.0.0": version: 2.0.2 resolution: "detect-libc@npm:2.0.2" - checksum: 6118f30c0c425b1e56b9d2609f29bec50d35a6af0b762b6ad127271478f3bbfda7319ce869230cf1a351f2b219f39332cde290858553336d652c77b970f15de8 + checksum: 10/6118f30c0c425b1e56b9d2609f29bec50d35a6af0b762b6ad127271478f3bbfda7319ce869230cf1a351f2b219f39332cde290858553336d652c77b970f15de8 languageName: node linkType: hard "diff@npm:5.0.0": version: 5.0.0 resolution: "diff@npm:5.0.0" - checksum: 4a179a75b17cbb420eb9145be913f9ddb34b47cb2ba4301e80ae745122826a468f02ca8f5e56945958de26ace594899c8381acb6659c88e7803ef078b53d690c + checksum: 10/4a179a75b17cbb420eb9145be913f9ddb34b47cb2ba4301e80ae745122826a468f02ca8f5e56945958de26ace594899c8381acb6659c88e7803ef078b53d690c languageName: node linkType: hard "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" - checksum: ec09ec2101934ca5966355a229d77afcad5911c92e2a77413efda5455636c4cf2ce84057e2d7715227a2eeeda04255b849bd3ae3a4dd22eb22e86e76456df069 + checksum: 10/ec09ec2101934ca5966355a229d77afcad5911c92e2a77413efda5455636c4cf2ce84057e2d7715227a2eeeda04255b849bd3ae3a4dd22eb22e86e76456df069 languageName: node linkType: hard "diff@npm:^5.0.0, diff@npm:^5.1.0": version: 5.1.0 resolution: "diff@npm:5.1.0" - checksum: f4557032a98b2967fe27b1a91dfcf8ebb6b9a24b1afe616b5c2312465100b861e9b8d4da374be535f2d6b967ce2f53826d7f6edc2a0d32b2ab55abc96acc2f9d + checksum: 10/f4557032a98b2967fe27b1a91dfcf8ebb6b9a24b1afe616b5c2312465100b861e9b8d4da374be535f2d6b967ce2f53826d7f6edc2a0d32b2ab55abc96acc2f9d languageName: node linkType: hard @@ -3297,7 +3319,7 @@ __metadata: resolution: "dir-glob@npm:3.0.1" dependencies: path-type: "npm:^4.0.0" - checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + checksum: 10/fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 languageName: node linkType: hard @@ -3306,7 +3328,7 @@ __metadata: resolution: "doctrine@npm:3.0.0" dependencies: esutils: "npm:^2.0.2" - checksum: b4b28f1df5c563f7d876e7461254a4597b8cabe915abe94d7c5d1633fed263fcf9a85e8d3836591fc2d040108e822b0d32758e5ec1fe31c590dc7e08086e3e48 + checksum: 10/b4b28f1df5c563f7d876e7461254a4597b8cabe915abe94d7c5d1633fed263fcf9a85e8d3836591fc2d040108e822b0d32758e5ec1fe31c590dc7e08086e3e48 languageName: node linkType: hard @@ -3317,14 +3339,14 @@ __metadata: domelementtype: "npm:^2.3.0" domhandler: "npm:^5.0.2" entities: "npm:^4.2.0" - checksum: e3bf9027a64450bca0a72297ecdc1e3abb7a2912268a9f3f5d33a2e29c1e2c3502c6e9f860fc6625940bfe0cfb57a44953262b9e94df76872fdfb8151097eeb3 + checksum: 10/e3bf9027a64450bca0a72297ecdc1e3abb7a2912268a9f3f5d33a2e29c1e2c3502c6e9f860fc6625940bfe0cfb57a44953262b9e94df76872fdfb8151097eeb3 languageName: node linkType: hard "domelementtype@npm:^2.3.0": version: 2.3.0 resolution: "domelementtype@npm:2.3.0" - checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 + checksum: 10/ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 languageName: node linkType: hard @@ -3333,7 +3355,7 @@ __metadata: resolution: "domhandler@npm:5.0.3" dependencies: domelementtype: "npm:^2.3.0" - checksum: 809b805a50a9c6884a29f38aec0a4e1b4537f40e1c861950ed47d10b049febe6b79ab72adaeeebb3cc8fc1cd33f34e97048a72a9265103426d93efafa78d3e96 + checksum: 10/809b805a50a9c6884a29f38aec0a4e1b4537f40e1c861950ed47d10b049febe6b79ab72adaeeebb3cc8fc1cd33f34e97048a72a9265103426d93efafa78d3e96 languageName: node linkType: hard @@ -3344,7 +3366,7 @@ __metadata: dom-serializer: "npm:^2.0.0" domelementtype: "npm:^2.3.0" domhandler: "npm:^5.0.3" - checksum: 9a169a6e57ac4c738269a73ab4caf785114ed70e46254139c1bbc8144ac3102aacb28a6149508395ae34aa5d6a40081f4fa5313855dc8319c6d8359866b6dfea + checksum: 10/9a169a6e57ac4c738269a73ab4caf785114ed70e46254139c1bbc8144ac3102aacb28a6149508395ae34aa5d6a40081f4fa5313855dc8319c6d8359866b6dfea languageName: node linkType: hard @@ -3353,79 +3375,70 @@ __metadata: resolution: "dot-prop@npm:6.0.1" dependencies: is-obj: "npm:^2.0.0" - checksum: 1200a4f6f81151161b8526c37966d60738cf12619b0ed1f55be01bdb55790bf0a5cd1398b8f2c296dcc07d0a7c2dd0e650baf0b069c367e74bb5df2f6603aba0 + checksum: 10/1200a4f6f81151161b8526c37966d60738cf12619b0ed1f55be01bdb55790bf0a5cd1398b8f2c296dcc07d0a7c2dd0e650baf0b069c367e74bb5df2f6603aba0 languageName: node linkType: hard "dset@npm:^3.1.2": version: 3.1.3 resolution: "dset@npm:3.1.3" - checksum: f3f7096718eeabe1608886364ea02254d5221a4d59d4fb4d2fd2fdf53cccf293d486793a44c894d3a07a916a283d1214e831e423839096d461a38571fc092126 - languageName: node - linkType: hard - -"duplexer2@npm:~0.1.4": - version: 0.1.4 - resolution: "duplexer2@npm:0.1.4" - dependencies: - readable-stream: "npm:^2.0.2" - checksum: f60ff8b8955f992fd9524516e82faa5662d7aca5b99ee71c50bbbe1a3c970fafacb35d526d8b05cef8c08be56eed3663c096c50626c3c3651a52af36c408bf4d + checksum: 10/f3f7096718eeabe1608886364ea02254d5221a4d59d4fb4d2fd2fdf53cccf293d486793a44c894d3a07a916a283d1214e831e423839096d461a38571fc092126 languageName: node linkType: hard "duplexer@npm:~0.1.1": version: 0.1.2 resolution: "duplexer@npm:0.1.2" - checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + checksum: 10/62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 languageName: node linkType: hard "each-parallel-async@npm:^1.0.0": version: 1.0.0 resolution: "each-parallel-async@npm:1.0.0" - checksum: bed0b01b3fc3d8303ba064d0b4dd8237852284e334a32d7c75366e7880c29b8b40d52ca171aeced18a7a61dc5e8aaf5e0b485cff6abe26d1429738abae78a4e7 + checksum: 10/bed0b01b3fc3d8303ba064d0b4dd8237852284e334a32d7c75366e7880c29b8b40d52ca171aeced18a7a61dc5e8aaf5e0b485cff6abe26d1429738abae78a4e7 languageName: node linkType: hard "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" - checksum: 9b1d3e1baefeaf7d70799db8774149cef33b97183a6addceeba0cf6b85ba23ee2686f302f14482006df32df75d32b17c509c143a3689627929e4a8efaf483952 + checksum: 10/9b1d3e1baefeaf7d70799db8774149cef33b97183a6addceeba0cf6b85ba23ee2686f302f14482006df32df75d32b17c509c143a3689627929e4a8efaf483952 languageName: node linkType: hard "ee-first@npm:1.1.1": version: 1.1.1 resolution: "ee-first@npm:1.1.1" - checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f + checksum: 10/1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f languageName: node linkType: hard "electron-to-chromium@npm:^1.4.648": version: 1.4.648 resolution: "electron-to-chromium@npm:1.4.648" - checksum: a18f06bafce9017ac7b587f76dac77063a0beb7dfcdf9d5971f72b322f56af6315e4fc3c59154a260a9188c168ac7632538797d57a8c53ab57025ace0c9441f2 + checksum: 10/a18f06bafce9017ac7b587f76dac77063a0beb7dfcdf9d5971f72b322f56af6315e4fc3c59154a260a9188c168ac7632538797d57a8c53ab57025ace0c9441f2 languageName: node linkType: hard "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" - checksum: c72d67a6821be15ec11997877c437491c313d924306b8da5d87d2a2bcc2cec9903cb5b04ee1a088460501d8e5b44f10df82fdc93c444101a7610b80c8b6938e1 + checksum: 10/c72d67a6821be15ec11997877c437491c313d924306b8da5d87d2a2bcc2cec9903cb5b04ee1a088460501d8e5b44f10df82fdc93c444101a7610b80c8b6938e1 languageName: node linkType: hard "emoji-regex@npm:^9.2.2": version: 9.2.2 resolution: "emoji-regex@npm:9.2.2" - checksum: 915acf859cea7131dac1b2b5c9c8e35c4849e325a1d114c30adb8cd615970f6dca0e27f64f3a4949d7d6ed86ecd79a1c5c63f02e697513cddd7b5835c90948b8 + checksum: 10/915acf859cea7131dac1b2b5c9c8e35c4849e325a1d114c30adb8cd615970f6dca0e27f64f3a4949d7d6ed86ecd79a1c5c63f02e697513cddd7b5835c90948b8 languageName: node linkType: hard "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" - checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c + checksum: 10/e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c languageName: node linkType: hard @@ -3434,7 +3447,7 @@ __metadata: resolution: "encoding@npm:0.1.13" dependencies: iconv-lite: "npm:^0.6.2" - checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + checksum: 10/bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f languageName: node linkType: hard @@ -3443,7 +3456,7 @@ __metadata: resolution: "end-of-stream@npm:1.4.4" dependencies: once: "npm:^1.4.0" - checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + checksum: 10/530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b languageName: node linkType: hard @@ -3453,28 +3466,28 @@ __metadata: dependencies: graceful-fs: "npm:^4.2.4" tapable: "npm:^2.2.0" - checksum: 180c3f2706f9117bf4dc7982e1df811dad83a8db075723f299245ef4488e0cad7e96859c5f0e410682d28a4ecd4da021ec7d06265f7e4eb6eed30c69ca5f7d3e + checksum: 10/180c3f2706f9117bf4dc7982e1df811dad83a8db075723f299245ef4488e0cad7e96859c5f0e410682d28a4ecd4da021ec7d06265f7e4eb6eed30c69ca5f7d3e languageName: node linkType: hard "entities@npm:^4.2.0, entities@npm:^4.4.0, entities@npm:^4.5.0": version: 4.5.0 resolution: "entities@npm:4.5.0" - checksum: ede2a35c9bce1aeccd055a1b445d41c75a14a2bb1cd22e242f20cf04d236cdcd7f9c859eb83f76885327bfae0c25bf03303665ee1ce3d47c5927b98b0e3e3d48 + checksum: 10/ede2a35c9bce1aeccd055a1b445d41c75a14a2bb1cd22e242f20cf04d236cdcd7f9c859eb83f76885327bfae0c25bf03303665ee1ce3d47c5927b98b0e3e3d48 languageName: node linkType: hard "entities@npm:~2.1.0": version: 2.1.0 resolution: "entities@npm:2.1.0" - checksum: fe71642e42e108540b0324dea03e00f3dbad93617c601bfcf292c3f852c236af3e58469219c4653f6f05df781a446f3b82105b8d26b936d0fa246b0103f2f951 + checksum: 10/fe71642e42e108540b0324dea03e00f3dbad93617c601bfcf292c3f852c236af3e58469219c4653f6f05df781a446f3b82105b8d26b936d0fa246b0103f2f951 languageName: node linkType: hard "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + checksum: 10/65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e languageName: node linkType: hard @@ -3483,21 +3496,21 @@ __metadata: resolution: "envinfo@npm:7.11.0" bin: envinfo: dist/cli.js - checksum: 8cba09db181329b243fe02b3384ec275ebf93d5d3663c31e2064697aa96576c7de9b7e1c878a250f8eaec0db8026bace747709dcdc8d8a4ecd9a653cdbc08926 + checksum: 10/8cba09db181329b243fe02b3384ec275ebf93d5d3663c31e2064697aa96576c7de9b7e1c878a250f8eaec0db8026bace747709dcdc8d8a4ecd9a653cdbc08926 languageName: node linkType: hard "eol@npm:^0.9.1": version: 0.9.1 resolution: "eol@npm:0.9.1" - checksum: 9d3fd93bb2bb5c69c7fe8dfb97b62213ed95857a2e90f5db3110415993e8a989d87fb011755ce22fdb92ca36fbe4e111b395a6f4ce00b9b51d3f00f19c2acf52 + checksum: 10/9d3fd93bb2bb5c69c7fe8dfb97b62213ed95857a2e90f5db3110415993e8a989d87fb011755ce22fdb92ca36fbe4e111b395a6f4ce00b9b51d3f00f19c2acf52 languageName: node linkType: hard "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" - checksum: 1d20d825cdcce8d811bfbe86340f4755c02655a7feb2f13f8c880566d9d72a3f6c92c192a6867632e490d6da67b678271f46e01044996a6443e870331100dfdd + checksum: 10/1d20d825cdcce8d811bfbe86340f4755c02655a7feb2f13f8c880566d9d72a3f6c92c192a6867632e490d6da67b678271f46e01044996a6443e870331100dfdd languageName: node linkType: hard @@ -3506,56 +3519,56 @@ __metadata: resolution: "error-ex@npm:1.3.2" dependencies: is-arrayish: "npm:^0.2.1" - checksum: d547740aa29c34e753fb6fed2c5de81802438529c12b3673bd37b6bb1fe49b9b7abdc3c11e6062fe625d8a296b3cf769a80f878865e25e685f787763eede3ffb + checksum: 10/d547740aa29c34e753fb6fed2c5de81802438529c12b3673bd37b6bb1fe49b9b7abdc3c11e6062fe625d8a296b3cf769a80f878865e25e685f787763eede3ffb languageName: node linkType: hard "es-module-lexer@npm:^1.2.1": version: 1.4.1 resolution: "es-module-lexer@npm:1.4.1" - checksum: cf453613468c417af6e189b03d9521804033fdd5a229a36fedec28d37ea929fccf6822d42abff1126eb01ba1d2aa2845a48d5d1772c0724f8204464d9d3855f6 + checksum: 10/cf453613468c417af6e189b03d9521804033fdd5a229a36fedec28d37ea929fccf6822d42abff1126eb01ba1d2aa2845a48d5d1772c0724f8204464d9d3855f6 languageName: node linkType: hard "es6-error@npm:^4.0.1": version: 4.1.1 resolution: "es6-error@npm:4.1.1" - checksum: 48483c25701dc5a6376f39bbe2eaf5da0b505607ec5a98cd3ade472c1939242156660636e2e508b33211e48e88b132d245341595c067bd4a95ac79fa7134da06 + checksum: 10/48483c25701dc5a6376f39bbe2eaf5da0b505607ec5a98cd3ade472c1939242156660636e2e508b33211e48e88b132d245341595c067bd4a95ac79fa7134da06 languageName: node linkType: hard "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" - checksum: afa618e73362576b63f6ca83c975456621095a1ed42ff068174e3f5cea48afc422814dda548c96e6ebb5333e7265140c7292abcc81bbd6ccb1757d50d3a4e182 + checksum: 10/afa618e73362576b63f6ca83c975456621095a1ed42ff068174e3f5cea48afc422814dda548c96e6ebb5333e7265140c7292abcc81bbd6ccb1757d50d3a4e182 languageName: node linkType: hard "escape-goat@npm:^4.0.0": version: 4.0.0 resolution: "escape-goat@npm:4.0.0" - checksum: 515f4c5427118a8513ef12ad3fbc194b2a0239a6bc8d923b8ebd885c97f3518ce54f911007e6c9424387d68b0f54cd72aa277cfc2ca44da8cb1bd6a880cfd13c + checksum: 10/515f4c5427118a8513ef12ad3fbc194b2a0239a6bc8d923b8ebd885c97f3518ce54f911007e6c9424387d68b0f54cd72aa277cfc2ca44da8cb1bd6a880cfd13c languageName: node linkType: hard "escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" - checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 + checksum: 10/6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 languageName: node linkType: hard "escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" - checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + checksum: 10/98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 languageName: node linkType: hard "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" - checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + checksum: 10/6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 languageName: node linkType: hard @@ -3566,7 +3579,7 @@ __metadata: eslint: ">=7.0.0" bin: eslint-config-prettier: bin/cli.js - checksum: 411e3b3b1c7aa04e3e0f20d561271b3b909014956c4dba51c878bf1a23dbb8c800a3be235c46c4732c70827276e540b6eed4636d9b09b444fd0a8e07f0fcd830 + checksum: 10/411e3b3b1c7aa04e3e0f20d561271b3b909014956c4dba51c878bf1a23dbb8c800a3be235c46c4732c70827276e540b6eed4636d9b09b444fd0a8e07f0fcd830 languageName: node linkType: hard @@ -3586,7 +3599,7 @@ __metadata: optional: true eslint-config-prettier: optional: true - checksum: 4f26a30444adc61ed692cdb5a9f7e8d9f5794f0917151051e66755ce032a08c3cc72c8b5d56101412e90f6d77035bd8194ea8731e9c16aacdd5ae345a8dae188 + checksum: 10/4f26a30444adc61ed692cdb5a9f7e8d9f5794f0917151051e66755ce032a08c3cc72c8b5d56101412e90f6d77035bd8194ea8731e9c16aacdd5ae345a8dae188 languageName: node linkType: hard @@ -3596,7 +3609,7 @@ __metadata: dependencies: "@microsoft/tsdoc": "npm:0.14.2" "@microsoft/tsdoc-config": "npm:0.16.2" - checksum: b2b3a1517a2e8ba01eb65ddfb29992a9141954a883935cac069477659647dcb83603b6661d1ee16f9919007f5082cad0fc2532f5d95620fcc3fb239bde820fe3 + checksum: 10/b2b3a1517a2e8ba01eb65ddfb29992a9141954a883935cac069477659647dcb83603b6661d1ee16f9919007f5082cad0fc2532f5d95620fcc3fb239bde820fe3 languageName: node linkType: hard @@ -3606,7 +3619,7 @@ __metadata: dependencies: esrecurse: "npm:^4.3.0" estraverse: "npm:^4.1.1" - checksum: c541ef384c92eb5c999b7d3443d80195fcafb3da335500946f6db76539b87d5826c8f2e1d23bf6afc3154ba8cd7c8e566f8dc00f1eea25fdf3afc8fb9c87b238 + checksum: 10/c541ef384c92eb5c999b7d3443d80195fcafb3da335500946f6db76539b87d5826c8f2e1d23bf6afc3154ba8cd7c8e566f8dc00f1eea25fdf3afc8fb9c87b238 languageName: node linkType: hard @@ -3616,14 +3629,14 @@ __metadata: dependencies: esrecurse: "npm:^4.3.0" estraverse: "npm:^5.2.0" - checksum: 5c660fb905d5883ad018a6fea2b49f3cb5b1cbf2cd4bd08e98646e9864f9bc2c74c0839bed2d292e90a4a328833accc197c8f0baed89cbe8d605d6f918465491 + checksum: 10/5c660fb905d5883ad018a6fea2b49f3cb5b1cbf2cd4bd08e98646e9864f9bc2c74c0839bed2d292e90a4a328833accc197c8f0baed89cbe8d605d6f918465491 languageName: node linkType: hard "eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 3f357c554a9ea794b094a09bd4187e5eacd1bc0d0653c3adeb87962c548e6a1ab8f982b86963ae1337f5d976004146536dcee5d0e2806665b193fbfbf1a9231b + checksum: 10/3f357c554a9ea794b094a09bd4187e5eacd1bc0d0653c3adeb87962c548e6a1ab8f982b86963ae1337f5d976004146536dcee5d0e2806665b193fbfbf1a9231b languageName: node linkType: hard @@ -3671,7 +3684,7 @@ __metadata: text-table: "npm:^0.2.0" bin: eslint: bin/eslint.js - checksum: ef6193c6e4cef20774b985a5cc2fd4bf6d3c4decd423117cbc4a0196617861745db291217ad3c537bc3a160650cca965bc818f55e1f3e446af1fcb293f9940a5 + checksum: 10/ef6193c6e4cef20774b985a5cc2fd4bf6d3c4decd423117cbc4a0196617861745db291217ad3c537bc3a160650cca965bc818f55e1f3e446af1fcb293f9940a5 languageName: node linkType: hard @@ -3682,7 +3695,7 @@ __metadata: acorn: "npm:^8.9.0" acorn-jsx: "npm:^5.3.2" eslint-visitor-keys: "npm:^3.4.1" - checksum: 255ab260f0d711a54096bdeda93adff0eadf02a6f9b92f02b323e83a2b7fc258797919437ad331efec3930475feb0142c5ecaaf3cdab4befebd336d47d3f3134 + checksum: 10/255ab260f0d711a54096bdeda93adff0eadf02a6f9b92f02b323e83a2b7fc258797919437ad331efec3930475feb0142c5ecaaf3cdab4befebd336d47d3f3134 languageName: node linkType: hard @@ -3692,7 +3705,7 @@ __metadata: bin: esparse: ./bin/esparse.js esvalidate: ./bin/esvalidate.js - checksum: f1d3c622ad992421362294f7acf866aa9409fbad4eb2e8fa230bd33944ce371d32279667b242d8b8907ec2b6ad7353a717f3c0e60e748873a34a7905174bc0eb + checksum: 10/f1d3c622ad992421362294f7acf866aa9409fbad4eb2e8fa230bd33944ce371d32279667b242d8b8907ec2b6ad7353a717f3c0e60e748873a34a7905174bc0eb languageName: node linkType: hard @@ -3701,7 +3714,7 @@ __metadata: resolution: "esquery@npm:1.5.0" dependencies: estraverse: "npm:^5.1.0" - checksum: e65fcdfc1e0ff5effbf50fb4f31ea20143ae5df92bb2e4953653d8d40aa4bc148e0d06117a592ce4ea53eeab1dafdfded7ea7e22a5be87e82d73757329a1b01d + checksum: 10/e65fcdfc1e0ff5effbf50fb4f31ea20143ae5df92bb2e4953653d8d40aa4bc148e0d06117a592ce4ea53eeab1dafdfded7ea7e22a5be87e82d73757329a1b01d languageName: node linkType: hard @@ -3710,42 +3723,42 @@ __metadata: resolution: "esrecurse@npm:4.3.0" dependencies: estraverse: "npm:^5.2.0" - checksum: 44ffcd89e714ea6b30143e7f119b104fc4d75e77ee913f34d59076b40ef2d21967f84e019f84e1fd0465b42cdbf725db449f232b5e47f29df29ed76194db8e16 + checksum: 10/44ffcd89e714ea6b30143e7f119b104fc4d75e77ee913f34d59076b40ef2d21967f84e019f84e1fd0465b42cdbf725db449f232b5e47f29df29ed76194db8e16 languageName: node linkType: hard "estraverse@npm:^4.1.1": version: 4.3.0 resolution: "estraverse@npm:4.3.0" - checksum: 3f67ad02b6dbfaddd9ea459cf2b6ef4ecff9a6082a7af9d22e445b9abc082ad9ca47e1825557b293fcdae477f4714e561123e30bb6a5b2f184fb2bad4a9497eb + checksum: 10/3f67ad02b6dbfaddd9ea459cf2b6ef4ecff9a6082a7af9d22e445b9abc082ad9ca47e1825557b293fcdae477f4714e561123e30bb6a5b2f184fb2bad4a9497eb languageName: node linkType: hard "estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" - checksum: 37cbe6e9a68014d34dbdc039f90d0baf72436809d02edffcc06ba3c2a12eb298048f877511353b130153e532aac8d68ba78430c0dd2f44806ebc7c014b01585e + checksum: 10/37cbe6e9a68014d34dbdc039f90d0baf72436809d02edffcc06ba3c2a12eb298048f877511353b130153e532aac8d68ba78430c0dd2f44806ebc7c014b01585e languageName: node linkType: hard "estree-walker@npm:^2.0.2": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" - checksum: b02109c5d46bc2ed47de4990eef770f7457b1159a229f0999a09224d2b85ffeed2d7679cffcff90aeb4448e94b0168feb5265b209cdec29aad50a3d6e93d21e2 + checksum: 10/b02109c5d46bc2ed47de4990eef770f7457b1159a229f0999a09224d2b85ffeed2d7679cffcff90aeb4448e94b0168feb5265b209cdec29aad50a3d6e93d21e2 languageName: node linkType: hard "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" - checksum: b23acd24791db11d8f65be5ea58fd9a6ce2df5120ae2da65c16cfc5331ff59d5ac4ef50af66cd4bde238881503ec839928a0135b99a036a9cdfa22d17fd56cdb + checksum: 10/b23acd24791db11d8f65be5ea58fd9a6ce2df5120ae2da65c16cfc5331ff59d5ac4ef50af66cd4bde238881503ec839928a0135b99a036a9cdfa22d17fd56cdb languageName: node linkType: hard "etag@npm:~1.8.1": version: 1.8.1 resolution: "etag@npm:1.8.1" - checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff + checksum: 10/571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff languageName: node linkType: hard @@ -3760,14 +3773,14 @@ __metadata: split: "npm:0.3" stream-combiner: "npm:~0.0.4" through: "npm:~2.3.1" - checksum: 48ea0e17df89ff45778c25e7111a6691401c902162823ddd7656d83fc972e75380f789f7a48f272f50fe7015420cc04f835d458560bf95e34b2c7a479570c8fb + checksum: 10/48ea0e17df89ff45778c25e7111a6691401c902162823ddd7656d83fc972e75380f789f7a48f272f50fe7015420cc04f835d458560bf95e34b2c7a479570c8fb languageName: node linkType: hard "events@npm:^3.2.0": version: 3.3.0 resolution: "events@npm:3.3.0" - checksum: a3d47e285e28d324d7180f1e493961a2bbb4cad6412090e4dec114f4db1f5b560c7696ee8e758f55e23913ede856e3689cd3aa9ae13c56b5d8314cd3b3ddd1be + checksum: 10/a3d47e285e28d324d7180f1e493961a2bbb4cad6412090e4dec114f4db1f5b560c7696ee8e758f55e23913ede856e3689cd3aa9ae13c56b5d8314cd3b3ddd1be languageName: node linkType: hard @@ -3784,7 +3797,7 @@ __metadata: onetime: "npm:^5.1.2" signal-exit: "npm:^3.0.3" strip-final-newline: "npm:^2.0.0" - checksum: 8ada91f2d70f7dff702c861c2c64f21dfdc1525628f3c0454fd6f02fce65f7b958616cbd2b99ca7fa4d474e461a3d363824e91b3eb881705231abbf387470597 + checksum: 10/8ada91f2d70f7dff702c861c2c64f21dfdc1525628f3c0454fd6f02fce65f7b958616cbd2b99ca7fa4d474e461a3d363824e91b3eb881705231abbf387470597 languageName: node linkType: hard @@ -3801,7 +3814,7 @@ __metadata: onetime: "npm:^5.1.0" signal-exit: "npm:^3.0.2" strip-final-newline: "npm:^2.0.0" - checksum: ed58e41fe424797f3d837c8fb622548eeb72fa03324f2676af95f806568904eb55f196127a097f87d4517cab524c169ece13e6c9e201867de57b089584864b8f + checksum: 10/ed58e41fe424797f3d837c8fb622548eeb72fa03324f2676af95f806568904eb55f196127a097f87d4517cab524c169ece13e6c9e201867de57b089584864b8f languageName: node linkType: hard @@ -3818,21 +3831,21 @@ __metadata: onetime: "npm:^6.0.0" signal-exit: "npm:^4.1.0" strip-final-newline: "npm:^3.0.0" - checksum: d2ab5fe1e2bb92b9788864d0713f1fce9a07c4594e272c0c97bc18c90569897ab262e4ea58d27a694d288227a2e24f16f5e2575b44224ad9983b799dc7f1098d + checksum: 10/d2ab5fe1e2bb92b9788864d0713f1fce9a07c4594e272c0c97bc18c90569897ab262e4ea58d27a694d288227a2e24f16f5e2575b44224ad9983b799dc7f1098d languageName: node linkType: hard "exenv-es6@npm:^1.1.1": version: 1.1.1 resolution: "exenv-es6@npm:1.1.1" - checksum: 7f2aa12025e6f06c48dc286f380cf3183bb19c6017b36d91695034a3e5124a7235c4f8ff24ca2eb88ae801322f0f99605cedfcfd996a5fcbba7669320e2a448e + checksum: 10/7f2aa12025e6f06c48dc286f380cf3183bb19c6017b36d91695034a3e5124a7235c4f8ff24ca2eb88ae801322f0f99605cedfcfd996a5fcbba7669320e2a448e languageName: node linkType: hard "expand-template@npm:^2.0.3": version: 2.0.3 resolution: "expand-template@npm:2.0.3" - checksum: 588c19847216421ed92befb521767b7018dc88f88b0576df98cb242f20961425e96a92cbece525ef28cc5becceae5d544ae0f5b9b5e2aa05acb13716ca5b3099 + checksum: 10/588c19847216421ed92befb521767b7018dc88f88b0576df98cb242f20961425e96a92cbece525ef28cc5becceae5d544ae0f5b9b5e2aa05acb13716ca5b3099 languageName: node linkType: hard @@ -3841,14 +3854,14 @@ __metadata: resolution: "expand-tilde@npm:2.0.2" dependencies: homedir-polyfill: "npm:^1.0.1" - checksum: 2efe6ed407d229981b1b6ceb552438fbc9e5c7d6a6751ad6ced3e0aa5cf12f0b299da695e90d6c2ac79191b5c53c613e508f7149e4573abfbb540698ddb7301a + checksum: 10/2efe6ed407d229981b1b6ceb552438fbc9e5c7d6a6751ad6ced3e0aa5cf12f0b299da695e90d6c2ac79191b5c53c613e508f7149e4573abfbb540698ddb7301a languageName: node linkType: hard "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" - checksum: 2d9bbb6473de7051f96790d5f9a678f32e60ed0aa70741dc7fdc96fec8d631124ec3374ac144387604f05afff9500f31a1d45bd9eee4cdc2e4f9ad2d9b9d5dbd + checksum: 10/2d9bbb6473de7051f96790d5f9a678f32e60ed0aa70741dc7fdc96fec8d631124ec3374ac144387604f05afff9500f31a1d45bd9eee4cdc2e4f9ad2d9b9d5dbd languageName: node linkType: hard @@ -3887,7 +3900,7 @@ __metadata: type-is: "npm:~1.6.18" utils-merge: "npm:1.0.1" vary: "npm:~1.1.2" - checksum: 869ae89ed6ff4bed7b373079dc58e5dddcf2915a2669b36037ff78c99d675ae930e5fe052b35c24f56557d28a023bb1cbe3e2f2fb87eaab96a1cedd7e597809d + checksum: 10/869ae89ed6ff4bed7b373079dc58e5dddcf2915a2669b36037ff78c99d675ae930e5fe052b35c24f56557d28a023bb1cbe3e2f2fb87eaab96a1cedd7e597809d languageName: node linkType: hard @@ -3896,21 +3909,21 @@ __metadata: resolution: "extend-shallow@npm:2.0.1" dependencies: is-extendable: "npm:^0.1.0" - checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 + checksum: 10/8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 languageName: node linkType: hard "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" - checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + checksum: 10/e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d languageName: node linkType: hard "fast-diff@npm:^1.1.2": version: 1.3.0 resolution: "fast-diff@npm:1.3.0" - checksum: 9e57415bc69cd6efcc720b3b8fe9fdaf42dcfc06f86f0f45378b1fa512598a8aac48aa3928c8751d58e2f01bb4ba4f07e4f3d9bc0d57586d45f1bd1e872c6cde + checksum: 10/9e57415bc69cd6efcc720b3b8fe9fdaf42dcfc06f86f0f45378b1fa512598a8aac48aa3928c8751d58e2f01bb4ba4f07e4f3d9bc0d57586d45f1bd1e872c6cde languageName: node linkType: hard @@ -3923,35 +3936,35 @@ __metadata: glob-parent: "npm:^5.1.2" merge2: "npm:^1.3.0" micromatch: "npm:^4.0.4" - checksum: 222512e9315a0efca1276af9adb2127f02105d7288fa746145bf45e2716383fb79eb983c89601a72a399a56b7c18d38ce70457c5466218c5f13fad957cee16df + checksum: 10/222512e9315a0efca1276af9adb2127f02105d7288fa746145bf45e2716383fb79eb983c89601a72a399a56b7c18d38ce70457c5466218c5f13fad957cee16df languageName: node linkType: hard "fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: 2c20055c1fa43c922428f16ca8bb29f2807de63e5c851f665f7ac9790176c01c3b40335257736b299764a8d383388dabc73c8083b8e1bc3d99f0a941444ec60e + checksum: 10/2c20055c1fa43c922428f16ca8bb29f2807de63e5c851f665f7ac9790176c01c3b40335257736b299764a8d383388dabc73c8083b8e1bc3d99f0a941444ec60e languageName: node linkType: hard "fast-levenshtein@npm:^2.0.6": version: 2.0.6 resolution: "fast-levenshtein@npm:2.0.6" - checksum: eb7e220ecf2bab5159d157350b81d01f75726a4382f5a9266f42b9150c4523b9795f7f5d9fbbbeaeac09a441b2369f05ee02db48ea938584205530fe5693cfe1 + checksum: 10/eb7e220ecf2bab5159d157350b81d01f75726a4382f5a9266f42b9150c4523b9795f7f5d9fbbbeaeac09a441b2369f05ee02db48ea938584205530fe5693cfe1 languageName: node linkType: hard "fast-memoize@npm:^2.5.2": version: 2.5.2 resolution: "fast-memoize@npm:2.5.2" - checksum: b7e2839d70607c791ffda617bb3cf7d9944bd5483be05cedbc060be1381c79093efc470215f1bc5aa666b8ecc2c9ae49e6f56ab6f45f0c1474f6628651c9959b + checksum: 10/b7e2839d70607c791ffda617bb3cf7d9944bd5483be05cedbc060be1381c79093efc470215f1bc5aa666b8ecc2c9ae49e6f56ab6f45f0c1474f6628651c9959b languageName: node linkType: hard "fastest-levenshtein@npm:^1.0.12": version: 1.0.16 resolution: "fastest-levenshtein@npm:1.0.16" - checksum: ee85d33b5cef592033f70e1c13ae8624055950b4eb832435099cd56aa313d7f251b873bedbc06a517adfaff7b31756d139535991e2406967438e03a1bf1b008e + checksum: 10/ee85d33b5cef592033f70e1c13ae8624055950b4eb832435099cd56aa313d7f251b873bedbc06a517adfaff7b31756d139535991e2406967438e03a1bf1b008e languageName: node linkType: hard @@ -3960,7 +3973,7 @@ __metadata: resolution: "fastq@npm:1.16.0" dependencies: reusify: "npm:^1.0.4" - checksum: de151543aab9d91900ed5da88860c46987ece925c628df586fac664235f25e020ec20729e1c032edb5fd2520fd4aa5b537d69e39b689e65e82112cfbecb4479e + checksum: 10/de151543aab9d91900ed5da88860c46987ece925c628df586fac664235f25e020ec20729e1c032edb5fd2520fd4aa5b537d69e39b689e65e82112cfbecb4479e languageName: node linkType: hard @@ -3969,7 +3982,7 @@ __metadata: resolution: "fd-slicer@npm:1.1.0" dependencies: pend: "npm:~1.2.0" - checksum: db3e34fa483b5873b73f248e818f8a8b59a6427fd8b1436cd439c195fdf11e8659419404826059a642b57d18075c856d06d6a50a1413b714f12f833a9341ead3 + checksum: 10/db3e34fa483b5873b73f248e818f8a8b59a6427fd8b1436cd439c195fdf11e8659419404826059a642b57d18075c856d06d6a50a1413b714f12f833a9341ead3 languageName: node linkType: hard @@ -3978,7 +3991,7 @@ __metadata: resolution: "file-entry-cache@npm:6.0.1" dependencies: flat-cache: "npm:^3.0.4" - checksum: 099bb9d4ab332cb93c48b14807a6918a1da87c45dce91d4b61fd40e6505d56d0697da060cb901c729c90487067d93c9243f5da3dc9c41f0358483bfdebca736b + checksum: 10/099bb9d4ab332cb93c48b14807a6918a1da87c45dce91d4b61fd40e6505d56d0697da060cb901c729c90487067d93c9243f5da3dc9c41f0358483bfdebca736b languageName: node linkType: hard @@ -3987,7 +4000,7 @@ __metadata: resolution: "fill-range@npm:7.0.1" dependencies: to-regex-range: "npm:^5.0.1" - checksum: e260f7592fd196b4421504d3597cc76f4a1ca7a9488260d533b611fc3cefd61e9a9be1417cb82d3b01ad9f9c0ff2dbf258e1026d2445e26b0cf5148ff4250429 + checksum: 10/e260f7592fd196b4421504d3597cc76f4a1ca7a9488260d533b611fc3cefd61e9a9be1417cb82d3b01ad9f9c0ff2dbf258e1026d2445e26b0cf5148ff4250429 languageName: node linkType: hard @@ -4002,7 +4015,7 @@ __metadata: parseurl: "npm:~1.3.3" statuses: "npm:2.0.1" unpipe: "npm:~1.0.0" - checksum: 635718cb203c6d18e6b48dfbb6c54ccb08ea470e4f474ddcef38c47edcf3227feec316f886dd701235997d8af35240cae49856721ce18f539ad038665ebbf163 + checksum: 10/635718cb203c6d18e6b48dfbb6c54ccb08ea470e4f474ddcef38c47edcf3227feec316f886dd701235997d8af35240cae49856721ce18f539ad038665ebbf163 languageName: node linkType: hard @@ -4013,7 +4026,7 @@ __metadata: commondir: "npm:^1.0.1" make-dir: "npm:^3.0.2" pkg-dir: "npm:^4.1.0" - checksum: 3907c2e0b15132704ed67083686cd3e68ab7d9ecc22e50ae9da20678245d488b01fa22c0e34c0544dc6edc4354c766f016c8c186a787be7c17f7cde8c5281e85 + checksum: 10/3907c2e0b15132704ed67083686cd3e68ab7d9ecc22e50ae9da20678245d488b01fa22c0e34c0544dc6edc4354c766f016c8c186a787be7c17f7cde8c5281e85 languageName: node linkType: hard @@ -4023,7 +4036,7 @@ __metadata: dependencies: locate-path: "npm:^6.0.0" path-exists: "npm:^4.0.0" - checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + checksum: 10/07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 languageName: node linkType: hard @@ -4033,7 +4046,7 @@ __metadata: dependencies: locate-path: "npm:^5.0.0" path-exists: "npm:^4.0.0" - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + checksum: 10/4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 languageName: node linkType: hard @@ -4042,7 +4055,7 @@ __metadata: resolution: "find-yarn-workspace-root@npm:2.0.0" dependencies: micromatch: "npm:^4.0.2" - checksum: 7fa7942849eef4d5385ee96a0a9a5a9afe885836fd72ed6a4280312a38690afea275e7d09b343fe97daf0412d833f8ac4b78c17fc756386d9ebebf0759d707a7 + checksum: 10/7fa7942849eef4d5385ee96a0a9a5a9afe885836fd72ed6a4280312a38690afea275e7d09b343fe97daf0412d833f8ac4b78c17fc756386d9ebebf0759d707a7 languageName: node linkType: hard @@ -4054,7 +4067,7 @@ __metadata: is-glob: "npm:^4.0.3" micromatch: "npm:^4.0.4" resolve-dir: "npm:^1.0.1" - checksum: 576716c77a0e8330b17ae9cba27d1fda8907c8cda7bf33a47f1999e16e089bfc6df4dd62933e0760f430736183c054348c34aa45dd882d49c8c098f55b89ee1d + checksum: 10/576716c77a0e8330b17ae9cba27d1fda8907c8cda7bf33a47f1999e16e089bfc6df4dd62933e0760f430736183c054348c34aa45dd882d49c8c098f55b89ee1d languageName: node linkType: hard @@ -4065,7 +4078,7 @@ __metadata: flatted: "npm:^3.2.9" keyv: "npm:^4.5.3" rimraf: "npm:^3.0.2" - checksum: 02381c6ece5e9fa5b826c9bbea481d7fd77645d96e4b0b1395238124d581d10e56f17f723d897b6d133970f7a57f0fab9148cbbb67237a0a0ffe794ba60c0c70 + checksum: 10/02381c6ece5e9fa5b826c9bbea481d7fd77645d96e4b0b1395238124d581d10e56f17f723d897b6d133970f7a57f0fab9148cbbb67237a0a0ffe794ba60c0c70 languageName: node linkType: hard @@ -4074,14 +4087,14 @@ __metadata: resolution: "flat@npm:5.0.2" bin: flat: cli.js - checksum: 72479e651c15eab53e25ce04c31bab18cfaac0556505cac19221dbbe85bbb9686bc76e4d397e89e5bf516ce667dcf818f8b07e585568edba55abc2bf1f698fb5 + checksum: 10/72479e651c15eab53e25ce04c31bab18cfaac0556505cac19221dbbe85bbb9686bc76e4d397e89e5bf516ce667dcf818f8b07e585568edba55abc2bf1f698fb5 languageName: node linkType: hard "flatted@npm:^3.2.9": version: 3.2.9 resolution: "flatted@npm:3.2.9" - checksum: dc2b89e46a2ebde487199de5a4fcb79e8c46f984043fea5c41dbf4661eb881fefac1c939b5bdcd8a09d7f960ec364f516970c7ec44e58ff451239c07fd3d419b + checksum: 10/dc2b89e46a2ebde487199de5a4fcb79e8c46f984043fea5c41dbf4661eb881fefac1c939b5bdcd8a09d7f960ec364f516970c7ec44e58ff451239c07fd3d419b languageName: node linkType: hard @@ -4091,7 +4104,7 @@ __metadata: peerDependenciesMeta: debug: optional: true - checksum: 2e8f5f259a6b02dfa8dc199e08431848a7c3beed32eb4c19945966164a52c89f07b86c3afcc32ebe4279cf0a960520e45a63013d6350309c5ec90133c5d9351a + checksum: 10/2e8f5f259a6b02dfa8dc199e08431848a7c3beed32eb4c19945966164a52c89f07b86c3afcc32ebe4279cf0a960520e45a63013d6350309c5ec90133c5d9351a languageName: node linkType: hard @@ -4101,7 +4114,7 @@ __metadata: dependencies: cross-spawn: "npm:^7.0.0" signal-exit: "npm:^3.0.2" - checksum: f36574ad8e19d69ce06fceac7d86161b863968e4ba292c14b7b40e5c464e3e9bcd7711250d33427d95cc2bb0d48cf101df9687433dbbc7fd3c7e4f595be8305e + checksum: 10/f36574ad8e19d69ce06fceac7d86161b863968e4ba292c14b7b40e5c464e3e9bcd7711250d33427d95cc2bb0d48cf101df9687433dbbc7fd3c7e4f595be8305e languageName: node linkType: hard @@ -4111,14 +4124,14 @@ __metadata: dependencies: cross-spawn: "npm:^7.0.0" signal-exit: "npm:^4.0.1" - checksum: 087edd44857d258c4f73ad84cb8df980826569656f2550c341b27adf5335354393eec24ea2fabd43a253233fb27cee177ebe46bd0b7ea129c77e87cb1e9936fb + checksum: 10/087edd44857d258c4f73ad84cb8df980826569656f2550c341b27adf5335354393eec24ea2fabd43a253233fb27cee177ebe46bd0b7ea129c77e87cb1e9936fb languageName: node linkType: hard "form-data-encoder@npm:^2.1.2": version: 2.1.4 resolution: "form-data-encoder@npm:2.1.4" - checksum: 3778e7db3c21457296e6fdbc4200642a6c01e8be9297256e845ee275f9ddaecb5f49bfb0364690ad216898c114ec59bf85f01ec823a70670b8067273415d62f6 + checksum: 10/3778e7db3c21457296e6fdbc4200642a6c01e8be9297256e845ee275f9ddaecb5f49bfb0364690ad216898c114ec59bf85f01ec823a70670b8067273415d62f6 languageName: node linkType: hard @@ -4129,49 +4142,49 @@ __metadata: asynckit: "npm:^0.4.0" combined-stream: "npm:^1.0.8" mime-types: "npm:^2.1.12" - checksum: 7264aa760a8cf09482816d8300f1b6e2423de1b02bba612a136857413fdc96d7178298ced106817655facc6b89036c6e12ae31c9eb5bdc16aabf502ae8a5d805 + checksum: 10/7264aa760a8cf09482816d8300f1b6e2423de1b02bba612a136857413fdc96d7178298ced106817655facc6b89036c6e12ae31c9eb5bdc16aabf502ae8a5d805 languageName: node linkType: hard "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" - checksum: 29ba9fd347117144e97cbb8852baae5e8b2acb7d1b591ef85695ed96f5b933b1804a7fac4a15dd09ca7ac7d0cdc104410e8102aae2dd3faa570a797ba07adb81 + checksum: 10/29ba9fd347117144e97cbb8852baae5e8b2acb7d1b591ef85695ed96f5b933b1804a7fac4a15dd09ca7ac7d0cdc104410e8102aae2dd3faa570a797ba07adb81 languageName: node linkType: hard "fp-and-or@npm:^0.1.4": version: 0.1.4 resolution: "fp-and-or@npm:0.1.4" - checksum: 780969ef7e86e6822d7e5f27d9c3bcbb7fe1206dbdc8af76482a9213d9c812f8d9dfda8d8d3988f94f6cbc898e7a86ec5ab5700ef53b0760b3bf226a2a52e7e0 + checksum: 10/780969ef7e86e6822d7e5f27d9c3bcbb7fe1206dbdc8af76482a9213d9c812f8d9dfda8d8d3988f94f6cbc898e7a86ec5ab5700ef53b0760b3bf226a2a52e7e0 languageName: node linkType: hard "fresh@npm:0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" - checksum: 64c88e489b5d08e2f29664eb3c79c705ff9a8eb15d3e597198ef76546d4ade295897a44abb0abd2700e7ef784b2e3cbf1161e4fbf16f59129193fd1030d16da1 + checksum: 10/64c88e489b5d08e2f29664eb3c79c705ff9a8eb15d3e597198ef76546d4ade295897a44abb0abd2700e7ef784b2e3cbf1161e4fbf16f59129193fd1030d16da1 languageName: node linkType: hard "from@npm:~0": version: 0.1.7 resolution: "from@npm:0.1.7" - checksum: b85125b7890489656eb2e4f208f7654a93ec26e3aefaf3bbbcc0d496fc1941e4405834fcc9fe7333192aa2187905510ace70417bbf9ac6f6f4784a731d986939 + checksum: 10/b85125b7890489656eb2e4f208f7654a93ec26e3aefaf3bbbcc0d496fc1941e4405834fcc9fe7333192aa2187905510ace70417bbf9ac6f6f4784a731d986939 languageName: node linkType: hard "fromentries@npm:^1.2.0": version: 1.3.2 resolution: "fromentries@npm:1.3.2" - checksum: 10d6e07d289db102c0c1eaf5c3e3fa55ddd6b50033d7de16d99a7cd89f1e1a302dfadb26457031f9bb5d2ed95a179aaf0396092dde5abcae06e8a2f0476826be + checksum: 10/10d6e07d289db102c0c1eaf5c3e3fa55ddd6b50033d7de16d99a7cd89f1e1a302dfadb26457031f9bb5d2ed95a179aaf0396092dde5abcae06e8a2f0476826be languageName: node linkType: hard "fs-constants@npm:^1.0.0": version: 1.0.0 resolution: "fs-constants@npm:1.0.0" - checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d + checksum: 10/18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d languageName: node linkType: hard @@ -4182,7 +4195,7 @@ __metadata: graceful-fs: "npm:^4.2.0" jsonfile: "npm:^6.0.1" universalify: "npm:^2.0.0" - checksum: 05ce2c3b59049bcb7b52001acd000e44b3c4af4ec1f8839f383ef41ec0048e3cfa7fd8a637b1bddfefad319145db89be91f4b7c1db2908205d38bf91e7d1d3b7 + checksum: 10/05ce2c3b59049bcb7b52001acd000e44b3c4af4ec1f8839f383ef41ec0048e3cfa7fd8a637b1bddfefad319145db89be91f4b7c1db2908205d38bf91e7d1d3b7 languageName: node linkType: hard @@ -4193,7 +4206,7 @@ __metadata: graceful-fs: "npm:^4.2.0" jsonfile: "npm:^6.0.1" universalify: "npm:^2.0.0" - checksum: 0579bf6726a4cd054d4aa308f10b483f52478bb16284f32cf60b4ce0542063d551fca1a08a2af365e35db21a3fa5a06cf2a6ed614004b4368982bc754cb816b3 + checksum: 10/0579bf6726a4cd054d4aa308f10b483f52478bb16284f32cf60b4ce0542063d551fca1a08a2af365e35db21a3fa5a06cf2a6ed614004b4368982bc754cb816b3 languageName: node linkType: hard @@ -4202,7 +4215,7 @@ __metadata: resolution: "fs-minipass@npm:2.1.0" dependencies: minipass: "npm:^3.0.0" - checksum: 03191781e94bc9a54bd376d3146f90fe8e082627c502185dbf7b9b3032f66b0b142c1115f3b2cc5936575fc1b44845ce903dd4c21bec2a8d69f3bd56f9cee9ec + checksum: 10/03191781e94bc9a54bd376d3146f90fe8e082627c502185dbf7b9b3032f66b0b142c1115f3b2cc5936575fc1b44845ce903dd4c21bec2a8d69f3bd56f9cee9ec languageName: node linkType: hard @@ -4211,14 +4224,14 @@ __metadata: resolution: "fs-minipass@npm:3.0.3" dependencies: minipass: "npm:^7.0.3" - checksum: af143246cf6884fe26fa281621d45cfe111d34b30535a475bfa38dafe343dadb466c047a924ffc7d6b7b18265df4110224ce3803806dbb07173bf2087b648d7f + checksum: 10/af143246cf6884fe26fa281621d45cfe111d34b30535a475bfa38dafe343dadb466c047a924ffc7d6b7b18265df4110224ce3803806dbb07173bf2087b648d7f languageName: node linkType: hard "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" - checksum: e703107c28e362d8d7b910bbcbfd371e640a3bb45ae157a362b5952c0030c0b6d4981140ec319b347bce7adc025dd7813da1ff908a945ac214d64f5402a51b96 + checksum: 10/e703107c28e362d8d7b910bbcbfd371e640a3bb45ae157a362b5952c0030c0b6d4981140ec319b347bce7adc025dd7813da1ff908a945ac214d64f5402a51b96 languageName: node linkType: hard @@ -4227,7 +4240,7 @@ __metadata: resolution: "fsevents@npm:2.3.3" dependencies: node-gyp: "npm:latest" - checksum: 4c1ade961ded57cdbfbb5cac5106ec17bc8bccd62e16343c569a0ceeca83b9dfef87550b4dc5cbb89642da412b20c5071f304c8c464b80415446e8e155a038c0 + checksum: 10/4c1ade961ded57cdbfbb5cac5106ec17bc8bccd62e16343c569a0ceeca83b9dfef87550b4dc5cbb89642da412b20c5071f304c8c464b80415446e8e155a038c0 conditions: os=darwin languageName: node linkType: hard @@ -4241,36 +4254,24 @@ __metadata: languageName: node linkType: hard -"fstream@npm:^1.0.12": - version: 1.0.12 - resolution: "fstream@npm:1.0.12" - dependencies: - graceful-fs: "npm:^4.1.2" - inherits: "npm:~2.0.0" - mkdirp: "npm:>=0.5 0" - rimraf: "npm:2" - checksum: eadba4375e952f3f7e9d34d822cfa1592134173033bafef42aa23d5f09bf373e4eb77e097883c0a9136ad7e7d3b49bb14f0e8dfaa489abd5139b5a3c961787b6 - languageName: node - linkType: hard - "fsu@npm:^1.1.1": version: 1.1.1 resolution: "fsu@npm:1.1.1" - checksum: 470564b7586fab03ec7bbb13f3b15cf316d51919174b44e31718d4de2f7de4ce07dc180d62b984c144b7ec6e0cca2174c03985a5d8cbef70bd1ec12f1da8968d + checksum: 10/470564b7586fab03ec7bbb13f3b15cf316d51919174b44e31718d4de2f7de4ce07dc180d62b984c144b7ec6e0cca2174c03985a5d8cbef70bd1ec12f1da8968d languageName: node linkType: hard "function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" - checksum: 185e20d20f10c8d661d59aac0f3b63b31132d492e1b11fcc2a93cb2c47257ebaee7407c38513efd2b35cafdf972d9beb2ea4593c1e0f3bf8f2744836928d7454 + checksum: 10/185e20d20f10c8d661d59aac0f3b63b31132d492e1b11fcc2a93cb2c47257ebaee7407c38513efd2b35cafdf972d9beb2ea4593c1e0f3bf8f2744836928d7454 languageName: node linkType: hard "fuse.js@npm:^7.0.0": version: 7.0.0 resolution: "fuse.js@npm:7.0.0" - checksum: d75d35f2d61afa85b8248f9cbfc7d4df29ae47ea574a15ad5c3c2a41930c5ed78668346295508b59ec4929fcb1a5cd6d9a8c649b5a3bc8b18e515f4e4cb9809d + checksum: 10/d75d35f2d61afa85b8248f9cbfc7d4df29ae47ea574a15ad5c3c2a41930c5ed78668346295508b59ec4929fcb1a5cd6d9a8c649b5a3bc8b18e515f4e4cb9809d languageName: node linkType: hard @@ -4286,28 +4287,28 @@ __metadata: string-width: "npm:^4.2.3" strip-ansi: "npm:^6.0.1" wide-align: "npm:^1.1.5" - checksum: 09535dd53b5ced6a34482b1fa9f3929efdeac02f9858569cde73cef3ed95050e0f3d095706c1689614059898924b7a74aa14042f51381a1ccc4ee5c29d2389c4 + checksum: 10/09535dd53b5ced6a34482b1fa9f3929efdeac02f9858569cde73cef3ed95050e0f3d095706c1689614059898924b7a74aa14042f51381a1ccc4ee5c29d2389c4 languageName: node linkType: hard "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" - checksum: 17d8333460204fbf1f9160d067e1e77f908a5447febb49424b8ab043026049835c9ef3974445c57dbd39161f4d2b04356d7de12b2eecaa27a7a7ea7d871cbedd + checksum: 10/17d8333460204fbf1f9160d067e1e77f908a5447febb49424b8ab043026049835c9ef3974445c57dbd39161f4d2b04356d7de12b2eecaa27a7a7ea7d871cbedd languageName: node linkType: hard "get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" - checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + checksum: 10/b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 languageName: node linkType: hard "get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": version: 2.0.2 resolution: "get-func-name@npm:2.0.2" - checksum: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b + checksum: 10/3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b languageName: node linkType: hard @@ -4319,21 +4320,21 @@ __metadata: has-proto: "npm:^1.0.1" has-symbols: "npm:^1.0.3" hasown: "npm:^2.0.0" - checksum: aa96db4f809734d26d49b59bc8669d73a0ae792da561514e987735573a1dfaede516cd102f217a078ea2b42d4c4fb1f83d487932cb15d49826b726cc9cd4470b + checksum: 10/aa96db4f809734d26d49b59bc8669d73a0ae792da561514e987735573a1dfaede516cd102f217a078ea2b42d4c4fb1f83d487932cb15d49826b726cc9cd4470b languageName: node linkType: hard "get-package-type@npm:^0.1.0": version: 0.1.0 resolution: "get-package-type@npm:0.1.0" - checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 + checksum: 10/bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 languageName: node linkType: hard "get-stdin@npm:^8.0.0": version: 8.0.0 resolution: "get-stdin@npm:8.0.0" - checksum: 40128b6cd25781ddbd233344f1a1e4006d4284906191ed0a7d55ec2c1a3e44d650f280b2c9eeab79c03ac3037da80257476c0e4e5af38ddfb902d6ff06282d77 + checksum: 10/40128b6cd25781ddbd233344f1a1e4006d4284906191ed0a7d55ec2c1a3e44d650f280b2c9eeab79c03ac3037da80257476c0e4e5af38ddfb902d6ff06282d77 languageName: node linkType: hard @@ -4342,21 +4343,21 @@ __metadata: resolution: "get-stream@npm:5.2.0" dependencies: pump: "npm:^3.0.0" - checksum: 13a73148dca795e41421013da6e3ebff8ccb7fba4d2f023fd0c6da2c166ec4e789bec9774a73a7b49c08daf2cae552f8a3e914042ac23b5f59dd278cc8f9cbfb + checksum: 10/13a73148dca795e41421013da6e3ebff8ccb7fba4d2f023fd0c6da2c166ec4e789bec9774a73a7b49c08daf2cae552f8a3e914042ac23b5f59dd278cc8f9cbfb languageName: node linkType: hard "get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" - checksum: 781266d29725f35c59f1d214aedc92b0ae855800a980800e2923b3fbc4e56b3cb6e462c42e09a1cf1a00c64e056a78fa407cbe06c7c92b7e5cd49b4b85c2a497 + checksum: 10/781266d29725f35c59f1d214aedc92b0ae855800a980800e2923b3fbc4e56b3cb6e462c42e09a1cf1a00c64e056a78fa407cbe06c7c92b7e5cd49b4b85c2a497 languageName: node linkType: hard "get-stream@npm:^8.0.1": version: 8.0.1 resolution: "get-stream@npm:8.0.1" - checksum: dde5511e2e65a48e9af80fea64aff11b4921b14b6e874c6f8294c50975095af08f41bfb0b680c887f28b566dd6ec2cb2f960f9d36a323359be324ce98b766e9e + checksum: 10/dde5511e2e65a48e9af80fea64aff11b4921b14b6e874c6f8294c50975095af08f41bfb0b680c887f28b566dd6ec2cb2f960f9d36a323359be324ce98b766e9e languageName: node linkType: hard @@ -4365,14 +4366,14 @@ __metadata: resolution: "getos@npm:3.2.1" dependencies: async: "npm:^3.2.0" - checksum: 228bede057f5cbed93dc6a66ce459a0364059faa2869682547663302f612e6295f13d3ad2a54ebbed573a9eb7f8124508b24409df6bcda6e15906c357526d11f + checksum: 10/228bede057f5cbed93dc6a66ce459a0364059faa2869682547663302f612e6295f13d3ad2a54ebbed573a9eb7f8124508b24409df6bcda6e15906c357526d11f languageName: node linkType: hard "github-from-package@npm:0.0.0": version: 0.0.0 resolution: "github-from-package@npm:0.0.0" - checksum: 2a091ba07fbce22205642543b4ea8aaf068397e1433c00ae0f9de36a3607baf5bcc14da97fbb798cfca6393b3c402031fca06d8b491a44206d6efef391c58537 + checksum: 10/2a091ba07fbce22205642543b4ea8aaf068397e1433c00ae0f9de36a3607baf5bcc14da97fbb798cfca6393b3c402031fca06d8b491a44206d6efef391c58537 languageName: node linkType: hard @@ -4381,7 +4382,7 @@ __metadata: resolution: "glob-parent@npm:5.1.2" dependencies: is-glob: "npm:^4.0.1" - checksum: 32cd106ce8c0d83731966d31517adb766d02c3812de49c30cfe0675c7c0ae6630c11214c54a5ae67aca882cf738d27fd7768f21aa19118b9245950554be07247 + checksum: 10/32cd106ce8c0d83731966d31517adb766d02c3812de49c30cfe0675c7c0ae6630c11214c54a5ae67aca882cf738d27fd7768f21aa19118b9245950554be07247 languageName: node linkType: hard @@ -4390,14 +4391,14 @@ __metadata: resolution: "glob-parent@npm:6.0.2" dependencies: is-glob: "npm:^4.0.3" - checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + checksum: 10/c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 languageName: node linkType: hard "glob-to-regexp@npm:^0.4.1": version: 0.4.1 resolution: "glob-to-regexp@npm:0.4.1" - checksum: 9009529195a955c40d7b9690794aeff5ba665cc38f1519e111c58bb54366fd0c106bde80acf97ba4e533208eb53422c83b136611a54c5fefb1edd8dc267cb62e + checksum: 10/9009529195a955c40d7b9690794aeff5ba665cc38f1519e111c58bb54366fd0c106bde80acf97ba4e533208eb53422c83b136611a54c5fefb1edd8dc267cb62e languageName: node linkType: hard @@ -4411,7 +4412,7 @@ __metadata: minimatch: "npm:^3.0.4" once: "npm:^1.3.0" path-is-absolute: "npm:^1.0.0" - checksum: bc78b6ea0735b6e23d20678aba4ae6a4760e8c9527e3c4683ac25b14e70f55f9531245dcf25959b70cbc4aa3dcce1fc37ab65fd026a4cbd70aa3a44880bd396b + checksum: 10/bc78b6ea0735b6e23d20678aba4ae6a4760e8c9527e3c4683ac25b14e70f55f9531245dcf25959b70cbc4aa3dcce1fc37ab65fd026a4cbd70aa3a44880bd396b languageName: node linkType: hard @@ -4426,7 +4427,7 @@ __metadata: path-scurry: "npm:^1.10.1" bin: glob: dist/esm/bin.mjs - checksum: 38bdb2c9ce75eb5ed168f309d4ed05b0798f640b637034800a6bf306f39d35409bf278b0eaaffaec07591085d3acb7184a201eae791468f0f617771c2486a6a8 + checksum: 10/38bdb2c9ce75eb5ed168f309d4ed05b0798f640b637034800a6bf306f39d35409bf278b0eaaffaec07591085d3acb7184a201eae791468f0f617771c2486a6a8 languageName: node linkType: hard @@ -4440,7 +4441,7 @@ __metadata: minimatch: "npm:^3.1.1" once: "npm:^1.3.0" path-is-absolute: "npm:^1.0.0" - checksum: 59452a9202c81d4508a43b8af7082ca5c76452b9fcc4a9ab17655822e6ce9b21d4f8fbadabe4fe3faef448294cec249af305e2cd824b7e9aaf689240e5e96a7b + checksum: 10/59452a9202c81d4508a43b8af7082ca5c76452b9fcc4a9ab17655822e6ce9b21d4f8fbadabe4fe3faef448294cec249af305e2cd824b7e9aaf689240e5e96a7b languageName: node linkType: hard @@ -4453,7 +4454,7 @@ __metadata: inherits: "npm:2" minimatch: "npm:^5.0.1" once: "npm:^1.3.0" - checksum: 9aab1c75eb087c35dbc41d1f742e51d0507aa2b14c910d96fb8287107a10a22f4bbdce26fc0a3da4c69a20f7b26d62f1640b346a4f6e6becfff47f335bb1dc5e + checksum: 10/9aab1c75eb087c35dbc41d1f742e51d0507aa2b14c910d96fb8287107a10a22f4bbdce26fc0a3da4c69a20f7b26d62f1640b346a4f6e6becfff47f335bb1dc5e languageName: node linkType: hard @@ -4462,7 +4463,7 @@ __metadata: resolution: "global-dirs@npm:3.0.1" dependencies: ini: "npm:2.0.0" - checksum: 70147b80261601fd40ac02a104581432325c1c47329706acd773f3a6ce99bb36d1d996038c85ccacd482ad22258ec233c586b6a91535b1a116b89663d49d6438 + checksum: 10/70147b80261601fd40ac02a104581432325c1c47329706acd773f3a6ce99bb36d1d996038c85ccacd482ad22258ec233c586b6a91535b1a116b89663d49d6438 languageName: node linkType: hard @@ -4473,7 +4474,7 @@ __metadata: global-prefix: "npm:^1.0.1" is-windows: "npm:^1.0.1" resolve-dir: "npm:^1.0.0" - checksum: e4031a01c0c7401349bb69e1499c7268d636552b16374c0002d677c7a6185da6782a2927a7a3a7c046eb7be97cd26b3c7b1b736f9818ecc7ac09e9d61449065e + checksum: 10/e4031a01c0c7401349bb69e1499c7268d636552b16374c0002d677c7a6185da6782a2927a7a3a7c046eb7be97cd26b3c7b1b736f9818ecc7ac09e9d61449065e languageName: node linkType: hard @@ -4486,14 +4487,14 @@ __metadata: ini: "npm:^1.3.4" is-windows: "npm:^1.0.1" which: "npm:^1.2.14" - checksum: 68cf78f81cd85310095ca1f0ec22dd5f43a1059646b2c7b3fc4a7c9ce744356e66ca833adda4e5753e38021847aaec393a159a029ba2d257c08ccb3f00ca2899 + checksum: 10/68cf78f81cd85310095ca1f0ec22dd5f43a1059646b2c7b3fc4a7c9ce744356e66ca833adda4e5753e38021847aaec393a159a029ba2d257c08ccb3f00ca2899 languageName: node linkType: hard "globals@npm:^11.1.0": version: 11.12.0 resolution: "globals@npm:11.12.0" - checksum: 9f054fa38ff8de8fa356502eb9d2dae0c928217b8b5c8de1f09f5c9b6c8a96d8b9bd3afc49acbcd384a98a81fea713c859e1b09e214c60509517bb8fc2bc13c2 + checksum: 10/9f054fa38ff8de8fa356502eb9d2dae0c928217b8b5c8de1f09f5c9b6c8a96d8b9bd3afc49acbcd384a98a81fea713c859e1b09e214c60509517bb8fc2bc13c2 languageName: node linkType: hard @@ -4502,7 +4503,7 @@ __metadata: resolution: "globals@npm:13.24.0" dependencies: type-fest: "npm:^0.20.2" - checksum: 62c5b1997d06674fc7191d3e01e324d3eda4d65ac9cc4e78329fa3b5c4fd42a0e1c8722822497a6964eee075255ce21ccf1eec2d83f92ef3f06653af4d0ee28e + checksum: 10/62c5b1997d06674fc7191d3e01e324d3eda4d65ac9cc4e78329fa3b5c4fd42a0e1c8722822497a6964eee075255ce21ccf1eec2d83f92ef3f06653af4d0ee28e languageName: node linkType: hard @@ -4516,7 +4517,7 @@ __metadata: ignore: "npm:^5.2.0" merge2: "npm:^1.4.1" slash: "npm:^3.0.0" - checksum: 288e95e310227bbe037076ea81b7c2598ccbc3122d87abc6dab39e1eec309aa14f0e366a98cdc45237ffcfcbad3db597778c0068217dcb1950fef6249104e1b1 + checksum: 10/288e95e310227bbe037076ea81b7c2598ccbc3122d87abc6dab39e1eec309aa14f0e366a98cdc45237ffcfcbad3db597778c0068217dcb1950fef6249104e1b1 languageName: node linkType: hard @@ -4525,7 +4526,7 @@ __metadata: resolution: "gopd@npm:1.0.1" dependencies: get-intrinsic: "npm:^1.1.3" - checksum: 5fbc7ad57b368ae4cd2f41214bd947b045c1a4be2f194a7be1778d71f8af9dbf4004221f3b6f23e30820eb0d052b4f819fe6ebe8221e2a3c6f0ee4ef173421ca + checksum: 10/5fbc7ad57b368ae4cd2f41214bd947b045c1a4be2f194a7be1778d71f8af9dbf4004221f3b6f23e30820eb0d052b4f819fe6ebe8221e2a3c6f0ee4ef173421ca languageName: node linkType: hard @@ -4544,7 +4545,7 @@ __metadata: lowercase-keys: "npm:^3.0.0" p-cancelable: "npm:^3.0.0" responselike: "npm:^3.0.0" - checksum: 6c22f1449f4574d79a38e0eba0b753ce2f9030d61838a1ae1e25d3ff5b0db7916aa21023ac369c67d39d17f87bba9283a0b0cb88590de77926c968630aacae75 + checksum: 10/6c22f1449f4574d79a38e0eba0b753ce2f9030d61838a1ae1e25d3ff5b0db7916aa21023ac369c67d39d17f87bba9283a0b0cb88590de77926c968630aacae75 languageName: node linkType: hard @@ -4563,28 +4564,28 @@ __metadata: lowercase-keys: "npm:^3.0.0" p-cancelable: "npm:^3.0.0" responselike: "npm:^3.0.0" - checksum: 35ac9fe37daca3d0a4f90305d8e64626268ef5a42584f5bcb42eea3cb9bbeb691cf9041d5ea72133a7295d1291684789a3148ff89a95f3d3ce3d0ebb6fb2f680 + checksum: 10/35ac9fe37daca3d0a4f90305d8e64626268ef5a42584f5bcb42eea3cb9bbeb691cf9041d5ea72133a7295d1291684789a3148ff89a95f3d3ce3d0ebb6fb2f680 languageName: node linkType: hard "graceful-fs@npm:4.2.10": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" - checksum: 0c83c52b62c68a944dcfb9d66b0f9f10f7d6e3d081e8067b9bfdc9e5f3a8896584d576036f82915773189eec1eba599397fc620e75c03c0610fb3d67c6713c1a + checksum: 10/0c83c52b62c68a944dcfb9d66b0f9f10f7d6e3d081e8067b9bfdc9e5f3a8896584d576036f82915773189eec1eba599397fc620e75c03c0610fb3d67c6713c1a languageName: node linkType: hard -"graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" - checksum: bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 + checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 languageName: node linkType: hard "graphemer@npm:^1.4.0": version: 1.4.0 resolution: "graphemer@npm:1.4.0" - checksum: 6dd60dba97007b21e3a829fab3f771803cc1292977fe610e240ea72afd67e5690ac9eeaafc4a99710e78962e5936ab5a460787c2a1180f1cb0ccfac37d29f897 + checksum: 10/6dd60dba97007b21e3a829fab3f771803cc1292977fe610e240ea72afd67e5690ac9eeaafc4a99710e78962e5936ab5a460787c2a1180f1cb0ccfac37d29f897 languageName: node linkType: hard @@ -4602,21 +4603,21 @@ __metadata: optional: true bin: handlebars: bin/handlebars - checksum: bd528f4dd150adf67f3f857118ef0fa43ff79a153b1d943fa0a770f2599e38b25a7a0dbac1a3611a4ec86970fd2325a81310fb788b5c892308c9f8743bd02e11 + checksum: 10/bd528f4dd150adf67f3f857118ef0fa43ff79a153b1d943fa0a770f2599e38b25a7a0dbac1a3611a4ec86970fd2325a81310fb788b5c892308c9f8743bd02e11 languageName: node linkType: hard "has-flag@npm:^3.0.0": version: 3.0.0 resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + checksum: 10/4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b languageName: node linkType: hard "has-flag@npm:^4.0.0": version: 4.0.0 resolution: "has-flag@npm:4.0.0" - checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + checksum: 10/261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad languageName: node linkType: hard @@ -4625,35 +4626,35 @@ __metadata: resolution: "has-property-descriptors@npm:1.0.1" dependencies: get-intrinsic: "npm:^1.2.2" - checksum: 21a47bb080a24e79594aef1ce71e1a18a1c5ab4120308e218088f67ebb7f6f408847541e2d96e5bd00e90eef5c5a49e4ebbdc8fc2d5b365a2c379aef071642f0 + checksum: 10/21a47bb080a24e79594aef1ce71e1a18a1c5ab4120308e218088f67ebb7f6f408847541e2d96e5bd00e90eef5c5a49e4ebbdc8fc2d5b365a2c379aef071642f0 languageName: node linkType: hard "has-proto@npm:^1.0.1": version: 1.0.1 resolution: "has-proto@npm:1.0.1" - checksum: eab2ab0ed1eae6d058b9bbc4c1d99d2751b29717be80d02fd03ead8b62675488de0c7359bc1fdd4b87ef6fd11e796a9631ad4d7452d9324fdada70158c2e5be7 + checksum: 10/eab2ab0ed1eae6d058b9bbc4c1d99d2751b29717be80d02fd03ead8b62675488de0c7359bc1fdd4b87ef6fd11e796a9631ad4d7452d9324fdada70158c2e5be7 languageName: node linkType: hard "has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" - checksum: 464f97a8202a7690dadd026e6d73b1ceeddd60fe6acfd06151106f050303eaa75855aaa94969df8015c11ff7c505f196114d22f7386b4a471038da5874cf5e9b + checksum: 10/464f97a8202a7690dadd026e6d73b1ceeddd60fe6acfd06151106f050303eaa75855aaa94969df8015c11ff7c505f196114d22f7386b4a471038da5874cf5e9b languageName: node linkType: hard "has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" - checksum: 041b4293ad6bf391e21c5d85ed03f412506d6623786b801c4ab39e4e6ca54993f13201bceb544d92963f9e0024e6e7fbf0cb1d84c9d6b31cb9c79c8c990d13d8 + checksum: 10/041b4293ad6bf391e21c5d85ed03f412506d6623786b801c4ab39e4e6ca54993f13201bceb544d92963f9e0024e6e7fbf0cb1d84c9d6b31cb9c79c8c990d13d8 languageName: node linkType: hard "has-yarn@npm:^3.0.0": version: 3.0.0 resolution: "has-yarn@npm:3.0.0" - checksum: b9e14e78e0a37bc070550c862b201534287bc10e62a86ec9c1f455ffb082db42817ce9aed914bd73f1d589bbf268520e194629ff2f62ff6b98a482c4bd2dcbfb + checksum: 10/b9e14e78e0a37bc070550c862b201534287bc10e62a86ec9c1f455ffb082db42817ce9aed914bd73f1d589bbf268520e194629ff2f62ff6b98a482c4bd2dcbfb languageName: node linkType: hard @@ -4663,7 +4664,7 @@ __metadata: dependencies: is-stream: "npm:^2.0.0" type-fest: "npm:^0.8.0" - checksum: 06cc474bed246761ff61c19d629977eb5f53fa817be4313a255a64ae0f433e831a29e83acb6555e3f4592b348497596f1d1653751008dda4f21c9c21ca60ac5a + checksum: 10/06cc474bed246761ff61c19d629977eb5f53fa817be4313a255a64ae0f433e831a29e83acb6555e3f4592b348497596f1d1653751008dda4f21c9c21ca60ac5a languageName: node linkType: hard @@ -4672,7 +4673,7 @@ __metadata: resolution: "hasown@npm:2.0.0" dependencies: function-bind: "npm:^1.1.2" - checksum: c330f8d93f9d23fe632c719d4db3d698ef7d7c367d51548b836069e06a90fa9151e868c8e67353cfe98d67865bf7354855db28fa36eb1b18fa5d4a3f4e7f1c90 + checksum: 10/c330f8d93f9d23fe632c719d4db3d698ef7d7c367d51548b836069e06a90fa9151e868c8e67353cfe98d67865bf7354855db28fa36eb1b18fa5d4a3f4e7f1c90 languageName: node linkType: hard @@ -4681,7 +4682,7 @@ __metadata: resolution: "he@npm:1.2.0" bin: he: bin/he - checksum: d09b2243da4e23f53336e8de3093e5c43d2c39f8d0d18817abfa32ce3e9355391b2edb4bb5edc376aea5d4b0b59d6a0482aab4c52bc02ef95751e4b818e847f1 + checksum: 10/d09b2243da4e23f53336e8de3093e5c43d2c39f8d0d18817abfa32ce3e9355391b2edb4bb5edc376aea5d4b0b59d6a0482aab4c52bc02ef95751e4b818e847f1 languageName: node linkType: hard @@ -4690,7 +4691,7 @@ __metadata: resolution: "homedir-polyfill@npm:1.0.3" dependencies: parse-passwd: "npm:^1.0.0" - checksum: 18dd4db87052c6a2179d1813adea0c4bfcfa4f9996f0e226fefb29eb3d548e564350fa28ec46b0bf1fbc0a1d2d6922ceceb80093115ea45ff8842a4990139250 + checksum: 10/18dd4db87052c6a2179d1813adea0c4bfcfa4f9996f0e226fefb29eb3d548e564350fa28ec46b0bf1fbc0a1d2d6922ceceb80093115ea45ff8842a4990139250 languageName: node linkType: hard @@ -4699,7 +4700,7 @@ __metadata: resolution: "hosted-git-info@npm:4.1.0" dependencies: lru-cache: "npm:^6.0.0" - checksum: 4dc67022b7ecb12829966bd731fb9a5f14d351547aafc6520ef3c8e7211f4f0e69452d24e29eae3d9b17df924d660052e53d8ca321cf3008418fb7e6c7c47d6f + checksum: 10/4dc67022b7ecb12829966bd731fb9a5f14d351547aafc6520ef3c8e7211f4f0e69452d24e29eae3d9b17df924d660052e53d8ca321cf3008418fb7e6c7c47d6f languageName: node linkType: hard @@ -4708,7 +4709,7 @@ __metadata: resolution: "hosted-git-info@npm:5.2.1" dependencies: lru-cache: "npm:^7.5.1" - checksum: f0cb6527162b61a65ac350a4d11f55f16629278a19ca61bf421f272c22531b9a1bad34e874b980db6be512130f189c81d1eb9b481b60eeda293b6dc8d35d2aec + checksum: 10/f0cb6527162b61a65ac350a4d11f55f16629278a19ca61bf421f272c22531b9a1bad34e874b980db6be512130f189c81d1eb9b481b60eeda293b6dc8d35d2aec languageName: node linkType: hard @@ -4717,21 +4718,21 @@ __metadata: resolution: "hosted-git-info@npm:6.1.1" dependencies: lru-cache: "npm:^7.5.1" - checksum: 2e48e3fac799b52d82277ff5693916bfa33441a2c06d1f11f9e82886bd235514783c2bdffb3abde67b7aeb6af457a48df38e6894740c7fc2e1bb78f5bcfac61e + checksum: 10/2e48e3fac799b52d82277ff5693916bfa33441a2c06d1f11f9e82886bd235514783c2bdffb3abde67b7aeb6af457a48df38e6894740c7fc2e1bb78f5bcfac61e languageName: node linkType: hard "hpagent@npm:^1.2.0": version: 1.2.0 resolution: "hpagent@npm:1.2.0" - checksum: bad186449da7e3456788a8cbae459fc6c0a855d5872a7f460c48ce4a613020d8d914839dad10047297099299c4f9e6c65a0eec3f5886af196c0a516e4ad8a845 + checksum: 10/bad186449da7e3456788a8cbae459fc6c0a855d5872a7f460c48ce4a613020d8d914839dad10047297099299c4f9e6c65a0eec3f5886af196c0a516e4ad8a845 languageName: node linkType: hard "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" - checksum: 034d74029dcca544a34fb6135e98d427acd73019796ffc17383eaa3ec2fe1c0471dcbbc8f8ed39e46e86d43ccd753a160631615e4048285e313569609b66d5b7 + checksum: 10/034d74029dcca544a34fb6135e98d427acd73019796ffc17383eaa3ec2fe1c0471dcbbc8f8ed39e46e86d43ccd753a160631615e4048285e313569609b66d5b7 languageName: node linkType: hard @@ -4743,14 +4744,14 @@ __metadata: domhandler: "npm:^5.0.3" domutils: "npm:^3.0.1" entities: "npm:^4.4.0" - checksum: ea5512956eee06f5835add68b4291d313c745e8407efa63848f4b8a90a2dee45f498a698bca8614e436f1ee0cfdd609938b71d67c693794545982b76e53e6f11 + checksum: 10/ea5512956eee06f5835add68b4291d313c745e8407efa63848f4b8a90a2dee45f498a698bca8614e436f1ee0cfdd609938b71d67c693794545982b76e53e6f11 languageName: node linkType: hard "http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" - checksum: 362d5ed66b12ceb9c0a328fb31200b590ab1b02f4a254a697dc796850cc4385603e75f53ec59f768b2dad3bfa1464bd229f7de278d2899a0e3beffc634b6683f + checksum: 10/362d5ed66b12ceb9c0a328fb31200b590ab1b02f4a254a697dc796850cc4385603e75f53ec59f768b2dad3bfa1464bd229f7de278d2899a0e3beffc634b6683f languageName: node linkType: hard @@ -4763,7 +4764,7 @@ __metadata: setprototypeof: "npm:1.2.0" statuses: "npm:2.0.1" toidentifier: "npm:1.0.1" - checksum: 0e7f76ee8ff8a33e58a3281a469815b893c41357378f408be8f6d4aa7d1efafb0da064625518e7078381b6a92325949b119dc38fcb30bdbc4e3a35f78c44c439 + checksum: 10/0e7f76ee8ff8a33e58a3281a469815b893c41357378f408be8f6d4aa7d1efafb0da064625518e7078381b6a92325949b119dc38fcb30bdbc4e3a35f78c44c439 languageName: node linkType: hard @@ -4774,7 +4775,7 @@ __metadata: "@tootallnate/once": "npm:1" agent-base: "npm:6" debug: "npm:4" - checksum: 2e17f5519f2f2740b236d1d14911ea4be170c67419dc15b05ea9a860a22c5d9c6ff4da270972117067cc2cefeba9df5f7cd5e7818fdc6ae52b6acf2a533e5fdd + checksum: 10/2e17f5519f2f2740b236d1d14911ea4be170c67419dc15b05ea9a860a22c5d9c6ff4da270972117067cc2cefeba9df5f7cd5e7818fdc6ae52b6acf2a533e5fdd languageName: node linkType: hard @@ -4785,7 +4786,7 @@ __metadata: "@tootallnate/once": "npm:2" agent-base: "npm:6" debug: "npm:4" - checksum: 5ee19423bc3e0fd5f23ce991b0755699ad2a46a440ce9cec99e8126bb98448ad3479d2c0ea54be5519db5b19a4ffaa69616bac01540db18506dd4dac3dc418f0 + checksum: 10/5ee19423bc3e0fd5f23ce991b0755699ad2a46a440ce9cec99e8126bb98448ad3479d2c0ea54be5519db5b19a4ffaa69616bac01540db18506dd4dac3dc418f0 languageName: node linkType: hard @@ -4795,7 +4796,7 @@ __metadata: dependencies: agent-base: "npm:^7.1.0" debug: "npm:^4.3.4" - checksum: dbaaf3d9f3fc4df4a5d7ec45d456ec50f575240b557160fa63427b447d1f812dd7fe4a4f17d2e1ba003d231f07edf5a856ea6d91cb32d533062ff20a7803ccac + checksum: 10/dbaaf3d9f3fc4df4a5d7ec45d456ec50f575240b557160fa63427b447d1f812dd7fe4a4f17d2e1ba003d231f07edf5a856ea6d91cb32d533062ff20a7803ccac languageName: node linkType: hard @@ -4805,7 +4806,7 @@ __metadata: dependencies: quick-lru: "npm:^5.1.1" resolve-alpn: "npm:^1.2.0" - checksum: e7a5ac6548318e83fc0399cd832cdff6bbf902b165d211cad47a56ee732922e0aa1107246dd884b12532a1c4649d27c4d44f2480911c65202e93c90bde8fa29d + checksum: 10/e7a5ac6548318e83fc0399cd832cdff6bbf902b165d211cad47a56ee732922e0aa1107246dd884b12532a1c4649d27c4d44f2480911c65202e93c90bde8fa29d languageName: node linkType: hard @@ -4815,7 +4816,7 @@ __metadata: dependencies: agent-base: "npm:6" debug: "npm:4" - checksum: f0dce7bdcac5e8eaa0be3c7368bb8836ed010fb5b6349ffb412b172a203efe8f807d9a6681319105ea1b6901e1972c7b5ea899672a7b9aad58309f766dcbe0df + checksum: 10/f0dce7bdcac5e8eaa0be3c7368bb8836ed010fb5b6349ffb412b172a203efe8f807d9a6681319105ea1b6901e1972c7b5ea899672a7b9aad58309f766dcbe0df languageName: node linkType: hard @@ -4825,28 +4826,28 @@ __metadata: dependencies: agent-base: "npm:^7.0.2" debug: "npm:4" - checksum: 9ec844f78fd643608239c9c3f6819918631df5cd3e17d104cc507226a39b5d4adda9d790fc9fd63ac0d2bb8a761b2f9f60faa80584a9bf9d7f2e8c5ed0acd330 + checksum: 10/9ec844f78fd643608239c9c3f6819918631df5cd3e17d104cc507226a39b5d4adda9d790fc9fd63ac0d2bb8a761b2f9f60faa80584a9bf9d7f2e8c5ed0acd330 languageName: node linkType: hard "human-signals@npm:^1.1.1": version: 1.1.1 resolution: "human-signals@npm:1.1.1" - checksum: 6a58224dffcef5588910b1028bda8623c9a7053460a1fe3367e61921a6b5f6b93aba30f323868a958f968d7de3f5f78421f11d4d9f7e9563b1bd2b00ed9a4deb + checksum: 10/6a58224dffcef5588910b1028bda8623c9a7053460a1fe3367e61921a6b5f6b93aba30f323868a958f968d7de3f5f78421f11d4d9f7e9563b1bd2b00ed9a4deb languageName: node linkType: hard "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" - checksum: df59be9e0af479036798a881d1f136c4a29e0b518d4abb863afbd11bf30efa3eeb1d0425fc65942dcc05ab3bf40205ea436b0ff389f2cd20b75b8643d539bf86 + checksum: 10/df59be9e0af479036798a881d1f136c4a29e0b518d4abb863afbd11bf30efa3eeb1d0425fc65942dcc05ab3bf40205ea436b0ff389f2cd20b75b8643d539bf86 languageName: node linkType: hard "human-signals@npm:^5.0.0": version: 5.0.0 resolution: "human-signals@npm:5.0.0" - checksum: 30f8870d831cdcd2d6ec0486a7d35d49384996742052cee792854273fa9dd9e7d5db06bb7985d4953e337e10714e994e0302e90dc6848069171b05ec836d65b0 + checksum: 10/30f8870d831cdcd2d6ec0486a7d35d49384996742052cee792854273fa9dd9e7d5db06bb7985d4953e337e10714e994e0302e90dc6848069171b05ec836d65b0 languageName: node linkType: hard @@ -4855,7 +4856,7 @@ __metadata: resolution: "humanize-ms@npm:1.2.1" dependencies: ms: "npm:^2.0.0" - checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + checksum: 10/9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 languageName: node linkType: hard @@ -4864,7 +4865,7 @@ __metadata: resolution: "iconv-lite@npm:0.4.24" dependencies: safer-buffer: "npm:>= 2.1.2 < 3" - checksum: 6d3a2dac6e5d1fb126d25645c25c3a1209f70cceecc68b8ef51ae0da3cdc078c151fade7524a30b12a3094926336831fca09c666ef55b37e2c69638b5d6bd2e3 + checksum: 10/6d3a2dac6e5d1fb126d25645c25c3a1209f70cceecc68b8ef51ae0da3cdc078c151fade7524a30b12a3094926336831fca09c666ef55b37e2c69638b5d6bd2e3 languageName: node linkType: hard @@ -4873,14 +4874,14 @@ __metadata: resolution: "iconv-lite@npm:0.6.3" dependencies: safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 24e3292dd3dadaa81d065c6f8c41b274a47098150d444b96e5f53b4638a9a71482921ea6a91a1f59bb71d9796de25e04afd05919fa64c360347ba65d3766f10f + checksum: 10/24e3292dd3dadaa81d065c6f8c41b274a47098150d444b96e5f53b4638a9a71482921ea6a91a1f59bb71d9796de25e04afd05919fa64c360347ba65d3766f10f languageName: node linkType: hard "ieee754@npm:^1.1.13": version: 1.2.1 resolution: "ieee754@npm:1.2.1" - checksum: d9f2557a59036f16c282aaeb107832dc957a93d73397d89bbad4eb1130560560eb695060145e8e6b3b498b15ab95510226649a0b8f52ae06583575419fe10fc4 + checksum: 10/d9f2557a59036f16c282aaeb107832dc957a93d73397d89bbad4eb1130560560eb695060145e8e6b3b498b15ab95510226649a0b8f52ae06583575419fe10fc4 languageName: node linkType: hard @@ -4889,21 +4890,21 @@ __metadata: resolution: "ignore-walk@npm:6.0.4" dependencies: minimatch: "npm:^9.0.0" - checksum: a56c3f929bb0890ffb6e87dfaca7d5ce97f9e179fd68d49711edea55760aaee367cea3845d7620689b706249053c4b1805e21158f6751c7333f9b2ffb3668272 + checksum: 10/a56c3f929bb0890ffb6e87dfaca7d5ce97f9e179fd68d49711edea55760aaee367cea3845d7620689b706249053c4b1805e21158f6751c7333f9b2ffb3668272 languageName: node linkType: hard "ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.0 resolution: "ignore@npm:5.3.0" - checksum: 51594355cea4c6ad6b28b3b85eb81afa7b988a1871feefd7062baf136c95aa06760ee934fa9590e43d967bd377ce84a4cf6135fbeb6063e063f1182a0e9a3bcd + checksum: 10/51594355cea4c6ad6b28b3b85eb81afa7b988a1871feefd7062baf136c95aa06760ee934fa9590e43d967bd377ce84a4cf6135fbeb6063e063f1182a0e9a3bcd languageName: node linkType: hard "immediate@npm:~3.0.5": version: 3.0.6 resolution: "immediate@npm:3.0.6" - checksum: f9b3486477555997657f70318cc8d3416159f208bec4cca3ff3442fd266bc23f50f0c9bd8547e1371a6b5e82b821ec9a7044a4f7b944798b25aa3cc6d5e63e62 + checksum: 10/f9b3486477555997657f70318cc8d3416159f208bec4cca3ff3442fd266bc23f50f0c9bd8547e1371a6b5e82b821ec9a7044a4f7b944798b25aa3cc6d5e63e62 languageName: node linkType: hard @@ -4913,14 +4914,14 @@ __metadata: dependencies: parent-module: "npm:^1.0.0" resolve-from: "npm:^4.0.0" - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + checksum: 10/2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa languageName: node linkType: hard "import-lazy@npm:^4.0.0": version: 4.0.0 resolution: "import-lazy@npm:4.0.0" - checksum: 943309cc8eb01ada12700448c288b0384f77a1bc33c7e00fa4cb223c665f467a13ce9aaceb8d2e4cf586b07c1d2828040263dcc069873ce63cfc2ac6fd087971 + checksum: 10/943309cc8eb01ada12700448c288b0384f77a1bc33c7e00fa4cb223c665f467a13ce9aaceb8d2e4cf586b07c1d2828040263dcc069873ce63cfc2ac6fd087971 languageName: node linkType: hard @@ -4932,28 +4933,28 @@ __metadata: resolve-cwd: "npm:^3.0.0" bin: import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + checksum: 10/bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd languageName: node linkType: hard "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" - checksum: 2d30b157a91fe1c1d7c6f653cbf263f039be6c5bfa959245a16d4ee191fc0f2af86c08545b6e6beeb041c56b574d2d5b9f95343d378ab49c0f37394d541e7fc8 + checksum: 10/2d30b157a91fe1c1d7c6f653cbf263f039be6c5bfa959245a16d4ee191fc0f2af86c08545b6e6beeb041c56b574d2d5b9f95343d378ab49c0f37394d541e7fc8 languageName: node linkType: hard "indent-string@npm:^4.0.0": version: 4.0.0 resolution: "indent-string@npm:4.0.0" - checksum: cd3f5cbc9ca2d624c6a1f53f12e6b341659aba0e2d3254ae2b4464aaea8b4294cdb09616abbc59458f980531f2429784ed6a420d48d245bcad0811980c9efae9 + checksum: 10/cd3f5cbc9ca2d624c6a1f53f12e6b341659aba0e2d3254ae2b4464aaea8b4294cdb09616abbc59458f980531f2429784ed6a420d48d245bcad0811980c9efae9 languageName: node linkType: hard "infer-owner@npm:^1.0.4": version: 1.0.4 resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 + checksum: 10/181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 languageName: node linkType: hard @@ -4963,49 +4964,49 @@ __metadata: dependencies: once: "npm:^1.3.0" wrappy: "npm:1" - checksum: d2ebd65441a38c8336c223d1b80b921b9fa737e37ea466fd7e253cb000c64ae1f17fa59e68130ef5bda92cfd8d36b83d37dab0eb0a4558bcfec8e8cdfd2dcb67 + checksum: 10/d2ebd65441a38c8336c223d1b80b921b9fa737e37ea466fd7e253cb000c64ae1f17fa59e68130ef5bda92cfd8d36b83d37dab0eb0a4558bcfec8e8cdfd2dcb67 languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.0, inherits@npm:~2.0.1, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" - checksum: cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 + checksum: 10/cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 languageName: node linkType: hard "ini@npm:2.0.0": version: 2.0.0 resolution: "ini@npm:2.0.0" - checksum: 04e24ba05c4f6947e15560824e153b4610bceea2f5a3ab68651d221a4aab3c77d4e3e90a917ebc8bf5ad71a30a8575de56c39d6b4c4b1375a28016b9f3625f9d + checksum: 10/04e24ba05c4f6947e15560824e153b4610bceea2f5a3ab68651d221a4aab3c77d4e3e90a917ebc8bf5ad71a30a8575de56c39d6b4c4b1375a28016b9f3625f9d languageName: node linkType: hard "ini@npm:^1.3.4, ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" - checksum: 314ae176e8d4deb3def56106da8002b462221c174ddb7ce0c49ee72c8cd1f9044f7b10cc555a7d8850982c3b9ca96fc212122749f5234bc2b6fb05fb942ed566 + checksum: 10/314ae176e8d4deb3def56106da8002b462221c174ddb7ce0c49ee72c8cd1f9044f7b10cc555a7d8850982c3b9ca96fc212122749f5234bc2b6fb05fb942ed566 languageName: node linkType: hard "ini@npm:^4.1.1": version: 4.1.1 resolution: "ini@npm:4.1.1" - checksum: 64c7102301742a7527bb17257d18451410eacf63b4b5648a20e108816c355c21c4e8a1761bbcbf3fe8c4ded3297f1b832b885d5e3e485d781e293ebfaf56fea6 + checksum: 10/64c7102301742a7527bb17257d18451410eacf63b4b5648a20e108816c355c21c4e8a1761bbcbf3fe8c4ded3297f1b832b885d5e3e485d781e293ebfaf56fea6 languageName: node linkType: hard "interpret@npm:^3.1.1": version: 3.1.1 resolution: "interpret@npm:3.1.1" - checksum: bc9e11126949c4e6ff49b0b819e923a9adc8e8bf3f9d4f2d782de6d5f592774f6fee4457c10bd08c6a2146b4baee460ccb242c99e5397defa9c846af0d00505a + checksum: 10/bc9e11126949c4e6ff49b0b819e923a9adc8e8bf3f9d4f2d782de6d5f592774f6fee4457c10bd08c6a2146b4baee460ccb242c99e5397defa9c846af0d00505a languageName: node linkType: hard "invert-kv@npm:^3.0.0": version: 3.0.1 resolution: "invert-kv@npm:3.0.1" - checksum: 9801e7876b80ee70df8bcd029a928a35a1252c9c8a92e5d7779fdcd7771ab73e834744bf1f868d6a4b849b275e5ed976ca4f2bfd86814140f863c449196484f5 + checksum: 10/9801e7876b80ee70df8bcd029a928a35a1252c9c8a92e5d7779fdcd7771ab73e834744bf1f868d6a4b849b275e5ed976ca4f2bfd86814140f863c449196484f5 languageName: node linkType: hard @@ -5015,21 +5016,21 @@ __metadata: dependencies: jsbn: "npm:1.1.0" sprintf-js: "npm:^1.1.3" - checksum: 1ed81e06721af012306329b31f532b5e24e00cb537be18ddc905a84f19fe8f83a09a1699862bf3a1ec4b9dea93c55a3fa5faf8b5ea380431469df540f38b092c + checksum: 10/1ed81e06721af012306329b31f532b5e24e00cb537be18ddc905a84f19fe8f83a09a1699862bf3a1ec4b9dea93c55a3fa5faf8b5ea380431469df540f38b092c languageName: node linkType: hard "ipaddr.js@npm:1.9.1": version: 1.9.1 resolution: "ipaddr.js@npm:1.9.1" - checksum: 864d0cced0c0832700e9621913a6429ccdc67f37c1bd78fb8c6789fff35c9d167cb329134acad2290497a53336813ab4798d2794fd675d5eb33b5fdf0982b9ca + checksum: 10/864d0cced0c0832700e9621913a6429ccdc67f37c1bd78fb8c6789fff35c9d167cb329134acad2290497a53336813ab4798d2794fd675d5eb33b5fdf0982b9ca languageName: node linkType: hard "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" - checksum: 73ced84fa35e59e2c57da2d01e12cd01479f381d7f122ce41dcbb713f09dbfc651315832cd2bf8accba7681a69e4d6f1e03941d94dd10040d415086360e7005e + checksum: 10/73ced84fa35e59e2c57da2d01e12cd01479f381d7f122ce41dcbb713f09dbfc651315832cd2bf8accba7681a69e4d6f1e03941d94dd10040d415086360e7005e languageName: node linkType: hard @@ -5038,7 +5039,7 @@ __metadata: resolution: "is-binary-path@npm:2.1.0" dependencies: binary-extensions: "npm:^2.0.0" - checksum: 078e51b4f956c2c5fd2b26bb2672c3ccf7e1faff38e0ebdba45612265f4e3d9fc3127a1fa8370bbf09eab61339203c3d3b7af5662cbf8be4030f8fac37745b0e + checksum: 10/078e51b4f956c2c5fd2b26bb2672c3ccf7e1faff38e0ebdba45612265f4e3d9fc3127a1fa8370bbf09eab61339203c3d3b7af5662cbf8be4030f8fac37745b0e languageName: node linkType: hard @@ -5049,7 +5050,7 @@ __metadata: ci-info: "npm:^2.0.0" bin: is-ci: bin.js - checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 + checksum: 10/77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 languageName: node linkType: hard @@ -5060,7 +5061,7 @@ __metadata: ci-info: "npm:^3.2.0" bin: is-ci: bin.js - checksum: 192c66dc7826d58f803ecae624860dccf1899fc1f3ac5505284c0a5cf5f889046ffeb958fa651e5725d5705c5bcb14f055b79150ea5fcad7456a9569de60260e + checksum: 10/192c66dc7826d58f803ecae624860dccf1899fc1f3ac5505284c0a5cf5f889046ffeb958fa651e5725d5705c5bcb14f055b79150ea5fcad7456a9569de60260e languageName: node linkType: hard @@ -5069,7 +5070,7 @@ __metadata: resolution: "is-core-module@npm:2.13.1" dependencies: hasown: "npm:^2.0.0" - checksum: d53bd0cc24b0a0351fb4b206ee3908f71b9bbf1c47e9c9e14e5f06d292af1663704d2abd7e67700d6487b2b7864e0d0f6f10a1edf1892864bdffcb197d1845a2 + checksum: 10/d53bd0cc24b0a0351fb4b206ee3908f71b9bbf1c47e9c9e14e5f06d292af1663704d2abd7e67700d6487b2b7864e0d0f6f10a1edf1892864bdffcb197d1845a2 languageName: node linkType: hard @@ -5078,28 +5079,28 @@ __metadata: resolution: "is-docker@npm:3.0.0" bin: is-docker: cli.js - checksum: b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 + checksum: 10/b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 languageName: node linkType: hard "is-extendable@npm:^0.1.0": version: 0.1.1 resolution: "is-extendable@npm:0.1.1" - checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 + checksum: 10/3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 languageName: node linkType: hard "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + checksum: 10/df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 languageName: node linkType: hard "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + checksum: 10/44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 languageName: node linkType: hard @@ -5108,7 +5109,7 @@ __metadata: resolution: "is-glob@npm:4.0.3" dependencies: is-extglob: "npm:^2.1.1" - checksum: 3ed74f2b0cdf4f401f38edb0442ddfde3092d79d7d35c9919c86641efdbcbb32e45aa3c0f70ce5eecc946896cd5a0f26e4188b9f2b881876f7cb6c505b82da11 + checksum: 10/3ed74f2b0cdf4f401f38edb0442ddfde3092d79d7d35c9919c86641efdbcbb32e45aa3c0f70ce5eecc946896cd5a0f26e4188b9f2b881876f7cb6c505b82da11 languageName: node linkType: hard @@ -5119,7 +5120,7 @@ __metadata: is-docker: "npm:^3.0.0" bin: is-inside-container: cli.js - checksum: c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 + checksum: 10/c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 languageName: node linkType: hard @@ -5129,49 +5130,49 @@ __metadata: dependencies: global-dirs: "npm:^3.0.0" is-path-inside: "npm:^3.0.2" - checksum: 5294d21c82cb9beedd693ce1dfb12117c4db36d6e35edc9dc6bf06cb300d23c96520d1bfb063386b054268ae3d7255c3f09393b52218cc26ace99b217bf37c93 + checksum: 10/5294d21c82cb9beedd693ce1dfb12117c4db36d6e35edc9dc6bf06cb300d23c96520d1bfb063386b054268ae3d7255c3f09393b52218cc26ace99b217bf37c93 languageName: node linkType: hard "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + checksum: 10/93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 languageName: node linkType: hard "is-npm@npm:^6.0.0": version: 6.0.0 resolution: "is-npm@npm:6.0.0" - checksum: fafe1ddc772345f5460514891bb8014376904ccdbddd59eee7525c9adcc08d426933f28b087bef3e17524da7ebf35c03ef484ff3b6ba9d5fecd8c6e6a7d4bf11 + checksum: 10/fafe1ddc772345f5460514891bb8014376904ccdbddd59eee7525c9adcc08d426933f28b087bef3e17524da7ebf35c03ef484ff3b6ba9d5fecd8c6e6a7d4bf11 languageName: node linkType: hard "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" - checksum: 6a6c3383f68afa1e05b286af866017c78f1226d43ac8cb064e115ff9ed85eb33f5c4f7216c96a71e4dfea289ef52c5da3aef5bbfade8ffe47a0465d70c0c8e86 + checksum: 10/6a6c3383f68afa1e05b286af866017c78f1226d43ac8cb064e115ff9ed85eb33f5c4f7216c96a71e4dfea289ef52c5da3aef5bbfade8ffe47a0465d70c0c8e86 languageName: node linkType: hard "is-obj@npm:^2.0.0": version: 2.0.0 resolution: "is-obj@npm:2.0.0" - checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 + checksum: 10/c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 languageName: node linkType: hard "is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" - checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + checksum: 10/abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 languageName: node linkType: hard "is-plain-obj@npm:^2.1.0": version: 2.1.0 resolution: "is-plain-obj@npm:2.1.0" - checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa + checksum: 10/cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa languageName: node linkType: hard @@ -5180,42 +5181,42 @@ __metadata: resolution: "is-plain-object@npm:2.0.4" dependencies: isobject: "npm:^3.0.1" - checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + checksum: 10/2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca languageName: node linkType: hard "is-stream@npm:^2.0.0": version: 2.0.1 resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + checksum: 10/b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 languageName: node linkType: hard "is-stream@npm:^3.0.0": version: 3.0.0 resolution: "is-stream@npm:3.0.0" - checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 + checksum: 10/172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 languageName: node linkType: hard "is-typedarray@npm:^1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" - checksum: 4b433bfb0f9026f079f4eb3fbaa4ed2de17c9995c3a0b5c800bec40799b4b2a8b4e051b1ada77749deb9ded4ae52fe2096973f3a93ff83df1a5a7184a669478c + checksum: 10/4b433bfb0f9026f079f4eb3fbaa4ed2de17c9995c3a0b5c800bec40799b4b2a8b4e051b1ada77749deb9ded4ae52fe2096973f3a93ff83df1a5a7184a669478c languageName: node linkType: hard "is-unicode-supported@npm:^0.1.0": version: 0.1.0 resolution: "is-unicode-supported@npm:0.1.0" - checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 + checksum: 10/a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 languageName: node linkType: hard "is-windows@npm:^1.0.1, is-windows@npm:^1.0.2": version: 1.0.2 resolution: "is-windows@npm:1.0.2" - checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 + checksum: 10/438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 languageName: node linkType: hard @@ -5224,14 +5225,14 @@ __metadata: resolution: "is-wsl@npm:3.1.0" dependencies: is-inside-container: "npm:^1.0.0" - checksum: f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9 + checksum: 10/f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9 languageName: node linkType: hard "is-yarn-global@npm:^0.4.0": version: 0.4.1 resolution: "is-yarn-global@npm:0.4.1" - checksum: 79ec4e6f581c53d4fefdf5f6c237f9a3ad8db29c85cdc4659e76ae345659317552052a97b7e56952aa5d94a23c798ebec8ccad72fb14d3b26dc647ddceddd716 + checksum: 10/79ec4e6f581c53d4fefdf5f6c237f9a3ad8db29c85cdc4659e76ae345659317552052a97b7e56952aa5d94a23c798ebec8ccad72fb14d3b26dc647ddceddd716 languageName: node linkType: hard @@ -5240,49 +5241,49 @@ __metadata: resolution: "is64bit@npm:2.0.0" dependencies: system-architecture: "npm:^0.1.0" - checksum: 94dafd5f29bfb96c542e89ef8c33e811159ca7d07a2890ab83026fa87706612af4101308d9392e9ee68e046e8604a6b59a8f41091f8556f6235efbcfd9c5574c + checksum: 10/94dafd5f29bfb96c542e89ef8c33e811159ca7d07a2890ab83026fa87706612af4101308d9392e9ee68e046e8604a6b59a8f41091f8556f6235efbcfd9c5574c languageName: node linkType: hard "isarray@npm:0.0.1": version: 0.0.1 resolution: "isarray@npm:0.0.1" - checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 + checksum: 10/49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 languageName: node linkType: hard "isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" - checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + checksum: 10/f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab languageName: node linkType: hard "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" - checksum: 7c9f715c03aff08f35e98b1fadae1b9267b38f0615d501824f9743f3aab99ef10e303ce7db3f186763a0b70a19de5791ebfc854ff884d5a8c4d92211f642ec92 + checksum: 10/7c9f715c03aff08f35e98b1fadae1b9267b38f0615d501824f9743f3aab99ef10e303ce7db3f186763a0b70a19de5791ebfc854ff884d5a8c4d92211f642ec92 languageName: node linkType: hard "isexe@npm:^3.1.1": version: 3.1.1 resolution: "isexe@npm:3.1.1" - checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + checksum: 10/7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e languageName: node linkType: hard "isobject@npm:^3.0.1": version: 3.0.1 resolution: "isobject@npm:3.0.1" - checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + checksum: 10/db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 languageName: node linkType: hard "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.2 resolution: "istanbul-lib-coverage@npm:3.2.2" - checksum: 40bbdd1e937dfd8c830fa286d0f665e81b7a78bdabcd4565f6d5667c99828bda3db7fb7ac6b96a3e2e8a2461ddbc5452d9f8bc7d00cb00075fa6a3e99f5b6a81 + checksum: 10/40bbdd1e937dfd8c830fa286d0f665e81b7a78bdabcd4565f6d5667c99828bda3db7fb7ac6b96a3e2e8a2461ddbc5452d9f8bc7d00cb00075fa6a3e99f5b6a81 languageName: node linkType: hard @@ -5291,7 +5292,7 @@ __metadata: resolution: "istanbul-lib-hook@npm:3.0.0" dependencies: append-transform: "npm:^2.0.0" - checksum: 512a996cce6b1b9003ba59eab42299dd1527176c01f3ceb7b16bf68f437eeab4958f9df7df0a6b258d45d5f1a2ca2a1bdb915970711e1a5d7b2de911c582f721 + checksum: 10/512a996cce6b1b9003ba59eab42299dd1527176c01f3ceb7b16bf68f437eeab4958f9df7df0a6b258d45d5f1a2ca2a1bdb915970711e1a5d7b2de911c582f721 languageName: node linkType: hard @@ -5303,7 +5304,7 @@ __metadata: "@istanbuljs/schema": "npm:^0.1.2" istanbul-lib-coverage: "npm:^3.0.0" semver: "npm:^6.3.0" - checksum: 6e04ab365b95644ec4954b645f901be90be8ad81233d6df536300cdafcf70dd1ed22a912ceda38b32053c7fc9830c44cd23550c603f493329a8532073d1d6c42 + checksum: 10/6e04ab365b95644ec4954b645f901be90be8ad81233d6df536300cdafcf70dd1ed22a912ceda38b32053c7fc9830c44cd23550c603f493329a8532073d1d6c42 languageName: node linkType: hard @@ -5317,7 +5318,7 @@ __metadata: p-map: "npm:^3.0.0" rimraf: "npm:^3.0.0" uuid: "npm:^8.3.2" - checksum: 60e7b3441687249460f34a817c7204967b07830a69b6e430e60a45615319c2ab4e2b2eaeb8b3decf549fccd419cd600d21173961632229967608d7d1b194f39e + checksum: 10/60e7b3441687249460f34a817c7204967b07830a69b6e430e60a45615319c2ab4e2b2eaeb8b3decf549fccd419cd600d21173961632229967608d7d1b194f39e languageName: node linkType: hard @@ -5328,7 +5329,7 @@ __metadata: istanbul-lib-coverage: "npm:^3.0.0" make-dir: "npm:^4.0.0" supports-color: "npm:^7.1.0" - checksum: 86a83421ca1cf2109a9f6d193c06c31ef04a45e72a74579b11060b1e7bb9b6337a4e6f04abfb8857e2d569c271273c65e855ee429376a0d7c91ad91db42accd1 + checksum: 10/86a83421ca1cf2109a9f6d193c06c31ef04a45e72a74579b11060b1e7bb9b6337a4e6f04abfb8857e2d569c271273c65e855ee429376a0d7c91ad91db42accd1 languageName: node linkType: hard @@ -5339,7 +5340,7 @@ __metadata: debug: "npm:^4.1.1" istanbul-lib-coverage: "npm:^3.0.0" source-map: "npm:^0.6.1" - checksum: 5526983462799aced011d776af166e350191b816821ea7bcf71cab3e5272657b062c47dc30697a22a43656e3ced78893a42de677f9ccf276a28c913190953b82 + checksum: 10/5526983462799aced011d776af166e350191b816821ea7bcf71cab3e5272657b062c47dc30697a22a43656e3ced78893a42de677f9ccf276a28c913190953b82 languageName: node linkType: hard @@ -5349,7 +5350,7 @@ __metadata: dependencies: html-escaper: "npm:^2.0.0" istanbul-lib-report: "npm:^3.0.0" - checksum: 135c178e509b21af5c446a6951fc01c331331bb0fdb1ed1dd7f68a8c875603c2e2ee5c82801db5feb868e5cc35e9babe2d972d322afc50f6de6cce6431b9b2ff + checksum: 10/135c178e509b21af5c446a6951fc01c331331bb0fdb1ed1dd7f68a8c875603c2e2ee5c82801db5feb868e5cc35e9babe2d972d322afc50f6de6cce6431b9b2ff languageName: node linkType: hard @@ -5362,7 +5363,7 @@ __metadata: dependenciesMeta: "@pkgjs/parseargs": optional: true - checksum: 6e6490d676af8c94a7b5b29b8fd5629f21346911ebe2e32931c2a54210134408171c24cee1a109df2ec19894ad04a429402a8438cbf5cc2794585d35428ace76 + checksum: 10/6e6490d676af8c94a7b5b29b8fd5629f21346911ebe2e32931c2a54210134408171c24cee1a109df2ec19894ad04a429402a8438cbf5cc2794585d35428ace76 languageName: node linkType: hard @@ -5373,14 +5374,14 @@ __metadata: "@types/node": "npm:*" merge-stream: "npm:^2.0.0" supports-color: "npm:^8.0.0" - checksum: 06c6e2a84591d9ede704d5022fc13791e8876e83397c89d481b0063332abbb64c0f01ef4ca7de520b35c7a1058556078d6bdc3631376f4e9ffb42316c1a8488e + checksum: 10/06c6e2a84591d9ede704d5022fc13791e8876e83397c89d481b0063332abbb64c0f01ef4ca7de520b35c7a1058556078d6bdc3631376f4e9ffb42316c1a8488e languageName: node linkType: hard "jju@npm:^1.1.0, jju@npm:~1.4.0": version: 1.4.0 resolution: "jju@npm:1.4.0" - checksum: 1067ff8ce02221faac5a842116ed0ec79a53312a111d0bf8342a80bd02c0a3fdf0b8449694a65947db0a3e8420e8b326dffb489c7dd5866efc380c0d1708a707 + checksum: 10/1067ff8ce02221faac5a842116ed0ec79a53312a111d0bf8342a80bd02c0a3fdf0b8449694a65947db0a3e8420e8b326dffb489c7dd5866efc380c0d1708a707 languageName: node linkType: hard @@ -5393,14 +5394,14 @@ __metadata: "@sideway/address": "npm:^4.1.5" "@sideway/formula": "npm:^3.0.1" "@sideway/pinpoint": "npm:^2.0.0" - checksum: 6c48ed73e091d6328d9062aa9647b83e971004f2ab7a58a0e8bdee68cd4295e4141981a79461f85bd70333a77d6865fc2420bf9b392e2287384008f4f781ea71 + checksum: 10/6c48ed73e091d6328d9062aa9647b83e971004f2ab7a58a0e8bdee68cd4295e4141981a79461f85bd70333a77d6865fc2420bf9b392e2287384008f4f781ea71 languageName: node linkType: hard "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" - checksum: af37d0d913fb56aec6dc0074c163cc71cd23c0b8aad5c2350747b6721d37ba118af35abdd8b33c47ec2800de07dedb16a527ca9c530ee004093e04958bd0cbf2 + checksum: 10/af37d0d913fb56aec6dc0074c163cc71cd23c0b8aad5c2350747b6721d37ba118af35abdd8b33c47ec2800de07dedb16a527ca9c530ee004093e04958bd0cbf2 languageName: node linkType: hard @@ -5411,7 +5412,7 @@ __metadata: argparse: "npm:^2.0.1" bin: js-yaml: bin/js-yaml.js - checksum: c138a34a3fd0d08ebaf71273ad4465569a483b8a639e0b118ff65698d257c2791d3199e3f303631f2cb98213fa7b5f5d6a4621fd0fff819421b990d30d967140 + checksum: 10/c138a34a3fd0d08ebaf71273ad4465569a483b8a639e0b118ff65698d257c2791d3199e3f303631f2cb98213fa7b5f5d6a4621fd0fff819421b990d30d967140 languageName: node linkType: hard @@ -5423,14 +5424,14 @@ __metadata: esprima: "npm:^4.0.0" bin: js-yaml: bin/js-yaml.js - checksum: 9e22d80b4d0105b9899135365f746d47466ed53ef4223c529b3c0f7a39907743fdbd3c4379f94f1106f02755b5e90b2faaf84801a891135544e1ea475d1a1379 + checksum: 10/9e22d80b4d0105b9899135365f746d47466ed53ef4223c529b3c0f7a39907743fdbd3c4379f94f1106f02755b5e90b2faaf84801a891135544e1ea475d1a1379 languageName: node linkType: hard "jsbn@npm:1.1.0": version: 1.1.0 resolution: "jsbn@npm:1.1.0" - checksum: bebe7ae829bbd586ce8cbe83501dd8cb8c282c8902a8aeeed0a073a89dc37e8103b1244f3c6acd60278bcbfe12d93a3f83c9ac396868a3b3bbc3c5e5e3b648ef + checksum: 10/bebe7ae829bbd586ce8cbe83501dd8cb8c282c8902a8aeeed0a073a89dc37e8103b1244f3c6acd60278bcbfe12d93a3f83c9ac396868a3b3bbc3c5e5e3b648ef languageName: node linkType: hard @@ -5439,28 +5440,28 @@ __metadata: resolution: "jsesc@npm:2.5.2" bin: jsesc: bin/jsesc - checksum: d2096abdcdec56969764b40ffc91d4a23408aa2f351b4d1c13f736f25476643238c43fdbaf38a191c26b1b78fd856d965f5d4d0dde7b89459cd94025190cdf13 + checksum: 10/d2096abdcdec56969764b40ffc91d4a23408aa2f351b4d1c13f736f25476643238c43fdbaf38a191c26b1b78fd856d965f5d4d0dde7b89459cd94025190cdf13 languageName: node linkType: hard "json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" - checksum: 82876154521b7b68ba71c4f969b91572d1beabadd87bd3a6b236f85fbc7dc4695089191ed60bb59f9340993c51b33d479f45b6ba9f3548beb519705281c32c3c + checksum: 10/82876154521b7b68ba71c4f969b91572d1beabadd87bd3a6b236f85fbc7dc4695089191ed60bb59f9340993c51b33d479f45b6ba9f3548beb519705281c32c3c languageName: node linkType: hard "json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 5f3a99009ed5f2a5a67d06e2f298cc97bc86d462034173308156f15b43a6e850be8511dc204b9b94566305da2947f7d90289657237d210351a39059ff9d666cf + checksum: 10/5f3a99009ed5f2a5a67d06e2f298cc97bc86d462034173308156f15b43a6e850be8511dc204b9b94566305da2947f7d90289657237d210351a39059ff9d666cf languageName: node linkType: hard "json-parse-even-better-errors@npm:^3.0.0": version: 3.0.1 resolution: "json-parse-even-better-errors@npm:3.0.1" - checksum: bf74fa3f715e56699ccd68b80a7d20908de432a3fae2d5aa2ed530a148e9d9ccdf8e6983b93d9966a553aa70dcf003ce3a7ffec2c0ce74d2a6173e3691a426f0 + checksum: 10/bf74fa3f715e56699ccd68b80a7d20908de432a3fae2d5aa2ed530a148e9d9ccdf8e6983b93d9966a553aa70dcf003ce3a7ffec2c0ce74d2a6173e3691a426f0 languageName: node linkType: hard @@ -5469,28 +5470,28 @@ __metadata: resolution: "json-parse-helpfulerror@npm:1.0.3" dependencies: jju: "npm:^1.1.0" - checksum: 2094424fa55eccbec2d756eb58228e72c04f0609379e70f31aca287710f058827efab5109919c9416d032bd81ae919b18b126e75619ee97fc6f26d6ac00d296f + checksum: 10/2094424fa55eccbec2d756eb58228e72c04f0609379e70f31aca287710f058827efab5109919c9416d032bd81ae919b18b126e75619ee97fc6f26d6ac00d296f languageName: node linkType: hard "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" - checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + checksum: 10/7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b languageName: node linkType: hard "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: 12786c2e2f22c27439e6db0532ba321f1d0617c27ad8cb1c352a0e9249a50182fd1ba8b52a18899291604b0c32eafa8afd09e51203f19109a0537f68db2b652d + checksum: 10/12786c2e2f22c27439e6db0532ba321f1d0617c27ad8cb1c352a0e9249a50182fd1ba8b52a18899291604b0c32eafa8afd09e51203f19109a0537f68db2b652d languageName: node linkType: hard "json-stringify-safe@npm:^5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" - checksum: 59169a081e4eeb6f9559ae1f938f656191c000e0512aa6df9f3c8b2437a4ab1823819c6b9fd1818a4e39593ccfd72e9a051fdd3e2d1e340ed913679e888ded8c + checksum: 10/59169a081e4eeb6f9559ae1f938f656191c000e0512aa6df9f3c8b2437a4ab1823819c6b9fd1818a4e39593ccfd72e9a051fdd3e2d1e340ed913679e888ded8c languageName: node linkType: hard @@ -5499,14 +5500,14 @@ __metadata: resolution: "json5@npm:2.2.3" bin: json5: lib/cli.js - checksum: 1db67b853ff0de3534085d630691d3247de53a2ed1390ba0ddff681ea43e9b3e30ecbdb65c5e9aab49435e44059c23dbd6fee8ee619419ba37465bb0dd7135da + checksum: 10/1db67b853ff0de3534085d630691d3247de53a2ed1390ba0ddff681ea43e9b3e30ecbdb65c5e9aab49435e44059c23dbd6fee8ee619419ba37465bb0dd7135da languageName: node linkType: hard "jsonc-parser@npm:^3.2.0": version: 3.2.0 resolution: "jsonc-parser@npm:3.2.0" - checksum: bd68b902e5f9394f01da97921f49c5084b2dc03a0c5b4fdb2a429f8d6f292686c1bf87badaeb0a8148d024192a88f5ad2e57b2918ba43fe25cf15f3371db64d4 + checksum: 10/bd68b902e5f9394f01da97921f49c5084b2dc03a0c5b4fdb2a429f8d6f292686c1bf87badaeb0a8148d024192a88f5ad2e57b2918ba43fe25cf15f3371db64d4 languageName: node linkType: hard @@ -5519,21 +5520,21 @@ __metadata: dependenciesMeta: graceful-fs: optional: true - checksum: 03014769e7dc77d4cf05fa0b534907270b60890085dd5e4d60a382ff09328580651da0b8b4cdf44d91e4c8ae64d91791d965f05707beff000ed494a38b6fec85 + checksum: 10/03014769e7dc77d4cf05fa0b534907270b60890085dd5e4d60a382ff09328580651da0b8b4cdf44d91e4c8ae64d91791d965f05707beff000ed494a38b6fec85 languageName: node linkType: hard "jsonlines@npm:^0.1.1": version: 0.1.1 resolution: "jsonlines@npm:0.1.1" - checksum: ab4a41eca33e6e61fc9fb6ad472956b156eee37dee98baad266abfab85463e57cb2997a73dadac3e1ee1b208c8db076572cf08b86e0a69559249790ee47cab27 + checksum: 10/ab4a41eca33e6e61fc9fb6ad472956b156eee37dee98baad266abfab85463e57cb2997a73dadac3e1ee1b208c8db076572cf08b86e0a69559249790ee47cab27 languageName: node linkType: hard "jsonparse@npm:^1.3.1": version: 1.3.1 resolution: "jsonparse@npm:1.3.1" - checksum: 24531e956f0f19d79e22c157cebd81b37af3486ae22f9bc1028f8c2a4d1b70df48b168ff86f8568d9c2248182de9b6da9f50f685d5e4b9d1d2d339d2a29d15bc + checksum: 10/24531e956f0f19d79e22c157cebd81b37af3486ae22f9bc1028f8c2a4d1b70df48b168ff86f8568d9c2248182de9b6da9f50f685d5e4b9d1d2d339d2a29d15bc languageName: node linkType: hard @@ -5545,14 +5546,14 @@ __metadata: pako: "npm:~1.0.2" readable-stream: "npm:~2.3.6" setimmediate: "npm:^1.0.5" - checksum: bfbfbb9b0a27121330ac46ab9cdb3b4812433faa9ba4a54742c87ca441e31a6194ff70ae12acefa5fe25406c432290e68003900541d948a169b23d30c34dd984 + checksum: 10/bfbfbb9b0a27121330ac46ab9cdb3b4812433faa9ba4a54742c87ca441e31a6194ff70ae12acefa5fe25406c432290e68003900541d948a169b23d30c34dd984 languageName: node linkType: hard "just-extend@npm:^4.0.2": version: 4.2.1 resolution: "just-extend@npm:4.2.1" - checksum: 375389c0847d56300873fa622fbc5c5e208933e372bbedb39c82f583299cdad4fe9c4773bc35fcd9c42cd85744f07474ca4163aa0f9125dd5be37bc09075eb49 + checksum: 10/375389c0847d56300873fa622fbc5c5e208933e372bbedb39c82f583299cdad4fe9c4773bc35fcd9c42cd85744f07474ca4163aa0f9125dd5be37bc09075eb49 languageName: node linkType: hard @@ -5563,7 +5564,7 @@ __metadata: node-addon-api: "npm:^4.3.0" node-gyp: "npm:latest" prebuild-install: "npm:^7.0.1" - checksum: 904795bc304f8ad89b80f915c869a941a383312b58584212a199473d18647035cfda92a9c53e6c53bf13ea0fed23037c9597eb418a5c71ee9454f140f026fac9 + checksum: 10/904795bc304f8ad89b80f915c869a941a383312b58584212a199473d18647035cfda92a9c53e6c53bf13ea0fed23037c9597eb418a5c71ee9454f140f026fac9 languageName: node linkType: hard @@ -5572,21 +5573,21 @@ __metadata: resolution: "keyv@npm:4.5.4" dependencies: json-buffer: "npm:3.0.1" - checksum: 167eb6ef64cc84b6fa0780ee50c9de456b422a1e18802209234f7c2cf7eae648c7741f32e50d7e24ccb22b24c13154070b01563d642755b156c357431a191e75 + checksum: 10/167eb6ef64cc84b6fa0780ee50c9de456b422a1e18802209234f7c2cf7eae648c7741f32e50d7e24ccb22b24c13154070b01563d642755b156c357431a191e75 languageName: node linkType: hard "kind-of@npm:^6.0.2": version: 6.0.3 resolution: "kind-of@npm:6.0.3" - checksum: 5873d303fb36aad875b7538798867da2ae5c9e328d67194b0162a3659a627d22f742fc9c4ae95cd1704132a24b00cae5041fc00c0f6ef937dc17080dc4dbb962 + checksum: 10/5873d303fb36aad875b7538798867da2ae5c9e328d67194b0162a3659a627d22f742fc9c4ae95cd1704132a24b00cae5041fc00c0f6ef937dc17080dc4dbb962 languageName: node linkType: hard "kleur@npm:^4.0.1": version: 4.1.5 resolution: "kleur@npm:4.1.5" - checksum: 44d84cc4eedd4311099402ef6d4acd9b2d16e08e499d6ef3bb92389bd4692d7ef09e35248c26e27f98acac532122acb12a1bfee645994ae3af4f0a37996da7df + checksum: 10/44d84cc4eedd4311099402ef6d4acd9b2d16e08e499d6ef3bb92389bd4692d7ef09e35248c26e27f98acac532122acb12a1bfee645994ae3af4f0a37996da7df languageName: node linkType: hard @@ -5595,14 +5596,14 @@ __metadata: resolution: "latest-version@npm:7.0.0" dependencies: package-json: "npm:^8.1.0" - checksum: 1f0deba00d5a34394cce4463c938811f51bbb539b131674f4bb2062c63f2cc3b80bccd56ecade3bd5932d04a34cf0a5a8a2ccc4ec9e5e6b285a9a7b3e27d0d66 + checksum: 10/1f0deba00d5a34394cce4463c938811f51bbb539b131674f4bb2062c63f2cc3b80bccd56ecade3bd5932d04a34cf0a5a8a2ccc4ec9e5e6b285a9a7b3e27d0d66 languageName: node linkType: hard "lazy-ass@npm:1.6.0": version: 1.6.0 resolution: "lazy-ass@npm:1.6.0" - checksum: 3969ebef060b6f665fc78310ec769f7d2945db2d5af2b6663eda1bc9ec45c845deba9c4a3f75f124ce2c76fedf56514a063ee5c2affc8bc94963fbbddb442a88 + checksum: 10/3969ebef060b6f665fc78310ec769f7d2945db2d5af2b6663eda1bc9ec45c845deba9c4a3f75f124ce2c76fedf56514a063ee5c2affc8bc94963fbbddb442a88 languageName: node linkType: hard @@ -5611,14 +5612,14 @@ __metadata: resolution: "lcid@npm:3.1.1" dependencies: invert-kv: "npm:^3.0.0" - checksum: ac2fc533882a4a62ba2ccd522e1400618c8e2e417a488fcc31c5474bb8bd62a618216d3e39f6838d15ab0f6f4536b4f60435f491f1b93c9eef6d9d6506c5c9f1 + checksum: 10/ac2fc533882a4a62ba2ccd522e1400618c8e2e417a488fcc31c5474bb8bd62a618216d3e39f6838d15ab0f6f4536b4f60435f491f1b93c9eef6d9d6506c5c9f1 languageName: node linkType: hard "leven@npm:^3.1.0": version: 3.1.0 resolution: "leven@npm:3.1.0" - checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + checksum: 10/638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 languageName: node linkType: hard @@ -5628,7 +5629,7 @@ __metadata: dependencies: prelude-ls: "npm:^1.2.1" type-check: "npm:~0.4.0" - checksum: 2e4720ff79f21ae08d42374b0a5c2f664c5be8b6c8f565bb4e1315c96ed3a8acaa9de788ffed82d7f2378cf36958573de07ef92336cb5255ed74d08b8318c9ee + checksum: 10/2e4720ff79f21ae08d42374b0a5c2f664c5be8b6c8f565bb4e1315c96ed3a8acaa9de788ffed82d7f2378cf36958573de07ef92336cb5255ed74d08b8318c9ee languageName: node linkType: hard @@ -5637,14 +5638,14 @@ __metadata: resolution: "lie@npm:3.3.0" dependencies: immediate: "npm:~3.0.5" - checksum: f335ce67fe221af496185d7ce39c8321304adb701e122942c495f4f72dcee8803f9315ee572f5f8e8b08b9e8d7195da91b9fad776e8864746ba8b5e910adf76e + checksum: 10/f335ce67fe221af496185d7ce39c8321304adb701e122942c495f4f72dcee8803f9315ee572f5f8e8b08b9e8d7195da91b9fad776e8864746ba8b5e910adf76e languageName: node linkType: hard "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" - checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + checksum: 10/0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 languageName: node linkType: hard @@ -5653,21 +5654,14 @@ __metadata: resolution: "linkify-it@npm:3.0.3" dependencies: uc.micro: "npm:^1.0.1" - checksum: 1ed466b02ad361bb5e5b94a81232fc126890751038bf3e61f648f4ccb01e5e096bba66c3eff3d21ed5e3da738de0dc29783afedf0255733669889aa09d49e47e - languageName: node - linkType: hard - -"listenercount@npm:~1.0.1": - version: 1.0.1 - resolution: "listenercount@npm:1.0.1" - checksum: 208c6d2b57dc16c22cc71b58a7debb6f4612a79de211b76e251efee8eb03b9f6acd4651399016ef9c15ff6a3dedfd7acc96064acddce0dbe627e2d8478034d3d + checksum: 10/1ed466b02ad361bb5e5b94a81232fc126890751038bf3e61f648f4ccb01e5e096bba66c3eff3d21ed5e3da738de0dc29783afedf0255733669889aa09d49e47e languageName: node linkType: hard "loader-runner@npm:^4.2.0": version: 4.3.0 resolution: "loader-runner@npm:4.3.0" - checksum: 555ae002869c1e8942a0efd29a99b50a0ce6c3296efea95caf48f00d7f6f7f659203ed6613688b6181aa81dc76de3e65ece43094c6dffef3127fe1a84d973cd3 + checksum: 10/555ae002869c1e8942a0efd29a99b50a0ce6c3296efea95caf48f00d7f6f7f659203ed6613688b6181aa81dc76de3e65ece43094c6dffef3127fe1a84d973cd3 languageName: node linkType: hard @@ -5676,7 +5670,7 @@ __metadata: resolution: "locate-path@npm:5.0.0" dependencies: p-locate: "npm:^4.1.0" - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + checksum: 10/83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 languageName: node linkType: hard @@ -5685,70 +5679,70 @@ __metadata: resolution: "locate-path@npm:6.0.0" dependencies: p-locate: "npm:^5.0.0" - checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + checksum: 10/72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a languageName: node linkType: hard "lodash-es@npm:^4.17.21": version: 4.17.21 resolution: "lodash-es@npm:4.17.21" - checksum: 03f39878ea1e42b3199bd3f478150ab723f93cc8730ad86fec1f2804f4a07c6e30deaac73cad53a88e9c3db33348bb8ceeb274552390e7a75d7849021c02df43 + checksum: 10/03f39878ea1e42b3199bd3f478150ab723f93cc8730ad86fec1f2804f4a07c6e30deaac73cad53a88e9c3db33348bb8ceeb274552390e7a75d7849021c02df43 languageName: node linkType: hard "lodash.flattendeep@npm:^4.4.0": version: 4.4.0 resolution: "lodash.flattendeep@npm:4.4.0" - checksum: 0d0b41d8d86999e8bea94905ac65347404d427aacddbc6654dc2f85905e27cd2b708139671ecea135fa6f0a17ed94b9d4cab8ce12b08eddcbb1ddd83952ee4c2 + checksum: 10/0d0b41d8d86999e8bea94905ac65347404d427aacddbc6654dc2f85905e27cd2b708139671ecea135fa6f0a17ed94b9d4cab8ce12b08eddcbb1ddd83952ee4c2 languageName: node linkType: hard "lodash.get@npm:^4.4.2": version: 4.4.2 resolution: "lodash.get@npm:4.4.2" - checksum: 2a4925f6e89bc2c010a77a802d1ba357e17ed1ea03c2ddf6a146429f2856a216663e694a6aa3549a318cbbba3fd8b7decb392db457e6ac0b83dc745ed0a17380 + checksum: 10/2a4925f6e89bc2c010a77a802d1ba357e17ed1ea03c2ddf6a146429f2856a216663e694a6aa3549a318cbbba3fd8b7decb392db457e6ac0b83dc745ed0a17380 languageName: node linkType: hard "lodash.isempty@npm:^4.4.0": version: 4.4.0 resolution: "lodash.isempty@npm:4.4.0" - checksum: b69de4e08038f3d802fa2f510fd97f6b1785a359a648382ba30fb59e17ce0bcdad9bef2cdb9f9501abb9064c74c6edbb8db86a6d827e0d380a50a6738e051ec3 + checksum: 10/b69de4e08038f3d802fa2f510fd97f6b1785a359a648382ba30fb59e17ce0bcdad9bef2cdb9f9501abb9064c74c6edbb8db86a6d827e0d380a50a6738e051ec3 languageName: node linkType: hard "lodash.isfunction@npm:^3.0.9": version: 3.0.9 resolution: "lodash.isfunction@npm:3.0.9" - checksum: 99e54c34b1e8a9ba75c034deb39cedbd2aca7af685815e67a2a8ec4f73ec9748cda6ebee5a07d7de4b938e90d421fd280e9c385cc190f903ac217ac8aff30314 + checksum: 10/99e54c34b1e8a9ba75c034deb39cedbd2aca7af685815e67a2a8ec4f73ec9748cda6ebee5a07d7de4b938e90d421fd280e9c385cc190f903ac217ac8aff30314 languageName: node linkType: hard "lodash.isobject@npm:^3.0.2": version: 3.0.2 resolution: "lodash.isobject@npm:3.0.2" - checksum: 6c1667cbc4494d0a13a3617a4b23278d6d02dac520311f2bbb43f16f2cf71d2e6eb9dec8057315b77459df4890c756a256a087d3f4baa44a79ab5d6c968b060e + checksum: 10/6c1667cbc4494d0a13a3617a4b23278d6d02dac520311f2bbb43f16f2cf71d2e6eb9dec8057315b77459df4890c756a256a087d3f4baa44a79ab5d6c968b060e languageName: node linkType: hard "lodash.isstring@npm:^4.0.1": version: 4.0.1 resolution: "lodash.isstring@npm:4.0.1" - checksum: eaac87ae9636848af08021083d796e2eea3d02e80082ab8a9955309569cb3a463ce97fd281d7dc119e402b2e7d8c54a23914b15d2fc7fff56461511dc8937ba0 + checksum: 10/eaac87ae9636848af08021083d796e2eea3d02e80082ab8a9955309569cb3a463ce97fd281d7dc119e402b2e7d8c54a23914b15d2fc7fff56461511dc8937ba0 languageName: node linkType: hard "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" - checksum: d0ea2dd0097e6201be083865d50c3fb54fbfbdb247d9cc5950e086c991f448b7ab0cdab0d57eacccb43473d3f2acd21e134db39f22dac2d6c9ba6bf26978e3d6 + checksum: 10/d0ea2dd0097e6201be083865d50c3fb54fbfbdb247d9cc5950e086c991f448b7ab0cdab0d57eacccb43473d3f2acd21e134db39f22dac2d6c9ba6bf26978e3d6 languageName: node linkType: hard "lodash@npm:4.17.21, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" - checksum: c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 + checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 languageName: node linkType: hard @@ -5758,7 +5752,7 @@ __metadata: dependencies: chalk: "npm:^4.1.0" is-unicode-supported: "npm:^0.1.0" - checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 + checksum: 10/fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 languageName: node linkType: hard @@ -5769,7 +5763,7 @@ __metadata: js-tokens: "npm:^3.0.0 || ^4.0.0" bin: loose-envify: cli.js - checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + checksum: 10/6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 languageName: node linkType: hard @@ -5778,21 +5772,21 @@ __metadata: resolution: "loupe@npm:2.3.7" dependencies: get-func-name: "npm:^2.0.1" - checksum: 635c8f0914c2ce7ecfe4e239fbaf0ce1d2c00e4246fafcc4ed000bfdb1b8f89d05db1a220054175cca631ebf3894872a26fffba0124477fcb562f78762848fb1 + checksum: 10/635c8f0914c2ce7ecfe4e239fbaf0ce1d2c00e4246fafcc4ed000bfdb1b8f89d05db1a220054175cca631ebf3894872a26fffba0124477fcb562f78762848fb1 languageName: node linkType: hard "lowercase-keys@npm:^3.0.0": version: 3.0.0 resolution: "lowercase-keys@npm:3.0.0" - checksum: 67a3f81409af969bc0c4ca0e76cd7d16adb1e25aa1c197229587eaf8671275c8c067cd421795dbca4c81be0098e4c426a086a05e30de8a9c587b7a13c0c7ccc5 + checksum: 10/67a3f81409af969bc0c4ca0e76cd7d16adb1e25aa1c197229587eaf8671275c8c067cd421795dbca4c81be0098e4c426a086a05e30de8a9c587b7a13c0c7ccc5 languageName: node linkType: hard "lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": version: 10.1.0 resolution: "lru-cache@npm:10.1.0" - checksum: 207278d6fa711fb1f94a0835d4d4737441d2475302482a14785b10515e4c906a57ebf9f35bf060740c9560e91c7c1ad5a04fd7ed030972a9ba18bce2a228e95b + checksum: 10/207278d6fa711fb1f94a0835d4d4737441d2475302482a14785b10515e4c906a57ebf9f35bf060740c9560e91c7c1ad5a04fd7ed030972a9ba18bce2a228e95b languageName: node linkType: hard @@ -5802,7 +5796,7 @@ __metadata: dependencies: pseudomap: "npm:^1.0.2" yallist: "npm:^2.1.2" - checksum: 9ec7d73f11a32cba0e80b7a58fdf29970814c0c795acaee1a6451ddfd609bae6ef9df0837f5bbeabb571ecd49c1e2d79e10e9b4ed422cfba17a0cb6145b018a9 + checksum: 10/9ec7d73f11a32cba0e80b7a58fdf29970814c0c795acaee1a6451ddfd609bae6ef9df0837f5bbeabb571ecd49c1e2d79e10e9b4ed422cfba17a0cb6145b018a9 languageName: node linkType: hard @@ -5811,7 +5805,7 @@ __metadata: resolution: "lru-cache@npm:5.1.1" dependencies: yallist: "npm:^3.0.2" - checksum: 951d2673dcc64a7fb888bf3d13bc2fdf923faca97d89cdb405ba3dfff77e2b26e5798d405e78fcd7094c9e7b8b4dab2ddc5a4f8a11928af24a207b7c738ca3f8 + checksum: 10/951d2673dcc64a7fb888bf3d13bc2fdf923faca97d89cdb405ba3dfff77e2b26e5798d405e78fcd7094c9e7b8b4dab2ddc5a4f8a11928af24a207b7c738ca3f8 languageName: node linkType: hard @@ -5820,14 +5814,14 @@ __metadata: resolution: "lru-cache@npm:6.0.0" dependencies: yallist: "npm:^4.0.0" - checksum: fc1fe2ee205f7c8855fa0f34c1ab0bcf14b6229e35579ec1fd1079f31d6fc8ef8eb6fd17f2f4d99788d7e339f50e047555551ebd5e434dda503696e7c6591825 + checksum: 10/fc1fe2ee205f7c8855fa0f34c1ab0bcf14b6229e35579ec1fd1079f31d6fc8ef8eb6fd17f2f4d99788d7e339f50e047555551ebd5e434dda503696e7c6591825 languageName: node linkType: hard "lru-cache@npm:^7.4.4, lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" - checksum: 6029ca5aba3aacb554e919d7ef804fffd4adfc4c83db00fac8248c7c78811fb6d4b6f70f7fd9d55032b3823446546a007edaa66ad1f2377ae833bd983fac5d98 + checksum: 10/6029ca5aba3aacb554e919d7ef804fffd4adfc4c83db00fac8248c7c78811fb6d4b6f70f7fd9d55032b3823446546a007edaa66ad1f2377ae833bd983fac5d98 languageName: node linkType: hard @@ -5836,7 +5830,7 @@ __metadata: resolution: "magic-string@npm:0.30.5" dependencies: "@jridgewell/sourcemap-codec": "npm:^1.4.15" - checksum: c8a6b25f813215ca9db526f3a407d6dc0bf35429c2b8111d6f1c2cf6cf6afd5e2d9f9cd189416a0e3959e20ecd635f73639f9825c73de1074b29331fe36ace59 + checksum: 10/c8a6b25f813215ca9db526f3a407d6dc0bf35429c2b8111d6f1c2cf6cf6afd5e2d9f9cd189416a0e3959e20ecd635f73639f9825c73de1074b29331fe36ace59 languageName: node linkType: hard @@ -5845,7 +5839,7 @@ __metadata: resolution: "make-dir@npm:3.1.0" dependencies: semver: "npm:^6.0.0" - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 + checksum: 10/484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 languageName: node linkType: hard @@ -5854,14 +5848,14 @@ __metadata: resolution: "make-dir@npm:4.0.0" dependencies: semver: "npm:^7.5.3" - checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a + checksum: 10/bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a languageName: node linkType: hard "make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" - checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + checksum: 10/b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 languageName: node linkType: hard @@ -5885,7 +5879,7 @@ __metadata: promise-retry: "npm:^2.0.1" socks-proxy-agent: "npm:^7.0.0" ssri: "npm:^9.0.0" - checksum: fef5acb865a46f25ad0b5ad7d979799125db5dbb24ea811ffa850fbb804bc8e495df2237a8ec3a4fc6250e73c2f95549cca6d6d36a73b1faa61224504eb1188f + checksum: 10/fef5acb865a46f25ad0b5ad7d979799125db5dbb24ea811ffa850fbb804bc8e495df2237a8ec3a4fc6250e73c2f95549cca6d6d36a73b1faa61224504eb1188f languageName: node linkType: hard @@ -5908,7 +5902,7 @@ __metadata: promise-retry: "npm:^2.0.1" socks-proxy-agent: "npm:^7.0.0" ssri: "npm:^10.0.0" - checksum: b4b442cfaaec81db159f752a5f2e3ee3d7aa682782868fa399200824ec6298502e01bdc456e443dc219bcd5546c8e4471644d54109c8599841dc961d17a805fa + checksum: 10/b4b442cfaaec81db159f752a5f2e3ee3d7aa682782868fa399200824ec6298502e01bdc456e443dc219bcd5546c8e4471644d54109c8599841dc961d17a805fa languageName: node linkType: hard @@ -5927,7 +5921,7 @@ __metadata: negotiator: "npm:^0.6.3" promise-retry: "npm:^2.0.1" ssri: "npm:^10.0.0" - checksum: ded5a91a02b76381b06a4ec4d5c1d23ebbde15d402b3c3e4533b371dac7e2f7ca071ae71ae6dae72aa261182557b7b1b3fd3a705b39252dc17f74fa509d3e76f + checksum: 10/ded5a91a02b76381b06a4ec4d5c1d23ebbde15d402b3c3e4533b371dac7e2f7ca071ae71ae6dae72aa261182557b7b1b3fd3a705b39252dc17f74fa509d3e76f languageName: node linkType: hard @@ -5936,14 +5930,14 @@ __metadata: resolution: "map-age-cleaner@npm:0.1.3" dependencies: p-defer: "npm:^1.0.0" - checksum: cb2804a5bcb3cbdfe4b59066ea6d19f5e7c8c196cd55795ea4c28f792b192e4c442426ae52524e5e1acbccf393d3bddacefc3d41f803e66453f6c4eda3650bc1 + checksum: 10/cb2804a5bcb3cbdfe4b59066ea6d19f5e7c8c196cd55795ea4c28f792b192e4c442426ae52524e5e1acbccf393d3bddacefc3d41f803e66453f6c4eda3650bc1 languageName: node linkType: hard "map-stream@npm:~0.1.0": version: 0.1.0 resolution: "map-stream@npm:0.1.0" - checksum: f04a07041dccdf8140a4a6613e4731e917153ee031d3c837cb32ea7d609e8fbea538c44053718772f59dd1dca0ce68a5689ad006688612ee720d78bacf5bf24d + checksum: 10/f04a07041dccdf8140a4a6613e4731e917153ee031d3c837cb32ea7d609e8fbea538c44053718772f59dd1dca0ce68a5689ad006688612ee720d78bacf5bf24d languageName: node linkType: hard @@ -5958,21 +5952,21 @@ __metadata: uc.micro: "npm:^1.0.5" bin: markdown-it: bin/markdown-it.js - checksum: d83d794bfb9f5e05750b25db401d9c1f9b97c6bbabb6cfd78988bb98652c62c24417435487238e2b91fd4e495547ae8c9429fb4c69e9f5bf49bd0dd292d53f24 + checksum: 10/d83d794bfb9f5e05750b25db401d9c1f9b97c6bbabb6cfd78988bb98652c62c24417435487238e2b91fd4e495547ae8c9429fb4c69e9f5bf49bd0dd292d53f24 languageName: node linkType: hard "mdurl@npm:^1.0.1": version: 1.0.1 resolution: "mdurl@npm:1.0.1" - checksum: ada367d01c9e81d07328101f187d5bd8641b71f33eab075df4caed935a24fa679e625f07108801d8250a5e4a99e5cd4be7679957a11424a3aa3e740d2bb2d5cb + checksum: 10/ada367d01c9e81d07328101f187d5bd8641b71f33eab075df4caed935a24fa679e625f07108801d8250a5e4a99e5cd4be7679957a11424a3aa3e740d2bb2d5cb languageName: node linkType: hard "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" - checksum: 38e0984db39139604756903a01397e29e17dcb04207bb3e081412ce725ab17338ecc47220c1b186b6bbe79a658aad1b0d41142884f5a481f36290cdefbe6aa46 + checksum: 10/38e0984db39139604756903a01397e29e17dcb04207bb3e081412ce725ab17338ecc47220c1b186b6bbe79a658aad1b0d41142884f5a481f36290cdefbe6aa46 languageName: node linkType: hard @@ -5983,35 +5977,35 @@ __metadata: map-age-cleaner: "npm:^0.1.3" mimic-fn: "npm:^2.1.0" p-is-promise: "npm:^2.1.0" - checksum: 8dc22ded29d7c0a9aeb4ae2a69ad232d32b117a5a8842d7997b7a37aa943dc306326ea24616b42de3d819e9dad0dbba083aa25dd5fe55ca1dfa654d89e5a0969 + checksum: 10/8dc22ded29d7c0a9aeb4ae2a69ad232d32b117a5a8842d7997b7a37aa943dc306326ea24616b42de3d819e9dad0dbba083aa25dd5fe55ca1dfa654d89e5a0969 languageName: node linkType: hard "merge-descriptors@npm:1.0.1": version: 1.0.1 resolution: "merge-descriptors@npm:1.0.1" - checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 + checksum: 10/5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 languageName: node linkType: hard "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" - checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + checksum: 10/6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 languageName: node linkType: hard "merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" - checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + checksum: 10/7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 languageName: node linkType: hard "methods@npm:~1.1.2": version: 1.1.2 resolution: "methods@npm:1.1.2" - checksum: a385dd974faa34b5dd021b2bbf78c722881bf6f003bfe6d391d7da3ea1ed625d1ff10ddd13c57531f628b3e785be38d3eed10ad03cebd90b76932413df9a1820 + checksum: 10/a385dd974faa34b5dd021b2bbf78c722881bf6f003bfe6d391d7da3ea1ed625d1ff10ddd13c57531f628b3e785be38d3eed10ad03cebd90b76932413df9a1820 languageName: node linkType: hard @@ -6021,14 +6015,14 @@ __metadata: dependencies: braces: "npm:^3.0.2" picomatch: "npm:^2.3.1" - checksum: a749888789fc15cac0e03273844dbd749f9f8e8d64e70c564bcf06a033129554c789bb9e30d7566d7ff6596611a08e58ac12cf2a05f6e3c9c47c50c4c7e12fa2 + checksum: 10/a749888789fc15cac0e03273844dbd749f9f8e8d64e70c564bcf06a033129554c789bb9e30d7566d7ff6596611a08e58ac12cf2a05f6e3c9c47c50c4c7e12fa2 languageName: node linkType: hard "mime-db@npm:1.52.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" - checksum: 54bb60bf39e6f8689f6622784e668a3d7f8bed6b0d886f5c3c446cb3284be28b30bf707ed05d0fe44a036f8469976b2629bbea182684977b084de9da274694d7 + checksum: 10/54bb60bf39e6f8689f6622784e668a3d7f8bed6b0d886f5c3c446cb3284be28b30bf707ed05d0fe44a036f8469976b2629bbea182684977b084de9da274694d7 languageName: node linkType: hard @@ -6037,7 +6031,7 @@ __metadata: resolution: "mime-types@npm:2.1.35" dependencies: mime-db: "npm:1.52.0" - checksum: 89aa9651b67644035de2784a6e665fc685d79aba61857e02b9c8758da874a754aed4a9aced9265f5ed1171fd934331e5516b84a7f0218031b6fa0270eca1e51a + checksum: 10/89aa9651b67644035de2784a6e665fc685d79aba61857e02b9c8758da874a754aed4a9aced9265f5ed1171fd934331e5516b84a7f0218031b6fa0270eca1e51a languageName: node linkType: hard @@ -6046,35 +6040,35 @@ __metadata: resolution: "mime@npm:1.6.0" bin: mime: cli.js - checksum: b7d98bb1e006c0e63e2c91b590fe1163b872abf8f7ef224d53dd31499c2197278a6d3d0864c45239b1a93d22feaf6f9477e9fc847eef945838150b8c02d03170 + checksum: 10/b7d98bb1e006c0e63e2c91b590fe1163b872abf8f7ef224d53dd31499c2197278a6d3d0864c45239b1a93d22feaf6f9477e9fc847eef945838150b8c02d03170 languageName: node linkType: hard "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" - checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + checksum: 10/d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a languageName: node linkType: hard "mimic-fn@npm:^4.0.0": version: 4.0.0 resolution: "mimic-fn@npm:4.0.0" - checksum: 995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 + checksum: 10/995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 languageName: node linkType: hard "mimic-response@npm:^3.1.0": version: 3.1.0 resolution: "mimic-response@npm:3.1.0" - checksum: 7e719047612411fe071332a7498cf0448bbe43c485c0d780046c76633a771b223ff49bd00267be122cedebb897037fdb527df72335d0d0f74724604ca70b37ad + checksum: 10/7e719047612411fe071332a7498cf0448bbe43c485c0d780046c76633a771b223ff49bd00267be122cedebb897037fdb527df72335d0d0f74724604ca70b37ad languageName: node linkType: hard "mimic-response@npm:^4.0.0": version: 4.0.0 resolution: "mimic-response@npm:4.0.0" - checksum: 33b804cc961efe206efdb1fca6a22540decdcfce6c14eb5c0c50e5ae9022267ab22ce8f5568b1f7247ba67500fe20d523d81e0e9f009b321ccd9d472e78d1850 + checksum: 10/33b804cc961efe206efdb1fca6a22540decdcfce6c14eb5c0c50e5ae9022267ab22ce8f5568b1f7247ba67500fe20d523d81e0e9f009b321ccd9d472e78d1850 languageName: node linkType: hard @@ -6083,7 +6077,7 @@ __metadata: resolution: "minimatch@npm:5.0.1" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 2656580f18d9f38ada186196fcc72dc9076d70f7227adc664e72614d464e075dc4ae3936e6742519e09e336996ef33c6035e606888b12f65ca7fda792ddd2085 + checksum: 10/2656580f18d9f38ada186196fcc72dc9076d70f7227adc664e72614d464e075dc4ae3936e6742519e09e336996ef33c6035e606888b12f65ca7fda792ddd2085 languageName: node linkType: hard @@ -6092,7 +6086,7 @@ __metadata: resolution: "minimatch@npm:9.0.3" dependencies: brace-expansion: "npm:^2.0.1" - checksum: c81b47d28153e77521877649f4bab48348d10938df9e8147a58111fe00ef89559a2938de9f6632910c4f7bf7bb5cd81191a546167e58d357f0cfb1e18cecc1c5 + checksum: 10/c81b47d28153e77521877649f4bab48348d10938df9e8147a58111fe00ef89559a2938de9f6632910c4f7bf7bb5cd81191a546167e58d357f0cfb1e18cecc1c5 languageName: node linkType: hard @@ -6101,7 +6095,7 @@ __metadata: resolution: "minimatch@npm:3.1.2" dependencies: brace-expansion: "npm:^1.1.7" - checksum: e0b25b04cd4ec6732830344e5739b13f8690f8a012d73445a4a19fbc623f5dd481ef7a5827fde25954cd6026fede7574cc54dc4643c99d6c6b653d6203f94634 + checksum: 10/e0b25b04cd4ec6732830344e5739b13f8690f8a012d73445a4a19fbc623f5dd481ef7a5827fde25954cd6026fede7574cc54dc4643c99d6c6b653d6203f94634 languageName: node linkType: hard @@ -6110,7 +6104,7 @@ __metadata: resolution: "minimatch@npm:5.1.6" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 126b36485b821daf96d33b5c821dac600cc1ab36c87e7a532594f9b1652b1fa89a1eebcaad4dff17c764dce1a7ac1531327f190fed5f97d8f6e5f889c116c429 + checksum: 10/126b36485b821daf96d33b5c821dac600cc1ab36c87e7a532594f9b1652b1fa89a1eebcaad4dff17c764dce1a7ac1531327f190fed5f97d8f6e5f889c116c429 languageName: node linkType: hard @@ -6119,14 +6113,14 @@ __metadata: resolution: "minimatch@npm:7.4.6" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 0046ba1161ac6414bde1b07c440792ebcdb2ed93e6714c85c73974332b709b7e692801550bc9da22028a8613407b3f13861e17dd0dd44f4babdeacd44950430b + checksum: 10/0046ba1161ac6414bde1b07c440792ebcdb2ed93e6714c85c73974332b709b7e692801550bc9da22028a8613407b3f13861e17dd0dd44f4babdeacd44950430b languageName: node linkType: hard "minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" - checksum: 908491b6cc15a6c440ba5b22780a0ba89b9810e1aea684e253e43c4e3b8d56ec1dcdd7ea96dde119c29df59c936cde16062159eae4225c691e19c70b432b6e6f + checksum: 10/908491b6cc15a6c440ba5b22780a0ba89b9810e1aea684e253e43c4e3b8d56ec1dcdd7ea96dde119c29df59c936cde16062159eae4225c691e19c70b432b6e6f languageName: node linkType: hard @@ -6135,7 +6129,7 @@ __metadata: resolution: "minipass-collect@npm:1.0.2" dependencies: minipass: "npm:^3.0.0" - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + checksum: 10/14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 languageName: node linkType: hard @@ -6144,7 +6138,7 @@ __metadata: resolution: "minipass-collect@npm:2.0.1" dependencies: minipass: "npm:^7.0.3" - checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 + checksum: 10/b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 languageName: node linkType: hard @@ -6159,7 +6153,7 @@ __metadata: dependenciesMeta: encoding: optional: true - checksum: 8cfc589563ae2a11eebbf79121ef9a526fd078fca949ed3f1e4a51472ca4a4aad89fcea1738982ce9d7d833116ecc9c6ae9ebbd844832a94e3f4a3d4d1b9d3b9 + checksum: 10/8cfc589563ae2a11eebbf79121ef9a526fd078fca949ed3f1e4a51472ca4a4aad89fcea1738982ce9d7d833116ecc9c6ae9ebbd844832a94e3f4a3d4d1b9d3b9 languageName: node linkType: hard @@ -6174,7 +6168,7 @@ __metadata: dependenciesMeta: encoding: optional: true - checksum: 3edf72b900e30598567eafe96c30374432a8709e61bb06b87198fa3192d466777e2ec21c52985a0999044fa6567bd6f04651585983a1cbb27e2c1770a07ed2a2 + checksum: 10/3edf72b900e30598567eafe96c30374432a8709e61bb06b87198fa3192d466777e2ec21c52985a0999044fa6567bd6f04651585983a1cbb27e2c1770a07ed2a2 languageName: node linkType: hard @@ -6183,7 +6177,7 @@ __metadata: resolution: "minipass-flush@npm:1.0.5" dependencies: minipass: "npm:^3.0.0" - checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + checksum: 10/56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf languageName: node linkType: hard @@ -6193,7 +6187,7 @@ __metadata: dependencies: jsonparse: "npm:^1.3.1" minipass: "npm:^3.0.0" - checksum: 3c65482c630b063c3fa86c853f324a50d9484f2eb6c3034f9c86c0b22f44181668848088f2c869cc764f8a9b8adc8f617f93762cd9d11521f563b8a71c5b815d + checksum: 10/3c65482c630b063c3fa86c853f324a50d9484f2eb6c3034f9c86c0b22f44181668848088f2c869cc764f8a9b8adc8f617f93762cd9d11521f563b8a71c5b815d languageName: node linkType: hard @@ -6202,7 +6196,7 @@ __metadata: resolution: "minipass-pipeline@npm:1.2.4" dependencies: minipass: "npm:^3.0.0" - checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + checksum: 10/b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b languageName: node linkType: hard @@ -6211,7 +6205,7 @@ __metadata: resolution: "minipass-sized@npm:1.0.3" dependencies: minipass: "npm:^3.0.0" - checksum: 40982d8d836a52b0f37049a0a7e5d0f089637298e6d9b45df9c115d4f0520682a78258905e5c8b180fb41b593b0a82cc1361d2c74b45f7ada66334f84d1ecfdd + checksum: 10/40982d8d836a52b0f37049a0a7e5d0f089637298e6d9b45df9c115d4f0520682a78258905e5c8b180fb41b593b0a82cc1361d2c74b45f7ada66334f84d1ecfdd languageName: node linkType: hard @@ -6220,21 +6214,21 @@ __metadata: resolution: "minipass@npm:3.3.6" dependencies: yallist: "npm:^4.0.0" - checksum: a5c6ef069f70d9a524d3428af39f2b117ff8cd84172e19b754e7264a33df460873e6eb3d6e55758531580970de50ae950c496256bb4ad3691a2974cddff189f0 + checksum: 10/a5c6ef069f70d9a524d3428af39f2b117ff8cd84172e19b754e7264a33df460873e6eb3d6e55758531580970de50ae950c496256bb4ad3691a2974cddff189f0 languageName: node linkType: hard "minipass@npm:^5.0.0": version: 5.0.0 resolution: "minipass@npm:5.0.0" - checksum: 61682162d29f45d3152b78b08bab7fb32ca10899bc5991ffe98afc18c9e9543bd1e3be94f8b8373ba6262497db63607079dc242ea62e43e7b2270837b7347c93 + checksum: 10/61682162d29f45d3152b78b08bab7fb32ca10899bc5991ffe98afc18c9e9543bd1e3be94f8b8373ba6262497db63607079dc242ea62e43e7b2270837b7347c93 languageName: node linkType: hard "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": version: 7.0.4 resolution: "minipass@npm:7.0.4" - checksum: e864bd02ceb5e0707696d58f7ce3a0b89233f0d686ef0d447a66db705c0846a8dc6f34865cd85256c1472ff623665f616b90b8ff58058b2ad996c5de747d2d18 + checksum: 10/e864bd02ceb5e0707696d58f7ce3a0b89233f0d686ef0d447a66db705c0846a8dc6f34865cd85256c1472ff623665f616b90b8ff58058b2ad996c5de747d2d18 languageName: node linkType: hard @@ -6244,25 +6238,25 @@ __metadata: dependencies: minipass: "npm:^3.0.0" yallist: "npm:^4.0.0" - checksum: ae0f45436fb51344dcb87938446a32fbebb540d0e191d63b35e1c773d47512e17307bf54aa88326cc6d176594d00e4423563a091f7266c2f9a6872cdc1e234d1 + checksum: 10/ae0f45436fb51344dcb87938446a32fbebb540d0e191d63b35e1c773d47512e17307bf54aa88326cc6d176594d00e4423563a091f7266c2f9a6872cdc1e234d1 languageName: node linkType: hard "mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": version: 0.5.3 resolution: "mkdirp-classic@npm:0.5.3" - checksum: 3f4e088208270bbcc148d53b73e9a5bd9eef05ad2cbf3b3d0ff8795278d50dd1d11a8ef1875ff5aea3fa888931f95bfcb2ad5b7c1061cfefd6284d199e6776ac + checksum: 10/3f4e088208270bbcc148d53b73e9a5bd9eef05ad2cbf3b3d0ff8795278d50dd1d11a8ef1875ff5aea3fa888931f95bfcb2ad5b7c1061cfefd6284d199e6776ac languageName: node linkType: hard -"mkdirp@npm:>=0.5 0, mkdirp@npm:^0.5.1": +"mkdirp@npm:^0.5.1": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" dependencies: minimist: "npm:^1.2.6" bin: mkdirp: bin/cmd.js - checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + checksum: 10/0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 languageName: node linkType: hard @@ -6271,7 +6265,7 @@ __metadata: resolution: "mkdirp@npm:1.0.4" bin: mkdirp: bin/cmd.js - checksum: d71b8dcd4b5af2fe13ecf3bd24070263489404fe216488c5ba7e38ece1f54daf219e72a833a3a2dc404331e870e9f44963a33399589490956bff003a3404d3b2 + checksum: 10/d71b8dcd4b5af2fe13ecf3bd24070263489404fe216488c5ba7e38ece1f54daf219e72a833a3a2dc404331e870e9f44963a33399589490956bff003a3404d3b2 languageName: node linkType: hard @@ -6303,7 +6297,7 @@ __metadata: bin: _mocha: bin/_mocha mocha: bin/mocha.js - checksum: f7362898ae65e8fe716cfe62fd014b432d100c9611aaf5abe85ed14efcbfdd82f3bdf32c44bccf00c9059a264c7e8d93a69dd5b830652109052a92beffb7ea35 + checksum: 10/f7362898ae65e8fe716cfe62fd014b432d100c9611aaf5abe85ed14efcbfdd82f3bdf32c44bccf00c9059a264c7e8d93a69dd5b830652109052a92beffb7ea35 languageName: node linkType: hard @@ -6325,7 +6319,7 @@ __metadata: yargs: "npm:^17.2.1" bin: marge: bin/cli.js - checksum: 94ed8a862ff610172ad8429ee0cda2137e1f90580866cd911e9d4c80f87e24fcdba60d07c3bd8b4d27b9a71a10df58fd1cad40e8de022ccd6a3732cb318c3d2a + checksum: 10/94ed8a862ff610172ad8429ee0cda2137e1f90580866cd911e9d4c80f87e24fcdba60d07c3bd8b4d27b9a71a10df58fd1cad40e8de022ccd6a3732cb318c3d2a languageName: node linkType: hard @@ -6345,13 +6339,13 @@ __metadata: uuid: "npm:^8.3.2" peerDependencies: mocha: ">=7" - checksum: ff5298705e22ecc88ae5c70a86ecec9cda694c4b7f74c8676ae1cc53a81ceec849bce8182a10789f04ae8c17dbc3748b5d7554cfe3476d2fc9c9084e5a7e2aa1 + checksum: 10/ff5298705e22ecc88ae5c70a86ecec9cda694c4b7f74c8676ae1cc53a81ceec849bce8182a10789f04ae8c17dbc3748b5d7554cfe3476d2fc9c9084e5a7e2aa1 languageName: node linkType: hard -"monaco-page-objects@npm:^3.12.0": - version: 3.12.0 - resolution: "monaco-page-objects@npm:3.12.0" +"monaco-page-objects@npm:^3.13.1": + version: 3.13.1 + resolution: "monaco-page-objects@npm:3.13.1" dependencies: clipboardy: "npm:^4.0.0" clone-deep: "npm:^4.0.1" @@ -6361,28 +6355,28 @@ __metadata: peerDependencies: selenium-webdriver: ^4.6.1 typescript: ">=4.6.2" - checksum: 2eee0f3ab0227edb13c1ce6be2ae0e03771bcda05aa864ce29f0c4d4d46af7f3bff1863acac915d290691600bd8d027ca8b70f21765699be6df21e9538fe048e + checksum: 10/a12b6fcc846e0063a504f0e1327c98061c841cdaa4d94381fbf1a158c3760325faa4f6b1f7e9be4bfcb63dc50ebf34ecc1e02c41b2f26f7d105c053d1901df4a languageName: node linkType: hard "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" - checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + checksum: 10/0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 languageName: node linkType: hard "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" - checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + checksum: 10/673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f languageName: node linkType: hard "ms@npm:2.1.3, ms@npm:^2.0.0": version: 2.1.3 resolution: "ms@npm:2.1.3" - checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + checksum: 10/aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d languageName: node linkType: hard @@ -6395,14 +6389,14 @@ __metadata: array-union: "npm:^2.1.0" arrify: "npm:^2.0.1" minimatch: "npm:^3.0.4" - checksum: 82c8030a53af965cab48da22f1b0f894ef99e16ee680dabdfbd38d2dfacc3c8208c475203d747afd9e26db44118ed0221d5a0d65268c864f06d6efc7ac6df812 + checksum: 10/82c8030a53af965cab48da22f1b0f894ef99e16ee680dabdfbd38d2dfacc3c8208c475203d747afd9e26db44118ed0221d5a0d65268c864f06d6efc7ac6df812 languageName: node linkType: hard "mute-stream@npm:~0.0.4": version: 0.0.8 resolution: "mute-stream@npm:0.0.8" - checksum: a2d2e79dde87e3424ffc8c334472c7f3d17b072137734ca46e6f221131f1b014201cc593b69a38062e974fb2394d3d1cb4349f80f012bbf8b8ac1b28033e515f + checksum: 10/a2d2e79dde87e3424ffc8c334472c7f3d17b072137734ca46e6f221131f1b014201cc593b69a38062e974fb2394d3d1cb4349f80f012bbf8b8ac1b28033e515f languageName: node linkType: hard @@ -6411,7 +6405,7 @@ __metadata: resolution: "nanoid@npm:3.3.3" bin: nanoid: bin/nanoid.cjs - checksum: c703ed58a234b68245a8a4826dd25c1453a9017d34fa28bc58e7aa8247de87d854582fa2209d7aee04084cff9ce150be8fd30300abe567dc615d4e8e735f2d99 + checksum: 10/c703ed58a234b68245a8a4826dd25c1453a9017d34fa28bc58e7aa8247de87d854582fa2209d7aee04084cff9ce150be8fd30300abe567dc615d4e8e735f2d99 languageName: node linkType: hard @@ -6420,35 +6414,35 @@ __metadata: resolution: "nanoid@npm:3.3.7" bin: nanoid: bin/nanoid.cjs - checksum: ac1eb60f615b272bccb0e2b9cd933720dad30bf9708424f691b8113826bb91aca7e9d14ef5d9415a6ba15c266b37817256f58d8ce980c82b0ba3185352565679 + checksum: 10/ac1eb60f615b272bccb0e2b9cd933720dad30bf9708424f691b8113826bb91aca7e9d14ef5d9415a6ba15c266b37817256f58d8ce980c82b0ba3185352565679 languageName: node linkType: hard "napi-build-utils@npm:^1.0.1": version: 1.0.2 resolution: "napi-build-utils@npm:1.0.2" - checksum: 276feb8e30189fe18718e85b6f82e4f952822baa2e7696f771cc42571a235b789dc5907a14d9ffb6838c3e4ff4c25717c2575e5ce1cf6e02e496e204c11e57f6 + checksum: 10/276feb8e30189fe18718e85b6f82e4f952822baa2e7696f771cc42571a235b789dc5907a14d9ffb6838c3e4ff4c25717c2575e5ce1cf6e02e496e204c11e57f6 languageName: node linkType: hard "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" - checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + checksum: 10/23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d languageName: node linkType: hard "negotiator@npm:0.6.3, negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" - checksum: 2723fb822a17ad55c93a588a4bc44d53b22855bf4be5499916ca0cab1e7165409d0b288ba2577d7b029f10ce18cf2ed8e703e5af31c984e1e2304277ef979837 + checksum: 10/2723fb822a17ad55c93a588a4bc44d53b22855bf4be5499916ca0cab1e7165409d0b288ba2577d7b029f10ce18cf2ed8e703e5af31c984e1e2304277ef979837 languageName: node linkType: hard "neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" - checksum: 1a7948fea86f2b33ec766bc899c88796a51ba76a4afc9026764aedc6e7cde692a09067031e4a1bf6db4f978ccd99e7f5b6c03fe47ad9865c3d4f99050d67e002 + checksum: 10/1a7948fea86f2b33ec766bc899c88796a51ba76a4afc9026764aedc6e7cde692a09067031e4a1bf6db4f978ccd99e7f5b6c03fe47ad9865c3d4f99050d67e002 languageName: node linkType: hard @@ -6461,7 +6455,7 @@ __metadata: "@sinonjs/text-encoding": "npm:^0.7.1" just-extend: "npm:^4.0.2" path-to-regexp: "npm:^1.7.0" - checksum: c6afe82b919a2c1985916d5bb3a738a7b2cfb017a6ab9479ec1ede62343051b40da88a1321517bb5d912c13e08b8d9ce9cdef9583edeb44d640af7273c35ebf2 + checksum: 10/c6afe82b919a2c1985916d5bb3a738a7b2cfb017a6ab9479ec1ede62343051b40da88a1321517bb5d912c13e08b8d9ce9cdef9583edeb44d640af7273c35ebf2 languageName: node linkType: hard @@ -6472,7 +6466,7 @@ __metadata: commander: "npm:^2.11.0" bin: nmtree: ./bin/nmtree.js - checksum: 74913ce1e97ee405804b0e601cc51a54bbe86268740b0d55314e73350f45d9032b80ab9c2fd51adaf79f8b9c90d2621ba5d9b46c7f27489cbf16bee116e7e651 + checksum: 10/74913ce1e97ee405804b0e601cc51a54bbe86268740b0d55314e73350f45d9032b80ab9c2fd51adaf79f8b9c90d2621ba5d9b46c7f27489cbf16bee116e7e651 languageName: node linkType: hard @@ -6481,7 +6475,7 @@ __metadata: resolution: "node-abi@npm:3.54.0" dependencies: semver: "npm:^7.3.5" - checksum: b8cf226033172b68bb8dccf7d19bd654238189968e4af98952c8327155d11c1164fcc49f154b61f8fcdc4e07d4ba91cab5d8a3c6b9719bebe879e169bdce7b22 + checksum: 10/b8cf226033172b68bb8dccf7d19bd654238189968e4af98952c8327155d11c1164fcc49f154b61f8fcdc4e07d4ba91cab5d8a3c6b9719bebe879e169bdce7b22 languageName: node linkType: hard @@ -6490,7 +6484,7 @@ __metadata: resolution: "node-addon-api@npm:4.3.0" dependencies: node-gyp: "npm:latest" - checksum: d3b38d16cb9ad0714d965331d0e38cef1c27750c2c3343cd3464a9ed8158501a2910ccbf2fd9fdc476e806a19dbc9e0524ff9d66a7c779d42a9752a63ba30b80 + checksum: 10/d3b38d16cb9ad0714d965331d0e38cef1c27750c2c3343cd3464a9ed8158501a2910ccbf2fd9fdc476e806a19dbc9e0524ff9d66a7c779d42a9752a63ba30b80 languageName: node linkType: hard @@ -6504,7 +6498,7 @@ __metadata: peerDependenciesMeta: encoding: optional: true - checksum: b24f8a3dc937f388192e59bcf9d0857d7b6940a2496f328381641cb616efccc9866e89ec43f2ec956bbd6c3d3ee05524ce77fe7b29ccd34692b3a16f237d6676 + checksum: 10/b24f8a3dc937f388192e59bcf9d0857d7b6940a2496f328381641cb616efccc9866e89ec43f2ec956bbd6c3d3ee05524ce77fe7b29ccd34692b3a16f237d6676 languageName: node linkType: hard @@ -6525,7 +6519,7 @@ __metadata: which: "npm:^2.0.2" bin: node-gyp: bin/node-gyp.js - checksum: 329b109b138e48cb0416a6bca56e171b0e479d6360a548b80f06eced4bef3cf37652a3d20d171c20023fb18d996bd7446a49d4297ddb59fc48100178a92f432d + checksum: 10/329b109b138e48cb0416a6bca56e171b0e479d6360a548b80f06eced4bef3cf37652a3d20d171c20023fb18d996bd7446a49d4297ddb59fc48100178a92f432d languageName: node linkType: hard @@ -6545,7 +6539,7 @@ __metadata: which: "npm:^4.0.0" bin: node-gyp: bin/node-gyp.js - checksum: 578cf0c821f258ce4b6ebce4461eca4c991a4df2dee163c0624f2fe09c7d6d37240be4942285a0048d307230248ee0b18382d6623b9a0136ce9533486deddfa8 + checksum: 10/578cf0c821f258ce4b6ebce4461eca4c991a4df2dee163c0624f2fe09c7d6d37240be4942285a0048d307230248ee0b18382d6623b9a0136ce9533486deddfa8 languageName: node linkType: hard @@ -6554,14 +6548,14 @@ __metadata: resolution: "node-preload@npm:0.2.1" dependencies: process-on-spawn: "npm:^1.0.0" - checksum: de36ed365b7e474eaf05c41f976774dece23a7f398fe76dbf9705f9670a1f49e6a27c5f31fe58b4e43d96413fdce4806192c60d35317b25725636c90889d5bab + checksum: 10/de36ed365b7e474eaf05c41f976774dece23a7f398fe76dbf9705f9670a1f49e6a27c5f31fe58b4e43d96413fdce4806192c60d35317b25725636c90889d5bab languageName: node linkType: hard "node-releases@npm:^2.0.14": version: 2.0.14 resolution: "node-releases@npm:2.0.14" - checksum: 0f7607ec7db5ef1dc616899a5f24ae90c869b6a54c2d4f36ff6d84a282ab9343c7ff3ca3670fe4669171bb1e8a9b3e286e1ef1c131f09a83d70554f855d54f24 + checksum: 10/0f7607ec7db5ef1dc616899a5f24ae90c869b6a54c2d4f36ff6d84a282ab9343c7ff3ca3670fe4669171bb1e8a9b3e286e1ef1c131f09a83d70554f855d54f24 languageName: node linkType: hard @@ -6571,7 +6565,7 @@ __metadata: dependencies: inherits: "npm:^2.0.1" readable-stream: "npm:~1.0.31" - checksum: a05f056dabf764c86472b6b5aad10455f3adcb6971f366cdf36a72b559b29310a940e316bca30802f2804fdd41707941366224f4cba80c4f53071512245bf200 + checksum: 10/a05f056dabf764c86472b6b5aad10455f3adcb6971f366cdf36a72b559b29310a940e316bca30802f2804fdd41707941366224f4cba80c4f53071512245bf200 languageName: node linkType: hard @@ -6582,7 +6576,7 @@ __metadata: abbrev: "npm:^1.0.0" bin: nopt: bin/nopt.js - checksum: 3c1128e07cd0241ae66d6e6a472170baa9f3e84dd4203950ba8df5bafac4efa2166ce917a57ef02b01ba7c40d18b2cc64b29b225fd3640791fe07b24f0b33a32 + checksum: 10/3c1128e07cd0241ae66d6e6a472170baa9f3e84dd4203950ba8df5bafac4efa2166ce917a57ef02b01ba7c40d18b2cc64b29b225fd3640791fe07b24f0b33a32 languageName: node linkType: hard @@ -6593,7 +6587,7 @@ __metadata: abbrev: "npm:^2.0.0" bin: nopt: bin/nopt.js - checksum: 1e7489f17cbda452c8acaf596a8defb4ae477d2a9953b76eb96f4ec3f62c6b421cd5174eaa742f88279871fde9586d8a1d38fb3f53fa0c405585453be31dff4c + checksum: 10/1e7489f17cbda452c8acaf596a8defb4ae477d2a9953b76eb96f4ec3f62c6b421cd5174eaa742f88279871fde9586d8a1d38fb3f53fa0c405585453be31dff4c languageName: node linkType: hard @@ -6605,21 +6599,21 @@ __metadata: is-core-module: "npm:^2.8.1" semver: "npm:^7.3.5" validate-npm-package-license: "npm:^3.0.4" - checksum: 477344ee99c6c81afbc4359f9dc7a3a219cc29a37fe0220a4595bbdb7e1e5fa9e3c195e99900228b72d8676edf99eb99fd3b66aa94b4b8ab74d516f2ff60e510 + checksum: 10/477344ee99c6c81afbc4359f9dc7a3a219cc29a37fe0220a4595bbdb7e1e5fa9e3c195e99900228b72d8676edf99eb99fd3b66aa94b4b8ab74d516f2ff60e510 languageName: node linkType: hard "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" - checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + checksum: 10/88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 languageName: node linkType: hard "normalize-url@npm:^8.0.0": version: 8.0.0 resolution: "normalize-url@npm:8.0.0" - checksum: 4347d6ee39d9e1e7138c9e7c0b459c1e07304d9cd7c62d92c1ca01ed1f0c5397b292079fe7cfa953f469722ae150eec82e14b97e2175af39ede0b58f99ef8cac + checksum: 10/4347d6ee39d9e1e7138c9e7c0b459c1e07304d9cd7c62d92c1ca01ed1f0c5397b292079fe7cfa953f469722ae150eec82e14b97e2175af39ede0b58f99ef8cac languageName: node linkType: hard @@ -6628,7 +6622,7 @@ __metadata: resolution: "npm-bundled@npm:3.0.0" dependencies: npm-normalize-package-bin: "npm:^3.0.0" - checksum: 704fce20114d36d665c20edc56d3f9f7778c52ca1cd48731ec31f65af9e65805f9308ca7ed9e5a6bd9fe22327a63aa5d83a8c5aaee0c715e5047de1fa659e8bf + checksum: 10/704fce20114d36d665c20edc56d3f9f7778c52ca1cd48731ec31f65af9e65805f9308ca7ed9e5a6bd9fe22327a63aa5d83a8c5aaee0c715e5047de1fa659e8bf languageName: node linkType: hard @@ -6671,7 +6665,7 @@ __metadata: bin: ncu: build/src/bin/cli.js npm-check-updates: build/src/bin/cli.js - checksum: 4fc97d41c878fcc6b7ff89c0abcabeb172f7d624e288ab13480c08c08cc192cd00b99c2404067277ff7d71509eca8b6f25c4f43c132eabd710d9f7c21526099c + checksum: 10/4fc97d41c878fcc6b7ff89c0abcabeb172f7d624e288ab13480c08c08cc192cd00b99c2404067277ff7d71509eca8b6f25c4f43c132eabd710d9f7c21526099c languageName: node linkType: hard @@ -6680,14 +6674,14 @@ __metadata: resolution: "npm-install-checks@npm:6.3.0" dependencies: semver: "npm:^7.1.1" - checksum: 6c20dadb878a0d2f1f777405217b6b63af1299d0b43e556af9363ee6eefaa98a17dfb7b612a473a473e96faf7e789c58b221e0d8ffdc1d34903c4f71618df3b4 + checksum: 10/6c20dadb878a0d2f1f777405217b6b63af1299d0b43e556af9363ee6eefaa98a17dfb7b612a473a473e96faf7e789c58b221e0d8ffdc1d34903c4f71618df3b4 languageName: node linkType: hard "npm-normalize-package-bin@npm:^3.0.0": version: 3.0.1 resolution: "npm-normalize-package-bin@npm:3.0.1" - checksum: de416d720ab22137a36292ff8a333af499ea0933ef2320a8c6f56a73b0f0448227fec4db5c890d702e26d21d04f271415eab6580b5546456861cc0c19498a4bf + checksum: 10/de416d720ab22137a36292ff8a333af499ea0933ef2320a8c6f56a73b0f0448227fec4db5c890d702e26d21d04f271415eab6580b5546456861cc0c19498a4bf languageName: node linkType: hard @@ -6699,7 +6693,7 @@ __metadata: proc-log: "npm:^3.0.0" semver: "npm:^7.3.5" validate-npm-package-name: "npm:^5.0.0" - checksum: 3bbb5f081099f73e852b4d3a3a10f78d495bdf21e050ca5c78dc134921c99ec856d1555ff6ba9c1c15b7475ad976ce803ef53fdda34abec622fe8f5d76421319 + checksum: 10/3bbb5f081099f73e852b4d3a3a10f78d495bdf21e050ca5c78dc134921c99ec856d1555ff6ba9c1c15b7475ad976ce803ef53fdda34abec622fe8f5d76421319 languageName: node linkType: hard @@ -6708,7 +6702,7 @@ __metadata: resolution: "npm-packlist@npm:7.0.4" dependencies: ignore-walk: "npm:^6.0.0" - checksum: b24644eefa21d33c55a8f49c64eda4b06edfb7d25853be8ded7346e73c6c447be8a0482314b74f04f94e3f5712e467505dc030826ba55a71d1b948459fad6486 + checksum: 10/b24644eefa21d33c55a8f49c64eda4b06edfb7d25853be8ded7346e73c6c447be8a0482314b74f04f94e3f5712e467505dc030826ba55a71d1b948459fad6486 languageName: node linkType: hard @@ -6720,7 +6714,7 @@ __metadata: npm-normalize-package-bin: "npm:^3.0.0" npm-package-arg: "npm:^10.0.0" semver: "npm:^7.3.5" - checksum: 3f10a34e12cbb576edb694562a32730c6c0244b2929b91202d1be62ece76bc8b282dc7e9535d313d598963f8e3d06d19973611418a191fe3102be149a8fa0910 + checksum: 10/3f10a34e12cbb576edb694562a32730c6c0244b2929b91202d1be62ece76bc8b282dc7e9535d313d598963f8e3d06d19973611418a191fe3102be149a8fa0910 languageName: node linkType: hard @@ -6735,7 +6729,7 @@ __metadata: minizlib: "npm:^2.1.2" npm-package-arg: "npm:^10.0.0" proc-log: "npm:^3.0.0" - checksum: 63026b22d6a6afe5cb3a02dca96db783b88d3acc68be94f3485f25a5e4932800fdeff08145a77b35b8f61987033346462d4b3e710c0729a9735357ff97596062 + checksum: 10/63026b22d6a6afe5cb3a02dca96db783b88d3acc68be94f3485f25a5e4932800fdeff08145a77b35b8f61987033346462d4b3e710c0729a9735357ff97596062 languageName: node linkType: hard @@ -6744,7 +6738,7 @@ __metadata: resolution: "npm-run-path@npm:4.0.1" dependencies: path-key: "npm:^3.0.0" - checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + checksum: 10/5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 languageName: node linkType: hard @@ -6753,7 +6747,7 @@ __metadata: resolution: "npm-run-path@npm:5.2.0" dependencies: path-key: "npm:^4.0.0" - checksum: c5325e016014e715689c4014f7e0be16cc4cbf529f32a1723e511bc4689b5f823b704d2bca61ac152ce2bda65e0205dc8b3ba0ec0f5e4c3e162d302f6f5b9efb + checksum: 10/c5325e016014e715689c4014f7e0be16cc4cbf529f32a1723e511bc4689b5f823b704d2bca61ac152ce2bda65e0205dc8b3ba0ec0f5e4c3e162d302f6f5b9efb languageName: node linkType: hard @@ -6765,7 +6759,7 @@ __metadata: console-control-strings: "npm:^1.1.0" gauge: "npm:^4.0.3" set-blocking: "npm:^2.0.0" - checksum: 82b123677e62deb9e7472e27b92386c09e6e254ee6c8bcd720b3011013e4168bc7088e984f4fbd53cb6e12f8b4690e23e4fa6132689313e0d0dc4feea45489bb + checksum: 10/82b123677e62deb9e7472e27b92386c09e6e254ee6c8bcd720b3011013e4168bc7088e984f4fbd53cb6e12f8b4690e23e4fa6132689313e0d0dc4feea45489bb languageName: node linkType: hard @@ -6774,7 +6768,7 @@ __metadata: resolution: "nth-check@npm:2.1.1" dependencies: boolbase: "npm:^1.0.0" - checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 + checksum: 10/5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 languageName: node linkType: hard @@ -6811,28 +6805,28 @@ __metadata: yargs: "npm:^15.0.2" bin: nyc: bin/nyc.js - checksum: c987f04f4192dfd94e9e69869c76a54220b3ed555016751f380a413a378cceff8ec346df579e9126035b6acbc60ab893cc65e67729cc427c0171361bcb481e66 + checksum: 10/c987f04f4192dfd94e9e69869c76a54220b3ed555016751f380a413a378cceff8ec346df579e9126035b6acbc60ab893cc65e67729cc427c0171361bcb481e66 languageName: node linkType: hard "object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" - checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + checksum: 10/fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f languageName: node linkType: hard "object-hash@npm:^3.0.0": version: 3.0.0 resolution: "object-hash@npm:3.0.0" - checksum: f498d456a20512ba7be500cef4cf7b3c183cc72c65372a549c9a0e6dd78ce26f375e9b1315c07592d3fde8f10d5019986eba35970570d477ed9a2a702514432a + checksum: 10/f498d456a20512ba7be500cef4cf7b3c183cc72c65372a549c9a0e6dd78ce26f375e9b1315c07592d3fde8f10d5019986eba35970570d477ed9a2a702514432a languageName: node linkType: hard "object-inspect@npm:^1.9.0": version: 1.13.1 resolution: "object-inspect@npm:1.13.1" - checksum: 92f4989ed83422d56431bc39656d4c780348eb15d397ce352ade6b7fec08f973b53744bd41b94af021901e61acaf78fcc19e65bf464ecc0df958586a672700f0 + checksum: 10/92f4989ed83422d56431bc39656d4c780348eb15d397ce352ade6b7fec08f973b53744bd41b94af021901e61acaf78fcc19e65bf464ecc0df958586a672700f0 languageName: node linkType: hard @@ -6841,7 +6835,7 @@ __metadata: resolution: "on-finished@npm:2.4.1" dependencies: ee-first: "npm:1.1.1" - checksum: 8e81472c5028125c8c39044ac4ab8ba51a7cdc19a9fbd4710f5d524a74c6d8c9ded4dd0eed83f28d3d33ac1d7a6a439ba948ccb765ac6ce87f30450a26bfe2ea + checksum: 10/8e81472c5028125c8c39044ac4ab8ba51a7cdc19a9fbd4710f5d524a74c6d8c9ded4dd0eed83f28d3d33ac1d7a6a439ba948ccb765ac6ce87f30450a26bfe2ea languageName: node linkType: hard @@ -6850,7 +6844,7 @@ __metadata: resolution: "once@npm:1.4.0" dependencies: wrappy: "npm:1" - checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + checksum: 10/cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 languageName: node linkType: hard @@ -6859,7 +6853,7 @@ __metadata: resolution: "onetime@npm:5.1.2" dependencies: mimic-fn: "npm:^2.1.0" - checksum: e9fd0695a01cf226652f0385bf16b7a24153dbbb2039f764c8ba6d2306a8506b0e4ce570de6ad99c7a6eb49520743afdb66edd95ee979c1a342554ed49a9aadd + checksum: 10/e9fd0695a01cf226652f0385bf16b7a24153dbbb2039f764c8ba6d2306a8506b0e4ce570de6ad99c7a6eb49520743afdb66edd95ee979c1a342554ed49a9aadd languageName: node linkType: hard @@ -6868,7 +6862,7 @@ __metadata: resolution: "onetime@npm:6.0.0" dependencies: mimic-fn: "npm:^4.0.0" - checksum: 0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 + checksum: 10/0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 languageName: node linkType: hard @@ -6877,7 +6871,7 @@ __metadata: resolution: "opener@npm:1.5.2" bin: opener: bin/opener-bin.js - checksum: 0504efcd6546e14c016a261f58a68acf9f2e5c23d84865d7d5470d5169788327ceaa5386253682f533b3fba4821748aa37ecb395f3dae7acb3261b9b22e36814 + checksum: 10/0504efcd6546e14c016a261f58a68acf9f2e5c23d84865d7d5470d5169788327ceaa5386253682f533b3fba4821748aa37ecb395f3dae7acb3261b9b22e36814 languageName: node linkType: hard @@ -6891,7 +6885,7 @@ __metadata: levn: "npm:^0.4.1" prelude-ls: "npm:^1.2.1" type-check: "npm:^0.4.0" - checksum: fa28d3016395974f7fc087d6bbf0ac7f58ac3489f4f202a377e9c194969f329a7b88c75f8152b33fb08794a30dcd5c079db6bb465c28151357f113d80bbf67da + checksum: 10/fa28d3016395974f7fc087d6bbf0ac7f58ac3489f4f202a377e9c194969f329a7b88c75f8152b33fb08794a30dcd5c079db6bb465c28151357f113d80bbf67da languageName: node linkType: hard @@ -6902,7 +6896,7 @@ __metadata: execa: "npm:^4.0.0" lcid: "npm:^3.0.0" mem: "npm:^5.0.0" - checksum: 3bdf5776675755a755aa4edc5ad3465dea4262abd4c63fcc9839440e3f868f5d04ef14d49d79a9d428eb7577fb2428d3d796c8a885c5e3390c756bf281f1707a + checksum: 10/3bdf5776675755a755aa4edc5ad3465dea4262abd4c63fcc9839440e3f868f5d04ef14d49d79a9d428eb7577fb2428d3d796c8a885c5e3390c756bf281f1707a languageName: node linkType: hard @@ -6919,28 +6913,28 @@ __metadata: tmp: "npm:^0.2.1" bin: ovsx: lib/ovsx - checksum: 5557fd2b60b35b7255f71dcd05b03cf05b083ec042fdd9e59b56ad724ecaadaec22900c7fd4121cf825f35313d7f252f189be26f011b760db5fa9cbcab66c656 + checksum: 10/5557fd2b60b35b7255f71dcd05b03cf05b083ec042fdd9e59b56ad724ecaadaec22900c7fd4121cf825f35313d7f252f189be26f011b760db5fa9cbcab66c656 languageName: node linkType: hard "p-cancelable@npm:^3.0.0": version: 3.0.0 resolution: "p-cancelable@npm:3.0.0" - checksum: a5eab7cf5ac5de83222a014eccdbfde65ecfb22005ee9bc242041f0b4441e07fac7629432c82f48868aa0f8413fe0df6c6067c16f76bf9217cd8dc651923c93d + checksum: 10/a5eab7cf5ac5de83222a014eccdbfde65ecfb22005ee9bc242041f0b4441e07fac7629432c82f48868aa0f8413fe0df6c6067c16f76bf9217cd8dc651923c93d languageName: node linkType: hard "p-defer@npm:^1.0.0": version: 1.0.0 resolution: "p-defer@npm:1.0.0" - checksum: 1d8fb7138a0ccebb65479160fd93f245303c06c977c976105d75838f7f504a9a6ef11b7e058f98b4c957a6a8df268c616da1ee339285d565f9e5ba00304e027b + checksum: 10/1d8fb7138a0ccebb65479160fd93f245303c06c977c976105d75838f7f504a9a6ef11b7e058f98b4c957a6a8df268c616da1ee339285d565f9e5ba00304e027b languageName: node linkType: hard "p-is-promise@npm:^2.1.0": version: 2.1.0 resolution: "p-is-promise@npm:2.1.0" - checksum: c9a8248c8b5e306475a5d55ce7808dbce4d4da2e3d69526e4991a391a7809bfd6cfdadd9bf04f1c96a3db366c93d9a0f5ee81d949e7b1684c4e0f61f747199ef + checksum: 10/c9a8248c8b5e306475a5d55ce7808dbce4d4da2e3d69526e4991a391a7809bfd6cfdadd9bf04f1c96a3db366c93d9a0f5ee81d949e7b1684c4e0f61f747199ef languageName: node linkType: hard @@ -6949,7 +6943,7 @@ __metadata: resolution: "p-limit@npm:2.3.0" dependencies: p-try: "npm:^2.0.0" - checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + checksum: 10/84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 languageName: node linkType: hard @@ -6958,7 +6952,7 @@ __metadata: resolution: "p-limit@npm:3.1.0" dependencies: yocto-queue: "npm:^0.1.0" - checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + checksum: 10/7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 languageName: node linkType: hard @@ -6967,7 +6961,7 @@ __metadata: resolution: "p-locate@npm:4.1.0" dependencies: p-limit: "npm:^2.2.0" - checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + checksum: 10/513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 languageName: node linkType: hard @@ -6976,7 +6970,7 @@ __metadata: resolution: "p-locate@npm:5.0.0" dependencies: p-limit: "npm:^3.0.2" - checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + checksum: 10/1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 languageName: node linkType: hard @@ -6985,7 +6979,7 @@ __metadata: resolution: "p-map@npm:3.0.0" dependencies: aggregate-error: "npm:^3.0.0" - checksum: d4a0664d2af05d7e5f6f342e6493d4cad48f7398ac803c5066afb1f8d2010bfc2a83d935689437288f7b1a743772085b8fa0909a8282b5df4210bcda496c37c8 + checksum: 10/d4a0664d2af05d7e5f6f342e6493d4cad48f7398ac803c5066afb1f8d2010bfc2a83d935689437288f7b1a743772085b8fa0909a8282b5df4210bcda496c37c8 languageName: node linkType: hard @@ -6994,14 +6988,14 @@ __metadata: resolution: "p-map@npm:4.0.0" dependencies: aggregate-error: "npm:^3.0.0" - checksum: 7ba4a2b1e24c05e1fc14bbaea0fc6d85cf005ae7e9c9425d4575550f37e2e584b1af97bcde78eacd7559208f20995988d52881334db16cf77bc1bcf68e48ed7c + checksum: 10/7ba4a2b1e24c05e1fc14bbaea0fc6d85cf005ae7e9c9425d4575550f37e2e584b1af97bcde78eacd7559208f20995988d52881334db16cf77bc1bcf68e48ed7c languageName: node linkType: hard "p-try@npm:^2.0.0": version: 2.2.0 resolution: "p-try@npm:2.2.0" - checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + checksum: 10/f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae languageName: node linkType: hard @@ -7013,7 +7007,7 @@ __metadata: hasha: "npm:^5.0.0" lodash.flattendeep: "npm:^4.4.0" release-zalgo: "npm:^1.0.0" - checksum: c7209d98ac31926e0c1753d014f8b6b924e1e6a1aacf833dc99edece9c8381424c41c97c26c7eee82026944a79e99023cde5998bf515d7465c87005d52152040 + checksum: 10/c7209d98ac31926e0c1753d014f8b6b924e1e6a1aacf833dc99edece9c8381424c41c97c26c7eee82026944a79e99023cde5998bf515d7465c87005d52152040 languageName: node linkType: hard @@ -7025,7 +7019,7 @@ __metadata: registry-auth-token: "npm:^5.0.1" registry-url: "npm:^6.0.0" semver: "npm:^7.3.7" - checksum: d97ce9539e1ed4aacaf7c2cb754f16afc10937fa250bd09b4d61181d2e36a30cf8a4cff2f8f831f0826b0ac01a355f26204c7e57ca0e450da6ccec3e34fc889a + checksum: 10/d97ce9539e1ed4aacaf7c2cb754f16afc10937fa250bd09b4d61181d2e36a30cf8a4cff2f8f831f0826b0ac01a355f26204c7e57ca0e450da6ccec3e34fc889a languageName: node linkType: hard @@ -7053,14 +7047,14 @@ __metadata: tar: "npm:^6.1.11" bin: pacote: lib/bin.js - checksum: 57e18f4f963abb5f67f794158a55c01ad23f76e56dcdc74e6b843dfdda017515b0e8c0f56e60e842cd5af5ab9b351afdc49fc70633994f0e5fc0c6c9f4bcaebc + checksum: 10/57e18f4f963abb5f67f794158a55c01ad23f76e56dcdc74e6b843dfdda017515b0e8c0f56e60e842cd5af5ab9b351afdc49fc70633994f0e5fc0c6c9f4bcaebc languageName: node linkType: hard "pako@npm:~1.0.2": version: 1.0.11 resolution: "pako@npm:1.0.11" - checksum: 1ad07210e894472685564c4d39a08717e84c2a68a70d3c1d9e657d32394ef1670e22972a433cbfe48976cb98b154ba06855dcd3fcfba77f60f1777634bec48c0 + checksum: 10/1ad07210e894472685564c4d39a08717e84c2a68a70d3c1d9e657d32394ef1670e22972a433cbfe48976cb98b154ba06855dcd3fcfba77f60f1777634bec48c0 languageName: node linkType: hard @@ -7069,7 +7063,7 @@ __metadata: resolution: "parent-module@npm:1.0.1" dependencies: callsites: "npm:^3.0.0" - checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + checksum: 10/6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff languageName: node linkType: hard @@ -7078,7 +7072,7 @@ __metadata: resolution: "parse-github-url@npm:1.0.2" bin: parse-github-url: ./cli.js - checksum: cb645408cb193f60c9b3be329fb253208aca51709173f2e4f78ba5f4b913d30a9bfa1d910d9544e97ead7e63117b52859ca6ea87f1c505a791647e03366bb0d6 + checksum: 10/cb645408cb193f60c9b3be329fb253208aca51709173f2e4f78ba5f4b913d30a9bfa1d910d9544e97ead7e63117b52859ca6ea87f1c505a791647e03366bb0d6 languageName: node linkType: hard @@ -7090,14 +7084,14 @@ __metadata: error-ex: "npm:^1.3.1" json-parse-even-better-errors: "npm:^2.3.0" lines-and-columns: "npm:^1.1.6" - checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + checksum: 10/62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 languageName: node linkType: hard "parse-passwd@npm:^1.0.0": version: 1.0.0 resolution: "parse-passwd@npm:1.0.0" - checksum: 4e55e0231d58f828a41d0f1da2bf2ff7bcef8f4cb6146e69d16ce499190de58b06199e6bd9b17fbf0d4d8aef9052099cdf8c4f13a6294b1a522e8e958073066e + checksum: 10/4e55e0231d58f828a41d0f1da2bf2ff7bcef8f4cb6146e69d16ce499190de58b06199e6bd9b17fbf0d4d8aef9052099cdf8c4f13a6294b1a522e8e958073066e languageName: node linkType: hard @@ -7106,7 +7100,7 @@ __metadata: resolution: "parse-semver@npm:1.1.1" dependencies: semver: "npm:^5.1.0" - checksum: 15ae06553a4ef745adfead1714b8e3253aa98cbff3212551917ff4e646a2e031f4cd11bf1bd7ba2e7a7fb4f5b4816d9dddb4d783ae487b9fb4a767b6af6b2f78 + checksum: 10/15ae06553a4ef745adfead1714b8e3253aa98cbff3212551917ff4e646a2e031f4cd11bf1bd7ba2e7a7fb4f5b4816d9dddb4d783ae487b9fb4a767b6af6b2f78 languageName: node linkType: hard @@ -7116,7 +7110,7 @@ __metadata: dependencies: domhandler: "npm:^5.0.2" parse5: "npm:^7.0.0" - checksum: 23dbe45fdd338fe726cf5c55b236e1f403aeb0c1b926e18ab8ef0aa580980a25f8492d160fe2ed0ec906c3c8e38b51e68ef5620a3b9460d9458ea78946a3f7c0 + checksum: 10/23dbe45fdd338fe726cf5c55b236e1f403aeb0c1b926e18ab8ef0aa580980a25f8492d160fe2ed0ec906c3c8e38b51e68ef5620a3b9460d9458ea78946a3f7c0 languageName: node linkType: hard @@ -7125,49 +7119,49 @@ __metadata: resolution: "parse5@npm:7.1.2" dependencies: entities: "npm:^4.4.0" - checksum: 3c86806bb0fb1e9a999ff3a4c883b1ca243d99f45a619a0898dbf021a95a0189ed955c31b07fe49d342b54e814f33f2c9d7489198e8630dacd5477d413ec5782 + checksum: 10/3c86806bb0fb1e9a999ff3a4c883b1ca243d99f45a619a0898dbf021a95a0189ed955c31b07fe49d342b54e814f33f2c9d7489198e8630dacd5477d413ec5782 languageName: node linkType: hard "parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" - checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 + checksum: 10/407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 languageName: node linkType: hard "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" - checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + checksum: 10/505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 languageName: node linkType: hard "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" - checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + checksum: 10/060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 languageName: node linkType: hard "path-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" - checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + checksum: 10/55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 languageName: node linkType: hard "path-key@npm:^4.0.0": version: 4.0.0 resolution: "path-key@npm:4.0.0" - checksum: 8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 + checksum: 10/8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 languageName: node linkType: hard "path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" - checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + checksum: 10/49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a languageName: node linkType: hard @@ -7177,14 +7171,14 @@ __metadata: dependencies: lru-cache: "npm:^9.1.1 || ^10.0.0" minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: eebfb8304fef1d4f7e1486df987e4fd77413de4fce16508dea69fcf8eb318c09a6b15a7a2f4c22877cec1cb7ecbd3071d18ca9de79eeece0df874a00f1f0bdc8 + checksum: 10/eebfb8304fef1d4f7e1486df987e4fd77413de4fce16508dea69fcf8eb318c09a6b15a7a2f4c22877cec1cb7ecbd3071d18ca9de79eeece0df874a00f1f0bdc8 languageName: node linkType: hard "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" - checksum: 701c99e1f08e3400bea4d701cf6f03517474bb1b608da71c78b1eb261415b645c5670dfae49808c89e12cea2dccd113b069f040a80de012da0400191c6dbd1c8 + checksum: 10/701c99e1f08e3400bea4d701cf6f03517474bb1b608da71c78b1eb261415b645c5670dfae49808c89e12cea2dccd113b069f040a80de012da0400191c6dbd1c8 languageName: node linkType: hard @@ -7193,21 +7187,21 @@ __metadata: resolution: "path-to-regexp@npm:1.8.0" dependencies: isarray: "npm:0.0.1" - checksum: 45a01690f72919163cf89714e31a285937b14ad54c53734c826363fcf7beba9d9d0f2de802b4986b1264374562d6a3398a2e5289753a764e3a256494f1e52add + checksum: 10/45a01690f72919163cf89714e31a285937b14ad54c53734c826363fcf7beba9d9d0f2de802b4986b1264374562d6a3398a2e5289753a764e3a256494f1e52add languageName: node linkType: hard "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" - checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + checksum: 10/5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 languageName: node linkType: hard "pathval@npm:^1.1.1": version: 1.1.1 resolution: "pathval@npm:1.1.1" - checksum: b50a4751068aa3a5428f5a0b480deecedc6f537666a3630a0c2ae2d5e7c0f4bf0ee77b48404441ec1220bef0c91625e6030b3d3cf5a32ab0d9764018d1d9dbb6 + checksum: 10/b50a4751068aa3a5428f5a0b480deecedc6f537666a3630a0c2ae2d5e7c0f4bf0ee77b48404441ec1220bef0c91625e6030b3d3cf5a32ab0d9764018d1d9dbb6 languageName: node linkType: hard @@ -7216,28 +7210,28 @@ __metadata: resolution: "pause-stream@npm:0.0.11" dependencies: through: "npm:~2.3" - checksum: 1407efadfe814b5c487e4b28d6139cb7e03ee5d25fbb5f89a68f2053e81f05ce6b2bec196eeb3d46ef2c856f785016d14816b0d0e3c3abd1b64311c5c20660dc + checksum: 10/1407efadfe814b5c487e4b28d6139cb7e03ee5d25fbb5f89a68f2053e81f05ce6b2bec196eeb3d46ef2c856f785016d14816b0d0e3c3abd1b64311c5c20660dc languageName: node linkType: hard "pend@npm:~1.2.0": version: 1.2.0 resolution: "pend@npm:1.2.0" - checksum: 6c72f5243303d9c60bd98e6446ba7d30ae29e3d56fdb6fae8767e8ba6386f33ee284c97efe3230a0d0217e2b1723b8ab490b1bbf34fcbb2180dbc8a9de47850d + checksum: 10/6c72f5243303d9c60bd98e6446ba7d30ae29e3d56fdb6fae8767e8ba6386f33ee284c97efe3230a0d0217e2b1723b8ab490b1bbf34fcbb2180dbc8a9de47850d languageName: node linkType: hard "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" - checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + checksum: 10/a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 languageName: node linkType: hard "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" - checksum: 60c2595003b05e4535394d1da94850f5372c9427ca4413b71210f437f7b2ca091dbd611c45e8b37d10036fa8eade25c1b8951654f9d3973bfa66a2ff4d3b08bc + checksum: 10/60c2595003b05e4535394d1da94850f5372c9427ca4413b71210f437f7b2ca091dbd611c45e8b37d10036fa8eade25c1b8951654f9d3973bfa66a2ff4d3b08bc languageName: node linkType: hard @@ -7246,7 +7240,7 @@ __metadata: resolution: "pkg-dir@npm:4.2.0" dependencies: find-up: "npm:^4.0.0" - checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + checksum: 10/9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 languageName: node linkType: hard @@ -7255,7 +7249,7 @@ __metadata: resolution: "please-upgrade-node@npm:3.2.0" dependencies: semver-compare: "npm:^1.0.0" - checksum: d87c41581a2a022fbe25965a97006238cd9b8cbbf49b39f78d262548149a9d30bd2bdf35fec3d810e0001e630cd46ef13c7e19c389dea8de7e64db271a2381bb + checksum: 10/d87c41581a2a022fbe25965a97006238cd9b8cbbf49b39f78d262548149a9d30bd2bdf35fec3d810e0001e630cd46ef13c7e19c389dea8de7e64db271a2381bb languageName: node linkType: hard @@ -7266,7 +7260,7 @@ __metadata: nanoid: "npm:^3.3.7" picocolors: "npm:^1.0.0" source-map-js: "npm:^1.0.2" - checksum: e22a4594c255f26117f38419fb494d7ecab0f596cd409f7aadc8a6173abf180ed7ea970cd13fd366ab12b5840be901d2a09b25197700c2ebcb5a8077326bf519 + checksum: 10/e22a4594c255f26117f38419fb494d7ecab0f596cd409f7aadc8a6173abf180ed7ea970cd13fd366ab12b5840be901d2a09b25197700c2ebcb5a8077326bf519 languageName: node linkType: hard @@ -7288,14 +7282,14 @@ __metadata: tunnel-agent: "npm:^0.6.0" bin: prebuild-install: bin.js - checksum: 6c70a2f82fbda8903497c560a761b000d861a3e772322c8bed012be0f0a084b5aaca4438a3fad1bd3a24210765f4fae06ddd89ea04dc4c034dde693cc0d9d5f4 + checksum: 10/6c70a2f82fbda8903497c560a761b000d861a3e772322c8bed012be0f0a084b5aaca4438a3fad1bd3a24210765f4fae06ddd89ea04dc4c034dde693cc0d9d5f4 languageName: node linkType: hard "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" - checksum: 0b9d2c76801ca652a7f64892dd37b7e3fab149a37d2424920099bf894acccc62abb4424af2155ab36dea8744843060a2d8ddc983518d0b1e22265a22324b72ed + checksum: 10/0b9d2c76801ca652a7f64892dd37b7e3fab149a37d2424920099bf894acccc62abb4424af2155ab36dea8744843060a2d8ddc983518d0b1e22265a22324b72ed languageName: node linkType: hard @@ -7304,7 +7298,7 @@ __metadata: resolution: "prettier-linter-helpers@npm:1.0.0" dependencies: fast-diff: "npm:^1.1.2" - checksum: 00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 + checksum: 10/00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 languageName: node linkType: hard @@ -7313,21 +7307,21 @@ __metadata: resolution: "prettier@npm:3.2.4" bin: prettier: bin/prettier.cjs - checksum: e2b735d0552501b3a7ac8bd3ba3b6de2920bb35bd4cd02d08cb9057ebe3e96d83b9a7e4b903d987b7530a50223b12c74d107c154337236ae2c68156ba1e65cd2 + checksum: 10/e2b735d0552501b3a7ac8bd3ba3b6de2920bb35bd4cd02d08cb9057ebe3e96d83b9a7e4b903d987b7530a50223b12c74d107c154337236ae2c68156ba1e65cd2 languageName: node linkType: hard "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" - checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 + checksum: 10/02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 languageName: node linkType: hard "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" - checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + checksum: 10/1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf languageName: node linkType: hard @@ -7336,21 +7330,21 @@ __metadata: resolution: "process-on-spawn@npm:1.0.0" dependencies: fromentries: "npm:^1.2.0" - checksum: 8795d71742798e5a059e13da2a9c13988aa7c673a3a57f276c1ff6ed942ba9b7636139121c6a409eaa2ea6a8fda7af4be19c3dc576320515bb3f354e3544106e + checksum: 10/8795d71742798e5a059e13da2a9c13988aa7c673a3a57f276c1ff6ed942ba9b7636139121c6a409eaa2ea6a8fda7af4be19c3dc576320515bb3f354e3544106e languageName: node linkType: hard "progress@npm:^2.0.3": version: 2.0.3 resolution: "progress@npm:2.0.3" - checksum: e6f0bcb71f716eee9dfac0fe8a2606e3704d6a64dd93baaf49fbadbc8499989a610fe14cf1bc6f61b6d6653c49408d94f4a94e124538084efd8e4cf525e0293d + checksum: 10/e6f0bcb71f716eee9dfac0fe8a2606e3704d6a64dd93baaf49fbadbc8499989a610fe14cf1bc6f61b6d6653c49408d94f4a94e124538084efd8e4cf525e0293d languageName: node linkType: hard "promise-inflight@npm:^1.0.1": version: 1.0.1 resolution: "promise-inflight@npm:1.0.1" - checksum: 1560d413ea20c5a74f3631d39ba8cbd1972b9228072a755d01e1f5ca5110382d9af76a1582d889445adc6e75bb5ac4886b56dc4b6eae51b30145d7bb1ac7505b + checksum: 10/1560d413ea20c5a74f3631d39ba8cbd1972b9228072a755d01e1f5ca5110382d9af76a1582d889445adc6e75bb5ac4886b56dc4b6eae51b30145d7bb1ac7505b languageName: node linkType: hard @@ -7360,7 +7354,7 @@ __metadata: dependencies: err-code: "npm:^2.0.2" retry: "npm:^0.12.0" - checksum: 96e1a82453c6c96eef53a37a1d6134c9f2482f94068f98a59145d0986ca4e497bf110a410adf73857e588165eab3899f0ebcf7b3890c1b3ce802abc0d65967d4 + checksum: 10/96e1a82453c6c96eef53a37a1d6134c9f2482f94068f98a59145d0986ca4e497bf110a410adf73857e588165eab3899f0ebcf7b3890c1b3ce802abc0d65967d4 languageName: node linkType: hard @@ -7370,7 +7364,7 @@ __metadata: dependencies: kleur: "npm:^4.0.1" sisteransi: "npm:^1.0.5" - checksum: f2a3bcb494daab7d35808b5f9fbeb5af1c50fbcd58ebd3f64cf2d08e4e88396886266886240c86fea67d0467527511cd0db671ef43c60ddecae76d0e9a49d939 + checksum: 10/f2a3bcb494daab7d35808b5f9fbeb5af1c50fbcd58ebd3f64cf2d08e4e88396886266886240c86fea67d0467527511cd0db671ef43c60ddecae76d0e9a49d939 languageName: node linkType: hard @@ -7381,14 +7375,14 @@ __metadata: loose-envify: "npm:^1.4.0" object-assign: "npm:^4.1.1" react-is: "npm:^16.13.1" - checksum: 7d959caec002bc964c86cdc461ec93108b27337dabe6192fb97d69e16a0c799a03462713868b40749bfc1caf5f57ef80ac3e4ffad3effa636ee667582a75e2c0 + checksum: 10/7d959caec002bc964c86cdc461ec93108b27337dabe6192fb97d69e16a0c799a03462713868b40749bfc1caf5f57ef80ac3e4ffad3effa636ee667582a75e2c0 languageName: node linkType: hard "proto-list@npm:~1.2.1": version: 1.2.4 resolution: "proto-list@npm:1.2.4" - checksum: 9cc3b46d613fa0d637033b225db1bc98e914c3c05864f7adc9bee728192e353125ef2e49f71129a413f6333951756000b0e54f299d921f02d3e9e370cc994100 + checksum: 10/9cc3b46d613fa0d637033b225db1bc98e914c3c05864f7adc9bee728192e353125ef2e49f71129a413f6333951756000b0e54f299d921f02d3e9e370cc994100 languageName: node linkType: hard @@ -7398,14 +7392,14 @@ __metadata: dependencies: forwarded: "npm:0.2.0" ipaddr.js: "npm:1.9.1" - checksum: f24a0c80af0e75d31e3451398670d73406ec642914da11a2965b80b1898ca6f66a0e3e091a11a4327079b2b268795f6fa06691923fef91887215c3d0e8ea3f68 + checksum: 10/f24a0c80af0e75d31e3451398670d73406ec642914da11a2965b80b1898ca6f66a0e3e091a11a4327079b2b268795f6fa06691923fef91887215c3d0e8ea3f68 languageName: node linkType: hard "proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" - checksum: f0bb4a87cfd18f77bc2fba23ae49c3b378fb35143af16cc478171c623eebe181678f09439707ad80081d340d1593cd54a33a0113f3ccb3f4bc9451488780ee23 + checksum: 10/f0bb4a87cfd18f77bc2fba23ae49c3b378fb35143af16cc478171c623eebe181678f09439707ad80081d340d1593cd54a33a0113f3ccb3f4bc9451488780ee23 languageName: node linkType: hard @@ -7416,14 +7410,14 @@ __metadata: event-stream: "npm:=3.3.4" bin: ps-tree: ./bin/ps-tree.js - checksum: 0587defdc20c0768fad884623c0204c77e5228878a5cb043676b00529220ec12d9cb6a328a0580767a9909a317bff466fe4530a4676e3d145a9deb3b7fbbeef3 + checksum: 10/0587defdc20c0768fad884623c0204c77e5228878a5cb043676b00529220ec12d9cb6a328a0580767a9909a317bff466fe4530a4676e3d145a9deb3b7fbbeef3 languageName: node linkType: hard "pseudomap@npm:^1.0.2": version: 1.0.2 resolution: "pseudomap@npm:1.0.2" - checksum: 856c0aae0ff2ad60881168334448e898ad7a0e45fe7386d114b150084254c01e200c957cf378378025df4e052c7890c5bd933939b0e0d2ecfcc1dc2f0b2991f5 + checksum: 10/856c0aae0ff2ad60881168334448e898ad7a0e45fe7386d114b150084254c01e200c957cf378378025df4e052c7890c5bd933939b0e0d2ecfcc1dc2f0b2991f5 languageName: node linkType: hard @@ -7433,7 +7427,7 @@ __metadata: dependencies: end-of-stream: "npm:^1.1.0" once: "npm:^1.3.1" - checksum: 61fe58694f9900020a5cf5bc765d74396891c201afecf06659df2f5874fd832be4e19e2f95cc72d8b9eb98ace0a4db3cebf7343f9fc893a930577be29e3ad8b5 + checksum: 10/61fe58694f9900020a5cf5bc765d74396891c201afecf06659df2f5874fd832be4e19e2f95cc72d8b9eb98ace0a4db3cebf7343f9fc893a930577be29e3ad8b5 languageName: node linkType: hard @@ -7443,14 +7437,14 @@ __metadata: dependencies: end-of-stream: "npm:^1.1.0" once: "npm:^1.3.1" - checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 + checksum: 10/e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 languageName: node linkType: hard "punycode@npm:^2.1.0": version: 2.3.1 resolution: "punycode@npm:2.3.1" - checksum: febdc4362bead22f9e2608ff0171713230b57aff9dddc1c273aa2a651fbd366f94b7d6a71d78342a7c0819906750351ca7f2edd26ea41b626d87d6a13d1bd059 + checksum: 10/febdc4362bead22f9e2608ff0171713230b57aff9dddc1c273aa2a651fbd366f94b7d6a71d78342a7c0819906750351ca7f2edd26ea41b626d87d6a13d1bd059 languageName: node linkType: hard @@ -7459,7 +7453,7 @@ __metadata: resolution: "pupa@npm:3.1.0" dependencies: escape-goat: "npm:^4.0.0" - checksum: 32784254b76e455e92169ab88339cf3df8b5d63e52b7e6d0568f065e53946659d4c30e4b75de435c37033b7902bd1c785f142be4afb8aa984a86cf2d7e9a8421 + checksum: 10/32784254b76e455e92169ab88339cf3df8b5d63e52b7e6d0568f065e53946659d4c30e4b75de435c37033b7902bd1c785f142be4afb8aa984a86cf2d7e9a8421 languageName: node linkType: hard @@ -7468,7 +7462,7 @@ __metadata: resolution: "qs@npm:6.11.0" dependencies: side-channel: "npm:^1.0.4" - checksum: 5a3bfea3e2f359ede1bfa5d2f0dbe54001aa55e40e27dc3e60fab814362d83a9b30758db057c2011b6f53a2d4e4e5150194b5bac45372652aecb3e3c0d4b256e + checksum: 10/5a3bfea3e2f359ede1bfa5d2f0dbe54001aa55e40e27dc3e60fab814362d83a9b30758db057c2011b6f53a2d4e4e5150194b5bac45372652aecb3e3c0d4b256e languageName: node linkType: hard @@ -7477,21 +7471,21 @@ __metadata: resolution: "qs@npm:6.11.2" dependencies: side-channel: "npm:^1.0.4" - checksum: f2321d0796664d0f94e92447ccd3bdfd6b6f3a50b6b762aa79d7f5b1ea3a7a9f94063ba896b82bc2a877ed6a7426d4081e4f16568fdb04f0ee188cca9d8505b4 + checksum: 10/f2321d0796664d0f94e92447ccd3bdfd6b6f3a50b6b762aa79d7f5b1ea3a7a9f94063ba896b82bc2a877ed6a7426d4081e4f16568fdb04f0ee188cca9d8505b4 languageName: node linkType: hard "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" - checksum: 72900df0616e473e824202113c3df6abae59150dfb73ed13273503127235320e9c8ca4aaaaccfd58cf417c6ca92a6e68ee9a5c3182886ae949a768639b388a7b + checksum: 10/72900df0616e473e824202113c3df6abae59150dfb73ed13273503127235320e9c8ca4aaaaccfd58cf417c6ca92a6e68ee9a5c3182886ae949a768639b388a7b languageName: node linkType: hard "quick-lru@npm:^5.1.1": version: 5.1.1 resolution: "quick-lru@npm:5.1.1" - checksum: a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed + checksum: 10/a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed languageName: node linkType: hard @@ -7500,14 +7494,14 @@ __metadata: resolution: "randombytes@npm:2.1.0" dependencies: safe-buffer: "npm:^5.1.0" - checksum: 4efd1ad3d88db77c2d16588dc54c2b52fd2461e70fe5724611f38d283857094fe09040fa2c9776366803c3152cf133171b452ef717592b65631ce5dc3a2bdafc + checksum: 10/4efd1ad3d88db77c2d16588dc54c2b52fd2461e70fe5724611f38d283857094fe09040fa2c9776366803c3152cf133171b452ef717592b65631ce5dc3a2bdafc languageName: node linkType: hard "range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" - checksum: ce21ef2a2dd40506893157970dc76e835c78cf56437e26e19189c48d5291e7279314477b06ac38abd6a401b661a6840f7b03bd0b1249da9b691deeaa15872c26 + checksum: 10/ce21ef2a2dd40506893157970dc76e835c78cf56437e26e19189c48d5291e7279314477b06ac38abd6a401b661a6840f7b03bd0b1249da9b691deeaa15872c26 languageName: node linkType: hard @@ -7519,7 +7513,7 @@ __metadata: http-errors: "npm:2.0.0" iconv-lite: "npm:0.4.24" unpipe: "npm:1.0.0" - checksum: 280bedc12db3490ecd06f740bdcf66093a07535374b51331242382c0e130bb273ebb611b7bc4cba1b4b4e016cc7b1f4b05a6df885a6af39c2bc3b94c02291c84 + checksum: 10/280bedc12db3490ecd06f740bdcf66093a07535374b51331242382c0e130bb273ebb611b7bc4cba1b4b4e016cc7b1f4b05a6df885a6af39c2bc3b94c02291c84 languageName: node linkType: hard @@ -7531,7 +7525,7 @@ __metadata: js-yaml: "npm:^4.1.0" json5: "npm:^2.2.2" require-from-string: "npm:^2.0.2" - checksum: 7aa12d17120fef0d8c29b1de532a6fab2704c460fa0f2e13ceaa9317e6fbb767799abc6bc53da0bd65249b252edec47e45eafba4687b10ed4f1e8697991ceeb5 + checksum: 10/7aa12d17120fef0d8c29b1de532a6fab2704c460fa0f2e13ceaa9317e6fbb767799abc6bc53da0bd65249b252edec47e45eafba4687b10ed4f1e8697991ceeb5 languageName: node linkType: hard @@ -7545,14 +7539,14 @@ __metadata: strip-json-comments: "npm:~2.0.1" bin: rc: ./cli.js - checksum: 5c4d72ae7eec44357171585938c85ce066da8ca79146b5635baf3d55d74584c92575fa4e2c9eac03efbed3b46a0b2e7c30634c012b4b4fa40d654353d3c163eb + checksum: 10/5c4d72ae7eec44357171585938c85ce066da8ca79146b5635baf3d55d74584c92575fa4e2c9eac03efbed3b46a0b2e7c30634c012b4b4fa40d654353d3c163eb languageName: node linkType: hard "react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" - checksum: 5aa564a1cde7d391ac980bedee21202fc90bdea3b399952117f54fb71a932af1e5902020144fb354b4690b2414a0c7aafe798eb617b76a3d441d956db7726fdf + checksum: 10/5aa564a1cde7d391ac980bedee21202fc90bdea3b399952117f54fb71a932af1e5902020144fb354b4690b2414a0c7aafe798eb617b76a3d441d956db7726fdf languageName: node linkType: hard @@ -7561,7 +7555,7 @@ __metadata: resolution: "react@npm:18.2.0" dependencies: loose-envify: "npm:^1.1.0" - checksum: b9214a9bd79e99d08de55f8bef2b7fc8c39630be97c4e29d7be173d14a9a10670b5325e94485f74cd8bff4966ef3c78ee53c79a7b0b9b70cba20aa8973acc694 + checksum: 10/b9214a9bd79e99d08de55f8bef2b7fc8c39630be97c4e29d7be173d14a9a10670b5325e94485f74cd8bff4966ef3c78ee53c79a7b0b9b70cba20aa8973acc694 languageName: node linkType: hard @@ -7571,7 +7565,7 @@ __metadata: dependencies: json-parse-even-better-errors: "npm:^3.0.0" npm-normalize-package-bin: "npm:^3.0.0" - checksum: 8d406869f045f1d76e2a99865a8fd1c1af9c1dc06200b94d2b07eef87ed734b22703a8d72e1cd36ea36cc48e22020bdd187f88243c7dd0563f72114d38c17072 + checksum: 10/8d406869f045f1d76e2a99865a8fd1c1af9c1dc06200b94d2b07eef87ed734b22703a8d72e1cd36ea36cc48e22020bdd187f88243c7dd0563f72114d38c17072 languageName: node linkType: hard @@ -7583,7 +7577,7 @@ __metadata: json-parse-even-better-errors: "npm:^3.0.0" normalize-package-data: "npm:^5.0.0" npm-normalize-package-bin: "npm:^3.0.0" - checksum: 2c72fc86745ffd303177ec1490a809fb916d36720cec145900ec92ca5dd159d6f096dd7842ad92dfa01eeea5509e076960a5395e8d5ce31984a4e9070018915a + checksum: 10/2c72fc86745ffd303177ec1490a809fb916d36720cec145900ec92ca5dd159d6f096dd7842ad92dfa01eeea5509e076960a5395e8d5ce31984a4e9070018915a languageName: node linkType: hard @@ -7592,11 +7586,11 @@ __metadata: resolution: "read@npm:1.0.7" dependencies: mute-stream: "npm:~0.0.4" - checksum: 2777c254e5732cac96f5d0a1c0f6b836c89ae23d8febd405b206f6f24d5de1873420f1a0795e0e3721066650d19adf802c7882c4027143ee0acf942a4f34f97b + checksum: 10/2777c254e5732cac96f5d0a1c0f6b836c89ae23d8febd405b206f6f24d5de1873420f1a0795e0e3721066650d19adf802c7882c4027143ee0acf942a4f34f97b languageName: node linkType: hard -"readable-stream@npm:^2.0.2, readable-stream@npm:^2.3.0, readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.3.0, readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -7607,7 +7601,7 @@ __metadata: safe-buffer: "npm:~5.1.1" string_decoder: "npm:~1.1.1" util-deprecate: "npm:~1.0.1" - checksum: 8500dd3a90e391d6c5d889256d50ec6026c059fadee98ae9aa9b86757d60ac46fff24fafb7a39fa41d54cb39d8be56cc77be202ebd4cd8ffcf4cb226cbaa40d4 + checksum: 10/8500dd3a90e391d6c5d889256d50ec6026c059fadee98ae9aa9b86757d60ac46fff24fafb7a39fa41d54cb39d8be56cc77be202ebd4cd8ffcf4cb226cbaa40d4 languageName: node linkType: hard @@ -7618,7 +7612,7 @@ __metadata: inherits: "npm:^2.0.3" string_decoder: "npm:^1.1.1" util-deprecate: "npm:^1.0.1" - checksum: d9e3e53193adcdb79d8f10f2a1f6989bd4389f5936c6f8b870e77570853561c362bee69feca2bbb7b32368ce96a85504aa4cedf7cf80f36e6a9de30d64244048 + checksum: 10/d9e3e53193adcdb79d8f10f2a1f6989bd4389f5936c6f8b870e77570853561c362bee69feca2bbb7b32368ce96a85504aa4cedf7cf80f36e6a9de30d64244048 languageName: node linkType: hard @@ -7630,7 +7624,7 @@ __metadata: inherits: "npm:~2.0.1" isarray: "npm:0.0.1" string_decoder: "npm:~0.10.x" - checksum: 20537fca5a8ffd4af0f483be1cce0e981ed8cbb1087e0c762e2e92ae77f1005627272cebed8422f28047b465056aa1961fefd24baf532ca6a3616afea6811ae0 + checksum: 10/20537fca5a8ffd4af0f483be1cce0e981ed8cbb1087e0c762e2e92ae77f1005627272cebed8422f28047b465056aa1961fefd24baf532ca6a3616afea6811ae0 languageName: node linkType: hard @@ -7639,7 +7633,7 @@ __metadata: resolution: "readdirp@npm:3.6.0" dependencies: picomatch: "npm:^2.2.1" - checksum: 196b30ef6ccf9b6e18c4e1724b7334f72a093d011a99f3b5920470f0b3406a51770867b3e1ae9711f227ef7a7065982f6ee2ce316746b2cb42c88efe44297fe7 + checksum: 10/196b30ef6ccf9b6e18c4e1724b7334f72a093d011a99f3b5920470f0b3406a51770867b3e1ae9711f227ef7a7065982f6ee2ce316746b2cb42c88efe44297fe7 languageName: node linkType: hard @@ -7648,7 +7642,7 @@ __metadata: resolution: "rechoir@npm:0.8.0" dependencies: resolve: "npm:^1.20.0" - checksum: ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 + checksum: 10/ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 languageName: node linkType: hard @@ -7657,7 +7651,7 @@ __metadata: resolution: "registry-auth-token@npm:5.0.2" dependencies: "@pnpm/npm-conf": "npm:^2.1.0" - checksum: 0d7683b71ee418993e7872b389024b13645c4295eb7bb850d10728eaf46065db24ea4d47dc6cbb71a60d1aa4bef077b0d8b7363c9ac9d355fdba47bebdfb01dd + checksum: 10/0d7683b71ee418993e7872b389024b13645c4295eb7bb850d10728eaf46065db24ea4d47dc6cbb71a60d1aa4bef077b0d8b7363c9ac9d355fdba47bebdfb01dd languageName: node linkType: hard @@ -7666,7 +7660,7 @@ __metadata: resolution: "registry-url@npm:6.0.1" dependencies: rc: "npm:1.2.8" - checksum: 33712aa1b489aab7aba2191c1cdadfdd71f5bf166d4792d81744a6be332c160bd7d9273af8269d8a01284b9562f14a5b31b7abcf7ad9306c44887ecff51c89ab + checksum: 10/33712aa1b489aab7aba2191c1cdadfdd71f5bf166d4792d81744a6be332c160bd7d9273af8269d8a01284b9562f14a5b31b7abcf7ad9306c44887ecff51c89ab languageName: node linkType: hard @@ -7675,49 +7669,49 @@ __metadata: resolution: "release-zalgo@npm:1.0.0" dependencies: es6-error: "npm:^4.0.1" - checksum: 1719e44b240ee1f57d034b26ea167f3cbf3c36fdae6d6efd0e6e5b202d9852baffc1c5595d378b5f8b2ad729b907ddd962f3d051d89499f83584993a5399f964 + checksum: 10/1719e44b240ee1f57d034b26ea167f3cbf3c36fdae6d6efd0e6e5b202d9852baffc1c5595d378b5f8b2ad729b907ddd962f3d051d89499f83584993a5399f964 languageName: node linkType: hard "remote-git-tags@npm:^3.0.0": version: 3.0.0 resolution: "remote-git-tags@npm:3.0.0" - checksum: 04d87e4c98ac414afe03417d3f585c4b782c03fec74561b1fba0bdc5d3a0459f2cfcc14af36fbc153bf601e566d86e9ff6989e289ff57a86f9cfdac6b4f622f2 + checksum: 10/04d87e4c98ac414afe03417d3f585c4b782c03fec74561b1fba0bdc5d3a0459f2cfcc14af36fbc153bf601e566d86e9ff6989e289ff57a86f9cfdac6b4f622f2 languageName: node linkType: hard "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" - checksum: a72468e2589270d91f06c7d36ec97a88db53ae5d6fe3787fadc943f0b0276b10347f89b363b2a82285f650bdcc135ad4a257c61bdd4d00d6df1fa24875b0ddaf + checksum: 10/a72468e2589270d91f06c7d36ec97a88db53ae5d6fe3787fadc943f0b0276b10347f89b363b2a82285f650bdcc135ad4a257c61bdd4d00d6df1fa24875b0ddaf languageName: node linkType: hard "require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" - checksum: 839a3a890102a658f4cb3e7b2aa13a1f80a3a976b512020c3d1efc418491c48a886b6e481ea56afc6c4cb5eef678f23b2a4e70575e7534eccadf5e30ed2e56eb + checksum: 10/839a3a890102a658f4cb3e7b2aa13a1f80a3a976b512020c3d1efc418491c48a886b6e481ea56afc6c4cb5eef678f23b2a4e70575e7534eccadf5e30ed2e56eb languageName: node linkType: hard "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" - checksum: 8604a570c06a69c9d939275becc33a65676529e1c3e5a9f42d58471674df79357872b96d70bb93a0380a62d60dc9031c98b1a9dad98c946ffdd61b7ac0c8cedd + checksum: 10/8604a570c06a69c9d939275becc33a65676529e1c3e5a9f42d58471674df79357872b96d70bb93a0380a62d60dc9031c98b1a9dad98c946ffdd61b7ac0c8cedd languageName: node linkType: hard "require-package-name@npm:^2.0.1": version: 2.0.1 resolution: "require-package-name@npm:2.0.1" - checksum: 3332d4eec10a730627ca20f37a8a7d57badd9e8953f238472aa457b0084907f86ca5b2af94694a0c8bb2e1101bdb3ed6ddc964d2044b040fe076a9bf5b19755f + checksum: 10/3332d4eec10a730627ca20f37a8a7d57badd9e8953f238472aa457b0084907f86ca5b2af94694a0c8bb2e1101bdb3ed6ddc964d2044b040fe076a9bf5b19755f languageName: node linkType: hard "resolve-alpn@npm:^1.2.0": version: 1.2.1 resolution: "resolve-alpn@npm:1.2.1" - checksum: 744e87888f0b6fa0b256ab454ca0b9c0b80808715e2ef1f3672773665c92a941f6181194e30ccae4a8cd0adbe0d955d3f133102636d2ee0cca0119fec0bc9aec + checksum: 10/744e87888f0b6fa0b256ab454ca0b9c0b80808715e2ef1f3672773665c92a941f6181194e30ccae4a8cd0adbe0d955d3f133102636d2ee0cca0119fec0bc9aec languageName: node linkType: hard @@ -7726,7 +7720,7 @@ __metadata: resolution: "resolve-cwd@npm:3.0.0" dependencies: resolve-from: "npm:^5.0.0" - checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + checksum: 10/546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 languageName: node linkType: hard @@ -7736,21 +7730,21 @@ __metadata: dependencies: expand-tilde: "npm:^2.0.0" global-modules: "npm:^1.0.0" - checksum: ef736b8ed60d6645c3b573da17d329bfb50ec4e1d6c5ffd6df49e3497acef9226f9810ea6823b8ece1560e01dcb13f77a9f6180d4f242d00cc9a8f4de909c65c + checksum: 10/ef736b8ed60d6645c3b573da17d329bfb50ec4e1d6c5ffd6df49e3497acef9226f9810ea6823b8ece1560e01dcb13f77a9f6180d4f242d00cc9a8f4de909c65c languageName: node linkType: hard "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" - checksum: 91eb76ce83621eea7bbdd9b55121a5c1c4a39e54a9ce04a9ad4517f102f8b5131c2cf07622c738a6683991bf54f2ce178f5a42803ecbd527ddc5105f362cc9e3 + checksum: 10/91eb76ce83621eea7bbdd9b55121a5c1c4a39e54a9ce04a9ad4517f102f8b5131c2cf07622c738a6683991bf54f2ce178f5a42803ecbd527ddc5105f362cc9e3 languageName: node linkType: hard "resolve-from@npm:^5.0.0": version: 5.0.0 resolution: "resolve-from@npm:5.0.0" - checksum: be18a5e4d76dd711778664829841cde690971d02b6cbae277735a09c1c28f407b99ef6ef3cd585a1e6546d4097b28df40ed32c4a287b9699dcf6d7f208495e23 + checksum: 10/be18a5e4d76dd711778664829841cde690971d02b6cbae277735a09c1c28f407b99ef6ef3cd585a1e6546d4097b28df40ed32c4a287b9699dcf6d7f208495e23 languageName: node linkType: hard @@ -7763,7 +7757,7 @@ __metadata: supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: c473506ee01eb45cbcfefb68652ae5759e092e6b0fb64547feadf9736a6394f258fbc6f88e00c5ca36d5477fbb65388b272432a3600fa223062e54333c156753 + checksum: 10/c473506ee01eb45cbcfefb68652ae5759e092e6b0fb64547feadf9736a6394f258fbc6f88e00c5ca36d5477fbb65388b272432a3600fa223062e54333c156753 languageName: node linkType: hard @@ -7773,7 +7767,7 @@ __metadata: dependencies: is-core-module: "npm:^2.1.0" path-parse: "npm:^1.0.6" - checksum: b0f326a85422ebc4db8524957990d49d89e028bd6c10f23f2e89db5ee923678c6c08eae596e594031a5cda20f1e19d4a371e22cd772907b0bcf3c932e2205753 + checksum: 10/b0f326a85422ebc4db8524957990d49d89e028bd6c10f23f2e89db5ee923678c6c08eae596e594031a5cda20f1e19d4a371e22cd772907b0bcf3c932e2205753 languageName: node linkType: hard @@ -7786,7 +7780,7 @@ __metadata: supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: f345cd37f56a2c0275e3fe062517c650bb673815d885e7507566df589375d165bbbf4bdb6aa95600a9bc55f4744b81f452b5a63f95b9f10a72787dba3c90890a + checksum: 10/f345cd37f56a2c0275e3fe062517c650bb673815d885e7507566df589375d165bbbf4bdb6aa95600a9bc55f4744b81f452b5a63f95b9f10a72787dba3c90890a languageName: node linkType: hard @@ -7796,7 +7790,7 @@ __metadata: dependencies: is-core-module: "npm:^2.1.0" path-parse: "npm:^1.0.6" - checksum: eb8853b1b7b9ef25f0156304c7c21e2a0d2b2ce247169282542e76565f460986e10adbb770eeb2549c06197fb546b433906cbf3700a3232c567aaaaa53490b88 + checksum: 10/eb8853b1b7b9ef25f0156304c7c21e2a0d2b2ce247169282542e76565f460986e10adbb770eeb2549c06197fb546b433906cbf3700a3232c567aaaaa53490b88 languageName: node linkType: hard @@ -7805,32 +7799,21 @@ __metadata: resolution: "responselike@npm:3.0.0" dependencies: lowercase-keys: "npm:^3.0.0" - checksum: e0cc9be30df4f415d6d83cdede3c5c887cd4a73e7cc1708bcaab1d50a28d15acb68460ac5b02bcc55a42f3d493729c8856427dcf6e57e6e128ad05cba4cfb95e + checksum: 10/e0cc9be30df4f415d6d83cdede3c5c887cd4a73e7cc1708bcaab1d50a28d15acb68460ac5b02bcc55a42f3d493729c8856427dcf6e57e6e128ad05cba4cfb95e languageName: node linkType: hard "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" - checksum: 1f914879f97e7ee931ad05fe3afa629bd55270fc6cf1c1e589b6a99fab96d15daad0fa1a52a00c729ec0078045fe3e399bd4fd0c93bcc906957bdc17f89cb8e6 + checksum: 10/1f914879f97e7ee931ad05fe3afa629bd55270fc6cf1c1e589b6a99fab96d15daad0fa1a52a00c729ec0078045fe3e399bd4fd0c93bcc906957bdc17f89cb8e6 languageName: node linkType: hard "reusify@npm:^1.0.4": version: 1.0.4 resolution: "reusify@npm:1.0.4" - checksum: 14222c9e1d3f9ae01480c50d96057228a8524706db79cdeb5a2ce5bb7070dd9f409a6f84a02cbef8cdc80d39aef86f2dd03d155188a1300c599b05437dcd2ffb - languageName: node - linkType: hard - -"rimraf@npm:2": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: ./bin.js - checksum: 4586c296c736483e297da7cffd19475e4a3e41d07b1ae124aad5d687c79e4ffa716bdac8732ed1db942caf65271cee9dd39f8b639611de161a2753e2112ffe1d + checksum: 10/14222c9e1d3f9ae01480c50d96057228a8524706db79cdeb5a2ce5bb7070dd9f409a6f84a02cbef8cdc80d39aef86f2dd03d155188a1300c599b05437dcd2ffb languageName: node linkType: hard @@ -7841,7 +7824,7 @@ __metadata: glob: "npm:^7.1.3" bin: rimraf: bin.js - checksum: 063ffaccaaaca2cfd0ef3beafb12d6a03dd7ff1260d752d62a6077b5dfff6ae81bea571f655bb6b589d366930ec1bdd285d40d560c0dae9b12f125e54eb743d5 + checksum: 10/063ffaccaaaca2cfd0ef3beafb12d6a03dd7ff1260d752d62a6077b5dfff6ae81bea571f655bb6b589d366930ec1bdd285d40d560c0dae9b12f125e54eb743d5 languageName: node linkType: hard @@ -7852,7 +7835,7 @@ __metadata: glob: "npm:^10.3.7" bin: rimraf: dist/esm/bin.mjs - checksum: a612c7184f96258b7d1328c486b12ca7b60aa30e04229a08bbfa7e964486deb1e9a1b52d917809311bdc39a808a4055c0f950c0280fba194ba0a09e6f0d404f6 + checksum: 10/a612c7184f96258b7d1328c486b12ca7b60aa30e04229a08bbfa7e964486deb1e9a1b52d917809311bdc39a808a4055c0f950c0280fba194ba0a09e6f0d404f6 languageName: node linkType: hard @@ -7861,7 +7844,7 @@ __metadata: resolution: "run-parallel@npm:1.2.0" dependencies: queue-microtask: "npm:^1.2.2" - checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + checksum: 10/cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d languageName: node linkType: hard @@ -7870,28 +7853,28 @@ __metadata: resolution: "rxjs@npm:7.8.1" dependencies: tslib: "npm:^2.1.0" - checksum: b10cac1a5258f885e9dd1b70d23c34daeb21b61222ee735d2ec40a8685bdca40429000703a44f0e638c27a684ac139e1c37e835d2a0dc16f6fc061a138ae3abb + checksum: 10/b10cac1a5258f885e9dd1b70d23c34daeb21b61222ee735d2ec40a8685bdca40429000703a44f0e638c27a684ac139e1c37e835d2a0dc16f6fc061a138ae3abb languageName: node linkType: hard "safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" - checksum: 32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 + checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 languageName: node linkType: hard "safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" - checksum: 7eb5b48f2ed9a594a4795677d5a150faa7eb54483b2318b568dc0c4fc94092a6cce5be02c7288a0500a156282f5276d5688bce7259299568d1053b2150ef374a + checksum: 10/7eb5b48f2ed9a594a4795677d5a150faa7eb54483b2318b568dc0c4fc94092a6cce5be02c7288a0500a156282f5276d5688bce7259299568d1053b2150ef374a languageName: node linkType: hard "safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" - checksum: 7eaf7a0cf37cc27b42fb3ef6a9b1df6e93a1c6d98c6c6702b02fe262d5fcbd89db63320793b99b21cb5348097d0a53de81bd5f4e8b86e20cc9412e3f1cfb4e83 + checksum: 10/7eaf7a0cf37cc27b42fb3ef6a9b1df6e93a1c6d98c6c6702b02fe262d5fcbd89db63320793b99b21cb5348097d0a53de81bd5f4e8b86e20cc9412e3f1cfb4e83 languageName: node linkType: hard @@ -7900,14 +7883,14 @@ __metadata: resolution: "sanitize-filename@npm:1.6.3" dependencies: truncate-utf8-bytes: "npm:^1.0.0" - checksum: 1c162e2cffa797571221c3ed9fe796fa8c6eabb0812418b52a839e4fc63ab130093eb546ec39e1b94b8d3511c0d7de81db3e67906a7e76d7a7bcb6fbab4ed961 + checksum: 10/1c162e2cffa797571221c3ed9fe796fa8c6eabb0812418b52a839e4fc63ab130093eb546ec39e1b94b8d3511c0d7de81db3e67906a7e76d7a7bcb6fbab4ed961 languageName: node linkType: hard "sax@npm:>=0.6.0": version: 1.3.0 resolution: "sax@npm:1.3.0" - checksum: bb571b31d30ecb0353c2ff5f87b117a03e5fb9eb4c1519141854c1a8fbee0a77ddbe8045f413259e711833aa03da210887df8527d19cdc55f299822dbf4b34de + checksum: 10/bb571b31d30ecb0353c2ff5f87b117a03e5fb9eb4c1519141854c1a8fbee0a77ddbe8045f413259e711833aa03da210887df8527d19cdc55f299822dbf4b34de languageName: node linkType: hard @@ -7918,25 +7901,25 @@ __metadata: "@types/json-schema": "npm:^7.0.8" ajv: "npm:^6.12.5" ajv-keywords: "npm:^3.5.2" - checksum: 2c7bbb1da967fdfd320e6cea538949006ec6e8c13ea560a4f94ff2c56809a8486fa5ec419e023452501a6befe1ca381e409c2798c24f4993c7c4094d97fdb258 + checksum: 10/2c7bbb1da967fdfd320e6cea538949006ec6e8c13ea560a4f94ff2c56809a8486fa5ec419e023452501a6befe1ca381e409c2798c24f4993c7c4094d97fdb258 languageName: node linkType: hard -"selenium-webdriver@npm:^4.16.0": - version: 4.17.0 - resolution: "selenium-webdriver@npm:4.17.0" +"selenium-webdriver@npm:^4.18.1": + version: 4.18.1 + resolution: "selenium-webdriver@npm:4.18.1" dependencies: jszip: "npm:^3.10.1" tmp: "npm:^0.2.1" ws: "npm:>=8.14.2" - checksum: 5bbc3aea2431c90014bb341c2443d69f7a3e78c63f0862cfe1fc6fd9462db33f8bcd3c2d5192a041f22b36f25288530277b10fc9f278b5fa08027e3386733969 + checksum: 10/3d8063755025a340ea91252ffa589fc7176b4de94533da27cbdf165365046ea56fe6a4c3ec12b819d8388d1314f3d3cbbc1e3845eb657cc0b33736296664046e languageName: node linkType: hard "semver-compare@npm:^1.0.0": version: 1.0.0 resolution: "semver-compare@npm:1.0.0" - checksum: 75f9c7a7786d1756f64b1429017746721e07bd7691bdad6368f7643885d3a98a27586777e9699456564f4844b407e9f186cc1d588a3f9c0be71310e517e942c3 + checksum: 10/75f9c7a7786d1756f64b1429017746721e07bd7691bdad6368f7643885d3a98a27586777e9699456564f4844b407e9f186cc1d588a3f9c0be71310e517e942c3 languageName: node linkType: hard @@ -7945,14 +7928,14 @@ __metadata: resolution: "semver-diff@npm:4.0.0" dependencies: semver: "npm:^7.3.5" - checksum: 4a958d6f76c7e7858268e1e2cf936712542441c9e003e561b574167279eee0a9bd55cc7eae1bfb31d3e7ad06a9fc370e7dd412fcfefec8c0daf1ce5aea623559 + checksum: 10/4a958d6f76c7e7858268e1e2cf936712542441c9e003e561b574167279eee0a9bd55cc7eae1bfb31d3e7ad06a9fc370e7dd412fcfefec8c0daf1ce5aea623559 languageName: node linkType: hard "semver-utils@npm:^1.1.4": version: 1.1.4 resolution: "semver-utils@npm:1.1.4" - checksum: 93fd955a30f5bdf532163d94981aa03dfbaddf29dad6388415b264c95d7046a6b47d947c6e3e37c0d7867ed3f024aa6e50fc308c9487378354e9d300c9dd68b6 + checksum: 10/93fd955a30f5bdf532163d94981aa03dfbaddf29dad6388415b264c95d7046a6b47d947c6e3e37c0d7867ed3f024aa6e50fc308c9487378354e9d300c9dd68b6 languageName: node linkType: hard @@ -7961,7 +7944,7 @@ __metadata: resolution: "semver@npm:5.7.2" bin: semver: bin/semver - checksum: fca14418a174d4b4ef1fecb32c5941e3412d52a4d3d85165924ce3a47fbc7073372c26faf7484ceb4bbc2bde25880c6b97e492473dc7e9708fdfb1c6a02d546e + checksum: 10/fca14418a174d4b4ef1fecb32c5941e3412d52a4d3d85165924ce3a47fbc7073372c26faf7484ceb4bbc2bde25880c6b97e492473dc7e9708fdfb1c6a02d546e languageName: node linkType: hard @@ -7970,7 +7953,7 @@ __metadata: resolution: "semver@npm:6.3.1" bin: semver: bin/semver.js - checksum: 1ef3a85bd02a760c6ef76a45b8c1ce18226de40831e02a00bad78485390b98b6ccaa31046245fc63bba4a47a6a592b6c7eedc65cc47126e60489f9cc1ce3ed7e + checksum: 10/1ef3a85bd02a760c6ef76a45b8c1ce18226de40831e02a00bad78485390b98b6ccaa31046245fc63bba4a47a6a592b6c7eedc65cc47126e60489f9cc1ce3ed7e languageName: node linkType: hard @@ -7981,7 +7964,7 @@ __metadata: lru-cache: "npm:^6.0.0" bin: semver: bin/semver.js - checksum: 1b41018df2d8aca5a1db4729985e8e20428c650daea60fcd16e926e9383217d00f574fab92d79612771884a98d2ee2a1973f49d630829a8d54d6570defe62535 + checksum: 10/1b41018df2d8aca5a1db4729985e8e20428c650daea60fcd16e926e9383217d00f574fab92d79612771884a98d2ee2a1973f49d630829a8d54d6570defe62535 languageName: node linkType: hard @@ -8002,7 +7985,7 @@ __metadata: on-finished: "npm:2.4.1" range-parser: "npm:~1.2.1" statuses: "npm:2.0.1" - checksum: ec66c0ad109680ad8141d507677cfd8b4e40b9559de23191871803ed241718e99026faa46c398dcfb9250676076573bd6bfe5d0ec347f88f4b7b8533d1d391cb + checksum: 10/ec66c0ad109680ad8141d507677cfd8b4e40b9559de23191871803ed241718e99026faa46c398dcfb9250676076573bd6bfe5d0ec347f88f4b7b8533d1d391cb languageName: node linkType: hard @@ -8011,7 +7994,7 @@ __metadata: resolution: "serialize-javascript@npm:6.0.0" dependencies: randombytes: "npm:^2.1.0" - checksum: ed3dabfbb565c48c9eb1ca8fe58f0d256902ab70a8a605be634ddd68388d5f728bb0bd1268e94fab628748ba8ad8392f01b05f3cbe1e4878b5c58c669fd3d1b4 + checksum: 10/ed3dabfbb565c48c9eb1ca8fe58f0d256902ab70a8a605be634ddd68388d5f728bb0bd1268e94fab628748ba8ad8392f01b05f3cbe1e4878b5c58c669fd3d1b4 languageName: node linkType: hard @@ -8020,7 +8003,7 @@ __metadata: resolution: "serialize-javascript@npm:6.0.1" dependencies: randombytes: "npm:^2.1.0" - checksum: f756b1ff34b655b2183c64dd6683d28d4d9b9a80284b264cac9fd421c73890491eafd6c5c2bbe93f1f21bf78b572037c5a18d24b044c317ee1c9dc44d22db94c + checksum: 10/f756b1ff34b655b2183c64dd6683d28d4d9b9a80284b264cac9fd421c73890491eafd6c5c2bbe93f1f21bf78b572037c5a18d24b044c317ee1c9dc44d22db94c languageName: node linkType: hard @@ -8032,14 +8015,14 @@ __metadata: escape-html: "npm:~1.0.3" parseurl: "npm:~1.3.3" send: "npm:0.18.0" - checksum: 699b2d4c29807a51d9b5e0f24955346911437aebb0178b3c4833ad30d3eca93385ff9927254f5c16da345903cad39d9cd4a532198c95a5129cc4ed43911b15a4 + checksum: 10/699b2d4c29807a51d9b5e0f24955346911437aebb0178b3c4833ad30d3eca93385ff9927254f5c16da345903cad39d9cd4a532198c95a5129cc4ed43911b15a4 languageName: node linkType: hard "set-blocking@npm:^2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" - checksum: 8980ebf7ae9eb945bb036b6e283c547ee783a1ad557a82babf758a065e2fb6ea337fd82cac30dd565c1e606e423f30024a19fff7afbf4977d784720c4026a8ef + checksum: 10/8980ebf7ae9eb945bb036b6e283c547ee783a1ad557a82babf758a065e2fb6ea337fd82cac30dd565c1e606e423f30024a19fff7afbf4977d784720c4026a8ef languageName: node linkType: hard @@ -8051,21 +8034,21 @@ __metadata: get-intrinsic: "npm:^1.2.1" gopd: "npm:^1.0.1" has-property-descriptors: "npm:^1.0.0" - checksum: 745ed1d7dc69a6185e0820082fe73838ab3dfd01e75cce83a41e4c1d68bbf34bc5fb38f32ded542ae0b557536b5d2781594499b5dcd19e7db138e06292a76c7b + checksum: 10/745ed1d7dc69a6185e0820082fe73838ab3dfd01e75cce83a41e4c1d68bbf34bc5fb38f32ded542ae0b557536b5d2781594499b5dcd19e7db138e06292a76c7b languageName: node linkType: hard -"setimmediate@npm:^1.0.5, setimmediate@npm:~1.0.4": +"setimmediate@npm:^1.0.5": version: 1.0.5 resolution: "setimmediate@npm:1.0.5" - checksum: 76e3f5d7f4b581b6100ff819761f04a984fa3f3990e72a6554b57188ded53efce2d3d6c0932c10f810b7c59414f85e2ab3c11521877d1dea1ce0b56dc906f485 + checksum: 10/76e3f5d7f4b581b6100ff819761f04a984fa3f3990e72a6554b57188ded53efce2d3d6c0932c10f810b7c59414f85e2ab3c11521877d1dea1ce0b56dc906f485 languageName: node linkType: hard "setprototypeof@npm:1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" - checksum: fde1630422502fbbc19e6844346778f99d449986b2f9cdcceb8326730d2f3d9964dbcb03c02aaadaefffecd0f2c063315ebea8b3ad895914bf1afc1747fc172e + checksum: 10/fde1630422502fbbc19e6844346778f99d449986b2f9cdcceb8326730d2f3d9964dbcb03c02aaadaefffecd0f2c063315ebea8b3ad895914bf1afc1747fc172e languageName: node linkType: hard @@ -8074,7 +8057,7 @@ __metadata: resolution: "shallow-clone@npm:3.0.1" dependencies: kind-of: "npm:^6.0.2" - checksum: e066bd540cfec5e1b0f78134853e0d892d1c8945fb9a926a579946052e7cb0c70ca4fc34f875a8083aa7910d751805d36ae64af250a6de6f3d28f9fa7be6c21b + checksum: 10/e066bd540cfec5e1b0f78134853e0d892d1c8945fb9a926a579946052e7cb0c70ca4fc34f875a8083aa7910d751805d36ae64af250a6de6f3d28f9fa7be6c21b languageName: node linkType: hard @@ -8083,7 +8066,7 @@ __metadata: resolution: "shebang-command@npm:1.2.0" dependencies: shebang-regex: "npm:^1.0.0" - checksum: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 + checksum: 10/9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 languageName: node linkType: hard @@ -8092,21 +8075,21 @@ __metadata: resolution: "shebang-command@npm:2.0.0" dependencies: shebang-regex: "npm:^3.0.0" - checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + checksum: 10/6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa languageName: node linkType: hard "shebang-regex@npm:^1.0.0": version: 1.0.0 resolution: "shebang-regex@npm:1.0.0" - checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 + checksum: 10/404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 languageName: node linkType: hard "shebang-regex@npm:^3.0.0": version: 3.0.0 resolution: "shebang-regex@npm:3.0.0" - checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + checksum: 10/1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 languageName: node linkType: hard @@ -8117,21 +8100,21 @@ __metadata: call-bind: "npm:^1.0.0" get-intrinsic: "npm:^1.0.2" object-inspect: "npm:^1.9.0" - checksum: c4998d9fc530b0e75a7fd791ad868fdc42846f072734f9080ff55cc8dc7d3899abcda24fd896aa6648c3ab7021b4bb478073eb4f44dfd55bce9714bc1a7c5d45 + checksum: 10/c4998d9fc530b0e75a7fd791ad868fdc42846f072734f9080ff55cc8dc7d3899abcda24fd896aa6648c3ab7021b4bb478073eb4f44dfd55bce9714bc1a7c5d45 languageName: node linkType: hard "signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" - checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + checksum: 10/a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 languageName: node linkType: hard "signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" - checksum: c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f + checksum: 10/c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f languageName: node linkType: hard @@ -8146,14 +8129,14 @@ __metadata: make-fetch-happen: "npm:^11.0.1" bin: sigstore: bin/sigstore.js - checksum: 7ff59f6bbc6fbf4e11f99df36562cdfd8f27f74650e1794942b0f9b567c6facdd0a6c245375111c464a0c367e617793a1c1787ec1dea9784ad2fb698932b9fb9 + checksum: 10/7ff59f6bbc6fbf4e11f99df36562cdfd8f27f74650e1794942b0f9b567c6facdd0a6c245375111c464a0c367e617793a1c1787ec1dea9784ad2fb698932b9fb9 languageName: node linkType: hard "simple-concat@npm:^1.0.0": version: 1.0.1 resolution: "simple-concat@npm:1.0.1" - checksum: 4d211042cc3d73a718c21ac6c4e7d7a0363e184be6a5ad25c8a1502e49df6d0a0253979e3d50dbdd3f60ef6c6c58d756b5d66ac1e05cda9cacd2e9fc59e3876a + checksum: 10/4d211042cc3d73a718c21ac6c4e7d7a0363e184be6a5ad25c8a1502e49df6d0a0253979e3d50dbdd3f60ef6c6c58d756b5d66ac1e05cda9cacd2e9fc59e3876a languageName: node linkType: hard @@ -8164,7 +8147,7 @@ __metadata: decompress-response: "npm:^6.0.0" once: "npm:^1.3.1" simple-concat: "npm:^1.0.0" - checksum: 93f1b32319782f78f2f2234e9ce34891b7ab6b990d19d8afefaa44423f5235ce2676aae42d6743fecac6c8dfff4b808d4c24fe5265be813d04769917a9a44f36 + checksum: 10/93f1b32319782f78f2f2234e9ce34891b7ab6b990d19d8afefaa44423f5235ce2676aae42d6743fecac6c8dfff4b808d4c24fe5265be813d04769917a9a44f36 languageName: node linkType: hard @@ -8178,28 +8161,28 @@ __metadata: diff: "npm:^5.1.0" nise: "npm:^5.1.5" supports-color: "npm:^7.2.0" - checksum: b34f1a97da0be3556ac686c6b649a566c2666eb7f50e75e754928c1c72c96d78f56e56a999227be794c3d9cdaed0bc78d11f38ab303d3079c5bcbcffc0f9c6d5 + checksum: 10/b34f1a97da0be3556ac686c6b649a566c2666eb7f50e75e754928c1c72c96d78f56e56a999227be794c3d9cdaed0bc78d11f38ab303d3079c5bcbcffc0f9c6d5 languageName: node linkType: hard "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" - checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 + checksum: 10/aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 languageName: node linkType: hard "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" - checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + checksum: 10/94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c languageName: node linkType: hard "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" - checksum: 927484aa0b1640fd9473cee3e0a0bcad6fce93fd7bbc18bac9ad0c33686f5d2e2c422fba24b5899c184524af01e11dd2bd051c2bf2b07e47aff8ca72cbfc60d2 + checksum: 10/927484aa0b1640fd9473cee3e0a0bcad6fce93fd7bbc18bac9ad0c33686f5d2e2c422fba24b5899c184524af01e11dd2bd051c2bf2b07e47aff8ca72cbfc60d2 languageName: node linkType: hard @@ -8210,7 +8193,7 @@ __metadata: agent-base: "npm:^6.0.2" debug: "npm:^4.3.3" socks: "npm:^2.6.2" - checksum: 26c75d9c62a9ed3fd494df60e65e88da442f78e0d4bc19bfd85ac37bd2c67470d6d4bba5202e804561cda6674db52864c9e2a2266775f879bc8d89c1445a5f4c + checksum: 10/26c75d9c62a9ed3fd494df60e65e88da442f78e0d4bc19bfd85ac37bd2c67470d6d4bba5202e804561cda6674db52864c9e2a2266775f879bc8d89c1445a5f4c languageName: node linkType: hard @@ -8221,7 +8204,7 @@ __metadata: agent-base: "npm:^7.0.2" debug: "npm:^4.3.4" socks: "npm:^2.7.1" - checksum: ea727734bd5b2567597aa0eda14149b3b9674bb44df5937bbb9815280c1586994de734d965e61f1dd45661183d7b41f115fb9e432d631287c9063864cfcc2ecc + checksum: 10/ea727734bd5b2567597aa0eda14149b3b9674bb44df5937bbb9815280c1586994de734d965e61f1dd45661183d7b41f115fb9e432d631287c9063864cfcc2ecc languageName: node linkType: hard @@ -8231,21 +8214,21 @@ __metadata: dependencies: ip-address: "npm:^9.0.5" smart-buffer: "npm:^4.2.0" - checksum: a3cc38e0716ab53a2db3fa00c703ca682ad54dbbc9ed4c7461624a999be6fa7cdc79fc904c411618e698d5eff55a55aa6d9329169a7db11636d0200814a2b5aa + checksum: 10/a3cc38e0716ab53a2db3fa00c703ca682ad54dbbc9ed4c7461624a999be6fa7cdc79fc904c411618e698d5eff55a55aa6d9329169a7db11636d0200814a2b5aa languageName: node linkType: hard "sort-object-keys@npm:^1.1.3": version: 1.1.3 resolution: "sort-object-keys@npm:1.1.3" - checksum: abea944d6722a1710a1aa6e4f9509da085d93d5fc0db23947cb411eedc7731f80022ce8fa68ed83a53dd2ac7441fcf72a3f38c09b3d9bbc4ff80546aa2e151ad + checksum: 10/abea944d6722a1710a1aa6e4f9509da085d93d5fc0db23947cb411eedc7731f80022ce8fa68ed83a53dd2ac7441fcf72a3f38c09b3d9bbc4ff80546aa2e151ad languageName: node linkType: hard "source-map-js@npm:^1.0.2": version: 1.0.2 resolution: "source-map-js@npm:1.0.2" - checksum: 38e2d2dd18d2e331522001fc51b54127ef4a5d473f53b1349c5cca2123562400e0986648b52e9407e348eaaed53bce49248b6e2641e6d793ca57cb2c360d6d51 + checksum: 10/38e2d2dd18d2e331522001fc51b54127ef4a5d473f53b1349c5cca2123562400e0986648b52e9407e348eaaed53bce49248b6e2641e6d793ca57cb2c360d6d51 languageName: node linkType: hard @@ -8255,21 +8238,21 @@ __metadata: dependencies: buffer-from: "npm:^1.0.0" source-map: "npm:^0.6.0" - checksum: 8317e12d84019b31e34b86d483dd41d6f832f389f7417faf8fc5c75a66a12d9686e47f589a0554a868b8482f037e23df9d040d29387eb16fa14cb85f091ba207 + checksum: 10/8317e12d84019b31e34b86d483dd41d6f832f389f7417faf8fc5c75a66a12d9686e47f589a0554a868b8482f037e23df9d040d29387eb16fa14cb85f091ba207 languageName: node linkType: hard "source-map@npm:^0.6.0, source-map@npm:^0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" - checksum: 59ef7462f1c29d502b3057e822cdbdae0b0e565302c4dd1a95e11e793d8d9d62006cdc10e0fd99163ca33ff2071360cf50ee13f90440806e7ed57d81cba2f7ff + checksum: 10/59ef7462f1c29d502b3057e822cdbdae0b0e565302c4dd1a95e11e793d8d9d62006cdc10e0fd99163ca33ff2071360cf50ee13f90440806e7ed57d81cba2f7ff languageName: node linkType: hard "source-map@npm:^0.7.4": version: 0.7.4 resolution: "source-map@npm:0.7.4" - checksum: a0f7c9b797eda93139842fd28648e868a9a03ea0ad0d9fa6602a0c1f17b7fb6a7dcca00c144476cccaeaae5042e99a285723b1a201e844ad67221bf5d428f1dc + checksum: 10/a0f7c9b797eda93139842fd28648e868a9a03ea0ad0d9fa6602a0c1f17b7fb6a7dcca00c144476cccaeaae5042e99a285723b1a201e844ad67221bf5d428f1dc languageName: node linkType: hard @@ -8278,7 +8261,7 @@ __metadata: resolution: "spawn-please@npm:2.0.2" dependencies: cross-spawn: "npm:^7.0.3" - checksum: c83d5046af9ad2e0edbc56afbffbbc814bc38fb7cc3cce75608ef10028dbf6d19dd758d0194b11b02b9e2082d77b58caa93f5fa31a7505ef81b467259c877cfd + checksum: 10/c83d5046af9ad2e0edbc56afbffbbc814bc38fb7cc3cce75608ef10028dbf6d19dd758d0194b11b02b9e2082d77b58caa93f5fa31a7505ef81b467259c877cfd languageName: node linkType: hard @@ -8292,7 +8275,7 @@ __metadata: rimraf: "npm:^3.0.0" signal-exit: "npm:^3.0.2" which: "npm:^2.0.1" - checksum: ce6ca08d66c3a41a28a7ecc10bf4945d7930fd3ae961d40804ee109cee6ee9f8436125f53bc07918ca1eb461fe2ff0033af1dc3cb803469b585639675fc2d2e7 + checksum: 10/ce6ca08d66c3a41a28a7ecc10bf4945d7930fd3ae961d40804ee109cee6ee9f8436125f53bc07918ca1eb461fe2ff0033af1dc3cb803469b585639675fc2d2e7 languageName: node linkType: hard @@ -8302,14 +8285,14 @@ __metadata: dependencies: spdx-expression-parse: "npm:^3.0.0" spdx-license-ids: "npm:^3.0.0" - checksum: cc2e4dbef822f6d12142116557d63f5facf3300e92a6bd24e907e4865e17b7e1abd0ee6b67f305cae6790fc2194175a24dc394bfcc01eea84e2bdad728e9ae9a + checksum: 10/cc2e4dbef822f6d12142116557d63f5facf3300e92a6bd24e907e4865e17b7e1abd0ee6b67f305cae6790fc2194175a24dc394bfcc01eea84e2bdad728e9ae9a languageName: node linkType: hard "spdx-exceptions@npm:^2.1.0": version: 2.5.0 resolution: "spdx-exceptions@npm:2.5.0" - checksum: bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 + checksum: 10/bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 languageName: node linkType: hard @@ -8319,14 +8302,14 @@ __metadata: dependencies: spdx-exceptions: "npm:^2.1.0" spdx-license-ids: "npm:^3.0.0" - checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + checksum: 10/a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde languageName: node linkType: hard "spdx-license-ids@npm:^3.0.0": version: 3.0.17 resolution: "spdx-license-ids@npm:3.0.17" - checksum: 8f6c6ae02ebb25b4ca658b8990d9e8a8f8d8a95e1d8b9fd84d87eed80a7dc8f8073d6a8d50b8a0295c0e8399e1f8814f5c00e2985e6bf3731540a16f7241cbf1 + checksum: 10/8f6c6ae02ebb25b4ca658b8990d9e8a8f8d8a95e1d8b9fd84d87eed80a7dc8f8073d6a8d50b8a0295c0e8399e1f8814f5c00e2985e6bf3731540a16f7241cbf1 languageName: node linkType: hard @@ -8335,21 +8318,21 @@ __metadata: resolution: "split@npm:0.3.3" dependencies: through: "npm:2" - checksum: 41b397e9fedc984ee1b061780bf173ef72a4f99265ca9cbccd9765b8cc0729eeee6cdeaf70664eb3eb0823e8430db033e50a33050498d75569fc743c6964c84e + checksum: 10/41b397e9fedc984ee1b061780bf173ef72a4f99265ca9cbccd9765b8cc0729eeee6cdeaf70664eb3eb0823e8430db033e50a33050498d75569fc743c6964c84e languageName: node linkType: hard "sprintf-js@npm:^1.1.3": version: 1.1.3 resolution: "sprintf-js@npm:1.1.3" - checksum: e7587128c423f7e43cc625fe2f87e6affdf5ca51c1cc468e910d8aaca46bb44a7fbcfa552f787b1d3987f7043aeb4527d1b99559e6621e01b42b3f45e5a24cbb + checksum: 10/e7587128c423f7e43cc625fe2f87e6affdf5ca51c1cc468e910d8aaca46bb44a7fbcfa552f787b1d3987f7043aeb4527d1b99559e6621e01b42b3f45e5a24cbb languageName: node linkType: hard "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" - checksum: c34828732ab8509c2741e5fd1af6b767c3daf2c642f267788f933a65b1614943c282e74c4284f4fa749c264b18ee016a0d37a3e5b73aee446da46277d3a85daa + checksum: 10/c34828732ab8509c2741e5fd1af6b767c3daf2c642f267788f933a65b1614943c282e74c4284f4fa749c264b18ee016a0d37a3e5b73aee446da46277d3a85daa languageName: node linkType: hard @@ -8358,7 +8341,7 @@ __metadata: resolution: "ssri@npm:10.0.5" dependencies: minipass: "npm:^7.0.3" - checksum: 453f9a1c241c13f5dfceca2ab7b4687bcff354c3ccbc932f35452687b9ef0ccf8983fd13b8a3baa5844c1a4882d6e3ddff48b0e7fd21d743809ef33b80616d79 + checksum: 10/453f9a1c241c13f5dfceca2ab7b4687bcff354c3ccbc932f35452687b9ef0ccf8983fd13b8a3baa5844c1a4882d6e3ddff48b0e7fd21d743809ef33b80616d79 languageName: node linkType: hard @@ -8367,7 +8350,7 @@ __metadata: resolution: "ssri@npm:9.0.1" dependencies: minipass: "npm:^3.1.1" - checksum: 7638a61e91432510718e9265d48d0438a17d53065e5184f1336f234ef6aa3479663942e41e97df56cda06bb24d9d0b5ef342c10685add3cac7267a82d7fa6718 + checksum: 10/7638a61e91432510718e9265d48d0438a17d53065e5184f1336f234ef6aa3479663942e41e97df56cda06bb24d9d0b5ef342c10685add3cac7267a82d7fa6718 languageName: node linkType: hard @@ -8387,14 +8370,14 @@ __metadata: server-test: src/bin/start.js start-server-and-test: src/bin/start.js start-test: src/bin/start.js - checksum: 27a2982a0c07396977fb6096b0b0c4ac141ed1fe93a4df25c62a5581a7327d88445ec6055c32ef9e7f51a05953bbbb4a7d27bf89e8728e1fbd61e6fc8b331cba + checksum: 10/27a2982a0c07396977fb6096b0b0c4ac141ed1fe93a4df25c62a5581a7327d88445ec6055c32ef9e7f51a05953bbbb4a7d27bf89e8728e1fbd61e6fc8b331cba languageName: node linkType: hard "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" - checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb + checksum: 10/18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb languageName: node linkType: hard @@ -8403,7 +8386,7 @@ __metadata: resolution: "stream-combiner@npm:0.0.4" dependencies: duplexer: "npm:~0.1.1" - checksum: 844b622cfe8b9de45a6007404f613b60aaf85200ab9862299066204242f89a7c8033b1c356c998aa6cfc630f6cd9eba119ec1c6dc1f93e245982be4a847aee7d + checksum: 10/844b622cfe8b9de45a6007404f613b60aaf85200ab9862299066204242f89a7c8033b1c356c998aa6cfc630f6cd9eba119ec1c6dc1f93e245982be4a847aee7d languageName: node linkType: hard @@ -8414,7 +8397,7 @@ __metadata: emoji-regex: "npm:^8.0.0" is-fullwidth-code-point: "npm:^3.0.0" strip-ansi: "npm:^6.0.1" - checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + checksum: 10/e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb languageName: node linkType: hard @@ -8425,7 +8408,7 @@ __metadata: eastasianwidth: "npm:^0.2.0" emoji-regex: "npm:^9.2.2" strip-ansi: "npm:^7.0.1" - checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + checksum: 10/7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 languageName: node linkType: hard @@ -8434,14 +8417,14 @@ __metadata: resolution: "string_decoder@npm:1.3.0" dependencies: safe-buffer: "npm:~5.2.0" - checksum: 54d23f4a6acae0e93f999a585e673be9e561b65cd4cca37714af1e893ab8cd8dfa52a9e4f58f48f87b4a44918d3a9254326cb80ed194bf2e4c226e2b21767e56 + checksum: 10/54d23f4a6acae0e93f999a585e673be9e561b65cd4cca37714af1e893ab8cd8dfa52a9e4f58f48f87b4a44918d3a9254326cb80ed194bf2e4c226e2b21767e56 languageName: node linkType: hard "string_decoder@npm:~0.10.x": version: 0.10.31 resolution: "string_decoder@npm:0.10.31" - checksum: cc43e6b1340d4c7843da0e37d4c87a4084c2342fc99dcf6563c3ec273bb082f0cbd4ebf25d5da19b04fb16400d393885fda830be5128e1c416c73b5a6165f175 + checksum: 10/cc43e6b1340d4c7843da0e37d4c87a4084c2342fc99dcf6563c3ec273bb082f0cbd4ebf25d5da19b04fb16400d393885fda830be5128e1c416c73b5a6165f175 languageName: node linkType: hard @@ -8450,7 +8433,7 @@ __metadata: resolution: "string_decoder@npm:1.1.1" dependencies: safe-buffer: "npm:~5.1.0" - checksum: 7c41c17ed4dea105231f6df208002ebddd732e8e9e2d619d133cecd8e0087ddfd9587d2feb3c8caf3213cbd841ada6d057f5142cae68a4e62d3540778d9819b4 + checksum: 10/7c41c17ed4dea105231f6df208002ebddd732e8e9e2d619d133cecd8e0087ddfd9587d2feb3c8caf3213cbd841ada6d057f5142cae68a4e62d3540778d9819b4 languageName: node linkType: hard @@ -8459,7 +8442,7 @@ __metadata: resolution: "strip-ansi@npm:6.0.1" dependencies: ansi-regex: "npm:^5.0.1" - checksum: ae3b5436d34fadeb6096367626ce987057713c566e1e7768818797e00ac5d62023d0f198c4e681eae9e20701721980b26a64a8f5b91238869592a9c6800719a2 + checksum: 10/ae3b5436d34fadeb6096367626ce987057713c566e1e7768818797e00ac5d62023d0f198c4e681eae9e20701721980b26a64a8f5b91238869592a9c6800719a2 languageName: node linkType: hard @@ -8468,49 +8451,49 @@ __metadata: resolution: "strip-ansi@npm:7.1.0" dependencies: ansi-regex: "npm:^6.0.1" - checksum: 475f53e9c44375d6e72807284024ac5d668ee1d06010740dec0b9744f2ddf47de8d7151f80e5f6190fc8f384e802fdf9504b76a7e9020c9faee7103623338be2 + checksum: 10/475f53e9c44375d6e72807284024ac5d668ee1d06010740dec0b9744f2ddf47de8d7151f80e5f6190fc8f384e802fdf9504b76a7e9020c9faee7103623338be2 languageName: node linkType: hard "strip-bom@npm:^4.0.0": version: 4.0.0 resolution: "strip-bom@npm:4.0.0" - checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 + checksum: 10/9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 languageName: node linkType: hard "strip-final-newline@npm:^2.0.0": version: 2.0.0 resolution: "strip-final-newline@npm:2.0.0" - checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 + checksum: 10/69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 languageName: node linkType: hard "strip-final-newline@npm:^3.0.0": version: 3.0.0 resolution: "strip-final-newline@npm:3.0.0" - checksum: 23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 + checksum: 10/23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 languageName: node linkType: hard "strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" - checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + checksum: 10/492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 languageName: node linkType: hard "strip-json-comments@npm:^5.0.1": version: 5.0.1 resolution: "strip-json-comments@npm:5.0.1" - checksum: b314af70c6666a71133e309a571bdb87687fc878d9fd8b38ebed393a77b89835b92f191aa6b0bc10dfd028ba99eed6b6365985001d64c5aef32a4a82456a156b + checksum: 10/b314af70c6666a71133e309a571bdb87687fc878d9fd8b38ebed393a77b89835b92f191aa6b0bc10dfd028ba99eed6b6365985001d64c5aef32a4a82456a156b languageName: node linkType: hard "strip-json-comments@npm:~2.0.1": version: 2.0.1 resolution: "strip-json-comments@npm:2.0.1" - checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + checksum: 10/1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 languageName: node linkType: hard @@ -8519,7 +8502,7 @@ __metadata: resolution: "supports-color@npm:8.1.1" dependencies: has-flag: "npm:^4.0.0" - checksum: 157b534df88e39c5518c5e78c35580c1eca848d7dbaf31bbe06cdfc048e22c7ff1a9d046ae17b25691128f631a51d9ec373c1b740c12ae4f0de6e292037e4282 + checksum: 10/157b534df88e39c5518c5e78c35580c1eca848d7dbaf31bbe06cdfc048e22c7ff1a9d046ae17b25691128f631a51d9ec373c1b740c12ae4f0de6e292037e4282 languageName: node linkType: hard @@ -8528,7 +8511,7 @@ __metadata: resolution: "supports-color@npm:5.5.0" dependencies: has-flag: "npm:^3.0.0" - checksum: 5f505c6fa3c6e05873b43af096ddeb22159831597649881aeb8572d6fe3b81e798cc10840d0c9735e0026b250368851b7f77b65e84f4e4daa820a4f69947f55b + checksum: 10/5f505c6fa3c6e05873b43af096ddeb22159831597649881aeb8572d6fe3b81e798cc10840d0c9735e0026b250368851b7f77b65e84f4e4daa820a4f69947f55b languageName: node linkType: hard @@ -8537,14 +8520,14 @@ __metadata: resolution: "supports-color@npm:7.2.0" dependencies: has-flag: "npm:^4.0.0" - checksum: c8bb7afd564e3b26b50ca6ee47572c217526a1389fe018d00345856d4a9b08ffbd61fadaf283a87368d94c3dcdb8f5ffe2650a5a65863e21ad2730ca0f05210a + checksum: 10/c8bb7afd564e3b26b50ca6ee47572c217526a1389fe018d00345856d4a9b08ffbd61fadaf283a87368d94c3dcdb8f5ffe2650a5a65863e21ad2730ca0f05210a languageName: node linkType: hard "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: a9dc19ae2220c952bd2231d08ddeecb1b0328b61e72071ff4000c8384e145cc07c1c0bdb3b5a1cb06e186a7b2790f1dee793418b332f6ddf320de25d9125be7e + checksum: 10/a9dc19ae2220c952bd2231d08ddeecb1b0328b61e72071ff4000c8384e145cc07c1c0bdb3b5a1cb06e186a7b2790f1dee793418b332f6ddf320de25d9125be7e languageName: node linkType: hard @@ -8554,7 +8537,7 @@ __metadata: dependencies: "@pkgr/core": "npm:^0.1.0" tslib: "npm:^2.6.2" - checksum: 2864a5c3e689ad5b991bebbd8a583c5682c4fa08a4f39986b510b6b5d160c08fc3672444069f8f96ed6a9d12772879c674c1f61e728573eadfa90af40a765b74 + checksum: 10/2864a5c3e689ad5b991bebbd8a583c5682c4fa08a4f39986b510b6b5d160c08fc3672444069f8f96ed6a9d12772879c674c1f61e728573eadfa90af40a765b74 languageName: node linkType: hard @@ -8573,28 +8556,28 @@ __metadata: sort-object-keys: "npm:^1.1.3" bin: synp: ./cli/synp.js - checksum: 4e2b34ce9901fce38e165ef04a03c0e82af9b478ed105b97a2dd3d4fd57669ca894c0b2330012771ba4e501f1366ad55e76986e464e97ee2b57d59dc608524d3 + checksum: 10/4e2b34ce9901fce38e165ef04a03c0e82af9b478ed105b97a2dd3d4fd57669ca894c0b2330012771ba4e501f1366ad55e76986e464e97ee2b57d59dc608524d3 languageName: node linkType: hard "system-architecture@npm:^0.1.0": version: 0.1.0 resolution: "system-architecture@npm:0.1.0" - checksum: ca0dd793c45c354ab57dd7fc8ce7dc9923a6e07382bd3b22eb5b08f55ddb0217c390d00767549c5155fd4ce7ef23ffdd8cfb33dd4344cbbd37837d085a50f6f0 + checksum: 10/ca0dd793c45c354ab57dd7fc8ce7dc9923a6e07382bd3b22eb5b08f55ddb0217c390d00767549c5155fd4ce7ef23ffdd8cfb33dd4344cbbd37837d085a50f6f0 languageName: node linkType: hard "tabbable@npm:^5.2.0": version: 5.3.3 resolution: "tabbable@npm:5.3.3" - checksum: 5da150c9ac7aaed95f901623214794ffac9472a86009a1762c7b436249d33b157b7d86d93610986090d0fb1ef152f5dec2c201552e0b67ca895ba00c145a51c5 + checksum: 10/5da150c9ac7aaed95f901623214794ffac9472a86009a1762c7b436249d33b157b7d86d93610986090d0fb1ef152f5dec2c201552e0b67ca895ba00c145a51c5 languageName: node linkType: hard "tapable@npm:^2.1.1, tapable@npm:^2.2.0": version: 2.2.1 resolution: "tapable@npm:2.2.1" - checksum: 1769336dd21481ae6347611ca5fca47add0962fd8e80466515032125eca0084a4f0ede11e65341b9c0018ef4e1cf1ad820adbb0fba7cc99865c6005734000b0a + checksum: 10/1769336dd21481ae6347611ca5fca47add0962fd8e80466515032125eca0084a4f0ede11e65341b9c0018ef4e1cf1ad820adbb0fba7cc99865c6005734000b0a languageName: node linkType: hard @@ -8606,7 +8589,7 @@ __metadata: mkdirp: "npm:^0.5.1" pump: "npm:^1.0.0" tar-stream: "npm:^1.1.2" - checksum: d467267093920afad14040d7d72454aa3ea4895958311e98a0f76e553a83da82d118928cab2b83af35c16e69f0456fa3830ec3e755b084510ede7c2b6248af45 + checksum: 10/d467267093920afad14040d7d72454aa3ea4895958311e98a0f76e553a83da82d118928cab2b83af35c16e69f0456fa3830ec3e755b084510ede7c2b6248af45 languageName: node linkType: hard @@ -8618,7 +8601,7 @@ __metadata: mkdirp-classic: "npm:^0.5.2" pump: "npm:^3.0.0" tar-stream: "npm:^2.1.4" - checksum: 526deae025453e825f87650808969662fbb12eb0461d033e9b447de60ec951c6c4607d0afe7ce057defe9d4e45cf80399dd74bc15f9d9e0773d5e990a78ce4ac + checksum: 10/526deae025453e825f87650808969662fbb12eb0461d033e9b447de60ec951c6c4607d0afe7ce057defe9d4e45cf80399dd74bc15f9d9e0773d5e990a78ce4ac languageName: node linkType: hard @@ -8633,7 +8616,7 @@ __metadata: readable-stream: "npm:^2.3.0" to-buffer: "npm:^1.1.1" xtend: "npm:^4.0.0" - checksum: ac9b850bd40e6d4b251abcf92613bafd9fc9e592c220c781ebcdbb0ba76da22a245d9ea3ea638ad7168910e7e1ae5079333866cd679d2f1ffadb99c403f99d7f + checksum: 10/ac9b850bd40e6d4b251abcf92613bafd9fc9e592c220c781ebcdbb0ba76da22a245d9ea3ea638ad7168910e7e1ae5079333866cd679d2f1ffadb99c403f99d7f languageName: node linkType: hard @@ -8646,7 +8629,7 @@ __metadata: fs-constants: "npm:^1.0.0" inherits: "npm:^2.0.3" readable-stream: "npm:^3.1.1" - checksum: 1a52a51d240c118cbcd30f7368ea5e5baef1eac3e6b793fb1a41e6cd7319296c79c0264ccc5859f5294aa80f8f00b9239d519e627b9aade80038de6f966fec6a + checksum: 10/1a52a51d240c118cbcd30f7368ea5e5baef1eac3e6b793fb1a41e6cd7319296c79c0264ccc5859f5294aa80f8f00b9239d519e627b9aade80038de6f966fec6a languageName: node linkType: hard @@ -8660,7 +8643,7 @@ __metadata: minizlib: "npm:^2.1.1" mkdirp: "npm:^1.0.3" yallist: "npm:^4.0.0" - checksum: 2042bbb14830b5cd0d584007db0eb0a7e933e66d1397e72a4293768d2332449bc3e312c266a0887ec20156dea388d8965e53b4fc5097f42d78593549016da089 + checksum: 10/2042bbb14830b5cd0d584007db0eb0a7e933e66d1397e72a4293768d2332449bc3e312c266a0887ec20156dea388d8965e53b4fc5097f42d78593549016da089 languageName: node linkType: hard @@ -8669,7 +8652,7 @@ __metadata: resolution: "targz@npm:1.0.1" dependencies: tar-fs: "npm:^1.8.1" - checksum: 9680cc4e04d0db2eef8666332011ad4ff5221f8c57aa2f8f0a41f44005b4316750b112a885c250cd6a088f141a4af75836733573a6f3505ce6fb60257ccba25a + checksum: 10/9680cc4e04d0db2eef8666332011ad4ff5221f8c57aa2f8f0a41f44005b4316750b112a885c250cd6a088f141a4af75836733573a6f3505ce6fb60257ccba25a languageName: node linkType: hard @@ -8678,14 +8661,14 @@ __metadata: resolution: "tcomb-validation@npm:3.4.1" dependencies: tcomb: "npm:^3.0.0" - checksum: 01b22dc5e496a8881a0737a7378bda60a1404eb991333791cc0e6ba321904d05e49c9e78cd75d2e8030e2073be6c5e40fbdbda5884be3bd9e22a704ed4b1082f + checksum: 10/01b22dc5e496a8881a0737a7378bda60a1404eb991333791cc0e6ba321904d05e49c9e78cd75d2e8030e2073be6c5e40fbdbda5884be3bd9e22a704ed4b1082f languageName: node linkType: hard "tcomb@npm:^3.0.0, tcomb@npm:^3.2.17": version: 3.2.29 resolution: "tcomb@npm:3.2.29" - checksum: 99304558951c4d45b471f625cc241d02699690229ee04fb97d24258be6dba217def465ea18dca19acdbf7790c7d12a261955b4910f7c68be3d0b4fe875b9d0c6 + checksum: 10/99304558951c4d45b471f625cc241d02699690229ee04fb97d24258be6dba217def465ea18dca19acdbf7790c7d12a261955b4910f7c68be3d0b4fe875b9d0c6 languageName: node linkType: hard @@ -8707,7 +8690,7 @@ __metadata: optional: true uglify-js: optional: true - checksum: fb1c2436ae1b4e983be043fa0a3d355c047b16b68f102437d08c736d7960c001e7420e2f722b9d99ce0dc70ca26a68cc63c0b82bc45f5b48671142b352a9d938 + checksum: 10/fb1c2436ae1b4e983be043fa0a3d355c047b16b68f102437d08c736d7960c001e7420e2f722b9d99ce0dc70ca26a68cc63c0b82bc45f5b48671142b352a9d938 languageName: node linkType: hard @@ -8721,7 +8704,7 @@ __metadata: source-map-support: "npm:~0.5.20" bin: terser: bin/terser - checksum: 0282c5c065cbfa1e725d5609b99579252bc20b83cd1d75e8ab8b46d5da2c9d0fcfc453a12624f2d2d4c1240bfa0017a90fcf1e3b88258e5842fca1b0b82be8d8 + checksum: 10/0282c5c065cbfa1e725d5609b99579252bc20b83cd1d75e8ab8b46d5da2c9d0fcfc453a12624f2d2d4c1240bfa0017a90fcf1e3b88258e5842fca1b0b82be8d8 languageName: node linkType: hard @@ -8732,14 +8715,14 @@ __metadata: "@istanbuljs/schema": "npm:^0.1.2" glob: "npm:^7.1.4" minimatch: "npm:^3.0.4" - checksum: 8fccb2cb6c8fcb6bb4115394feb833f8b6cf4b9503ec2485c2c90febf435cac62abe882a0c5c51a37b9bbe70640cdd05acf5f45e486ac4583389f4b0855f69e5 + checksum: 10/8fccb2cb6c8fcb6bb4115394feb833f8b6cf4b9503ec2485c2c90febf435cac62abe882a0c5c51a37b9bbe70640cdd05acf5f45e486ac4583389f4b0855f69e5 languageName: node linkType: hard "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" - checksum: 4383b5baaeffa9bb4cda2ac33a4aa2e6d1f8aaf811848bf73513a9b88fd76372dc461f6fd6d2e9cb5100f48b473be32c6f95bd983509b7d92bb4d92c10747452 + checksum: 10/4383b5baaeffa9bb4cda2ac33a4aa2e6d1f8aaf811848bf73513a9b88fd76372dc461f6fd6d2e9cb5100f48b473be32c6f95bd983509b7d92bb4d92c10747452 languageName: node linkType: hard @@ -8749,14 +8732,14 @@ __metadata: dependencies: readable-stream: "npm:~2.3.6" xtend: "npm:~4.0.1" - checksum: cd71f7dcdc7a8204fea003a14a433ef99384b7d4e31f5497e1f9f622b3cf3be3691f908455f98723bdc80922a53af7fa10c3b7abbe51c6fd3d536dbc7850e2c4 + checksum: 10/cd71f7dcdc7a8204fea003a14a433ef99384b7d4e31f5497e1f9f622b3cf3be3691f908455f98723bdc80922a53af7fa10c3b7abbe51c6fd3d536dbc7850e2c4 languageName: node linkType: hard "through@npm:2, through@npm:~2.3, through@npm:~2.3.1": version: 2.3.8 resolution: "through@npm:2.3.8" - checksum: 5da78346f70139a7d213b65a0106f3c398d6bc5301f9248b5275f420abc2c4b1e77c2abc72d218dedc28c41efb2e7c312cb76a7730d04f9c2d37d247da3f4198 + checksum: 10/5da78346f70139a7d213b65a0106f3c398d6bc5301f9248b5275f420abc2c4b1e77c2abc72d218dedc28c41efb2e7c312cb76a7730d04f9c2d37d247da3f4198 languageName: node linkType: hard @@ -8765,21 +8748,21 @@ __metadata: resolution: "tmp@npm:0.2.1" dependencies: rimraf: "npm:^3.0.0" - checksum: 445148d72df3ce99356bc89a7857a0c5c3b32958697a14e50952c6f7cf0a8016e746ababe9a74c1aa52f04c526661992f14659eba34d3c6701d49ba2f3cf781b + checksum: 10/445148d72df3ce99356bc89a7857a0c5c3b32958697a14e50952c6f7cf0a8016e746ababe9a74c1aa52f04c526661992f14659eba34d3c6701d49ba2f3cf781b languageName: node linkType: hard "to-buffer@npm:^1.1.1": version: 1.1.1 resolution: "to-buffer@npm:1.1.1" - checksum: 8ade59fe04239b281496b6067bc83ad0371a3657552276cbd09ffffaeb3ad0018a28306d61b854b83280eabe1829cbc53001ccd761e834c6062cbcc7fee2766a + checksum: 10/8ade59fe04239b281496b6067bc83ad0371a3657552276cbd09ffffaeb3ad0018a28306d61b854b83280eabe1829cbc53001ccd761e834c6062cbcc7fee2766a languageName: node linkType: hard "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" - checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 + checksum: 10/be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 languageName: node linkType: hard @@ -8788,28 +8771,21 @@ __metadata: resolution: "to-regex-range@npm:5.0.1" dependencies: is-number: "npm:^7.0.0" - checksum: 10dda13571e1f5ad37546827e9b6d4252d2e0bc176c24a101252153ef435d83696e2557fe128c4678e4e78f5f01e83711c703eef9814eb12dab028580d45980a + checksum: 10/10dda13571e1f5ad37546827e9b6d4252d2e0bc176c24a101252153ef435d83696e2557fe128c4678e4e78f5f01e83711c703eef9814eb12dab028580d45980a languageName: node linkType: hard "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" - checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 + checksum: 10/952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 languageName: node linkType: hard "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" - checksum: 8f1f5aa6cb232f9e1bdc86f485f916b7aa38caee8a778b378ffec0b70d9307873f253f5cbadbe2955ece2ac5c83d0dc14a77513166ccd0a0c7fe197e21396695 - languageName: node - linkType: hard - -"traverse@npm:>=0.3.0 <0.4": - version: 0.3.9 - resolution: "traverse@npm:0.3.9" - checksum: ffbb8460a934f271b7b7ae654e676f740d81037d6c20ab9fd05781cfdf644929f494399b5cb3aa3db4ab69cbfef06ff8f885560d523ca49b7da33763f6c4c9f1 + checksum: 10/8f1f5aa6cb232f9e1bdc86f485f916b7aa38caee8a778b378ffec0b70d9307873f253f5cbadbe2955ece2ac5c83d0dc14a77513166ccd0a0c7fe197e21396695 languageName: node linkType: hard @@ -8818,7 +8794,7 @@ __metadata: resolution: "truncate-utf8-bytes@npm:1.0.2" dependencies: utf8-byte-length: "npm:^1.0.1" - checksum: 366e47a0e22cc271d37eb4e62820453fb877784b55b37218842758b7aa1d402eedd0f8833cfb5d6f7a6cae1535d84289bd5e32c4ee962d2a86962fb7038a6983 + checksum: 10/366e47a0e22cc271d37eb4e62820453fb877784b55b37218842758b7aa1d402eedd0f8833cfb5d6f7a6cae1535d84289bd5e32c4ee962d2a86962fb7038a6983 languageName: node linkType: hard @@ -8827,7 +8803,7 @@ __metadata: resolution: "ts-api-utils@npm:1.0.3" peerDependencies: typescript: ">=4.2.0" - checksum: 1350a5110eb1e534e9a6178f4081fb8a4fcc439749e19f4ad699baec9090fcb90fe532d5e191d91a062dc6e454a14a8d7eb2ad202f57135a30c4a44a3024f039 + checksum: 10/1350a5110eb1e534e9a6178f4081fb8a4fcc439749e19f4ad699baec9090fcb90fe532d5e191d91a062dc6e454a14a8d7eb2ad202f57135a30c4a44a3024f039 languageName: node linkType: hard @@ -8839,7 +8815,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: e689fb92545ea3ab70d3b6846696866b79813e20bd23ec34fdf1812b6be5aaa70eea374f7363b9f850f2e1bf864d90b6390b9f1fc3ce3c4e6207a9aa068252f0 + checksum: 10/e689fb92545ea3ab70d3b6846696866b79813e20bd23ec34fdf1812b6be5aaa70eea374f7363b9f850f2e1bf864d90b6390b9f1fc3ce3c4e6207a9aa068252f0 languageName: node linkType: hard @@ -8855,7 +8831,7 @@ __metadata: peerDependencies: typescript: "*" webpack: ^5.0.0 - checksum: a85d43bb6f72858d613290ac02d1d24e81c38ba2dcb98b90465dc97eb6c2036bf9a389542c1a7865548643e7ed39f063fdff2dbb3e5aafbc511de6a3eb275adf + checksum: 10/a85d43bb6f72858d613290ac02d1d24e81c38ba2dcb98b90465dc97eb6c2036bf9a389542c1a7865548643e7ed39f063fdff2dbb3e5aafbc511de6a3eb275adf languageName: node linkType: hard @@ -8893,21 +8869,21 @@ __metadata: ts-node-script: dist/bin-script.js ts-node-transpile-only: dist/bin-transpile.js ts-script: dist/bin-script-deprecated.js - checksum: a91a15b3c9f76ac462f006fa88b6bfa528130dcfb849dd7ef7f9d640832ab681e235b8a2bc58ecde42f72851cc1d5d4e22c901b0c11aa51001ea1d395074b794 + checksum: 10/a91a15b3c9f76ac462f006fa88b6bfa528130dcfb849dd7ef7f9d640832ab681e235b8a2bc58ecde42f72851cc1d5d4e22c901b0c11aa51001ea1d395074b794 languageName: node linkType: hard "tslib@npm:^1.13.0": version: 1.14.1 resolution: "tslib@npm:1.14.1" - checksum: 7dbf34e6f55c6492637adb81b555af5e3b4f9cc6b998fb440dac82d3b42bdc91560a35a5fb75e20e24a076c651438234da6743d139e4feabf0783f3cdfe1dddb + checksum: 10/7dbf34e6f55c6492637adb81b555af5e3b4f9cc6b998fb440dac82d3b42bdc91560a35a5fb75e20e24a076c651438234da6743d139e4feabf0783f3cdfe1dddb languageName: node linkType: hard "tslib@npm:^2.1.0, tslib@npm:^2.4.1, tslib@npm:^2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" - checksum: bd26c22d36736513980091a1e356378e8b662ded04204453d353a7f34a4c21ed0afc59b5f90719d4ba756e581a162ecbf93118dc9c6be5acf70aa309188166ca + checksum: 10/bd26c22d36736513980091a1e356378e8b662ded04204453d353a7f34a4c21ed0afc59b5f90719d4ba756e581a162ecbf93118dc9c6be5acf70aa309188166ca languageName: node linkType: hard @@ -8918,7 +8894,7 @@ __metadata: "@tufjs/models": "npm:1.0.4" debug: "npm:^4.3.4" make-fetch-happen: "npm:^11.1.1" - checksum: 8ce0061b76a9dc89fc6e53bc1870afeb8e70083a751910273f959c5d0d574ba9b037a22d944ff97623e58eefa16b051f0ac678bd2da973d2f6b57359604fee31 + checksum: 10/8ce0061b76a9dc89fc6e53bc1870afeb8e70083a751910273f959c5d0d574ba9b037a22d944ff97623e58eefa16b051f0ac678bd2da973d2f6b57359604fee31 languageName: node linkType: hard @@ -8927,14 +8903,14 @@ __metadata: resolution: "tunnel-agent@npm:0.6.0" dependencies: safe-buffer: "npm:^5.0.1" - checksum: 7f0d9ed5c22404072b2ae8edc45c071772affd2ed14a74f03b4e71b4dd1a14c3714d85aed64abcaaee5fec2efc79002ba81155c708f4df65821b444abb0cfade + checksum: 10/7f0d9ed5c22404072b2ae8edc45c071772affd2ed14a74f03b4e71b4dd1a14c3714d85aed64abcaaee5fec2efc79002ba81155c708f4df65821b444abb0cfade languageName: node linkType: hard "tunnel@npm:0.0.6": version: 0.0.6 resolution: "tunnel@npm:0.0.6" - checksum: cf1ffed5e67159b901a924dbf94c989f20b2b3b65649cfbbe4b6abb35955ce2cf7433b23498bdb2c5530ab185b82190fce531597b3b4a649f06a907fc8702405 + checksum: 10/cf1ffed5e67159b901a924dbf94c989f20b2b3b65649cfbbe4b6abb35955ce2cf7433b23498bdb2c5530ab185b82190fce531597b3b4a649f06a907fc8702405 languageName: node linkType: hard @@ -8943,42 +8919,42 @@ __metadata: resolution: "type-check@npm:0.4.0" dependencies: prelude-ls: "npm:^1.2.1" - checksum: 14687776479d048e3c1dbfe58a2409e00367810d6960c0f619b33793271ff2a27f81b52461f14a162f1f89a9b1d8da1b237fc7c99b0e1fdcec28ec63a86b1fec + checksum: 10/14687776479d048e3c1dbfe58a2409e00367810d6960c0f619b33793271ff2a27f81b52461f14a162f1f89a9b1d8da1b237fc7c99b0e1fdcec28ec63a86b1fec languageName: node linkType: hard "type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" - checksum: 5179e3b8ebc51fce1b13efb75fdea4595484433f9683bbc2dca6d99789dba4e602ab7922d2656f2ce8383987467f7770131d4a7f06a26287db0615d2f4c4ce7d + checksum: 10/5179e3b8ebc51fce1b13efb75fdea4595484433f9683bbc2dca6d99789dba4e602ab7922d2656f2ce8383987467f7770131d4a7f06a26287db0615d2f4c4ce7d languageName: node linkType: hard "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" - checksum: 8907e16284b2d6cfa4f4817e93520121941baba36b39219ea36acfe64c86b9dbc10c9941af450bd60832c8f43464974d51c0957f9858bc66b952b66b6914cbb9 + checksum: 10/8907e16284b2d6cfa4f4817e93520121941baba36b39219ea36acfe64c86b9dbc10c9941af450bd60832c8f43464974d51c0957f9858bc66b952b66b6914cbb9 languageName: node linkType: hard "type-fest@npm:^0.8.0": version: 0.8.1 resolution: "type-fest@npm:0.8.1" - checksum: fd4a91bfb706aeeb0d326ebd2e9a8ea5263979e5dec8d16c3e469a5bd3a946e014a062ef76c02e3086d3d1c7209a56a20a4caafd0e9f9a5c2ab975084ea3d388 + checksum: 10/fd4a91bfb706aeeb0d326ebd2e9a8ea5263979e5dec8d16c3e469a5bd3a946e014a062ef76c02e3086d3d1c7209a56a20a4caafd0e9f9a5c2ab975084ea3d388 languageName: node linkType: hard "type-fest@npm:^1.0.1": version: 1.4.0 resolution: "type-fest@npm:1.4.0" - checksum: 89875c247564601c2650bacad5ff80b859007fbdb6c9e43713ae3ffa3f584552eea60f33711dd762e16496a1ab4debd409822627be14097d9a17e39c49db591a + checksum: 10/89875c247564601c2650bacad5ff80b859007fbdb6c9e43713ae3ffa3f584552eea60f33711dd762e16496a1ab4debd409822627be14097d9a17e39c49db591a languageName: node linkType: hard "type-fest@npm:^2.13.0": version: 2.19.0 resolution: "type-fest@npm:2.19.0" - checksum: 7bf9e8fdf34f92c8bb364c0af14ca875fac7e0183f2985498b77be129dc1b3b1ad0a6b3281580f19e48c6105c037fb966ad9934520c69c6434d17fd0af4eed78 + checksum: 10/7bf9e8fdf34f92c8bb364c0af14ca875fac7e0183f2985498b77be129dc1b3b1ad0a6b3281580f19e48c6105c037fb966ad9934520c69c6434d17fd0af4eed78 languageName: node linkType: hard @@ -8988,7 +8964,7 @@ __metadata: dependencies: media-typer: "npm:0.3.0" mime-types: "npm:~2.1.24" - checksum: 0bd9eeae5efd27d98fd63519f999908c009e148039d8e7179a074f105362d4fcc214c38b24f6cda79c87e563cbd12083a4691381ed28559220d4a10c2047bed4 + checksum: 10/0bd9eeae5efd27d98fd63519f999908c009e148039d8e7179a074f105362d4fcc214c38b24f6cda79c87e563cbd12083a4691381ed28559220d4a10c2047bed4 languageName: node linkType: hard @@ -8999,7 +8975,7 @@ __metadata: qs: "npm:^6.9.1" tunnel: "npm:0.0.6" underscore: "npm:^1.12.1" - checksum: 9c160780f476aa03ad1ce6e7961894d06c17d9b67d94da9fbbcd0c5a5ff741e4a6d85c3b938964b13826d3f20ea36febcd6186b43e361cc62a9960241e0f5a4f + checksum: 10/9c160780f476aa03ad1ce6e7961894d06c17d9b67d94da9fbbcd0c5a5ff741e4a6d85c3b938964b13826d3f20ea36febcd6186b43e361cc62a9960241e0f5a4f languageName: node linkType: hard @@ -9008,7 +8984,7 @@ __metadata: resolution: "typedarray-to-buffer@npm:3.1.5" dependencies: is-typedarray: "npm:^1.0.0" - checksum: 7c850c3433fbdf4d04f04edfc751743b8f577828b8e1eb93b95a3bce782d156e267d83e20fb32b3b47813e69a69ab5e9b5342653332f7d21c7d1210661a7a72c + checksum: 10/7c850c3433fbdf4d04f04edfc751743b8f577828b8e1eb93b95a3bce782d156e267d83e20fb32b3b47813e69a69ab5e9b5342653332f7d21c7d1210661a7a72c languageName: node linkType: hard @@ -9018,7 +8994,7 @@ __metadata: bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 6e4e6a14a50c222b3d14d4ea2f729e79f972fa536ac1522b91202a9a65af3605c2928c4a790a4a50aa13694d461c479ba92cedaeb1e7b190aadaa4e4b96b8e18 + checksum: 10/6e4e6a14a50c222b3d14d4ea2f729e79f972fa536ac1522b91202a9a65af3605c2928c4a790a4a50aa13694d461c479ba92cedaeb1e7b190aadaa4e4b96b8e18 languageName: node linkType: hard @@ -9028,21 +9004,21 @@ __metadata: bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: c93786fcc9a70718ba1e3819bab56064ead5817004d1b8186f8ca66165f3a2d0100fee91fa64c840dcd45f994ca5d615d8e1f566d39a7470fc1e014dbb4cf15d + checksum: 10/c93786fcc9a70718ba1e3819bab56064ead5817004d1b8186f8ca66165f3a2d0100fee91fa64c840dcd45f994ca5d615d8e1f566d39a7470fc1e014dbb4cf15d languageName: node linkType: hard "ua-parser-js@npm:1.0.33": version: 1.0.33 resolution: "ua-parser-js@npm:1.0.33" - checksum: 26455b1bbc165eea24b92283034e1e941ca5e272fcbb0a81ce2d064da369353182a1f6eb7472a6d2e738dd89b0cd008de9f1f17946f9b8f5ddfcf4e8a5949c1a + checksum: 10/26455b1bbc165eea24b92283034e1e941ca5e272fcbb0a81ce2d064da369353182a1f6eb7472a6d2e738dd89b0cd008de9f1f17946f9b8f5ddfcf4e8a5949c1a languageName: node linkType: hard "uc.micro@npm:^1.0.1, uc.micro@npm:^1.0.5": version: 1.0.6 resolution: "uc.micro@npm:1.0.6" - checksum: 6898bb556319a38e9cf175e3628689347bd26fec15fc6b29fa38e0045af63075ff3fea4cf1fdba9db46c9f0cbf07f2348cd8844889dd31ebd288c29fe0d27e7a + checksum: 10/6898bb556319a38e9cf175e3628689347bd26fec15fc6b29fa38e0045af63075ff3fea4cf1fdba9db46c9f0cbf07f2348cd8844889dd31ebd288c29fe0d27e7a languageName: node linkType: hard @@ -9051,21 +9027,21 @@ __metadata: resolution: "uglify-js@npm:3.17.4" bin: uglifyjs: bin/uglifyjs - checksum: 4c0b800e0ff192079d2c3ce8414fd3b656a570028c7c79af5c29c53d5c532b68bbcae4ad47307f89c2ee124d11826fff7a136b59d5c5bb18422bcdf5568afe1e + checksum: 10/4c0b800e0ff192079d2c3ce8414fd3b656a570028c7c79af5c29c53d5c532b68bbcae4ad47307f89c2ee124d11826fff7a136b59d5c5bb18422bcdf5568afe1e languageName: node linkType: hard "underscore@npm:^1.12.1": version: 1.13.6 resolution: "underscore@npm:1.13.6" - checksum: 58cf5dc42cb0ac99c146ae4064792c0a2cc84f3a3c4ad88f5082e79057dfdff3371d896d1ec20379e9ece2450d94fa78f2ef5bfefc199ba320653e32c009bd66 + checksum: 10/58cf5dc42cb0ac99c146ae4064792c0a2cc84f3a3c4ad88f5082e79057dfdff3371d896d1ec20379e9ece2450d94fa78f2ef5bfefc199ba320653e32c009bd66 languageName: node linkType: hard "undici-types@npm:~5.26.4": version: 5.26.5 resolution: "undici-types@npm:5.26.5" - checksum: 0097779d94bc0fd26f0418b3a05472410408877279141ded2bd449167be1aed7ea5b76f756562cb3586a07f251b90799bab22d9019ceba49c037c76445f7cddd + checksum: 10/0097779d94bc0fd26f0418b3a05472410408877279141ded2bd449167be1aed7ea5b76f756562cb3586a07f251b90799bab22d9019ceba49c037c76445f7cddd languageName: node linkType: hard @@ -9074,7 +9050,7 @@ __metadata: resolution: "unique-filename@npm:2.0.1" dependencies: unique-slug: "npm:^3.0.0" - checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f + checksum: 10/807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f languageName: node linkType: hard @@ -9083,7 +9059,7 @@ __metadata: resolution: "unique-filename@npm:3.0.0" dependencies: unique-slug: "npm:^4.0.0" - checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + checksum: 10/8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df languageName: node linkType: hard @@ -9092,7 +9068,7 @@ __metadata: resolution: "unique-slug@npm:3.0.0" dependencies: imurmurhash: "npm:^0.1.4" - checksum: 26fc5bc209a875956dd5e84ca39b89bc3be777b112504667c35c861f9547df95afc80439358d836b878b6d91f6ee21fe5ba1a966e9ec2e9f071ddf3fd67d45ee + checksum: 10/26fc5bc209a875956dd5e84ca39b89bc3be777b112504667c35c861f9547df95afc80439358d836b878b6d91f6ee21fe5ba1a966e9ec2e9f071ddf3fd67d45ee languageName: node linkType: hard @@ -9101,7 +9077,7 @@ __metadata: resolution: "unique-slug@npm:4.0.0" dependencies: imurmurhash: "npm:^0.1.4" - checksum: 40912a8963fc02fb8b600cf50197df4a275c602c60de4cac4f75879d3c48558cfac48de08a25cc10df8112161f7180b3bbb4d662aadb711568602f9eddee54f0 + checksum: 10/40912a8963fc02fb8b600cf50197df4a275c602c60de4cac4f75879d3c48558cfac48de08a25cc10df8112161f7180b3bbb4d662aadb711568602f9eddee54f0 languageName: node linkType: hard @@ -9110,46 +9086,28 @@ __metadata: resolution: "unique-string@npm:3.0.0" dependencies: crypto-random-string: "npm:^4.0.0" - checksum: 1a1e2e7d02eab1bb10f720475da735e1990c8a5ff34edd1a3b6bc31590cb4210b7a1233d779360cc622ce11c211e43afa1628dd658f35d3e6a89964b622940df + checksum: 10/1a1e2e7d02eab1bb10f720475da735e1990c8a5ff34edd1a3b6bc31590cb4210b7a1233d779360cc622ce11c211e43afa1628dd658f35d3e6a89964b622940df languageName: node linkType: hard "universalify@npm:^2.0.0": version: 2.0.1 resolution: "universalify@npm:2.0.1" - checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 + checksum: 10/ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 languageName: node linkType: hard "unpipe@npm:1.0.0, unpipe@npm:~1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" - checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 + checksum: 10/4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 languageName: node linkType: hard "untildify@npm:^4.0.0": version: 4.0.0 resolution: "untildify@npm:4.0.0" - checksum: 39ced9c418a74f73f0a56e1ba4634b4d959422dff61f4c72a8e39f60b99380c1b45ed776fbaa0a4101b157e4310d873ad7d114e8534ca02609b4916bb4187fb9 - languageName: node - linkType: hard - -"unzipper@npm:^0.10.14": - version: 0.10.14 - resolution: "unzipper@npm:0.10.14" - dependencies: - big-integer: "npm:^1.6.17" - binary: "npm:~0.3.0" - bluebird: "npm:~3.4.1" - buffer-indexof-polyfill: "npm:~1.0.0" - duplexer2: "npm:~0.1.4" - fstream: "npm:^1.0.12" - graceful-fs: "npm:^4.2.2" - listenercount: "npm:~1.0.1" - readable-stream: "npm:~2.3.6" - setimmediate: "npm:~1.0.4" - checksum: 3f7b44f3c7253bc08da2988baf559f00b261c5340625e6e5206c5d73b4dea409b89caae4048346cf9f215d3cdf930e3bdee98edac5e0abc843eed765c52b398d + checksum: 10/39ced9c418a74f73f0a56e1ba4634b4d959422dff61f4c72a8e39f60b99380c1b45ed776fbaa0a4101b157e4310d873ad7d114e8534ca02609b4916bb4187fb9 languageName: node linkType: hard @@ -9163,7 +9121,7 @@ __metadata: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 9074b4ef34d2ed931f27d390aafdd391ee7c45ad83c508e8fed6aaae1eb68f81999a768ed8525c6f88d4001a4fbf1b8c0268f099d0e8e72088ec5945ac796acf + checksum: 10/9074b4ef34d2ed931f27d390aafdd391ee7c45ad83c508e8fed6aaae1eb68f81999a768ed8525c6f88d4001a4fbf1b8c0268f099d0e8e72088ec5945ac796acf languageName: node linkType: hard @@ -9185,7 +9143,7 @@ __metadata: semver: "npm:^7.3.7" semver-diff: "npm:^4.0.0" xdg-basedir: "npm:^5.1.0" - checksum: 8e8f2092c9acbfd32be77558ce2aef25bc47c9ead347845bc8cd1984eb57e458d223bceee2bb58c60cfaef5f81eb026c5609c9c26ade042aadfe6904bd5d8c2e + checksum: 10/8e8f2092c9acbfd32be77558ce2aef25bc47c9ead347845bc8cd1984eb57e458d223bceee2bb58c60cfaef5f81eb026c5609c9c26ade042aadfe6904bd5d8c2e languageName: node linkType: hard @@ -9194,35 +9152,35 @@ __metadata: resolution: "uri-js@npm:4.4.1" dependencies: punycode: "npm:^2.1.0" - checksum: b271ca7e3d46b7160222e3afa3e531505161c9a4e097febae9664e4b59912f4cbe94861361a4175edac3a03fee99d91e44b6a58c17a634bc5a664b19fc76fbcb + checksum: 10/b271ca7e3d46b7160222e3afa3e531505161c9a4e097febae9664e4b59912f4cbe94861361a4175edac3a03fee99d91e44b6a58c17a634bc5a664b19fc76fbcb languageName: node linkType: hard "url-join@npm:^4.0.1": version: 4.0.1 resolution: "url-join@npm:4.0.1" - checksum: b53b256a9a36ed6b0f6768101e78ca97f32d7b935283fd29ce19d0bbfb6f88aa80aa6c03fd87f2f8978ab463a6539f597a63051e7086f3379685319a7495f709 + checksum: 10/b53b256a9a36ed6b0f6768101e78ca97f32d7b935283fd29ce19d0bbfb6f88aa80aa6c03fd87f2f8978ab463a6539f597a63051e7086f3379685319a7495f709 languageName: node linkType: hard "utf8-byte-length@npm:^1.0.1": version: 1.0.4 resolution: "utf8-byte-length@npm:1.0.4" - checksum: f188ca076ec094d58e7009fcc32623c5830c7f0f3e15802bfa4fdd1e759454a481fc4ac05e0fa83b7736e77af628a9ee0e57dcc89683d688fde3811473e42143 + checksum: 10/f188ca076ec094d58e7009fcc32623c5830c7f0f3e15802bfa4fdd1e759454a481fc4ac05e0fa83b7736e77af628a9ee0e57dcc89683d688fde3811473e42143 languageName: node linkType: hard "util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" - checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + checksum: 10/474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 languageName: node linkType: hard "utils-merge@npm:1.0.1": version: 1.0.1 resolution: "utils-merge@npm:1.0.1" - checksum: 5d6949693d58cb2e636a84f3ee1c6e7b2f9c16cb1d42d0ecb386d8c025c69e327205aa1c69e2868cc06a01e5e20681fbba55a4e0ed0cce913d60334024eae798 + checksum: 10/5d6949693d58cb2e636a84f3ee1c6e7b2f9c16cb1d42d0ecb386d8c025c69e327205aa1c69e2868cc06a01e5e20681fbba55a4e0ed0cce913d60334024eae798 languageName: node linkType: hard @@ -9231,7 +9189,7 @@ __metadata: resolution: "uuid@npm:8.3.2" bin: uuid: dist/bin/uuid - checksum: 9a5f7aa1d6f56dd1e8d5f2478f855f25c645e64e26e347a98e98d95781d5ed20062d6cca2eecb58ba7c84bc3910be95c0451ef4161906abaab44f9cb68ffbdd1 + checksum: 10/9a5f7aa1d6f56dd1e8d5f2478f855f25c645e64e26e347a98e98d95781d5ed20062d6cca2eecb58ba7c84bc3910be95c0451ef4161906abaab44f9cb68ffbdd1 languageName: node linkType: hard @@ -9240,14 +9198,14 @@ __metadata: resolution: "uuid@npm:9.0.1" bin: uuid: dist/bin/uuid - checksum: 9d0b6adb72b736e36f2b1b53da0d559125ba3e39d913b6072f6f033e0c87835b414f0836b45bcfaf2bdf698f92297fea1c3cc19b0b258bc182c9c43cc0fab9f2 + checksum: 10/9d0b6adb72b736e36f2b1b53da0d559125ba3e39d913b6072f6f033e0c87835b414f0836b45bcfaf2bdf698f92297fea1c3cc19b0b258bc182c9c43cc0fab9f2 languageName: node linkType: hard "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" - checksum: 88d3423a52b6aaf1836be779cab12f7016d47ad8430dffba6edf766695e6d90ad4adaa3d8eeb512cc05924f3e246c4a4ca51e089dccf4402caa536b5e5be8961 + checksum: 10/88d3423a52b6aaf1836be779cab12f7016d47ad8430dffba6edf766695e6d90ad4adaa3d8eeb512cc05924f3e246c4a4ca51e089dccf4402caa536b5e5be8961 languageName: node linkType: hard @@ -9257,7 +9215,7 @@ __metadata: dependencies: spdx-correct: "npm:^3.0.0" spdx-expression-parse: "npm:^3.0.0" - checksum: 86242519b2538bb8aeb12330edebb61b4eb37fd35ef65220ab0b03a26c0592c1c8a7300d32da3cde5abd08d18d95e8dabfad684b5116336f6de9e6f207eec224 + checksum: 10/86242519b2538bb8aeb12330edebb61b4eb37fd35ef65220ab0b03a26c0592c1c8a7300d32da3cde5abd08d18d95e8dabfad684b5116336f6de9e6f207eec224 languageName: node linkType: hard @@ -9266,66 +9224,66 @@ __metadata: resolution: "validate-npm-package-name@npm:5.0.0" dependencies: builtins: "npm:^5.0.0" - checksum: 5342a994986199b3c28e53a8452a14b2bb5085727691ea7aa0d284a6606b127c371e0925ae99b3f1ef7cc7d2c9de75f52eb61a3d1cc45e39bca1e3a9444cbb4e + checksum: 10/5342a994986199b3c28e53a8452a14b2bb5085727691ea7aa0d284a6606b127c371e0925ae99b3f1ef7cc7d2c9de75f52eb61a3d1cc45e39bca1e3a9444cbb4e languageName: node linkType: hard "validator@npm:^13.6.0": version: 13.11.0 resolution: "validator@npm:13.11.0" - checksum: 4bf094641eb71729c06a42d669840e7189597ba655a8264adabac9bf03f95cd6fde5fbc894b0a13ee861bd4a852f56d2afdc9391aeaeb3fc0f9633a974140e12 + checksum: 10/4bf094641eb71729c06a42d669840e7189597ba655a8264adabac9bf03f95cd6fde5fbc894b0a13ee861bd4a852f56d2afdc9391aeaeb3fc0f9633a974140e12 languageName: node linkType: hard "vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" - checksum: 31389debef15a480849b8331b220782230b9815a8e0dbb7b9a8369559aed2e9a7800cd904d4371ea74f4c3527db456dc8e7ac5befce5f0d289014dbdf47b2242 + checksum: 10/31389debef15a480849b8331b220782230b9815a8e0dbb7b9a8369559aed2e9a7800cd904d4371ea74f4c3527db456dc8e7ac5befce5f0d289014dbdf47b2242 languageName: node linkType: hard -"vscode-extension-tester-locators@npm:^3.10.0": - version: 3.10.0 - resolution: "vscode-extension-tester-locators@npm:3.10.0" +"vscode-extension-tester-locators@npm:^3.11.0": + version: 3.11.0 + resolution: "vscode-extension-tester-locators@npm:3.11.0" peerDependencies: - monaco-page-objects: ^3.12.0 + monaco-page-objects: ^3.13.0 selenium-webdriver: ^4.6.1 - checksum: 7c8e7bff6bc57c70c438b37aa0f7f093981e6cfed9adf139caa28b2e396679570d88c29e8dea3e112dfcd85b532b00380a3f71dbefc096ac29e4a3beaf6eb551 + checksum: 10/dd252927373de0da3e9061ed75a70d8265f9cf78880903373c1b7e433f43a27016cfd63dea793492db553eabf21052ea4eec427d3107858a1755ecf23a05f84d languageName: node linkType: hard -"vscode-extension-tester@npm:^7.0.0": - version: 7.0.0 - resolution: "vscode-extension-tester@npm:7.0.0" +"vscode-extension-tester@npm:^7.2.0": + version: 7.2.0 + resolution: "vscode-extension-tester@npm:7.2.0" dependencies: "@types/selenium-webdriver": "npm:^4.1.21" - "@vscode/vsce": "npm:^2.22.0" - commander: "npm:^11.1.0" + "@types/targz": "npm:^1.0.4" + "@vscode/vsce": "npm:^2.24.0" + commander: "npm:^12.0.0" compare-versions: "npm:^6.1.0" fs-extra: "npm:^11.2.0" glob: "npm:^10.3.10" got: "npm:^13.0.0" hpagent: "npm:^1.2.0" js-yaml: "npm:^4.1.0" - monaco-page-objects: "npm:^3.12.0" + monaco-page-objects: "npm:^3.13.1" sanitize-filename: "npm:^1.6.3" - selenium-webdriver: "npm:^4.16.0" + selenium-webdriver: "npm:^4.18.1" targz: "npm:^1.0.1" - unzipper: "npm:^0.10.14" - vscode-extension-tester-locators: "npm:^3.10.0" + vscode-extension-tester-locators: "npm:^3.11.0" peerDependencies: mocha: ">=5.2.0" typescript: ">=4.6.2" bin: extest: out/cli.js - checksum: 82fe7a5e4fc4074ef7d5c0d7508dc86b0738921fb2060d985a36dfdbd2613e09eb06e243a7d39a2ac2422d1517e2dd7e6bcb336731402ef6ac8803ad5f202f3a + checksum: 10/64a42a8fe9315991b3a94521f9be75e4a29ee72f243940b9b36abf0bde977e4aad4705541646291ffd101d54609d809d2aee83812f8690c661fe46a8977b8d9e languageName: node linkType: hard "vscode-jsonrpc@npm:8.1.0": version: 8.1.0 resolution: "vscode-jsonrpc@npm:8.1.0" - checksum: e3378ae849e51c1b13a2b985b83c05b082dc9b033df958bc7c3d3a43628be0fccacca890a01ec6263559be9aaac7a679abc288c36f0c9fab6f2f093297c97ac2 + checksum: 10/e3378ae849e51c1b13a2b985b83c05b082dc9b033df958bc7c3d3a43628be0fccacca890a01ec6263559be9aaac7a679abc288c36f0c9fab6f2f093297c97ac2 languageName: node linkType: hard @@ -9336,7 +9294,7 @@ __metadata: minimatch: "npm:^5.1.0" semver: "npm:^7.3.7" vscode-languageserver-protocol: "npm:3.17.3" - checksum: b841e6d59ed0eb4b191fc48f0c66a328c5b27865a88ea273b793e2a42860c40b43d697b213dba0da375bc88e7e400aab3f88626929573e3987ef38badf5fa51a + checksum: 10/b841e6d59ed0eb4b191fc48f0c66a328c5b27865a88ea273b793e2a42860c40b43d697b213dba0da375bc88e7e400aab3f88626929573e3987ef38badf5fa51a languageName: node linkType: hard @@ -9346,21 +9304,21 @@ __metadata: dependencies: vscode-jsonrpc: "npm:8.1.0" vscode-languageserver-types: "npm:3.17.3" - checksum: b1cc706bcf39368959cf558720b55ab604a882040dc2bfd1b492762ef9aaced0405a453cd7f951ef804ef755ce92ec6f112230c17ae640c418c793dfd7b62546 + checksum: 10/b1cc706bcf39368959cf558720b55ab604a882040dc2bfd1b492762ef9aaced0405a453cd7f951ef804ef755ce92ec6f112230c17ae640c418c793dfd7b62546 languageName: node linkType: hard "vscode-languageserver-textdocument@npm:^1.0.11": version: 1.0.11 resolution: "vscode-languageserver-textdocument@npm:1.0.11" - checksum: 6096d2a85570e819e01ff406de7c88c48211e6874c6fc71df92193aa8b5aadf40591e44f033d634a95d04975d7aad29049d3eccab617ca41c189ae325aadb913 + checksum: 10/6096d2a85570e819e01ff406de7c88c48211e6874c6fc71df92193aa8b5aadf40591e44f033d634a95d04975d7aad29049d3eccab617ca41c189ae325aadb913 languageName: node linkType: hard "vscode-languageserver-types@npm:3.17.3": version: 3.17.3 resolution: "vscode-languageserver-types@npm:3.17.3" - checksum: b2032b9c4be2f04690eddf8ba5a6962ca6a850edf88915326754eafab593d863c32f733283b287460d8204425a8a986865851c9f8812706e85b90c6d73bee257 + checksum: 10/b2032b9c4be2f04690eddf8ba5a6962ca6a850edf88915326754eafab593d863c32f733283b287460d8204425a8a986865851c9f8812706e85b90c6d73bee257 languageName: node linkType: hard @@ -9371,14 +9329,14 @@ __metadata: vscode-languageserver-protocol: "npm:3.17.3" bin: installServerIntoExtension: bin/installServerIntoExtension - checksum: 3aa3d2f421e478e20b418e134fada4eb480feacdf3d5ea77b972093e61476e390cb1cc53cf42361a15fabecd0b88cbb8fb5bdc1b5fd908a1c125e1324e8f460f + checksum: 10/3aa3d2f421e478e20b418e134fada4eb480feacdf3d5ea77b972093e61476e390cb1cc53cf42361a15fabecd0b88cbb8fb5bdc1b5fd908a1c125e1324e8f460f languageName: node linkType: hard "vscode-uri@npm:^3.0.8": version: 3.0.8 resolution: "vscode-uri@npm:3.0.8" - checksum: e882d6b679e0d053cbc042893c0951a135d899a192b62cd07f0a8924f11ae722067a8d6b1b5b147034becf57faf9fff9fb543b17b749fd0f17db1f54f783f07c + checksum: 10/e882d6b679e0d053cbc042893c0951a135d899a192b62cd07f0a8924f11ae722067a8d6b1b5b147034becf57faf9fff9fb543b17b749fd0f17db1f54f783f07c languageName: node linkType: hard @@ -9393,7 +9351,7 @@ __metadata: rxjs: "npm:^7.8.1" bin: wait-on: bin/wait-on - checksum: 00299e3b651c70d7082d02b93d9d4784cbe851914f1674d795d578d4826876193fdc7bee7e9491264b7c2d242ac9fe6e1fd09e1143409f730f13a7ee2da67fff + checksum: 10/00299e3b651c70d7082d02b93d9d4784cbe851914f1674d795d578d4826876193fdc7bee7e9491264b7c2d242ac9fe6e1fd09e1143409f730f13a7ee2da67fff languageName: node linkType: hard @@ -9402,7 +9360,7 @@ __metadata: resolution: "warnings-to-errors-webpack-plugin@npm:2.3.0" peerDependencies: webpack: ^2.2.0-rc || ^3 || ^4 || ^5 - checksum: fb575eeb013d71bc2ba7419a8221855168a87d3cdb062e7014aff9ed3fddec56ec695915115249555f51931aa9ed786df95e65c3611e78dd71a42ca55cc839d6 + checksum: 10/fb575eeb013d71bc2ba7419a8221855168a87d3cdb062e7014aff9ed3fddec56ec695915115249555f51931aa9ed786df95e65c3611e78dd71a42ca55cc839d6 languageName: node linkType: hard @@ -9412,14 +9370,14 @@ __metadata: dependencies: glob-to-regexp: "npm:^0.4.1" graceful-fs: "npm:^4.1.2" - checksum: 4280b45bc4b5d45d5579113f2a4af93b67ae1b9607cc3d86ae41cdd53ead10db5d9dc3237f24256d05ef88b28c69a02712f78e434cb7ecc8edaca134a56e8cab + checksum: 10/4280b45bc4b5d45d5579113f2a4af93b67ae1b9607cc3d86ae41cdd53ead10db5d9dc3237f24256d05ef88b28c69a02712f78e434cb7ecc8edaca134a56e8cab languageName: node linkType: hard "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" - checksum: b65b9f8d6854572a84a5c69615152b63371395f0c5dcd6729c45789052296df54314db2bc3e977df41705eacb8bc79c247cee139a63fa695192f95816ed528ad + checksum: 10/b65b9f8d6854572a84a5c69615152b63371395f0c5dcd6729c45789052296df54314db2bc3e977df41705eacb8bc79c247cee139a63fa695192f95816ed528ad languageName: node linkType: hard @@ -9451,7 +9409,7 @@ __metadata: optional: true bin: webpack-cli: bin/cli.js - checksum: 9ac3ae7c43b032051de2803d751bd3b44e1f226b931dcd56066a8e01b12734d49730903df9235e1eb1b67b2ee7451faf24a219c8f4a229c4f42c42e827eac44c + checksum: 10/9ac3ae7c43b032051de2803d751bd3b44e1f226b931dcd56066a8e01b12734d49730903df9235e1eb1b67b2ee7451faf24a219c8f4a229c4f42c42e827eac44c languageName: node linkType: hard @@ -9462,14 +9420,14 @@ __metadata: clone-deep: "npm:^4.0.1" flat: "npm:^5.0.2" wildcard: "npm:^2.0.0" - checksum: fa46ab200f17d06c7cb49fc37ad91f15769753953c9724adac1061fa305a2a223cb37c3ed25a5f501580c91f11a0800990fe3814c70a77bf1aa5b3fca45a2ac6 + checksum: 10/fa46ab200f17d06c7cb49fc37ad91f15769753953c9724adac1061fa305a2a223cb37c3ed25a5f501580c91f11a0800990fe3814c70a77bf1aa5b3fca45a2ac6 languageName: node linkType: hard "webpack-sources@npm:^3.2.3": version: 3.2.3 resolution: "webpack-sources@npm:3.2.3" - checksum: a661f41795d678b7526ae8a88cd1b3d8ce71a7d19b6503da8149b2e667fc7a12f9b899041c1665d39e38245ed3a59ab68de648ea31040c3829aa695a5a45211d + checksum: 10/a661f41795d678b7526ae8a88cd1b3d8ce71a7d19b6503da8149b2e667fc7a12f9b899041c1665d39e38245ed3a59ab68de648ea31040c3829aa695a5a45211d languageName: node linkType: hard @@ -9506,7 +9464,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 7ff6286be54e00b2580274d8009b014fd03c6d8ade898434376c739e460da1f3a63a51006966024710061f440d6723813365b8a54ae6bcb93b94867c42cf017e + checksum: 10/7ff6286be54e00b2580274d8009b014fd03c6d8ade898434376c739e460da1f3a63a51006966024710061f440d6723813365b8a54ae6bcb93b94867c42cf017e languageName: node linkType: hard @@ -9516,14 +9474,14 @@ __metadata: dependencies: tr46: "npm:~0.0.3" webidl-conversions: "npm:^3.0.0" - checksum: f95adbc1e80820828b45cc671d97da7cd5e4ef9deb426c31bcd5ab00dc7103042291613b3ef3caec0a2335ed09e0d5ed026c940755dbb6d404e2b27f940fdf07 + checksum: 10/f95adbc1e80820828b45cc671d97da7cd5e4ef9deb426c31bcd5ab00dc7103042291613b3ef3caec0a2335ed09e0d5ed026c940755dbb6d404e2b27f940fdf07 languageName: node linkType: hard "which-module@npm:^2.0.0": version: 2.0.1 resolution: "which-module@npm:2.0.1" - checksum: 1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be + checksum: 10/1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be languageName: node linkType: hard @@ -9534,7 +9492,7 @@ __metadata: isexe: "npm:^2.0.0" bin: which: ./bin/which - checksum: 549dcf1752f3ee7fbb64f5af2eead4b9a2f482108b7de3e85c781d6c26d8cf6a52d37cfbe0642a155fa6470483fe892661a859c03157f24c669cf115f3bbab5e + checksum: 10/549dcf1752f3ee7fbb64f5af2eead4b9a2f482108b7de3e85c781d6c26d8cf6a52d37cfbe0642a155fa6470483fe892661a859c03157f24c669cf115f3bbab5e languageName: node linkType: hard @@ -9545,7 +9503,7 @@ __metadata: isexe: "npm:^2.0.0" bin: node-which: ./bin/node-which - checksum: 4782f8a1d6b8fc12c65e968fea49f59752bf6302dc43036c3bf87da718a80710f61a062516e9764c70008b487929a73546125570acea95c5b5dcc8ac3052c70f + checksum: 10/4782f8a1d6b8fc12c65e968fea49f59752bf6302dc43036c3bf87da718a80710f61a062516e9764c70008b487929a73546125570acea95c5b5dcc8ac3052c70f languageName: node linkType: hard @@ -9556,7 +9514,7 @@ __metadata: isexe: "npm:^2.0.0" bin: node-which: bin/which.js - checksum: adf720fe9d84be2d9190458194f814b5e9015ae4b88711b150f30d0f4d0b646544794b86f02c7ebeec1db2029bc3e83a7ff156f542d7521447e5496543e26890 + checksum: 10/adf720fe9d84be2d9190458194f814b5e9015ae4b88711b150f30d0f4d0b646544794b86f02c7ebeec1db2029bc3e83a7ff156f542d7521447e5496543e26890 languageName: node linkType: hard @@ -9567,7 +9525,7 @@ __metadata: isexe: "npm:^3.1.1" bin: node-which: bin/which.js - checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + checksum: 10/f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 languageName: node linkType: hard @@ -9576,7 +9534,7 @@ __metadata: resolution: "wide-align@npm:1.1.5" dependencies: string-width: "npm:^1.0.2 || 2 || 3 || 4" - checksum: d5f8027b9a8255a493a94e4ec1b74a27bff6679d5ffe29316a3215e4712945c84ef73ca4045c7e20ae7d0c72f5f57f296e04a4928e773d4276a2f1222e4c2e99 + checksum: 10/d5f8027b9a8255a493a94e4ec1b74a27bff6679d5ffe29316a3215e4712945c84ef73ca4045c7e20ae7d0c72f5f57f296e04a4928e773d4276a2f1222e4c2e99 languageName: node linkType: hard @@ -9585,28 +9543,28 @@ __metadata: resolution: "widest-line@npm:4.0.1" dependencies: string-width: "npm:^5.0.1" - checksum: 64c48cf27171221be5f86fc54b94dd29879165bdff1a7aa92dde723d9a8c99fb108312768a5d62c8c2b80b701fa27bbd36a1ddc58367585cd45c0db7920a0cba + checksum: 10/64c48cf27171221be5f86fc54b94dd29879165bdff1a7aa92dde723d9a8c99fb108312768a5d62c8c2b80b701fa27bbd36a1ddc58367585cd45c0db7920a0cba languageName: node linkType: hard "wildcard@npm:^2.0.0": version: 2.0.1 resolution: "wildcard@npm:2.0.1" - checksum: e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c + checksum: 10/e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c languageName: node linkType: hard "wordwrap@npm:^1.0.0": version: 1.0.0 resolution: "wordwrap@npm:1.0.0" - checksum: 497d40beb2bdb08e6d38754faa17ce20b0bf1306327f80cb777927edb23f461ee1f6bc659b3c3c93f26b08e1cf4b46acc5bae8fda1f0be3b5ab9a1a0211034cd + checksum: 10/497d40beb2bdb08e6d38754faa17ce20b0bf1306327f80cb777927edb23f461ee1f6bc659b3c3c93f26b08e1cf4b46acc5bae8fda1f0be3b5ab9a1a0211034cd languageName: node linkType: hard "workerpool@npm:6.2.1": version: 6.2.1 resolution: "workerpool@npm:6.2.1" - checksum: 3e637f76320cab92eaeffa4fbefb351db02e20aa29245d8ee05fa7c088780ef7b4446bfafff2668a22fd94b7d9d97c7020117036ac77a76370ecea278b9a9b91 + checksum: 10/3e637f76320cab92eaeffa4fbefb351db02e20aa29245d8ee05fa7c088780ef7b4446bfafff2668a22fd94b7d9d97c7020117036ac77a76370ecea278b9a9b91 languageName: node linkType: hard @@ -9617,7 +9575,7 @@ __metadata: ansi-styles: "npm:^4.0.0" string-width: "npm:^4.1.0" strip-ansi: "npm:^6.0.0" - checksum: cebdaeca3a6880da410f75209e68cd05428580de5ad24535f22696d7d9cab134d1f8498599f344c3cf0fb37c1715807a183778d8c648d6cc0cb5ff2bb4236540 + checksum: 10/cebdaeca3a6880da410f75209e68cd05428580de5ad24535f22696d7d9cab134d1f8498599f344c3cf0fb37c1715807a183778d8c648d6cc0cb5ff2bb4236540 languageName: node linkType: hard @@ -9628,7 +9586,7 @@ __metadata: ansi-styles: "npm:^4.0.0" string-width: "npm:^4.1.0" strip-ansi: "npm:^6.0.0" - checksum: 0d64f2d438e0b555e693b95aee7b2689a12c3be5ac458192a1ce28f542a6e9e59ddfecc37520910c2c88eb1f82a5411260566dba5064e8f9895e76e169e76187 + checksum: 10/0d64f2d438e0b555e693b95aee7b2689a12c3be5ac458192a1ce28f542a6e9e59ddfecc37520910c2c88eb1f82a5411260566dba5064e8f9895e76e169e76187 languageName: node linkType: hard @@ -9639,14 +9597,14 @@ __metadata: ansi-styles: "npm:^6.1.0" string-width: "npm:^5.0.1" strip-ansi: "npm:^7.0.1" - checksum: 7b1e4b35e9bb2312d2ee9ee7dc95b8cb5f8b4b5a89f7dde5543fe66c1e3715663094defa50d75454ac900bd210f702d575f15f3f17fa9ec0291806d2578d1ddf + checksum: 10/7b1e4b35e9bb2312d2ee9ee7dc95b8cb5f8b4b5a89f7dde5543fe66c1e3715663094defa50d75454ac900bd210f702d575f15f3f17fa9ec0291806d2578d1ddf languageName: node linkType: hard "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" - checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + checksum: 10/159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 languageName: node linkType: hard @@ -9658,7 +9616,7 @@ __metadata: is-typedarray: "npm:^1.0.0" signal-exit: "npm:^3.0.2" typedarray-to-buffer: "npm:^3.1.5" - checksum: 0955ab94308b74d32bc252afe69d8b42ba4b8a28b8d79f399f3f405969f82623f981e35d13129a52aa2973450f342107c06d86047572637584e85a1c0c246bf3 + checksum: 10/0955ab94308b74d32bc252afe69d8b42ba4b8a28b8d79f399f3f405969f82623f981e35d13129a52aa2973450f342107c06d86047572637584e85a1c0c246bf3 languageName: node linkType: hard @@ -9673,14 +9631,14 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 7c511c59e979bd37b63c3aea4a8e4d4163204f00bd5633c053b05ed67835481995f61a523b0ad2b603566f9a89b34cb4965cb9fab9649fbfebd8f740cea57f17 + checksum: 10/7c511c59e979bd37b63c3aea4a8e4d4163204f00bd5633c053b05ed67835481995f61a523b0ad2b603566f9a89b34cb4965cb9fab9649fbfebd8f740cea57f17 languageName: node linkType: hard "xdg-basedir@npm:^5.0.1, xdg-basedir@npm:^5.1.0": version: 5.1.0 resolution: "xdg-basedir@npm:5.1.0" - checksum: b60e8a2c663ccb1dac77c2d913f3b96de48dafbfa083657171d3d50e10820b8a04bb4edfe9f00808c8c20e5f5355e1927bea9029f03136e29265cb98291e1fea + checksum: 10/b60e8a2c663ccb1dac77c2d913f3b96de48dafbfa083657171d3d50e10820b8a04bb4edfe9f00808c8c20e5f5355e1927bea9029f03136e29265cb98291e1fea languageName: node linkType: hard @@ -9690,77 +9648,77 @@ __metadata: dependencies: sax: "npm:>=0.6.0" xmlbuilder: "npm:~11.0.0" - checksum: 27c4d759214e99be5ec87ee5cb1290add427fa43df509d3b92d10152b3806fd2f7c9609697a18b158ccf2caa01e96af067cdba93196f69ca10c90e4f79a08896 + checksum: 10/27c4d759214e99be5ec87ee5cb1290add427fa43df509d3b92d10152b3806fd2f7c9609697a18b158ccf2caa01e96af067cdba93196f69ca10c90e4f79a08896 languageName: node linkType: hard "xmlbuilder@npm:~11.0.0": version: 11.0.1 resolution: "xmlbuilder@npm:11.0.1" - checksum: c8c3d208783718db5b285101a736cd8e6b69a5c265199a0739abaa93d1a1b7de5489fd16df4e776e18b2c98cb91f421a7349e99fd8c1ebeb44ecfed72a25091a + checksum: 10/c8c3d208783718db5b285101a736cd8e6b69a5c265199a0739abaa93d1a1b7de5489fd16df4e776e18b2c98cb91f421a7349e99fd8c1ebeb44ecfed72a25091a languageName: node linkType: hard "xtend@npm:^4.0.0, xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" - checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + checksum: 10/ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a languageName: node linkType: hard "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3" - checksum: 392870b2a100bbc643bc035fe3a89cef5591b719c7bdc8721bcdb3d27ab39fa4870acdca67b0ee096e146d769f311d68eda6b8195a6d970f227795061923013f + checksum: 10/392870b2a100bbc643bc035fe3a89cef5591b719c7bdc8721bcdb3d27ab39fa4870acdca67b0ee096e146d769f311d68eda6b8195a6d970f227795061923013f languageName: node linkType: hard "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" - checksum: 5f1b5f95e3775de4514edbb142398a2c37849ccfaf04a015be5d75521e9629d3be29bd4432d23c57f37e5b61ade592fb0197022e9993f81a06a5afbdcda9346d + checksum: 10/5f1b5f95e3775de4514edbb142398a2c37849ccfaf04a015be5d75521e9629d3be29bd4432d23c57f37e5b61ade592fb0197022e9993f81a06a5afbdcda9346d languageName: node linkType: hard "yallist@npm:^2.1.2": version: 2.1.2 resolution: "yallist@npm:2.1.2" - checksum: 75fc7bee4821f52d1c6e6021b91b3e079276f1a9ce0ad58da3c76b79a7e47d6f276d35e206a96ac16c1cf48daee38a8bb3af0b1522a3d11c8ffe18f898828832 + checksum: 10/75fc7bee4821f52d1c6e6021b91b3e079276f1a9ce0ad58da3c76b79a7e47d6f276d35e206a96ac16c1cf48daee38a8bb3af0b1522a3d11c8ffe18f898828832 languageName: node linkType: hard "yallist@npm:^3.0.2": version: 3.1.1 resolution: "yallist@npm:3.1.1" - checksum: 9af0a4329c3c6b779ac4736c69fae4190ac03029fa27c1aef4e6bcc92119b73dea6fe5db5fe881fb0ce2a0e9539a42cdf60c7c21eda04d1a0b8c082e38509efb + checksum: 10/9af0a4329c3c6b779ac4736c69fae4190ac03029fa27c1aef4e6bcc92119b73dea6fe5db5fe881fb0ce2a0e9539a42cdf60c7c21eda04d1a0b8c082e38509efb languageName: node linkType: hard "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" - checksum: 4cb02b42b8a93b5cf50caf5d8e9beb409400a8a4d85e83bb0685c1457e9ac0b7a00819e9f5991ac25ffabb56a78e2f017c1acc010b3a1babfe6de690ba531abd + checksum: 10/4cb02b42b8a93b5cf50caf5d8e9beb409400a8a4d85e83bb0685c1457e9ac0b7a00819e9f5991ac25ffabb56a78e2f017c1acc010b3a1babfe6de690ba531abd languageName: node linkType: hard "yaml@npm:^1.10.0": version: 1.10.2 resolution: "yaml@npm:1.10.2" - checksum: e088b37b4d4885b70b50c9fa1b7e54bd2e27f5c87205f9deaffd1fb293ab263d9c964feadb9817a7b129a5bf30a06582cb08750f810568ecc14f3cdbabb79cb3 + checksum: 10/e088b37b4d4885b70b50c9fa1b7e54bd2e27f5c87205f9deaffd1fb293ab263d9c964feadb9817a7b129a5bf30a06582cb08750f810568ecc14f3cdbabb79cb3 languageName: node linkType: hard "yaml@npm:^2.3.4": version: 2.3.4 resolution: "yaml@npm:2.3.4" - checksum: f8207ce43065a22268a2806ea6a0fa3974c6fde92b4b2fa0082357e487bc333e85dc518910007e7ac001b532c7c84bd3eccb6c7757e94182b564028b0008f44b + checksum: 10/f8207ce43065a22268a2806ea6a0fa3974c6fde92b4b2fa0082357e487bc333e85dc518910007e7ac001b532c7c84bd3eccb6c7757e94182b564028b0008f44b languageName: node linkType: hard "yargs-parser@npm:20.2.4": version: 20.2.4 resolution: "yargs-parser@npm:20.2.4" - checksum: db8f251ae40e24782d5c089ed86883ba3c0ce7f3c174002a67ec500802f928df9d505fea5d04829769221ce20b0f69f6fb1138fbb2e2fb102e3e9d426d20edab + checksum: 10/db8f251ae40e24782d5c089ed86883ba3c0ce7f3c174002a67ec500802f928df9d505fea5d04829769221ce20b0f69f6fb1138fbb2e2fb102e3e9d426d20edab languageName: node linkType: hard @@ -9770,21 +9728,21 @@ __metadata: dependencies: camelcase: "npm:^5.0.0" decamelize: "npm:^1.2.0" - checksum: 235bcbad5b7ca13e5abc54df61d42f230857c6f83223a38e4ed7b824681875b7f8b6ed52139d88a3ad007050f28dc0324b3c805deac7db22ae3b4815dae0e1bf + checksum: 10/235bcbad5b7ca13e5abc54df61d42f230857c6f83223a38e4ed7b824681875b7f8b6ed52139d88a3ad007050f28dc0324b3c805deac7db22ae3b4815dae0e1bf languageName: node linkType: hard "yargs-parser@npm:^20.2.2": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" - checksum: 0188f430a0f496551d09df6719a9132a3469e47fe2747208b1dd0ab2bb0c512a95d0b081628bbca5400fb20dbf2fabe63d22badb346cecadffdd948b049f3fcc + checksum: 10/0188f430a0f496551d09df6719a9132a3469e47fe2747208b1dd0ab2bb0c512a95d0b081628bbca5400fb20dbf2fabe63d22badb346cecadffdd948b049f3fcc languageName: node linkType: hard "yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" - checksum: 9dc2c217ea3bf8d858041252d43e074f7166b53f3d010a8c711275e09cd3d62a002969a39858b92bbda2a6a63a585c7127014534a560b9c69ed2d923d113406e + checksum: 10/9dc2c217ea3bf8d858041252d43e074f7166b53f3d010a8c711275e09cd3d62a002969a39858b92bbda2a6a63a585c7127014534a560b9c69ed2d923d113406e languageName: node linkType: hard @@ -9796,7 +9754,7 @@ __metadata: decamelize: "npm:^4.0.0" flat: "npm:^5.0.2" is-plain-obj: "npm:^2.1.0" - checksum: 68f9a542c6927c3768c2f16c28f71b19008710abd6b8f8efbac6dcce26bbb68ab6503bed1d5994bdbc2df9a5c87c161110c1dfe04c6a3fe5c6ad1b0e15d9a8a3 + checksum: 10/68f9a542c6927c3768c2f16c28f71b19008710abd6b8f8efbac6dcce26bbb68ab6503bed1d5994bdbc2df9a5c87c161110c1dfe04c6a3fe5c6ad1b0e15d9a8a3 languageName: node linkType: hard @@ -9811,7 +9769,7 @@ __metadata: string-width: "npm:^4.2.0" y18n: "npm:^5.0.5" yargs-parser: "npm:^20.2.2" - checksum: 807fa21211d2117135d557f95fcd3c3d390530cda2eca0c840f1d95f0f40209dcfeb5ec18c785a1f3425896e623e3b2681e8bb7b6600060eda1c3f4804e7957e + checksum: 10/807fa21211d2117135d557f95fcd3c3d390530cda2eca0c840f1d95f0f40209dcfeb5ec18c785a1f3425896e623e3b2681e8bb7b6600060eda1c3f4804e7957e languageName: node linkType: hard @@ -9830,7 +9788,7 @@ __metadata: which-module: "npm:^2.0.0" y18n: "npm:^4.0.0" yargs-parser: "npm:^18.1.2" - checksum: bbcc82222996c0982905b668644ca363eebe6ffd6a572fbb52f0c0e8146661d8ce5af2a7df546968779bb03d1e4186f3ad3d55dfaadd1c4f0d5187c0e3a5ba16 + checksum: 10/bbcc82222996c0982905b668644ca363eebe6ffd6a572fbb52f0c0e8146661d8ce5af2a7df546968779bb03d1e4186f3ad3d55dfaadd1c4f0d5187c0e3a5ba16 languageName: node linkType: hard @@ -9845,7 +9803,7 @@ __metadata: string-width: "npm:^4.2.3" y18n: "npm:^5.0.5" yargs-parser: "npm:^21.1.1" - checksum: abb3e37678d6e38ea85485ed86ebe0d1e3464c640d7d9069805ea0da12f69d5a32df8e5625e370f9c96dd1c2dc088ab2d0a4dd32af18222ef3c4224a19471576 + checksum: 10/abb3e37678d6e38ea85485ed86ebe0d1e3464c640d7d9069805ea0da12f69d5a32df8e5625e370f9c96dd1c2dc088ab2d0a4dd32af18222ef3c4224a19471576 languageName: node linkType: hard @@ -9868,7 +9826,7 @@ __metadata: synp: "npm:^1.9.10" bin: yarn-audit-fix: target/esm/cli.mjs - checksum: 90cae23f8055801427124d7970c9c6801acf2c3dab691568344e182ceb289e15ec0f081df880952654708fd473ad4f211d91c9a805f5138c230e12fc46329c58 + checksum: 10/90cae23f8055801427124d7970c9c6801acf2c3dab691568344e182ceb289e15ec0f081df880952654708fd473ad4f211d91c9a805f5138c230e12fc46329c58 languageName: node linkType: hard @@ -9878,7 +9836,7 @@ __metadata: dependencies: buffer-crc32: "npm:~0.2.3" fd-slicer: "npm:~1.1.0" - checksum: 1e4c311050dc0cf2ee3dbe8854fe0a6cde50e420b3e561a8d97042526b4cf7a0718d6c8d89e9e526a152f4a9cec55bcea9c3617264115f48bd6704cf12a04445 + checksum: 10/1e4c311050dc0cf2ee3dbe8854fe0a6cde50e420b3e561a8d97042526b4cf7a0718d6c8d89e9e526a152f4a9cec55bcea9c3617264115f48bd6704cf12a04445 languageName: node linkType: hard @@ -9887,20 +9845,20 @@ __metadata: resolution: "yazl@npm:2.5.1" dependencies: buffer-crc32: "npm:~0.2.3" - checksum: 498ea4c6bca26130608c44db166e2f63b3437b94b7ad020ca0c161268d29517e8517146e91e51b78da100ad62feadc1a1a85aaa94aab0b2dc29b355ec75bc8f0 + checksum: 10/498ea4c6bca26130608c44db166e2f63b3437b94b7ad020ca0c161268d29517e8517146e91e51b78da100ad62feadc1a1a85aaa94aab0b2dc29b355ec75bc8f0 languageName: node linkType: hard "yn@npm:3.1.1": version: 3.1.1 resolution: "yn@npm:3.1.1" - checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + checksum: 10/2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 languageName: node linkType: hard "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" - checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + checksum: 10/f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 languageName: node linkType: hard From 0c6b28f2be7da90db085bdd7092f799266855bcf Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 15 Mar 2024 17:09:03 +0000 Subject: [PATCH 557/558] Remove devel pipeline Devel pipeline is no longer needed because we always build ansible-language-server from inside the repo. --- .github/workflows/ci.yaml | 6 ------ Taskfile.yml | 16 ---------------- 2 files changed, 22 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a4e9e9268..1aeca3137 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -60,12 +60,6 @@ jobs: SKIP_PODMAN: 1 SKIP_DOCKER: 1 - - name: devel - # this job will install latest version of ansible-language-server - # instead of the one mentioned in lock file - task-name: devel - os: ubuntu-22.04 - - name: test (macos) task-name: test os: macos-13-large diff --git a/Taskfile.yml b/Taskfile.yml index 66355301c..8040ba023 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -27,22 +27,6 @@ tasks: cmds: - echo {{.TASK}} - echo Done {{.VERSION}}! - devel: - desc: Updates the language server to latest from @main and run all tests - cmds: - - tools/clone-sibling.sh - - yarn link --relative ../ansible-language-server - - task: install - # - tools/dirty.sh - - > - bash -c 'git diff --quiet --exit-code || { - git add package.json yarn.lock && - echo "Update ansible-language-server" | - git commit --file - - ;}' - - tools/dirty.sh - - task: test - - echo "Tests passed, you can now run "task pr" to create a pull request." clean: desc: Clean up all files that not tracked by git cmds: From d4fe95d696c021cbe7d39f853df13508e8c70f94 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Fri, 15 Mar 2024 17:17:58 +0000 Subject: [PATCH 558/558] Fix --- yarn.lock | 48 ++---------------------------------------------- 1 file changed, 2 insertions(+), 46 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6ea9f2e1c..6573c89f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1457,42 +1457,7 @@ __metadata: languageName: node linkType: hard -"@vscode/vsce@npm:^2.19.0, @vscode/vsce@npm:^2.23.0": - version: 2.23.0 - resolution: "@vscode/vsce@npm:2.23.0" - dependencies: - azure-devops-node-api: "npm:^11.0.1" - chalk: "npm:^2.4.2" - cheerio: "npm:^1.0.0-rc.9" - commander: "npm:^6.2.1" - find-yarn-workspace-root: "npm:^2.0.0" - glob: "npm:^7.0.6" - hosted-git-info: "npm:^4.0.2" - jsonc-parser: "npm:^3.2.0" - keytar: "npm:^7.7.0" - leven: "npm:^3.1.0" - markdown-it: "npm:^12.3.2" - mime: "npm:^1.3.4" - minimatch: "npm:^3.0.3" - parse-semver: "npm:^1.1.1" - read: "npm:^1.0.7" - semver: "npm:^7.5.2" - tmp: "npm:^0.2.1" - typed-rest-client: "npm:^1.8.4" - url-join: "npm:^4.0.1" - xml2js: "npm:^0.5.0" - yauzl: "npm:^2.3.1" - yazl: "npm:^2.2.2" - dependenciesMeta: - keytar: - optional: true - bin: - vsce: vsce - checksum: 10/8c219a5359854c50be32b39852e95d98fed8d2e4bb07ee7f9e928593d0862702010c72f2660e46e9e8ec644e3cd59e1b174e6cef1bc6de3e853f4478bc931dad - languageName: node - linkType: hard - -"@vscode/vsce@npm:^2.24.0": +"@vscode/vsce@npm:^2.19.0, @vscode/vsce@npm:^2.23.0, @vscode/vsce@npm:^2.24.0": version: 2.24.0 resolution: "@vscode/vsce@npm:2.24.0" dependencies: @@ -4050,15 +4015,6 @@ __metadata: languageName: node linkType: hard -"find-yarn-workspace-root@npm:^2.0.0": - version: 2.0.0 - resolution: "find-yarn-workspace-root@npm:2.0.0" - dependencies: - micromatch: "npm:^4.0.2" - checksum: 10/7fa7942849eef4d5385ee96a0a9a5a9afe885836fd72ed6a4280312a38690afea275e7d09b343fe97daf0412d833f8ac4b78c17fc756386d9ebebf0759d707a7 - languageName: node - linkType: hard - "findup-sync@npm:^5.0.0": version: 5.0.0 resolution: "findup-sync@npm:5.0.0" @@ -6009,7 +5965,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": +"micromatch@npm:^4.0.0, micromatch@npm:^4.0.4": version: 4.0.5 resolution: "micromatch@npm:4.0.5" dependencies:

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%0Adh_+v9_;GTT6e)ZnIHMR91uzMZ=%k6OGCwCU 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

cBi$OA4@S#~!XfntEO(*-sK<_lF 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